@mcp-abap-adt/adt-clients 37.0.0 → 37.2.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 (42) hide show
  1. package/README.md +56 -4
  2. package/dist/core/class/index.d.ts +1 -1
  3. package/dist/core/class/index.d.ts.map +1 -1
  4. package/dist/core/class/index.js +2 -1
  5. package/dist/core/class/run.d.ts +11 -0
  6. package/dist/core/class/run.d.ts.map +1 -1
  7. package/dist/core/class/run.js +18 -0
  8. package/dist/core/shared/abapUnit.d.ts +46 -0
  9. package/dist/core/shared/abapUnit.d.ts.map +1 -1
  10. package/dist/core/shared/abapUnit.js +98 -0
  11. package/dist/executors/abapUnitRunner.d.ts +9 -0
  12. package/dist/executors/abapUnitRunner.d.ts.map +1 -1
  13. package/dist/executors/abapUnitRunner.js +14 -0
  14. package/dist/executors/class/ClassTestRunner.d.ts +27 -1
  15. package/dist/executors/class/ClassTestRunner.d.ts.map +1 -1
  16. package/dist/executors/class/ClassTestRunner.js +31 -0
  17. package/dist/executors/class/ClassTestRunnerLegacy.d.ts +6 -0
  18. package/dist/executors/class/ClassTestRunnerLegacy.d.ts.map +1 -1
  19. package/dist/executors/class/ClassTestRunnerLegacy.js +12 -5
  20. package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts +25 -1
  21. package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts.map +1 -1
  22. package/dist/executors/functionGroup/FunctionGroupTestRunner.js +30 -1
  23. package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts +47 -2
  24. package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts.map +1 -1
  25. package/dist/executors/functionModule/FunctionModuleTestRunner.js +48 -1
  26. package/dist/executors/functionModule/index.d.ts +1 -1
  27. package/dist/executors/functionModule/index.d.ts.map +1 -1
  28. package/dist/executors/index.d.ts +1 -1
  29. package/dist/executors/index.d.ts.map +1 -1
  30. package/dist/executors/program/ProgramTestRunner.d.ts +30 -3
  31. package/dist/executors/program/ProgramTestRunner.d.ts.map +1 -1
  32. package/dist/executors/program/ProgramTestRunner.js +33 -3
  33. package/dist/executors/program/ProgramTestRunnerLegacy.d.ts +7 -4
  34. package/dist/executors/program/ProgramTestRunnerLegacy.d.ts.map +1 -1
  35. package/dist/executors/program/ProgramTestRunnerLegacy.js +9 -4
  36. package/dist/index.executors.d.ts +1 -1
  37. package/dist/index.executors.d.ts.map +1 -1
  38. package/docs/usage/OBJECT_LIFECYCLE.md +2 -2
  39. package/package.json +25 -18
  40. package/dist/core/class/runLegacy.d.ts +0 -42
  41. package/dist/core/class/runLegacy.d.ts.map +0 -1
  42. package/dist/core/class/runLegacy.js +0 -74
@@ -10,9 +10,15 @@
10
10
  * `osl:object type="FUGR"` ran all seven test methods of a group whose test
11
11
  * include covers two test classes. Running one module's tests only is
12
12
  * `FunctionModuleTestRunner`.
13
+ *
14
+ * Measured on premise (SAP_BASIS 816, 2026-10-23): `/abapunit/testruns` given
15
+ * the group's URI runs the same tests with the same alerts as `/runs` — with
16
+ * the Eclipse-style `<options>` only; without it, an empty result. `runSync`
17
+ * always sends `<options>`.
13
18
  */
14
19
  Object.defineProperty(exports, "__esModule", { value: true });
15
20
  exports.FunctionGroupTestRunnerLegacy = exports.FunctionGroupTestRunner = exports.functionGroupTestRunnerDocuments = void 0;
21
+ const objects_1 = require("../../endpoints/objects");
16
22
  const abapUnitRunner_1 = require("../abapUnitRunner");
17
23
  exports.functionGroupTestRunnerDocuments = abapUnitRunner_1.abapUnitRunnerDocuments;
