@lvce-editor/extension-host-worker 8.16.0 → 8.18.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 (222) hide show
  1. package/dist/extension-api/index.js +1422 -0
  2. package/dist/extension-api/parts/Activation/Activation.js +13 -0
  3. package/dist/extension-api/parts/AssertCompletionProvider/AssertCompletionProvider.js +25 -0
  4. package/dist/extension-api/parts/AssertFormattingProvider/AssertFormattingProvider.js +22 -0
  5. package/dist/extension-api/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.js +19 -0
  6. package/dist/extension-api/parts/Command/Command.js +0 -0
  7. package/dist/extension-api/parts/CommandCallback/CommandCallback.js +0 -0
  8. package/dist/extension-api/parts/CommandMap/CommandMap.js +14 -0
  9. package/dist/extension-api/parts/CommandRegistry/CommandRegistry.js +53 -0
  10. package/dist/extension-api/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.js +0 -0
  11. package/dist/extension-api/parts/Completion/Completion.js +11 -0
  12. package/dist/extension-api/parts/CompletionItem/CompletionItem.js +0 -0
  13. package/dist/extension-api/parts/CompletionProvider/CompletionProvider.js +0 -0
  14. package/dist/extension-api/parts/CompletionProviderRegistry/CompletionProviderRegistry.js +78 -0
  15. package/dist/extension-api/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.js +0 -0
  16. package/dist/extension-api/parts/CompletionProviderState/CompletionProviderState.js +10 -0
  17. package/dist/extension-api/parts/CompletionTextDocument/CompletionTextDocument.js +0 -0
  18. package/dist/extension-api/parts/Disposable/Disposable.js +0 -0
  19. package/dist/extension-api/parts/ExecuteCommand/ExecuteCommand.js +7 -0
  20. package/dist/extension-api/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.js +5 -0
  21. package/dist/extension-api/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.js +4 -0
  22. package/dist/extension-api/parts/ExecuteHoverProvider/ExecuteHoverProvider.js +4 -0
  23. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +20 -0
  24. package/dist/extension-api/parts/ExtensionApiError/ExtensionApiError.js +9 -0
  25. package/dist/extension-api/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.js +15 -0
  26. package/dist/extension-api/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js +21 -0
  27. package/dist/extension-api/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.js +11 -0
  28. package/dist/extension-api/parts/Formatting/Formatting.js +10 -0
  29. package/dist/extension-api/parts/FormattingEdit/FormattingEdit.js +0 -0
  30. package/dist/extension-api/parts/FormattingProvider/FormattingProvider.js +0 -0
  31. package/dist/extension-api/parts/FormattingProviderRegistry/FormattingProviderRegistry.js +42 -0
  32. package/dist/extension-api/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.js +0 -0
  33. package/dist/extension-api/parts/FormattingProviderState/FormattingProviderState.js +10 -0
  34. package/dist/extension-api/parts/FormattingTextDocument/FormattingTextDocument.js +0 -0
  35. package/dist/extension-api/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js +4 -0
  36. package/dist/extension-api/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.js +4 -0
  37. package/dist/extension-api/parts/GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.js +4 -0
  38. package/dist/extension-api/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.js +4 -0
  39. package/dist/extension-api/parts/GetStatusBarItems/GetStatusBarItems.js +4 -0
  40. package/dist/extension-api/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js +17 -0
  41. package/dist/extension-api/parts/Hover/Hover.js +10 -0
  42. package/dist/extension-api/parts/HoverProvider/HoverProvider.js +0 -0
  43. package/dist/extension-api/parts/HoverProviderRegistry/HoverProviderRegistry.js +64 -0
  44. package/dist/extension-api/parts/HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.js +0 -0
  45. package/dist/extension-api/parts/HoverResult/HoverResult.js +0 -0
  46. package/dist/extension-api/parts/HoverTextDocument/HoverTextDocument.js +0 -0
  47. package/dist/extension-api/parts/NotifyStatusBarChange/NotifyStatusBarChange.js +7 -0
  48. package/dist/extension-api/parts/ProviderRegistry/ProviderRegistry.js +95 -0
  49. package/dist/extension-api/parts/QuickPick/QuickPick.js +7 -0
  50. package/dist/extension-api/parts/QuickPickItem/QuickPickItem.js +0 -0
  51. package/dist/extension-api/parts/RegisterCompletionProvider/RegisterCompletionProvider.js +4 -0
  52. package/dist/extension-api/parts/RegisterFormattingProvider/RegisterFormattingProvider.js +4 -0
  53. package/dist/extension-api/parts/RegisterHoverProvider/RegisterHoverProvider.js +4 -0
  54. package/dist/extension-api/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.js +4 -0
  55. package/dist/extension-api/parts/RegisteredCommand/RegisteredCommand.js +0 -0
  56. package/dist/extension-api/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.js +0 -0
  57. package/dist/extension-api/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.js +0 -0
  58. package/dist/extension-api/parts/RegisteredHoverProvider/RegisteredHoverProvider.js +0 -0
  59. package/dist/extension-api/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.js +0 -0
  60. package/dist/extension-api/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js +4 -0
  61. package/dist/extension-api/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.js +4 -0
  62. package/dist/extension-api/parts/ResetHoverProviderRegistry/ResetHoverProviderRegistry.js +4 -0
  63. package/dist/extension-api/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.js +4 -0
  64. package/dist/extension-api/parts/Rpc/Rpc.js +14 -0
  65. package/dist/extension-api/parts/ShowQuickPickOptions/ShowQuickPickOptions.js +0 -0
  66. package/dist/extension-api/parts/StatusBar/StatusBar.js +8 -0
  67. package/dist/extension-api/parts/StatusBarItem/StatusBarItem.js +0 -0
  68. package/dist/extension-api/parts/StatusBarItemProvider/StatusBarItemProvider.js +0 -0
  69. package/dist/extension-api/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.js +0 -0
  70. package/dist/extension-api/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js +52 -0
  71. package/dist/extension-api/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.js +0 -0
  72. package/dist/extension-api/parts/StatusBarItemProviderState/StatusBarItemProviderState.js +10 -0
  73. package/dist/extensionHostWorkerMain.js +1412 -1235
  74. package/extension-api/LICENSE +21 -0
  75. package/extension-api/README.md +23 -0
  76. package/extension-api/dist/index.d.ts +20 -0
  77. package/extension-api/dist/index.js +9 -0
  78. package/extension-api/dist/parts/Activation/Activation.d.ts +1 -0
  79. package/extension-api/dist/parts/Activation/Activation.js +10 -0
  80. package/extension-api/dist/parts/AssertCompletionProvider/AssertCompletionProvider.d.ts +2 -0
  81. package/extension-api/dist/parts/AssertCompletionProvider/AssertCompletionProvider.js +22 -0
  82. package/extension-api/dist/parts/AssertFormattingProvider/AssertFormattingProvider.d.ts +2 -0
  83. package/extension-api/dist/parts/AssertFormattingProvider/AssertFormattingProvider.js +19 -0
  84. package/extension-api/dist/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.d.ts +2 -0
  85. package/extension-api/dist/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.js +16 -0
  86. package/extension-api/dist/parts/Command/Command.d.ts +5 -0
  87. package/extension-api/dist/parts/Command/Command.js +1 -0
  88. package/extension-api/dist/parts/CommandCallback/CommandCallback.d.ts +1 -0
  89. package/extension-api/dist/parts/CommandCallback/CommandCallback.js +1 -0
  90. package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +13 -0
  91. package/extension-api/dist/parts/CommandMap/CommandMap.js +11 -0
  92. package/extension-api/dist/parts/CommandRegistry/CommandRegistry.d.ts +7 -0
  93. package/extension-api/dist/parts/CommandRegistry/CommandRegistry.js +47 -0
  94. package/extension-api/dist/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.d.ts +4 -0
  95. package/extension-api/dist/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.js +1 -0
  96. package/extension-api/dist/parts/Completion/Completion.d.ts +9 -0
  97. package/extension-api/dist/parts/Completion/Completion.js +4 -0
  98. package/extension-api/dist/parts/CompletionItem/CompletionItem.d.ts +3 -0
  99. package/extension-api/dist/parts/CompletionItem/CompletionItem.js +1 -0
  100. package/extension-api/dist/parts/CompletionProvider/CompletionProvider.d.ts +8 -0
  101. package/extension-api/dist/parts/CompletionProvider/CompletionProvider.js +1 -0
  102. package/extension-api/dist/parts/CompletionProviderRegistry/CompletionProviderRegistry.d.ts +13 -0
  103. package/extension-api/dist/parts/CompletionProviderRegistry/CompletionProviderRegistry.js +66 -0
  104. package/extension-api/dist/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.d.ts +4 -0
  105. package/extension-api/dist/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.js +1 -0
  106. package/extension-api/dist/parts/CompletionProviderState/CompletionProviderState.d.ts +1 -0
  107. package/extension-api/dist/parts/CompletionProviderState/CompletionProviderState.js +1 -0
  108. package/extension-api/dist/parts/CompletionTextDocument/CompletionTextDocument.d.ts +6 -0
  109. package/extension-api/dist/parts/CompletionTextDocument/CompletionTextDocument.js +1 -0
  110. package/extension-api/dist/parts/Disposable/Disposable.d.ts +3 -0
  111. package/extension-api/dist/parts/Disposable/Disposable.js +1 -0
  112. package/extension-api/dist/parts/ExecuteCommand/ExecuteCommand.d.ts +1 -0
  113. package/extension-api/dist/parts/ExecuteCommand/ExecuteCommand.js +4 -0
  114. package/extension-api/dist/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.d.ts +1 -0
  115. package/extension-api/dist/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.js +1 -0
  116. package/extension-api/dist/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.d.ts +1 -0
  117. package/extension-api/dist/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.js +1 -0
  118. package/extension-api/dist/parts/ExecuteHoverProvider/ExecuteHoverProvider.d.ts +1 -0
  119. package/extension-api/dist/parts/ExecuteHoverProvider/ExecuteHoverProvider.js +1 -0
  120. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +12 -0
  121. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +17 -0
  122. package/extension-api/dist/parts/ExtensionApiError/ExtensionApiError.d.ts +3 -0
  123. package/extension-api/dist/parts/ExtensionApiError/ExtensionApiError.js +6 -0
  124. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +14 -0
  125. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.js +12 -0
  126. package/extension-api/dist/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.d.ts +1 -0
  127. package/extension-api/dist/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js +18 -0
  128. package/extension-api/dist/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.d.ts +2 -0
  129. package/extension-api/dist/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.js +8 -0
  130. package/extension-api/dist/parts/Formatting/Formatting.d.ts +9 -0
  131. package/extension-api/dist/parts/Formatting/Formatting.js +4 -0
  132. package/extension-api/dist/parts/FormattingEdit/FormattingEdit.d.ts +5 -0
  133. package/extension-api/dist/parts/FormattingEdit/FormattingEdit.js +1 -0
  134. package/extension-api/dist/parts/FormattingProvider/FormattingProvider.d.ts +7 -0
  135. package/extension-api/dist/parts/FormattingProvider/FormattingProvider.js +1 -0
  136. package/extension-api/dist/parts/FormattingProviderRegistry/FormattingProviderRegistry.d.ts +12 -0
  137. package/extension-api/dist/parts/FormattingProviderRegistry/FormattingProviderRegistry.js +34 -0
  138. package/extension-api/dist/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.d.ts +4 -0
  139. package/extension-api/dist/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.js +1 -0
  140. package/extension-api/dist/parts/FormattingProviderState/FormattingProviderState.d.ts +1 -0
  141. package/extension-api/dist/parts/FormattingProviderState/FormattingProviderState.js +1 -0
  142. package/extension-api/dist/parts/FormattingTextDocument/FormattingTextDocument.d.ts +6 -0
  143. package/extension-api/dist/parts/FormattingTextDocument/FormattingTextDocument.js +1 -0
  144. package/extension-api/dist/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.d.ts +1 -0
  145. package/extension-api/dist/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js +1 -0
  146. package/extension-api/dist/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.d.ts +1 -0
  147. package/extension-api/dist/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.js +1 -0
  148. package/extension-api/dist/parts/GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.d.ts +1 -0
  149. package/extension-api/dist/parts/GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.js +1 -0
  150. package/extension-api/dist/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.d.ts +1 -0
  151. package/extension-api/dist/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.js +1 -0
  152. package/extension-api/dist/parts/GetStatusBarItems/GetStatusBarItems.d.ts +1 -0
  153. package/extension-api/dist/parts/GetStatusBarItems/GetStatusBarItems.js +1 -0
  154. package/extension-api/dist/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.d.ts +9 -0
  155. package/extension-api/dist/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js +10 -0
  156. package/extension-api/dist/parts/Hover/Hover.d.ts +9 -0
  157. package/extension-api/dist/parts/Hover/Hover.js +4 -0
  158. package/extension-api/dist/parts/HoverProvider/HoverProvider.d.ts +7 -0
  159. package/extension-api/dist/parts/HoverProvider/HoverProvider.js +1 -0
  160. package/extension-api/dist/parts/HoverProviderRegistry/HoverProviderRegistry.d.ts +12 -0
  161. package/extension-api/dist/parts/HoverProviderRegistry/HoverProviderRegistry.js +56 -0
  162. package/extension-api/dist/parts/HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.d.ts +4 -0
  163. package/extension-api/dist/parts/HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.js +1 -0
  164. package/extension-api/dist/parts/HoverResult/HoverResult.d.ts +6 -0
  165. package/extension-api/dist/parts/HoverResult/HoverResult.js +1 -0
  166. package/extension-api/dist/parts/HoverTextDocument/HoverTextDocument.d.ts +6 -0
  167. package/extension-api/dist/parts/HoverTextDocument/HoverTextDocument.js +1 -0
  168. package/extension-api/dist/parts/NotifyStatusBarChange/NotifyStatusBarChange.d.ts +1 -0
  169. package/extension-api/dist/parts/NotifyStatusBarChange/NotifyStatusBarChange.js +4 -0
  170. package/extension-api/dist/parts/ProviderRegistry/ProviderRegistry.d.ts +21 -0
  171. package/extension-api/dist/parts/ProviderRegistry/ProviderRegistry.js +86 -0
  172. package/extension-api/dist/parts/QuickPick/QuickPick.d.ts +2 -0
  173. package/extension-api/dist/parts/QuickPick/QuickPick.js +4 -0
  174. package/extension-api/dist/parts/QuickPickItem/QuickPickItem.d.ts +5 -0
  175. package/extension-api/dist/parts/QuickPickItem/QuickPickItem.js +1 -0
  176. package/extension-api/dist/parts/RegisterCompletionProvider/RegisterCompletionProvider.d.ts +1 -0
  177. package/extension-api/dist/parts/RegisterCompletionProvider/RegisterCompletionProvider.js +1 -0
  178. package/extension-api/dist/parts/RegisterFormattingProvider/RegisterFormattingProvider.d.ts +1 -0
  179. package/extension-api/dist/parts/RegisterFormattingProvider/RegisterFormattingProvider.js +1 -0
  180. package/extension-api/dist/parts/RegisterHoverProvider/RegisterHoverProvider.d.ts +1 -0
  181. package/extension-api/dist/parts/RegisterHoverProvider/RegisterHoverProvider.js +1 -0
  182. package/extension-api/dist/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.d.ts +1 -0
  183. package/extension-api/dist/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.js +1 -0
  184. package/extension-api/dist/parts/RegisteredCommand/RegisteredCommand.d.ts +4 -0
  185. package/extension-api/dist/parts/RegisteredCommand/RegisteredCommand.js +1 -0
  186. package/extension-api/dist/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.d.ts +8 -0
  187. package/extension-api/dist/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.js +1 -0
  188. package/extension-api/dist/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.d.ts +7 -0
  189. package/extension-api/dist/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.js +1 -0
  190. package/extension-api/dist/parts/RegisteredHoverProvider/RegisteredHoverProvider.d.ts +7 -0
  191. package/extension-api/dist/parts/RegisteredHoverProvider/RegisteredHoverProvider.js +1 -0
  192. package/extension-api/dist/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.d.ts +5 -0
  193. package/extension-api/dist/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.js +1 -0
  194. package/extension-api/dist/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.d.ts +1 -0
  195. package/extension-api/dist/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js +1 -0
  196. package/extension-api/dist/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.d.ts +1 -0
  197. package/extension-api/dist/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.js +1 -0
  198. package/extension-api/dist/parts/ResetHoverProviderRegistry/ResetHoverProviderRegistry.d.ts +1 -0
  199. package/extension-api/dist/parts/ResetHoverProviderRegistry/ResetHoverProviderRegistry.js +1 -0
  200. package/extension-api/dist/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.d.ts +1 -0
  201. package/extension-api/dist/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.js +1 -0
  202. package/extension-api/dist/parts/Rpc/Rpc.d.ts +3 -0
  203. package/extension-api/dist/parts/Rpc/Rpc.js +10 -0
  204. package/extension-api/dist/parts/ShowQuickPickOptions/ShowQuickPickOptions.d.ts +5 -0
  205. package/extension-api/dist/parts/ShowQuickPickOptions/ShowQuickPickOptions.js +1 -0
  206. package/extension-api/dist/parts/StatusBar/StatusBar.d.ts +8 -0
  207. package/extension-api/dist/parts/StatusBar/StatusBar.js +3 -0
  208. package/extension-api/dist/parts/StatusBarItem/StatusBarItem.d.ts +7 -0
  209. package/extension-api/dist/parts/StatusBarItem/StatusBarItem.js +1 -0
  210. package/extension-api/dist/parts/StatusBarItemProvider/StatusBarItemProvider.d.ts +5 -0
  211. package/extension-api/dist/parts/StatusBarItemProvider/StatusBarItemProvider.js +1 -0
  212. package/extension-api/dist/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.d.ts +4 -0
  213. package/extension-api/dist/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.js +1 -0
  214. package/extension-api/dist/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.d.ts +11 -0
  215. package/extension-api/dist/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js +44 -0
  216. package/extension-api/dist/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.d.ts +4 -0
  217. package/extension-api/dist/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.js +1 -0
  218. package/extension-api/dist/parts/StatusBarItemProviderState/StatusBarItemProviderState.d.ts +1 -0
  219. package/extension-api/dist/parts/StatusBarItemProviderState/StatusBarItemProviderState.js +1 -0
  220. package/extension-api/package.json +32 -0
  221. package/extension-api/tsconfig.tsbuildinfo +1 -0
  222. package/package.json +1 -1
