@opensumi/ide-debug 2.21.8-rc-1670567192.0 → 2.21.8

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