18
24
  class FunctionGroupTestRunner extends abapUnitRunner_1.AbapUnitRunner {
@@ -25,16 +31,39 @@ class FunctionGroupTestRunner extends abapUnitRunner_1.AbapUnitRunner {
25
31
  async run(functionGroupName, options) {
26
32
  return this.startByObject(functionGroupName, 'FUGR', options);
27
33
  }
34
+ /**
35
+ * Run every test class of the group and answer the finished result. One
36
+ * POST, to `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside
37
+ * the asynchronous `run` + `getStatus` + `getResult`, which stays the
38
+ * default.
39
+ *
40
+ * An explicit choice of the caller's: nothing here asks the system which
41
+ * runner it has. The group is named by its URI and the run configuration
42
+ * always carries `<options>` (scope, risk levels and durations, with `run`'s
43
+ * defaults) — without it the endpoint answered an empty result for a group
44
+ * with tests. `title` and `context` are not sent.
45
+ *
46
+ * The answer is the `aunit:runResult` document, read by this runner's
47
+ * `result` strategy; whether a failing test is a failure is
48
+ * `options.analyse`'s.
49
+ */
50
+ async runSync(functionGroupName, options) {
51
+ return this.startSync([objects_1.FUNCTION_GROUP.uri(functionGroupName)], options);
52
+ }
28
53
  }
29
54
  exports.FunctionGroupTestRunner = FunctionGroupTestRunner;
30
55
  /**
31
56
  * Below 7.50: refused without a request, as a report's run is — the legacy
32
- * endpoint has not been measured to find a group's tests.
57
+ * endpoint has not been measured to find a group's tests, with `<options>` or
58
+ * without. `runSync` is refused the same way.
33
59
  */
34
60
  class FunctionGroupTestRunnerLegacy extends FunctionGroupTestRunner {
35
61
  async run() {
36
62
  return (0, abapUnitRunner_1.refusedBelow750)("a function group's");
37
63
  }
64
+ async runSync() {
65
+ return (0, abapUnitRunner_1.refusedBelow750)("a function group's");
66
+ }
38
67
  async getStatus() {
39
68
  return (0, abapUnitRunner_1.refusedBelow750)("a function group's");
40
69
  }
@@ -10,11 +10,24 @@
10
10
  * that exercise it, and answered an empty result for another module of the
11
11
  * same group that none of them exercises. The whole group's tests are
12
12
  * `FunctionGroupTestRunner`.
13
+ *
14
+ * Measured on premise again (SAP_BASIS 816, 2026-10-23), with a group whose
15
+ * test include holds one test class that calls the module and one that calls
16
+ * no module: `run` (`FUNC`) ran every test of the group — both classes — and
17
+ * so did the run of a second module that no test calls. That does not
18
+ * reproduce the 2026-09-30 filter; what made the difference is not known.
19
+ * Which tests a module's run covers is ADT's to decide, and nothing here
20
+ * filters them.
13
21
  */
14
- import type { IAdtAnalyseOptions, IAdtError, IAdtResponse, IAdtRunnable, IClassUnitTestRunOptions } from '@mcp-abap-adt/interfaces-adt';
22
+ import type { IAdtAnalyseOptions, IAdtError, IAdtResponse, IAdtRunnable, IClassUnitTestRunOptions, IFunctionModuleConfig } from '@mcp-abap-adt/interfaces-adt';
15
23
  import type { IAbapConnection } from '@mcp-abap-adt/interfaces-adt-connection';
16
24
  import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
17
25
  import { AbapUnitRunner, type IAbapUnitRunnerResults } from '../abapUnitRunner';
26
+ /**
27
+ * What `runSync` is given: the module and its group — the module's URI, which
28
+ * `/abapunit/testruns` addresses, lies under its group's.
29
+ */
30
+ export type IFunctionModuleTestRunSyncTarget = Pick<IFunctionModuleConfig, 'functionGroupName' | 'functionModuleName'>;
18
31
  export type IFunctionModuleTestRunnerResults = IAbapUnitRunnerResults;
19
32
  export declare const functionModuleTestRunnerDocuments: {
20
33
  run: import("@mcp-abap-adt/interfaces-adt").IResultStrategy<string>;
@@ -25,13 +38,45 @@ export declare class FunctionModuleTestRunner<R extends IFunctionModuleTestRunne
25
38
  constructor(connection: IAbapConnection, logger?: ILogger, results?: R);
26
39
  /** Run the test classes that exercise the module. One POST. */
27
40
  run<E extends IAdtError = IAdtError>(functionModuleName: string, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
41
+ /**
42
+ * Run the module's tests and answer the finished result. One POST, to
43
+ * `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside the
44
+ * asynchronous `run` + `getStatus` + `getResult`, which stays the default.
45
+ *
46
+ * An explicit choice of the caller's: nothing here asks the system which
47
+ * runner it has. The module is named by its URI, which lies under its
48
+ * group's, so the target names both. The run configuration always carries
49
+ * `<options>` (scope, risk levels and durations, with `run`'s defaults) —
50
+ * without it the endpoint answered an empty result. `title` and `context`
51
+ * are not sent.
52
+ *
53
+ * **It does not keep to the module's tests.** Measured on premise
54
+ * (SAP_BASIS 816, 2026-10-23): the module's URI ran every test of its group —
55
+ * the result names the group (`adtcore:type="FUGR/F"`) — including a test
56
+ * class that calls no module, and the run of a module that no test calls
57
+ * answered the same. `run` answered the same there too. Nothing here filters
58
+ * the result; a caller who wants one module's tests reads them out of it.
59
+ *
60
+ * With an ABAP Doc test relation (`"! @testing FUNC:<module>`) on a test
61
+ * class of the group, the same request with the default scope answered the
62
+ * group's tests as a preview — `isForeign="true"`, nothing executed, no
63
+ * alerts — and with `scope: { foreignTests: true }` ran them all (measured
64
+ * once, 2026-10-23, same system).
65
+ *
66
+ * The answer is the `aunit:runResult` document, read by this runner's
67
+ * `result` strategy; whether a failing test is a failure is
68
+ * `options.analyse`'s.
69
+ */
70
+ runSync<E extends IAdtError = IAdtError>(target: IFunctionModuleTestRunSyncTarget, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
28
71
  }
29
72
  /**
30
73
  * Below 7.50: refused without a request, as a report's run is — the legacy
31
- * endpoint has not been measured to find a module's tests.
74
+ * endpoint has not been measured to find a module's tests, with `<options>` or
75
+ * without. `runSync` is refused the same way.
32
76
  */
33
77
  export declare class FunctionModuleTestRunnerLegacy<R extends IFunctionModuleTestRunnerResults = typeof functionModuleTestRunnerDocuments> extends FunctionModuleTestRunner<R> {
34
78
  run<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
79
+ runSync<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
35
80
  getStatus<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['status']>, E>>;
36
81
  getResult<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
37
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionModuleTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/FunctionModuleTestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EACL,cAAc,EAEd,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AACtE,eAAO,MAAM,iCAAiC;;;;CAA0B,CAAC;AAEzE,qBAAa,wBAAwB,CACjC,CAAC,SACC,gCAAgC,GAAG,OAAO,iCAAiC,CAE/E,SAAQ,cAAc,CAAC,CAAC,CACxB,YACE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBAGpE,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAEhB,OAAO,GAAE,CAAqD;IAKhE,+DAA+D;IACzD,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGlD;AAED;;;GAGG;AACH,qBAAa,8BAA8B,CACzC,CAAC,SACC,gCAAgC,GAAG,OAAO,iCAAiC,CAC7E,SAAQ,wBAAwB,CAAC,CAAC,CAAC;IACpB,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAC5D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;CAGF"}
1
+ {"version":3,"file":"FunctionModuleTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/FunctionModuleTestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EACL,cAAc,EAEd,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,qBAAqB,EACrB,mBAAmB,GAAG,oBAAoB,CAC3C,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AACtE,eAAO,MAAM,iCAAiC;;;;CAA0B,CAAC;AAEzE,qBAAa,wBAAwB,CACjC,CAAC,SACC,gCAAgC,GAAG,OAAO,iCAAiC,CAE/E,SAAQ,cAAc,CAAC,CAAC,CACxB,YACE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBAGpE,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAEhB,OAAO,GAAE,CAAqD;IAKhE,+DAA+D;IACzD,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC3C,MAAM,EAAE,gCAAgC,EACxC,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAWrD;AAED;;;;GAIG;AACH,qBAAa,8BAA8B,CACzC,CAAC,SACC,gCAAgC,GAAG,OAAO,iCAAiC,CAC7E,SAAQ,wBAAwB,CAAC,CAAC,CAAC;IACpB,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAC5D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtC;IAIc,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAChE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;CAGF"}
@@ -11,9 +11,18 @@
11
11
  * that exercise it, and answered an empty result for another module of the
12
12
  * same group that none of them exercises. The whole group's tests are
13
13
  * `FunctionGroupTestRunner`.
14
+ *
15
+ * Measured on premise again (SAP_BASIS 816, 2026-10-23), with a group whose
16
+ * test include holds one test class that calls the module and one that calls
17
+ * no module: `run` (`FUNC`) ran every test of the group — both classes — and
18
+ * so did the run of a second module that no test calls. That does not
19
+ * reproduce the 2026-09-30 filter; what made the difference is not known.
20
+ * Which tests a module's run covers is ADT's to decide, and nothing here
21
+ * filters them.
14
22
  */
15
23
  Object.defineProperty(exports, "__esModule", { value: true });
16
24
  exports.FunctionModuleTestRunnerLegacy = exports.FunctionModuleTestRunner = exports.functionModuleTestRunnerDocuments = void 0;
25
+ const objects_1 = require("../../endpoints/objects");
17
26
  const abapUnitRunner_1 = require("../abapUnitRunner");
18
27
  exports.functionModuleTestRunnerDocuments = abapUnitRunner_1.abapUnitRunnerDocuments;
19
28
  class FunctionModuleTestRunner extends abapUnitRunner_1.AbapUnitRunner {
@@ -26,16 +35,54 @@ class FunctionModuleTestRunner extends abapUnitRunner_1.AbapUnitRunner {
26
35
  async run(functionModuleName, options) {
27
36
  return this.startByObject(functionModuleName, 'FUNC', options);
28
37
  }
38
+ /**
39
+ * Run the module's tests and answer the finished result. One POST, to
40
+ * `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside the
41
+ * asynchronous `run` + `getStatus` + `getResult`, which stays the default.
42
+ *
43
+ * An explicit choice of the caller's: nothing here asks the system which
44
+ * runner it has. The module is named by its URI, which lies under its
45
+ * group's, so the target names both. The run configuration always carries
46
+ * `<options>` (scope, risk levels and durations, with `run`'s defaults) —
47
+ * without it the endpoint answered an empty result. `title` and `context`
48
+ * are not sent.
49
+ *
50
+ * **It does not keep to the module's tests.** Measured on premise
51
+ * (SAP_BASIS 816, 2026-10-23): the module's URI ran every test of its group —
52
+ * the result names the group (`adtcore:type="FUGR/F"`) — including a test
53
+ * class that calls no module, and the run of a module that no test calls
54
+ * answered the same. `run` answered the same there too. Nothing here filters
55
+ * the result; a caller who wants one module's tests reads them out of it.
56
+ *
57
+ * With an ABAP Doc test relation (`"! @testing FUNC:<module>`) on a test
58
+ * class of the group, the same request with the default scope answered the
59
+ * group's tests as a preview — `isForeign="true"`, nothing executed, no
60
+ * alerts — and with `scope: { foreignTests: true }` ran them all (measured
61
+ * once, 2026-10-23, same system).
62
+ *
63
+ * The answer is the `aunit:runResult` document, read by this runner's
64
+ * `result` strategy; whether a failing test is a failure is
65
+ * `options.analyse`'s.
66
+ */
67
+ async runSync(target, options) {
68
+ return this.startSync([
69
+ objects_1.FUNCTION_MODULE.uri(target.functionGroupName, target.functionModuleName),
70
+ ], options);
71
+ }
29
72
  }
30
73
  exports.FunctionModuleTestRunner = FunctionModuleTestRunner;
31
74
  /**
32
75
  * Below 7.50: refused without a request, as a report's run is — the legacy
33
- * endpoint has not been measured to find a module's tests.
76
+ * endpoint has not been measured to find a module's tests, with `<options>` or
77
+ * without. `runSync` is refused the same way.
34
78
  */
35
79
  class FunctionModuleTestRunnerLegacy extends FunctionModuleTestRunner {
36
80
  async run() {
37
81
  return (0, abapUnitRunner_1.refusedBelow750)("a function module's");
38
82
  }
83
+ async runSync() {
84
+ return (0, abapUnitRunner_1.refusedBelow750)("a function module's");
85
+ }
39
86
  async getStatus() {
40
87
  return (0, abapUnitRunner_1.refusedBelow750)("a function module's");
41
88
  }
@@ -1,2 +1,2 @@
1
- export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, } from './FunctionModuleTestRunner';
1
+ export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, type IFunctionModuleTestRunSyncTarget, } from './FunctionModuleTestRunner';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,GACtC,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/functionModule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,4BAA4B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  export { AbapUnitRunner, abapUnitRunnerDocuments, type IAbapUnitRunnerResults, } from './abapUnitRunner';
2
2
  export { ClassExecutor, ClassTestRunner, ClassTestRunnerLegacy, classExecutorDocuments, classTestRunnerDocuments, type IClassExecutorResults, type IClassTestRunnerResults, type IClassTestRunTarget, } from './class';
3
3
  export { FunctionGroupTestRunner, FunctionGroupTestRunnerLegacy, functionGroupTestRunnerDocuments, type IFunctionGroupTestRunnerResults, } from './functionGroup';
4
- export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, } from './functionModule';
4
+ export { FunctionModuleTestRunner, FunctionModuleTestRunnerLegacy, functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, type IFunctionModuleTestRunSyncTarget, } from './functionModule';
5
5
  export { type IProgramExecutorResults, type IProgramTestRunnerResults, ProgramExecutor, ProgramTestRunner, ProgramTestRunnerLegacy, programExecutorDocuments, programTestRunnerDocuments, } from './program';
6
6
  export { type ITraceSchedulingResults, TraceScheduling, traceSchedulingDocuments, } from './traceScheduling';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,uBAAuB,EAC5B,eAAe,EACf,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,uBAAuB,EAC5B,eAAe,EACf,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
@@ -10,9 +10,16 @@
10
10
  *
11
11
  * Measured on premise (2026-09-30): one `POST /abapunit/runs` naming the report
12
12
  * as `osl:object type="PROG"` runs its test classes wherever they sit — own
13
- * source or include. `/abapunit/testruns` given the report's URI answered an
14
- * empty result for the same report, so the legacy runner refuses rather than
15
- * send it (`ProgramTestRunnerLegacy`).
13
+ * source or include.
14
+ *
15
+ * Measured on premise again (SAP_BASIS 816, 2026-10-23): `/abapunit/testruns`
16
+ * given the report's URI runs the same tests with the same alerts — but only
17
+ * with the Eclipse-style `<options>` in the run configuration. Without it, the
18
+ * body sent on 2026-09-30, it answers `200` with an empty result: that, not the
19
+ * endpoint, was why that run found nothing. `runSync` therefore always sends
20
+ * `<options>`. An include's own URI answers empty even with `<options>`; its
21
+ * tests run through the report. The legacy runner still refuses: no legacy
22
+ * system has been measured with `<options>` (`ProgramTestRunnerLegacy`).
16
23
  */
17
24
  import type { IAdtAnalyseOptions, IAdtError, IAdtResponse, IAdtRunnable, IClassUnitTestRunOptions } from '@mcp-abap-adt/interfaces-adt';
18
25
  import type { IAbapConnection } from '@mcp-abap-adt/interfaces-adt-connection';
@@ -28,5 +35,25 @@ export declare class ProgramTestRunner<R extends IProgramTestRunnerResults = typ
28
35
  constructor(connection: IAbapConnection, logger?: ILogger, results?: R);
29
36
  /** Run every test class of the report. One POST. */
30
37
  run<E extends IAdtError = IAdtError>(programName: string, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
38
+ /**
39
+ * Run every test class of the report and answer the finished result. One
40
+ * POST, to `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside
41
+ * the asynchronous `run` + `getStatus` + `getResult`, which stays the
42
+ * default.
43
+ *
44
+ * An explicit choice of the caller's: nothing here asks the system which
45
+ * runner it has. The report is named by its URI and the run configuration
46
+ * always carries `<options>` (scope, risk levels and durations, with `run`'s
47
+ * defaults) — without it the endpoint answered an empty result for a report
48
+ * with tests. `title` and `context` have no place in this format and are not
49
+ * sent. Name the report, not an include: an include's tests run through the
50
+ * report that pulls it in.
51
+ *
52
+ * The answer is the `aunit:runResult` document, read by this runner's
53
+ * `result` strategy — the one `getResult` uses; whether a failing test is a
54
+ * failure is `options.analyse`'s (`analyseUnitTest` from
55
+ * @mcp-abap-adt/adt-strategies reads it so).
56
+ */
57
+ runSync<E extends IAdtError = IAdtError>(programName: string, options?: IClassUnitTestRunOptions & IAdtAnalyseOptions<E>): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
31
58
  }
32
59
  //# sourceMappingURL=ProgramTestRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProgramTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EACL,cAAc,EAEd,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAC/D,eAAO,MAAM,0BAA0B;;;;CAA0B,CAAC;AAElE,qBAAa,iBAAiB,CAC1B,CAAC,SAAS,yBAAyB,GAAG,OAAO,0BAA0B,CAEzE,SAAQ,cAAc,CAAC,CAAC,CACxB,YACE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBAGpE,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAEhB,OAAO,GAAE,CAA8C;IAKzD,oDAAoD;IAC9C,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGlD"}
1
+ {"version":3,"file":"ProgramTestRunner.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EACL,cAAc,EAEd,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAC/D,eAAO,MAAM,0BAA0B;;;;CAA0B,CAAC;AAElE,qBAAa,iBAAiB,CAC1B,CAAC,SAAS,yBAAyB,GAAG,OAAO,0BAA0B,CAEzE,SAAQ,cAAc,CAAC,CAAC,CACxB,YACE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBAGpE,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAEhB,OAAO,GAAE,CAA8C;IAKzD,oDAAoD;IAC9C,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAIjD;;;;;;;;;;;;;;;;;;OAkBG;IACG,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGrD"}
@@ -11,12 +11,20 @@
11
11
  *
12
12
  * Measured on premise (2026-09-30): one `POST /abapunit/runs` naming the report
13
13
  * as `osl:object type="PROG"` runs its test classes wherever they sit — own
14
- * source or include. `/abapunit/testruns` given the report's URI answered an
15
- * empty result for the same report, so the legacy runner refuses rather than
16
- * send it (`ProgramTestRunnerLegacy`).
14
+ * source or include.
15
+ *
16
+ * Measured on premise again (SAP_BASIS 816, 2026-10-23): `/abapunit/testruns`
17
+ * given the report's URI runs the same tests with the same alerts — but only
18
+ * with the Eclipse-style `<options>` in the run configuration. Without it, the
19
+ * body sent on 2026-09-30, it answers `200` with an empty result: that, not the
20
+ * endpoint, was why that run found nothing. `runSync` therefore always sends
21
+ * `<options>`. An include's own URI answers empty even with `<options>`; its
22
+ * tests run through the report. The legacy runner still refuses: no legacy
23
+ * system has been measured with `<options>` (`ProgramTestRunnerLegacy`).
17
24
  */
18
25
  Object.defineProperty(exports, "__esModule", { value: true });
19
26
  exports.ProgramTestRunner = exports.programTestRunnerDocuments = void 0;
27
+ const objects_1 = require("../../endpoints/objects");
20
28
  const abapUnitRunner_1 = require("../abapUnitRunner");
21
29
  exports.programTestRunnerDocuments = abapUnitRunner_1.abapUnitRunnerDocuments;
22
30
  class ProgramTestRunner extends abapUnitRunner_1.AbapUnitRunner {
@@ -29,5 +37,27 @@ class ProgramTestRunner extends abapUnitRunner_1.AbapUnitRunner {
29
37
  async run(programName, options) {
30
38
  return this.startByObject(programName, 'PROG', options);
31
39
  }
40
+ /**
41
+ * Run every test class of the report and answer the finished result. One
42
+ * POST, to `/sap/bc/adt/abapunit/testruns` — the synchronous runner, beside
43
+ * the asynchronous `run` + `getStatus` + `getResult`, which stays the
44
+ * default.
45
+ *
46
+ * An explicit choice of the caller's: nothing here asks the system which
47
+ * runner it has. The report is named by its URI and the run configuration
48
+ * always carries `<options>` (scope, risk levels and durations, with `run`'s
49
+ * defaults) — without it the endpoint answered an empty result for a report
50
+ * with tests. `title` and `context` have no place in this format and are not
51
+ * sent. Name the report, not an include: an include's tests run through the
52
+ * report that pulls it in.
53
+ *
54
+ * The answer is the `aunit:runResult` document, read by this runner's
55
+ * `result` strategy — the one `getResult` uses; whether a failing test is a
56
+ * failure is `options.analyse`'s (`analyseUnitTest` from
57
+ * @mcp-abap-adt/adt-strategies reads it so).
58
+ */
59
+ async runSync(programName, options) {
60
+ return this.startSync([objects_1.PROGRAM.uri(programName)], options);
61
+ }
32
62
  }
33
63
  exports.ProgramTestRunner = ProgramTestRunner;
@@ -3,15 +3,18 @@
3
3
  * (BASIS < 7.50), which has no `/abapunit/runs`.
4
4
  *
5
5
  * Refused without a request. The legacy endpoint, `/abapunit/testruns`, was
6
- * given a report's URI on premise (2026-09-30) and answered an empty result for
7
- * a report whose tests `/abapunit/runs` found — so sending it would answer "no
8
- * tests" where there are some. It stays refused until a legacy system is
9
- * measured.
6
+ * given a report's URI on premise (2026-09-30) without `<options>` — the body a
7
+ * legacy system is sent — and answered an empty result for a report whose
8
+ * tests `/abapunit/runs` found, so sending it would answer "no tests" where
9
+ * there are some. With `<options>` it runs them on SAP_BASIS 816 (2026-10-23),
10
+ * but no legacy system has been measured with that body: `run` and `runSync`
11
+ * stay refused until one is.
10
12
  */
11
13
  import type { IAdtError, IAdtResponse } from '@mcp-abap-adt/interfaces-adt';
12
14
  import { type IProgramTestRunnerResults, ProgramTestRunner, type programTestRunnerDocuments } from './ProgramTestRunner';
13
15
  export declare class ProgramTestRunnerLegacy<R extends IProgramTestRunnerResults = typeof programTestRunnerDocuments> extends ProgramTestRunner<R> {
14
16
  run<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['run']>, E>>;
17
+ runSync<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
15
18
  getStatus<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['status']>, E>>;
16
19
  getResult<E extends IAdtError = IAdtError>(): Promise<IAdtResponse<ReturnType<R['result']>, E>>;
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProgramTestRunnerLegacy.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunnerLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,EACL,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,uBAAuB,CAClC,CAAC,SAAS,yBAAyB,GAAG,OAAO,0BAA0B,CACvE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IACb,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAC5D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;CAGF"}
1
+ {"version":3,"file":"ProgramTestRunnerLegacy.d.ts","sourceRoot":"","sources":["../../../src/executors/program/ProgramTestRunnerLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,EACL,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,uBAAuB,CAClC,CAAC,SAAS,yBAAyB,GAAG,OAAO,0BAA0B,CACvE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IACb,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAC5D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtC;IAIc,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAChE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;IAIc,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,OAAO,CAClE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC;CAGF"}
@@ -4,10 +4,12 @@
4
4
  * (BASIS < 7.50), which has no `/abapunit/runs`.
5
5
  *
6
6
  * Refused without a request. The legacy endpoint, `/abapunit/testruns`, was
7
- * given a report's URI on premise (2026-09-30) and answered an empty result for
8
- * a report whose tests `/abapunit/runs` found — so sending it would answer "no
9
- * tests" where there are some. It stays refused until a legacy system is
10
- * measured.
7
+ * given a report's URI on premise (2026-09-30) without `<options>` — the body a
8
+ * legacy system is sent — and answered an empty result for a report whose
9
+ * tests `/abapunit/runs` found, so sending it would answer "no tests" where
10
+ * there are some. With `<options>` it runs them on SAP_BASIS 816 (2026-10-23),
11
+ * but no legacy system has been measured with that body: `run` and `runSync`
12
+ * stay refused until one is.
11
13
  */
12
14
  Object.defineProperty(exports, "__esModule", { value: true });
13
15
  exports.ProgramTestRunnerLegacy = void 0;
@@ -17,6 +19,9 @@ class ProgramTestRunnerLegacy extends ProgramTestRunner_1.ProgramTestRunner {
17
19
  async run() {
18
20
  return (0, abapUnitRunner_1.refusedBelow750)("a report's");
19
21
  }
22
+ async runSync() {
23
+ return (0, abapUnitRunner_1.refusedBelow750)("a report's");
24
+ }
20
25
  async getStatus() {
21
26
  return (0, abapUnitRunner_1.refusedBelow750)("a report's");
22
27
  }
@@ -10,7 +10,7 @@ export { createAdtExecutor } from './clients/createAdtExecutor';
10
10
  export { classExecutorDocuments, type IClassExecutorResults, } from './executors/class/ClassExecutor';
11
11
  export { classTestRunnerDocuments, type IClassTestRunnerResults, type IClassTestRunTarget, } from './executors/class/ClassTestRunner';
12
12
  export { functionGroupTestRunnerDocuments, type IFunctionGroupTestRunnerResults, } from './executors/functionGroup/FunctionGroupTestRunner';
13
- export { functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, } from './executors/functionModule/FunctionModuleTestRunner';
13
+ export { functionModuleTestRunnerDocuments, type IFunctionModuleTestRunnerResults, type IFunctionModuleTestRunSyncTarget, } from './executors/functionModule/FunctionModuleTestRunner';
14
14
  export { type IProgramExecutorResults, programExecutorDocuments, } from './executors/program/ProgramExecutor';
15
15
  export { type IProgramTestRunnerResults, programTestRunnerDocuments, } from './executors/program/ProgramTestRunner';
16
16
  export { type ITraceSchedulingResults, traceSchedulingDocuments, } from './executors/traceScheduling';
@@ -1 +1 @@
1
- {"version":3,"file":"index.executors.d.ts","sourceRoot":"","sources":["../src/index.executors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,iCAAiC,EACjC,KAAK,gCAAgC,GACtC,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,KAAK,yBAAyB,EAC9B,0BAA0B,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.executors.d.ts","sourceRoot":"","sources":["../src/index.executors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,KAAK,+BAA+B,GACrC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,KAAK,yBAAyB,EAC9B,0BAA0B,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC"}
@@ -586,5 +586,5 @@ INTERFACE … does not exist."*, *"Data definition … of version does not
586
586
  exist"*. All mean the same thing, and none is worth matching on: branch on the
587
587
  failure your own `analyse` decided.
588
588
 
589
- Reproduce with `npx ts-node scripts/probe-inactive-metadata.ts` and
590
- `npx ts-node scripts/probe-unfinished-create.ts`.
589
+ Reproduce with `node_modules/.bin/ts-node scripts/probe-inactive-metadata.ts` and
590
+ `node_modules/.bin/ts-node scripts/probe-unfinished-create.ts`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/adt-clients",
3
- "version": "37.0.0",
3
+ "version": "37.2.0",
4
4
  "description": "ADT clients for SAP ABAP systems - AdtClient and AdtRuntimeClient",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -80,34 +80,35 @@
80
80
  "scripts": {
81
81
  "chrono": "./tools/version-stats.sh",
82
82
  "clean": "node -e \"const fs=require('fs');['dist','tsconfig.tsbuildinfo'].forEach(p=>{try{fs.rmSync(p,{recursive:true,force:true})}catch{}})\"",
83
- "lint": "npx biome check --write src packages",
84
- "lint:check": "npx biome check src packages && npm run --silent check:docs",
83
+ "lint": "biome check --write src packages",
84
+ "lint:check": "biome check src packages && npm run --silent check:docs",
85
85
  "check:docs": "node scripts/check-doc-imports.js",
86
- "format": "npx biome format --write src packages",
87
- "build": "npm run --silent clean && npx biome check src packages --diagnostic-level=error && npx tsc -p tsconfig.json",
88
- "build:fast": "npx tsc -p tsconfig.json",
86
+ "format": "biome format --write src packages",
87
+ "build": "npm run --silent clean && biome check src packages --diagnostic-level=error && tsc -p tsconfig.json",
88
+ "build:fast": "tsc -p tsconfig.json",
89
89
  "test:init": "node -e \"const fs=require('fs'),s='src/__tests__/helpers/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"",
90
90
  "test:reinit": "node -e \"const fs=require('fs'),s='src/__tests__/helpers/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"",
91
- "test": "npx jest --runInBand",
91
+ "test": "jest --runInBand",
92
+ "test:unit": "jest src/__tests__/unit",
92
93
  "test:detached": "bash scripts/run-detached.sh",
93
- "test:check": "npx tsc --noEmit --project tsconfig.test.json",
94
+ "test:check": "tsc --noEmit --project tsconfig.test.json",
94
95
  "test:type-check": "npm run test:check",
95
- "test:check:integration": "npx tsc --noEmit --project tsconfig.test.integration.json",
96
+ "test:check:integration": "tsc --noEmit --project tsconfig.test.integration.json",
96
97
  "test:sequential": "node scripts/run-tests-sequential.js",
97
98
  "test:module": "node scripts/test-module.js",
98
- "test:long-polling-read": "npx ts-node scripts/test-long-polling-read.ts",
99
- "package:contents": "npx ts-node scripts/show-package-contents.ts",
100
- "discovery:markdown": "npx ts-node tools/discovery-to-markdown.ts",
101
- "header:discovery": "npx ts-node tools/header-probe/errorCorpus.ts",
99
+ "test:long-polling-read": "ts-node scripts/test-long-polling-read.ts",
100
+ "package:contents": "ts-node scripts/show-package-contents.ts",
101
+ "discovery:markdown": "ts-node tools/discovery-to-markdown.ts",
102
+ "header:discovery": "ts-node tools/header-probe/errorCorpus.ts",
102
103
  "adt:entities": "node tools/adt-object-entities.js",
103
- "shared:setup": "npx jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/setup",
104
- "shared:teardown": "npx jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/teardown",
105
- "shared:check": "npx jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/check",
104
+ "shared:setup": "jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/setup",
105
+ "shared:teardown": "jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/teardown",
106
+ "shared:check": "jest --testPathIgnorePatterns node_modules --testPathPatterns admin/shared-deps/check",
106
107
  "pretest": "npm run test:check:integration && npm run --silent check:config",
107
108
  "prepublishOnly": "npm run build",
108
109
  "prepare": "husky",
109
110
  "check:config": "node scripts/check-config-drift.js",
110
- "corpus:capture": "npx ts-node scripts/capture-adt-corpus.ts",
111
+ "corpus:capture": "ts-node scripts/capture-adt-corpus.ts",
111
112
  "build:packages": "npm --prefix packages/adt-strategies run build",
112
113
  "test:packages": "npm --prefix packages/adt-strategies test",
113
114
  "release:publish": "bash scripts/publish-changed.sh",
@@ -139,9 +140,15 @@
139
140
  "husky": "^9.1.7",
140
141
  "jest": "^30.0.5",
141
142
  "jest-util": "^30.2.0",
142
- "markdown-it": "^14.3.1",
143
+ "markdown-it": "^14.3.3",
143
144
  "ts-jest": "^29.4.1",
145
+ "ts-node": "^10.9.2",
144
146
  "typescript": "^5.9.2",
145
147
  "yaml": "^2.8.1"
148
+ },
149
+ "allowScripts": {
150
+ "@mcp-abap-adt/sap-rfc-lite": false,
151
+ "@parcel/watcher": false,
152
+ "unrs-resolver": false
146
153
  }
147
154
  }
@@ -1,42 +0,0 @@
1
- /**
2
- * ABAP Unit test run operations for legacy systems (BASIS < 7.50)
3
- *
4
- * Legacy systems use:
5
- * - /sap/bc/adt/abapunit/testruns instead of /sap/bc/adt/abapunit/runs
6
- * - application/xml for Content-Type and Accept (not versioned vnd.sap.adt.api.abapunit.* types)
7
- */
8
- import type { IAbapConnection, IAdtWireResponse } from '@mcp-abap-adt/interfaces-adt-connection';
9
- /**
10
- * Start ABAP Unit test run on legacy systems
11
- * Uses /sap/bc/adt/abapunit/testruns endpoint with aunit:runConfiguration format
12
- *
13
- * There is only a start here. `getClassUnitTestStatusLegacy` and
14
- * `getClassUnitTestResultLegacy` polled `testruns/{runId}` and
15
- * `testruns/{runId}/results`, and were removed once the endpoint was measured:
16
- * the POST answers with the finished result, so there was never a run to poll.
17
- * Nothing called them — `ClassTestRunnerLegacy` serves both from the response the
18
- * POST returned — so they were an unmeasured contract kept alive by nobody
19
- * looking.
20
- *
21
- * **Reading the result: `kind` carries the distinction, `severity` does not.** A
22
- * failed assertion and an uncaught exception both come back
23
- * `severity="critical"`, measured on one release — so a parser classifying on
24
- * severity reports a short dump as a failed test. The field that separates them
25
- * is `kind`: `failedAssertion`, `exception`, `noTestClasses`.
26
- *
27
- * Also measured: this endpoint is **synchronous** on both a modern and a legacy
28
- * on-prem system, over HTTP and over RFC — `<aunit:runResult>` with no
29
- * `Location`, and the typed and `application/xml` bodies byte-identical. The
30
- * legacy system ignores the typed `Accept` altogether and answers
31
- * `application/xml` either way.
32
- *
33
- * Legacy format differs from modern:
34
- * - Root element: aunit:runConfiguration (not aunit:run)
35
- * - Namespace: http://www.sap.com/adt/aunit (not http://www.sap.com/adt/api/aunit)
36
- * - Objects via adtcore:objectReferences with URI (not aunit:tests with containerClass/class)
37
- * — so a run covers whole classes: this format has no way to name one test
38
- * class inside its container, and a caller's test class name is not sent.
39
- * - Content-Type/Accept: application/xml (not versioned vnd.sap.adt.api.abapunit.*)
40
- */
41
- export declare function startClassUnitTestRunLegacy(connection: IAbapConnection, classNames: string[]): Promise<IAdtWireResponse>;
42
- //# sourceMappingURL=runLegacy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runLegacy.d.ts","sourceRoot":"","sources":["../../../src/core/class/runLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,yCAAyC,CAAC;AAMjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B"}