@@ -19,31 +19,61 @@ const EditorCompletionType = {
19
19
  Variable
20
20
  };
21
21
 
22
- class DepecratedError extends Error {
23
- constructor(message) {
24
- super(message);
25
- this.name = 'DeprecatedError';
22
+ const normalizeLine = line => {
23
+ if (line.startsWith('Error: ')) {
24
+ return line.slice('Error: '.length);
26
25
  }
27
- }
28
-
29
- const getJson$1 = async url => {
30
- throw new DepecratedError(`vscode.getJson is deprecated, use createNodeRpc instead`);
26
+ if (line.startsWith('VError: ')) {
27
+ return line.slice('VError: '.length);
28
+ }
29
+ return line;
31
30
  };
32
-
33
- class NonError extends Error {
34
- name = 'NonError';
35
- constructor(message) {
36
- super(message);
31
+ const getCombinedMessage = (error, message) => {
32
+ const stringifiedError = normalizeLine(`${error}`);
33
+ if (message) {
34
+ return `${message}: ${stringifiedError}`;
37
35
  }
38
- }
39
-
40
- // ensureError based on https://github.com/sindresorhus/ensure-error/blob/main/index.ts (License MIT)
41
- const ensureError = input => {
42
- if (!(input instanceof Error)) {
43
- return new NonError(input);
36
+ return stringifiedError;
37
+ };
38
+ const NewLine$3 = '\n';
39
+ const getNewLineIndex$1 = (string, startIndex = undefined) => {
40
+ return string.indexOf(NewLine$3, startIndex);
41
+ };
42
+ const mergeStacks = (parent, child) => {
43
+ if (!child) {
44
+ return parent;
44
45
  }
45
- return input;
46
+ const parentNewLineIndex = getNewLineIndex$1(parent);
47
+ const childNewLineIndex = getNewLineIndex$1(child);
48
+ if (childNewLineIndex === -1) {
49
+ return parent;
50
+ }
51
+ const parentFirstLine = parent.slice(0, parentNewLineIndex);
52
+ const childRest = child.slice(childNewLineIndex);
53
+ const childFirstLine = normalizeLine(child.slice(0, childNewLineIndex));
54
+ if (parentFirstLine.includes(childFirstLine)) {
55
+ return parentFirstLine + childRest;
56
+ }
57
+ return child;
46
58
  };
59
+ class VError extends Error {
60
+ constructor(error, message) {
61
+ const combinedMessage = getCombinedMessage(error, message);
62
+ super(combinedMessage);
63
+ this.name = 'VError';
64
+ if (error instanceof Error) {
65
+ this.stack = mergeStacks(this.stack, error.stack);
66
+ }
67
+ if (error.codeFrame) {
68
+ // @ts-ignore
69
+ this.codeFrame = error.codeFrame;
70
+ }
71
+ if (error.code) {
72
+ // @ts-ignore
73
+ this.code = error.code;
74
+ }
75
+ }
76
+ }
47
77
 
48
78
  class AssertionError extends Error {
49
79
  constructor(message) {
@@ -112,1180 +142,515 @@ const fn = value => {
112
142
  }
113
143
  };
114
144
 
115
- const state$b = {
116
- /** @type{any[]} */
117
- onDidChangeTextDocumentListeners: [],
118
- /** @type{any[]} */
119
- onDidSaveTextDocumentListeners: [],
120
- /** @type{any[]} */
121
- onWillChangeEditorListeners: [],
122
- textDocuments: Object.create(null)
123
- };
124
- const setDocument = (textDocumentId, textDocument) => {
125
- state$b.textDocuments[textDocumentId] = textDocument;
126
- };
127
- const getDidOpenListeners = () => {
128
- return state$b.onDidSaveTextDocumentListeners;
145
+ const isMessagePort = value => {
146
+ return value && value instanceof MessagePort;
129
147
  };
130
- const getWillChangeListeners = () => {
131
- return state$b.onWillChangeEditorListeners;
148
+ const isMessagePortMain = value => {
149
+ return value && value.constructor && value.constructor.name === 'MessagePortMain';
132
150
  };
133
- const getDidChangeListeners = () => {
134
- return state$b.onDidChangeTextDocumentListeners;
151
+ const isOffscreenCanvas = value => {
152
+ return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
135
153
  };
136
- const getDocument = textDocumentId => {
137
- return state$b.textDocuments[textDocumentId];
154
+ const isInstanceOf = (value, constructorName) => {
155
+ return value?.constructor?.name === constructorName;
138
156
  };
139
-
140
- const getOffset$1 = (textDocument, position) => {
141
- let offset = 0;
142
- let rowIndex = 0;
143
- while (rowIndex++ < position.rowIndex) {
144
- const newLineIndex = textDocument.text.indexOf('\n', offset);
145
- offset = newLineIndex + 1;
146
- }
147
- offset += position.columnIndex;
148
- return offset;
157
+ const isSocket = value => {
158
+ return isInstanceOf(value, 'Socket');
149
159
  };
150
-
151
- // const toOffsetBasedEdit = (textDocument, documentEdit) => {
152
- // switch (documentEdit.type) {
153
- // case /* singleLineEdit */ 1: {
154
- // const offset = getOffset(textDocument, documentEdit)
155
- // return {
156
- // offset,
157
- // inserted: documentEdit.inserted,
158
- // deleted: documentEdit.deleted,
159
- // // type: /* singleLineEdit */ 1
160
- // }
161
- // }
162
- // case /* splice */ 2:
163
- // const offset = getOffset(textDocument, {
164
- // rowIndex: documentEdit.rowIndex,
165
- // columnIndex: textDocument.lines[documentEdit.rowIndex - 1].length,
166
- // })
167
- // const inserted = '\n' + documentEdit.newLines.join('\n')
168
- // return {
169
- // offset,
170
- // inserted,
171
- // deleted: 0 /* TODO */,
172
- // }
173
- // }
174
- // }
175
-
176
- // TODO incremental edits, don't send full text
177
- // export const applyEdit = (id, text, edits) => {
178
- // const textDocument = get(id)
179
- // textDocument.lines = text.split('\n')
180
- // const offsetBasedEdits = edits.map((edit) =>
181
- // toOffsetBasedEdit(textDocument, edit)
182
- // )
183
- // for (const listener of state.onDidChangeTextDocumentListeners) {
184
- // // TODO avoid extra object allocation
185
- // listener(textDocument, offsetBasedEdits)
186
- // }
187
- // }
188
-
189
- // TODO data oriented vs object oriented
190
- // data -> simpler, exposes internals, sometimes weird/long (vscode.TextDocument.getText(textDocument))
191
- // object oriented -> hides internals, banana problem (textDocument.getText())
192
-
193
- // TODO send to shared process, which sends it to renderer worker
194
- // renderer worker sends back the edit
195
- // export const applyEdit2 = (textDocument, edit) => {
196
- // if (VALIDATION_ENABLED) {
197
- // assert(typeof textDocument === 'object')
198
- // assert(textDocument !== null)
199
- // assert(typeof textDocument.id === 'number')
200
- // assert(textDocument.id > 0)
201
- // assert(typeof textDocument.getText === 'function')
202
- // assert(typeof edit === 'object')
203
- // assert(typeof edit.offset === 'number')
204
- // assert(typeof edit.inserted === 'string')
205
- // assert(typeof edit.deleted === 'number')
206
- // }
207
-
208
- // let rowIndex = 0
209
- // let offset = 0
210
- // const lines = textDocument.getText().split('\n')
211
- // while (offset < edit.offset) {
212
- // offset += lines[rowIndex++].length + 1
213
- // }
214
- // rowIndex--
215
- // offset -= lines[rowIndex].length + 1
216
- // const edit2 = {
217
- // rowIndex,
218
- // inserted: edit.inserted,
219
- // deleted: edit.deleted,
220
- // columnIndex: edit.offset - offset + edit.deleted,
221
- // type: 1,
222
- // }
223
-
224
- // // // TODO should be invoke and return boolean whether edit was applied or not
225
- // SharedProcess.send({
226
- // event: 'TextDocument.applyEdit',
227
- // args: [/* id */ textDocument.id, /* edits */ edit2],
228
- // })
229
- // }
230
-
231
- // export const create = (textDocumentId, languageId, content) => {
232
- // const textDocument = {
233
- // languageId,
234
- // lines: content.split('\n'),
235
- // }
236
- // state.textDocuments[textDocumentId] = textDocument
237
- // }
238
-
239
- // const createTextDocument = (uri, languageId, text) => {
240
- // if (VALIDATION_ENABLED) {
241
- // assert(typeof uri === 'string')
242
- // assert(typeof languageId === 'string')
243
- // assert(typeof text === 'string')
244
- // }
245
- // const state = {
246
- // /** @internal */
247
- // lines: text.split('\n'),
248
- // uri,
249
- // languageId,
250
- // getText() {
251
- // return state.lines.join('\n')
252
- // },
253
- // }
254
- // return state
255
- // }
256
-
257
- // export const sync = (documentId, languageId, text) => {
258
- // const textDocument = get(documentId)
259
- // if (!textDocument) {
260
- // console.warn(`textDocument is undefined ${languageId}`)
261
- // return
262
- // }
263
- // textDocument.languageId = languageId
264
- // textDocument.lines = text.split('\n')
265
- // // console.log('sync', JSON.stringify(text))
266
- // }
267
-
268
- const runListenerSafe = async (listener, ...args) => {
269
- try {
270
- await listener(...args);
271
- } catch (error) {
272
- // @ts-ignore
273
- if (error && error.message) {
274
- // @ts-ignore
275
- error.message = 'Failed to run open listener: ' + error.message;
160
+ const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
161
+ const isTransferrable = value => {
162
+ for (const fn of transferrables) {
163
+ if (fn(value)) {
164
+ return true;
276
165
  }
277
- console.error(error);
278
166
  }
167
+ return false;
279
168
  };
280
- const runListenersSafe = (listeners, ...args) => {
281
- for (const listener of listeners) {
282
- runListenerSafe(listener, ...args);
169
+ const walkValue = (value, transferrables, isTransferrable) => {
170
+ if (!value) {
171
+ return;
283
172
  }
284
- };
285
- const syncFull = (uri, textDocumentId, languageId, text) => {
286
- const textDocument = {
287
- documentId: textDocumentId,
288
- languageId,
289
- text,
290
- uri
291
- };
292
- setDocument(textDocumentId, textDocument);
293
- runListenersSafe(getDidOpenListeners(), textDocument);
294
- };
295
- const getSyntheticChanges = (textDocument, changes) => {
296
- // console.log({ textDocument, changes })
297
- object(textDocument);
298
- array(changes);
299
- const change = changes[0];
300
- const startOffset = getOffset$1(textDocument, change.start);
301
- const endOffset = getOffset$1(textDocument, change.end);
302
- const inserted = change.inserted.join('\n');
303
- const syntheticChanges = [{
304
- endOffset,
305
- inserted,
306
- startOffset
307
- }];
308
- return syntheticChanges;
309
- };
310
- const syncIncremental = (textDocumentId, changes) => {
311
- number(textDocumentId);
312
- array(changes);
313
- const textDocument = getDocument(textDocumentId);
314
- if (!textDocument) {
315
- console.warn(`sync not possible, no matching textDocument with id ${textDocumentId}`);
173
+ if (isTransferrable(value)) {
174
+ transferrables.push(value);
175
+ return;
176
+ }
177
+ if (Array.isArray(value)) {
178
+ for (const item of value) {
179
+ walkValue(item, transferrables, isTransferrable);
180
+ }
181
+ return;
182
+ }
183
+ if (typeof value === 'object') {
184
+ for (const property of Object.values(value)) {
185
+ walkValue(property, transferrables, isTransferrable);
186
+ }
316
187
  return;
317
188
  }
318
- const syntheticChanges = getSyntheticChanges(textDocument, changes);
319
- runListenersSafe(getWillChangeListeners(), textDocument, syntheticChanges);
320
- const syntheticChange = syntheticChanges[0];
321
- const oldText = textDocument.text;
322
- const before = oldText.slice(0, syntheticChange.startOffset);
323
- const after = oldText.slice(syntheticChange.endOffset);
324
- textDocument.text = before + syntheticChange.inserted + after;
325
- runListenersSafe(getDidChangeListeners(), textDocument, syntheticChanges);
326
- };
327
- const get$c = textDocumentId => {
328
- const textDocument = getDocument(textDocumentId);
329
- return textDocument;
330
189
  };
331
- const getText$2 = textDocument => {
332
- return textDocument.text;
190
+ const getTransferrables = value => {
191
+ const transferrables = [];
192
+ walkValue(value, transferrables, isTransferrable);
193
+ return transferrables;
333
194
  };
334
- const setLanguageId = (textDocumentId, languageId) => {
335
- const newTextDocument = {
336
- ...getDocument(textDocumentId),
337
- languageId
195
+ const attachEvents = that => {
196
+ const handleMessage = (...args) => {
197
+ const data = that.getData(...args);
198
+ that.dispatchEvent(new MessageEvent('message', {
199
+ data
200
+ }));
338
201
  };
339
- setDocument(textDocumentId, newTextDocument);
340
- runListenersSafe(getDidOpenListeners(), newTextDocument);
202
+ that.onMessage(handleMessage);
203
+ const handleClose = event => {
204
+ that.dispatchEvent(new Event('close'));
205
+ };
206
+ that.onClose(handleClose);
341
207
  };
342
-
343
- const E_NO_PROVIDER_FOUND = 'E_NO_PROVIDER_FOUND';
344
- const BABEL_PARSER_SYNTAX_ERROR = 'BABEL_PARSER_SYNTAX_ERROR';
345
-
346
- class NoProviderFoundError extends Error {
347
- constructor(message) {
348
- super(message);
349
- // @ts-ignore
350
- this.code = E_NO_PROVIDER_FOUND;
208
+ class Ipc extends EventTarget {
209
+ constructor(rawIpc) {
210
+ super();
211
+ this._rawIpc = rawIpc;
212
+ attachEvents(this);
351
213
  }
352
214
  }
353
-
354
- const getType$1 = value => {
355
- switch (typeof value) {
356
- case 'boolean':
357
- return 'boolean';
358
- case 'function':
359
- return 'function';
360
- case 'number':
361
- return 'number';
362
- case 'object':
363
- if (value === null) {
364
- return 'null';
365
- }
366
- if (Array.isArray(value)) {
367
- return 'array';
368
- }
369
- return 'object';
370
- case 'string':
371
- return 'string';
372
- case 'undefined':
373
- return 'undefined';
374
- default:
375
- return 'unknown';
376
- }
215
+ const E_INCOMPATIBLE_NATIVE_MODULE = 'E_INCOMPATIBLE_NATIVE_MODULE';
216
+ const E_MODULES_NOT_SUPPORTED_IN_ELECTRON = 'E_MODULES_NOT_SUPPORTED_IN_ELECTRON';
217
+ const ERR_MODULE_NOT_FOUND = 'ERR_MODULE_NOT_FOUND';
218
+ const NewLine$2 = '\n';
219
+ const joinLines$1 = lines => {
220
+ return lines.join(NewLine$2);
377
221
  };
378
-
379
- const validateResultObject = (result, resultShape) => {
380
- if (!resultShape.properties) {
381
- return undefined;
222
+ const RE_AT = /^\s+at/;
223
+ const RE_AT_PROMISE_INDEX = /^\s*at async Promise.all \(index \d+\)$/;
224
+ const isNormalStackLine = line => {
225
+ return RE_AT.test(line) && !RE_AT_PROMISE_INDEX.test(line);
226
+ };
227
+ const getDetails = lines => {
228
+ const index = lines.findIndex(isNormalStackLine);
229
+ if (index === -1) {
230
+ return {
231
+ actualMessage: joinLines$1(lines),
232
+ rest: []
233
+ };
382
234
  }
383
- for (const [key, value] of Object.entries(resultShape.properties)) {
384
- // @ts-ignore
385
- const expectedType = value.type;
386
- const actualType = getType$1(result[key]);
387
- if (expectedType !== actualType) {
388
- return `item.${key} must be of type ${expectedType}`;
235
+ let lastIndex = index - 1;
236
+ while (++lastIndex < lines.length) {
237
+ if (!isNormalStackLine(lines[lastIndex])) {
238
+ break;
389
239
  }
390
240
  }
391
- return undefined;
241
+ return {
242
+ actualMessage: lines[index - 1],
243
+ rest: lines.slice(index, lastIndex)
244
+ };
392
245
  };
393
- const validateResultArray = (result, resultShape) => {
394
- for (const item of result) {
395
- const actualType = getType$1(item);
396
- const expectedType = resultShape.items.type;
397
- if (actualType !== expectedType) {
398
- return `expected result to be of type ${expectedType} but was of type ${actualType}`;
399
- }
400
- }
401
- return undefined;
246
+ const splitLines$2 = lines => {
247
+ return lines.split(NewLine$2);
402
248
  };
403
- const getPreviewObject = item => {
404
- return 'object';
249
+ const RE_MESSAGE_CODE_BLOCK_START = /^Error: The module '.*'$/;
250
+ const RE_MESSAGE_CODE_BLOCK_END = /^\s* at/;
251
+ const isMessageCodeBlockStartIndex = line => {
252
+ return RE_MESSAGE_CODE_BLOCK_START.test(line);
405
253
  };
406
- const getPreviewArray = item => {
407
- if (item.length === 0) {
408
- return '[]';
409
- }
410
- return 'array';
254
+ const isMessageCodeBlockEndIndex = line => {
255
+ return RE_MESSAGE_CODE_BLOCK_END.test(line);
411
256
  };
412
- const getPreviewString = item => {
413
- return `"${item}"`;
257
+ const getMessageCodeBlock = stderr => {
258
+ const lines = splitLines$2(stderr);
259
+ const startIndex = lines.findIndex(isMessageCodeBlockStartIndex);
260
+ const endIndex = startIndex + lines.slice(startIndex).findIndex(isMessageCodeBlockEndIndex, startIndex);
261
+ const relevantLines = lines.slice(startIndex, endIndex);
262
+ const relevantMessage = relevantLines.join(' ').slice('Error: '.length);
263
+ return relevantMessage;
414
264
  };
415
- const getPreview = item => {
416
- const type = getType$1(item);
417
- switch (type) {
418
- case 'array':
419
- return getPreviewArray(item);
420
- case 'object':
421
- return getPreviewObject();
422
- case 'string':
423
- return getPreviewString(item);
424
- default:
425
- return `${item}`;
426
- }
265
+ const isModuleNotFoundMessage = line => {
266
+ return line.includes('[ERR_MODULE_NOT_FOUND]');
427
267
  };
428
- const validate = (item, schema) => {
429
- if (typeof schema === 'function') {
430
- return schema(item);
431
- }
432
- const actualType = getType$1(item);
433
- const expectedType = schema.type;
434
- if (actualType !== expectedType) {
435
- if (schema.allowUndefined && (item === undefined || item === null)) {
436
- return item;
437
- }
438
- const preview = getPreview(item);
439
- return `item must be of type ${expectedType} but is ${preview}`;
440
- }
441
- switch (actualType) {
442
- case 'array':
443
- return validateResultArray(item, schema);
444
- case 'object':
445
- return validateResultObject(item, schema);
446
- }
447
- // TODO use json schema to validate result
448
- return undefined;
268
+ const getModuleNotFoundError = stderr => {
269
+ const lines = splitLines$2(stderr);
270
+ const messageIndex = lines.findIndex(isModuleNotFoundMessage);
271
+ const message = lines[messageIndex];
272
+ return {
273
+ code: ERR_MODULE_NOT_FOUND,
274
+ message
275
+ };
449
276
  };
450
-
451
- const normalizeLine = line => {
452
- if (line.startsWith('Error: ')) {
453
- return line.slice('Error: '.length);
454
- }
455
- if (line.startsWith('VError: ')) {
456
- return line.slice('VError: '.length);
277
+ const isModuleNotFoundError = stderr => {
278
+ if (!stderr) {
279
+ return false;
457
280
  }
458
- return line;
281
+ return stderr.includes('ERR_MODULE_NOT_FOUND');
459
282
  };
460
- const getCombinedMessage = (error, message) => {
461
- const stringifiedError = normalizeLine(`${error}`);
462
- if (message) {
463
- return `${message}: ${stringifiedError}`;
283
+ const isModulesSyntaxError = stderr => {
284
+ if (!stderr) {
285
+ return false;
464
286
  }
465
- return stringifiedError;
287
+ return stderr.includes('SyntaxError: Cannot use import statement outside a module');
466
288
  };
467
- const NewLine$3 = '\n';
468
- const getNewLineIndex$1 = (string, startIndex = undefined) => {
469
- return string.indexOf(NewLine$3, startIndex);
289
+ const RE_NATIVE_MODULE_ERROR = /^innerError Error: Cannot find module '.*.node'/;
290
+ const RE_NATIVE_MODULE_ERROR_2 = /was compiled against a different Node.js version/;
291
+ const isUnhelpfulNativeModuleError = stderr => {
292
+ return RE_NATIVE_MODULE_ERROR.test(stderr) && RE_NATIVE_MODULE_ERROR_2.test(stderr);
470
293
  };
471
- const mergeStacks = (parent, child) => {
472
- if (!child) {
473
- return parent;
474
- }
475
- const parentNewLineIndex = getNewLineIndex$1(parent);
476
- const childNewLineIndex = getNewLineIndex$1(child);
477
- if (childNewLineIndex === -1) {
478
- return parent;
294
+ const getNativeModuleErrorMessage = stderr => {
295
+ const message = getMessageCodeBlock(stderr);
296
+ return {
297
+ code: E_INCOMPATIBLE_NATIVE_MODULE,
298
+ message: `Incompatible native node module: ${message}`
299
+ };
300
+ };
301
+ const getModuleSyntaxError = () => {
302
+ return {
303
+ code: E_MODULES_NOT_SUPPORTED_IN_ELECTRON,
304
+ message: `ES Modules are not supported in electron`
305
+ };
306
+ };
307
+ const getHelpfulChildProcessError = (stdout, stderr) => {
308
+ if (isUnhelpfulNativeModuleError(stderr)) {
309
+ return getNativeModuleErrorMessage(stderr);
479
310
  }
480
- const parentFirstLine = parent.slice(0, parentNewLineIndex);
481
- const childRest = child.slice(childNewLineIndex);
482
- const childFirstLine = normalizeLine(child.slice(0, childNewLineIndex));
483
- if (parentFirstLine.includes(childFirstLine)) {
484
- return parentFirstLine + childRest;
311
+ if (isModulesSyntaxError(stderr)) {
312
+ return getModuleSyntaxError();
485
313
  }
486
- return child;
314
+ if (isModuleNotFoundError(stderr)) {
315
+ return getModuleNotFoundError(stderr);
316
+ }
317
+ const lines = splitLines$2(stderr);
318
+ const {
319
+ actualMessage,
320
+ rest
321
+ } = getDetails(lines);
322
+ return {
323
+ code: '',
324
+ message: actualMessage,
325
+ stack: rest
326
+ };
487
327
  };
488
- class VError extends Error {
489
- constructor(error, message) {
490
- const combinedMessage = getCombinedMessage(error, message);
491
- super(combinedMessage);
492
- this.name = 'VError';
493
- if (error instanceof Error) {
494
- this.stack = mergeStacks(this.stack, error.stack);
495
- }
496
- if (error.codeFrame) {
328
+ class IpcError extends VError {
329
+ // @ts-ignore
330
+ constructor(betterMessage, stdout = '', stderr = '') {
331
+ if (stdout || stderr) {
497
332
  // @ts-ignore
498
- this.codeFrame = error.codeFrame;
499
- }
500
- if (error.code) {
333
+ const {
334
+ code,
335
+ message,
336
+ stack
337
+ } = getHelpfulChildProcessError(stdout, stderr);
338
+ const cause = new Error(message);
501
339
  // @ts-ignore
502
- this.code = error.code;
340
+ cause.code = code;
341
+ cause.stack = stack;
342
+ super(cause, betterMessage);
343
+ } else {
344
+ super(betterMessage);
503
345
  }
346
+ // @ts-ignore
347
+ this.name = 'IpcError';
348
+ // @ts-ignore
349
+ this.stdout = stdout;
350
+ // @ts-ignore
351
+ this.stderr = stderr;
504
352
  }
505
353
  }
506
-
507
- const RE_UPPERCASE_LETTER = /[A-Z]/g;
508
- const RE_PROPERTY = /item\..*must be of type/;
509
- const spaceOut = camelCaseWord => {
510
- return camelCaseWord.replaceAll(RE_UPPERCASE_LETTER, (character, index) => {
511
- if (index === 0) {
512
- return character.toLowerCase();
513
- }
514
- return ' ' + character.toLowerCase();
515
- });
354
+ const readyMessage = 'ready';
355
+ const getData$2 = event => {
356
+ return event.data;
516
357
  };
517
- const toCamelCase = string => {
518
- return string[0].toLowerCase() + string.slice(1);
358
+ const listen$8 = ({
359
+ port
360
+ }) => {
361
+ return port;
519
362
  };
520
- const improveValidationErrorPostMessage = (validationError, camelCaseName) => {
521
- if (validationError.startsWith('item must be of type')) {
522
- return validationError.replace('item', camelCaseName);
363
+ const signal$9 = port => {
364
+ port.postMessage(readyMessage);
365
+ };
366
+ class IpcChildWithMessagePort extends Ipc {
367
+ getData(event) {
368
+ return getData$2(event);
523
369
  }
524
- if (validationError.startsWith('expected result to be')) {
525
- return validationError.replace('result', `${camelCaseName} item`);
370
+ send(message) {
371
+ this._rawIpc.postMessage(message);
526
372
  }
527
- if (RE_PROPERTY.test(validationError)) {
528
- return validationError.replace('item', camelCaseName);
373
+ sendAndTransfer(message) {
374
+ const transfer = getTransferrables(message);
375
+ this._rawIpc.postMessage(message, transfer);
529
376
  }
530
- return validationError;
377
+ dispose() {
378
+ // ignore
379
+ }
380
+ onClose(callback) {
381
+ // ignore
382
+ }
383
+ onMessage(callback) {
384
+ this._rawIpc.addEventListener('message', callback);
385
+ this._rawIpc.start();
386
+ }
387
+ }
388
+ const wrap$g = port => {
389
+ return new IpcChildWithMessagePort(port);
531
390
  };
532
- const improveValidationError = (name, validationError) => {
533
- const camelCaseName = toCamelCase(name);
534
- const spacedOutName = spaceOut(name);
535
- const pre = `invalid ${spacedOutName} result`;
536
- const post = improveValidationErrorPostMessage(validationError, camelCaseName);
537
- return pre + ': ' + post;
391
+ const IpcChildWithMessagePort$1 = {
392
+ __proto__: null,
393
+ listen: listen$8,
394
+ signal: signal$9,
395
+ wrap: wrap$g
538
396
  };
539
- const registerMethod = ({
540
- context,
541
- methodName,
542
- name,
543
- providers,
544
- resultShape,
545
- returnUndefinedWhenNoProviderFound
546
- }) => {
547
- context[`execute${name}Provider`] = async function (textDocumentId, ...params) {
548
- try {
549
- const textDocument = get$c(textDocumentId);
550
- if (!textDocument) {
551
- throw new Error(`textDocument with id ${textDocumentId} not found`);
552
- }
553
- const provider = providers[textDocument.languageId];
554
- if (!provider) {
555
- if (returnUndefinedWhenNoProviderFound) {
556
- return undefined;
557
- }
558
- const spacedOutName = spaceOut(name);
559
- throw new NoProviderFoundError(`No ${spacedOutName} provider found for ${textDocument.languageId}`);
560
- }
561
- const result = await provider[methodName](textDocument, ...params);
562
- const error = validate(result, resultShape);
563
- if (error) {
564
- const improvedError = improveValidationError(name, error);
565
- throw new VError(improvedError);
566
- }
567
- return result;
568
- } catch (error) {
569
- const actualError = ensureError(error);
570
- const spacedOutName = spaceOut(name);
571
- if (actualError && actualError.message) {
572
- if (actualError.message === 'provider[methodName] is not a function') {
573
- const camelCaseName = toCamelCase(name);
574
- throw new VError(`Failed to execute ${spacedOutName} provider: VError: ${camelCaseName}Provider.${methodName} is not a function`);
575
- }
576
- throw new VError(actualError, `Failed to execute ${spacedOutName} provider`);
577
- }
578
- throw actualError;
579
- }
580
- };
397
+ const listen$7 = () => {
398
+ // @ts-ignore
399
+ if (typeof WorkerGlobalScope === 'undefined') {
400
+ throw new TypeError('module is not in web worker scope');
401
+ }
402
+ return globalThis;
581
403
  };
582
- const create$k = ({
583
- additionalMethodNames = [],
584
- executeKey = '',
585
- name,
586
- resultShape,
587
- returnUndefinedWhenNoProviderFound = false
588
- }) => {
589
- const multipleResults = resultShape.type === 'array';
590
- const methodName = executeKey || (multipleResults ? `provide${name}s` : `provide${name}`);
591
- const providers = Object.create(null);
592
- const context = {
593
- [`register${name}Provider`](provider) {
594
- providers[provider.languageId] = provider;
595
- },
596
- getProvider(languageId) {
597
- return providers[languageId];
598
- },
599
- reset() {
600
- for (const key in providers) {
601
- delete providers[key];
602
- }
603
- }
604
- };
605
- registerMethod({
606
- context,
607
- methodName,
608
- name,
609
- providers,
610
- resultShape,
611
- returnUndefinedWhenNoProviderFound
612
- });
613
- for (const method of additionalMethodNames) {
404
+ const signal$8 = global => {
405
+ global.postMessage(readyMessage);
406
+ };
407
+ class IpcChildWithModuleWorker extends Ipc {
408
+ getData(event) {
409
+ return getData$2(event);
410
+ }
411
+ send(message) {
614
412
  // @ts-ignore
615
- registerMethod({
616
- context,
617
- providers,
618
- ...method
619
- });
413
+ this._rawIpc.postMessage(message);
620
414
  }
621
- const finalContext = {
622
- ...context
623
- };
624
- return finalContext;
625
- };
626
-
627
- const Array$1 = 'array';
628
- const Boolean$1 = 'boolean';
629
- const Number = 'number';
630
- const Object$1 = 'object';
631
- const String$1 = 'string';
632
-
633
- const {
634
- executeBraceCompletionProvider,
635
- registerBraceCompletionProvider} = create$k({
636
- name: 'BraceCompletion',
637
- resultShape: {
638
- type: Boolean$1
415
+ sendAndTransfer(message) {
416
+ const transfer = getTransferrables(message);
417
+ // @ts-ignore
418
+ this._rawIpc.postMessage(message, transfer);
639
419
  }
640
- });
641
-
642
- const {
643
- executeClosingTagProvider,
644
- registerClosingTagProvider
645
- } = create$k({
646
- name: 'ClosingTag',
647
- resultShape: {
648
- allowUndefined: true,
649
- type: Object$1
650
- },
651
- returnUndefinedWhenNoProviderFound: true
652
- });
653
-
654
- const {
655
- executeCodeActionProvider,
656
- registerCodeActionProvider
657
- } = create$k({
658
- name: 'CodeAction',
659
- resultShape: {
660
- items: {
661
- type: Object$1
662
- },
663
- type: Array$1
420
+ dispose() {
421
+ // ignore
664
422
  }
665
- });
666
- const isOrganizeImports = action => {
667
- return action.kind === 'source.organizeImports';
668
- };
669
-
670
- // TODO handle case when multiple organize imports providers are registered
671
- const executeOrganizeImports = async uid => {
672
- const actions = await executeCodeActionProvider(uid);
673
- // @ts-ignore
674
- if (!actions || actions.length === 0) {
675
- return [];
423
+ onClose(callback) {
424
+ // ignore
676
425
  }
677
- // @ts-ignore
678
- const organizeImportsAction = actions.find(isOrganizeImports);
679
- if (!organizeImportsAction) {
680
- return [];
426
+ onMessage(callback) {
427
+ this._rawIpc.addEventListener('message', callback);
681
428
  }
682
- const textDocument = get$c(uid);
683
- const edits = await organizeImportsAction.execute(textDocument);
684
- return edits;
429
+ }
430
+ const wrap$f = global => {
431
+ return new IpcChildWithModuleWorker(global);
685
432
  };
686
-
687
- const state$a = {
688
- commands: Object.create(null)
433
+ const waitForFirstMessage = async port => {
434
+ const {
435
+ promise,
436
+ resolve
437
+ } = Promise.withResolvers();
438
+ port.addEventListener('message', resolve, {
439
+ once: true
440
+ });
441
+ const event = await promise;
442
+ // @ts-ignore
443
+ return event.data;
689
444
  };
690
- const getCommandDisplay = command => {
691
- if (command && command.id && typeof command.id === 'string') {
692
- return ` ${command.id}`;
445
+ const listen$6 = async () => {
446
+ const parentIpcRaw = listen$7();
447
+ signal$8(parentIpcRaw);
448
+ const parentIpc = wrap$f(parentIpcRaw);
449
+ const firstMessage = await waitForFirstMessage(parentIpc);
450
+ if (firstMessage.method !== 'initialize') {
451
+ throw new IpcError('unexpected first message');
693
452
  }
694
- return '';
695
- };
696
- const registerCommand = command => {
697
- try {
698
- if (!command) {
699
- if (command === null) {
700
- throw new Error(`command is null`);
701
- }
702
- throw new Error('command is not defined');
703
- }
704
- if (!command.id) {
705
- throw new Error('command is missing id');
706
- }
707
- if (!command.execute) {
708
- throw new Error('command is missing execute function');
709
- }
710
- if (command.id in state$a.commands) {
711
- throw new Error(`command cannot be registered multiple times`);
712
- }
713
- state$a.commands[command.id] = command;
714
- } catch (error) {
715
- const commandDisplayId = getCommandDisplay(command);
716
- throw new VError(error, `Failed to register command${commandDisplayId}`);
453
+ const type = firstMessage.params[0];
454
+ if (type === 'message-port') {
455
+ parentIpc.send({
456
+ id: firstMessage.id,
457
+ jsonrpc: '2.0',
458
+ result: null
459
+ });
460
+ parentIpc.dispose();
461
+ const port = firstMessage.params[1];
462
+ return port;
717
463
  }
464
+ return globalThis;
718
465
  };
719
- const executeCommand$1 = async (id, ...args) => {
720
- try {
721
- const command = state$a.commands[id];
722
- if (!command) {
723
- throw new Error(`command ${id} not found`);
724
- }
725
- const results = await command.execute(...args);
726
- return results;
727
- } catch (error) {
728
- // @ts-ignore
729
- if (error && error.isExpected) {
730
- throw error;
731
- }
732
- throw new VError(error, 'Failed to execute command');
466
+ class IpcChildWithModuleWorkerAndMessagePort extends Ipc {
467
+ getData(event) {
468
+ return getData$2(event);
733
469
  }
734
- };
735
-
736
- const {
737
- executeCommentProvider,
738
- registerCommentProvider
739
- } = create$k({
740
- name: 'Comment',
741
- resultShape() {
742
- return '';
470
+ send(message) {
471
+ this._rawIpc.postMessage(message);
743
472
  }
744
- });
745
-
746
- const {
747
- executeCompletionProvider,
748
- executeresolveCompletionItemProvider,
749
- registerCompletionProvider
750
- } = create$k({
751
- additionalMethodNames: [
752
- // @ts-ignore
753
- {
754
- methodName: 'resolveCompletionItem',
755
- name: 'resolveCompletionItem',
756
- resultShape: {
757
- allowUndefined: true,
758
- type: Object$1
473
+ sendAndTransfer(message) {
474
+ const transfer = getTransferrables(message);
475
+ this._rawIpc.postMessage(message, transfer);
476
+ }
477
+ dispose() {
478
+ if (this._rawIpc.close) {
479
+ this._rawIpc.close();
759
480
  }
760
- }],
761
- name: 'Completion',
762
- resultShape: {
763
- items: {
764
- type: Object$1
765
- },
766
- type: Array$1
767
481
  }
768
- });
769
-
770
- const state$9 = {
771
- configuration: Object.create(null)
772
- };
773
- const getConfiguration = key => {
774
- return state$9.configuration[key] ?? '';
775
- };
776
- const setConfigurations = preferences => {
777
- state$9.configuration = preferences;
778
- };
779
-
780
- const isMessagePort = value => {
781
- return value && value instanceof MessagePort;
782
- };
783
- const isMessagePortMain = value => {
784
- return value && value.constructor && value.constructor.name === 'MessagePortMain';
482
+ onClose(callback) {
483
+ // ignore
484
+ }
485
+ onMessage(callback) {
486
+ this._rawIpc.addEventListener('message', callback);
487
+ this._rawIpc.start();
488
+ }
489
+ }
490
+ const wrap$e = port => {
491
+ return new IpcChildWithModuleWorkerAndMessagePort(port);
785
492
  };
786
- const isOffscreenCanvas = value => {
787
- return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
493
+ const IpcChildWithModuleWorkerAndMessagePort$1 = {
494
+ __proto__: null,
495
+ listen: listen$6,
496
+ wrap: wrap$e
788
497
  };
789
- const isInstanceOf = (value, constructorName) => {
790
- return value?.constructor?.name === constructorName;
498
+ const Error$3 = 1;
499
+ const Open = 2;
500
+ const Close = 3;
501
+ const addListener = (emitter, type, callback) => {
502
+ if ('addEventListener' in emitter) {
503
+ emitter.addEventListener(type, callback);
504
+ } else {
505
+ emitter.on(type, callback);
506
+ }
791
507
  };
792
- const isSocket = value => {
793
- return isInstanceOf(value, 'Socket');
508
+ const removeListener = (emitter, type, callback) => {
509
+ if ('removeEventListener' in emitter) {
510
+ emitter.removeEventListener(type, callback);
511
+ } else {
512
+ emitter.off(type, callback);
513
+ }
794
514
  };
795
- const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
796
- const isTransferrable = value => {
797
- for (const fn of transferrables) {
798
- if (fn(value)) {
799
- return true;
515
+ const getFirstEvent = (eventEmitter, eventMap) => {
516
+ const {
517
+ promise,
518
+ resolve
519
+ } = Promise.withResolvers();
520
+ const listenerMap = Object.create(null);
521
+ const cleanup = value => {
522
+ for (const event of Object.keys(eventMap)) {
523
+ removeListener(eventEmitter, event, listenerMap[event]);
800
524
  }
525
+ resolve(value);
526
+ };
527
+ for (const [event, type] of Object.entries(eventMap)) {
528
+ const listener = event => {
529
+ cleanup({
530
+ event,
531
+ type
532
+ });
533
+ };
534
+ addListener(eventEmitter, event, listener);
535
+ listenerMap[event] = listener;
801
536
  }
802
- return false;
537
+ return promise;
803
538
  };
804
- const walkValue = (value, transferrables, isTransferrable) => {
805
- if (!value) {
806
- return;
807
- }
808
- if (isTransferrable(value)) {
809
- transferrables.push(value);
810
- return;
539
+ const Message$1 = 3;
540
+ const create$5$1 = async ({
541
+ isMessagePortOpen,
542
+ messagePort
543
+ }) => {
544
+ if (!isMessagePort(messagePort)) {
545
+ throw new IpcError('port must be of type MessagePort');
811
546
  }
812
- if (Array.isArray(value)) {
813
- for (const item of value) {
814
- walkValue(item, transferrables, isTransferrable);
815
- }
816
- return;
547
+ if (isMessagePortOpen) {
548
+ return messagePort;
817
549
  }
818
- if (typeof value === 'object') {
819
- for (const property of Object.values(value)) {
820
- walkValue(property, transferrables, isTransferrable);
821
- }
822
- return;
550
+ const eventPromise = getFirstEvent(messagePort, {
551
+ message: Message$1
552
+ });
553
+ messagePort.start();
554
+ const {
555
+ event,
556
+ type
557
+ } = await eventPromise;
558
+ if (type !== Message$1) {
559
+ throw new IpcError('Failed to wait for ipc message');
823
560
  }
824
- };
825
- const getTransferrables = value => {
826
- const transferrables = [];
827
- walkValue(value, transferrables, isTransferrable);
828
- return transferrables;
829
- };
830
- const attachEvents = that => {
831
- const handleMessage = (...args) => {
832
- const data = that.getData(...args);
833
- that.dispatchEvent(new MessageEvent('message', {
834
- data
835
- }));
836
- };
837
- that.onMessage(handleMessage);
838
- const handleClose = event => {
839
- that.dispatchEvent(new Event('close'));
840
- };
841
- that.onClose(handleClose);
842
- };
843
- class Ipc extends EventTarget {
844
- constructor(rawIpc) {
845
- super();
846
- this._rawIpc = rawIpc;
847
- attachEvents(this);
561
+ if (event.data !== readyMessage) {
562
+ throw new IpcError('unexpected first message');
848
563
  }
849
- }
850
- const E_INCOMPATIBLE_NATIVE_MODULE = 'E_INCOMPATIBLE_NATIVE_MODULE';
851
- const E_MODULES_NOT_SUPPORTED_IN_ELECTRON = 'E_MODULES_NOT_SUPPORTED_IN_ELECTRON';
852
- const ERR_MODULE_NOT_FOUND = 'ERR_MODULE_NOT_FOUND';
853
- const NewLine$2 = '\n';
854
- const joinLines$1 = lines => {
855
- return lines.join(NewLine$2);
564
+ return messagePort;
856
565
  };
857
- const RE_AT = /^\s+at/;
858
- const RE_AT_PROMISE_INDEX = /^\s*at async Promise.all \(index \d+\)$/;
859
- const isNormalStackLine = line => {
860
- return RE_AT.test(line) && !RE_AT_PROMISE_INDEX.test(line);
566
+ const signal$1 = messagePort => {
567
+ messagePort.start();
861
568
  };
862
- const getDetails = lines => {
863
- const index = lines.findIndex(isNormalStackLine);
864
- if (index === -1) {
865
- return {
866
- actualMessage: joinLines$1(lines),
867
- rest: []
868
- };
569
+ class IpcParentWithMessagePort extends Ipc {
570
+ getData = getData$2;
571
+ send(message) {
572
+ this._rawIpc.postMessage(message);
869
573
  }
870
- let lastIndex = index - 1;
871
- while (++lastIndex < lines.length) {
872
- if (!isNormalStackLine(lines[lastIndex])) {
873
- break;
874
- }
574
+ sendAndTransfer(message) {
575
+ const transfer = getTransferrables(message);
576
+ this._rawIpc.postMessage(message, transfer);
875
577
  }
876
- return {
877
- actualMessage: lines[index - 1],
878
- rest: lines.slice(index, lastIndex)
879
- };
880
- };
881
- const splitLines$2 = lines => {
882
- return lines.split(NewLine$2);
883
- };
884
- const RE_MESSAGE_CODE_BLOCK_START = /^Error: The module '.*'$/;
885
- const RE_MESSAGE_CODE_BLOCK_END = /^\s* at/;
886
- const isMessageCodeBlockStartIndex = line => {
887
- return RE_MESSAGE_CODE_BLOCK_START.test(line);
888
- };
889
- const isMessageCodeBlockEndIndex = line => {
890
- return RE_MESSAGE_CODE_BLOCK_END.test(line);
891
- };
892
- const getMessageCodeBlock = stderr => {
893
- const lines = splitLines$2(stderr);
894
- const startIndex = lines.findIndex(isMessageCodeBlockStartIndex);
895
- const endIndex = startIndex + lines.slice(startIndex).findIndex(isMessageCodeBlockEndIndex, startIndex);
896
- const relevantLines = lines.slice(startIndex, endIndex);
897
- const relevantMessage = relevantLines.join(' ').slice('Error: '.length);
898
- return relevantMessage;
899
- };
900
- const isModuleNotFoundMessage = line => {
901
- return line.includes('[ERR_MODULE_NOT_FOUND]');
902
- };
903
- const getModuleNotFoundError = stderr => {
904
- const lines = splitLines$2(stderr);
905
- const messageIndex = lines.findIndex(isModuleNotFoundMessage);
906
- const message = lines[messageIndex];
907
- return {
908
- code: ERR_MODULE_NOT_FOUND,
909
- message
910
- };
911
- };
912
- const isModuleNotFoundError = stderr => {
913
- if (!stderr) {
914
- return false;
578
+ dispose() {
579
+ this._rawIpc.close();
915
580
  }
916
- return stderr.includes('ERR_MODULE_NOT_FOUND');
917
- };
918
- const isModulesSyntaxError = stderr => {
919
- if (!stderr) {
920
- return false;
581
+ onMessage(callback) {
582
+ this._rawIpc.addEventListener('message', callback);
921
583
  }
922
- return stderr.includes('SyntaxError: Cannot use import statement outside a module');
923
- };
924
- const RE_NATIVE_MODULE_ERROR = /^innerError Error: Cannot find module '.*.node'/;
925
- const RE_NATIVE_MODULE_ERROR_2 = /was compiled against a different Node.js version/;
926
- const isUnhelpfulNativeModuleError = stderr => {
927
- return RE_NATIVE_MODULE_ERROR.test(stderr) && RE_NATIVE_MODULE_ERROR_2.test(stderr);
584
+ onClose(callback) {}
585
+ }
586
+ const wrap$5 = messagePort => {
587
+ return new IpcParentWithMessagePort(messagePort);
928
588
  };
929
- const getNativeModuleErrorMessage = stderr => {
930
- const message = getMessageCodeBlock(stderr);
931
- return {
932
- code: E_INCOMPATIBLE_NATIVE_MODULE,
933
- message: `Incompatible native node module: ${message}`
934
- };
589
+ const IpcParentWithMessagePort$1 = {
590
+ __proto__: null,
591
+ create: create$5$1,
592
+ signal: signal$1,
593
+ wrap: wrap$5
935
594
  };
936
- const getModuleSyntaxError = () => {
937
- return {
938
- code: E_MODULES_NOT_SUPPORTED_IN_ELECTRON,
939
- message: `ES Modules are not supported in electron`
940
- };
595
+ const stringifyCompact = value => {
596
+ return JSON.stringify(value);
941
597
  };
942
- const getHelpfulChildProcessError = (stdout, stderr) => {
943
- if (isUnhelpfulNativeModuleError(stderr)) {
944
- return getNativeModuleErrorMessage(stderr);
945
- }
946
- if (isModulesSyntaxError(stderr)) {
947
- return getModuleSyntaxError();
598
+ const parse$1 = content => {
599
+ if (content === 'undefined') {
600
+ return null;
948
601
  }
949
- if (isModuleNotFoundError(stderr)) {
950
- return getModuleNotFoundError(stderr);
602
+ try {
603
+ return JSON.parse(content);
604
+ } catch (error) {
605
+ throw new VError(error, 'failed to parse json');
951
606
  }
952
- const lines = splitLines$2(stderr);
953
- const {
954
- actualMessage,
955
- rest
956
- } = getDetails(lines);
957
- return {
958
- code: '',
959
- message: actualMessage,
960
- stack: rest
961
- };
962
607
  };
963
- class IpcError extends VError {
964
- // @ts-ignore
965
- constructor(betterMessage, stdout = '', stderr = '') {
966
- if (stdout || stderr) {
967
- // @ts-ignore
968
- const {
969
- code,
970
- message,
971
- stack
972
- } = getHelpfulChildProcessError(stdout, stderr);
973
- const cause = new Error(message);
974
- // @ts-ignore
975
- cause.code = code;
976
- cause.stack = stack;
977
- super(cause, betterMessage);
978
- } else {
979
- super(betterMessage);
980
- }
981
- // @ts-ignore
982
- this.name = 'IpcError';
983
- // @ts-ignore
984
- this.stdout = stdout;
985
- // @ts-ignore
986
- this.stderr = stderr;
987
- }
988
- }
989
- const readyMessage = 'ready';
990
- const getData$2 = event => {
991
- return event.data;
608
+ const waitForWebSocketToBeOpen = webSocket => {
609
+ return getFirstEvent(webSocket, {
610
+ close: Close,
611
+ error: Error$3,
612
+ open: Open
613
+ });
992
614
  };
993
- const listen$8 = ({
994
- port
615
+ const create$k = async ({
616
+ webSocket
995
617
  }) => {
996
- return port;
997
- };
998
- const signal$9 = port => {
999
- port.postMessage(readyMessage);
618
+ const firstWebSocketEvent = await waitForWebSocketToBeOpen(webSocket);
619
+ if (firstWebSocketEvent.type === Error$3) {
620
+ throw new IpcError(`WebSocket connection error`);
621
+ }
622
+ if (firstWebSocketEvent.type === Close) {
623
+ throw new IpcError('Websocket connection was immediately closed');
624
+ }
625
+ return webSocket;
1000
626
  };
1001
- class IpcChildWithMessagePort extends Ipc {
627
+ let IpcParentWithWebSocket$1 = class IpcParentWithWebSocket extends Ipc {
1002
628
  getData(event) {
1003
- return getData$2(event);
629
+ return parse$1(event.data);
1004
630
  }
1005
631
  send(message) {
1006
- this._rawIpc.postMessage(message);
632
+ this._rawIpc.send(stringifyCompact(message));
1007
633
  }
1008
634
  sendAndTransfer(message) {
1009
- const transfer = getTransferrables(message);
1010
- this._rawIpc.postMessage(message, transfer);
635
+ throw new Error('sendAndTransfer not supported');
1011
636
  }
1012
637
  dispose() {
1013
- // ignore
638
+ this._rawIpc.close();
1014
639
  }
1015
640
  onClose(callback) {
1016
- // ignore
641
+ this._rawIpc.addEventListener('close', callback);
1017
642
  }
1018
643
  onMessage(callback) {
1019
644
  this._rawIpc.addEventListener('message', callback);
1020
- this._rawIpc.start();
1021
645
  }
1022
- }
1023
- const wrap$g = port => {
1024
- return new IpcChildWithMessagePort(port);
1025
646
  };
1026
- const IpcChildWithMessagePort$1 = {
1027
- __proto__: null,
1028
- listen: listen$8,
1029
- signal: signal$9,
1030
- wrap: wrap$g
647
+ const wrap$1 = webSocket => {
648
+ return new IpcParentWithWebSocket$1(webSocket);
1031
649
  };
1032
- const listen$7 = () => {
1033
- // @ts-ignore
1034
- if (typeof WorkerGlobalScope === 'undefined') {
1035
- throw new TypeError('module is not in web worker scope');
1036
- }
1037
- return globalThis;
1038
- };
1039
- const signal$8 = global => {
1040
- global.postMessage(readyMessage);
1041
- };
1042
- class IpcChildWithModuleWorker extends Ipc {
1043
- getData(event) {
1044
- return getData$2(event);
1045
- }
1046
- send(message) {
1047
- // @ts-ignore
1048
- this._rawIpc.postMessage(message);
1049
- }
1050
- sendAndTransfer(message) {
1051
- const transfer = getTransferrables(message);
1052
- // @ts-ignore
1053
- this._rawIpc.postMessage(message, transfer);
1054
- }
1055
- dispose() {
1056
- // ignore
1057
- }
1058
- onClose(callback) {
1059
- // ignore
1060
- }
1061
- onMessage(callback) {
1062
- this._rawIpc.addEventListener('message', callback);
1063
- }
1064
- }
1065
- const wrap$f = global => {
1066
- return new IpcChildWithModuleWorker(global);
1067
- };
1068
- const waitForFirstMessage = async port => {
1069
- const {
1070
- promise,
1071
- resolve
1072
- } = Promise.withResolvers();
1073
- port.addEventListener('message', resolve, {
1074
- once: true
1075
- });
1076
- const event = await promise;
1077
- // @ts-ignore
1078
- return event.data;
1079
- };
1080
- const listen$6 = async () => {
1081
- const parentIpcRaw = listen$7();
1082
- signal$8(parentIpcRaw);
1083
- const parentIpc = wrap$f(parentIpcRaw);
1084
- const firstMessage = await waitForFirstMessage(parentIpc);
1085
- if (firstMessage.method !== 'initialize') {
1086
- throw new IpcError('unexpected first message');
1087
- }
1088
- const type = firstMessage.params[0];
1089
- if (type === 'message-port') {
1090
- parentIpc.send({
1091
- id: firstMessage.id,
1092
- jsonrpc: '2.0',
1093
- result: null
1094
- });
1095
- parentIpc.dispose();
1096
- const port = firstMessage.params[1];
1097
- return port;
1098
- }
1099
- return globalThis;
1100
- };
1101
- class IpcChildWithModuleWorkerAndMessagePort extends Ipc {
1102
- getData(event) {
1103
- return getData$2(event);
1104
- }
1105
- send(message) {
1106
- this._rawIpc.postMessage(message);
1107
- }
1108
- sendAndTransfer(message) {
1109
- const transfer = getTransferrables(message);
1110
- this._rawIpc.postMessage(message, transfer);
1111
- }
1112
- dispose() {
1113
- if (this._rawIpc.close) {
1114
- this._rawIpc.close();
1115
- }
1116
- }
1117
- onClose(callback) {
1118
- // ignore
1119
- }
1120
- onMessage(callback) {
1121
- this._rawIpc.addEventListener('message', callback);
1122
- this._rawIpc.start();
1123
- }
1124
- }
1125
- const wrap$e = port => {
1126
- return new IpcChildWithModuleWorkerAndMessagePort(port);
1127
- };
1128
- const IpcChildWithModuleWorkerAndMessagePort$1 = {
1129
- __proto__: null,
1130
- listen: listen$6,
1131
- wrap: wrap$e
1132
- };
1133
- const Error$3 = 1;
1134
- const Open = 2;
1135
- const Close = 3;
1136
- const addListener = (emitter, type, callback) => {
1137
- if ('addEventListener' in emitter) {
1138
- emitter.addEventListener(type, callback);
1139
- } else {
1140
- emitter.on(type, callback);
1141
- }
1142
- };
1143
- const removeListener = (emitter, type, callback) => {
1144
- if ('removeEventListener' in emitter) {
1145
- emitter.removeEventListener(type, callback);
1146
- } else {
1147
- emitter.off(type, callback);
1148
- }
1149
- };
1150
- const getFirstEvent = (eventEmitter, eventMap) => {
1151
- const {
1152
- promise,
1153
- resolve
1154
- } = Promise.withResolvers();
1155
- const listenerMap = Object.create(null);
1156
- const cleanup = value => {
1157
- for (const event of Object.keys(eventMap)) {
1158
- removeListener(eventEmitter, event, listenerMap[event]);
1159
- }
1160
- resolve(value);
1161
- };
1162
- for (const [event, type] of Object.entries(eventMap)) {
1163
- const listener = event => {
1164
- cleanup({
1165
- event,
1166
- type
1167
- });
1168
- };
1169
- addListener(eventEmitter, event, listener);
1170
- listenerMap[event] = listener;
1171
- }
1172
- return promise;
1173
- };
1174
- const Message$1 = 3;
1175
- const create$5$1 = async ({
1176
- isMessagePortOpen,
1177
- messagePort
1178
- }) => {
1179
- if (!isMessagePort(messagePort)) {
1180
- throw new IpcError('port must be of type MessagePort');
1181
- }
1182
- if (isMessagePortOpen) {
1183
- return messagePort;
1184
- }
1185
- const eventPromise = getFirstEvent(messagePort, {
1186
- message: Message$1
1187
- });
1188
- messagePort.start();
1189
- const {
1190
- event,
1191
- type
1192
- } = await eventPromise;
1193
- if (type !== Message$1) {
1194
- throw new IpcError('Failed to wait for ipc message');
1195
- }
1196
- if (event.data !== readyMessage) {
1197
- throw new IpcError('unexpected first message');
1198
- }
1199
- return messagePort;
1200
- };
1201
- const signal$1 = messagePort => {
1202
- messagePort.start();
1203
- };
1204
- class IpcParentWithMessagePort extends Ipc {
1205
- getData = getData$2;
1206
- send(message) {
1207
- this._rawIpc.postMessage(message);
1208
- }
1209
- sendAndTransfer(message) {
1210
- const transfer = getTransferrables(message);
1211
- this._rawIpc.postMessage(message, transfer);
1212
- }
1213
- dispose() {
1214
- this._rawIpc.close();
1215
- }
1216
- onMessage(callback) {
1217
- this._rawIpc.addEventListener('message', callback);
1218
- }
1219
- onClose(callback) {}
1220
- }
1221
- const wrap$5 = messagePort => {
1222
- return new IpcParentWithMessagePort(messagePort);
1223
- };
1224
- const IpcParentWithMessagePort$1 = {
1225
- __proto__: null,
1226
- create: create$5$1,
1227
- signal: signal$1,
1228
- wrap: wrap$5
1229
- };
1230
- const stringifyCompact = value => {
1231
- return JSON.stringify(value);
1232
- };
1233
- const parse$1 = content => {
1234
- if (content === 'undefined') {
1235
- return null;
1236
- }
1237
- try {
1238
- return JSON.parse(content);
1239
- } catch (error) {
1240
- throw new VError(error, 'failed to parse json');
1241
- }
1242
- };
1243
- const waitForWebSocketToBeOpen = webSocket => {
1244
- return getFirstEvent(webSocket, {
1245
- close: Close,
1246
- error: Error$3,
1247
- open: Open
1248
- });
1249
- };
1250
- const create$j = async ({
1251
- webSocket
1252
- }) => {
1253
- const firstWebSocketEvent = await waitForWebSocketToBeOpen(webSocket);
1254
- if (firstWebSocketEvent.type === Error$3) {
1255
- throw new IpcError(`WebSocket connection error`);
1256
- }
1257
- if (firstWebSocketEvent.type === Close) {
1258
- throw new IpcError('Websocket connection was immediately closed');
1259
- }
1260
- return webSocket;
1261
- };
1262
- let IpcParentWithWebSocket$1 = class IpcParentWithWebSocket extends Ipc {
1263
- getData(event) {
1264
- return parse$1(event.data);
1265
- }
1266
- send(message) {
1267
- this._rawIpc.send(stringifyCompact(message));
1268
- }
1269
- sendAndTransfer(message) {
1270
- throw new Error('sendAndTransfer not supported');
1271
- }
1272
- dispose() {
1273
- this._rawIpc.close();
1274
- }
1275
- onClose(callback) {
1276
- this._rawIpc.addEventListener('close', callback);
1277
- }
1278
- onMessage(callback) {
1279
- this._rawIpc.addEventListener('message', callback);
1280
- }
1281
- };
1282
- const wrap$1 = webSocket => {
1283
- return new IpcParentWithWebSocket$1(webSocket);
1284
- };
1285
- const IpcParentWithWebSocket$1$1 = {
1286
- __proto__: null,
1287
- create: create$j,
1288
- wrap: wrap$1
650
+ const IpcParentWithWebSocket$1$1 = {
651
+ __proto__: null,
652
+ create: create$k,
653
+ wrap: wrap$1
1289
654
  };
1290
655
 
1291
656
  class CommandNotFoundError extends Error {
@@ -1311,7 +676,7 @@ const execute = (command, ...args) => {
1311
676
 
1312
677
  const Two$1 = '2.0';
1313
678
  const callbacks = Object.create(null);
1314
- const get$b = id => {
679
+ const get$c = id => {
1315
680
  return callbacks[id];
1316
681
  };
1317
682
  const remove$5 = id => {
@@ -1460,7 +825,7 @@ const warn$1 = (...args) => {
1460
825
  console.warn(...args);
1461
826
  };
1462
827
  const resolve = (id, response) => {
1463
- const fn = get$b(id);
828
+ const fn = get$c(id);
1464
829
  if (!fn) {
1465
830
  console.log(response);
1466
831
  warn$1(`callback ${id} may already be disposed`);
@@ -1523,7 +888,7 @@ const getErrorResponse = (id, error, preparePrettyError, logError) => {
1523
888
  const errorProperty = getErrorProperty(error, prettyError);
1524
889
  return create$1$1(id, errorProperty);
1525
890
  };
1526
- const create$i = (message, result) => {
891
+ const create$j = (message, result) => {
1527
892
  return {
1528
893
  id: message.id,
1529
894
  jsonrpc: Two$1,
@@ -1532,7 +897,7 @@ const create$i = (message, result) => {
1532
897
  };
1533
898
  const getSuccessResponse = (message, result) => {
1534
899
  const resultProperty = result ?? null;
1535
- return create$i(message, resultProperty);
900
+ return create$j(message, resultProperty);
1536
901
  };
1537
902
  const getErrorResponseSimple = (id, error) => {
1538
903
  return {
@@ -1626,7 +991,7 @@ const handleJsonRpcMessage = async (...args) => {
1626
991
 
1627
992
  const Two = '2.0';
1628
993
 
1629
- const create$h = (method, params) => {
994
+ const create$i = (method, params) => {
1630
995
  return {
1631
996
  jsonrpc: Two,
1632
997
  method,
@@ -1634,7 +999,7 @@ const create$h = (method, params) => {
1634
999
  };
1635
1000
  };
1636
1001
 
1637
- const create$g = (id, method, params) => {
1002
+ const create$h = (id, method, params) => {
1638
1003
  const message = {
1639
1004
  id,
1640
1005
  jsonrpc: Two,
@@ -1645,12 +1010,12 @@ const create$g = (id, method, params) => {
1645
1010
  };
1646
1011
 
1647
1012
  let id$1 = 0;
1648
- const create$f = () => {
1013
+ const create$g = () => {
1649
1014
  return ++id$1;
1650
1015
  };
1651
1016
 
1652
1017
  const registerPromise = map => {
1653
- const id = create$f();
1018
+ const id = create$g();
1654
1019
  const {
1655
1020
  promise,
1656
1021
  resolve
@@ -1667,7 +1032,7 @@ const invokeHelper = async (callbacks, ipc, method, params, useSendAndTransfer)
1667
1032
  id,
1668
1033
  promise
1669
1034
  } = registerPromise(callbacks);
1670
- const message = create$g(id, method, params);
1035
+ const message = create$h(id, method, params);
1671
1036
  if (useSendAndTransfer && ipc.sendAndTransfer) {
1672
1037
  ipc.sendAndTransfer(message);
1673
1038
  } else {
@@ -1703,7 +1068,7 @@ const createRpc$1 = ipc => {
1703
1068
  * @deprecated
1704
1069
  */
1705
1070
  send(method, ...params) {
1706
- const message = create$h(method, params);
1071
+ const message = create$i(method, params);
1707
1072
  ipc.send(message);
1708
1073
  }
1709
1074
  };
@@ -1743,7 +1108,7 @@ const listen$1 = async (module, options) => {
1743
1108
  return ipc;
1744
1109
  };
1745
1110
 
1746
- const create$e = async ({
1111
+ const create$f = async ({
1747
1112
  commandMap,
1748
1113
  isMessagePortOpen = true,
1749
1114
  messagePort
@@ -1761,7 +1126,7 @@ const create$e = async ({
1761
1126
  return rpc;
1762
1127
  };
1763
1128
 
1764
- const create$d = async ({
1129
+ const create$e = async ({
1765
1130
  commandMap,
1766
1131
  isMessagePortOpen,
1767
1132
  send
@@ -1771,7 +1136,7 @@ const create$d = async ({
1771
1136
  port2
1772
1137
  } = new MessageChannel();
1773
1138
  await send(port1);
1774
- return create$e({
1139
+ return create$f({
1775
1140
  commandMap,
1776
1141
  isMessagePortOpen,
1777
1142
  messagePort: port2
@@ -1806,13 +1171,13 @@ const createSharedLazyRpc = factory => {
1806
1171
  };
1807
1172
  };
1808
1173
 
1809
- const create$c = async ({
1174
+ const create$d = async ({
1810
1175
  commandMap,
1811
1176
  isMessagePortOpen,
1812
1177
  send
1813
1178
  }) => {
1814
1179
  return createSharedLazyRpc(() => {
1815
- return create$d({
1180
+ return create$e({
1816
1181
  commandMap,
1817
1182
  isMessagePortOpen,
1818
1183
  send
@@ -1820,7 +1185,7 @@ const create$c = async ({
1820
1185
  });
1821
1186
  };
1822
1187
 
1823
- const create$b = async ({
1188
+ const create$c = async ({
1824
1189
  commandMap,
1825
1190
  webSocket
1826
1191
  }) => {
@@ -1835,7 +1200,7 @@ const create$b = async ({
1835
1200
  return rpc;
1836
1201
  };
1837
1202
 
1838
- const create$a = async ({
1203
+ const create$b = async ({
1839
1204
  commandMap,
1840
1205
  messagePort
1841
1206
  }) => {
@@ -1849,7 +1214,7 @@ const create$a = async ({
1849
1214
  return rpc;
1850
1215
  };
1851
1216
 
1852
- const create$9 = async ({
1217
+ const create$a = async ({
1853
1218
  commandMap,
1854
1219
  isMessagePortOpen,
1855
1220
  messagePort
@@ -1866,17 +1231,17 @@ const create$9 = async ({
1866
1231
  return rpc;
1867
1232
  };
1868
1233
 
1869
- const create$8 = async ({
1234
+ const create$9 = async ({
1870
1235
  commandMap,
1871
1236
  messagePort
1872
1237
  }) => {
1873
- return create$e({
1238
+ return create$f({
1874
1239
  commandMap,
1875
1240
  messagePort
1876
1241
  });
1877
1242
  };
1878
1243
 
1879
- const create$7 = async ({
1244
+ const create$8 = async ({
1880
1245
  commandMap
1881
1246
  }) => {
1882
1247
  // TODO create a commandMap per rpc instance
@@ -1887,119 +1252,777 @@ const create$7 = async ({
1887
1252
  return rpc;
1888
1253
  };
1889
1254
 
1890
- const createMockRpc = ({
1891
- commandMap
1892
- }) => {
1893
- const invocations = [];
1894
- const invoke = (method, ...params) => {
1895
- invocations.push([method, ...params]);
1896
- const command = commandMap[method];
1897
- if (!command) {
1898
- throw new Error(`command ${method} not found`);
1899
- }
1900
- return command(...params);
1901
- };
1902
- const mockRpc = {
1903
- invocations,
1904
- invoke,
1905
- invokeAndTransfer: invoke
1906
- };
1907
- return mockRpc;
1255
+ const createMockRpc = ({
1256
+ commandMap
1257
+ }) => {
1258
+ const invocations = [];
1259
+ const invoke = (method, ...params) => {
1260
+ invocations.push([method, ...params]);
1261
+ const command = commandMap[method];
1262
+ if (!command) {
1263
+ throw new Error(`command ${method} not found`);
1264
+ }
1265
+ return command(...params);
1266
+ };
1267
+ const mockRpc = {
1268
+ invocations,
1269
+ invoke,
1270
+ invokeAndTransfer: invoke
1271
+ };
1272
+ return mockRpc;
1273
+ };
1274
+
1275
+ const rpcs$2 = Object.create(null);
1276
+ const set$d = (id, rpc) => {
1277
+ rpcs$2[id] = rpc;
1278
+ };
1279
+ const get$b = id => {
1280
+ return rpcs$2[id];
1281
+ };
1282
+ const remove$4 = id => {
1283
+ delete rpcs$2[id];
1284
+ };
1285
+
1286
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
1287
+ const create$7 = rpcId => {
1288
+ return {
1289
+ async dispose() {
1290
+ const rpc = get$b(rpcId);
1291
+ await rpc.dispose();
1292
+ },
1293
+ // @ts-ignore
1294
+ invoke(method, ...params) {
1295
+ const rpc = get$b(rpcId);
1296
+ // @ts-ignore
1297
+ return rpc.invoke(method, ...params);
1298
+ },
1299
+ // @ts-ignore
1300
+ invokeAndTransfer(method, ...params) {
1301
+ const rpc = get$b(rpcId);
1302
+ // @ts-ignore
1303
+ return rpc.invokeAndTransfer(method, ...params);
1304
+ },
1305
+ registerMockRpc(commandMap) {
1306
+ const mockRpc = createMockRpc({
1307
+ commandMap
1308
+ });
1309
+ set$d(rpcId, mockRpc);
1310
+ // @ts-ignore
1311
+ mockRpc[Symbol.dispose] = () => {
1312
+ remove$4(rpcId);
1313
+ };
1314
+ // @ts-ignore
1315
+ return mockRpc;
1316
+ },
1317
+ set(rpc) {
1318
+ set$d(rpcId, rpc);
1319
+ }
1320
+ };
1321
+ };
1322
+
1323
+ const DebugWorker$1 = 55;
1324
+ const ExtensionManagementWorker = 9006;
1325
+ const RendererWorker$1 = 1;
1326
+
1327
+ const {
1328
+ invoke: invoke$6} = create$7(DebugWorker$1);
1329
+
1330
+ const DebugWorker = {
1331
+ __proto__: null,
1332
+ invoke: invoke$6
1333
+ };
1334
+
1335
+ const {
1336
+ invoke: invoke$5,
1337
+ invokeAndTransfer: invokeAndTransfer$3,
1338
+ set: set$c
1339
+ } = create$7(ExtensionManagementWorker);
1340
+
1341
+ const {
1342
+ set: set$b
1343
+ } = create$7(7013);
1344
+
1345
+ const {
1346
+ invoke: invoke$4,
1347
+ set: set$a
1348
+ } = create$7(10_000);
1349
+
1350
+ const {
1351
+ invoke: invoke$3,
1352
+ invokeAndTransfer: invokeAndTransfer$2} = create$7(RendererWorker$1);
1353
+ const sendMessagePortToFileSearchWorker = async (port, rpcId = 0) => {
1354
+ const command = 'QuickPick.handleMessagePort';
1355
+ await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSearchWorker', port, command, rpcId);
1356
+ };
1357
+ const sendMessagePortToQuickPickWorker = async (port, rpcId = 0) => {
1358
+ const command = 'QuickPick.handleMessagePort';
1359
+ await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToQuickPickWorker', port, command, rpcId);
1360
+ };
1361
+ const sendMessagePortToIframeWorker = async (port, rpcId) => {
1362
+ const command = 'Iframes.handleMessagePort';
1363
+ await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToIframeWorker', port, command, rpcId);
1364
+ };
1365
+ const sendMessagePortToExtensionManagementWorker = async (port, rpcId) => {
1366
+ const command = 'Extensions.handleMessagePort';
1367
+ await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionManagementWorker', port, command, rpcId);
1368
+ };
1369
+
1370
+ const isCommandNotFoundError = error => {
1371
+ return error instanceof Error && error.name === 'CommandNotFoundError';
1372
+ };
1373
+ const executeCommand$2 = async (id, ...args) => {
1374
+ try {
1375
+ return await invoke$5('Extensions.executeCommand', id, ...args);
1376
+ } catch (error) {
1377
+ if (!isCommandNotFoundError(error)) {
1378
+ throw error;
1379
+ }
1380
+ return invoke$3(id, ...args);
1381
+ }
1382
+ };
1383
+
1384
+ class DepecratedError extends Error {
1385
+ constructor(message) {
1386
+ super(message);
1387
+ this.name = 'DeprecatedError';
1388
+ }
1389
+ }
1390
+
1391
+ const getJson$1 = async url => {
1392
+ throw new DepecratedError(`vscode.getJson is deprecated, use createNodeRpc instead`);
1393
+ };
1394
+
1395
+ class NonError extends Error {
1396
+ name = 'NonError';
1397
+ constructor(message) {
1398
+ super(message);
1399
+ }
1400
+ }
1401
+
1402
+ // ensureError based on https://github.com/sindresorhus/ensure-error/blob/main/index.ts (License MIT)
1403
+ const ensureError = input => {
1404
+ if (!(input instanceof Error)) {
1405
+ return new NonError(input);
1406
+ }
1407
+ return input;
1408
+ };
1409
+
1410
+ const state$b = {
1411
+ /** @type{any[]} */
1412
+ onDidChangeTextDocumentListeners: [],
1413
+ /** @type{any[]} */
1414
+ onDidSaveTextDocumentListeners: [],
1415
+ /** @type{any[]} */
1416
+ onWillChangeEditorListeners: [],
1417
+ textDocuments: Object.create(null)
1418
+ };
1419
+ const setDocument = (textDocumentId, textDocument) => {
1420
+ state$b.textDocuments[textDocumentId] = textDocument;
1421
+ };
1422
+ const getDidOpenListeners = () => {
1423
+ return state$b.onDidSaveTextDocumentListeners;
1424
+ };
1425
+ const getWillChangeListeners = () => {
1426
+ return state$b.onWillChangeEditorListeners;
1427
+ };
1428
+ const getDidChangeListeners = () => {
1429
+ return state$b.onDidChangeTextDocumentListeners;
1430
+ };
1431
+ const getDocument = textDocumentId => {
1432
+ return state$b.textDocuments[textDocumentId];
1433
+ };
1434
+
1435
+ const getOffset$1 = (textDocument, position) => {
1436
+ let offset = 0;
1437
+ let rowIndex = 0;
1438
+ while (rowIndex++ < position.rowIndex) {
1439
+ const newLineIndex = textDocument.text.indexOf('\n', offset);
1440
+ offset = newLineIndex + 1;
1441
+ }
1442
+ offset += position.columnIndex;
1443
+ return offset;
1444
+ };
1445
+
1446
+ // const toOffsetBasedEdit = (textDocument, documentEdit) => {
1447
+ // switch (documentEdit.type) {
1448
+ // case /* singleLineEdit */ 1: {
1449
+ // const offset = getOffset(textDocument, documentEdit)
1450
+ // return {
1451
+ // offset,
1452
+ // inserted: documentEdit.inserted,
1453
+ // deleted: documentEdit.deleted,
1454
+ // // type: /* singleLineEdit */ 1
1455
+ // }
1456
+ // }
1457
+ // case /* splice */ 2:
1458
+ // const offset = getOffset(textDocument, {
1459
+ // rowIndex: documentEdit.rowIndex,
1460
+ // columnIndex: textDocument.lines[documentEdit.rowIndex - 1].length,
1461
+ // })
1462
+ // const inserted = '\n' + documentEdit.newLines.join('\n')
1463
+ // return {
1464
+ // offset,
1465
+ // inserted,
1466
+ // deleted: 0 /* TODO */,
1467
+ // }
1468
+ // }
1469
+ // }
1470
+
1471
+ // TODO incremental edits, don't send full text
1472
+ // export const applyEdit = (id, text, edits) => {
1473
+ // const textDocument = get(id)
1474
+ // textDocument.lines = text.split('\n')
1475
+ // const offsetBasedEdits = edits.map((edit) =>
1476
+ // toOffsetBasedEdit(textDocument, edit)
1477
+ // )
1478
+ // for (const listener of state.onDidChangeTextDocumentListeners) {
1479
+ // // TODO avoid extra object allocation
1480
+ // listener(textDocument, offsetBasedEdits)
1481
+ // }
1482
+ // }
1483
+
1484
+ // TODO data oriented vs object oriented
1485
+ // data -> simpler, exposes internals, sometimes weird/long (vscode.TextDocument.getText(textDocument))
1486
+ // object oriented -> hides internals, banana problem (textDocument.getText())
1487
+
1488
+ // TODO send to shared process, which sends it to renderer worker
1489
+ // renderer worker sends back the edit
1490
+ // export const applyEdit2 = (textDocument, edit) => {
1491
+ // if (VALIDATION_ENABLED) {
1492
+ // assert(typeof textDocument === 'object')
1493
+ // assert(textDocument !== null)
1494
+ // assert(typeof textDocument.id === 'number')
1495
+ // assert(textDocument.id > 0)
1496
+ // assert(typeof textDocument.getText === 'function')
1497
+ // assert(typeof edit === 'object')
1498
+ // assert(typeof edit.offset === 'number')
1499
+ // assert(typeof edit.inserted === 'string')
1500
+ // assert(typeof edit.deleted === 'number')
1501
+ // }
1502
+
1503
+ // let rowIndex = 0
1504
+ // let offset = 0
1505
+ // const lines = textDocument.getText().split('\n')
1506
+ // while (offset < edit.offset) {
1507
+ // offset += lines[rowIndex++].length + 1
1508
+ // }
1509
+ // rowIndex--
1510
+ // offset -= lines[rowIndex].length + 1
1511
+ // const edit2 = {
1512
+ // rowIndex,
1513
+ // inserted: edit.inserted,
1514
+ // deleted: edit.deleted,
1515
+ // columnIndex: edit.offset - offset + edit.deleted,
1516
+ // type: 1,
1517
+ // }
1518
+
1519
+ // // // TODO should be invoke and return boolean whether edit was applied or not
1520
+ // SharedProcess.send({
1521
+ // event: 'TextDocument.applyEdit',
1522
+ // args: [/* id */ textDocument.id, /* edits */ edit2],
1523
+ // })
1524
+ // }
1525
+
1526
+ // export const create = (textDocumentId, languageId, content) => {
1527
+ // const textDocument = {
1528
+ // languageId,
1529
+ // lines: content.split('\n'),
1530
+ // }
1531
+ // state.textDocuments[textDocumentId] = textDocument
1532
+ // }
1533
+
1534
+ // const createTextDocument = (uri, languageId, text) => {
1535
+ // if (VALIDATION_ENABLED) {
1536
+ // assert(typeof uri === 'string')
1537
+ // assert(typeof languageId === 'string')
1538
+ // assert(typeof text === 'string')
1539
+ // }
1540
+ // const state = {
1541
+ // /** @internal */
1542
+ // lines: text.split('\n'),
1543
+ // uri,
1544
+ // languageId,
1545
+ // getText() {
1546
+ // return state.lines.join('\n')
1547
+ // },
1548
+ // }
1549
+ // return state
1550
+ // }
1551
+
1552
+ // export const sync = (documentId, languageId, text) => {
1553
+ // const textDocument = get(documentId)
1554
+ // if (!textDocument) {
1555
+ // console.warn(`textDocument is undefined ${languageId}`)
1556
+ // return
1557
+ // }
1558
+ // textDocument.languageId = languageId
1559
+ // textDocument.lines = text.split('\n')
1560
+ // // console.log('sync', JSON.stringify(text))
1561
+ // }
1562
+
1563
+ const runListenerSafe = async (listener, ...args) => {
1564
+ try {
1565
+ await listener(...args);
1566
+ } catch (error) {
1567
+ // @ts-ignore
1568
+ if (error && error.message) {
1569
+ // @ts-ignore
1570
+ error.message = 'Failed to run open listener: ' + error.message;
1571
+ }
1572
+ console.error(error);
1573
+ }
1574
+ };
1575
+ const runListenersSafe = (listeners, ...args) => {
1576
+ for (const listener of listeners) {
1577
+ runListenerSafe(listener, ...args);
1578
+ }
1579
+ };
1580
+ const syncFull = (uri, textDocumentId, languageId, text) => {
1581
+ const textDocument = {
1582
+ documentId: textDocumentId,
1583
+ languageId,
1584
+ text,
1585
+ uri
1586
+ };
1587
+ setDocument(textDocumentId, textDocument);
1588
+ runListenersSafe(getDidOpenListeners(), textDocument);
1589
+ };
1590
+ const getSyntheticChanges = (textDocument, changes) => {
1591
+ // console.log({ textDocument, changes })
1592
+ object(textDocument);
1593
+ array(changes);
1594
+ const change = changes[0];
1595
+ const startOffset = getOffset$1(textDocument, change.start);
1596
+ const endOffset = getOffset$1(textDocument, change.end);
1597
+ const inserted = change.inserted.join('\n');
1598
+ const syntheticChanges = [{
1599
+ endOffset,
1600
+ inserted,
1601
+ startOffset
1602
+ }];
1603
+ return syntheticChanges;
1604
+ };
1605
+ const syncIncremental = (textDocumentId, changes) => {
1606
+ number(textDocumentId);
1607
+ array(changes);
1608
+ const textDocument = getDocument(textDocumentId);
1609
+ if (!textDocument) {
1610
+ console.warn(`sync not possible, no matching textDocument with id ${textDocumentId}`);
1611
+ return;
1612
+ }
1613
+ const syntheticChanges = getSyntheticChanges(textDocument, changes);
1614
+ runListenersSafe(getWillChangeListeners(), textDocument, syntheticChanges);
1615
+ const syntheticChange = syntheticChanges[0];
1616
+ const oldText = textDocument.text;
1617
+ const before = oldText.slice(0, syntheticChange.startOffset);
1618
+ const after = oldText.slice(syntheticChange.endOffset);
1619
+ textDocument.text = before + syntheticChange.inserted + after;
1620
+ runListenersSafe(getDidChangeListeners(), textDocument, syntheticChanges);
1621
+ };
1622
+ const get$a = textDocumentId => {
1623
+ const textDocument = getDocument(textDocumentId);
1624
+ return textDocument;
1625
+ };
1626
+ const getText$2 = textDocument => {
1627
+ return textDocument.text;
1628
+ };
1629
+ const setLanguageId = (textDocumentId, languageId) => {
1630
+ const newTextDocument = {
1631
+ ...getDocument(textDocumentId),
1632
+ languageId
1633
+ };
1634
+ setDocument(textDocumentId, newTextDocument);
1635
+ runListenersSafe(getDidOpenListeners(), newTextDocument);
1636
+ };
1637
+
1638
+ const E_NO_PROVIDER_FOUND = 'E_NO_PROVIDER_FOUND';
1639
+ const BABEL_PARSER_SYNTAX_ERROR = 'BABEL_PARSER_SYNTAX_ERROR';
1640
+
1641
+ class NoProviderFoundError extends Error {
1642
+ constructor(message) {
1643
+ super(message);
1644
+ // @ts-ignore
1645
+ this.code = E_NO_PROVIDER_FOUND;
1646
+ }
1647
+ }
1648
+
1649
+ const getType$1 = value => {
1650
+ switch (typeof value) {
1651
+ case 'boolean':
1652
+ return 'boolean';
1653
+ case 'function':
1654
+ return 'function';
1655
+ case 'number':
1656
+ return 'number';
1657
+ case 'object':
1658
+ if (value === null) {
1659
+ return 'null';
1660
+ }
1661
+ if (Array.isArray(value)) {
1662
+ return 'array';
1663
+ }
1664
+ return 'object';
1665
+ case 'string':
1666
+ return 'string';
1667
+ case 'undefined':
1668
+ return 'undefined';
1669
+ default:
1670
+ return 'unknown';
1671
+ }
1672
+ };
1673
+
1674
+ const validateResultObject = (result, resultShape) => {
1675
+ if (!resultShape.properties) {
1676
+ return undefined;
1677
+ }
1678
+ for (const [key, value] of Object.entries(resultShape.properties)) {
1679
+ // @ts-ignore
1680
+ const expectedType = value.type;
1681
+ const actualType = getType$1(result[key]);
1682
+ if (expectedType !== actualType) {
1683
+ return `item.${key} must be of type ${expectedType}`;
1684
+ }
1685
+ }
1686
+ return undefined;
1687
+ };
1688
+ const validateResultArray = (result, resultShape) => {
1689
+ for (const item of result) {
1690
+ const actualType = getType$1(item);
1691
+ const expectedType = resultShape.items.type;
1692
+ if (actualType !== expectedType) {
1693
+ return `expected result to be of type ${expectedType} but was of type ${actualType}`;
1694
+ }
1695
+ }
1696
+ return undefined;
1697
+ };
1698
+ const getPreviewObject = item => {
1699
+ return 'object';
1700
+ };
1701
+ const getPreviewArray = item => {
1702
+ if (item.length === 0) {
1703
+ return '[]';
1704
+ }
1705
+ return 'array';
1706
+ };
1707
+ const getPreviewString = item => {
1708
+ return `"${item}"`;
1709
+ };
1710
+ const getPreview = item => {
1711
+ const type = getType$1(item);
1712
+ switch (type) {
1713
+ case 'array':
1714
+ return getPreviewArray(item);
1715
+ case 'object':
1716
+ return getPreviewObject();
1717
+ case 'string':
1718
+ return getPreviewString(item);
1719
+ default:
1720
+ return `${item}`;
1721
+ }
1722
+ };
1723
+ const validate = (item, schema) => {
1724
+ if (typeof schema === 'function') {
1725
+ return schema(item);
1726
+ }
1727
+ const actualType = getType$1(item);
1728
+ const expectedType = schema.type;
1729
+ if (actualType !== expectedType) {
1730
+ if (schema.allowUndefined && (item === undefined || item === null)) {
1731
+ return item;
1732
+ }
1733
+ const preview = getPreview(item);
1734
+ return `item must be of type ${expectedType} but is ${preview}`;
1735
+ }
1736
+ switch (actualType) {
1737
+ case 'array':
1738
+ return validateResultArray(item, schema);
1739
+ case 'object':
1740
+ return validateResultObject(item, schema);
1741
+ }
1742
+ // TODO use json schema to validate result
1743
+ return undefined;
1744
+ };
1745
+
1746
+ const RE_UPPERCASE_LETTER = /[A-Z]/g;
1747
+ const RE_PROPERTY = /item\..*must be of type/;
1748
+ const spaceOut = camelCaseWord => {
1749
+ return camelCaseWord.replaceAll(RE_UPPERCASE_LETTER, (character, index) => {
1750
+ if (index === 0) {
1751
+ return character.toLowerCase();
1752
+ }
1753
+ return ' ' + character.toLowerCase();
1754
+ });
1755
+ };
1756
+ const toCamelCase = string => {
1757
+ return string[0].toLowerCase() + string.slice(1);
1758
+ };
1759
+ const improveValidationErrorPostMessage = (validationError, camelCaseName) => {
1760
+ if (validationError.startsWith('item must be of type')) {
1761
+ return validationError.replace('item', camelCaseName);
1762
+ }
1763
+ if (validationError.startsWith('expected result to be')) {
1764
+ return validationError.replace('result', `${camelCaseName} item`);
1765
+ }
1766
+ if (RE_PROPERTY.test(validationError)) {
1767
+ return validationError.replace('item', camelCaseName);
1768
+ }
1769
+ return validationError;
1770
+ };
1771
+ const improveValidationError = (name, validationError) => {
1772
+ const camelCaseName = toCamelCase(name);
1773
+ const spacedOutName = spaceOut(name);
1774
+ const pre = `invalid ${spacedOutName} result`;
1775
+ const post = improveValidationErrorPostMessage(validationError, camelCaseName);
1776
+ return pre + ': ' + post;
1777
+ };
1778
+ const registerMethod = ({
1779
+ context,
1780
+ methodName,
1781
+ name,
1782
+ providers,
1783
+ resultShape,
1784
+ returnUndefinedWhenNoProviderFound
1785
+ }) => {
1786
+ context[`execute${name}Provider`] = async function (textDocumentId, ...params) {
1787
+ try {
1788
+ const textDocument = get$a(textDocumentId);
1789
+ if (!textDocument) {
1790
+ throw new Error(`textDocument with id ${textDocumentId} not found`);
1791
+ }
1792
+ const provider = providers[textDocument.languageId];
1793
+ if (!provider) {
1794
+ if (returnUndefinedWhenNoProviderFound) {
1795
+ return undefined;
1796
+ }
1797
+ const spacedOutName = spaceOut(name);
1798
+ throw new NoProviderFoundError(`No ${spacedOutName} provider found for ${textDocument.languageId}`);
1799
+ }
1800
+ const result = await provider[methodName](textDocument, ...params);
1801
+ const error = validate(result, resultShape);
1802
+ if (error) {
1803
+ const improvedError = improveValidationError(name, error);
1804
+ throw new VError(improvedError);
1805
+ }
1806
+ return result;
1807
+ } catch (error) {
1808
+ const actualError = ensureError(error);
1809
+ const spacedOutName = spaceOut(name);
1810
+ if (actualError && actualError.message) {
1811
+ if (actualError.message === 'provider[methodName] is not a function') {
1812
+ const camelCaseName = toCamelCase(name);
1813
+ throw new VError(`Failed to execute ${spacedOutName} provider: VError: ${camelCaseName}Provider.${methodName} is not a function`);
1814
+ }
1815
+ throw new VError(actualError, `Failed to execute ${spacedOutName} provider`);
1816
+ }
1817
+ throw actualError;
1818
+ }
1819
+ };
1820
+ };
1821
+ const create$6 = ({
1822
+ additionalMethodNames = [],
1823
+ executeKey = '',
1824
+ name,
1825
+ resultShape,
1826
+ returnUndefinedWhenNoProviderFound = false
1827
+ }) => {
1828
+ const multipleResults = resultShape.type === 'array';
1829
+ const methodName = executeKey || (multipleResults ? `provide${name}s` : `provide${name}`);
1830
+ const providers = Object.create(null);
1831
+ const context = {
1832
+ [`register${name}Provider`](provider) {
1833
+ providers[provider.languageId] = provider;
1834
+ },
1835
+ getProvider(languageId) {
1836
+ return providers[languageId];
1837
+ },
1838
+ getProviders() {
1839
+ return Object.values(providers);
1840
+ },
1841
+ reset() {
1842
+ for (const key in providers) {
1843
+ delete providers[key];
1844
+ }
1845
+ }
1846
+ };
1847
+ registerMethod({
1848
+ context,
1849
+ methodName,
1850
+ name,
1851
+ providers,
1852
+ resultShape,
1853
+ returnUndefinedWhenNoProviderFound
1854
+ });
1855
+ for (const method of additionalMethodNames) {
1856
+ // @ts-ignore
1857
+ registerMethod({
1858
+ context,
1859
+ providers,
1860
+ ...method
1861
+ });
1862
+ }
1863
+ const finalContext = {
1864
+ ...context
1865
+ };
1866
+ return finalContext;
1867
+ };
1868
+
1869
+ const Array$1 = 'array';
1870
+ const Boolean$1 = 'boolean';
1871
+ const Number = 'number';
1872
+ const Object$1 = 'object';
1873
+ const String$1 = 'string';
1874
+
1875
+ const {
1876
+ executeBraceCompletionProvider,
1877
+ registerBraceCompletionProvider} = create$6({
1878
+ name: 'BraceCompletion',
1879
+ resultShape: {
1880
+ type: Boolean$1
1881
+ }
1882
+ });
1883
+
1884
+ const {
1885
+ executeClosingTagProvider,
1886
+ registerClosingTagProvider
1887
+ } = create$6({
1888
+ name: 'ClosingTag',
1889
+ resultShape: {
1890
+ allowUndefined: true,
1891
+ type: Object$1
1892
+ },
1893
+ returnUndefinedWhenNoProviderFound: true
1894
+ });
1895
+
1896
+ const {
1897
+ executeCodeActionProvider,
1898
+ registerCodeActionProvider
1899
+ } = create$6({
1900
+ name: 'CodeAction',
1901
+ resultShape: {
1902
+ items: {
1903
+ type: Object$1
1904
+ },
1905
+ type: Array$1
1906
+ }
1907
+ });
1908
+ const isOrganizeImports = action => {
1909
+ return action.kind === 'source.organizeImports';
1910
+ };
1911
+
1912
+ // TODO handle case when multiple organize imports providers are registered
1913
+ const executeOrganizeImports = async uid => {
1914
+ const actions = await executeCodeActionProvider(uid);
1915
+ // @ts-ignore
1916
+ if (!actions || actions.length === 0) {
1917
+ return [];
1918
+ }
1919
+ // @ts-ignore
1920
+ const organizeImportsAction = actions.find(isOrganizeImports);
1921
+ if (!organizeImportsAction) {
1922
+ return [];
1923
+ }
1924
+ const textDocument = get$a(uid);
1925
+ const edits = await organizeImportsAction.execute(textDocument);
1926
+ return edits;
1908
1927
  };
1909
1928
 
1910
- const rpcs$2 = Object.create(null);
1911
- const set$d = (id, rpc) => {
1912
- rpcs$2[id] = rpc;
1929
+ const state$a = {
1930
+ commands: Object.create(null)
1913
1931
  };
1914
- const get$a = id => {
1915
- return rpcs$2[id];
1932
+ const getCommandDisplay = command => {
1933
+ if (command && command.id && typeof command.id === 'string') {
1934
+ return ` ${command.id}`;
1935
+ }
1936
+ return '';
1916
1937
  };
1917
- const remove$4 = id => {
1918
- delete rpcs$2[id];
1938
+ const registerCommand = command => {
1939
+ try {
1940
+ if (!command) {
1941
+ if (command === null) {
1942
+ throw new Error(`command is null`);
1943
+ }
1944
+ throw new Error('command is not defined');
1945
+ }
1946
+ if (!command.id) {
1947
+ throw new Error('command is missing id');
1948
+ }
1949
+ if (!command.execute) {
1950
+ throw new Error('command is missing execute function');
1951
+ }
1952
+ if (command.id in state$a.commands) {
1953
+ throw new Error(`command cannot be registered multiple times`);
1954
+ }
1955
+ state$a.commands[command.id] = command;
1956
+ } catch (error) {
1957
+ const commandDisplayId = getCommandDisplay(command);
1958
+ throw new VError(error, `Failed to register command${commandDisplayId}`);
1959
+ }
1919
1960
  };
1920
-
1921
- /* eslint-disable @typescript-eslint/explicit-function-return-type */
1922
- const create$6 = rpcId => {
1923
- return {
1924
- async dispose() {
1925
- const rpc = get$a(rpcId);
1926
- await rpc.dispose();
1927
- },
1928
- // @ts-ignore
1929
- invoke(method, ...params) {
1930
- const rpc = get$a(rpcId);
1931
- // @ts-ignore
1932
- return rpc.invoke(method, ...params);
1933
- },
1961
+ const executeCommand$1 = async (id, ...args) => {
1962
+ try {
1963
+ const command = state$a.commands[id];
1964
+ if (!command) {
1965
+ throw new Error(`command ${id} not found`);
1966
+ }
1967
+ const results = await command.execute(...args);
1968
+ return results;
1969
+ } catch (error) {
1934
1970
  // @ts-ignore
1935
- invokeAndTransfer(method, ...params) {
1936
- const rpc = get$a(rpcId);
1937
- // @ts-ignore
1938
- return rpc.invokeAndTransfer(method, ...params);
1939
- },
1940
- registerMockRpc(commandMap) {
1941
- const mockRpc = createMockRpc({
1942
- commandMap
1943
- });
1944
- set$d(rpcId, mockRpc);
1945
- // @ts-ignore
1946
- mockRpc[Symbol.dispose] = () => {
1947
- remove$4(rpcId);
1948
- };
1949
- // @ts-ignore
1950
- return mockRpc;
1951
- },
1952
- set(rpc) {
1953
- set$d(rpcId, rpc);
1971
+ if (error && error.isExpected) {
1972
+ throw error;
1954
1973
  }
1955
- };
1974
+ throw new VError(error, 'Failed to execute command');
1975
+ }
1956
1976
  };
1957
-
1958
- const DebugWorker$1 = 55;
1959
- const ExtensionManagementWorker = 9006;
1960
- const RendererWorker$1 = 1;
1961
-
1962
- const {
1963
- invoke: invoke$6} = create$6(DebugWorker$1);
1964
-
1965
- const DebugWorker = {
1966
- __proto__: null,
1967
- invoke: invoke$6
1977
+ const getRegisteredCommandIds$1 = () => {
1978
+ return Object.values(state$a.commands).map(command => command.id);
1968
1979
  };
1969
1980
 
1970
1981
  const {
1971
- invoke: invoke$5,
1972
- invokeAndTransfer: invokeAndTransfer$3,
1973
- set: set$c
1974
- } = create$6(ExtensionManagementWorker);
1975
-
1976
- const {
1977
- set: set$b
1978
- } = create$6(7013);
1979
-
1980
- const {
1981
- invoke: invoke$4,
1982
- set: set$a
1983
- } = create$6(10_000);
1982
+ executeCommentProvider,
1983
+ registerCommentProvider
1984
+ } = create$6({
1985
+ name: 'Comment',
1986
+ resultShape() {
1987
+ return '';
1988
+ }
1989
+ });
1984
1990
 
1985
1991
  const {
1986
- invoke: invoke$3,
1987
- invokeAndTransfer: invokeAndTransfer$2} = create$6(RendererWorker$1);
1988
- const sendMessagePortToFileSearchWorker = async (port, rpcId = 0) => {
1989
- const command = 'QuickPick.handleMessagePort';
1990
- await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSearchWorker', port, command, rpcId);
1992
+ executeCompletionProvider,
1993
+ executeresolveCompletionItemProvider,
1994
+ getProviders: getProviders$2,
1995
+ registerCompletionProvider} = create$6({
1996
+ additionalMethodNames: [
1997
+ // @ts-ignore
1998
+ {
1999
+ methodName: 'resolveCompletionItem',
2000
+ name: 'resolveCompletionItem',
2001
+ resultShape: {
2002
+ allowUndefined: true,
2003
+ type: Object$1
2004
+ }
2005
+ }],
2006
+ name: 'Completion',
2007
+ resultShape: {
2008
+ items: {
2009
+ type: Object$1
2010
+ },
2011
+ type: Array$1
2012
+ }
2013
+ });
2014
+ const getRegisteredCompletionProviderIds$1 = () => {
2015
+ return getProviders$2().map(provider => provider.id);
1991
2016
  };
1992
- const sendMessagePortToQuickPickWorker = async (port, rpcId = 0) => {
1993
- const command = 'QuickPick.handleMessagePort';
1994
- await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToQuickPickWorker', port, command, rpcId);
2017
+
2018
+ const state$9 = {
2019
+ configuration: Object.create(null)
1995
2020
  };
1996
- const sendMessagePortToIframeWorker = async (port, rpcId) => {
1997
- const command = 'Iframes.handleMessagePort';
1998
- await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToIframeWorker', port, command, rpcId);
2021
+ const getConfiguration = key => {
2022
+ return state$9.configuration[key] ?? '';
1999
2023
  };
2000
- const sendMessagePortToExtensionManagementWorker = async (port, rpcId) => {
2001
- const command = 'Extensions.handleMessagePort';
2002
- await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionManagementWorker', port, command, rpcId);
2024
+ const setConfigurations = preferences => {
2025
+ state$9.configuration = preferences;
2003
2026
  };
2004
2027
 
2005
2028
  const {
@@ -2192,7 +2215,7 @@ const setPauseOnExceptions = async (protocol, value) => {
2192
2215
 
2193
2216
  const {
2194
2217
  executeDefinitionProvider,
2195
- registerDefinitionProvider} = create$k({
2218
+ registerDefinitionProvider} = create$6({
2196
2219
  name: 'Definition',
2197
2220
  resultShape: {
2198
2221
  allowUndefined: true,
@@ -2214,7 +2237,7 @@ const {
2214
2237
  const {
2215
2238
  executeDiagnosticProvider,
2216
2239
  registerDiagnosticProvider
2217
- } = create$k({
2240
+ } = create$6({
2218
2241
  name: 'Diagnostic',
2219
2242
  resultShape: {
2220
2243
  items: {
@@ -2227,11 +2250,11 @@ const {
2227
2250
  const RendererWorker = 1;
2228
2251
 
2229
2252
  const invoke$1 = (method, ...params) => {
2230
- const rpc = get$a(RendererWorker);
2253
+ const rpc = get$b(RendererWorker);
2231
2254
  return rpc.invoke(method, ...params);
2232
2255
  };
2233
2256
  const invokeAndTransfer$1 = (method, ...params) => {
2234
- const rpc = get$a(RendererWorker);
2257
+ const rpc = get$b(RendererWorker);
2235
2258
  return rpc.invokeAndTransfer(method, ...params);
2236
2259
  };
2237
2260
 
@@ -2363,8 +2386,10 @@ const getPathSeparator = protocol => {
2363
2386
  };
2364
2387
 
2365
2388
  const {
2366
- executeFormattingProvider,
2367
- registerFormattingProvider} = create$k({
2389
+ executeFormattingProvider: executeRegisteredFormattingProvider,
2390
+ getProvider: getProvider$3,
2391
+ getProviders: getProviders$1,
2392
+ registerFormattingProvider} = create$6({
2368
2393
  executeKey: 'format',
2369
2394
  name: 'Formatting',
2370
2395
  resultShape: {
@@ -2386,6 +2411,21 @@ const {
2386
2411
  type: Array$1
2387
2412
  }
2388
2413
  });
2414
+ const executeRegisteredFormattingProviderWithParams = executeRegisteredFormattingProvider;
2415
+ const executeFormattingProvider = async (textDocumentId, ...params) => {
2416
+ const textDocument = get$a(textDocumentId);
2417
+ if (!textDocument) {
2418
+ throw new VError(`Failed to execute formatting provider: textDocument with id ${textDocumentId} not found`);
2419
+ }
2420
+ const provider = getProvider$3(textDocument.languageId);
2421
+ if (!provider) {
2422
+ throw new VError(`No formatting provider found for ${textDocument.languageId}`, 'Failed to execute formatting provider');
2423
+ }
2424
+ return executeRegisteredFormattingProviderWithParams(textDocumentId, ...params);
2425
+ };
2426
+ const getRegisteredFormattingProviderIds$1 = () => {
2427
+ return getProviders$1().map(provider => provider.id);
2428
+ };
2389
2429
 
2390
2430
  const getOffset = (textDocument, position) => {
2391
2431
  let offset = 0;
@@ -2425,7 +2465,8 @@ const getPosition = (textDocument, offset) => {
2425
2465
 
2426
2466
  const {
2427
2467
  executeHoverProvider,
2428
- registerHoverProvider} = create$k({
2468
+ getProviders,
2469
+ registerHoverProvider} = create$6({
2429
2470
  name: 'Hover',
2430
2471
  resultShape: {
2431
2472
  allowUndefined: true,
@@ -2433,10 +2474,13 @@ const {
2433
2474
  type: Object$1
2434
2475
  }
2435
2476
  });
2477
+ const getRegisteredHoverProviderIds$1 = () => {
2478
+ return getProviders().map(provider => provider.id);
2479
+ };
2436
2480
 
2437
2481
  const {
2438
2482
  executeImplementationProvider,
2439
- registerImplementationProvider} = create$k({
2483
+ registerImplementationProvider} = create$6({
2440
2484
  name: 'Implementation',
2441
2485
  resultShape: {
2442
2486
  items: {
@@ -2487,7 +2531,7 @@ const create$5 = async ({
2487
2531
  port1,
2488
2532
  port2
2489
2533
  } = getPortTuple();
2490
- const rpcPromise = create$9({
2534
+ const rpcPromise = create$a({
2491
2535
  commandMap,
2492
2536
  isMessagePortOpen: true,
2493
2537
  messagePort: port2
@@ -2526,7 +2570,7 @@ const create$4 = async ({
2526
2570
  const port = await getPort();
2527
2571
  // TODO rpc module should start port
2528
2572
  port.start();
2529
- const rpc = await create$9({
2573
+ const rpc = await create$a({
2530
2574
  commandMap: {},
2531
2575
  isMessagePortOpen: true,
2532
2576
  messagePort: port
@@ -2554,7 +2598,7 @@ const create$3 = async ({
2554
2598
  string(type);
2555
2599
  const wsUrl = getWebSocketUrl(type, location.host);
2556
2600
  const webSocket = new WebSocket(wsUrl);
2557
- const rpc = await create$b({
2601
+ const rpc = await create$c({
2558
2602
  commandMap: {},
2559
2603
  webSocket
2560
2604
  });
@@ -2672,7 +2716,7 @@ const send = async port => {
2672
2716
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, initialCommand);
2673
2717
  };
2674
2718
  const launchFileSystemProcess = async () => {
2675
- const rpc = await create$d({
2719
+ const rpc = await create$e({
2676
2720
  commandMap: {},
2677
2721
  send
2678
2722
  });
@@ -2788,7 +2832,7 @@ const {
2788
2832
  executefileReferenceProvider,
2789
2833
  executeReferenceProvider,
2790
2834
  getProvider: getProvider$2,
2791
- registerReferenceProvider} = create$k({
2835
+ registerReferenceProvider} = create$6({
2792
2836
  additionalMethodNames: [
2793
2837
  // @ts-ignore
2794
2838
  {
@@ -2850,7 +2894,7 @@ const validateResult = renameResult => {
2850
2894
  const {
2851
2895
  executeprepareRenameProvider,
2852
2896
  executeRenameProvider,
2853
- registerRenameProvider} = create$k({
2897
+ registerRenameProvider} = create$6({
2854
2898
  additionalMethodNames: [
2855
2899
  // @ts-ignore
2856
2900
  {
@@ -3007,7 +3051,7 @@ const createRpc = ({
3007
3051
 
3008
3052
  const {
3009
3053
  executeSelectionProvider,
3010
- registerSelectionProvider} = create$k({
3054
+ registerSelectionProvider} = create$6({
3011
3055
  name: 'Selection',
3012
3056
  resultShape: {
3013
3057
  allowUndefined: true,
@@ -3403,7 +3447,7 @@ const registerStatuBarItemProvider = provider => {
3403
3447
 
3404
3448
  const {
3405
3449
  executeTabCompletionProvider,
3406
- registerTabCompletionProvider} = create$k({
3450
+ registerTabCompletionProvider} = create$6({
3407
3451
  name: 'TabCompletion',
3408
3452
  resultShape: {
3409
3453
  allowUndefined: true,
@@ -3442,7 +3486,7 @@ const executeTextSearchProvider = async (scheme, query) => {
3442
3486
 
3443
3487
  const {
3444
3488
  executeTypeDefinitionProvider,
3445
- registerTypeDefinitionProvider} = create$k({
3489
+ registerTypeDefinitionProvider} = create$6({
3446
3490
  name: 'TypeDefinition',
3447
3491
  resultShape: {
3448
3492
  allowUndefined: true,
@@ -3493,7 +3537,7 @@ const createWebView = async (providerId, port, uri, uid, origin, webView) => {
3493
3537
  // TODO cancel promise when webview is disposed before sending message
3494
3538
  // TODO handle case when webview doesn't send ready message
3495
3539
 
3496
- const rpc = await create$9({
3540
+ const rpc = await create$a({
3497
3541
  commandMap: provider.commands || {},
3498
3542
  isMessagePortOpen: false,
3499
3543
  messagePort: port
@@ -3603,7 +3647,7 @@ const api = {
3603
3647
  // Comment
3604
3648
 
3605
3649
  executeClosingTagProvider: executeClosingTagProvider,
3606
- executeCommand: executeCommand$1,
3650
+ executeCommand: executeCommand$2,
3607
3651
  executeCommentProvider: executeCommentProvider,
3608
3652
  executeCompletionProvider: executeCompletionProvider,
3609
3653
  executeDefinitionProvider: executeDefinitionProvider,
@@ -3782,7 +3826,7 @@ const setup = ({
3782
3826
  };
3783
3827
 
3784
3828
  const launchExtensionManagementWorker = async () => {
3785
- const rpc = await create$c({
3829
+ const rpc = await create$d({
3786
3830
  commandMap: {},
3787
3831
  async send(port) {
3788
3832
  await sendMessagePortToExtensionManagementWorker(port, 0);
@@ -3792,7 +3836,7 @@ const launchExtensionManagementWorker = async () => {
3792
3836
  };
3793
3837
 
3794
3838
  const launchFileSearchWorker = async () => {
3795
- const rpc = await create$c({
3839
+ const rpc = await create$d({
3796
3840
  commandMap: {},
3797
3841
  async send(port) {
3798
3842
  await sendMessagePortToFileSearchWorker(port, 0);
@@ -4187,6 +4231,115 @@ const tryToGetActualImportErrorMessage = async (url, error) => {
4187
4231
  }
4188
4232
  };
4189
4233
 
4234
+ const getManifestCommandIds = extension => {
4235
+ if (!Array.isArray(extension.commands)) {
4236
+ return [];
4237
+ }
4238
+ return extension.commands.map(command => command.id).filter(id => typeof id === 'string');
4239
+ };
4240
+ const getManifestFormattingProviderIds = extension => {
4241
+ if (!Array.isArray(extension.formattingProviders)) {
4242
+ return [];
4243
+ }
4244
+ return extension.formattingProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4245
+ };
4246
+ const getManifestCompletionProviderIds = extension => {
4247
+ if (!Array.isArray(extension.completionProviders)) {
4248
+ return [];
4249
+ }
4250
+ return extension.completionProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4251
+ };
4252
+ const getManifestHoverProviderIds = extension => {
4253
+ if (!Array.isArray(extension.hoverProviders)) {
4254
+ return [];
4255
+ }
4256
+ return extension.hoverProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4257
+ };
4258
+ const assertUniqueIds = (ids, label) => {
4259
+ const seen = new Set();
4260
+ for (const id of ids) {
4261
+ if (seen.has(id)) {
4262
+ throw new Error(`${label} ${id} is contributed multiple times`);
4263
+ }
4264
+ seen.add(id);
4265
+ }
4266
+ };
4267
+ const getNewRegisteredCommandIds = beforeCommandIds => {
4268
+ const before = new Set(beforeCommandIds);
4269
+ return getRegisteredCommandIds$1().filter(commandId => !before.has(commandId));
4270
+ };
4271
+ const getNewRegisteredFormattingProviderIds = beforeFormattingProviderIds => {
4272
+ const before = new Set(beforeFormattingProviderIds);
4273
+ return getRegisteredFormattingProviderIds$1().filter(providerId => !before.has(providerId));
4274
+ };
4275
+ const getNewRegisteredCompletionProviderIds = beforeCompletionProviderIds => {
4276
+ const before = new Set(beforeCompletionProviderIds);
4277
+ return getRegisteredCompletionProviderIds$1().filter(providerId => !before.has(providerId));
4278
+ };
4279
+ const getNewRegisteredHoverProviderIds = beforeHoverProviderIds => {
4280
+ const before = new Set(beforeHoverProviderIds);
4281
+ return getRegisteredHoverProviderIds$1().filter(providerId => !before.has(providerId));
4282
+ };
4283
+ const getRegisteredCommandIds = () => {
4284
+ return getRegisteredCommandIds$1();
4285
+ };
4286
+ const getRegisteredCompletionProviderIds = () => {
4287
+ return getRegisteredCompletionProviderIds$1();
4288
+ };
4289
+ const getRegisteredFormattingProviderIds = () => {
4290
+ return getRegisteredFormattingProviderIds$1();
4291
+ };
4292
+ const getRegisteredHoverProviderIds = () => {
4293
+ return getRegisteredHoverProviderIds$1();
4294
+ };
4295
+ const validateIsolatedExtensionContribution = (label, manifestIds, registeredIds) => {
4296
+ assertUniqueIds(manifestIds, label);
4297
+ const manifestIdSet = new Set(manifestIds);
4298
+ const registeredIdSet = new Set(registeredIds);
4299
+ for (const registeredId of registeredIds) {
4300
+ if (!manifestIdSet.has(registeredId)) {
4301
+ throw new Error(`${label} ${registeredId} is registered but not contributed in extension.json`);
4302
+ }
4303
+ }
4304
+ for (const manifestId of manifestIds) {
4305
+ if (!registeredIdSet.has(manifestId)) {
4306
+ throw new Error(`${label} ${manifestId} is contributed in extension.json but not registered`);
4307
+ }
4308
+ }
4309
+ };
4310
+ const validateIsolatedExtensionCommands = (extension, beforeCommandIds) => {
4311
+ if (!extension.isolated) {
4312
+ return;
4313
+ }
4314
+ const manifestCommandIds = getManifestCommandIds(extension);
4315
+ const registeredCommandIds = getNewRegisteredCommandIds(beforeCommandIds);
4316
+ validateIsolatedExtensionContribution('command', manifestCommandIds, registeredCommandIds);
4317
+ };
4318
+ const validateIsolatedExtensionCompletionProviders = (extension, beforeCompletionProviderIds) => {
4319
+ if (!extension.isolated) {
4320
+ return;
4321
+ }
4322
+ const manifestCompletionProviderIds = getManifestCompletionProviderIds(extension);
4323
+ const registeredCompletionProviderIds = getNewRegisteredCompletionProviderIds(beforeCompletionProviderIds);
4324
+ validateIsolatedExtensionContribution('completion provider', manifestCompletionProviderIds, registeredCompletionProviderIds);
4325
+ };
4326
+ const validateIsolatedExtensionFormattingProviders = (extension, beforeFormattingProviderIds) => {
4327
+ if (!extension.isolated) {
4328
+ return;
4329
+ }
4330
+ const manifestFormattingProviderIds = getManifestFormattingProviderIds(extension);
4331
+ const registeredFormattingProviderIds = getNewRegisteredFormattingProviderIds(beforeFormattingProviderIds);
4332
+ validateIsolatedExtensionContribution('formatting provider', manifestFormattingProviderIds, registeredFormattingProviderIds);
4333
+ };
4334
+ const validateIsolatedExtensionHoverProviders = (extension, beforeHoverProviderIds) => {
4335
+ if (!extension.isolated) {
4336
+ return;
4337
+ }
4338
+ const manifestHoverProviderIds = getManifestHoverProviderIds(extension);
4339
+ const registeredHoverProviderIds = getNewRegisteredHoverProviderIds(beforeHoverProviderIds);
4340
+ validateIsolatedExtensionContribution('hover provider', manifestHoverProviderIds, registeredHoverProviderIds);
4341
+ };
4342
+
4190
4343
  // TODO make activation timeout configurable or remove it.
4191
4344
  // some extension might do workspace indexing which could take some time
4192
4345
  const activationTimeout$1 = 10_000;
@@ -4206,7 +4359,16 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
4206
4359
  status: Activating
4207
4360
  });
4208
4361
  const module = acquire(extensionId);
4209
- await Promise.race([module.activate(extension), rejectAfterTimeout$1(activationTimeout$1, token)]);
4362
+ const activate = module.main || module.activate;
4363
+ const beforeCommandIds = getRegisteredCommandIds();
4364
+ const beforeCompletionProviderIds = getRegisteredCompletionProviderIds();
4365
+ const beforeFormattingProviderIds = getRegisteredFormattingProviderIds();
4366
+ const beforeHoverProviderIds = getRegisteredHoverProviderIds();
4367
+ await Promise.race([activate(extension), rejectAfterTimeout$1(activationTimeout$1, token)]);
4368
+ validateIsolatedExtensionCommands(extension, beforeCommandIds);
4369
+ validateIsolatedExtensionCompletionProviders(extension, beforeCompletionProviderIds);
4370
+ validateIsolatedExtensionFormattingProviders(extension, beforeFormattingProviderIds);
4371
+ validateIsolatedExtensionHoverProviders(extension, beforeHoverProviderIds);
4210
4372
  const endTime = performance.now();
4211
4373
  const time = endTime - startTime;
4212
4374
  update(extensionId, {
@@ -4234,6 +4396,10 @@ const activateExtension3 = async (extensionId, extension) => {
4234
4396
  if (!module) {
4235
4397
  throw new Error(`extension module ${extensionId} not found`);
4236
4398
  }
4399
+ if (module.main) {
4400
+ await module.main(extension);
4401
+ return;
4402
+ }
4237
4403
  await module.activate(extension);
4238
4404
  };
4239
4405
 
@@ -4335,7 +4501,8 @@ const activateExtension = async (extension, absolutePath, activationEvent) => {
4335
4501
  });
4336
4502
  const token = create();
4337
4503
  try {
4338
- await Promise.race([module.activate(extension), rejectAfterTimeout(activationTimeout, token)]);
4504
+ const activate = module.main || module.activate;
4505
+ await Promise.race([activate(extension), rejectAfterTimeout(activationTimeout, token)]);
4339
4506
  const endTime = performance.now();
4340
4507
  const time = endTime - startTime;
4341
4508
  update(extensionId, {
@@ -5018,7 +5185,7 @@ const hydrate$1 = async () => {
5018
5185
  };
5019
5186
 
5020
5187
  const launchIframeWorker = async () => {
5021
- const rpc = await create$d({
5188
+ const rpc = await create$e({
5022
5189
  commandMap: {},
5023
5190
  async send(port) {
5024
5191
  await sendMessagePortToIframeWorker(port, 0);
@@ -5642,8 +5809,15 @@ const handleBeforeUnload = () => {
5642
5809
  // console.log('before unload')
5643
5810
  };
5644
5811
 
5812
+ const handleExtensionManagementMessagePort = async port => {
5813
+ await create$b({
5814
+ commandMap: commandMap,
5815
+ messagePort: port
5816
+ });
5817
+ };
5818
+
5645
5819
  const handleMessagePort2 = async (port, rpcId) => {
5646
- const rpc = await create$8({
5820
+ const rpc = await create$9({
5647
5821
  commandMap: {},
5648
5822
  messagePort: port
5649
5823
  });
@@ -5653,7 +5827,7 @@ const handleMessagePort2 = async (port, rpcId) => {
5653
5827
  };
5654
5828
 
5655
5829
  const handleMessagePort = async (port, rpcId) => {
5656
- const rpc = await create$a({
5830
+ const rpc = await create$b({
5657
5831
  commandMap: {},
5658
5832
  messagePort: port
5659
5833
  });
@@ -6281,6 +6455,7 @@ const commandMap = {
6281
6455
  'ColorTheme.getColorThemeJson': getColorThemeJson,
6282
6456
  'ColorTheme.getColorThemeNames': getColorThemeNames,
6283
6457
  'ColorTheme.hydrate': hydrate$1,
6458
+ 'Commands.executeCommand': executeCommand$2,
6284
6459
  'ExecuteExternalCommand.executeExternalCommand': executeExternalCommand,
6285
6460
  'ExtensionHost.activateExtension2': activateExtension2,
6286
6461
  'ExtensionHost.activateExtension3': activateExtension3,
@@ -6354,6 +6529,7 @@ const commandMap = {
6354
6529
  'ExtensionHostDebug.stepInto': stepInto,
6355
6530
  'ExtensionHostDebug.stepOut': stepOut,
6356
6531
  'ExtensionHostDebug.stepOver': stepOver,
6532
+ 'ExtensionHostQuickPick.showQuickPick': showQuickPick,
6357
6533
  'ExtensionHostRename.executeprepareRenameProvider': executeprepareRenameProvider,
6358
6534
  'ExtensionHostRename.executeRenameProvider': executeRenameProvider,
6359
6535
  'ExtensionHostSourceControl.getIconDefinitions': getIconDefinitions,
@@ -6388,6 +6564,7 @@ const commandMap = {
6388
6564
  'FileSystemMemory.stat': stat,
6389
6565
  'FileSystemMemory.writeFile': writeFile,
6390
6566
  'HandleBeforeUnload.handleBeforeUnload': handleBeforeUnload,
6567
+ 'HandleMessagePort.handleExtensionManagementMessagePort': handleExtensionManagementMessagePort,
6391
6568
  'HandleMessagePort.handleMessagePort': handleMessagePort,
6392
6569
  'HandleMessagePort.handleMessagePort2': handleMessagePort2,
6393
6570
  'IconTheme.getJson': getIconThemeJson,
@@ -6421,7 +6598,7 @@ const commandMap = {
6421
6598
  };
6422
6599
 
6423
6600
  const launchQuickPickWorker = async () => {
6424
- const rpc = await create$c({
6601
+ const rpc = await create$d({
6425
6602
  commandMap: commandMap,
6426
6603
  async send(port) {
6427
6604
  await sendMessagePortToQuickPickWorker(port, 0);
@@ -6431,7 +6608,7 @@ const launchQuickPickWorker = async () => {
6431
6608
  };
6432
6609
 
6433
6610
  const launchRendererWorker = async () => {
6434
- const rpc = await create$7({
6611
+ const rpc = await create$8({
6435
6612
  commandMap: commandMap
6436
6613
  });
6437
6614
  set$d(RendererWorker, rpc);