@jupyterlab/debugger 4.0.0-alpha.8 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/lib/debugger.d.ts +3 -1
  2. package/lib/debugger.js +5 -3
  3. package/lib/debugger.js.map +1 -1
  4. package/lib/dialogs/evaluate.d.ts +5 -0
  5. package/lib/dialogs/evaluate.js +16 -6
  6. package/lib/dialogs/evaluate.js.map +1 -1
  7. package/lib/factory.d.ts +1 -1
  8. package/lib/factory.js +15 -9
  9. package/lib/factory.js.map +1 -1
  10. package/lib/handler.js +15 -7
  11. package/lib/handler.js.map +1 -1
  12. package/lib/handlers/console.js +9 -3
  13. package/lib/handlers/console.js.map +1 -1
  14. package/lib/handlers/editor.d.ts +26 -12
  15. package/lib/handlers/editor.js +166 -89
  16. package/lib/handlers/editor.js.map +1 -1
  17. package/lib/handlers/file.js +6 -2
  18. package/lib/handlers/file.js.map +1 -1
  19. package/lib/handlers/notebook.d.ts +0 -7
  20. package/lib/handlers/notebook.js +11 -17
  21. package/lib/handlers/notebook.js.map +1 -1
  22. package/lib/icons.d.ts +2 -1
  23. package/lib/icons.js +6 -1
  24. package/lib/icons.js.map +1 -1
  25. package/lib/model.js +1 -0
  26. package/lib/model.js.map +1 -1
  27. package/lib/panels/breakpoints/index.d.ts +2 -2
  28. package/lib/panels/breakpoints/index.js +9 -7
  29. package/lib/panels/breakpoints/index.js.map +1 -1
  30. package/lib/panels/breakpoints/pauseonexceptions.d.ts +53 -0
  31. package/lib/panels/breakpoints/pauseonexceptions.js +98 -0
  32. package/lib/panels/breakpoints/pauseonexceptions.js.map +1 -0
  33. package/lib/panels/callstack/index.d.ts +1 -1
  34. package/lib/panels/kernelSources/body.d.ts +5 -7
  35. package/lib/panels/kernelSources/body.js +37 -47
  36. package/lib/panels/kernelSources/body.js.map +1 -1
  37. package/lib/panels/kernelSources/filter.d.ts +1 -2
  38. package/lib/panels/kernelSources/filter.js +2 -2
  39. package/lib/panels/kernelSources/filter.js.map +1 -1
  40. package/lib/panels/kernelSources/index.js +1 -1
  41. package/lib/panels/kernelSources/index.js.map +1 -1
  42. package/lib/panels/kernelSources/model.d.ts +10 -1
  43. package/lib/panels/kernelSources/model.js +19 -1
  44. package/lib/panels/kernelSources/model.js.map +1 -1
  45. package/lib/panels/sources/body.js +5 -3
  46. package/lib/panels/sources/body.js.map +1 -1
  47. package/lib/panels/variables/grid.d.ts +10 -0
  48. package/lib/panels/variables/grid.js +28 -351
  49. package/lib/panels/variables/grid.js.map +1 -1
  50. package/lib/panels/variables/gridpanel.d.ts +140 -0
  51. package/lib/panels/variables/gridpanel.js +363 -0
  52. package/lib/panels/variables/gridpanel.js.map +1 -0
  53. package/lib/panels/variables/mimerenderer.js +9 -1
  54. package/lib/panels/variables/mimerenderer.js.map +1 -1
  55. package/lib/panels/variables/scope.js +4 -0
  56. package/lib/panels/variables/scope.js.map +1 -1
  57. package/lib/panels/variables/tree.d.ts +1 -0
  58. package/lib/panels/variables/tree.js +136 -47
  59. package/lib/panels/variables/tree.js.map +1 -1
  60. package/lib/service.d.ts +20 -6
  61. package/lib/service.js +84 -59
  62. package/lib/service.js.map +1 -1
  63. package/lib/session.d.ts +20 -6
  64. package/lib/session.js +59 -11
  65. package/lib/session.js.map +1 -1
  66. package/lib/sidebar.js +1 -1
  67. package/lib/sources.d.ts +2 -2
  68. package/lib/sources.js +32 -17
  69. package/lib/sources.js.map +1 -1
  70. package/lib/tokens.d.ts +57 -13
  71. package/lib/tokens.js.map +1 -1
  72. package/package.json +39 -47
  73. package/src/config.ts +78 -0
  74. package/src/debugger.ts +154 -0
  75. package/src/dialogs/evaluate.ts +144 -0
  76. package/src/factory.ts +72 -0
  77. package/src/handler.ts +528 -0
  78. package/src/handlers/console.ts +118 -0
  79. package/src/handlers/editor.ts +469 -0
  80. package/src/handlers/file.ts +86 -0
  81. package/src/handlers/notebook.ts +128 -0
  82. package/src/hash.ts +69 -0
  83. package/src/icons.ts +64 -0
  84. package/src/index.ts +16 -0
  85. package/src/model.ts +155 -0
  86. package/src/panels/breakpoints/body.tsx +145 -0
  87. package/src/panels/breakpoints/index.ts +116 -0
  88. package/src/panels/breakpoints/model.ts +74 -0
  89. package/src/panels/breakpoints/pauseonexceptions.tsx +141 -0
  90. package/src/panels/callstack/body.tsx +96 -0
  91. package/src/panels/callstack/index.ts +152 -0
  92. package/src/panels/callstack/model.ts +86 -0
  93. package/src/panels/kernelSources/body.tsx +139 -0
  94. package/src/panels/kernelSources/filter.tsx +44 -0
  95. package/src/panels/kernelSources/index.tsx +106 -0
  96. package/src/panels/kernelSources/model.ts +160 -0
  97. package/src/panels/sources/body.ts +161 -0
  98. package/src/panels/sources/index.tsx +85 -0
  99. package/src/panels/sources/model.ts +94 -0
  100. package/src/panels/sources/sourcepath.tsx +28 -0
  101. package/src/panels/variables/grid.ts +144 -0
  102. package/src/panels/variables/gridpanel.ts +455 -0
  103. package/src/panels/variables/index.ts +199 -0
  104. package/src/panels/variables/mimerenderer.ts +125 -0
  105. package/src/panels/variables/model.ts +61 -0
  106. package/src/panels/variables/scope.tsx +132 -0
  107. package/src/panels/variables/tree.tsx +521 -0
  108. package/src/service.ts +1009 -0
  109. package/src/session.ts +342 -0
  110. package/src/sidebar.ts +194 -0
  111. package/src/sources.ts +327 -0
  112. package/src/svg.d.ts +9 -0
  113. package/src/tokens.ts +1071 -0
  114. package/style/breakpoints.css +21 -12
  115. package/style/icons/exceptions.svg +10 -0
  116. package/style/index.css +1 -1
  117. package/style/index.js +1 -1
  118. package/style/kernelSources.css +3 -0
  119. package/style/variables.css +68 -21
