@opensumi/ide-terminal-next 3.7.2-next-1740052080.0 → 3.7.2-next-1740054042.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 (244) hide show
  1. package/LICENSE +21 -0
  2. package/lib/browser/component/resize.delegate.d.ts +14 -0
  3. package/lib/browser/component/resize.delegate.d.ts.map +1 -0
  4. package/lib/browser/component/resize.delegate.js +46 -0
  5. package/lib/browser/component/resize.delegate.js.map +1 -0
  6. package/lib/browser/component/resize.module.less +77 -0
  7. package/lib/browser/component/resize.view.d.ts +16 -0
  8. package/lib/browser/component/resize.view.d.ts.map +1 -0
  9. package/lib/browser/component/resize.view.js +55 -0
  10. package/lib/browser/component/resize.view.js.map +1 -0
  11. package/lib/browser/component/search.module.less +61 -0
  12. package/lib/browser/component/search.view.d.ts +3 -0
  13. package/lib/browser/component/search.view.d.ts.map +1 -0
  14. package/lib/browser/component/search.view.js +89 -0
  15. package/lib/browser/component/search.view.js.map +1 -0
  16. package/lib/browser/component/tab.item.d.ts +7 -0
  17. package/lib/browser/component/tab.item.d.ts.map +1 -0
  18. package/lib/browser/component/tab.item.js +121 -0
  19. package/lib/browser/component/tab.item.js.map +1 -0
  20. package/lib/browser/component/tab.module.less +174 -0
  21. package/lib/browser/component/tab.view.d.ts +4 -0
  22. package/lib/browser/component/tab.view.d.ts.map +1 -0
  23. package/lib/browser/component/tab.view.js +65 -0
  24. package/lib/browser/component/tab.view.js.map +1 -0
  25. package/lib/browser/component/terminal.module.less +50 -0
  26. package/lib/browser/component/terminal.variable.d.ts +8 -0
  27. package/lib/browser/component/terminal.variable.d.ts.map +1 -0
  28. package/lib/browser/component/terminal.variable.js +44 -0
  29. package/lib/browser/component/terminal.variable.js.map +1 -0
  30. package/lib/browser/component/terminal.view.d.ts +5 -0
  31. package/lib/browser/component/terminal.view.d.ts.map +1 -0
  32. package/lib/browser/component/terminal.view.js +63 -0
  33. package/lib/browser/component/terminal.view.js.map +1 -0
  34. package/lib/browser/component/terminal.widget.d.ts +10 -0
  35. package/lib/browser/component/terminal.widget.d.ts.map +1 -0
  36. package/lib/browser/component/terminal.widget.js +65 -0
  37. package/lib/browser/component/terminal.widget.js.map +1 -0
  38. package/lib/browser/component/variable.module.less +15 -0
  39. package/lib/browser/contribution/index.d.ts.map +1 -0
  40. package/lib/browser/contribution/index.js +11 -0
  41. package/lib/browser/contribution/index.js.map +1 -0
  42. package/lib/browser/contribution/terminal.command.js +328 -0
  43. package/lib/browser/contribution/terminal.keybinding.js +87 -0
  44. package/lib/browser/contribution/terminal.lifecycle.js +52 -0
  45. package/lib/browser/contribution/terminal.menu.js +168 -0
  46. package/lib/browser/contribution/terminal.network.js +44 -0
  47. package/lib/browser/contribution/terminal.preference.js +43 -0
  48. package/lib/browser/contribution/terminal.view.js +57 -0
  49. package/lib/browser/index.js +124 -0
  50. package/lib/browser/links/base.d.ts +8 -0
  51. package/lib/browser/links/base.d.ts.map +1 -0
  52. package/lib/browser/links/base.js +13 -0
  53. package/lib/browser/links/base.js.map +1 -0
  54. package/lib/browser/links/external-link-provider-adapter.d.ts +21 -0
  55. package/lib/browser/links/external-link-provider-adapter.d.ts.map +1 -0
  56. package/lib/browser/links/external-link-provider-adapter.js +74 -0
  57. package/lib/browser/links/external-link-provider-adapter.js.map +1 -0
  58. package/lib/browser/links/helpers.d.ts +7 -0
  59. package/lib/browser/links/helpers.d.ts.map +1 -0
  60. package/lib/browser/links/helpers.js +128 -0
  61. package/lib/browser/links/helpers.js.map +1 -0
  62. package/lib/browser/links/link-manager.d.ts +92 -0
  63. package/lib/browser/links/link-manager.d.ts.map +1 -0
  64. package/lib/browser/links/link-manager.js +342 -0
  65. package/lib/browser/links/link-manager.js.map +1 -0
  66. package/lib/browser/links/link.d.ts +31 -0
  67. package/lib/browser/links/link.d.ts.map +1 -0
  68. package/lib/browser/links/link.js +136 -0
  69. package/lib/browser/links/link.js.map +1 -0
  70. package/lib/browser/links/protocol-link-provider.d.ts +14 -0
  71. package/lib/browser/links/protocol-link-provider.d.ts.map +1 -0
  72. package/lib/browser/links/protocol-link-provider.js +71 -0
  73. package/lib/browser/links/protocol-link-provider.js.map +1 -0
  74. package/lib/browser/links/validated-local-link-provider.d.ts +41 -0
  75. package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -0
  76. package/lib/browser/links/validated-local-link-provider.js +235 -0
  77. package/lib/browser/links/validated-local-link-provider.js.map +1 -0
  78. package/lib/browser/links/word-link-provider.d.ts +29 -0
  79. package/lib/browser/links/word-link-provider.d.ts.map +1 -0
  80. package/lib/browser/links/word-link-provider.js +153 -0
  81. package/lib/browser/links/word-link-provider.js.map +1 -0
  82. package/lib/browser/terminal.addon.js +83 -0
  83. package/lib/browser/terminal.api.js +162 -0
  84. package/lib/browser/terminal.client.js +680 -0
  85. package/lib/browser/terminal.color.js +240 -0
  86. package/lib/browser/terminal.context-key.js +29 -0
  87. package/lib/browser/terminal.context-menu.js +96 -0
  88. package/lib/browser/terminal.controller.js +669 -0
  89. package/lib/browser/terminal.environment.service.js +153 -0
  90. package/lib/browser/terminal.error.js +61 -0
  91. package/lib/browser/terminal.ext.host.proxy.js +108 -0
  92. package/lib/browser/terminal.hover.manager.js +85 -0
  93. package/lib/browser/terminal.input.js +32 -0
  94. package/lib/browser/terminal.internal.service.js +107 -0
  95. package/lib/browser/terminal.network.js +150 -0
  96. package/lib/browser/terminal.preference.js +136 -0
  97. package/lib/browser/terminal.profile.internal.js +104 -0
  98. package/lib/browser/terminal.profile.js +211 -0
  99. package/lib/browser/terminal.render.js +25 -0
  100. package/lib/browser/terminal.restore.js +49 -0
  101. package/lib/browser/terminal.search.js +109 -0
  102. package/lib/browser/terminal.service.js +163 -0
  103. package/lib/common/api.d.ts +22 -0
  104. package/lib/common/api.d.ts.map +1 -0
  105. package/lib/common/api.js +5 -0
  106. package/lib/common/api.js.map +1 -0
  107. package/lib/common/client.d.ts +199 -0
  108. package/lib/common/client.d.ts.map +1 -0
  109. package/lib/common/client.js +6 -0
  110. package/lib/common/client.js.map +1 -0
  111. package/lib/common/controller.d.ts +149 -0
  112. package/lib/common/controller.d.ts.map +1 -0
  113. package/lib/common/controller.js +8 -0
  114. package/lib/common/controller.js.map +1 -0
  115. package/lib/common/environmentVariable.d.ts +116 -0
  116. package/lib/common/environmentVariable.d.ts.map +1 -0
  117. package/lib/common/environmentVariable.js +30 -0
  118. package/lib/common/environmentVariable.js.map +1 -0
  119. package/lib/common/environmentVariableCollection.d.ts +9 -0
  120. package/lib/common/environmentVariableCollection.d.ts.map +1 -0
  121. package/lib/common/environmentVariableCollection.js +140 -0
  122. package/lib/common/environmentVariableCollection.js.map +1 -0
  123. package/lib/common/error.d.ts +41 -0
  124. package/lib/common/error.d.ts.map +1 -0
  125. package/lib/common/error.js +13 -0
  126. package/lib/common/error.js.map +1 -0
  127. package/lib/common/extension.d.ts +139 -0
  128. package/lib/common/extension.d.ts.map +1 -0
  129. package/lib/common/extension.js +57 -0
  130. package/lib/common/extension.js.map +1 -0
  131. package/lib/common/index.d.ts +17 -0
  132. package/lib/common/index.d.ts.map +1 -0
  133. package/lib/common/index.js +20 -0
  134. package/lib/common/index.js.map +1 -0
  135. package/lib/common/link-computer.d.ts +56 -0
  136. package/lib/common/link-computer.d.ts.map +1 -0
  137. package/lib/common/link-computer.js +282 -0
  138. package/lib/common/link-computer.js.map +1 -0
  139. package/lib/common/network.d.ts +48 -0
  140. package/lib/common/network.d.ts.map +1 -0
  141. package/lib/common/network.js +10 -0
  142. package/lib/common/network.js.map +1 -0
  143. package/lib/common/preference.d.ts +134 -0
  144. package/lib/common/preference.d.ts.map +1 -0
  145. package/lib/common/preference.js +199 -0
  146. package/lib/common/preference.js.map +1 -0
  147. package/lib/common/process.d.ts +8 -0
  148. package/lib/common/process.d.ts.map +1 -0
  149. package/lib/common/process.js +3 -0
  150. package/lib/common/process.js.map +1 -0
  151. package/lib/common/profile.d.ts +99 -0
  152. package/lib/common/profile.d.ts.map +1 -0
  153. package/lib/common/profile.js +27 -0
  154. package/lib/common/profile.js.map +1 -0
  155. package/lib/common/pty.d.ts +525 -0
  156. package/lib/common/pty.d.ts.map +1 -0
  157. package/lib/common/pty.js +28 -0
  158. package/lib/common/pty.js.map +1 -0
  159. package/lib/common/render.d.ts +29 -0
  160. package/lib/common/render.d.ts.map +1 -0
  161. package/lib/common/render.js +10 -0
  162. package/lib/common/render.js.map +1 -0
  163. package/lib/common/resize.d.ts +43 -0
  164. package/lib/common/resize.d.ts.map +1 -0
  165. package/lib/common/resize.js +3 -0
  166. package/lib/common/resize.js.map +1 -0
  167. package/lib/common/restore.d.ts +6 -0
  168. package/lib/common/restore.d.ts.map +1 -0
  169. package/lib/common/restore.js +5 -0
  170. package/lib/common/restore.js.map +1 -0
  171. package/lib/common/service.d.ts +96 -0
  172. package/lib/common/service.d.ts.map +1 -0
  173. package/lib/common/service.js +6 -0
  174. package/lib/common/service.js.map +1 -0
  175. package/lib/common/shell.d.ts +11 -0
  176. package/lib/common/shell.d.ts.map +1 -0
  177. package/lib/common/shell.js +14 -0
  178. package/lib/common/shell.js.map +1 -0
  179. package/lib/common/theme.d.ts +6 -0
  180. package/lib/common/theme.d.ts.map +1 -0
  181. package/lib/common/theme.js +5 -0
  182. package/lib/common/theme.js.map +1 -0
  183. package/lib/common/utils.d.ts +4 -0
  184. package/lib/common/utils.d.ts.map +1 -0
  185. package/lib/common/utils.js +15 -0
  186. package/lib/common/utils.js.map +1 -0
  187. package/lib/common/xterm.d.ts +27 -0
  188. package/lib/common/xterm.d.ts.map +1 -0
  189. package/lib/common/xterm.js +10 -0
  190. package/lib/common/xterm.js.map +1 -0
  191. package/lib/index.js +5 -0
  192. package/lib/node/data-store.d.ts +13 -0
  193. package/lib/node/data-store.d.ts.map +1 -0
  194. package/lib/node/data-store.js +6 -0
  195. package/lib/node/data-store.js.map +1 -0
  196. package/lib/node/index.d.ts +10 -0
  197. package/lib/node/index.d.ts.map +1 -0
  198. package/lib/node/index.js +64 -0
  199. package/lib/node/index.js.map +1 -0
  200. package/lib/node/pty.d.ts +42 -0
  201. package/lib/node/pty.d.ts.map +1 -0
  202. package/lib/node/pty.js +277 -0
  203. package/lib/node/pty.js.map +1 -0
  204. package/lib/node/pty.manager.d.ts +52 -0
  205. package/lib/node/pty.manager.d.ts.map +1 -0
  206. package/lib/node/pty.manager.js +157 -0
  207. package/lib/node/pty.manager.js.map +1 -0
  208. package/lib/node/pty.manager.remote.d.ts +23 -0
  209. package/lib/node/pty.manager.remote.d.ts.map +1 -0
  210. package/lib/node/pty.manager.remote.js +124 -0
  211. package/lib/node/pty.manager.remote.js.map +1 -0
  212. package/lib/node/pty.proxy.d.ts +45 -0
  213. package/lib/node/pty.proxy.d.ts.map +1 -0
  214. package/lib/node/pty.proxy.js +277 -0
  215. package/lib/node/pty.proxy.js.map +1 -0
  216. package/lib/node/pty.proxy.remote.exec.d.ts +2 -0
  217. package/lib/node/pty.proxy.remote.exec.d.ts.map +1 -0
  218. package/lib/node/pty.proxy.remote.exec.js +7 -0
  219. package/lib/node/pty.proxy.remote.exec.js.map +1 -0
  220. package/lib/node/shell-integration.service.d.ts +24 -0
  221. package/lib/node/shell-integration.service.d.ts.map +1 -0
  222. package/lib/node/shell-integration.service.js +187 -0
  223. package/lib/node/shell-integration.service.js.map +1 -0
  224. package/lib/node/shell.d.ts +20 -0
  225. package/lib/node/shell.d.ts.map +1 -0
  226. package/lib/node/shell.js +199 -0
  227. package/lib/node/shell.js.map +1 -0
  228. package/lib/node/terminal.process.service.d.ts +5 -0
  229. package/lib/node/terminal.process.service.d.ts.map +1 -0
  230. package/lib/node/terminal.process.service.js +15 -0
  231. package/lib/node/terminal.process.service.js.map +1 -0
  232. package/lib/node/terminal.profile.service.d.ts +19 -0
  233. package/lib/node/terminal.profile.service.d.ts.map +1 -0
  234. package/lib/node/terminal.profile.service.js +228 -0
  235. package/lib/node/terminal.profile.service.js.map +1 -0
  236. package/lib/node/terminal.service.client.d.ts +51 -0
  237. package/lib/node/terminal.service.client.d.ts.map +1 -0
  238. package/lib/node/terminal.service.client.js +159 -0
  239. package/lib/node/terminal.service.client.js.map +1 -0
  240. package/lib/node/terminal.service.d.ts +30 -0
  241. package/lib/node/terminal.service.d.ts.map +1 -0
  242. package/lib/node/terminal.service.js +246 -0
  243. package/lib/node/terminal.service.js.map +1 -0
  244. package/package.json +18 -18
