@opensumi/ide-debug 2.21.9-rc-1671440760.0 → 2.21.9

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 (182) hide show
  1. package/lib/browser/debug-configuration-manager.js +1 -1
  2. package/lib/browser/debug-configuration-manager.js.map +1 -1
  3. package/lib/browser/debug-session-manager.js +1 -1
  4. package/lib/browser/debug-session-manager.js.map +1 -1
  5. package/lib/browser/debug-session.d.ts.map +1 -1
  6. package/lib/browser/debug-session.js +1 -5
  7. package/lib/browser/debug-session.js.map +1 -1
  8. package/lib/browser/index.d.ts.map +1 -1
  9. package/lib/browser/index.js +9 -2
  10. package/lib/browser/index.js.map +1 -1
  11. package/lib/browser/preferences/launch-folder-preference-provider.d.ts +2 -2
  12. package/lib/browser/preferences/launch-folder-preference-provider.d.ts.map +1 -1
  13. package/lib/browser/preferences/launch-folder-preference-provider.js +2 -2
  14. package/lib/browser/preferences/launch-folder-preference-provider.js.map +1 -1
  15. package/lib/browser/view/configuration/debug-configuration.module.less +5 -5
  16. package/lib/browser/view/configuration/debug-configuration.view.d.ts.map +1 -1
  17. package/lib/browser/view/configuration/debug-configuration.view.js +1 -1
  18. package/lib/browser/view/configuration/debug-configuration.view.js.map +1 -1
  19. package/lib/browser/view/configuration/debug-toolbar.view.js +2 -2
  20. package/lib/browser/view/configuration/debug-toolbar.view.js.map +1 -1
  21. package/lib/browser/view/console/debug-console.module.less +1 -2
  22. package/lib/browser/view/console/debug-console.view.js +2 -2
  23. package/lib/browser/view/console/debug-console.view.js.map +1 -1
  24. package/lib/browser/view/frames/debug-call-stack-frame.view.d.ts.map +1 -1
  25. package/lib/browser/view/frames/debug-call-stack-frame.view.js +24 -32
  26. package/lib/browser/view/frames/debug-call-stack-frame.view.js.map +1 -1
  27. package/lib/browser/view/frames/debug-call-stack-session.view.d.ts.map +1 -1
  28. package/lib/browser/view/frames/debug-call-stack-session.view.js +5 -8
  29. package/lib/browser/view/frames/debug-call-stack-session.view.js.map +1 -1
  30. package/lib/browser/view/frames/debug-call-stack-thread.view.d.ts.map +1 -1
  31. package/lib/browser/view/frames/debug-call-stack-thread.view.js +7 -12
  32. package/lib/browser/view/frames/debug-call-stack-thread.view.js.map +1 -1
  33. package/lib/browser/view/variables/debug-variables.module.less +1 -2
  34. package/lib/browser/view/variables/debug-variables.view.js +1 -1
  35. package/lib/browser/view/variables/debug-variables.view.js.map +1 -1
  36. package/lib/browser/view/watch/debug-watch.module.less +1 -2
  37. package/lib/browser/view/watch/debug-watch.view.js +1 -1
  38. package/lib/browser/view/watch/debug-watch.view.js.map +1 -1
  39. package/package.json +24 -25
  40. package/src/browser/assets/breakpoint-conditional-disabled.svg +0 -4
  41. package/src/browser/assets/breakpoint-conditional-unverified.svg +0 -4
  42. package/src/browser/assets/breakpoint-conditional.svg +0 -4
  43. package/src/browser/assets/breakpoint-disabled.svg +0 -4
  44. package/src/browser/assets/breakpoint-hint.svg +0 -4
  45. package/src/browser/assets/breakpoint-log-disabled.svg +0 -4
  46. package/src/browser/assets/breakpoint-log-unverified.svg +0 -4
  47. package/src/browser/assets/breakpoint-log.svg +0 -4
  48. package/src/browser/assets/breakpoint-unsupported.svg +0 -4
  49. package/src/browser/assets/breakpoint-unverified.svg +0 -4
  50. package/src/browser/assets/breakpoint.svg +0 -4
  51. package/src/browser/assets/breakpoints-activate-inverse.svg +0 -4
  52. package/src/browser/assets/breakpoints-activate.svg +0 -4
  53. package/src/browser/assets/configure-inverse.svg +0 -4
  54. package/src/browser/assets/configure.svg +0 -4
  55. package/src/browser/assets/continue-inverse.svg +0 -4
  56. package/src/browser/assets/current-and-breakpoint.svg +0 -4
  57. package/src/browser/assets/current-arrow.svg +0 -4
  58. package/src/browser/assets/remove-all-inverse.svg +0 -4
  59. package/src/browser/assets/remove-all.svg +0 -4
  60. package/src/browser/assets/repl-inverse.svg +0 -4
  61. package/src/browser/assets/repl.svg +0 -4
  62. package/src/browser/assets/restart-inverse.svg +0 -4
  63. package/src/browser/assets/stackframe-and-breakpoint.svg +0 -4
  64. package/src/browser/assets/stackframe-arrow.svg +0 -4
  65. package/src/browser/assets/start-inverse.svg +0 -4
  66. package/src/browser/breakpoint/breakpoint-decoration.ts +0 -57
  67. package/src/browser/breakpoint/breakpoint-manager.ts +0 -348
  68. package/src/browser/breakpoint/breakpoint-marker.ts +0 -70
  69. package/src/browser/breakpoint/index.ts +0 -3
  70. package/src/browser/components/debug-action/index.module.less +0 -73
  71. package/src/browser/components/debug-action/index.tsx +0 -40
  72. package/src/browser/components/debug-exception-widget.less +0 -42
  73. package/src/browser/components/floating-click-widget/index.module.less +0 -5
  74. package/src/browser/components/floating-click-widget/index.tsx +0 -21
  75. package/src/browser/components/index.ts +0 -1
  76. package/src/browser/contextkeys/debug-call-stack-item-type-key.ts +0 -4
  77. package/src/browser/contextkeys/debug-contextkey.service.ts +0 -54
  78. package/src/browser/contextkeys/index.ts +0 -1
  79. package/src/browser/debug-ansi-handle.ts +0 -521
  80. package/src/browser/debug-configuration-manager.ts +0 -513
  81. package/src/browser/debug-configuration-model.ts +0 -66
  82. package/src/browser/debug-contribution.ts +0 -904
  83. package/src/browser/debug-exception-widget.tsx +0 -89
  84. package/src/browser/debug-link-detector.ts +0 -234
  85. package/src/browser/debug-memory.ts +0 -220
  86. package/src/browser/debug-preferences.ts +0 -70
  87. package/src/browser/debug-progress.service.ts +0 -122
  88. package/src/browser/debug-schema-updater.ts +0 -67
  89. package/src/browser/debug-service.ts +0 -42
  90. package/src/browser/debug-session-connection.ts +0 -333
  91. package/src/browser/debug-session-contribution.ts +0 -57
  92. package/src/browser/debug-session-manager.ts +0 -622
  93. package/src/browser/debug-session.ts +0 -1182
  94. package/src/browser/debug-style.less +0 -128
  95. package/src/browser/debugUtils.ts +0 -110
  96. package/src/browser/editor/debug-breakpoint-widget.ts +0 -99
  97. package/src/browser/editor/debug-breakpoint-zone-widget.tsx +0 -262
  98. package/src/browser/editor/debug-breakpoint.module.less +0 -31
  99. package/src/browser/editor/debug-editor-contribution.ts +0 -590
  100. package/src/browser/editor/debug-expression-provider.ts +0 -101
  101. package/src/browser/editor/debug-hover-model.ts +0 -38
  102. package/src/browser/editor/debug-hover-source.ts +0 -107
  103. package/src/browser/editor/debug-hover-tree.model.service.ts +0 -332
  104. package/src/browser/editor/debug-hover-widget.tsx +0 -200
  105. package/src/browser/editor/debug-hover.module.less +0 -29
  106. package/src/browser/editor/debug-hover.view.tsx +0 -147
  107. package/src/browser/editor/debug-model-manager.ts +0 -220
  108. package/src/browser/editor/debug-model.ts +0 -853
  109. package/src/browser/editor/debug-run-to-cursor.service.ts +0 -180
  110. package/src/browser/editor/debug-styles.ts +0 -66
  111. package/src/browser/editor/evaluatable-expression.ts +0 -47
  112. package/src/browser/editor/index.ts +0 -6
  113. package/src/browser/index.ts +0 -121
  114. package/src/browser/markers/index.ts +0 -2
  115. package/src/browser/markers/marker-manager.ts +0 -201
  116. package/src/browser/markers/marker.ts +0 -20
  117. package/src/browser/model/debug-source.ts +0 -144
  118. package/src/browser/model/debug-stack-frame.ts +0 -111
  119. package/src/browser/model/debug-thread.ts +0 -186
  120. package/src/browser/model/debug-watch.ts +0 -130
  121. package/src/browser/model/index.ts +0 -4
  122. package/src/browser/preferences/launch-folder-preference-provider.ts +0 -23
  123. package/src/browser/preferences/launch-preferences-contribution.ts +0 -9
  124. package/src/browser/preferences/launch-preferences.ts +0 -16
  125. package/src/browser/tree/debug-console-tree-node.define.tsx +0 -76
  126. package/src/browser/tree/debug-tree-node.define.ts +0 -768
  127. package/src/browser/tree/index.ts +0 -2
  128. package/src/browser/view/breakpoints/debug-breakpoints.module.less +0 -72
  129. package/src/browser/view/breakpoints/debug-breakpoints.service.ts +0 -217
  130. package/src/browser/view/breakpoints/debug-breakpoints.view.tsx +0 -174
  131. package/src/browser/view/configuration/debug-configuration.module.less +0 -110
  132. package/src/browser/view/configuration/debug-configuration.service.ts +0 -170
  133. package/src/browser/view/configuration/debug-configuration.view.tsx +0 -252
  134. package/src/browser/view/configuration/debug-toolbar.service.ts +0 -167
  135. package/src/browser/view/configuration/debug-toolbar.view.tsx +0 -335
  136. package/src/browser/view/console/debug-console-filter.model.ts +0 -49
  137. package/src/browser/view/console/debug-console-filter.service.ts +0 -81
  138. package/src/browser/view/console/debug-console-filter.view.tsx +0 -78
  139. package/src/browser/view/console/debug-console-model.ts +0 -48
  140. package/src/browser/view/console/debug-console-session.ts +0 -164
  141. package/src/browser/view/console/debug-console-toolbar.view.tsx +0 -28
  142. package/src/browser/view/console/debug-console-tree.model.service.ts +0 -550
  143. package/src/browser/view/console/debug-console.contribution.ts +0 -181
  144. package/src/browser/view/console/debug-console.module.less +0 -373
  145. package/src/browser/view/console/debug-console.service.ts +0 -433
  146. package/src/browser/view/console/debug-console.view.tsx +0 -500
  147. package/src/browser/view/debug-view-model.ts +0 -182
  148. package/src/browser/view/frames/debug-call-stack-frame.view.tsx +0 -238
  149. package/src/browser/view/frames/debug-call-stack-session.view.tsx +0 -253
  150. package/src/browser/view/frames/debug-call-stack-thread.view.tsx +0 -103
  151. package/src/browser/view/frames/debug-call-stack.contribution.ts +0 -88
  152. package/src/browser/view/frames/debug-call-stack.module.less +0 -193
  153. package/src/browser/view/frames/debug-call-stack.operation.tsx +0 -97
  154. package/src/browser/view/frames/debug-call-stack.service.ts +0 -105
  155. package/src/browser/view/frames/debug-call-stack.view.tsx +0 -43
  156. package/src/browser/view/variables/debug-variables-model.ts +0 -38
  157. package/src/browser/view/variables/debug-variables-tree.model.service.ts +0 -467
  158. package/src/browser/view/variables/debug-variables.contribution.ts +0 -244
  159. package/src/browser/view/variables/debug-variables.module.less +0 -149
  160. package/src/browser/view/variables/debug-variables.view.tsx +0 -303
  161. package/src/browser/view/watch/debug-watch-model.ts +0 -38
  162. package/src/browser/view/watch/debug-watch-tree.model.service.ts +0 -567
  163. package/src/browser/view/watch/debug-watch.contribution.ts +0 -167
  164. package/src/browser/view/watch/debug-watch.module.less +0 -189
  165. package/src/browser/view/watch/debug-watch.view.tsx +0 -337
  166. package/src/common/constants.ts +0 -81
  167. package/src/common/debug-breakpoint.ts +0 -43
  168. package/src/common/debug-configuration.ts +0 -68
  169. package/src/common/debug-editor.ts +0 -4
  170. package/src/common/debug-hover.ts +0 -31
  171. package/src/common/debug-model.ts +0 -247
  172. package/src/common/debug-progress.ts +0 -8
  173. package/src/common/debug-schema-updater.ts +0 -1
  174. package/src/common/debug-service.ts +0 -176
  175. package/src/common/debug-session-options.ts +0 -19
  176. package/src/common/debug-session.ts +0 -200
  177. package/src/common/evaluatable-expression.ts +0 -43
  178. package/src/common/index.ts +0 -14
  179. package/src/common/inline-values.ts +0 -77
  180. package/src/common/terminal.ts +0 -163
  181. package/src/common/types.ts +0 -86
  182. package/src/index.ts +0 -1
