@mcp-abap-adt/adt-clients 7.3.1 → 7.4.2
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/dist/clients/AdtClient.d.ts +32 -0
- package/dist/clients/AdtClient.d.ts.map +1 -1
- package/dist/clients/AdtClient.js +75 -30
- package/dist/core/accessControl/AdtAccessControl.d.ts +3 -1
- package/dist/core/accessControl/AdtAccessControl.d.ts.map +1 -1
- package/dist/core/accessControl/AdtAccessControl.js +11 -2
- package/dist/core/appendStructure/AdtAppendStructure.d.ts +3 -1
- package/dist/core/appendStructure/AdtAppendStructure.d.ts.map +1 -1
- package/dist/core/appendStructure/AdtAppendStructure.js +11 -2
- package/dist/core/authorizationField/AdtAuthorizationField.d.ts +3 -1
- package/dist/core/authorizationField/AdtAuthorizationField.d.ts.map +1 -1
- package/dist/core/authorizationField/AdtAuthorizationField.js +14 -3
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts +3 -1
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.js +11 -2
- package/dist/core/behaviorImplementation/AdtBehaviorImplementation.d.ts +2 -1
- package/dist/core/behaviorImplementation/AdtBehaviorImplementation.d.ts.map +1 -1
- package/dist/core/behaviorImplementation/AdtBehaviorImplementation.js +6 -3
- package/dist/core/class/AdtClass.d.ts +3 -1
- package/dist/core/class/AdtClass.d.ts.map +1 -1
- package/dist/core/class/AdtClass.js +16 -3
- package/dist/core/dataElement/AdtDataElement.d.ts +3 -1
- package/dist/core/dataElement/AdtDataElement.d.ts.map +1 -1
- package/dist/core/dataElement/AdtDataElement.js +9 -1
- package/dist/core/ddl/AdtDdl.d.ts +3 -1
- package/dist/core/ddl/AdtDdl.d.ts.map +1 -1
- package/dist/core/ddl/AdtDdl.js +11 -2
- package/dist/core/domain/AdtDomain.d.ts +3 -1
- package/dist/core/domain/AdtDomain.d.ts.map +1 -1
- package/dist/core/domain/AdtDomain.js +11 -1
- package/dist/core/enhancement/AdtEnhancement.d.ts +12 -1
- package/dist/core/enhancement/AdtEnhancement.d.ts.map +1 -1
- package/dist/core/enhancement/AdtEnhancement.js +35 -4
- package/dist/core/featureToggle/AdtFeatureToggle.d.ts +3 -1
- package/dist/core/featureToggle/AdtFeatureToggle.d.ts.map +1 -1
- package/dist/core/featureToggle/AdtFeatureToggle.js +14 -2
- package/dist/core/functionGroup/AdtFunctionGroup.d.ts +3 -1
- package/dist/core/functionGroup/AdtFunctionGroup.d.ts.map +1 -1
- package/dist/core/functionGroup/AdtFunctionGroup.js +9 -1
- package/dist/core/functionInclude/AdtFunctionInclude.d.ts +9 -1
- package/dist/core/functionInclude/AdtFunctionInclude.d.ts.map +1 -1
- package/dist/core/functionInclude/AdtFunctionInclude.js +33 -3
- package/dist/core/functionModule/AdtFunctionModule.d.ts +9 -1
- package/dist/core/functionModule/AdtFunctionModule.d.ts.map +1 -1
- package/dist/core/functionModule/AdtFunctionModule.js +27 -2
- package/dist/core/interface/AdtInterface.d.ts +3 -1
- package/dist/core/interface/AdtInterface.d.ts.map +1 -1
- package/dist/core/interface/AdtInterface.js +11 -2
- 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 +11 -2
- package/dist/core/metadataExtension/AdtMetadataExtension.d.ts +3 -1
- package/dist/core/metadataExtension/AdtMetadataExtension.d.ts.map +1 -1
- package/dist/core/metadataExtension/AdtMetadataExtension.js +9 -1
- package/dist/core/package/AdtPackage.d.ts +3 -1
- package/dist/core/package/AdtPackage.d.ts.map +1 -1
- package/dist/core/package/AdtPackage.js +11 -2
- package/dist/core/program/AdtProgram.d.ts +3 -1
- package/dist/core/program/AdtProgram.d.ts.map +1 -1
- package/dist/core/program/AdtProgram.js +11 -2
- package/dist/core/scalarFunction/AdtScalarFunction.d.ts +3 -1
- package/dist/core/scalarFunction/AdtScalarFunction.d.ts.map +1 -1
- package/dist/core/scalarFunction/AdtScalarFunction.js +11 -2
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts +3 -1
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.js +14 -2
- package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts +6 -3
- package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts.map +1 -1
- package/dist/core/serviceDefinition/AdtServiceDefinition.js +14 -4
- package/dist/core/shared/LockRegistry.d.ts +77 -0
- package/dist/core/shared/LockRegistry.d.ts.map +1 -0
- package/dist/core/shared/LockRegistry.js +91 -0
- package/dist/core/structure/AdtStructure.d.ts +3 -1
- package/dist/core/structure/AdtStructure.d.ts.map +1 -1
- package/dist/core/structure/AdtStructure.js +11 -2
- package/dist/core/table/AdtTable.d.ts +3 -1
- package/dist/core/table/AdtTable.d.ts.map +1 -1
- package/dist/core/table/AdtTable.js +11 -2
- package/dist/core/tabletype/AdtDdicTableType.d.ts +3 -1
- package/dist/core/tabletype/AdtDdicTableType.d.ts.map +1 -1
- package/dist/core/tabletype/AdtDdicTableType.js +9 -1
- package/dist/core/transformation/AdtTransformation.d.ts +3 -1
- package/dist/core/transformation/AdtTransformation.d.ts.map +1 -1
- package/dist/core/transformation/AdtTransformation.js +11 -2
- package/package.json +1 -1
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.AdtTable = void 0;
|
|
23
23
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
24
|
+
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
24
25
|
const activation_1 = require("./activation");
|
|
25
26
|
const check_1 = require("./check");
|
|
26
27
|
const create_1 = require("./create");
|
|
@@ -35,11 +36,13 @@ class AdtTable {
|
|
|
35
36
|
connection;
|
|
36
37
|
logger;
|
|
37
38
|
systemContext;
|
|
39
|
+
lockTracker;
|
|
38
40
|
objectType = 'Table';
|
|
39
|
-
constructor(connection, logger, systemContext) {
|
|
41
|
+
constructor(connection, logger, systemContext, lockRegistry) {
|
|
40
42
|
this.connection = connection;
|
|
41
43
|
this.logger = logger;
|
|
42
44
|
this.systemContext = systemContext ?? {};
|
|
45
|
+
this.lockTracker = (0, LockRegistry_1.createLockTracker)(lockRegistry, this.objectType, (name, lockHandle) => (0, unlock_1.unlockTable)(this.connection, name, lockHandle));
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
45
48
|
* Validate table configuration before creation
|
|
@@ -217,6 +220,7 @@ class AdtTable {
|
|
|
217
220
|
this.logger?.info?.('Step 1: Locking table');
|
|
218
221
|
this.connection.setSessionType('stateful');
|
|
219
222
|
lockHandle = await (0, lock_1.acquireTableLockHandle)(this.connection, config.tableName);
|
|
223
|
+
this.lockTracker.track(config.tableName, lockHandle);
|
|
220
224
|
this.logger?.info?.('Table locked, handle:', lockHandle);
|
|
221
225
|
// 2. Check inactive with code for update (from options or config)
|
|
222
226
|
const codeToCheck = options?.sourceCode || config.ddlCode;
|
|
@@ -234,10 +238,11 @@ class AdtTable {
|
|
|
234
238
|
transport_request: config.transportRequest,
|
|
235
239
|
}, lockHandle);
|
|
236
240
|
this.logger?.info?.('Table updated');
|
|
241
|
+
// Poll the inactive version: the write above produced it; the active version may not exist yet.
|
|
237
242
|
// 3.5. Read with long polling to ensure object is ready after update
|
|
238
243
|
this.logger?.info?.('read (wait for object ready after update)');
|
|
239
244
|
try {
|
|
240
|
-
await this.read({ tableName: config.tableName }, '
|
|
245
|
+
await this.read({ tableName: config.tableName }, 'inactive', {
|
|
241
246
|
withLongPolling: true,
|
|
242
247
|
});
|
|
243
248
|
this.logger?.info?.('object is ready after update');
|
|
@@ -253,6 +258,7 @@ class AdtTable {
|
|
|
253
258
|
this.connection.setSessionType('stateful');
|
|
254
259
|
await (0, unlock_1.unlockTable)(this.connection, config.tableName, lockHandle);
|
|
255
260
|
this.connection.setSessionType('stateless');
|
|
261
|
+
this.lockTracker.untrack(config.tableName);
|
|
256
262
|
lockHandle = undefined;
|
|
257
263
|
this.logger?.info?.('Table unlocked');
|
|
258
264
|
}
|
|
@@ -302,6 +308,7 @@ class AdtTable {
|
|
|
302
308
|
this.connection.setSessionType('stateful');
|
|
303
309
|
await (0, unlock_1.unlockTable)(this.connection, config.tableName, lockHandle);
|
|
304
310
|
this.connection.setSessionType('stateless');
|
|
311
|
+
this.lockTracker.untrack(config.tableName);
|
|
305
312
|
}
|
|
306
313
|
catch (unlockError) {
|
|
307
314
|
this.logger?.warn?.('Failed to unlock during cleanup:', (0, internalUtils_1.safeErrorMessage)(unlockError));
|
|
@@ -397,6 +404,7 @@ class AdtTable {
|
|
|
397
404
|
}
|
|
398
405
|
this.connection.setSessionType('stateful');
|
|
399
406
|
const lockHandle = await (0, lock_1.acquireTableLockHandle)(this.connection, config.tableName);
|
|
407
|
+
this.lockTracker.track(config.tableName, lockHandle);
|
|
400
408
|
return lockHandle;
|
|
401
409
|
}
|
|
402
410
|
/**
|
|
@@ -409,6 +417,7 @@ class AdtTable {
|
|
|
409
417
|
this.connection.setSessionType('stateful');
|
|
410
418
|
const result = await (0, unlock_1.unlockTable)(this.connection, config.tableName, lockHandle);
|
|
411
419
|
this.connection.setSessionType('stateless');
|
|
420
|
+
this.lockTracker.untrack(config.tableName);
|
|
412
421
|
return {
|
|
413
422
|
unlockResult: result,
|
|
414
423
|
errors: [],
|
|
@@ -19,14 +19,16 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { IAbapConnection, IAdtObject, IAdtOperationOptions, ILogger } from '@mcp-abap-adt/interfaces';
|
|
21
21
|
import type { IAdtSystemContext } from '../../clients/AdtClient';
|
|
22
|
+
import { type LockRegistry } from '../shared/LockRegistry';
|
|
22
23
|
import type { IReadOptions } from '../shared/types';
|
|
23
24
|
import type { ITableTypeConfig, ITableTypeState } from './types';
|
|
24
25
|
export declare class AdtDdicTableType implements IAdtObject<ITableTypeConfig, ITableTypeState> {
|
|
25
26
|
private readonly connection;
|
|
26
27
|
private readonly logger?;
|
|
27
28
|
private readonly systemContext;
|
|
29
|
+
private readonly lockTracker;
|
|
28
30
|
readonly objectType: string;
|
|
29
|
-
constructor(connection: IAbapConnection, logger?: ILogger, systemContext?: IAdtSystemContext);
|
|
31
|
+
constructor(connection: IAbapConnection, logger?: ILogger, systemContext?: IAdtSystemContext, lockRegistry?: LockRegistry);
|
|
30
32
|
/**
|
|
31
33
|
* Validate table type configuration before creation
|
|
32
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtDdicTableType.d.ts","sourceRoot":"","sources":["../../../src/core/tabletype/AdtDdicTableType.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAMjE,qBAAa,gBACX,YAAW,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAExD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,SAAgB,UAAU,EAAE,MAAM,CAAe;gBAG/C,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"AdtDdicTableType.d.ts","sourceRoot":"","sources":["../../../src/core/tabletype/AdtDdicTableType.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,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;AAOpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAMjE,qBAAa,gBACX,YAAW,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAExD,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,CAAe;gBAG/C,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB,EACjC,YAAY,CAAC,EAAE,YAAY;IAY7B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAa3E;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC;IAwD3B;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,EAChC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,eAAe,CAAC;IAwB3B;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,eAAe,CAAC;IAiC3B;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,eAAe,CAAC;IAkC3B;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC;IAiP3B;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IA6BzE;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB3E;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;IAmB3B;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAc9D;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC;IAmB3B,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI7C,gBAAgB,CAAC,UAAU,EAAE,MAAM;CAGpC"}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.AdtDdicTableType = void 0;
|
|
23
23
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
24
|
+
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
24
25
|
const activation_1 = require("./activation");
|
|
25
26
|
const check_1 = require("./check");
|
|
26
27
|
const create_1 = require("./create");
|
|
@@ -35,11 +36,13 @@ class AdtDdicTableType {
|
|
|
35
36
|
connection;
|
|
36
37
|
logger;
|
|
37
38
|
systemContext;
|
|
39
|
+
lockTracker;
|
|
38
40
|
objectType = 'TableType';
|
|
39
|
-
constructor(connection, logger, systemContext) {
|
|
41
|
+
constructor(connection, logger, systemContext, lockRegistry) {
|
|
40
42
|
this.connection = connection;
|
|
41
43
|
this.logger = logger;
|
|
42
44
|
this.systemContext = systemContext ?? {};
|
|
45
|
+
this.lockTracker = (0, LockRegistry_1.createLockTracker)(lockRegistry, this.objectType, (name, lockHandle) => (0, unlock_1.unlockTableType)(this.connection, name, lockHandle));
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
45
48
|
* Validate table type configuration before creation
|
|
@@ -225,6 +228,7 @@ class AdtDdicTableType {
|
|
|
225
228
|
this.logger?.info?.('Step 1: Locking table type');
|
|
226
229
|
this.connection.setSessionType('stateful');
|
|
227
230
|
lockHandle = await (0, lock_1.acquireTableTypeLockHandle)(this.connection, config.tableTypeName);
|
|
231
|
+
this.lockTracker.track(config.tableTypeName, lockHandle);
|
|
228
232
|
this.logger?.info?.('Table type locked, handle:', lockHandle);
|
|
229
233
|
// 2. Check inactive (TableType is XML-based, no source code check needed)
|
|
230
234
|
// Skip check step for XML-based TableType
|
|
@@ -274,6 +278,7 @@ class AdtDdicTableType {
|
|
|
274
278
|
this.connection.setSessionType('stateful');
|
|
275
279
|
await (0, unlock_1.unlockTableType)(this.connection, config.tableTypeName, lockHandle);
|
|
276
280
|
this.connection.setSessionType('stateless');
|
|
281
|
+
this.lockTracker.untrack(config.tableTypeName);
|
|
277
282
|
lockHandle = undefined;
|
|
278
283
|
this.logger?.info?.('Table type unlocked');
|
|
279
284
|
}
|
|
@@ -337,6 +342,7 @@ class AdtDdicTableType {
|
|
|
337
342
|
this.connection.setSessionType('stateful');
|
|
338
343
|
await (0, unlock_1.unlockTableType)(this.connection, config.tableTypeName, lockHandle);
|
|
339
344
|
this.connection.setSessionType('stateless');
|
|
345
|
+
this.lockTracker.untrack(config.tableTypeName);
|
|
340
346
|
}
|
|
341
347
|
catch (unlockError) {
|
|
342
348
|
this.logger?.warn?.('Failed to unlock during cleanup:', (0, internalUtils_1.safeErrorMessage)(unlockError));
|
|
@@ -432,6 +438,7 @@ class AdtDdicTableType {
|
|
|
432
438
|
}
|
|
433
439
|
this.connection.setSessionType('stateful');
|
|
434
440
|
const lockHandle = await (0, lock_1.acquireTableTypeLockHandle)(this.connection, config.tableTypeName);
|
|
441
|
+
this.lockTracker.track(config.tableTypeName, lockHandle);
|
|
435
442
|
return lockHandle;
|
|
436
443
|
}
|
|
437
444
|
/**
|
|
@@ -444,6 +451,7 @@ class AdtDdicTableType {
|
|
|
444
451
|
this.connection.setSessionType('stateful');
|
|
445
452
|
const result = await (0, unlock_1.unlockTableType)(this.connection, config.tableTypeName, lockHandle);
|
|
446
453
|
this.connection.setSessionType('stateless');
|
|
454
|
+
this.lockTracker.untrack(config.tableTypeName);
|
|
447
455
|
return {
|
|
448
456
|
unlockResult: result,
|
|
449
457
|
errors: [],
|
|
@@ -19,14 +19,16 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { IAbapConnection, IAdtObject, IAdtOperationOptions, ILogger } from '@mcp-abap-adt/interfaces';
|
|
21
21
|
import type { IAdtSystemContext } from '../../clients/AdtClient';
|
|
22
|
+
import { type LockRegistry } from '../shared/LockRegistry';
|
|
22
23
|
import type { IReadOptions } from '../shared/types';
|
|
23
24
|
import type { ITransformationConfig, ITransformationState } from './types';
|
|
24
25
|
export declare class AdtTransformation implements IAdtObject<ITransformationConfig, ITransformationState> {
|
|
25
26
|
private readonly connection;
|
|
26
27
|
private readonly logger?;
|
|
27
28
|
private readonly systemContext;
|
|
29
|
+
private readonly lockTracker;
|
|
28
30
|
readonly objectType: string;
|
|
29
|
-
constructor(connection: IAbapConnection, logger?: ILogger, systemContext?: IAdtSystemContext);
|
|
31
|
+
constructor(connection: IAbapConnection, logger?: ILogger, systemContext?: IAdtSystemContext, lockRegistry?: LockRegistry);
|
|
30
32
|
/**
|
|
31
33
|
* Validate transformation configuration before creation
|
|
32
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtTransformation.d.ts","sourceRoot":"","sources":["../../../src/core/transformation/AdtTransformation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAS3E,qBAAa,iBACX,YAAW,UAAU,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;IAElE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,SAAgB,UAAU,EAAE,MAAM,CAAoB;gBAGpD,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"AdtTransformation.d.ts","sourceRoot":"","sources":["../../../src/core/transformation/AdtTransformation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,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,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAS3E,qBAAa,iBACX,YAAW,UAAU,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;IAElE,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,CAAoB;gBAGpD,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,qBAAqB,CAAC,GACrC,OAAO,CAAC,oBAAoB,CAAC;IAsChC;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAyChC;;OAEG;IACG,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,EAC/B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IA2B5C;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAkChC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,oBAAoB,CAAC;IAkChC;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAiNhC;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACrC,OAAO,CAAC,oBAAoB,CAAC;IAmChC;;;OAGG;IACG,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACrC,OAAO,CAAC,oBAAoB,CAAC;IAqBhC;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC;IAkBhC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnE;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC;IAmBhC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAIlD,gBAAgB,CAAC,UAAU,EAAE,MAAM;CAGpC"}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.AdtTransformation = void 0;
|
|
23
23
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
24
|
+
const LockRegistry_1 = require("../shared/LockRegistry");
|
|
24
25
|
const activation_1 = require("./activation");
|
|
25
26
|
const check_1 = require("./check");
|
|
26
27
|
const create_1 = require("./create");
|
|
@@ -35,11 +36,13 @@ class AdtTransformation {
|
|
|
35
36
|
connection;
|
|
36
37
|
logger;
|
|
37
38
|
systemContext;
|
|
39
|
+
lockTracker;
|
|
38
40
|
objectType = 'Transformation';
|
|
39
|
-
constructor(connection, logger, systemContext) {
|
|
41
|
+
constructor(connection, logger, systemContext, lockRegistry) {
|
|
40
42
|
this.connection = connection;
|
|
41
43
|
this.logger = logger;
|
|
42
44
|
this.systemContext = systemContext ?? {};
|
|
45
|
+
this.lockTracker = (0, LockRegistry_1.createLockTracker)(lockRegistry, this.objectType, (transformationName, lockHandle) => (0, unlock_1.unlockTransformation)(this.connection, transformationName, lockHandle));
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
45
48
|
* Validate transformation configuration before creation
|
|
@@ -238,6 +241,7 @@ class AdtTransformation {
|
|
|
238
241
|
this.logger?.info?.('Step 1: Locking transformation');
|
|
239
242
|
this.connection.setSessionType('stateful');
|
|
240
243
|
lockHandle = await (0, lock_1.lockTransformation)(this.connection, config.transformationName);
|
|
244
|
+
this.lockTracker.track(config.transformationName, lockHandle);
|
|
241
245
|
this.logger?.info?.('Transformation locked, handle:', lockHandle);
|
|
242
246
|
// 2. Check inactive with code for update (from options or config)
|
|
243
247
|
const codeToCheck = options?.sourceCode || config.sourceCode;
|
|
@@ -255,10 +259,11 @@ class AdtTransformation {
|
|
|
255
259
|
transport_request: config.transportRequest,
|
|
256
260
|
}, lockHandle);
|
|
257
261
|
this.logger?.info?.('Transformation updated');
|
|
262
|
+
// Poll the inactive version: the write above produced it; the active version may not exist yet.
|
|
258
263
|
// 3.5. Read with long polling (wait for object to be ready after update)
|
|
259
264
|
this.logger?.info?.('read (wait for object ready after update)');
|
|
260
265
|
try {
|
|
261
|
-
await this.read({ transformationName: config.transformationName }, '
|
|
266
|
+
await this.read({ transformationName: config.transformationName }, 'inactive', { withLongPolling: true });
|
|
262
267
|
this.logger?.info?.('object is ready after update');
|
|
263
268
|
}
|
|
264
269
|
catch (readError) {
|
|
@@ -272,6 +277,7 @@ class AdtTransformation {
|
|
|
272
277
|
this.connection.setSessionType('stateful');
|
|
273
278
|
await (0, unlock_1.unlockTransformation)(this.connection, config.transformationName, lockHandle);
|
|
274
279
|
this.connection.setSessionType('stateless');
|
|
280
|
+
this.lockTracker.untrack(config.transformationName);
|
|
275
281
|
lockHandle = undefined;
|
|
276
282
|
this.logger?.info?.('Transformation unlocked');
|
|
277
283
|
}
|
|
@@ -314,6 +320,7 @@ class AdtTransformation {
|
|
|
314
320
|
this.connection.setSessionType('stateful');
|
|
315
321
|
await (0, unlock_1.unlockTransformation)(this.connection, config.transformationName, lockHandle);
|
|
316
322
|
this.connection.setSessionType('stateless');
|
|
323
|
+
this.lockTracker.untrack(config.transformationName);
|
|
317
324
|
}
|
|
318
325
|
catch (unlockError) {
|
|
319
326
|
this.logger?.warn?.('Failed to unlock during cleanup:', (0, internalUtils_1.safeErrorMessage)(unlockError));
|
|
@@ -420,6 +427,7 @@ class AdtTransformation {
|
|
|
420
427
|
}
|
|
421
428
|
this.connection.setSessionType('stateful');
|
|
422
429
|
const lockHandle = await (0, lock_1.lockTransformation)(this.connection, config.transformationName);
|
|
430
|
+
this.lockTracker.track(config.transformationName, lockHandle);
|
|
423
431
|
return lockHandle;
|
|
424
432
|
}
|
|
425
433
|
/**
|
|
@@ -432,6 +440,7 @@ class AdtTransformation {
|
|
|
432
440
|
this.connection.setSessionType('stateful');
|
|
433
441
|
const result = await (0, unlock_1.unlockTransformation)(this.connection, config.transformationName, lockHandle);
|
|
434
442
|
this.connection.setSessionType('stateless');
|
|
443
|
+
this.lockTracker.untrack(config.transformationName);
|
|
435
444
|
return {
|
|
436
445
|
unlockResult: result,
|
|
437
446
|
errors: [],
|