@@ -1,11 +1,13 @@
1
1
  // Copyright (c) Jupyter Development Team.
2
2
  // Distributed under the terms of the Modified BSD License.
3
3
  import { nullTranslator } from '@jupyterlab/translation';
4
+ import { Signal } from '@lumino/signaling';
4
5
  import { caretDownEmptyIcon, ReactWidget, searchIcon } from '@jupyterlab/ui-components';
5
6
  import { ArrayExt } from '@lumino/algorithm';
6
- import React, { useEffect, useState } from 'react';
7
+ import React, { useCallback, useEffect, useState } from 'react';
7
8
  import { convertType } from '.';
8
9
  import { Debugger } from '../../debugger';
10
+ const BUTTONS_CLASS = 'jp-DebuggerVariables-buttons';
9
11
  /**
10
12
  * The body for tree of variables.
11
13
  */
@@ -23,6 +25,7 @@ export class VariablesBodyTree extends ReactWidget {
23
25
  this._commands = options.commands;
24
26
  this._service = options.service;
25
27
  this._translator = options.translator;
28
+ this._hoverChanged = new Signal(this);
26
29
  const model = (this.model = options.model);
27
30
  model.changed.connect(this._updateScopes, this);
28
31
  this.addClass('jp-DebuggerVariables-body');
@@ -33,9 +36,15 @@ export class VariablesBodyTree extends ReactWidget {
33
36
  render() {
34
37
  var _a;
35
38
  const scope = (_a = this._scopes.find(scope => scope.name === this._scope)) !== null && _a !== void 0 ? _a : this._scopes[0];
36
- return scope ? (React.createElement(VariablesComponent, { key: scope.name, commands: this._commands, service: this._service, data: scope.variables, filter: this._filter, translator: this._translator, handleSelectVariable: variable => {
37
- this.model.selectedVariable = variable;
38
- } })) : (React.createElement("div", null));
39
+ const handleSelectVariable = (variable) => {
40
+ this.model.selectedVariable = variable;
41
+ };
42
+ const collapserIcon = (React.createElement(caretDownEmptyIcon.react, { stylesheet: "menuItem", tag: "span" }));
43
+ return scope ? (React.createElement(React.Fragment, null,
44
+ React.createElement(VariablesBranch, { key: scope.name, commands: this._commands, service: this._service, data: scope.variables, filter: this._filter, translator: this._translator, handleSelectVariable: handleSelectVariable, onHoverChanged: (data) => {
45
+ this._hoverChanged.emit(data);
46
+ }, collapserIcon: collapserIcon }),
47
+ React.createElement(TreeButtons, { commands: this._commands, service: this._service, hoverChanged: this._hoverChanged, handleSelectVariable: handleSelectVariable }))) : (React.createElement("div", null));
39
48
  }
40
49
  /**
41
50
  * Set the variable filter list.
@@ -64,6 +73,91 @@ export class VariablesBodyTree extends ReactWidget {
64
73
  this.update();
65
74
  }
66
75
  }
76
+ /**
77
+ * The singleton buttons bar shown by the variables.
78
+ */
79
+ const TreeButtons = (props) => {
80
+ var _a;
81
+ const { commands, service, translator, handleSelectVariable } = props;
82
+ const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');
83
+ const [buttonsTop, setButtonsTop] = useState(0);
84
+ const [variable, setVariable] = useState(null);
85
+ let stateRefreshLock = 0;
86
+ // Empty dependency array is to only register once per lifetime.
87
+ const handleHover = useCallback((_, data) => {
88
+ const current = ++stateRefreshLock;
89
+ if (!data.variable) {
90
+ // Handle mouse leave.
91
+ if (current !== stateRefreshLock) {
92
+ return;
93
+ }
94
+ const target = data.target;
95
+ if (target &&
96
+ // Note: Element, not HTMLElement to permit entering <svg> icon.
97
+ target instanceof Element &&
98
+ target.closest(`.${BUTTONS_CLASS}`)) {
99
+ // Allow to enter the buttons.
100
+ return;
101
+ }
102
+ setVariable(null);
103
+ }
104
+ else {
105
+ // Handle mouse over.
106
+ setVariable(data.variable);
107
+ requestAnimationFrame(() => {
108
+ if (current !== stateRefreshLock || !data.target) {
109
+ return;
110
+ }
111
+ setButtonsTop(data.target.offsetTop);
112
+ });
113
+ }
114
+ }, []);
115
+ useEffect(() => {
116
+ props.hoverChanged.connect(handleHover);
117
+ return () => {
118
+ props.hoverChanged.disconnect(handleHover);
119
+ };
120
+ }, [handleHover]);
121
+ return (React.createElement("div", { className: BUTTONS_CLASS, style:
122
+ // Positioning and hiding is implemented using compositor-only
123
+ // properties (transform and opacity) for performance.
124
+ {
125
+ transform: `translateY(${buttonsTop}px)`,
126
+ opacity: !variable ||
127
+ // Do not show buttons display for special entries, defined in debugpy:
128
+ // https://github.com/microsoft/debugpy/blob/cf0d684566edc339545b161da7c3dfc48af7c7d5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py#L359
129
+ [
130
+ 'special variables',
131
+ 'protected variables',
132
+ 'function variables',
133
+ 'class variables'
134
+ ].includes(variable.name)
135
+ ? 0
136
+ : 1
137
+ } },
138
+ React.createElement("button", { className: "jp-DebuggerVariables-renderVariable", disabled: !variable ||
139
+ !service.model.hasRichVariableRendering ||
140
+ !commands.isEnabled(Debugger.CommandIDs.renderMimeVariable, {
141
+ name: variable.name,
142
+ frameID: (_a = service.model.callstack.frame) === null || _a === void 0 ? void 0 : _a.id
143
+ }), onClick: e => {
144
+ var _a;
145
+ if (!variable || !handleSelectVariable) {
146
+ return;
147
+ }
148
+ e.stopPropagation();
149
+ handleSelectVariable(variable);
150
+ commands
151
+ .execute(Debugger.CommandIDs.renderMimeVariable, {
152
+ name: variable.name,
153
+ frameID: (_a = service.model.callstack.frame) === null || _a === void 0 ? void 0 : _a.id
154
+ })
155
+ .catch(reason => {
156
+ console.error(`Failed to render variable ${variable === null || variable === void 0 ? void 0 : variable.name}`, reason);
157
+ });
158
+ }, title: trans.__('Render variable: %1', variable === null || variable === void 0 ? void 0 : variable.name) },
159
+ React.createElement(searchIcon.react, { stylesheet: "menuItem", tag: "span" }))));
160
+ };
67
161
  /**
68
162
  * A React component to display a list of variables.
69
163
  *
@@ -72,17 +166,28 @@ export class VariablesBodyTree extends ReactWidget {
72
166
  * @param props.service The debugger service.
73
167
  * @param props.filter Optional variable filter list.
74
168
  */
75
- const VariablesComponent = (props) => {
76
- const { commands, data, service, filter, translator, handleSelectVariable } = props;
169
+ const VariablesBranch = (props) => {
170
+ const { commands, data, service, filter, translator, handleSelectVariable, onHoverChanged, collapserIcon } = props;
77
171
  const [variables, setVariables] = useState(data);
78
172
  useEffect(() => {
79
173
  setVariables(data);
80
174
  }, [data]);
81
- return (React.createElement("ul", null, variables === null || variables === void 0 ? void 0 : variables.filter(variable => !(filter || new Set()).has(variable.evaluateName || '')).map(variable => {
175
+ return (React.createElement("ul", { className: "jp-DebuggerVariables-branch" }, variables
176
+ .filter(variable => !(filter || new Set()).has(variable.evaluateName || ''))
177
+ .map(variable => {
82
178
  const key = `${variable.name}-${variable.evaluateName}-${variable.type}-${variable.value}-${variable.variablesReference}`;
83
- return (React.createElement(VariableComponent, { key: key, commands: commands, data: variable, service: service, filter: filter, translator: translator, onSelect: handleSelectVariable }));
179
+ return (React.createElement(VariableComponent, { key: key, commands: commands, data: variable, service: service, filter: filter, translator: translator, onSelect: handleSelectVariable, onHoverChanged: onHoverChanged, collapserIcon: collapserIcon }));
84
180
  })));
85
181
  };
182
+ function _prepareDetail(variable) {
183
+ const detail = convertType(variable);
184
+ if (variable.type === 'float' && isNaN(detail)) {
185
+ // silence React warning:
186
+ // `Received NaN for the `children` attribute. If this is expected, cast the value to a string`
187
+ return 'NaN';
188
+ }
189
+ return detail;
190
+ }
86
191
  /**
87
192
  * A React component to display one node variable in tree.
88
193
  *
@@ -92,19 +197,12 @@ const VariablesComponent = (props) => {
92
197
  * @param props.filter Optional variable filter list.
93
198
  */
94
199
  const VariableComponent = (props) => {
95
- const { commands, data, service, filter, translator, onSelect } = props;
200
+ const { commands, data, service, filter, translator, onSelect, onHoverChanged, collapserIcon } = props;
96
201
  const [variable] = useState(data);
97
202
  const [expanded, setExpanded] = useState();
98
203
  const [variables, setVariables] = useState();
99
- const styleName = {
100
- color: 'var(--jp-mirror-editor-attribute-color)'
101
- };
102
- const styleType = {
103
- color: 'var(--jp-mirror-editor-string-color)'
104
- };
105
204
  const onSelection = onSelect !== null && onSelect !== void 0 ? onSelect : (() => void 0);
106
205
  const expandable = variable.variablesReference !== 0 || variable.type === 'function';
107
- const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');
108
206
  const onVariableClicked = async (e) => {
109
207
  if (!expandable) {
110
208
  return;
@@ -114,38 +212,29 @@ const VariableComponent = (props) => {
114
212
  setExpanded(!expanded);
115
213
  setVariables(variables);
116
214
  };
117
- return (React.createElement("li", { onClick: (e) => onVariableClicked(e), onMouseDown: () => {
215
+ return (React.createElement("li", { onClick: (e) => onVariableClicked(e), onMouseDown: e => {
216
+ e.stopPropagation();
118
217
  onSelection(variable);
119
- } },
120
- React.createElement(caretDownEmptyIcon.react, { visibility: expandable ? 'visible' : 'hidden', stylesheet: "menuItem", tag: "span", transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }),
121
- React.createElement("span", { style: styleName }, variable.name),
122
- React.createElement("span", null, ": "),
123
- React.createElement("span", { style: styleType }, convertType(variable)),
124
- React.createElement("span", { className: "jp-DebuggerVariables-hspacer" }),
125
- service.model.hasRichVariableRendering &&
126
- // Don't add rich display for special entries
127
- // debugpy: https://github.com/microsoft/debugpy/blob/cf0d684566edc339545b161da7c3dfc48af7c7d5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py#L359
128
- ![
129
- 'special variables',
130
- 'protected variables',
131
- 'function variables',
132
- 'class variables'
133
- ].includes(variable.name) && (React.createElement("button", { className: "jp-DebuggerVariables-renderVariable", disabled: !commands.isEnabled(Debugger.CommandIDs.renderMimeVariable, {
134
- name: variable.name,
135
- variablesReference: variable.variablesReference
136
- }), onClick: e => {
137
- e.stopPropagation();
138
- onSelection(variable);
139
- commands
140
- .execute(Debugger.CommandIDs.renderMimeVariable, {
141
- name: variable.name,
142
- variablesReference: variable.variablesReference
143
- })
144
- .catch(reason => {
145
- console.error(`Failed to render variable ${variable.name}`, reason);
218
+ }, onMouseOver: (event) => {
219
+ if (onHoverChanged) {
220
+ onHoverChanged({ target: event.currentTarget, variable });
221
+ event.stopPropagation();
222
+ }
223
+ }, onMouseLeave: (event) => {
224
+ if (onHoverChanged) {
225
+ onHoverChanged({
226
+ target: event.relatedTarget,
227
+ variable: null
146
228
  });
147
- }, title: trans.__('Render variable') },
148
- React.createElement(searchIcon.react, { stylesheet: "menuItem", tag: "span" }))),
149
- expanded && variables && (React.createElement(VariablesComponent, { key: variable.name, commands: commands, data: variables, service: service, filter: filter, translator: translator }))));
229
+ event.stopPropagation();
230
+ }
231
+ } },
232
+ React.createElement("span", { className: 'jp-DebuggerVariables-collapser' +
233
+ (expanded ? ' jp-mod-expanded' : '') },
234
+ // note: using React.cloneElement due to high typestyle cost
235
+ expandable ? React.cloneElement(collapserIcon) : null),
236
+ React.createElement("span", { className: "jp-DebuggerVariables-name" }, variable.name),
237
+ React.createElement("span", { className: "jp-DebuggerVariables-detail" }, _prepareDetail(variable)),
238
+ expanded && variables && (React.createElement(VariablesBranch, { key: variable.name, commands: commands, data: variables, service: service, filter: filter, translator: translator, handleSelectVariable: onSelect, onHoverChanged: onHoverChanged, collapserIcon: collapserIcon }))));
150
239
  };
151
240
  //# sourceMappingURL=tree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/panels/variables/tree.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/panels/variables/tree.tsx"],"names":[],"mappings":"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"}
package/lib/service.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { KernelSpec, Session } from '@jupyterlab/services';
2
2
  import { ITranslator } from '@jupyterlab/translation';
3
3
  import { IDisposable } from '@lumino/disposable';
4
- import { ISignal } from '@lumino/signaling';
4
+ import { ISignal, Signal } from '@lumino/signaling';
5
5
  import { DebugProtocol } from '@vscode/debugprotocol';
6
6
  import { IDebugger } from './tokens';
7
7
  /**
@@ -18,6 +18,10 @@ export declare class DebuggerService implements IDebugger, IDisposable {
18
18
  * Signal emitted for debug event messages.
19
19
  */
20
20
  get eventMessage(): ISignal<IDebugger, IDebugger.ISession.Event>;
21
+ /**
22
+ * Get debugger config.
23
+ */
24
+ get config(): IDebugger.IConfig;
21
25
  /**
22
26
  * Whether the debug service is disposed.
23
27
  */
@@ -27,9 +31,9 @@ export declare class DebuggerService implements IDebugger, IDisposable {
27
31
  */
28
32
  get isStarted(): boolean;
29
33
  /**
30
- * Whether the current debugger is pausing on exceptions.
34
+ * A signal emitted when the pause on exception filter changes.
31
35
  */
32
- get isPausingOnExceptions(): boolean;
36
+ get pauseOnExceptionChanged(): Signal<IDebugger, void>;
33
37
  /**
34
38
  * Returns the debugger service's model.
35
39
  */
@@ -127,6 +131,10 @@ export declare class DebuggerService implements IDebugger, IDisposable {
127
131
  * Precondition: !isStarted
128
132
  */
129
133
  start(): Promise<void>;
134
+ /**
135
+ * Makes the current thread pause if possible.
136
+ */
137
+ pause(): Promise<void>;
130
138
  /**
131
139
  * Makes the current thread step in a function / method if possible.
132
140
  */
@@ -150,15 +158,20 @@ export declare class DebuggerService implements IDebugger, IDisposable {
150
158
  updateBreakpoints(code: string, breakpoints: IDebugger.IBreakpoint[], path?: string): Promise<void>;
151
159
  /**
152
160
  * Determines if pausing on exceptions is supported by the kernel
153
- *
154
161
  */
155
162
  pauseOnExceptionsIsValid(): boolean;
163
+ /**
164
+ * Add or remove a filter from the current used filters.
165
+ *
166
+ * @param exceptionFilter - The filter to add or remove from current filters.
167
+ */
168
+ pauseOnExceptionsFilter(exceptionFilter: string): Promise<void>;
156
169
  /**
157
170
  * Enable or disable pausing on exceptions.
158
171
  *
159
- * @param enable - Whether to enbale or disable pausing on exceptions.
172
+ * @param exceptionFilters - The filters to use for the current debugging session.
160
173
  */
161
- pauseOnExceptions(enable: boolean): Promise<void>;
174
+ pauseOnExceptions(exceptionFilters: string[]): Promise<void>;
162
175
  /**
163
176
  * Get the debugger state
164
177
  *
@@ -269,6 +282,7 @@ export declare class DebuggerService implements IDebugger, IDisposable {
269
282
  private _sessionChanged;
270
283
  private _specsManager;
271
284
  private _trans;
285
+ private _pauseOnExceptionChanged;
272
286
  }
273
287
  /**
274
288
  * A namespace for `DebuggerService` statics.
package/lib/service.js CHANGED
@@ -17,6 +17,7 @@ export class DebuggerService {
17
17
  this._eventMessage = new Signal(this);
18
18
  this._isDisposed = false;
19
19
  this._sessionChanged = new Signal(this);
20
+ this._pauseOnExceptionChanged = new Signal(this);
20
21
  this._config = options.config;
21
22
  // Avoids setting session with invalid client
22
23
  // session should be set only when a notebook or
@@ -35,6 +36,12 @@ export class DebuggerService {
35
36
  get eventMessage() {
36
37
  return this._eventMessage;
37
38
  }
39
+ /**
40
+ * Get debugger config.
41
+ */
42
+ get config() {
43
+ return this._config;
44
+ }
38
45
  /**
39
46
  * Whether the debug service is disposed.
40
47
  */
@@ -49,18 +56,10 @@ export class DebuggerService {
49
56
  return (_b = (_a = this._session) === null || _a === void 0 ? void 0 : _a.isStarted) !== null && _b !== void 0 ? _b : false;
50
57
  }
51
58
  /**
52
- * Whether the current debugger is pausing on exceptions.
59
+ * A signal emitted when the pause on exception filter changes.
53
60
  */
54
- get isPausingOnExceptions() {
55
- var _a, _b, _c, _d, _e, _f;
56
- const kernel = (_d = (_c = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '';
57
- if (kernel) {
58
- const tmpFileParams = this._config.getTmpFileParams(kernel);
59
- if (tmpFileParams) {
60
- return ((_f = (_e = this._session) === null || _e === void 0 ? void 0 : _e.pausingOnExceptions.includes(tmpFileParams.prefix)) !== null && _f !== void 0 ? _f : false);
61
- }
62
- }
63
- return false;
61
+ get pauseOnExceptionChanged() {
62
+ return this._pauseOnExceptionChanged;
64
63
  }
65
64
  /**
66
65
  * Returns the debugger service's model.
@@ -207,7 +206,7 @@ export class DebuggerService {
207
206
  source,
208
207
  sourceReference: (_a = source.sourceReference) !== null && _a !== void 0 ? _a : 0
209
208
  });
210
- return Object.assign(Object.assign({}, reply.body), { path: (_b = source.path) !== null && _b !== void 0 ? _b : '' });
209
+ return { ...reply.body, path: (_b = source.path) !== null && _b !== void 0 ? _b : '' };
211
210
  }
212
211
  /**
213
212
  * Evaluate an expression.
@@ -377,6 +376,10 @@ export class DebuggerService {
377
376
  this._clearModel();
378
377
  this._clearSignals();
379
378
  }
379
+ // Send the currentExceptionFilters to debugger.
380
+ if (this.session.currentExceptionFilters) {
381
+ await this.pauseOnExceptions(this.session.currentExceptionFilters);
382
+ }
380
383
  }
381
384
  /**
382
385
  * Starts a debugger.
@@ -388,6 +391,22 @@ export class DebuggerService {
388
391
  }
389
392
  return this.session.start();
390
393
  }
394
+ /**
395
+ * Makes the current thread pause if possible.
396
+ */
397
+ async pause() {
398
+ try {
399
+ if (!this.session) {
400
+ throw new Error('No active debugger session');
401
+ }
402
+ await this.session.sendRequest('pause', {
403
+ threadId: this._currentThread()
404
+ });
405
+ }
406
+ catch (err) {
407
+ console.error('Error:', err.message);
408
+ }
409
+ }
391
410
  /**
392
411
  * Makes the current thread step in a function / method if possible.
393
412
  */
@@ -461,75 +480,77 @@ export class DebuggerService {
461
480
  else {
462
481
  this._model.breakpoints.restoreBreakpoints(remoteBreakpoints);
463
482
  }
483
+ // Removes duplicated breakpoints. It is better to do it here than
484
+ // in the editor, because the kernel can change the line of a
485
+ // breakpoint (when you attemp to set a breakpoint on an empty
486
+ // line for instance).
487
+ let addedLines = new Set();
464
488
  // Set the kernel's breakpoints for this path.
465
489
  const reply = await this._setBreakpoints(localBreakpoints, path);
466
- const updatedBreakpoints = reply.body.breakpoints.filter((val, _, arr) => arr.findIndex(el => el.line === val.line) > -1);
490
+ const updatedBreakpoints = reply.body.breakpoints.filter((val, _, arr) => {
491
+ const cond1 = arr.findIndex(el => el.line === val.line) > -1;
492
+ const cond2 = !addedLines.has(val.line);
493
+ addedLines.add(val.line);
494
+ return cond1 && cond2;
495
+ });
467
496
  // Update the local model and finish kernel configuration.
468
497
  this._model.breakpoints.setBreakpoints(path, updatedBreakpoints);
469
498
  await this.session.sendRequest('configurationDone', {});
470
499
  }
471
500
  /**
472
501
  * Determines if pausing on exceptions is supported by the kernel
473
- *
474
502
  */
475
503
  pauseOnExceptionsIsValid() {
476
- var _a;
504
+ var _a, _b;
477
505
  if (this.isStarted) {
478
- if ((_a = this.session) === null || _a === void 0 ? void 0 : _a.exceptionBreakpointFilters) {
506
+ if (((_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.exceptionBreakpointFilters) === null || _b === void 0 ? void 0 : _b.length) !== 0) {
479
507
  return true;
480
508
  }
481
509
  }
482
510
  return false;
483
511
  }
484
512
  /**
485
- * Enable or disable pausing on exceptions.
513
+ * Add or remove a filter from the current used filters.
486
514
  *
487
- * @param enable - Whether to enbale or disable pausing on exceptions.
515
+ * @param exceptionFilter - The filter to add or remove from current filters.
488
516
  */
489
- async pauseOnExceptions(enable) {
490
- var _a, _b, _c, _d, _e;
517
+ async pauseOnExceptionsFilter(exceptionFilter) {
518
+ var _a;
491
519
  if (!((_a = this.session) === null || _a === void 0 ? void 0 : _a.isStarted)) {
492
520
  return;
493
521
  }
494
- const kernel = (_e = (_d = (_c = (_b = this.session) === null || _b === void 0 ? void 0 : _b.connection) === null || _c === void 0 ? void 0 : _c.kernel) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : '';
495
- if (!kernel) {
496
- return;
497
- }
498
- const tmpFileParams = this._config.getTmpFileParams(kernel);
499
- if (!tmpFileParams) {
500
- return;
501
- }
502
- let prefix = tmpFileParams.prefix;
503
- const exceptionBreakpointFilters = this.session.exceptionBreakpointFilters;
504
- let pauseOnExceptionKernels = this.session.pausingOnExceptions;
505
- if (enable) {
506
- if (!this.session.pausingOnExceptions.includes(prefix)) {
507
- pauseOnExceptionKernels.push(prefix);
508
- this.session.pausingOnExceptions = pauseOnExceptionKernels;
509
- }
522
+ let exceptionFilters = this.session.currentExceptionFilters;
523
+ if (this.session.isPausingOnException(exceptionFilter)) {
524
+ const index = exceptionFilters.indexOf(exceptionFilter);
525
+ exceptionFilters.splice(index, 1);
510
526
  }
511
527
  else {
512
- let prefixIndex = this.session.pausingOnExceptions.indexOf(prefix);
513
- if (prefixIndex > -1) {
514
- this.session.pausingOnExceptions = pauseOnExceptionKernels.splice(prefixIndex, 1);
515
- this.session.pausingOnExceptions = pauseOnExceptionKernels;
516
- }
528
+ exceptionFilters === null || exceptionFilters === void 0 ? void 0 : exceptionFilters.push(exceptionFilter);
517
529
  }
518
- const filters = [];
519
- const exceptionOptions = [];
520
- const breakMode = enable ? 'userUnhandled' : 'never';
521
- for (let filterDict of exceptionBreakpointFilters !== null && exceptionBreakpointFilters !== void 0 ? exceptionBreakpointFilters : []) {
522
- filters.push(filterDict.filter);
523
- exceptionOptions.push({
524
- path: [{ names: this.session.exceptionPaths }],
525
- breakMode: breakMode
526
- });
530
+ await this.pauseOnExceptions(exceptionFilters);
531
+ }
532
+ /**
533
+ * Enable or disable pausing on exceptions.
534
+ *
535
+ * @param exceptionFilters - The filters to use for the current debugging session.
536
+ */
537
+ async pauseOnExceptions(exceptionFilters) {
538
+ var _a, _b;
539
+ if (!((_a = this.session) === null || _a === void 0 ? void 0 : _a.isStarted)) {
540
+ return;
527
541
  }
528
- const options = {
529
- filters: filters,
530
- exceptionOptions: exceptionOptions
542
+ const exceptionBreakpointFilters = ((_b = this.session.exceptionBreakpointFilters) === null || _b === void 0 ? void 0 : _b.map(e => e.filter)) || [];
543
+ let options = {
544
+ filters: []
531
545
  };
546
+ exceptionFilters.forEach(filter => {
547
+ if (exceptionBreakpointFilters.includes(filter)) {
548
+ options.filters.push(filter);
549
+ }
550
+ });
551
+ this.session.currentExceptionFilters = options.filters;
532
552
  await this.session.sendRequest('setExceptionBreakpoints', options);
553
+ this._pauseOnExceptionChanged.emit();
533
554
  }
534
555
  /**
535
556
  * Get the debugger state
@@ -548,7 +569,7 @@ export class DebuggerService {
548
569
  path: (_g = (_f = (_e = this._session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.path) !== null && _g !== void 0 ? _g : '',
549
570
  source: id
550
571
  });
551
- const tmpCells = editorList.map(e => e.model.value.text);
572
+ const tmpCells = editorList.map(e => e.src.getSource());
552
573
  cells = cells.concat(tmpCells);
553
574
  }
554
575
  }
@@ -609,7 +630,7 @@ export class DebuggerService {
609
630
  return {
610
631
  name: scope.name,
611
632
  variables: variables[i].map(variable => {
612
- return Object.assign({}, variable);
633
+ return { ...variable };
613
634
  })
614
635
  };
615
636
  });
@@ -731,7 +752,11 @@ export class DebuggerService {
731
752
  }
732
753
  return breakpoints.reduce((map, val) => {
733
754
  const { breakpoints, source } = val;
734
- map.set(source, breakpoints.map(point => (Object.assign(Object.assign({}, point), { source: { path: source }, verified: true }))));
755
+ map.set(source, breakpoints.map(point => ({
756
+ ...point,
757
+ source: { path: source },
758
+ verified: true
759
+ })));
735
760
  return map;
736
761
  }, new Map());
737
762
  }
@@ -763,14 +788,14 @@ export class DebuggerService {
763
788
  const reply = await this.session.sendRequest('variables', {
764
789
  variablesReference: variable.variablesReference
765
790
  });
766
- let newVariable = Object.assign(Object.assign({}, variable), { expanded: true });
791
+ let newVariable = { ...variable, expanded: true };
767
792
  reply.body.variables.forEach((variable) => {
768
- newVariable = Object.assign({ [variable.name]: variable }, newVariable);
793
+ newVariable = { [variable.name]: variable, ...newVariable };
769
794
  });
770
795
  const newScopes = this._model.variables.scopes.map(scope => {
771
796
  const findIndex = scope.variables.findIndex(ele => ele.variablesReference === variable.variablesReference);
772
797
  scope.variables[findIndex] = newVariable;
773
- return Object.assign({}, scope);
798
+ return { ...scope };
774
799
  });
775
800
  this._model.variables.scopes = [...newScopes];
776
801
  return reply.body.variables;