@opensumi/ide-debug 2.21.6-rc-1669620508.0 → 2.21.6

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 (166) hide show
  1. package/lib/browser/index.d.ts.map +1 -1
  2. package/lib/browser/index.js +9 -2
  3. package/lib/browser/index.js.map +1 -1
  4. package/lib/browser/preferences/launch-folder-preference-provider.d.ts +2 -2
  5. package/lib/browser/preferences/launch-folder-preference-provider.d.ts.map +1 -1
  6. package/lib/browser/preferences/launch-folder-preference-provider.js +2 -2
  7. package/lib/browser/preferences/launch-folder-preference-provider.js.map +1 -1
  8. package/lib/browser/view/configuration/debug-configuration.module.less +5 -5
  9. package/lib/browser/view/configuration/debug-configuration.view.d.ts.map +1 -1
  10. package/lib/browser/view/configuration/debug-configuration.view.js +1 -1
  11. package/lib/browser/view/configuration/debug-configuration.view.js.map +1 -1
  12. package/lib/browser/view/configuration/debug-toolbar.view.js +2 -2
  13. package/lib/browser/view/configuration/debug-toolbar.view.js.map +1 -1
  14. package/lib/browser/view/console/debug-console.module.less +1 -2
  15. package/lib/browser/view/console/debug-console.view.js +2 -2
  16. package/lib/browser/view/console/debug-console.view.js.map +1 -1
  17. package/lib/browser/view/variables/debug-variables.module.less +1 -2
  18. package/lib/browser/view/variables/debug-variables.view.js +1 -1
  19. package/lib/browser/view/variables/debug-variables.view.js.map +1 -1
  20. package/lib/browser/view/watch/debug-watch.module.less +1 -2
  21. package/lib/browser/view/watch/debug-watch.view.js +1 -1
  22. package/lib/browser/view/watch/debug-watch.view.js.map +1 -1
  23. package/package.json +24 -25
  24. package/src/browser/assets/breakpoint-conditional-disabled.svg +0 -4
  25. package/src/browser/assets/breakpoint-conditional-unverified.svg +0 -4
  26. package/src/browser/assets/breakpoint-conditional.svg +0 -4
  27. package/src/browser/assets/breakpoint-disabled.svg +0 -4
  28. package/src/browser/assets/breakpoint-hint.svg +0 -4
  29. package/src/browser/assets/breakpoint-log-disabled.svg +0 -4
  30. package/src/browser/assets/breakpoint-log-unverified.svg +0 -4
  31. package/src/browser/assets/breakpoint-log.svg +0 -4
  32. package/src/browser/assets/breakpoint-unsupported.svg +0 -4
  33. package/src/browser/assets/breakpoint-unverified.svg +0 -4
  34. package/src/browser/assets/breakpoint.svg +0 -4
  35. package/src/browser/assets/breakpoints-activate-inverse.svg +0 -4
  36. package/src/browser/assets/breakpoints-activate.svg +0 -4
  37. package/src/browser/assets/configure-inverse.svg +0 -4
  38. package/src/browser/assets/configure.svg +0 -4
  39. package/src/browser/assets/continue-inverse.svg +0 -4
  40. package/src/browser/assets/current-and-breakpoint.svg +0 -4
  41. package/src/browser/assets/current-arrow.svg +0 -4
  42. package/src/browser/assets/remove-all-inverse.svg +0 -4
  43. package/src/browser/assets/remove-all.svg +0 -4
  44. package/src/browser/assets/repl-inverse.svg +0 -4
  45. package/src/browser/assets/repl.svg +0 -4
  46. package/src/browser/assets/restart-inverse.svg +0 -4
  47. package/src/browser/assets/stackframe-and-breakpoint.svg +0 -4
  48. package/src/browser/assets/stackframe-arrow.svg +0 -4
  49. package/src/browser/assets/start-inverse.svg +0 -4
  50. package/src/browser/breakpoint/breakpoint-decoration.ts +0 -57
  51. package/src/browser/breakpoint/breakpoint-manager.ts +0 -348
  52. package/src/browser/breakpoint/breakpoint-marker.ts +0 -70
  53. package/src/browser/breakpoint/index.ts +0 -3
  54. package/src/browser/components/debug-action/index.module.less +0 -73
  55. package/src/browser/components/debug-action/index.tsx +0 -40
  56. package/src/browser/components/debug-exception-widget.less +0 -42
  57. package/src/browser/components/floating-click-widget/index.module.less +0 -5
  58. package/src/browser/components/floating-click-widget/index.tsx +0 -21
  59. package/src/browser/components/index.ts +0 -1
  60. package/src/browser/contextkeys/debug-call-stack-item-type-key.ts +0 -4
  61. package/src/browser/contextkeys/debug-contextkey.service.ts +0 -54
  62. package/src/browser/contextkeys/index.ts +0 -1
  63. package/src/browser/debug-ansi-handle.ts +0 -521
  64. package/src/browser/debug-configuration-manager.ts +0 -513
  65. package/src/browser/debug-configuration-model.ts +0 -66
  66. package/src/browser/debug-contribution.ts +0 -904
  67. package/src/browser/debug-exception-widget.tsx +0 -89
  68. package/src/browser/debug-link-detector.ts +0 -234
  69. package/src/browser/debug-memory.ts +0 -220
  70. package/src/browser/debug-preferences.ts +0 -70
  71. package/src/browser/debug-progress.service.ts +0 -122
  72. package/src/browser/debug-schema-updater.ts +0 -67
  73. package/src/browser/debug-service.ts +0 -42
  74. package/src/browser/debug-session-connection.ts +0 -333
  75. package/src/browser/debug-session-contribution.ts +0 -57
  76. package/src/browser/debug-session-manager.ts +0 -622
  77. package/src/browser/debug-session.ts +0 -1179
  78. package/src/browser/debug-style.less +0 -128
  79. package/src/browser/debugUtils.ts +0 -110
  80. package/src/browser/editor/debug-breakpoint-widget.ts +0 -99
  81. package/src/browser/editor/debug-breakpoint-zone-widget.tsx +0 -262
  82. package/src/browser/editor/debug-breakpoint.module.less +0 -31
  83. package/src/browser/editor/debug-editor-contribution.ts +0 -590
  84. package/src/browser/editor/debug-expression-provider.ts +0 -101
  85. package/src/browser/editor/debug-hover-model.ts +0 -38
  86. package/src/browser/editor/debug-hover-source.ts +0 -107
  87. package/src/browser/editor/debug-hover-tree.model.service.ts +0 -332
  88. package/src/browser/editor/debug-hover-widget.tsx +0 -200
  89. package/src/browser/editor/debug-hover.module.less +0 -29
  90. package/src/browser/editor/debug-hover.view.tsx +0 -147
  91. package/src/browser/editor/debug-model-manager.ts +0 -220
  92. package/src/browser/editor/debug-model.ts +0 -853
  93. package/src/browser/editor/debug-run-to-cursor.service.ts +0 -180
  94. package/src/browser/editor/debug-styles.ts +0 -66
  95. package/src/browser/editor/evaluatable-expression.ts +0 -47
  96. package/src/browser/editor/index.ts +0 -6
  97. package/src/browser/index.ts +0 -121
  98. package/src/browser/markers/index.ts +0 -2
  99. package/src/browser/markers/marker-manager.ts +0 -201
  100. package/src/browser/markers/marker.ts +0 -20
  101. package/src/browser/model/debug-source.ts +0 -144
  102. package/src/browser/model/debug-stack-frame.ts +0 -111
  103. package/src/browser/model/debug-thread.ts +0 -186
  104. package/src/browser/model/debug-watch.ts +0 -130
  105. package/src/browser/model/index.ts +0 -4
  106. package/src/browser/preferences/launch-folder-preference-provider.ts +0 -23
  107. package/src/browser/preferences/launch-preferences-contribution.ts +0 -9
  108. package/src/browser/preferences/launch-preferences.ts +0 -16
  109. package/src/browser/tree/debug-console-tree-node.define.tsx +0 -76
  110. package/src/browser/tree/debug-tree-node.define.ts +0 -768
  111. package/src/browser/tree/index.ts +0 -2
  112. package/src/browser/view/breakpoints/debug-breakpoints.module.less +0 -72
  113. package/src/browser/view/breakpoints/debug-breakpoints.service.ts +0 -217
  114. package/src/browser/view/breakpoints/debug-breakpoints.view.tsx +0 -174
  115. package/src/browser/view/configuration/debug-configuration.module.less +0 -110
  116. package/src/browser/view/configuration/debug-configuration.service.ts +0 -170
  117. package/src/browser/view/configuration/debug-configuration.view.tsx +0 -252
  118. package/src/browser/view/configuration/debug-toolbar.service.ts +0 -167
  119. package/src/browser/view/configuration/debug-toolbar.view.tsx +0 -335
  120. package/src/browser/view/console/debug-console-filter.model.ts +0 -49
  121. package/src/browser/view/console/debug-console-filter.service.ts +0 -81
  122. package/src/browser/view/console/debug-console-filter.view.tsx +0 -78
  123. package/src/browser/view/console/debug-console-model.ts +0 -48
  124. package/src/browser/view/console/debug-console-session.ts +0 -164
  125. package/src/browser/view/console/debug-console-toolbar.view.tsx +0 -28
  126. package/src/browser/view/console/debug-console-tree.model.service.ts +0 -550
  127. package/src/browser/view/console/debug-console.contribution.ts +0 -181
  128. package/src/browser/view/console/debug-console.module.less +0 -373
  129. package/src/browser/view/console/debug-console.service.ts +0 -433
  130. package/src/browser/view/console/debug-console.view.tsx +0 -500
  131. package/src/browser/view/debug-view-model.ts +0 -182
  132. package/src/browser/view/frames/debug-call-stack-frame.view.tsx +0 -224
  133. package/src/browser/view/frames/debug-call-stack-session.view.tsx +0 -237
  134. package/src/browser/view/frames/debug-call-stack-thread.view.tsx +0 -93
  135. package/src/browser/view/frames/debug-call-stack.contribution.ts +0 -88
  136. package/src/browser/view/frames/debug-call-stack.module.less +0 -193
  137. package/src/browser/view/frames/debug-call-stack.operation.tsx +0 -97
  138. package/src/browser/view/frames/debug-call-stack.service.ts +0 -105
  139. package/src/browser/view/frames/debug-call-stack.view.tsx +0 -43
  140. package/src/browser/view/variables/debug-variables-model.ts +0 -38
  141. package/src/browser/view/variables/debug-variables-tree.model.service.ts +0 -467
  142. package/src/browser/view/variables/debug-variables.contribution.ts +0 -244
  143. package/src/browser/view/variables/debug-variables.module.less +0 -149
  144. package/src/browser/view/variables/debug-variables.view.tsx +0 -303
  145. package/src/browser/view/watch/debug-watch-model.ts +0 -38
  146. package/src/browser/view/watch/debug-watch-tree.model.service.ts +0 -567
  147. package/src/browser/view/watch/debug-watch.contribution.ts +0 -167
  148. package/src/browser/view/watch/debug-watch.module.less +0 -189
  149. package/src/browser/view/watch/debug-watch.view.tsx +0 -337
  150. package/src/common/constants.ts +0 -81
  151. package/src/common/debug-breakpoint.ts +0 -43
  152. package/src/common/debug-configuration.ts +0 -68
  153. package/src/common/debug-editor.ts +0 -4
  154. package/src/common/debug-hover.ts +0 -31
  155. package/src/common/debug-model.ts +0 -247
  156. package/src/common/debug-progress.ts +0 -8
  157. package/src/common/debug-schema-updater.ts +0 -1
  158. package/src/common/debug-service.ts +0 -176
  159. package/src/common/debug-session-options.ts +0 -19
  160. package/src/common/debug-session.ts +0 -200
  161. package/src/common/evaluatable-expression.ts +0 -43
  162. package/src/common/index.ts +0 -14
  163. package/src/common/inline-values.ts +0 -77
  164. package/src/common/terminal.ts +0 -163
  165. package/src/common/types.ts +0 -86
  166. 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
- }