@mcp-abap-adt/adt-clients 27.0.0 → 29.0.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.
- package/README.md +8 -6
- package/dist/core/behaviorDefinition/update.d.ts +1 -1
- package/dist/core/behaviorDefinition/update.js +1 -1
- package/dist/core/metadataExtension/create.d.ts +1 -1
- package/dist/core/metadataExtension/create.js +1 -1
- package/dist/core/metadataExtension/delete.d.ts +1 -1
- package/dist/core/metadataExtension/delete.js +1 -1
- package/dist/core/transport/AdtRequest.d.ts +2 -2
- package/dist/core/transport/AdtRequest.js +2 -2
- package/dist/index.runtime.d.ts +1 -1
- package/dist/index.runtime.d.ts.map +1 -1
- package/dist/index.runtime.js +3 -1
- package/dist/runtime/debugger/AbapDebugger.d.ts +75 -3
- package/dist/runtime/debugger/AbapDebugger.d.ts.map +1 -1
- package/dist/runtime/debugger/AbapDebugger.js +80 -2
- package/dist/runtime/debugger/abap.d.ts +192 -3
- package/dist/runtime/debugger/abap.d.ts.map +1 -1
- package/dist/runtime/debugger/abap.js +333 -23
- package/dist/runtime/debugger/index.d.ts +1 -1
- package/dist/runtime/debugger/index.d.ts.map +1 -1
- package/dist/runtime/debugger/index.js +9 -1
- package/docs/usage/CLIENT_API_REFERENCE.md +161 -10
- package/docs/usage/ERRATA.md +22 -0
- package/docs/usage/MIGRATION-28.md +116 -0
- package/docs/usage/MIGRATION-29.md +43 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -91,8 +91,8 @@ This package interacts with external packages **ONLY through interfaces**:
|
|
|
91
91
|
|
|
92
92
|
| package | what this package takes from it |
|
|
93
93
|
|---|---|
|
|
94
|
-
| [`@mcp-abap-adt/interfaces-adt`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt) `^
|
|
95
|
-
| [`@mcp-abap-adt/interfaces-adt-connection`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt-connection) `^
|
|
94
|
+
| [`@mcp-abap-adt/interfaces-adt`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt) `^15.0.0` | the capability atoms, every object's config, `IAdtResponse`, `IAnalyse`, `IAdtAnalyseOptions`, `IResultStrategy`, `ADT_NO_FAILURE`, `ADT_TASK_TYPE` |
|
|
95
|
+
| [`@mcp-abap-adt/interfaces-adt-connection`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt-connection) `^2.0.0` | `IAbapConnection`, `IAdtWireResponse`, `IAbapRequestOptions`, `ITimeoutConfig`, the connection capability atoms, `ADT_SESSION_ERROR` |
|
|
96
96
|
| [`@mcp-abap-adt/interfaces-network`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-network) `^2.0.0` | `IWebSocketTransport` and its four companions, `HttpError` |
|
|
97
97
|
| [`@mcp-abap-adt/interfaces-utils`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-utils) `^1.1.0` | `ILogger`, `LogLevel`, `XmlNode` |
|
|
98
98
|
| [`@mcp-abap-adt/interfaces-auth`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-auth) — **dev only** | `IAuthProvider`, for the test helpers that open a session |
|
|
@@ -162,7 +162,9 @@ npm install @mcp-abap-adt/adt-clients
|
|
|
162
162
|
|
|
163
163
|
6. **AbapDebugger, AmdpDebugger, MemorySnapshots**
|
|
164
164
|
- Standalone, from `@mcp-abap-adt/adt-clients/runtime` or the root: `new AbapDebugger(connection, logger, results?, { onConflict? })`
|
|
165
|
-
- One member per request, contracts `IAbapDebugger`, `IAmdpDebugger`, `IMemorySnapshots` from `@mcp-abap-adt/interfaces-adt`
|
|
165
|
+
- One member per request, contracts `IAbapDebugger`, `IAmdpDebugger`, `IMemorySnapshots` from `@mcp-abap-adt/interfaces-adt` (contract 15 pairs with clients 29)
|
|
166
|
+
- **The identity states its mode.** `{ debuggingMode: 'user', requestUser, terminalId, ideId }`, or `{ debuggingMode: 'terminal', terminalId, ideId }`; `attach` takes the identity, not the user. A catch in terminal mode is unmeasured
|
|
167
|
+
- **Breakpoints are replaced, not added to.** `setBreakpoints` and `syncBreakpoints` replace the identity's set, and `stopListener` deletes it: arm the whole set in one call
|
|
166
168
|
- **Two sessions.** The ABAP listener holds one stateful connection; each debuggee caught is attached on a new one, routed to its application server. The AMDP debugger answers events on one session and takes commands on another
|
|
167
169
|
- See [Debugging](docs/usage/CLIENT_API_REFERENCE.md#debugging)
|
|
168
170
|
|
|
@@ -534,7 +536,7 @@ await client.getBehaviorImplementation().create(
|
|
|
534
536
|
packageName: 'ZOK_TEST_PKG_01',
|
|
535
537
|
behaviorDefinition: 'ZOK_I_CDS_TEST',
|
|
536
538
|
description: 'Behavior Implementation for ZOK_I_CDS_TEST',
|
|
537
|
-
transportRequest: '
|
|
539
|
+
transportRequest: 'DEVK900001'
|
|
538
540
|
}
|
|
539
541
|
);
|
|
540
542
|
// The class shell exists. Its `source/main` — the generated binding to the
|
|
@@ -855,7 +857,7 @@ everything else is not.
|
|
|
855
857
|
|
|
856
858
|
### Single Definition Site: the contract packages
|
|
857
859
|
|
|
858
|
-
Since **7.5.0**, every contract type is **defined once**, in the contract packages — today `@mcp-abap-adt/interfaces-adt` (`^
|
|
860
|
+
Since **7.5.0**, every contract type is **defined once**, in the contract packages — today `@mcp-abap-adt/interfaces-adt` (`^15.0.0`) for the ADT contracts and `@mcp-abap-adt/interfaces-adt-connection` (`^2.0.0`) for the connection. This package declares no copies of its own — every `IXxxConfig`, the capability atoms, the option and response types and the cross-cutting shared types all live there.
|
|
859
861
|
|
|
860
862
|
**Import them from the package that owns them:**
|
|
861
863
|
|
|
@@ -935,7 +937,7 @@ contracts (`IAbapDebugger`, `IAmdpDebugger`, `IMemorySnapshots`, 13.1.0). This
|
|
|
935
937
|
package no longer declares or exports any contract type — every contract name it uses is
|
|
936
938
|
sourced from the contract packages.
|
|
937
939
|
|
|
938
|
-
> **Version pairing.** Because the types are sourced rather than copied, `@mcp-abap-adt/interfaces-adt` and `@mcp-abap-adt/interfaces-adt-connection` are hard peers of this package's public API. A major bump there implies a bump here; keep the two in step rather than letting a resolver pick a mismatched pair.
|
|
940
|
+
> **Version pairing.** `adt-clients` 29 pairs with `interfaces-adt` 15 (breakpoints lose `skipCount` and gain `clientId`), and `adt-strategies` 0.10.0 declares the same range. Because the types are sourced rather than copied, `@mcp-abap-adt/interfaces-adt` and `@mcp-abap-adt/interfaces-adt-connection` are hard peers of this package's public API. A major bump there implies a bump here; keep the two in step rather than letting a resolver pick a mismatched pair.
|
|
939
941
|
|
|
940
942
|
### Naming Conventions
|
|
941
943
|
|
|
@@ -34,7 +34,7 @@ import type { IUpdateBehaviorDefinitionParams } from './types';
|
|
|
34
34
|
* name: 'Z_MY_BDEF',
|
|
35
35
|
* sourceCode: source,
|
|
36
36
|
* lockHandle,
|
|
37
|
-
* transportRequest: '
|
|
37
|
+
* transportRequest: 'DEVK905635'
|
|
38
38
|
* });
|
|
39
39
|
* await unlock(connection, 'Z_MY_BDEF', lockHandle, sessionId);
|
|
40
40
|
* ```
|
|
@@ -39,7 +39,7 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
39
39
|
* name: 'Z_MY_BDEF',
|
|
40
40
|
* sourceCode: source,
|
|
41
41
|
* lockHandle,
|
|
42
|
-
* transportRequest: '
|
|
42
|
+
* transportRequest: 'DEVK905635'
|
|
43
43
|
* });
|
|
44
44
|
* await unlock(connection, 'Z_MY_BDEF', lockHandle, sessionId);
|
|
45
45
|
* ```
|
|
@@ -19,7 +19,7 @@ import type { IMetadataExtensionCreateParams } from './types';
|
|
|
19
19
|
* name: 'ZDEMO_C_CDS_MDE',
|
|
20
20
|
* description: 'First metadata extension',
|
|
21
21
|
* packageName: 'ZDEMO_PKG',
|
|
22
|
-
* transportRequest: '
|
|
22
|
+
* transportRequest: 'DEVK900123'
|
|
23
23
|
* }, sessionId);
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
@@ -24,7 +24,7 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
24
24
|
* name: 'ZDEMO_C_CDS_MDE',
|
|
25
25
|
* description: 'First metadata extension',
|
|
26
26
|
* packageName: 'ZDEMO_PKG',
|
|
27
|
-
* transportRequest: '
|
|
27
|
+
* transportRequest: 'DEVK900123'
|
|
28
28
|
* }, sessionId);
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
@@ -15,7 +15,7 @@ import type { IAbapConnection, IAdtWireResponse } from '@mcp-abap-adt/interfaces
|
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', '
|
|
18
|
+
* await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', 'DEVK900123', sessionId);
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export declare function deleteMetadataExtension(connection: IAbapConnection, name: string, transportRequest: string | undefined): Promise<IAdtWireResponse>;
|
|
@@ -19,7 +19,7 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
|
-
* await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', '
|
|
22
|
+
* await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', 'DEVK900123', sessionId);
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
25
|
async function deleteMetadataExtension(connection, name, transportRequest) {
|
|
@@ -154,12 +154,12 @@ export declare class AdtRequest<R extends ITransportResults = typeof transportDo
|
|
|
154
154
|
*
|
|
155
155
|
* ```typescript
|
|
156
156
|
* const request = client.getRequest();
|
|
157
|
-
* await request.removeObject('
|
|
157
|
+
* await request.removeObject('DEVK905942', {
|
|
158
158
|
* name: 'ZMCP_BLD_FGR_H1',
|
|
159
159
|
* type: 'FUGR',
|
|
160
160
|
* position: '000025',
|
|
161
161
|
* });
|
|
162
|
-
* const log = await request.readActionLog('
|
|
162
|
+
* const log = await request.readActionLog('DEVK905942');
|
|
163
163
|
* ```
|
|
164
164
|
*
|
|
165
165
|
* **`position` is required, and it is what makes the call do anything.**
|
|
@@ -212,12 +212,12 @@ class AdtRequest {
|
|
|
212
212
|
*
|
|
213
213
|
* ```typescript
|
|
214
214
|
* const request = client.getRequest();
|
|
215
|
-
* await request.removeObject('
|
|
215
|
+
* await request.removeObject('DEVK905942', {
|
|
216
216
|
* name: 'ZMCP_BLD_FGR_H1',
|
|
217
217
|
* type: 'FUGR',
|
|
218
218
|
* position: '000025',
|
|
219
219
|
* });
|
|
220
|
-
* const log = await request.readActionLog('
|
|
220
|
+
* const log = await request.readActionLog('DEVK905942');
|
|
221
221
|
* ```
|
|
222
222
|
*
|
|
223
223
|
* **`position` is required, and it is what makes the call do anything.**
|
package/dist/index.runtime.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export { AtcLog, atcLogDocuments, type IAtcLogResults, } from './runtime/atc/Atc
|
|
|
9
9
|
export { DdicActivation, ddicActivationDocuments, type IDdicActivationResults, } from './runtime/ddic/DdicActivation';
|
|
10
10
|
export { AbapDebugger, abapDebuggerDocuments, type IAbapDebuggerOptions, type IAbapDebuggerResults, } from './runtime/debugger/AbapDebugger';
|
|
11
11
|
export { AmdpDebugger, amdpDebuggerDocuments, type IAmdpDebuggerResults, } from './runtime/debugger/AmdpDebugger';
|
|
12
|
-
export type
|
|
12
|
+
export { type IDebuggerListenerConflict, readListenerConflict, } from './runtime/debugger/abap';
|
|
13
13
|
export { buildDumpIdPrefix, buildRuntimeDumpsUserQuery, } from './runtime/dumps';
|
|
14
14
|
export { type IRuntimeDumpsResults, RuntimeDumps, runtimeDumpsDocuments, } from './runtime/dumps/RuntimeDumps';
|
|
15
15
|
export { FeedRepository, feedDocuments, type IFeedResults, } from './runtime/feeds/FeedRepository';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.runtime.d.ts","sourceRoot":"","sources":["../src/index.runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,MAAM,EACN,eAAe,EACf,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,
|
|
1
|
+
{"version":3,"file":"index.runtime.d.ts","sourceRoot":"","sources":["../src/index.runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,MAAM,EACN,eAAe,EACf,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,oBAAoB,EACzB,YAAY,EACZ,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,cAAc,EACd,aAAa,EACb,KAAK,YAAY,GAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,uBAAuB,EAC5B,eAAe,EACf,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,KAAK,sBAAsB,EAC3B,cAAc,EACd,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,KAAK,gBAAgB,EACrB,QAAQ,EACR,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,iBAAiB,EACtB,SAAS,EACT,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
|
package/dist/index.runtime.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Covers: AdtRuntimeClient and all runtime/** modules.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.st05TraceDocuments = exports.St05Trace = exports.profilerDocuments = exports.Profiler = exports.crossTraceDocuments = exports.CrossTrace = exports.systemMessagesDocuments = exports.SystemMessages = exports.memorySnapshotsDocuments = exports.MemorySnapshots = exports.gatewayErrorLogDocuments = exports.GatewayErrorLog = exports.feedDocuments = exports.FeedRepository = exports.runtimeDumpsDocuments = exports.RuntimeDumps = exports.buildRuntimeDumpsUserQuery = exports.buildDumpIdPrefix = exports.amdpDebuggerDocuments = exports.AmdpDebugger = exports.abapDebuggerDocuments = exports.AbapDebugger = exports.ddicActivationDocuments = exports.DdicActivation = exports.atcLogDocuments = exports.AtcLog = exports.atcDocuments = exports.AdtAtc = exports.applicationLogDocuments = exports.ApplicationLog = exports.AdtRuntimeClient = void 0;
|
|
7
|
+
exports.st05TraceDocuments = exports.St05Trace = exports.profilerDocuments = exports.Profiler = exports.crossTraceDocuments = exports.CrossTrace = exports.systemMessagesDocuments = exports.SystemMessages = exports.memorySnapshotsDocuments = exports.MemorySnapshots = exports.gatewayErrorLogDocuments = exports.GatewayErrorLog = exports.feedDocuments = exports.FeedRepository = exports.runtimeDumpsDocuments = exports.RuntimeDumps = exports.buildRuntimeDumpsUserQuery = exports.buildDumpIdPrefix = exports.readListenerConflict = exports.amdpDebuggerDocuments = exports.AmdpDebugger = exports.abapDebuggerDocuments = exports.AbapDebugger = exports.ddicActivationDocuments = exports.DdicActivation = exports.atcLogDocuments = exports.AtcLog = exports.atcDocuments = exports.AdtAtc = exports.applicationLogDocuments = exports.ApplicationLog = exports.AdtRuntimeClient = void 0;
|
|
8
8
|
var AdtRuntimeClient_1 = require("./clients/AdtRuntimeClient");
|
|
9
9
|
Object.defineProperty(exports, "AdtRuntimeClient", { enumerable: true, get: function () { return AdtRuntimeClient_1.AdtRuntimeClient; } });
|
|
10
10
|
var ApplicationLog_1 = require("./runtime/applicationLog/ApplicationLog");
|
|
@@ -28,6 +28,8 @@ Object.defineProperty(exports, "abapDebuggerDocuments", { enumerable: true, get:
|
|
|
28
28
|
var AmdpDebugger_1 = require("./runtime/debugger/AmdpDebugger");
|
|
29
29
|
Object.defineProperty(exports, "AmdpDebugger", { enumerable: true, get: function () { return AmdpDebugger_1.AmdpDebugger; } });
|
|
30
30
|
Object.defineProperty(exports, "amdpDebuggerDocuments", { enumerable: true, get: function () { return AmdpDebugger_1.amdpDebuggerDocuments; } });
|
|
31
|
+
var abap_1 = require("./runtime/debugger/abap");
|
|
32
|
+
Object.defineProperty(exports, "readListenerConflict", { enumerable: true, get: function () { return abap_1.readListenerConflict; } });
|
|
31
33
|
// Keep low-level dump types/functions (may be used by consumers)
|
|
32
34
|
var dumps_1 = require("./runtime/dumps");
|
|
33
35
|
Object.defineProperty(exports, "buildDumpIdPrefix", { enumerable: true, get: function () { return dumps_1.buildDumpIdPrefix; } });
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* the stateful session and the second session that runs the program are the
|
|
6
6
|
* caller's.
|
|
7
7
|
*/
|
|
8
|
-
import type { IAbapDebugger, IAdtAnalyseOptions, IAdtError, IAdtResponse, IDebuggerBreakpoint, IDebuggerIdentity, IDebuggerStepMethod, IDebuggerStepToLineMethod, IResultStrategy } from '@mcp-abap-adt/interfaces-adt';
|
|
8
|
+
import type { IAbapDebugger, IAdtAnalyseOptions, IAdtError, IAdtResponse, IDebuggerBreakpoint, IDebuggerBreakpointSync, IDebuggerIdentity, IDebuggerSettings, IDebuggerStepMethod, IDebuggerStepToLineMethod, IResultStrategy } from '@mcp-abap-adt/interfaces-adt';
|
|
9
9
|
import type { IAbapConnection } from '@mcp-abap-adt/interfaces-adt-connection';
|
|
10
10
|
import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
|
|
11
11
|
import { type IDebuggerListenerConflict } from './abap';
|
|
@@ -22,6 +22,8 @@ export interface IAbapDebuggerResults {
|
|
|
22
22
|
readonly watchpoints: IResultStrategy<unknown>;
|
|
23
23
|
/** The memory sizes and the snapshot's confirmation. */
|
|
24
24
|
readonly memory: IResultStrategy<unknown>;
|
|
25
|
+
/** The debugger settings' confirmation. */
|
|
26
|
+
readonly settings: IResultStrategy<unknown>;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* The shipped default: every document as it arrived, and nothing where the
|
|
@@ -39,6 +41,7 @@ export declare const abapDebuggerDocuments: {
|
|
|
39
41
|
done: IResultStrategy<void>;
|
|
40
42
|
watchpoints: IResultStrategy<string>;
|
|
41
43
|
memory: IResultStrategy<string>;
|
|
44
|
+
settings: IResultStrategy<string>;
|
|
42
45
|
};
|
|
43
46
|
/** How this implementation behaves, fixed when it is constructed. */
|
|
44
47
|
export interface IAbapDebuggerOptions {
|
|
@@ -51,22 +54,63 @@ export interface IAbapDebuggerOptions {
|
|
|
51
54
|
readonly onConflict?: IDebuggerListenerConflict;
|
|
52
55
|
}
|
|
53
56
|
type Of<R extends IAbapDebuggerResults, K extends keyof IAbapDebuggerResults> = ReturnType<R[K]>;
|
|
54
|
-
|
|
57
|
+
/**
|
|
58
|
+
* The ABAP debugger on one connection, with the settings it was constructed
|
|
59
|
+
* with (`onConflict`).
|
|
60
|
+
*
|
|
61
|
+
* **One debug session per identity.** The server binds the listener context -
|
|
62
|
+
* request user and IDE id - to the ABAP session the connection carries (see
|
|
63
|
+
* `listen` in `abap.ts`), so one debugger serves one identity. Another
|
|
64
|
+
* identity - another request user, another mode, another `ideId` - needs
|
|
65
|
+
* another debug session: a new `AbapDebugger` on a connection of its own,
|
|
66
|
+
* with its own settings. The library does not guard this; a call naming an
|
|
67
|
+
* identity other than the one the session was bound to is answered by the
|
|
68
|
+
* server as it is.
|
|
69
|
+
*/
|
|
70
|
+
export declare class AbapDebugger<R extends IAbapDebuggerResults = typeof abapDebuggerDocuments> implements IAbapDebugger<Of<R, 'breakpoints'>, Of<R, 'listener'>, Of<R, 'attach'>, Of<R, 'stack'>, Of<R, 'variables'>, Of<R, 'step'>, Of<R, 'done'>, Of<R, 'watchpoints'>, Of<R, 'memory'>, Of<R, 'settings'>> {
|
|
55
71
|
private readonly connection;
|
|
56
72
|
private readonly results;
|
|
57
73
|
private readonly options;
|
|
58
74
|
readonly kind: "abapDebugger";
|
|
59
75
|
constructor(connection: IAbapConnection, _logger?: ILogger, results?: R, options?: IAbapDebuggerOptions);
|
|
60
76
|
private reading;
|
|
77
|
+
/**
|
|
78
|
+
* Arm breakpoints under the identity's key, replacing what the key held -
|
|
79
|
+
* a `validationOnly` request too (see `setBreakpoints` in `abap.ts`).
|
|
80
|
+
*
|
|
81
|
+
* `clientId` on a breakpoint tags it; the server echoes it on every answer
|
|
82
|
+
* row, placed and refused, in an order of its own (see `setBreakpoints` in
|
|
83
|
+
* `abap.ts`).
|
|
84
|
+
*/
|
|
61
85
|
setBreakpoints<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, breakpoints: readonly IDebuggerBreakpoint[], options?: {
|
|
62
86
|
validationOnly?: boolean;
|
|
63
87
|
} & IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'breakpoints'>, E>>;
|
|
64
88
|
deleteBreakpoint<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, breakpointId: string, options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'done'>, E>>;
|
|
89
|
+
/**
|
|
90
|
+
* Start a listener for the identity, with the conflict behaviour this
|
|
91
|
+
* debugger was constructed with (`onConflict`).
|
|
92
|
+
*
|
|
93
|
+
* The listener belongs to the identity's debug session: a listener for
|
|
94
|
+
* another identity needs a new `AbapDebugger` on a connection of its own
|
|
95
|
+
* (see the class and `listen` in `abap.ts`).
|
|
96
|
+
*/
|
|
65
97
|
listen<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, options?: {
|
|
66
98
|
holdSeconds?: number;
|
|
67
99
|
} & IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'listener'>, E>>;
|
|
100
|
+
/**
|
|
101
|
+
* Release the listener - and delete the key's breakpoints with it, whether
|
|
102
|
+
* or not a listener was running (see `stopListener` in `abap.ts`). Stop the
|
|
103
|
+
* listener last, or arm again before the next listen. It acts for the
|
|
104
|
+
* identity's debug session; another identity needs a debugger of its own.
|
|
105
|
+
*/
|
|
68
106
|
stopListener<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'done'>, E>>;
|
|
69
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Attach to the debuggee a listener caught. The attach, and everything after
|
|
109
|
+
* it, goes on a debugger with a connection opened for this debuggee, never
|
|
110
|
+
* the listener's (see `attach` in `abap.ts`); the identity is the one the
|
|
111
|
+
* session was bound to - another identity needs a debugger of its own.
|
|
112
|
+
*/
|
|
113
|
+
attach<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, debuggeeId: string, options?: {
|
|
70
114
|
dynproDebugging?: boolean;
|
|
71
115
|
/** The debuggee's application server (`INSTANCE_NAME` in the listener's answer). */
|
|
72
116
|
server?: string;
|
|
@@ -88,6 +132,34 @@ export declare class AbapDebugger<R extends IAbapDebuggerResults = typeof abapDe
|
|
|
88
132
|
includeAbap?: boolean;
|
|
89
133
|
} & IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'memory'>, E>>;
|
|
90
134
|
createMemorySnapshot<E extends IAdtError = IAdtError>(options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'memory'>, E>>;
|
|
135
|
+
/**
|
|
136
|
+
* Replace the key's breakpoints, `full` or by object with `partial` (see
|
|
137
|
+
* `syncBreakpoints` in `abap.ts`).
|
|
138
|
+
*
|
|
139
|
+
* `clientId` on a breakpoint tags it; the server echoes it on every answer
|
|
140
|
+
* row, placed and refused, in an order of its own (see `setBreakpoints` in
|
|
141
|
+
* `abap.ts`).
|
|
142
|
+
*/
|
|
143
|
+
syncBreakpoints<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, sync: IDebuggerBreakpointSync, options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'breakpoints'>, E>>;
|
|
144
|
+
/**
|
|
145
|
+
* Ask whether a listener for the identity would conflict; starts nothing.
|
|
146
|
+
* The answer is read in the identity's debug session: for another identity,
|
|
147
|
+
* use a debugger on a connection of its own (see the class).
|
|
148
|
+
*/
|
|
149
|
+
checkListener<E extends IAdtError = IAdtError>(identity: IDebuggerIdentity, options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'done'>, E>>;
|
|
150
|
+
detachDebugger<E extends IAdtError = IAdtError>(options?: {
|
|
151
|
+
debuggeeId?: string;
|
|
152
|
+
} & IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'done'>, E>>;
|
|
153
|
+
/**
|
|
154
|
+
* Free the debugger; the program runs on. SAP answers it with a plain ICF
|
|
155
|
+
* `500` (no ADT exception document) when it worked: pass
|
|
156
|
+
* `analyseDebuggerFreed` from `@mcp-abap-adt/adt-strategies` (0.9.0) to take
|
|
157
|
+
* that `500` as no failure, or `analyseException` to let it stop you. See
|
|
158
|
+
* the errata entry "The debugger freeing its session is answered as an ICF
|
|
159
|
+
* 500" and `terminateDebugger` in `abap.ts`.
|
|
160
|
+
*/
|
|
161
|
+
terminateDebugger<E extends IAdtError = IAdtError>(options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'done'>, E>>;
|
|
162
|
+
setDebuggerSettings<E extends IAdtError = IAdtError>(settings: IDebuggerSettings, options?: IAdtAnalyseOptions<E>): Promise<IAdtResponse<Of<R, 'settings'>, E>>;
|
|
91
163
|
}
|
|
92
164
|
export {};
|
|
93
165
|
//# sourceMappingURL=AbapDebugger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbapDebugger.d.ts","sourceRoot":"","sources":["../../../src/runtime/debugger/AbapDebugger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAG9D,OAAO,
|
|
1
|
+
{"version":3,"file":"AbapDebugger.d.ts","sourceRoot":"","sources":["../../../src/runtime/debugger/AbapDebugger.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,21 @@ exports.abapDebuggerDocuments = {
|
|
|
27
27
|
done: resultStrategy_1.nothing,
|
|
28
28
|
watchpoints: resultStrategy_1.rawDocument,
|
|
29
29
|
memory: resultStrategy_1.rawDocument,
|
|
30
|
+
settings: resultStrategy_1.rawDocument,
|
|
30
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* The ABAP debugger on one connection, with the settings it was constructed
|
|
34
|
+
* with (`onConflict`).
|
|
35
|
+
*
|
|
36
|
+
* **One debug session per identity.** The server binds the listener context -
|
|
37
|
+
* request user and IDE id - to the ABAP session the connection carries (see
|
|
38
|
+
* `listen` in `abap.ts`), so one debugger serves one identity. Another
|
|
39
|
+
* identity - another request user, another mode, another `ideId` - needs
|
|
40
|
+
* another debug session: a new `AbapDebugger` on a connection of its own,
|
|
41
|
+
* with its own settings. The library does not guard this; a call naming an
|
|
42
|
+
* identity other than the one the session was bound to is answered by the
|
|
43
|
+
* server as it is.
|
|
44
|
+
*/
|
|
31
45
|
class AbapDebugger {
|
|
32
46
|
connection;
|
|
33
47
|
results;
|
|
@@ -43,20 +57,48 @@ class AbapDebugger {
|
|
|
43
57
|
reading(key) {
|
|
44
58
|
return this.results[key];
|
|
45
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Arm breakpoints under the identity's key, replacing what the key held -
|
|
62
|
+
* a `validationOnly` request too (see `setBreakpoints` in `abap.ts`).
|
|
63
|
+
*
|
|
64
|
+
* `clientId` on a breakpoint tags it; the server echoes it on every answer
|
|
65
|
+
* row, placed and refused, in an order of its own (see `setBreakpoints` in
|
|
66
|
+
* `abap.ts`).
|
|
67
|
+
*/
|
|
46
68
|
async setBreakpoints(identity, breakpoints, options) {
|
|
47
69
|
return (0, adtResponse_1.answering)(() => (0, abap_1.setBreakpoints)(this.connection, identity, breakpoints, options?.validationOnly), this.reading('breakpoints'), options?.analyse);
|
|
48
70
|
}
|
|
49
71
|
async deleteBreakpoint(identity, breakpointId, options) {
|
|
50
72
|
return (0, adtResponse_1.answering)(() => (0, abap_1.deleteBreakpoint)(this.connection, identity, breakpointId), this.reading('done'), options?.analyse);
|
|
51
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Start a listener for the identity, with the conflict behaviour this
|
|
76
|
+
* debugger was constructed with (`onConflict`).
|
|
77
|
+
*
|
|
78
|
+
* The listener belongs to the identity's debug session: a listener for
|
|
79
|
+
* another identity needs a new `AbapDebugger` on a connection of its own
|
|
80
|
+
* (see the class and `listen` in `abap.ts`).
|
|
81
|
+
*/
|
|
52
82
|
async listen(identity, options) {
|
|
53
83
|
return (0, adtResponse_1.answering)(() => (0, abap_1.listen)(this.connection, identity, this.options.onConflict ?? 'refuse', options?.holdSeconds), this.reading('listener'), options?.analyse);
|
|
54
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Release the listener - and delete the key's breakpoints with it, whether
|
|
87
|
+
* or not a listener was running (see `stopListener` in `abap.ts`). Stop the
|
|
88
|
+
* listener last, or arm again before the next listen. It acts for the
|
|
89
|
+
* identity's debug session; another identity needs a debugger of its own.
|
|
90
|
+
*/
|
|
55
91
|
async stopListener(identity, options) {
|
|
56
92
|
return (0, adtResponse_1.answering)(() => (0, abap_1.stopListener)(this.connection, identity), this.reading('done'), options?.analyse);
|
|
57
93
|
}
|
|
58
|
-
|
|
59
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Attach to the debuggee a listener caught. The attach, and everything after
|
|
96
|
+
* it, goes on a debugger with a connection opened for this debuggee, never
|
|
97
|
+
* the listener's (see `attach` in `abap.ts`); the identity is the one the
|
|
98
|
+
* session was bound to - another identity needs a debugger of its own.
|
|
99
|
+
*/
|
|
100
|
+
async attach(identity, debuggeeId, options) {
|
|
101
|
+
return (0, adtResponse_1.answering)(() => (0, abap_1.attach)(this.connection, identity, debuggeeId, options?.dynproDebugging, options?.server), this.reading('attach'), options?.analyse);
|
|
60
102
|
}
|
|
61
103
|
async getStack(options) {
|
|
62
104
|
return (0, adtResponse_1.answering)(() => (0, abap_1.getStack)(this.connection), this.reading('stack'), options?.analyse);
|
|
@@ -97,5 +139,41 @@ class AbapDebugger {
|
|
|
97
139
|
async createMemorySnapshot(options) {
|
|
98
140
|
return (0, adtResponse_1.answering)(() => (0, abap_1.createMemorySnapshot)(this.connection), this.reading('memory'), options?.analyse);
|
|
99
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Replace the key's breakpoints, `full` or by object with `partial` (see
|
|
144
|
+
* `syncBreakpoints` in `abap.ts`).
|
|
145
|
+
*
|
|
146
|
+
* `clientId` on a breakpoint tags it; the server echoes it on every answer
|
|
147
|
+
* row, placed and refused, in an order of its own (see `setBreakpoints` in
|
|
148
|
+
* `abap.ts`).
|
|
149
|
+
*/
|
|
150
|
+
async syncBreakpoints(identity, sync, options) {
|
|
151
|
+
return (0, adtResponse_1.answering)(() => (0, abap_1.syncBreakpoints)(this.connection, identity, sync), this.reading('breakpoints'), options?.analyse);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Ask whether a listener for the identity would conflict; starts nothing.
|
|
155
|
+
* The answer is read in the identity's debug session: for another identity,
|
|
156
|
+
* use a debugger on a connection of its own (see the class).
|
|
157
|
+
*/
|
|
158
|
+
async checkListener(identity, options) {
|
|
159
|
+
return (0, adtResponse_1.answering)(() => (0, abap_1.checkListener)(this.connection, identity), this.reading('done'), options?.analyse);
|
|
160
|
+
}
|
|
161
|
+
async detachDebugger(options) {
|
|
162
|
+
return (0, adtResponse_1.answering)(() => (0, abap_1.detachDebugger)(this.connection, options?.debuggeeId), this.reading('done'), options?.analyse);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Free the debugger; the program runs on. SAP answers it with a plain ICF
|
|
166
|
+
* `500` (no ADT exception document) when it worked: pass
|
|
167
|
+
* `analyseDebuggerFreed` from `@mcp-abap-adt/adt-strategies` (0.9.0) to take
|
|
168
|
+
* that `500` as no failure, or `analyseException` to let it stop you. See
|
|
169
|
+
* the errata entry "The debugger freeing its session is answered as an ICF
|
|
170
|
+
* 500" and `terminateDebugger` in `abap.ts`.
|
|
171
|
+
*/
|
|
172
|
+
async terminateDebugger(options) {
|
|
173
|
+
return (0, adtResponse_1.answering)(() => (0, abap_1.terminateDebugger)(this.connection), this.reading('done'), options?.analyse);
|
|
174
|
+
}
|
|
175
|
+
async setDebuggerSettings(settings, options) {
|
|
176
|
+
return (0, adtResponse_1.answering)(() => (0, abap_1.setDebuggerSettings)(this.connection, settings), this.reading('settings'), options?.analyse);
|
|
177
|
+
}
|
|
100
178
|
}
|
|
101
179
|
exports.AbapDebugger = AbapDebugger;
|