@mcp-abap-adt/adt-clients 9.0.0 → 10.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 +25 -8
- package/dist/core/accessControl/AdtAccessControl.d.ts.map +1 -1
- package/dist/core/accessControl/AdtAccessControl.js +14 -20
- package/dist/core/accessControl/check.d.ts +2 -1
- package/dist/core/accessControl/check.d.ts.map +1 -1
- package/dist/core/appendStructure/AdtAppendStructure.d.ts.map +1 -1
- package/dist/core/appendStructure/AdtAppendStructure.js +30 -5
- package/dist/core/appendStructure/check.d.ts +2 -1
- package/dist/core/appendStructure/check.d.ts.map +1 -1
- package/dist/core/authorizationField/AdtAuthorizationField.d.ts.map +1 -1
- package/dist/core/authorizationField/AdtAuthorizationField.js +19 -22
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.js +14 -20
- package/dist/core/behaviorDefinition/check.d.ts +4 -3
- package/dist/core/behaviorDefinition/check.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/check.js +0 -3
- package/dist/core/class/AdtClass.d.ts.map +1 -1
- package/dist/core/class/AdtClass.js +31 -18
- package/dist/core/class/AdtClassLegacy.d.ts.map +1 -1
- package/dist/core/class/AdtClassLegacy.js +9 -13
- package/dist/core/dataElement/AdtDataElement.d.ts.map +1 -1
- package/dist/core/dataElement/AdtDataElement.js +19 -25
- package/dist/core/dataElement/check.d.ts +2 -1
- package/dist/core/dataElement/check.d.ts.map +1 -1
- package/dist/core/ddl/AdtDdl.d.ts.map +1 -1
- package/dist/core/ddl/AdtDdl.js +14 -23
- package/dist/core/ddl/AdtDdlLegacy.d.ts +0 -5
- package/dist/core/ddl/AdtDdlLegacy.d.ts.map +1 -1
- package/dist/core/ddl/AdtDdlLegacy.js +7 -2
- package/dist/core/ddl/check.d.ts +2 -1
- package/dist/core/ddl/check.d.ts.map +1 -1
- package/dist/core/domain/AdtDomain.d.ts.map +1 -1
- package/dist/core/domain/AdtDomain.js +19 -25
- package/dist/core/enhancement/AdtEnhancement.d.ts.map +1 -1
- package/dist/core/enhancement/AdtEnhancement.js +14 -27
- package/dist/core/featureToggle/AdtFeatureToggle.d.ts.map +1 -1
- package/dist/core/featureToggle/AdtFeatureToggle.js +25 -26
- package/dist/core/functionGroup/AdtFunctionGroup.d.ts.map +1 -1
- package/dist/core/functionGroup/AdtFunctionGroup.js +14 -23
- package/dist/core/functionGroup/AdtFunctionGroupLegacy.d.ts +0 -5
- package/dist/core/functionGroup/AdtFunctionGroupLegacy.d.ts.map +1 -1
- package/dist/core/functionGroup/AdtFunctionGroupLegacy.js +7 -2
- package/dist/core/functionInclude/AdtFunctionInclude.d.ts.map +1 -1
- package/dist/core/functionInclude/AdtFunctionInclude.js +25 -22
- package/dist/core/functionModule/AdtFunctionModule.d.ts.map +1 -1
- package/dist/core/functionModule/AdtFunctionModule.js +14 -20
- package/dist/core/functionModule/AdtFunctionModuleLegacy.d.ts +0 -5
- package/dist/core/functionModule/AdtFunctionModuleLegacy.d.ts.map +1 -1
- package/dist/core/functionModule/AdtFunctionModuleLegacy.js +7 -2
- package/dist/core/functionModule/check.d.ts.map +1 -1
- package/dist/core/interface/AdtInterface.d.ts.map +1 -1
- package/dist/core/interface/AdtInterface.js +19 -25
- package/dist/core/interface/AdtInterfaceLegacy.d.ts +0 -5
- package/dist/core/interface/AdtInterfaceLegacy.d.ts.map +1 -1
- package/dist/core/interface/AdtInterfaceLegacy.js +7 -2
- package/dist/core/interface/check.d.ts +2 -1
- package/dist/core/interface/check.d.ts.map +1 -1
- package/dist/core/messageClass/AdtMessageClass.d.ts +3 -1
- package/dist/core/messageClass/AdtMessageClass.d.ts.map +1 -1
- package/dist/core/messageClass/AdtMessageClass.js +19 -19
- package/dist/core/messageClass/AdtMessageClassMessage.d.ts.map +1 -1
- package/dist/core/messageClass/AdtMessageClassMessage.js +13 -26
- package/dist/core/messageClass/read.d.ts +3 -1
- package/dist/core/messageClass/read.d.ts.map +1 -1
- package/dist/core/messageClass/read.js +7 -2
- package/dist/core/metadataExtension/AdtMetadataExtension.d.ts.map +1 -1
- package/dist/core/metadataExtension/AdtMetadataExtension.js +7 -19
- package/dist/core/package/AdtPackage.d.ts.map +1 -1
- package/dist/core/package/AdtPackage.js +7 -22
- package/dist/core/program/AdtProgram.d.ts.map +1 -1
- package/dist/core/program/AdtProgram.js +19 -25
- package/dist/core/program/AdtProgramLegacy.d.ts +0 -5
- package/dist/core/program/AdtProgramLegacy.d.ts.map +1 -1
- package/dist/core/program/AdtProgramLegacy.js +7 -2
- package/dist/core/program/check.d.ts +2 -1
- package/dist/core/program/check.d.ts.map +1 -1
- package/dist/core/scalarFunction/AdtScalarFunction.d.ts.map +1 -1
- package/dist/core/scalarFunction/AdtScalarFunction.js +14 -1
- package/dist/core/scalarFunction/check.d.ts +2 -1
- package/dist/core/scalarFunction/check.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.js +16 -1
- package/dist/core/scalarFunctionImplementation/check.d.ts +2 -1
- package/dist/core/scalarFunctionImplementation/check.d.ts.map +1 -1
- package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts.map +1 -1
- package/dist/core/serviceDefinition/AdtServiceDefinition.js +14 -21
- package/dist/core/serviceDefinition/check.d.ts +2 -1
- package/dist/core/serviceDefinition/check.d.ts.map +1 -1
- package/dist/core/structure/AdtStructure.d.ts.map +1 -1
- package/dist/core/structure/AdtStructure.js +14 -20
- package/dist/core/structure/check.d.ts +2 -1
- package/dist/core/structure/check.d.ts.map +1 -1
- package/dist/core/table/AdtTable.d.ts.map +1 -1
- package/dist/core/table/AdtTable.js +14 -20
- package/dist/core/table/check.d.ts +2 -1
- package/dist/core/table/check.d.ts.map +1 -1
- package/dist/core/table/check.js +0 -3
- package/dist/core/tabletype/AdtDdicTableType.d.ts.map +1 -1
- package/dist/core/tabletype/AdtDdicTableType.js +14 -20
- package/dist/core/tabletype/check.d.ts +2 -1
- package/dist/core/tabletype/check.d.ts.map +1 -1
- package/dist/core/tabletype/check.js +0 -3
- package/dist/core/transformation/AdtTransformation.d.ts.map +1 -1
- package/dist/core/transformation/AdtTransformation.js +14 -20
- package/dist/core/transformation/check.d.ts +2 -1
- package/dist/core/transformation/check.d.ts.map +1 -1
- package/dist/utils/checkRun.d.ts +50 -5
- package/dist/utils/checkRun.d.ts.map +1 -1
- package/dist/utils/checkRun.js +45 -12
- package/dist/utils/criticalSection.d.ts +24 -0
- package/dist/utils/criticalSection.d.ts.map +1 -0
- package/dist/utils/criticalSection.js +43 -0
- package/dist/utils/deletionCheck.d.ts +71 -0
- package/dist/utils/deletionCheck.d.ts.map +1 -0
- package/dist/utils/deletionCheck.js +70 -0
- package/dist/utils/managementOperations.d.ts +2 -1
- package/dist/utils/managementOperations.d.ts.map +1 -1
- package/dist/utils/managementOperations.js +0 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -316,7 +316,19 @@ await utils.readObjectSource('view' satisfies AdtSourceObjectType, 'ZOK_I_CDS_TE
|
|
|
316
316
|
|
|
317
317
|
### Using Long Polling for Object Readiness
|
|
318
318
|
|
|
319
|
-
The `withLongPolling` parameter
|
|
319
|
+
The `withLongPolling` parameter asks ADT to hold a read until the object is
|
|
320
|
+
available, instead of answering from whatever is there right now:
|
|
321
|
+
|
|
322
|
+
> **Measured caveat — do not rely on it for readiness.** On an SAP BTP trial the
|
|
323
|
+
> parameter changes nothing on an object read. Reading a message class straight
|
|
324
|
+
> after creating it returned `404` in ~650ms **with** the flag — the same
|
|
325
|
+
> latency as without it — and the server did not hold the request. The system's
|
|
326
|
+
> own discovery document declares `withLongPolling` for exactly one resource out
|
|
327
|
+
> of 601 templates: `/sap/bc/adt/activation/runs/{run_id}`, background activation
|
|
328
|
+
> runs. Other systems may honour it more widely; this one does not, so treat it
|
|
329
|
+
> as a hint and not a guarantee. **No ADT operation that changes system state
|
|
330
|
+
> guarantees when the change becomes visible** — where readiness matters, poll
|
|
331
|
+
> with a bound.
|
|
320
332
|
|
|
321
333
|
```typescript
|
|
322
334
|
import { AdtClient } from '@mcp-abap-adt/adt-clients';
|
|
@@ -344,11 +356,13 @@ await client.getClass().update({
|
|
|
344
356
|
}, { sourceCode: updatedCode });
|
|
345
357
|
```
|
|
346
358
|
|
|
347
|
-
**
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
359
|
+
**What it is intended to do**, where a system honours it: avoid an arbitrary
|
|
360
|
+
timeout by letting the server decide when the object is ready. `AdtObject`
|
|
361
|
+
implementations pass it internally on reads after create/update.
|
|
362
|
+
|
|
363
|
+
**What it does not do:** guarantee the object is there when the call returns.
|
|
364
|
+
See the caveat above — on the system measured, the flag had no effect on object
|
|
365
|
+
reads at all.
|
|
352
366
|
|
|
353
367
|
**Note:** Long polling is automatically used in `create()` and `update()` methods of all `AdtObject` implementations to ensure objects are ready before proceeding with subsequent operations.
|
|
354
368
|
|
|
@@ -432,7 +446,7 @@ See [Tools Documentation](tools/README.md) for complete details and options.
|
|
|
432
446
|
|
|
433
447
|
### AdtObject Methods (with Long Polling Support)
|
|
434
448
|
|
|
435
|
-
All `AdtObject` implementations
|
|
449
|
+
All `AdtObject` implementations accept the `withLongPolling` parameter on read operations (whether the server acts on it is another matter — see the caveat above):
|
|
436
450
|
|
|
437
451
|
```typescript
|
|
438
452
|
// Read with long polling - waits for object to be ready
|
|
@@ -629,7 +643,10 @@ See [Architecture Documentation](docs/architecture/ARCHITECTURE.md#type-system-a
|
|
|
629
643
|
|
|
630
644
|
**Migration from fixed timeouts to long polling:**
|
|
631
645
|
|
|
632
|
-
The package
|
|
646
|
+
The package passes long polling (`?withLongPolling=true`) instead of fixed
|
|
647
|
+
timeouts when reading after a create or update. It is the better default — a
|
|
648
|
+
fixed sleep is guesswork either way — but it is **not** a readiness guarantee:
|
|
649
|
+
see the measured caveat above before depending on it.
|
|
633
650
|
|
|
634
651
|
```typescript
|
|
635
652
|
// ❌ Before - Using fixed timeouts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtAccessControl.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/AdtAccessControl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdtAccessControl.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/AdtAccessControl.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AASzE,qBAAa,gBACX,YAAW,gBAAgB,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;IAEtE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,SAAgB,UAAU,EAAE,MAAM,CAAmB;gBAGnD,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB,EACjC,YAAY,CAAC,EAAE,YAAY;IAa7B;;OAEG;IACG,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACpC,OAAO,CAAC,mBAAmB,CAAC;IA6B/B;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,mBAAmB,CAAC;IAqC/B;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACrC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IA2B3C;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACrC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,mBAAmB,CAAC;IAkC/B;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACrC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,mBAAmB,CAAC;IAkC/B;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACrC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IA4N/B;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACpC,OAAO,CAAC,mBAAmB,CAAC;IAwC/B;;;OAGG;IACG,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACpC,OAAO,CAAC,mBAAmB,CAAC;IAqB/B;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC;IAqB/B;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAclE;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACrC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC;IAmB/B,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAIjD,gBAAgB,CAAC,UAAU,EAAE,MAAM;CAGpC"}
|
|
@@ -1,25 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AdtAccessControl - High-level CRUD operations for Access Control (DCLS) objects
|
|
4
|
-
*
|
|
5
|
-
* Implements IAdtObject interface with automatic operation chains,
|
|
6
|
-
* error handling, and resource cleanup.
|
|
7
|
-
*
|
|
8
|
-
* Uses low-level functions directly (not Builder classes).
|
|
9
|
-
*
|
|
10
|
-
* Session management:
|
|
11
|
-
* - stateful: only when doing lock/update/unlock operations
|
|
12
|
-
* - stateless: obligatory after unlock
|
|
13
|
-
* - If no lock/unlock, no stateful needed
|
|
14
|
-
* - activate uses same session/cookies (no stateful needed)
|
|
15
|
-
*
|
|
16
|
-
* Operation chains:
|
|
17
|
-
* - Create: validate → create → check → lock → check(inactive) → update → unlock → check → activate
|
|
18
|
-
* - Update: lock → check(inactive) → update → unlock → check → activate
|
|
19
|
-
* - Delete: check(deletion) → delete
|
|
20
|
-
*/
|
|
21
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
3
|
exports.AdtAccessControl = void 0;
|
|
4
|
+
const criticalSection_1 = require("../../utils/criticalSection");
|
|
5
|
+
const deletionCheck_1 = require("../../utils/deletionCheck");
|
|
23
6
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
24
7
|
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
25
8
|
const activation_1 = require("./activation");
|
|
@@ -225,6 +208,9 @@ class AdtAccessControl {
|
|
|
225
208
|
};
|
|
226
209
|
}
|
|
227
210
|
let lockHandle;
|
|
211
|
+
// This try is a LOCK…UNLOCK window; a timeout in the middle releases
|
|
212
|
+
// the lock but leaves the work half-done.
|
|
213
|
+
const endCriticalSection = (0, criticalSection_1.beginCriticalSection)(this.connection);
|
|
228
214
|
try {
|
|
229
215
|
// 1. Lock (update always starts with lock, stateful ONLY before lock)
|
|
230
216
|
this.logger?.info?.('Step 1: Locking access control');
|
|
@@ -335,6 +321,9 @@ class AdtAccessControl {
|
|
|
335
321
|
this.logger?.error('Update failed:', (0, internalUtils_1.safeErrorMessage)(error));
|
|
336
322
|
throw error;
|
|
337
323
|
}
|
|
324
|
+
finally {
|
|
325
|
+
endCriticalSection();
|
|
326
|
+
}
|
|
338
327
|
}
|
|
339
328
|
/**
|
|
340
329
|
* Delete access control
|
|
@@ -349,10 +338,15 @@ class AdtAccessControl {
|
|
|
349
338
|
try {
|
|
350
339
|
// Check for deletion (no stateful needed)
|
|
351
340
|
this.logger?.info?.('Checking access control for deletion');
|
|
352
|
-
await (0, delete_1.checkDeletion)(this.connection, {
|
|
341
|
+
const deletionCheck = await (0, delete_1.checkDeletion)(this.connection, {
|
|
353
342
|
access_control_name: config.accessControlName,
|
|
354
343
|
transport_request: config.transportRequest,
|
|
355
344
|
});
|
|
345
|
+
// ADT already said whether this may be deleted; refusing to read that
|
|
346
|
+
// answer is how a delete came to report success while the object
|
|
347
|
+
// stayed. Throws on isDeletable=false or a message of type E; a W
|
|
348
|
+
// is a warning and passes.
|
|
349
|
+
(0, deletionCheck_1.assertDeletable)(deletionCheck.data);
|
|
356
350
|
this.logger?.info?.('Deletion check passed');
|
|
357
351
|
// Delete (no stateful needed - no lock/unlock)
|
|
358
352
|
this.logger?.info?.('Deleting access control');
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IAbapConnection, IAdtResponse, ILogger } from '@mcp-abap-adt/interfaces';
|
|
2
|
+
import { type CheckRunVersion } from '../../utils/checkRun';
|
|
2
3
|
/**
|
|
3
4
|
* Check access control syntax
|
|
4
5
|
*
|
|
@@ -9,5 +10,5 @@ import type { IAbapConnection, IAdtResponse, ILogger } from '@mcp-abap-adt/inter
|
|
|
9
10
|
* persists with no real errors, downgrade to a warning and return the
|
|
10
11
|
* response instead of throwing with an empty message.
|
|
11
12
|
*/
|
|
12
|
-
export declare function checkAccessControl(connection: IAbapConnection, accessControlName: string, version?:
|
|
13
|
+
export declare function checkAccessControl(connection: IAbapConnection, accessControlName: string, version?: CheckRunVersion, sourceCode?: string, logger?: ILogger): Promise<IAdtResponse>;
|
|
13
14
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,OAAO,EACR,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;AAM9B;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,eAA4B,EACrC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,CA2CvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtAppendStructure.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/AdtAppendStructure.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"AdtAppendStructure.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/AdtAppendStructure.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKjE,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAW7E,qBAAa,kBACX,YAAW,gBAAgB,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;IAE1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,SAAgB,UAAU,EAAE,MAAM,CAAqB;gBAGrD,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB,EACjC,YAAY,CAAC,EAAE,YAAY;IAavB,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACtC,OAAO,CAAC,qBAAqB,CAAC;IA6B3B,MAAM,CACV,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IA8B3B,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAkBvC,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,qBAAqB,CAAC;IAa3B,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,qBAAqB,CAAC;IAa3B,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,qBAAqB,CAAC;IAmJ3B,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACtC,OAAO,CAAC,qBAAqB,CAAC;IAwB3B,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACtC,OAAO,CAAC,qBAAqB,CAAC;IAU3B,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC;IAY3B,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9D,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC;IAiBjC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC;IAInD,gBAAgB,CAAC,UAAU,EAAE,MAAM;CAGpC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AdtAppendStructure = void 0;
|
|
4
|
+
const criticalSection_1 = require("../../utils/criticalSection");
|
|
5
|
+
const deletionCheck_1 = require("../../utils/deletionCheck");
|
|
4
6
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
5
7
|
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
6
8
|
const activation_1 = require("./activation");
|
|
@@ -53,6 +55,10 @@ class AdtAppendStructure {
|
|
|
53
55
|
const state = { errors: [] };
|
|
54
56
|
if (!config.appendStructureName)
|
|
55
57
|
throw new Error('Append structure name is required');
|
|
58
|
+
// Captured before the critical-section closure: narrowing does not survive
|
|
59
|
+
// into an arrow function, and threading `config.appendStructureName!`
|
|
60
|
+
// through every call would hide the guard rather than honour it.
|
|
61
|
+
const structureName = config.appendStructureName;
|
|
56
62
|
if (!config.baseObject)
|
|
57
63
|
throw new Error('Base object is required');
|
|
58
64
|
if (!config.packageName)
|
|
@@ -119,20 +125,30 @@ class AdtAppendStructure {
|
|
|
119
125
|
return { updateResult, errors: [] };
|
|
120
126
|
}
|
|
121
127
|
let lockHandle;
|
|
128
|
+
// This try is a LOCK…UNLOCK window; a timeout in the middle releases
|
|
129
|
+
// the lock but leaves the work half-done.
|
|
130
|
+
const endCriticalSection = (0, criticalSection_1.beginCriticalSection)(this.connection);
|
|
122
131
|
try {
|
|
123
132
|
this.connection.setSessionType('stateful');
|
|
124
133
|
lockHandle = await (0, lock_1.lockAppendStructure)(this.connection, config.appendStructureName);
|
|
125
134
|
this.lockTracker.track(config.appendStructureName, lockHandle);
|
|
126
135
|
const codeToCheck = options?.sourceCode || config.sourceCode;
|
|
127
136
|
if (codeToCheck) {
|
|
128
|
-
|
|
137
|
+
// No check is run here on the caller's behalf. Verifying the source
|
|
138
|
+
// about to be written is the CONSUMER's decision: only they know
|
|
139
|
+
// whether the object is new or merely inactive, and only they can say
|
|
140
|
+
// what a finding should mean for their flow. `check()` and
|
|
141
|
+
// `waitForCleanCheckRun()` are available for that; the handler no
|
|
142
|
+
// longer inserts an opinion between the caller and the write.
|
|
129
143
|
await (0, update_1.updateAppendStructure)(this.connection, {
|
|
130
144
|
append_structure_name: config.appendStructureName,
|
|
131
145
|
source_code: codeToCheck,
|
|
132
146
|
transport_request: config.transportRequest,
|
|
133
147
|
}, lockHandle);
|
|
134
148
|
try {
|
|
135
|
-
await this.read({ appendStructureName: config.appendStructureName }, 'active', {
|
|
149
|
+
await this.read({ appendStructureName: config.appendStructureName }, 'active', {
|
|
150
|
+
withLongPolling: true,
|
|
151
|
+
});
|
|
136
152
|
}
|
|
137
153
|
catch (readError) {
|
|
138
154
|
this.logger?.warn?.('read with long polling failed (object may not be ready yet):', (0, internalUtils_1.safeErrorMessage)(readError));
|
|
@@ -149,11 +165,12 @@ class AdtAppendStructure {
|
|
|
149
165
|
this.lockTracker.untrack(config.appendStructureName);
|
|
150
166
|
lockHandle = undefined;
|
|
151
167
|
}
|
|
152
|
-
await (0, check_1.checkAppendStructure)(this.connection, config.appendStructureName, 'inactive');
|
|
153
168
|
if (options?.activateOnUpdate) {
|
|
154
169
|
const activateResult = await (0, activation_1.activateAppendStructure)(this.connection, config.appendStructureName);
|
|
155
170
|
try {
|
|
156
|
-
await this.read({ appendStructureName: config.appendStructureName }, 'active', {
|
|
171
|
+
await this.read({ appendStructureName: config.appendStructureName }, 'active', {
|
|
172
|
+
withLongPolling: true,
|
|
173
|
+
});
|
|
157
174
|
}
|
|
158
175
|
catch (readError) {
|
|
159
176
|
this.logger?.warn?.('read with long polling failed (object may not be ready yet):', (0, internalUtils_1.safeErrorMessage)(readError));
|
|
@@ -194,15 +211,23 @@ class AdtAppendStructure {
|
|
|
194
211
|
this.logger?.error('Update failed:', (0, internalUtils_1.safeErrorMessage)(error));
|
|
195
212
|
throw error;
|
|
196
213
|
}
|
|
214
|
+
finally {
|
|
215
|
+
endCriticalSection();
|
|
216
|
+
}
|
|
197
217
|
}
|
|
198
218
|
async delete(config) {
|
|
199
219
|
if (!config.appendStructureName)
|
|
200
220
|
throw new Error('Append structure name is required');
|
|
201
221
|
try {
|
|
202
|
-
await (0, delete_1.checkDeletion)(this.connection, {
|
|
222
|
+
const deletionCheck = await (0, delete_1.checkDeletion)(this.connection, {
|
|
203
223
|
append_structure_name: config.appendStructureName,
|
|
204
224
|
transport_request: config.transportRequest,
|
|
205
225
|
});
|
|
226
|
+
// ADT already said whether this may be deleted; refusing to read that
|
|
227
|
+
// answer is how a delete came to report success while the object
|
|
228
|
+
// stayed. Throws on isDeletable=false or a message of type E; a W
|
|
229
|
+
// is a warning and passes.
|
|
230
|
+
(0, deletionCheck_1.assertDeletable)(deletionCheck.data);
|
|
206
231
|
const deleteResult = await (0, delete_1.deleteAppendStructure)(this.connection, {
|
|
207
232
|
append_structure_name: config.appendStructureName,
|
|
208
233
|
transport_request: config.transportRequest,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
2
|
-
|
|
2
|
+
import { type CheckRunVersion } from '../../utils/checkRun';
|
|
3
|
+
export declare function checkAppendStructure(connection: IAbapConnection, name: string, version?: CheckRunVersion, sourceCode?: string): Promise<IAdtResponse>;
|
|
3
4
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;AAE9B,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAA4B,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAevB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtAuthorizationField.d.ts","sourceRoot":"","sources":["../../../src/core/authorizationField/AdtAuthorizationField.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdtAuthorizationField.d.ts","sourceRoot":"","sources":["../../../src/core/authorizationField/AdtAuthorizationField.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AdtAuthorizationField - High-level CRUD operations for SUSO / AUTH objects
|
|
4
|
-
*
|
|
5
|
-
* Implements IAdtObject with automatic operation chains, error handling,
|
|
6
|
-
* and resource cleanup.
|
|
7
|
-
*
|
|
8
|
-
* Session management:
|
|
9
|
-
* - stateful: only when doing lock / unlock
|
|
10
|
-
* - stateless: obligatory after unlock
|
|
11
|
-
* - activate uses the same session / cookies (no stateful required)
|
|
12
|
-
*
|
|
13
|
-
* Operation chains:
|
|
14
|
-
* - Create: validate (caller) → create
|
|
15
|
-
* - Update: lock → check(inactive, xmlContent?) → update → read(longPolling) → unlock → check(inactive) → optional activate + read
|
|
16
|
-
* - Delete: check(deletion) → delete
|
|
17
|
-
*/
|
|
18
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
3
|
exports.AdtAuthorizationField = void 0;
|
|
4
|
+
const criticalSection_1 = require("../../utils/criticalSection");
|
|
5
|
+
const deletionCheck_1 = require("../../utils/deletionCheck");
|
|
20
6
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
21
7
|
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
22
8
|
const versions_1 = require("../shared/versions");
|
|
@@ -215,6 +201,9 @@ class AdtAuthorizationField {
|
|
|
215
201
|
}
|
|
216
202
|
let lockHandle;
|
|
217
203
|
const state = { errors: [] };
|
|
204
|
+
// This try is a LOCK…UNLOCK window; a timeout in the middle releases
|
|
205
|
+
// the lock but leaves the work half-done.
|
|
206
|
+
const endCriticalSection = (0, criticalSection_1.beginCriticalSection)(this.connection);
|
|
218
207
|
try {
|
|
219
208
|
// 1. Lock
|
|
220
209
|
this.logger?.info?.('Step 1: Locking authorization field');
|
|
@@ -228,8 +217,8 @@ class AdtAuthorizationField {
|
|
|
228
217
|
const xmlToCheck = options?.xmlContent;
|
|
229
218
|
if (xmlToCheck) {
|
|
230
219
|
this.logger?.info?.('Step 2: Checking inactive version with update content');
|
|
231
|
-
const
|
|
232
|
-
state.checkResult =
|
|
220
|
+
const deletionCheck = await (0, check_1.checkAuthorizationField)(this.connection, fullConfig.authorizationFieldName, 'inactive', xmlToCheck);
|
|
221
|
+
state.checkResult = deletionCheck;
|
|
233
222
|
this.logger?.info?.('Check inactive with update content passed');
|
|
234
223
|
}
|
|
235
224
|
// 3. Update
|
|
@@ -314,6 +303,9 @@ class AdtAuthorizationField {
|
|
|
314
303
|
this.logger?.error('Update failed:', (0, internalUtils_1.safeErrorMessage)(error));
|
|
315
304
|
throw error;
|
|
316
305
|
}
|
|
306
|
+
finally {
|
|
307
|
+
endCriticalSection();
|
|
308
|
+
}
|
|
317
309
|
}
|
|
318
310
|
/**
|
|
319
311
|
* Delete authorization field.
|
|
@@ -325,8 +317,13 @@ class AdtAuthorizationField {
|
|
|
325
317
|
const state = { errors: [] };
|
|
326
318
|
try {
|
|
327
319
|
this.logger?.info?.('Checking authorization field for deletion');
|
|
328
|
-
const
|
|
329
|
-
|
|
320
|
+
const deletionCheck = await (0, delete_1.checkDeletion)(this.connection, this.buildDeleteParams(config));
|
|
321
|
+
// ADT already said whether this may be deleted; refusing to read that
|
|
322
|
+
// answer is how a delete came to report success while the object
|
|
323
|
+
// stayed. Throws on isDeletable=false or a message of type E; a W
|
|
324
|
+
// is a warning and passes.
|
|
325
|
+
(0, deletionCheck_1.assertDeletable)(deletionCheck.data);
|
|
326
|
+
state.checkResult = deletionCheck;
|
|
330
327
|
this.logger?.info?.('Deletion check passed');
|
|
331
328
|
this.logger?.info?.('Deleting authorization field');
|
|
332
329
|
const deleteResponse = await (0, delete_1.deleteAuthorizationField)(this.connection, this.buildDeleteParams(config));
|
|
@@ -365,9 +362,9 @@ class AdtAuthorizationField {
|
|
|
365
362
|
throw new Error('Authorization field name is required');
|
|
366
363
|
}
|
|
367
364
|
const version = status === 'active' ? 'active' : 'inactive';
|
|
368
|
-
const
|
|
365
|
+
const deletionCheck = await (0, check_1.checkAuthorizationField)(this.connection, config.authorizationFieldName, version);
|
|
369
366
|
return {
|
|
370
|
-
checkResult:
|
|
367
|
+
checkResult: deletionCheck,
|
|
371
368
|
errors: [],
|
|
372
369
|
};
|
|
373
370
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtBehaviorDefinition.d.ts","sourceRoot":"","sources":["../../../src/core/behaviorDefinition/AdtBehaviorDefinition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdtBehaviorDefinition.d.ts","sourceRoot":"","sources":["../../../src/core/behaviorDefinition/AdtBehaviorDefinition.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AASjB,qBAAa,qBACX,YACE,gBAAgB,CAAC,yBAAyB,EAAE,wBAAwB,CAAC;IAEvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,SAAgB,UAAU,EAAE,MAAM,CAAwB;gBAGxD,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB,EACjC,YAAY,CAAC,EAAE,YAAY;IAY7B;;OAEG;IACG,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GACzC,OAAO,CAAC,wBAAwB,CAAC;IA+CpC;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,wBAAwB,CAAC;IAuEpC;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAC1C,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IA8BhD;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAC1C,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,wBAAwB,CAAC;IAoCpC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAC1C,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,wBAAwB,CAAC;IAoCpC;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAC1C,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,wBAAwB,CAAC;IAgNpC;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GACzC,OAAO,CAAC,wBAAwB,CAAC;IA0CpC;;;OAGG;IACG,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GACzC,OAAO,CAAC,wBAAwB,CAAC;IAwBpC;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAC1C,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC;IA6BpC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvE;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,CAAC;IAepC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC;IAItD,gBAAgB,CAAC,UAAU,EAAE,MAAM;CAGpC"}
|
|
@@ -1,25 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AdtBehaviorDefinition - High-level CRUD operations for Behavior Definition objects
|
|
4
|
-
*
|
|
5
|
-
* Implements IAdtObject interface with automatic operation chains,
|
|
6
|
-
* error handling, and resource cleanup.
|
|
7
|
-
*
|
|
8
|
-
* Uses low-level functions directly (not Builder classes).
|
|
9
|
-
*
|
|
10
|
-
* Session management:
|
|
11
|
-
* - stateful: only when doing lock/update/unlock operations
|
|
12
|
-
* - stateless: obligatory after unlock
|
|
13
|
-
* - If no lock/unlock, no stateful needed
|
|
14
|
-
* - activate uses same session/cookies (no stateful needed)
|
|
15
|
-
*
|
|
16
|
-
* Operation chains:
|
|
17
|
-
* - Create: validate → create → check → lock → check(inactive) → update → unlock → check → activate
|
|
18
|
-
* - Update: lock → check(inactive) → update → unlock → check → activate
|
|
19
|
-
* - Delete: check(deletion) → delete
|
|
20
|
-
*/
|
|
21
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
3
|
exports.AdtBehaviorDefinition = void 0;
|
|
4
|
+
const criticalSection_1 = require("../../utils/criticalSection");
|
|
5
|
+
const deletionCheck_1 = require("../../utils/deletionCheck");
|
|
23
6
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
24
7
|
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
25
8
|
const activation_1 = require("./activation");
|
|
@@ -276,6 +259,9 @@ class AdtBehaviorDefinition {
|
|
|
276
259
|
};
|
|
277
260
|
}
|
|
278
261
|
let lockHandle;
|
|
262
|
+
// This try is a LOCK…UNLOCK window; a timeout in the middle releases
|
|
263
|
+
// the lock but leaves the work half-done.
|
|
264
|
+
const endCriticalSection = (0, criticalSection_1.beginCriticalSection)(this.connection);
|
|
279
265
|
try {
|
|
280
266
|
// 1. Lock (update always starts with lock, stateful ONLY before lock)
|
|
281
267
|
this.logger?.info?.('Step 1: Locking behavior definition');
|
|
@@ -389,6 +375,9 @@ class AdtBehaviorDefinition {
|
|
|
389
375
|
this.logger?.error('Update failed:', (0, internalUtils_1.safeErrorMessage)(error));
|
|
390
376
|
throw error;
|
|
391
377
|
}
|
|
378
|
+
finally {
|
|
379
|
+
endCriticalSection();
|
|
380
|
+
}
|
|
392
381
|
}
|
|
393
382
|
/**
|
|
394
383
|
* Delete behavior definition
|
|
@@ -403,7 +392,12 @@ class AdtBehaviorDefinition {
|
|
|
403
392
|
try {
|
|
404
393
|
// Check for deletion (no stateful needed)
|
|
405
394
|
this.logger?.info?.('Checking behavior definition for deletion');
|
|
406
|
-
await (0, delete_1.checkDeletion)(this.connection, config.name);
|
|
395
|
+
const deletionCheck = await (0, delete_1.checkDeletion)(this.connection, config.name);
|
|
396
|
+
// ADT already said whether this may be deleted; refusing to read that
|
|
397
|
+
// answer is how a delete came to report success while the object
|
|
398
|
+
// stayed. Throws on isDeletable=false or a message of type E; a W
|
|
399
|
+
// is a warning and passes.
|
|
400
|
+
(0, deletionCheck_1.assertDeletable)(deletionCheck.data);
|
|
407
401
|
this.logger?.info?.('Deletion check passed');
|
|
408
402
|
// Delete (no stateful needed - no lock/unlock)
|
|
409
403
|
this.logger?.info?.('Deleting behavior definition');
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CheckRunVersion } from '../../utils/checkRun';
|
|
1
2
|
/**
|
|
2
3
|
* Behavior Definition check operations
|
|
3
4
|
*/
|
|
@@ -25,7 +26,7 @@ import type { CheckReporter } from './types';
|
|
|
25
26
|
* const syntaxResult = await check(connection, 'Z_MY_BDEF', 'abapCheckRun', sessionId, 'inactive', sourceCode);
|
|
26
27
|
* ```
|
|
27
28
|
*/
|
|
28
|
-
export declare function check(connection: IAbapConnection, name: string, reporter: CheckReporter, _sessionId: string, version?:
|
|
29
|
+
export declare function check(connection: IAbapConnection, name: string, reporter: CheckReporter, _sessionId: string, version?: CheckRunVersion, sourceCode?: string): Promise<IAdtResponse>;
|
|
29
30
|
/**
|
|
30
31
|
* Check behavior definition implementation
|
|
31
32
|
*
|
|
@@ -47,7 +48,7 @@ export declare function check(connection: IAbapConnection, name: string, reporte
|
|
|
47
48
|
* const result = await checkImplementation(connection, 'Z_MY_BDEF', sessionId, 'inactive', sourceCode);
|
|
48
49
|
* ```
|
|
49
50
|
*/
|
|
50
|
-
export declare function checkImplementation(connection: IAbapConnection, name: string, sessionId: string, version?:
|
|
51
|
+
export declare function checkImplementation(connection: IAbapConnection, name: string, sessionId: string, version?: CheckRunVersion, sourceCode?: string): Promise<IAdtResponse>;
|
|
51
52
|
/**
|
|
52
53
|
* Check behavior definition ABAP syntax
|
|
53
54
|
*
|
|
@@ -69,5 +70,5 @@ export declare function checkImplementation(connection: IAbapConnection, name: s
|
|
|
69
70
|
* const result = await checkAbap(connection, 'Z_MY_BDEF', sessionId, 'inactive', sourceCode);
|
|
70
71
|
* ```
|
|
71
72
|
*/
|
|
72
|
-
export declare function checkAbap(connection: IAbapConnection, name: string, sessionId: string, version?:
|
|
73
|
+
export declare function checkAbap(connection: IAbapConnection, name: string, sessionId: string, version?: CheckRunVersion, sourceCode?: string): Promise<IAdtResponse>;
|
|
73
74
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/behaviorDefinition/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAO9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,KAAK,CACzB,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/behaviorDefinition/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAO9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,KAAK,CACzB,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAA4B,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAqCvB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAA4B,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CASvB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAA4B,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CASvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtClass.d.ts","sourceRoot":"","sources":["../../../src/core/class/AdtClass.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdtClass.d.ts","sourceRoot":"","sources":["../../../src/core/class/AdtClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AdtClass - High-level CRUD operations for Class objects
|
|
4
|
-
*
|
|
5
|
-
* Implements IAdtObject interface with automatic operation chains,
|
|
6
|
-
* error handling, and resource cleanup.
|
|
7
|
-
*
|
|
8
|
-
* Uses low-level functions directly (not Builder classes).
|
|
9
|
-
*
|
|
10
|
-
* Session management:
|
|
11
|
-
* - stateful: only when doing lock operations
|
|
12
|
-
* - stateless: obligatory after unlock
|
|
13
|
-
* - If no lock/unlock, no stateful needed
|
|
14
|
-
*
|
|
15
|
-
* Operation chains:
|
|
16
|
-
* - Create: validate → create → check → lock → check(inactive) → update → unlock → check → activate
|
|
17
|
-
* - Update: lock → check(inactive) → update → unlock → check → activate
|
|
18
|
-
* - Delete: check(deletion) → delete
|
|
19
|
-
*/
|
|
20
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
3
|
if (k2 === undefined) k2 = k;
|
|
22
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -52,6 +34,25 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
52
34
|
})();
|
|
53
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
36
|
exports.AdtClass = void 0;
|
|
37
|
+
const criticalSection_1 = require("../../utils/criticalSection");
|
|
38
|
+
/**
|
|
39
|
+
* AdtClass - High-level CRUD operations for Class objects
|
|
40
|
+
*
|
|
41
|
+
* Implements IAdtObject interface with automatic operation chains,
|
|
42
|
+
* error handling, and resource cleanup.
|
|
43
|
+
*
|
|
44
|
+
* Uses low-level functions directly (not Builder classes).
|
|
45
|
+
*
|
|
46
|
+
* Session management:
|
|
47
|
+
* - stateful: only when doing lock operations
|
|
48
|
+
* - stateless: obligatory after unlock
|
|
49
|
+
* - If no lock/unlock, no stateful needed
|
|
50
|
+
*
|
|
51
|
+
* Operation chains:
|
|
52
|
+
* - Create: validate → create → check → lock → check(inactive) → update → unlock → check → activate
|
|
53
|
+
* - Update: lock → check(inactive) → update → unlock → check → activate
|
|
54
|
+
* - Delete: check(deletion) → delete
|
|
55
|
+
*/
|
|
55
56
|
const interfaces_1 = require("@mcp-abap-adt/interfaces");
|
|
56
57
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
57
58
|
const capabilities_1 = require("../shared/capabilities");
|
|
@@ -306,6 +307,9 @@ class AdtClass {
|
|
|
306
307
|
const state = {
|
|
307
308
|
errors: [],
|
|
308
309
|
};
|
|
310
|
+
// This try is a LOCK…UNLOCK window; a timeout in the middle releases
|
|
311
|
+
// the lock but leaves the work half-done.
|
|
312
|
+
const endCriticalSection = (0, criticalSection_1.beginCriticalSection)(this.connection);
|
|
309
313
|
try {
|
|
310
314
|
// 1. Lock — stay stateful for the whole lock→check→update→unlock chain.
|
|
311
315
|
// On older BASIS (#106) the lock handle is only valid inside stateful
|
|
@@ -414,6 +418,9 @@ class AdtClass {
|
|
|
414
418
|
this.logger?.error('Update failed:', (0, internalUtils_1.safeErrorMessage)(error));
|
|
415
419
|
throw error;
|
|
416
420
|
}
|
|
421
|
+
finally {
|
|
422
|
+
endCriticalSection();
|
|
423
|
+
}
|
|
417
424
|
}
|
|
418
425
|
/**
|
|
419
426
|
* Delete class
|
|
@@ -630,6 +637,9 @@ class AdtClass {
|
|
|
630
637
|
throw new Error('Test class code is required');
|
|
631
638
|
}
|
|
632
639
|
let lockHandle;
|
|
640
|
+
// This try is a LOCK…UNLOCK window; a timeout in the middle releases
|
|
641
|
+
// the lock but leaves the work half-done.
|
|
642
|
+
const endCriticalSection = (0, criticalSection_1.beginCriticalSection)(this.connection);
|
|
633
643
|
try {
|
|
634
644
|
// 1. Lock parent class (stateful only for lock)
|
|
635
645
|
// Lock handle from parent class is sufficient for updating testclasses include
|
|
@@ -666,6 +676,9 @@ class AdtClass {
|
|
|
666
676
|
}
|
|
667
677
|
throw error;
|
|
668
678
|
}
|
|
679
|
+
finally {
|
|
680
|
+
endCriticalSection();
|
|
681
|
+
}
|
|
669
682
|
}
|
|
670
683
|
/**
|
|
671
684
|
* Activate test classes (local classes)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtClassLegacy.d.ts","sourceRoot":"","sources":["../../../src/core/class/AdtClassLegacy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdtClassLegacy.d.ts","sourceRoot":"","sources":["../../../src/core/class/AdtClassLegacy.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAa,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAMhF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIzD,qBAAa,cAAe,SAAQ,QAAQ;IAC1C;;;;;OAKG;IACY,MAAM,CACnB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,WAAW,CAAC;IAqIR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CAuD3E"}
|