@@ -1,89 +0,0 @@
1
- import React, { useRef } from 'react';
2
- import ReactDOM from 'react-dom';
3
-
4
- import { Injectable, Autowired } from '@opensumi/di';
5
- import { AppConfig, ConfigProvider, useInjectable } from '@opensumi/ide-core-browser';
6
- import { formatLocalize, localize } from '@opensumi/ide-core-common';
7
- import { ICodeEditor } from '@opensumi/ide-monaco';
8
- import { ZoneWidget } from '@opensumi/ide-monaco-enhance';
9
- import { EditorOption } from '@opensumi/monaco-editor-core/esm/vs/editor/common/config/editorOptions';
10
- import * as monaco from '@opensumi/monaco-editor-core/esm/vs/editor/editor.api';
11
-
12
- import { IDebugExceptionInfo } from '../common';
13
-
14
- import { LinkDetector } from './debug-link-detector';
15
-
16
- import './components/debug-exception-widget.less';
17
-
18
- function ExceptionInfoContainer({ info, layout }: { info: IDebugExceptionInfo; layout: () => void }) {
19
- const linkDetector = useInjectable<LinkDetector>(LinkDetector);
20
- const stackTraceRef = useRef<HTMLDivElement | null>(null);
21
-
22
- React.useEffect(() => {
23
- if (stackTraceRef.current) {
24
- stackTraceRef.current.appendChild(linkDetector.linkify(info.details?.stackTrace || '', true));
25
- }
26
- layout();
27
- }, [info.details, info.details?.stackTrace, stackTraceRef]);
28
-
29
- return (
30
- <div className={'exception_widget'}>
31
- <div className={'title'}>
32
- <div className={'label'}>
33
- {info.id
34
- ? formatLocalize('debug.widget.exception.thrownWithId', info.id)
35
- : localize('debug.widget.exception.thrown')}
36
- </div>
37
- </div>
38
- {info.description ? <div className={'description'}>{info.description}</div> : null}
39
- {info.details && info.details.stackTrace ? <div className={'stack_trace'} ref={stackTraceRef}></div> : null}
40
- </div>
41
- );
42
- }
43
-
44
- @Injectable({ multiple: true })
45
- export class DebugExceptionWidget extends ZoneWidget {
46
- @Autowired(AppConfig)
47
- private configContext: AppConfig;
48
-
49
- constructor(editor: ICodeEditor, private exceptionInfo: IDebugExceptionInfo) {
50
- super(editor);
51
-
52
- this.create();
53
- }
54
-
55
- protected applyClass(): void {}
56
-
57
- protected applyStyle(): void {}
58
-
59
- protected _fillContainer(container: HTMLElement): void {
60
- this.setCssClass('exception_widget_container');
61
- const fontInfo = this.editor.getOption(EditorOption.fontInfo);
62
- container.style.fontSize = `${fontInfo.fontSize}px`;
63
- container.style.lineHeight = `${fontInfo.lineHeight}px`;
64
- container.tabIndex = 0;
65
-
66
- ReactDOM.render(
67
- <ConfigProvider value={this.configContext}>
68
- <ExceptionInfoContainer
69
- info={this.exceptionInfo}
70
- layout={() => this.layout(undefined)}
71
- ></ExceptionInfoContainer>
72
- </ConfigProvider>,
73
- container,
74
- );
75
- }
76
-
77
- public layout(_info: monaco.editor.EditorLayoutInfo | undefined): void {
78
- this._container!.style.height = 'initial';
79
- const lineHeight = this.editor.getOption(EditorOption.lineHeight);
80
- const arrowHeight = Math.round(lineHeight / 3);
81
- const computedLinesNumber = Math.ceil((this._container!.offsetHeight + arrowHeight) / lineHeight);
82
-
83
- this._relayout(computedLinesNumber);
84
- }
85
-
86
- public focus(): void {
87
- this._container.focus();
88
- }
89
- }
@@ -1,234 +0,0 @@
1
- /* ---------------------------------------------------------------------------------------------
2
- * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Licensed under the MIT License. See License.txt in the project root for license information.
4
- *--------------------------------------------------------------------------------------------*/
5
- // Some code copied and modified from https://github.com/microsoft/vscode/blob/94c9ea46838a9a619aeafb7e8afd1170c967bb55/src/vs/workbench/contrib/debug/browser/linkDetector.ts
6
-
7
- import { Injectable, Autowired } from '@opensumi/di';
8
- import { Schemes, IOpenerService, OS, formatLocalize } from '@opensumi/ide-core-browser';
9
- import { URI, IRange, isWindows, isMacintosh, path as osPath, OperatingSystem } from '@opensumi/ide-core-common';
10
- import { WorkbenchEditorService } from '@opensumi/ide-editor';
11
- import { IFileServiceClient, FileStat } from '@opensumi/ide-file-service/lib/common';
12
- import { IWorkspaceFolder } from '@opensumi/monaco-editor-core/esm/vs/platform/workspace/common/workspace';
13
-
14
- import styles from './view/console/debug-console.module.less';
15
-
16
- const CONTROL_CODES = '\\u0000-\\u0020\\u007f-\\u009f';
17
- const WEB_LINK_REGEX = new RegExp(
18
- '(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|data:|www\\.)[^\\s' +
19
- CONTROL_CODES +
20
- '"]{2,}[^\\s' +
21
- CONTROL_CODES +
22
- '"\')}\\],:;.!?]',
23
- 'ug',
24
- );
25
-
26
- const WIN_ABSOLUTE_PATH = /(?:[a-zA-Z]:(?:(?:\\|\/)[\w\.-]*)+)/;
27
- const WIN_RELATIVE_PATH = /(?:(?:\~|\.)(?:(?:\\|\/)[\w\.-]*)+)/;
28
- const WIN_PATH = new RegExp(`(${WIN_ABSOLUTE_PATH.source}|${WIN_RELATIVE_PATH.source})`);
29
- const POSIX_PATH = /((?:\~|\.)?(?:\/[\w\.-]*)+)/;
30
- const LINE_COLUMN = /(?:\:([\d]+))?(?:\:([\d]+))?/;
31
- const PATH_LINK_REGEX = new RegExp(`${isWindows ? WIN_PATH.source : POSIX_PATH.source}${LINE_COLUMN.source}`, 'g');
32
-
33
- const MAX_LENGTH = 2000;
34
-
35
- type LinkKind = 'web' | 'path' | 'text';
36
- interface LinkPart {
37
- kind: LinkKind;
38
- value: string;
39
- captures: string[];
40
- }
41
-
42
- @Injectable({ multiple: true })
43
- export class LinkDetector {
44
- @Autowired(WorkbenchEditorService)
45
- private readonly workbenchEditorService: WorkbenchEditorService;
46
-
47
- @Autowired(IFileServiceClient)
48
- private readonly fileServiceClient: IFileServiceClient;
49
-
50
- @Autowired(IOpenerService)
51
- private readonly openerService: IOpenerService;
52
-
53
- linkify(text: string, splitLines?: boolean, workspaceFolder?: IWorkspaceFolder): HTMLElement {
54
- if (splitLines) {
55
- const lines = text.split('\n');
56
- for (let i = 0; i < lines.length - 1; i++) {
57
- lines[i] = lines[i] + '\n';
58
- }
59
- if (!lines[lines.length - 1]) {
60
- lines.pop();
61
- }
62
- const elements = lines.map((line) => this.linkify(line, false, workspaceFolder));
63
- if (elements.length === 1) {
64
- return elements[0];
65
- }
66
- const container = document.createElement('span');
67
- elements.forEach((e) => container.appendChild(e));
68
- return container;
69
- }
70
-
71
- const container = document.createElement('span');
72
- for (const part of this.detectLinks(text)) {
73
- try {
74
- switch (part.kind) {
75
- case 'text':
76
- container.appendChild(document.createTextNode(part.value));
77
- break;
78
- case 'web':
79
- container.appendChild(this.createWebLink(part.value));
80
- break;
81
- case 'path': {
82
- const path = part.captures[0];
83
- const lineNumber = part.captures[1] ? Number(part.captures[1]) : 0;
84
- const columnNumber = part.captures[2] ? Number(part.captures[2]) : 0;
85
- container.appendChild(this.createPathLink(part.value, path, lineNumber, columnNumber, workspaceFolder));
86
- break;
87
- }
88
- }
89
- } catch (e) {
90
- container.appendChild(document.createTextNode(part.value));
91
- }
92
- }
93
- return container;
94
- }
95
-
96
- private createWebLink(url: string): Node {
97
- const link = this.createLink(url);
98
-
99
- const uri = URI.parse(url);
100
- this.decorateLink(link, async () => {
101
- if (uri.scheme === Schemes.file) {
102
- const fsPath = uri.toString();
103
- const path = OS.type() === OperatingSystem.Windows ? osPath.win32 : osPath.posix;
104
- const fileUrl = osPath.normalize(
105
- path.sep === osPath.posix.sep && isWindows ? fsPath.replace(/\\/g, osPath.posix.sep) : fsPath,
106
- );
107
-
108
- await this.workbenchEditorService.open(URI.parse(fileUrl));
109
- return;
110
- }
111
-
112
- this.openerService.open(url);
113
- });
114
-
115
- return link;
116
- }
117
-
118
- private createPathLink(
119
- text: string,
120
- path: string,
121
- lineNumber: number,
122
- columnNumber: number,
123
- workspaceFolder: IWorkspaceFolder | undefined,
124
- ): Node {
125
- if (path[0] === '/' && path[1] === '/') {
126
- return document.createTextNode(text);
127
- }
128
-
129
- if (path[0] === '.') {
130
- if (!workspaceFolder) {
131
- return document.createTextNode(text);
132
- }
133
- const uri = workspaceFolder.toResource(path);
134
- const link = this.createLink(text);
135
- this.decorateLink(link, () => {
136
- this.workbenchEditorService.open(URI.parse(uri.toString()));
137
- });
138
- return link;
139
- }
140
-
141
- const link = this.createLink(text);
142
- link.tabIndex = 0;
143
- const uri = URI.file(osPath.normalize(path));
144
- this.fileServiceClient.getFileStat(uri.toString()).then((stat: FileStat | undefined) => {
145
- if (!stat || (stat && stat.isDirectory)) {
146
- return;
147
- }
148
-
149
- this.decorateLink(link, () => {
150
- this.workbenchEditorService.open(URI.parse(uri.toString()), {
151
- range: {
152
- startColumn: columnNumber,
153
- startLineNumber: lineNumber,
154
- endLineNumber: lineNumber,
155
- endColumn: columnNumber,
156
- } as IRange,
157
- });
158
- });
159
- });
160
- return link;
161
- }
162
-
163
- private createLink(text: string): HTMLElement {
164
- const link = document.createElement('a');
165
- link.textContent = text;
166
- return link;
167
- }
168
-
169
- private decorateLink(link: HTMLElement, onClick: (preserveFocus: boolean) => void) {
170
- link.classList.add(styles.link);
171
- link.title = formatLocalize('debug.console.followLink', isMacintosh ? 'Cmd' : 'Ctrl');
172
- link.onmousemove = (event) => {
173
- link.classList.toggle(styles.pointer, isMacintosh ? event.metaKey : event.ctrlKey);
174
- };
175
- link.onmouseleave = () => link.classList.remove(styles.pointer);
176
- link.onclick = (event) => {
177
- const selection = window.getSelection();
178
- if (!selection || selection.type === 'Range') {
179
- return;
180
- }
181
- if (!(isMacintosh ? event.metaKey : event.ctrlKey)) {
182
- return;
183
- }
184
-
185
- event.preventDefault();
186
- event.stopImmediatePropagation();
187
- onClick(false);
188
- };
189
- }
190
-
191
- private detectLinks(text: string): LinkPart[] {
192
- if (!text) {
193
- return [];
194
- }
195
- if (text.length > MAX_LENGTH) {
196
- return [{ kind: 'text', value: text, captures: [] }];
197
- }
198
-
199
- const regexes: RegExp[] = [WEB_LINK_REGEX, PATH_LINK_REGEX];
200
- const kinds: LinkKind[] = ['web', 'path'];
201
- const result: LinkPart[] = [];
202
-
203
- const splitOne = (text: string, regexIndex: number) => {
204
- if (regexIndex >= regexes.length) {
205
- result.push({ value: text, kind: 'text', captures: [] });
206
- return;
207
- }
208
- const regex = regexes[regexIndex];
209
- let currentIndex = 0;
210
- let match: RegExpExecArray | null;
211
- regex.lastIndex = 0;
212
- while ((match = regex.exec(text)) !== null) {
213
- const stringBeforeMatch = text.substring(currentIndex, match.index);
214
- if (stringBeforeMatch) {
215
- splitOne(stringBeforeMatch, regexIndex + 1);
216
- }
217
- const value = match[0];
218
- result.push({
219
- value,
220
- kind: kinds[regexIndex],
221
- captures: match.slice(1),
222
- });
223
- currentIndex = match.index + value.length;
224
- }
225
- const stringAfterMatches = text.substring(currentIndex);
226
- if (stringAfterMatches) {
227
- splitOne(stringAfterMatches, regexIndex + 1);
228
- }
229
- };
230
-
231
- splitOne(text, 0);
232
- return result;
233
- }
234
- }
@@ -1,220 +0,0 @@
1
- import clamp from 'lodash/clamp';
2
-
3
- import { Injectable, Autowired } from '@opensumi/di';
4
- import { path } from '@opensumi/ide-core-common';
5
- import {
6
- Event,
7
- FileSystemProvider,
8
- FileChangeEvent,
9
- FileStat,
10
- FileSystemProviderCapabilities,
11
- FileType,
12
- Uri,
13
- BinaryBuffer,
14
- Emitter,
15
- Disposable,
16
- ILogger,
17
- } from '@opensumi/ide-core-common';
18
-
19
-
20
- import {
21
- DEBUG_MEMORY_SCHEME,
22
- IDebugSession,
23
- IDebugSessionManager,
24
- IMemoryInvalidationEvent,
25
- IMemoryRegion,
26
- MemoryRange,
27
- MemoryRangeType,
28
- } from '../common';
29
-
30
- import { DebugSessionManager } from './debug-session-manager';
31
-
32
- const { Path } = path;
33
-
34
- @Injectable()
35
- export class DebugMemoryFileSystemProvider implements FileSystemProvider {
36
- @Autowired(IDebugSessionManager)
37
- protected readonly debugSessionManager: DebugSessionManager;
38
-
39
- @Autowired(ILogger)
40
- protected readonly logger: ILogger;
41
-
42
- private memoryFdCounter = 0;
43
- private readonly changeEmitter = new Emitter<FileChangeEvent>();
44
- private readonly fdMemory = new Map<number, { session: IDebugSession; region: IMemoryRegion }>();
45
-
46
- public readonly capabilities: FileSystemProviderCapabilities =
47
- 0 | FileSystemProviderCapabilities.PathCaseSensitive | FileSystemProviderCapabilities.FileOpenReadWriteClose;
48
-
49
- public readonly onDidChangeCapabilities = Event.None;
50
-
51
- public onDidChangeFile: Event<FileChangeEvent> = this.changeEmitter.event;
52
-
53
- public stat(uri: Uri): Promise<void | FileStat> {
54
- return Promise.resolve({
55
- type: FileType.File,
56
- uri: uri.toString(),
57
- mtime: 0,
58
- ctime: 0,
59
- size: 0,
60
- lastModification: 0,
61
- isDirectory: false,
62
- });
63
- }
64
-
65
- public async readFile(uri: Uri): Promise<void | Uint8Array> {
66
- const parse = this.parseUri(uri);
67
- if (!parse) {
68
- return this.toBuffer('');
69
- }
70
-
71
- if (!parse.offset) {
72
- return this.toBuffer('');
73
- }
74
-
75
- const { session, memoryReference, offset } = parse;
76
-
77
- const data = new Uint8Array(offset.toOffset - offset.fromOffset);
78
-
79
- const fd = this.memoryFdCounter++;
80
- let region = session.getMemory(memoryReference);
81
- if (offset) {
82
- region = new MemoryRegionView(region, offset);
83
- }
84
-
85
- this.fdMemory.set(fd, { session, region });
86
- await this.read(fd, offset.fromOffset, data, 0, data.length);
87
- return data;
88
- }
89
-
90
- public async read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number | void> {
91
- const memory = this.fdMemory.get(fd);
92
- if (!memory) {
93
- return;
94
- }
95
-
96
- const ranges = await memory.region.read(pos, length);
97
- let readSoFar = 0;
98
- for (const range of ranges) {
99
- switch (range.type) {
100
- case MemoryRangeType.Unreadable:
101
- return readSoFar;
102
- case MemoryRangeType.Error:
103
- if (readSoFar > 0) {
104
- return readSoFar;
105
- } else {
106
- return this.logger.error(range.error);
107
- }
108
- case MemoryRangeType.Valid: {
109
- const start = Math.max(0, pos - range.offset);
110
- const toWrite = range.data.slice(start, Math.min(range.data.byteLength, start + (length - readSoFar)));
111
- data.set(toWrite.buffer, offset + readSoFar);
112
- readSoFar += toWrite.byteLength;
113
- break;
114
- }
115
- default:
116
- this.logger.log(range);
117
- }
118
- }
119
-
120
- return readSoFar;
121
- }
122
-
123
- private toBuffer(s: string): Uint8Array {
124
- return BinaryBuffer.fromString(s).buffer;
125
- }
126
-
127
- private parseUri(uri: Uri) {
128
- if (uri.scheme !== DEBUG_MEMORY_SCHEME) {
129
- return;
130
- }
131
-
132
- const session = this.debugSessionManager.sessions.find((s) => s.id.toLowerCase() === uri.authority.toLowerCase());
133
- if (!session) {
134
- return;
135
- }
136
-
137
- let offset: { fromOffset: number; toOffset: number } | undefined;
138
- /**
139
- * query 参数是 hex-editor 插件通过覆盖了 debug file accessor 处理过后添加上的,形如
140
- * ?range=0:131072
141
- */
142
- const rangeMatch = /range=([0-9]+):([0-9]+)/.exec(uri.query);
143
- if (rangeMatch) {
144
- offset = { fromOffset: Number(rangeMatch[1]), toOffset: Number(rangeMatch[2]) };
145
- }
146
-
147
- const [, memoryReference] = uri.path.split(Path.separator);
148
-
149
- return {
150
- session,
151
- offset,
152
- readOnly: !session.capabilities.supportsWriteMemoryRequest,
153
- sessionId: uri.authority,
154
- memoryReference: decodeURIComponent(memoryReference),
155
- };
156
- }
157
-
158
- public readDirectory(): never {
159
- throw new Error('Not allowed');
160
- }
161
-
162
- public createDirectory(): never {
163
- throw new Error('Not allowed');
164
- }
165
-
166
- public rename(): never {
167
- throw new Error('Not allowed');
168
- }
169
-
170
- public delete(): never {
171
- throw new Error('Not allowed');
172
- }
173
-
174
- public watch(): never {
175
- throw new Error('Not allowed');
176
- }
177
-
178
- /**
179
- * 目前仅支持读,不支持写
180
- */
181
- public writeFile(): never {
182
- throw new Error('Method not implemented.');
183
- }
184
- }
185
-
186
- class MemoryRegionView extends Disposable implements IMemoryRegion {
187
- private readonly invalidateEmitter = new Emitter<IMemoryInvalidationEvent>();
188
-
189
- public readonly onDidInvalidate = this.invalidateEmitter.event;
190
- public readonly writable: boolean;
191
- private readonly width = this.range.toOffset - this.range.fromOffset;
192
-
193
- constructor(private readonly parent: IMemoryRegion, public readonly range: { fromOffset: number; toOffset: number }) {
194
- super();
195
- this.writable = parent.writable;
196
-
197
- this.registerDispose(parent);
198
- this.registerDispose(
199
- parent.onDidInvalidate((e) => {
200
- const fromOffset = clamp(e.fromOffset - range.fromOffset, 0, this.width);
201
- const toOffset = clamp(e.toOffset - range.fromOffset, 0, this.width);
202
- if (toOffset > fromOffset) {
203
- this.invalidateEmitter.fire({ fromOffset, toOffset });
204
- }
205
- }),
206
- );
207
- }
208
-
209
- public read(fromOffset: number, toOffset: number): Promise<MemoryRange[]> {
210
- if (fromOffset < 0) {
211
- throw new RangeError(`Invalid fromOffset: ${fromOffset}`);
212
- }
213
-
214
- return this.parent.read(this.range.fromOffset + fromOffset, this.range.fromOffset + Math.min(toOffset, this.width));
215
- }
216
-
217
- public write(offset: number, data: BinaryBuffer): Promise<number> {
218
- return this.parent.write(this.range.fromOffset + offset, data);
219
- }
220
- }
@@ -1,70 +0,0 @@
1
- import { Injector } from '@opensumi/di';
2
- import {
3
- PreferenceSchema,
4
- PreferenceProxy,
5
- PreferenceService,
6
- createPreferenceProxy,
7
- PreferenceContribution,
8
- localize,
9
- } from '@opensumi/ide-core-browser';
10
-
11
- export const debugPreferencesSchema: PreferenceSchema = {
12
- type: 'object',
13
- properties: {
14
- 'debug.trace': {
15
- type: 'boolean',
16
- default: false,
17
- description: localize('preference.debug.trace'),
18
- },
19
- 'debug.debugViewLocation': {
20
- enum: ['default', 'left', 'right', 'bottom'],
21
- default: 'default',
22
- description: localize('preference.debug.debugViewLocation'),
23
- },
24
- 'debug.openDebug': {
25
- enum: ['neverOpen', 'openOnSessionStart', 'openOnFirstSessionStart', 'openOnDebugBreak'],
26
- default: 'openOnDebugBreak',
27
- description: localize('preference.debug.openDebug'),
28
- },
29
- 'debug.internalConsoleOptions': {
30
- enum: ['neverOpen', 'openOnSessionStart', 'openOnFirstSessionStart'],
31
- default: 'openOnFirstSessionStart',
32
- description: localize('preference.debug.internalConsoleOptions'),
33
- },
34
- 'debug.allowBreakpointsEverywhere': {
35
- type: 'boolean',
36
- description: localize('preference.debug.allowBreakpointsEverywhere'),
37
- default: false,
38
- },
39
- },
40
- };
41
-
42
- export class IDebugConfiguration {
43
- 'debug.trace': boolean;
44
- 'debug.debugViewLocation': 'default' | 'left' | 'right' | 'bottom';
45
- 'debug.openDebug': 'neverOpen' | 'openOnSessionStart' | 'openOnFirstSessionStart' | 'openOnDebugBreak';
46
- 'debug.internalConsoleOptions': 'neverOpen' | 'openOnSessionStart' | 'openOnFirstSessionStart';
47
- 'debug.allowBreakpointsEverywhere': boolean;
48
- }
49
-
50
- export const DebugPreferences = Symbol('DebugPreferences');
51
- export type DebugPreferences = PreferenceProxy<IDebugConfiguration>;
52
-
53
- export function createDebugPreferences(preferences: PreferenceService): DebugPreferences {
54
- return createPreferenceProxy(preferences, debugPreferencesSchema);
55
- }
56
-
57
- export function injectDebugPreferences(injector: Injector): void {
58
- injector.addProviders({
59
- token: DebugPreferences,
60
- useFactory: (injector: Injector) => {
61
- const preferences = injector.get(PreferenceService);
62
- return createDebugPreferences(preferences);
63
- },
64
- });
65
-
66
- injector.addProviders({
67
- token: PreferenceContribution,
68
- useValue: { schema: debugPreferencesSchema },
69
- });
70
- }