@@ -0,0 +1,41 @@
1
+ import { IWindowService } from '@opensumi/ide-core-browser/lib/window';
2
+ import { IDisposable, URI } from '@opensumi/ide-core-common';
3
+ import { TerminalBaseLinkProvider } from './base';
4
+ import { TerminalLink } from './link';
5
+ import { XtermLinkMatcherHandler } from './link-manager';
6
+ import type { TerminalClient } from '../terminal.client';
7
+ import type { IViewportRange, Terminal } from '@xterm/xterm';
8
+ /** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
9
+ export declare const unixLocalLinkClause: string;
10
+ export declare const winDrivePrefix = "(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:";
11
+ /** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
12
+ export declare const winLocalLinkClause: string;
13
+ /** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
14
+ replacing space with nonBreakningSpace or space ASCII code - 32. */
15
+ export declare const lineAndColumnClause: string;
16
+ export declare const winLineAndColumnMatchIndex = 12;
17
+ export declare const unixLineAndColumnMatchIndex = 11;
18
+ export declare const lineAndColumnClauseGroupCount = 6;
19
+ export declare class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider {
20
+ private readonly _xterm;
21
+ private readonly _client;
22
+ private readonly _activateFileCallback;
23
+ private readonly _wrapLinkHandler;
24
+ private readonly _tooltipCallback;
25
+ private readonly _validationCallback;
26
+ private readonly injector;
27
+ protected readonly windowService: IWindowService;
28
+ private readonly commandService;
29
+ private readonly workspaceService;
30
+ private readonly appConfig;
31
+ constructor(_xterm: Terminal, _client: TerminalClient, _activateFileCallback: (event: MouseEvent | undefined, link: string) => void, _wrapLinkHandler: (handler: (event: MouseEvent | undefined, link: string) => void) => XtermLinkMatcherHandler, _tooltipCallback: (link: TerminalLink, viewportRange: IViewportRange, modifierDownCallback?: () => void, modifierUpCallback?: () => void) => IDisposable, _validationCallback: (link: string, callback: (result: {
32
+ uri: URI;
33
+ isDirectory: boolean;
34
+ } | undefined) => void) => void);
35
+ protected _provideLinks(y: number): Promise<TerminalLink[]>;
36
+ private detectLocalLink;
37
+ protected get _localLinkRegex(): RegExp;
38
+ private _handleLocalFolderLink;
39
+ private _isDirectoryInsideWorkspace;
40
+ }
41
+ //# sourceMappingURL=validated-local-link-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validated-local-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAkB,WAAW,EAAmB,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAG9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAA6E,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAe,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAO1E,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QASvB,CAAC;AAEV,eAAO,MAAM,cAAc,kCAAkC,CAAC;AAI9D,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,QAStB,CAAC;AAEV;mEACmE;AACnE,eAAO,MAAM,mBAAmB,QASE,CAAC;AAGnC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAG9C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAI/C,qBACa,kCAAmC,SAAQ,wBAAwB;IAiB5E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAGjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAMjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IA3BtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAGpC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IAGjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAGhD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAGnB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,cAAc,EACvB,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5E,gBAAgB,EAAE,CACjC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,KAC3D,uBAAuB,EACX,gBAAgB,EAAE,CACjC,IAAI,EAAE,YAAY,EAClB,aAAa,EAAE,cAAc,EAC7B,oBAAoB,CAAC,EAAE,MAAM,IAAI,EACjC,kBAAkB,CAAC,EAAE,MAAM,IAAI,KAC5B,WAAW,EACC,mBAAmB,EAAE,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,KAAK,IAAI,KACvE,IAAI;cAKK,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA0EnD,eAAe;IA0D7B,SAAS,KAAK,eAAe,IAAI,MAAM,CAItC;YAEa,sBAAsB;YAatB,2BAA2B;CAS1C"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ /* ---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the MIT License. See License.txt in the project root for license information.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ // Some code copied and modified from https://github.com/microsoft/vscode/blob/1.63.2/src/vs/workbench/contrib/terminal/browser/links/terminalValidatedLocalLinkProvider.ts
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.TerminalValidatedLocalLinkProvider = exports.lineAndColumnClauseGroupCount = exports.unixLineAndColumnMatchIndex = exports.winLineAndColumnMatchIndex = exports.lineAndColumnClause = exports.winLocalLinkClause = exports.winDrivePrefix = exports.unixLocalLinkClause = void 0;
9
+ const tslib_1 = require("tslib");
10
+ const di_1 = require("@opensumi/di");
11
+ const config_provider_1 = require("@opensumi/ide-core-browser/lib/react-providers/config-provider");
12
+ const window_1 = require("@opensumi/ide-core-browser/lib/window");
13
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
14
+ const workspace_interface_1 = require("@opensumi/ide-workspace/lib/common/workspace.interface");
15
+ const base_1 = require("./base");
16
+ const helpers_1 = require("./helpers");
17
+ const link_1 = require("./link");
18
+ const pathPrefix = '(\\.\\.?|\\~)';
19
+ const pathSeparatorClause = '\\/';
20
+ // '":; are allowed in paths but they are often separators so ignore them
21
+ // Also disallow \\ to prevent a catastropic backtracking case #24795
22
+ const excludedPathCharactersClause = '[^\\0\\s!`&*()\\[\\]\'":;\\\\]';
23
+ /** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
24
+ exports.unixLocalLinkClause = '((' +
25
+ pathPrefix +
26
+ '|(' +
27
+ excludedPathCharactersClause +
28
+ ')+)?(' +
29
+ pathSeparatorClause +
30
+ '(' +
31
+ excludedPathCharactersClause +
32
+ ')+)+)';
33
+ exports.winDrivePrefix = '(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:';
34
+ const winPathPrefix = '(' + exports.winDrivePrefix + '|\\.\\.?|\\~)';
35
+ const winPathSeparatorClause = '(\\\\|\\/)';
36
+ const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!`&*()\\[\\]\'":;]';
37
+ /** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
38
+ exports.winLocalLinkClause = '((' +
39
+ winPathPrefix +
40
+ '|(' +
41
+ winExcludedPathCharactersClause +
42
+ ')+)?(' +
43
+ winPathSeparatorClause +
44
+ '(' +
45
+ winExcludedPathCharactersClause +
46
+ ')+)+)';
47
+ /** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
48
+ replacing space with nonBreakningSpace or space ASCII code - 32. */
49
+ exports.lineAndColumnClause = [
50
+ '((\\S*)[\'"], line ((\\d+)( column (\\d+))?))', // "(file path)", line 45 [see #40468]
51
+ '((\\S*)[\'"],((\\d+)(:(\\d+))?))', // "(file path)",45 [see #78205]
52
+ '((\\S*) on line ((\\d+)(, column (\\d+))?))', // (file path) on line 8, column 13
53
+ '((\\S*):line ((\\d+)(, column (\\d+))?))', // (file path):line 8, column 13
54
+ '(([^\\s\\(\\)]*)(\\s?[\\(\\[](\\d+)(,\\s?(\\d+))?)[\\)\\]])', // (file path)(45), (file path) (45), (file path)(45,18), (file path) (45,18), (file path)(45, 18), (file path) (45, 18), also with []
55
+ '(([^:\\s\\(\\)<>\'"\\[\\]]*)(:(\\d+))?(:(\\d+))?)', // (file path):336, (file path):336:9
56
+ ]
57
+ .join('|')
58
+ .replace(/ /g, `[${'\u00A0'} ]`);
59
+ // Changing any regex may effect this value, hence changes this as well if required.
60
+ exports.winLineAndColumnMatchIndex = 12;
61
+ exports.unixLineAndColumnMatchIndex = 11;
62
+ // Each line and column clause have 6 groups (ie no. of expressions in round brackets)
63
+ exports.lineAndColumnClauseGroupCount = 6;
64
+ const MAX_LENGTH = 2000;
65
+ let TerminalValidatedLocalLinkProvider = class TerminalValidatedLocalLinkProvider extends base_1.TerminalBaseLinkProvider {
66
+ constructor(_xterm, _client, _activateFileCallback, _wrapLinkHandler, _tooltipCallback, _validationCallback) {
67
+ super();
68
+ this._xterm = _xterm;
69
+ this._client = _client;
70
+ this._activateFileCallback = _activateFileCallback;
71
+ this._wrapLinkHandler = _wrapLinkHandler;
72
+ this._tooltipCallback = _tooltipCallback;
73
+ this._validationCallback = _validationCallback;
74
+ }
75
+ async _provideLinks(y) {
76
+ var _a, _b;
77
+ const result = [];
78
+ let startLine = y - 1;
79
+ let endLine = startLine;
80
+ const lines = [this._xterm.buffer.active.getLine(startLine)];
81
+ while (startLine >= 0 && ((_a = this._xterm.buffer.active.getLine(startLine)) === null || _a === void 0 ? void 0 : _a.isWrapped)) {
82
+ lines.unshift(this._xterm.buffer.active.getLine(startLine - 1));
83
+ startLine--;
84
+ }
85
+ while (endLine < this._xterm.buffer.active.length && ((_b = this._xterm.buffer.active.getLine(endLine + 1)) === null || _b === void 0 ? void 0 : _b.isWrapped)) {
86
+ lines.push(this._xterm.buffer.active.getLine(endLine + 1));
87
+ endLine++;
88
+ }
89
+ const text = (0, helpers_1.getXtermLineContent)(this._xterm.buffer.active, startLine, endLine, this._xterm.cols);
90
+ if (text.length > MAX_LENGTH) {
91
+ return [];
92
+ }
93
+ // clone regex to do a global search on text
94
+ const rex = new RegExp(this._localLinkRegex, 'g');
95
+ let match;
96
+ let stringIndex = -1;
97
+ while ((match = rex.exec(text)) !== null) {
98
+ let link = match[0];
99
+ if (!link) {
100
+ // something matched but does not comply with the given matchIndex
101
+ // since this is most likely a bug the regex itself we simply do nothing here
102
+ // this._logService.debug('match found without corresponding matchIndex', match, matcher);
103
+ break;
104
+ }
105
+ // Get index, match.index is for the outer match which includes negated chars
106
+ // therefore we cannot use match.index directly, instead we search the position
107
+ // of the match group in text again
108
+ // also correct regex and string search offsets for the next loop run
109
+ stringIndex = text.indexOf(link, stringIndex + 1);
110
+ rex.lastIndex = stringIndex + link.length;
111
+ if (stringIndex < 0) {
112
+ // invalid stringIndex (should not have happened)
113
+ break;
114
+ }
115
+ // Adjust the link range to exclude a/ and b/ if it looks like a git diff
116
+ if (
117
+ // --- a/foo/bar
118
+ // +++ b/foo/bar
119
+ ((text.startsWith('--- a/') || text.startsWith('+++ b/')) && stringIndex === 4) ||
120
+ // diff --git a/foo/bar b/foo/bar
121
+ (text.startsWith('diff --git') && (link.startsWith('a/') || link.startsWith('b/')))) {
122
+ link = link.substring(2);
123
+ stringIndex += 2;
124
+ }
125
+ const validatedLinks = await this.detectLocalLink(link, lines, startLine, stringIndex, 1);
126
+ if (validatedLinks.length > 0) {
127
+ result.push(...validatedLinks);
128
+ }
129
+ }
130
+ if (result.length === 0) {
131
+ const validatedLinks = await this.detectLocalLink(text, lines, startLine, stringIndex, 2);
132
+ if (validatedLinks.length > 0) {
133
+ result.push(...validatedLinks);
134
+ }
135
+ }
136
+ return result;
137
+ }
138
+ async detectLocalLink(text, bufferLines, startLine, stringIndex, offset) {
139
+ const result = [];
140
+ const validatedLink = await new Promise((r) => {
141
+ this._validationCallback(text, async (result) => {
142
+ if (result) {
143
+ const label = result.isDirectory
144
+ ? (await this._isDirectoryInsideWorkspace(result.uri))
145
+ ? link_1.FOLDER_IN_WORKSPACE_LABEL
146
+ : link_1.FOLDER_NOT_IN_WORKSPACE_LABEL
147
+ : link_1.OPEN_FILE_LABEL;
148
+ const activateCallback = this._wrapLinkHandler((event, text) => {
149
+ if (result.isDirectory) {
150
+ this._handleLocalFolderLink(result.uri);
151
+ }
152
+ else {
153
+ this._activateFileCallback(event, text);
154
+ }
155
+ });
156
+ // Convert the link text's string index into a wrapped buffer range
157
+ const bufferRange = (0, helpers_1.convertLinkRangeToBuffer)(bufferLines, this._xterm.cols, {
158
+ startColumn: stringIndex + 1,
159
+ startLineNumber: 1,
160
+ endColumn: stringIndex + text.length + offset,
161
+ endLineNumber: 1,
162
+ }, startLine);
163
+ r(this.injector.get(link_1.TerminalLink, [
164
+ this._xterm,
165
+ bufferRange,
166
+ text,
167
+ this._xterm.buffer.active.viewportY,
168
+ activateCallback,
169
+ this._tooltipCallback,
170
+ true,
171
+ label,
172
+ ]));
173
+ }
174
+ else {
175
+ r(undefined);
176
+ }
177
+ });
178
+ });
179
+ if (validatedLink) {
180
+ result.push(validatedLink);
181
+ }
182
+ return result;
183
+ }
184
+ get _localLinkRegex() {
185
+ const baseLocalLinkClause = this._client.os === ide_core_common_1.OperatingSystem.Windows ? exports.winLocalLinkClause : exports.unixLocalLinkClause;
186
+ // Append line and column number regex
187
+ return new RegExp(`${baseLocalLinkClause}(${exports.lineAndColumnClause})`);
188
+ }
189
+ async _handleLocalFolderLink(uri) {
190
+ // If the folder is within one of the window's workspaces, focus it in the explorer
191
+ if (await this._isDirectoryInsideWorkspace(uri)) {
192
+ await this.commandService.executeCommand('revealInExplorer', uri);
193
+ return;
194
+ }
195
+ // Open a new window for the folder
196
+ if (this.appConfig.isElectronRenderer) {
197
+ this.windowService.openWorkspace(uri, { newWindow: true });
198
+ }
199
+ }
200
+ async _isDirectoryInsideWorkspace(uri) {
201
+ const folders = await this.workspaceService.roots;
202
+ for (const folder of folders) {
203
+ if (ide_core_common_1.URI.parse(folder.uri).isEqualOrParent(uri)) {
204
+ return true;
205
+ }
206
+ }
207
+ return false;
208
+ }
209
+ };
210
+ exports.TerminalValidatedLocalLinkProvider = TerminalValidatedLocalLinkProvider;
211
+ tslib_1.__decorate([
212
+ (0, di_1.Autowired)(di_1.INJECTOR_TOKEN),
213
+ tslib_1.__metadata("design:type", di_1.Injector)
214
+ ], TerminalValidatedLocalLinkProvider.prototype, "injector", void 0);
215
+ tslib_1.__decorate([
216
+ (0, di_1.Autowired)(window_1.IWindowService),
217
+ tslib_1.__metadata("design:type", Object)
218
+ ], TerminalValidatedLocalLinkProvider.prototype, "windowService", void 0);
219
+ tslib_1.__decorate([
220
+ (0, di_1.Autowired)(ide_core_common_1.CommandService),
221
+ tslib_1.__metadata("design:type", Object)
222
+ ], TerminalValidatedLocalLinkProvider.prototype, "commandService", void 0);
223
+ tslib_1.__decorate([
224
+ (0, di_1.Autowired)(workspace_interface_1.IWorkspaceService),
225
+ tslib_1.__metadata("design:type", Object)
226
+ ], TerminalValidatedLocalLinkProvider.prototype, "workspaceService", void 0);
227
+ tslib_1.__decorate([
228
+ (0, di_1.Autowired)(config_provider_1.AppConfig),
229
+ tslib_1.__metadata("design:type", Object)
230
+ ], TerminalValidatedLocalLinkProvider.prototype, "appConfig", void 0);
231
+ exports.TerminalValidatedLocalLinkProvider = TerminalValidatedLocalLinkProvider = tslib_1.__decorate([
232
+ (0, di_1.Injectable)({ multiple: true }),
233
+ tslib_1.__metadata("design:paramtypes", [Function, Function, Function, Function, Function, Function])
234
+ ], TerminalValidatedLocalLinkProvider);
235
+ //# sourceMappingURL=validated-local-link-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validated-local-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { Terminal } from '@xterm/xterm';
2
+ import { PrefixQuickOpenService } from '@opensumi/ide-core-browser/lib/quick-open';
3
+ import { IWindowService } from '@opensumi/ide-core-browser/lib/window';
4
+ import { URI } from '@opensumi/ide-core-common';
5
+ import { TerminalBaseLinkProvider } from './base';
6
+ import { TerminalLink } from './link';
7
+ export declare const USUAL_WORD_SEPARATORS = " ()[]{}',\"`\u2500\u2018\u2019\u201C\u201D|";
8
+ export declare class TerminalWordLinkProvider extends TerminalBaseLinkProvider {
9
+ private readonly _xterm;
10
+ private readonly _validationCallback;
11
+ private readonly _activateFileCallback;
12
+ private _separatorRegex;
13
+ private readonly appConfig;
14
+ private readonly commandService;
15
+ protected readonly windowService: IWindowService;
16
+ private readonly injector;
17
+ private readonly workspaceService;
18
+ protected readonly quickOpenService: PrefixQuickOpenService;
19
+ constructor(_xterm: Terminal, _validationCallback: (link: string, callback: (result: {
20
+ uri: URI;
21
+ isDirectory: boolean;
22
+ } | undefined) => void) => void, _activateFileCallback: (event: MouseEvent | undefined, link: string) => void);
23
+ private _refreshSeparatorCodes;
24
+ protected _provideLinks(bufferLineNumber: number): Promise<TerminalLink[]> | TerminalLink[];
25
+ private _handleLocalFolderLink;
26
+ private _parseWords;
27
+ private _isDirectoryInsideWorkspace;
28
+ }
29
+ //# sourceMappingURL=word-link-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"word-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/word-link-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAMhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,eAAO,MAAM,qBAAqB,gDAAuB,CAAC;AAQ1D,qBACa,wBAAyB,SAAQ,wBAAwB;IAsBlE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAIpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IA1BxC,OAAO,CAAC,eAAe,CAAU;IAGjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAGtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAGhD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IAGjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAGpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;gBAGzC,MAAM,EAAE,QAAQ,EAChB,mBAAmB,EAAE,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,KAAK,IAAI,KACvE,IAAI,EACQ,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;IAM/F,OAAO,CAAC,sBAAsB;IAQ9B,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE;YAsE7E,sBAAsB;IAapC,OAAO,CAAC,WAAW;YAgBL,2BAA2B;CAS1C"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TerminalWordLinkProvider = exports.USUAL_WORD_SEPARATORS = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const xterm_1 = require("@xterm/xterm");
6
+ const di_1 = require("@opensumi/di");
7
+ const quick_open_1 = require("@opensumi/ide-core-browser/lib/quick-open");
8
+ const config_provider_1 = require("@opensumi/ide-core-browser/lib/react-providers/config-provider");
9
+ const window_1 = require("@opensumi/ide-core-browser/lib/window");
10
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
11
+ const command_1 = require("@opensumi/ide-core-common/lib/command");
12
+ const workspace_interface_1 = require("@opensumi/ide-workspace/lib/common/workspace.interface");
13
+ const terminal_typeAhead_addon_1 = require("../terminal.typeAhead.addon");
14
+ const base_1 = require("./base");
15
+ const helpers_1 = require("./helpers");
16
+ const link_1 = require("./link");
17
+ exports.USUAL_WORD_SEPARATORS = ' ()[]{}\',"`─‘’“”|';
18
+ let TerminalWordLinkProvider = class TerminalWordLinkProvider extends base_1.TerminalBaseLinkProvider {
19
+ constructor(_xterm, _validationCallback, _activateFileCallback) {
20
+ super();
21
+ this._xterm = _xterm;
22
+ this._validationCallback = _validationCallback;
23
+ this._activateFileCallback = _activateFileCallback;
24
+ this._refreshSeparatorCodes();
25
+ }
26
+ _refreshSeparatorCodes() {
27
+ let powerlineSymbols = '';
28
+ for (let i = 0xe0b0; i <= 0xe0bf; i++) {
29
+ powerlineSymbols += String.fromCharCode(i);
30
+ }
31
+ this._separatorRegex = new RegExp(`[${(0, terminal_typeAhead_addon_1.escapeRegExpCharacters)(exports.USUAL_WORD_SEPARATORS)}${powerlineSymbols}]`, 'g');
32
+ }
33
+ _provideLinks(bufferLineNumber) {
34
+ const links = [];
35
+ const startLine = bufferLineNumber - 1;
36
+ const endLine = startLine;
37
+ const lines = [this._xterm.buffer.active.getLine(startLine)];
38
+ const text = (0, helpers_1.getXtermLineContent)(this._xterm.buffer.active, startLine, endLine, this._xterm.cols);
39
+ if (text === '' || text.length > 1024) {
40
+ return [];
41
+ }
42
+ // Parse out all words from the wrapped line
43
+ const words = this._parseWords(text);
44
+ // Map the words to ITerminalLink objects
45
+ for (const word of words) {
46
+ if (word.text === '') {
47
+ continue;
48
+ }
49
+ if (word.text.length > 0 && word.text.charAt(word.text.length - 1) === ':') {
50
+ word.text = word.text.slice(0, -1);
51
+ word.endIndex--;
52
+ }
53
+ const bufferRange = (0, helpers_1.convertLinkRangeToBuffer)(lines, this._xterm.cols, {
54
+ startColumn: word.startIndex + 1,
55
+ startLineNumber: 1,
56
+ endColumn: word.endIndex + 1,
57
+ endLineNumber: 1,
58
+ }, startLine);
59
+ // Search links
60
+ const activateHandler = (event, text) => {
61
+ this._validationCallback(text, async (result) => {
62
+ if (result) {
63
+ if (result.isDirectory) {
64
+ this._handleLocalFolderLink(result.uri);
65
+ }
66
+ else {
67
+ this._activateFileCallback(event, text);
68
+ }
69
+ }
70
+ else {
71
+ this.quickOpenService.open(text);
72
+ }
73
+ });
74
+ };
75
+ links.push(this.injector.get(link_1.TerminalLink, [
76
+ this._xterm,
77
+ bufferRange,
78
+ word.text,
79
+ this._xterm.buffer.active.viewportY,
80
+ activateHandler,
81
+ undefined,
82
+ true,
83
+ word.text,
84
+ ]));
85
+ }
86
+ return links;
87
+ }
88
+ async _handleLocalFolderLink(uri) {
89
+ // If the folder is within one of the window's workspaces, focus it in the explorer
90
+ if (await this._isDirectoryInsideWorkspace(uri)) {
91
+ await this.commandService.executeCommand('revealInExplorer', uri);
92
+ return;
93
+ }
94
+ // Open a new window for the folder
95
+ if (this.appConfig.isElectronRenderer) {
96
+ this.windowService.openWorkspace(uri, { newWindow: true });
97
+ }
98
+ }
99
+ _parseWords(text) {
100
+ const words = [];
101
+ const splitWords = text.split(this._separatorRegex);
102
+ let runningIndex = 0;
103
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
104
+ for (let i = 0; i < splitWords.length; i++) {
105
+ words.push({
106
+ text: splitWords[i],
107
+ startIndex: runningIndex,
108
+ endIndex: runningIndex + splitWords[i].length,
109
+ });
110
+ runningIndex += splitWords[i].length + 1;
111
+ }
112
+ return words;
113
+ }
114
+ async _isDirectoryInsideWorkspace(uri) {
115
+ const folders = await this.workspaceService.roots;
116
+ for (const folder of folders) {
117
+ if (ide_core_common_1.URI.parse(folder.uri).isEqualOrParent(uri)) {
118
+ return true;
119
+ }
120
+ }
121
+ return false;
122
+ }
123
+ };
124
+ exports.TerminalWordLinkProvider = TerminalWordLinkProvider;
125
+ tslib_1.__decorate([
126
+ (0, di_1.Autowired)(config_provider_1.AppConfig),
127
+ tslib_1.__metadata("design:type", Object)
128
+ ], TerminalWordLinkProvider.prototype, "appConfig", void 0);
129
+ tslib_1.__decorate([
130
+ (0, di_1.Autowired)(command_1.CommandService),
131
+ tslib_1.__metadata("design:type", Object)
132
+ ], TerminalWordLinkProvider.prototype, "commandService", void 0);
133
+ tslib_1.__decorate([
134
+ (0, di_1.Autowired)(window_1.IWindowService),
135
+ tslib_1.__metadata("design:type", Object)
136
+ ], TerminalWordLinkProvider.prototype, "windowService", void 0);
137
+ tslib_1.__decorate([
138
+ (0, di_1.Autowired)(di_1.INJECTOR_TOKEN),
139
+ tslib_1.__metadata("design:type", di_1.Injector)
140
+ ], TerminalWordLinkProvider.prototype, "injector", void 0);
141
+ tslib_1.__decorate([
142
+ (0, di_1.Autowired)(workspace_interface_1.IWorkspaceService),
143
+ tslib_1.__metadata("design:type", Object)
144
+ ], TerminalWordLinkProvider.prototype, "workspaceService", void 0);
145
+ tslib_1.__decorate([
146
+ (0, di_1.Autowired)(quick_open_1.PrefixQuickOpenService),
147
+ tslib_1.__metadata("design:type", Object)
148
+ ], TerminalWordLinkProvider.prototype, "quickOpenService", void 0);
149
+ exports.TerminalWordLinkProvider = TerminalWordLinkProvider = tslib_1.__decorate([
150
+ (0, di_1.Injectable)({ multiple: true }),
151
+ tslib_1.__metadata("design:paramtypes", [xterm_1.Terminal, Function, Function])
152
+ ], TerminalWordLinkProvider);
153
+ //# sourceMappingURL=word-link-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"word-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/word-link-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_COL = exports.DEFAULT_ROW = exports.AttachAddon = void 0;
4
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
5
+ class AttachAddon extends ide_core_common_1.Disposable {
6
+ constructor() {
7
+ super(...arguments);
8
+ this._onData = new ide_core_common_1.Emitter();
9
+ this.onData = this._onData.event;
10
+ this._onExit = new ide_core_common_1.Emitter();
11
+ this.onExit = this._onExit.event;
12
+ this._onTime = new ide_core_common_1.Emitter();
13
+ this.onTime = this._onTime.event;
14
+ this._lastInputTime = 0;
15
+ this._onBeforeProcessData = new ide_core_common_1.Emitter();
16
+ this.onBeforeProcessData = this._onBeforeProcessData.event;
17
+ }
18
+ setConnection(connection) {
19
+ if (this._disposeConnection) {
20
+ this._disposeConnection.dispose();
21
+ this._disposeConnection = null;
22
+ }
23
+ this.connection = connection;
24
+ if (connection) {
25
+ this._disposeConnection = new ide_core_common_1.Disposable(connection.onData((data) => {
26
+ let dataToWrite = data;
27
+ if (typeof data === 'string') {
28
+ const beforeProcessDataEvent = { data };
29
+ // 通过 EventEmitter 修改终端 data 的内容
30
+ this._onBeforeProcessData.fire(beforeProcessDataEvent);
31
+ if (beforeProcessDataEvent.data !== undefined) {
32
+ dataToWrite = beforeProcessDataEvent.data;
33
+ }
34
+ }
35
+ this._onData.fire(dataToWrite);
36
+ this._terminal.write(typeof dataToWrite === 'string' ? dataToWrite : new Uint8Array(dataToWrite, 0, dataToWrite.byteLength));
37
+ // connection.onData 的时候对 lastInputTime 进行差值运算,统计最后一次输入到收到回复的时间间隔
38
+ if (this._lastInputTime) {
39
+ const delta = Date.now() - this._lastInputTime;
40
+ this._lastInputTime = 0;
41
+ this._onTime.fire(delta);
42
+ }
43
+ }));
44
+ if (connection.onExit) {
45
+ this._disposeConnection.addDispose(connection.onExit((code) => {
46
+ this._onExit.fire(code);
47
+ }));
48
+ }
49
+ }
50
+ }
51
+ async activate(terminal) {
52
+ this._terminal = terminal;
53
+ this.addDispose(ide_core_common_1.Disposable.create(() => { var _a; return (_a = this._disposeConnection) === null || _a === void 0 ? void 0 : _a.dispose(); }));
54
+ this.addDispose(terminal.onData((data) => this._sendData(data)));
55
+ this.addDispose(terminal.onBinary((data) => this._sendBinary(data)));
56
+ }
57
+ _sendData(data) {
58
+ if (!this.connection || this.connection.readonly) {
59
+ return;
60
+ }
61
+ // 记录 lastInputTime,用于终端反应速度统计
62
+ this._timeResponse();
63
+ this.connection.sendData(data);
64
+ }
65
+ _sendBinary(data) {
66
+ if (!this.connection || this.connection.readonly) {
67
+ return;
68
+ }
69
+ const buffer = new Uint8Array(data.length);
70
+ for (let i = 0; i < data.length; ++i) {
71
+ buffer[i] = data.charCodeAt(i) & 255;
72
+ }
73
+ this._timeResponse();
74
+ this.connection.sendData(buffer);
75
+ }
76
+ _timeResponse() {
77
+ this._lastInputTime = Date.now();
78
+ }
79
+ }
80
+ exports.AttachAddon = AttachAddon;
81
+ exports.DEFAULT_ROW = 80;
82
+ exports.DEFAULT_COL = 24;
83
+ //# sourceMappingURL=terminal.addon.js.map