@mcp-abap-adt/adt-clients 0.1.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/LICENSE +22 -0
- package/README.md +184 -0
- package/bin/README.md +368 -0
- package/bin/lock-object.js +274 -0
- package/bin/manage-locks.js +331 -0
- package/bin/manage-sessions.js +235 -0
- package/bin/unlock-object.js +291 -0
- package/bin/unlock-test-objects.js +248 -0
- package/dist/clients/CrudClient.d.ts +48 -0
- package/dist/clients/CrudClient.d.ts.map +1 -0
- package/dist/clients/CrudClient.js +135 -0
- package/dist/clients/LockClient.d.ts +28 -0
- package/dist/clients/LockClient.d.ts.map +1 -0
- package/dist/clients/LockClient.js +141 -0
- package/dist/clients/ManagementClient.d.ts +34 -0
- package/dist/clients/ManagementClient.d.ts.map +1 -0
- package/dist/clients/ManagementClient.js +80 -0
- package/dist/clients/ReadOnlyClient.d.ts +70 -0
- package/dist/clients/ReadOnlyClient.d.ts.map +1 -0
- package/dist/clients/ReadOnlyClient.js +141 -0
- package/dist/clients/ValidationClient.d.ts +8 -0
- package/dist/clients/ValidationClient.d.ts.map +1 -0
- package/dist/clients/ValidationClient.js +14 -0
- package/dist/core/class/ClassBuilder.d.ts +140 -0
- package/dist/core/class/ClassBuilder.d.ts.map +1 -0
- package/dist/core/class/ClassBuilder.js +400 -0
- package/dist/core/class/activation.d.ts +11 -0
- package/dist/core/class/activation.d.ts.map +1 -0
- package/dist/core/class/activation.js +16 -0
- package/dist/core/class/check.d.ts +24 -0
- package/dist/core/class/check.d.ts.map +1 -0
- package/dist/core/class/check.js +73 -0
- package/dist/core/class/create.d.ts +30 -0
- package/dist/core/class/create.d.ts.map +1 -0
- package/dist/core/class/create.js +118 -0
- package/dist/core/class/index.d.ts +14 -0
- package/dist/core/class/index.d.ts.map +1 -0
- package/dist/core/class/index.js +31 -0
- package/dist/core/class/lock.d.ts +20 -0
- package/dist/core/class/lock.d.ts.map +1 -0
- package/dist/core/class/lock.js +49 -0
- package/dist/core/class/read.d.ts +34 -0
- package/dist/core/class/read.d.ts.map +1 -0
- package/dist/core/class/read.js +59 -0
- package/dist/core/class/run.d.ts +51 -0
- package/dist/core/class/run.d.ts.map +1 -0
- package/dist/core/class/run.js +105 -0
- package/dist/core/class/unlock.d.ts +11 -0
- package/dist/core/class/unlock.d.ts.map +1 -0
- package/dist/core/class/unlock.js +16 -0
- package/dist/core/class/update.d.ts +11 -0
- package/dist/core/class/update.d.ts.map +1 -0
- package/dist/core/class/update.js +30 -0
- package/dist/core/class/validation.d.ts +28 -0
- package/dist/core/class/validation.d.ts.map +1 -0
- package/dist/core/class/validation.js +269 -0
- package/dist/core/dataElement/DataElementBuilder.d.ts +113 -0
- package/dist/core/dataElement/DataElementBuilder.d.ts.map +1 -0
- package/dist/core/dataElement/DataElementBuilder.js +449 -0
- package/dist/core/dataElement/activation.d.ts +11 -0
- package/dist/core/dataElement/activation.d.ts.map +1 -0
- package/dist/core/dataElement/activation.js +123 -0
- package/dist/core/dataElement/check.d.ts +12 -0
- package/dist/core/dataElement/check.d.ts.map +1 -0
- package/dist/core/dataElement/check.js +32 -0
- package/dist/core/dataElement/create.d.ts +12 -0
- package/dist/core/dataElement/create.d.ts.map +1 -0
- package/dist/core/dataElement/create.js +259 -0
- package/dist/core/dataElement/delete.d.ts +14 -0
- package/dist/core/dataElement/delete.d.ts.map +1 -0
- package/dist/core/dataElement/delete.js +21 -0
- package/dist/core/dataElement/index.d.ts +14 -0
- package/dist/core/dataElement/index.d.ts.map +1 -0
- package/dist/core/dataElement/index.js +31 -0
- package/dist/core/dataElement/lock.d.ts +10 -0
- package/dist/core/dataElement/lock.d.ts.map +1 -0
- package/dist/core/dataElement/lock.js +31 -0
- package/dist/core/dataElement/read.d.ts +17 -0
- package/dist/core/dataElement/read.d.ts.map +1 -0
- package/dist/core/dataElement/read.js +42 -0
- package/dist/core/dataElement/types.d.ts +64 -0
- package/dist/core/dataElement/types.d.ts.map +1 -0
- package/dist/core/dataElement/types.js +5 -0
- package/dist/core/dataElement/unlock.d.ts +11 -0
- package/dist/core/dataElement/unlock.d.ts.map +1 -0
- package/dist/core/dataElement/unlock.js +17 -0
- package/dist/core/dataElement/update.d.ts +29 -0
- package/dist/core/dataElement/update.d.ts.map +1 -0
- package/dist/core/dataElement/update.js +269 -0
- package/dist/core/delete.d.ts +22 -0
- package/dist/core/delete.d.ts.map +1 -0
- package/dist/core/delete.js +148 -0
- package/dist/core/domain/DomainBuilder.d.ts +135 -0
- package/dist/core/domain/DomainBuilder.d.ts.map +1 -0
- package/dist/core/domain/DomainBuilder.js +430 -0
- package/dist/core/domain/activation.d.ts +11 -0
- package/dist/core/domain/activation.d.ts.map +1 -0
- package/dist/core/domain/activation.js +16 -0
- package/dist/core/domain/check.d.ts +16 -0
- package/dist/core/domain/check.d.ts.map +1 -0
- package/dist/core/domain/check.js +36 -0
- package/dist/core/domain/create.d.ts +21 -0
- package/dist/core/domain/create.d.ts.map +1 -0
- package/dist/core/domain/create.js +172 -0
- package/dist/core/domain/delete.d.ts +14 -0
- package/dist/core/domain/delete.d.ts.map +1 -0
- package/dist/core/domain/delete.js +21 -0
- package/dist/core/domain/index.d.ts +14 -0
- package/dist/core/domain/index.d.ts.map +1 -0
- package/dist/core/domain/index.js +31 -0
- package/dist/core/domain/lock.d.ts +15 -0
- package/dist/core/domain/lock.d.ts.map +1 -0
- package/dist/core/domain/lock.js +61 -0
- package/dist/core/domain/read.d.ts +17 -0
- package/dist/core/domain/read.d.ts.map +1 -0
- package/dist/core/domain/read.js +42 -0
- package/dist/core/domain/types.d.ts +38 -0
- package/dist/core/domain/types.d.ts.map +1 -0
- package/dist/core/domain/types.js +5 -0
- package/dist/core/domain/unlock.d.ts +11 -0
- package/dist/core/domain/unlock.d.ts.map +1 -0
- package/dist/core/domain/unlock.js +17 -0
- package/dist/core/domain/update.d.ts +12 -0
- package/dist/core/domain/update.d.ts.map +1 -0
- package/dist/core/domain/update.js +144 -0
- package/dist/core/functionGroup/FunctionGroupBuilder.d.ts +91 -0
- package/dist/core/functionGroup/FunctionGroupBuilder.d.ts.map +1 -0
- package/dist/core/functionGroup/FunctionGroupBuilder.js +268 -0
- package/dist/core/functionGroup/activation.d.ts +10 -0
- package/dist/core/functionGroup/activation.d.ts.map +1 -0
- package/dist/core/functionGroup/activation.js +30 -0
- package/dist/core/functionGroup/check.d.ts +24 -0
- package/dist/core/functionGroup/check.d.ts.map +1 -0
- package/dist/core/functionGroup/check.js +91 -0
- package/dist/core/functionGroup/create.d.ts +12 -0
- package/dist/core/functionGroup/create.d.ts.map +1 -0
- package/dist/core/functionGroup/create.js +90 -0
- package/dist/core/functionGroup/delete.d.ts +14 -0
- package/dist/core/functionGroup/delete.d.ts.map +1 -0
- package/dist/core/functionGroup/delete.js +21 -0
- package/dist/core/functionGroup/index.d.ts +15 -0
- package/dist/core/functionGroup/index.d.ts.map +1 -0
- package/dist/core/functionGroup/index.js +32 -0
- package/dist/core/functionGroup/lock.d.ts +25 -0
- package/dist/core/functionGroup/lock.d.ts.map +1 -0
- package/dist/core/functionGroup/lock.js +50 -0
- package/dist/core/functionGroup/read.d.ts +17 -0
- package/dist/core/functionGroup/read.d.ts.map +1 -0
- package/dist/core/functionGroup/read.js +42 -0
- package/dist/core/functionGroup/types.d.ts +11 -0
- package/dist/core/functionGroup/types.d.ts.map +1 -0
- package/dist/core/functionGroup/types.js +5 -0
- package/dist/core/functionGroup/unlock.d.ts +5 -0
- package/dist/core/functionGroup/unlock.d.ts.map +1 -0
- package/dist/core/functionGroup/unlock.js +8 -0
- package/dist/core/functionGroup/update.d.ts +20 -0
- package/dist/core/functionGroup/update.d.ts.map +1 -0
- package/dist/core/functionGroup/update.js +119 -0
- package/dist/core/functionGroup/validation.d.ts +10 -0
- package/dist/core/functionGroup/validation.d.ts.map +1 -0
- package/dist/core/functionGroup/validation.js +17 -0
- package/dist/core/functionModule/FunctionModuleBuilder.d.ts +101 -0
- package/dist/core/functionModule/FunctionModuleBuilder.d.ts.map +1 -0
- package/dist/core/functionModule/FunctionModuleBuilder.js +314 -0
- package/dist/core/functionModule/activation.d.ts +10 -0
- package/dist/core/functionModule/activation.d.ts.map +1 -0
- package/dist/core/functionModule/activation.js +17 -0
- package/dist/core/functionModule/check.d.ts +23 -0
- package/dist/core/functionModule/check.d.ts.map +1 -0
- package/dist/core/functionModule/check.js +116 -0
- package/dist/core/functionModule/create.d.ts +12 -0
- package/dist/core/functionModule/create.d.ts.map +1 -0
- package/dist/core/functionModule/create.js +158 -0
- package/dist/core/functionModule/delete.d.ts +15 -0
- package/dist/core/functionModule/delete.d.ts.map +1 -0
- package/dist/core/functionModule/delete.js +25 -0
- package/dist/core/functionModule/index.d.ts +15 -0
- package/dist/core/functionModule/index.d.ts.map +1 -0
- package/dist/core/functionModule/index.js +32 -0
- package/dist/core/functionModule/lock.d.ts +18 -0
- package/dist/core/functionModule/lock.d.ts.map +1 -0
- package/dist/core/functionModule/lock.js +52 -0
- package/dist/core/functionModule/read.d.ts +31 -0
- package/dist/core/functionModule/read.d.ts.map +1 -0
- package/dist/core/functionModule/read.js +57 -0
- package/dist/core/functionModule/types.d.ts +19 -0
- package/dist/core/functionModule/types.d.ts.map +1 -0
- package/dist/core/functionModule/types.js +5 -0
- package/dist/core/functionModule/unlock.d.ts +10 -0
- package/dist/core/functionModule/unlock.d.ts.map +1 -0
- package/dist/core/functionModule/unlock.js +20 -0
- package/dist/core/functionModule/update.d.ts +17 -0
- package/dist/core/functionModule/update.d.ts.map +1 -0
- package/dist/core/functionModule/update.js +103 -0
- package/dist/core/functionModule/validation.d.ts +27 -0
- package/dist/core/functionModule/validation.d.ts.map +1 -0
- package/dist/core/functionModule/validation.js +107 -0
- package/dist/core/interface/InterfaceBuilder.d.ts +98 -0
- package/dist/core/interface/InterfaceBuilder.d.ts.map +1 -0
- package/dist/core/interface/InterfaceBuilder.js +311 -0
- package/dist/core/interface/activation.d.ts +11 -0
- package/dist/core/interface/activation.d.ts.map +1 -0
- package/dist/core/interface/activation.js +16 -0
- package/dist/core/interface/check.d.ts +10 -0
- package/dist/core/interface/check.d.ts.map +1 -0
- package/dist/core/interface/check.js +18 -0
- package/dist/core/interface/create.d.ts +12 -0
- package/dist/core/interface/create.d.ts.map +1 -0
- package/dist/core/interface/create.js +119 -0
- package/dist/core/interface/delete.d.ts +20 -0
- package/dist/core/interface/delete.d.ts.map +1 -0
- package/dist/core/interface/delete.js +47 -0
- package/dist/core/interface/index.d.ts +15 -0
- package/dist/core/interface/index.d.ts.map +1 -0
- package/dist/core/interface/index.js +32 -0
- package/dist/core/interface/lock.d.ts +23 -0
- package/dist/core/interface/lock.d.ts.map +1 -0
- package/dist/core/interface/lock.js +51 -0
- package/dist/core/interface/read.d.ts +26 -0
- package/dist/core/interface/read.d.ts.map +1 -0
- package/dist/core/interface/read.js +51 -0
- package/dist/core/interface/types.d.ts +19 -0
- package/dist/core/interface/types.d.ts.map +1 -0
- package/dist/core/interface/types.js +5 -0
- package/dist/core/interface/unlock.d.ts +11 -0
- package/dist/core/interface/unlock.d.ts.map +1 -0
- package/dist/core/interface/unlock.js +35 -0
- package/dist/core/interface/update.d.ts +12 -0
- package/dist/core/interface/update.d.ts.map +1 -0
- package/dist/core/interface/update.js +82 -0
- package/dist/core/interface/validation.d.ts +10 -0
- package/dist/core/interface/validation.d.ts.map +1 -0
- package/dist/core/interface/validation.js +17 -0
- package/dist/core/managementOperations.d.ts +34 -0
- package/dist/core/managementOperations.d.ts.map +1 -0
- package/dist/core/managementOperations.js +136 -0
- package/dist/core/package/PackageBuilder.d.ts +129 -0
- package/dist/core/package/PackageBuilder.d.ts.map +1 -0
- package/dist/core/package/PackageBuilder.js +386 -0
- package/dist/core/package/check.d.ts +9 -0
- package/dist/core/package/check.d.ts.map +1 -0
- package/dist/core/package/check.js +29 -0
- package/dist/core/package/create.d.ts +12 -0
- package/dist/core/package/create.d.ts.map +1 -0
- package/dist/core/package/create.js +145 -0
- package/dist/core/package/delete.d.ts +27 -0
- package/dist/core/package/delete.d.ts.map +1 -0
- package/dist/core/package/delete.js +138 -0
- package/dist/core/package/index.d.ts +15 -0
- package/dist/core/package/index.d.ts.map +1 -0
- package/dist/core/package/index.js +32 -0
- package/dist/core/package/lock.d.ts +10 -0
- package/dist/core/package/lock.d.ts.map +1 -0
- package/dist/core/package/lock.js +28 -0
- package/dist/core/package/read.d.ts +17 -0
- package/dist/core/package/read.d.ts.map +1 -0
- package/dist/core/package/read.js +42 -0
- package/dist/core/package/transportCheck.d.ts +10 -0
- package/dist/core/package/transportCheck.d.ts.map +1 -0
- package/dist/core/package/transportCheck.js +52 -0
- package/dist/core/package/types.d.ts +15 -0
- package/dist/core/package/types.d.ts.map +1 -0
- package/dist/core/package/types.js +5 -0
- package/dist/core/package/unlock.d.ts +11 -0
- package/dist/core/package/unlock.d.ts.map +1 -0
- package/dist/core/package/unlock.js +16 -0
- package/dist/core/package/update.d.ts +19 -0
- package/dist/core/package/update.d.ts.map +1 -0
- package/dist/core/package/update.js +125 -0
- package/dist/core/package/validation.d.ts +14 -0
- package/dist/core/package/validation.d.ts.map +1 -0
- package/dist/core/package/validation.js +72 -0
- package/dist/core/program/ProgramBuilder.d.ts +102 -0
- package/dist/core/program/ProgramBuilder.d.ts.map +1 -0
- package/dist/core/program/ProgramBuilder.js +321 -0
- package/dist/core/program/activation.d.ts +11 -0
- package/dist/core/program/activation.d.ts.map +1 -0
- package/dist/core/program/activation.js +16 -0
- package/dist/core/program/check.d.ts +10 -0
- package/dist/core/program/check.d.ts.map +1 -0
- package/dist/core/program/check.js +18 -0
- package/dist/core/program/create.d.ts +23 -0
- package/dist/core/program/create.d.ts.map +1 -0
- package/dist/core/program/create.js +159 -0
- package/dist/core/program/delete.d.ts +14 -0
- package/dist/core/program/delete.d.ts.map +1 -0
- package/dist/core/program/delete.js +21 -0
- package/dist/core/program/index.d.ts +14 -0
- package/dist/core/program/index.d.ts.map +1 -0
- package/dist/core/program/index.js +31 -0
- package/dist/core/program/lock.d.ts +20 -0
- package/dist/core/program/lock.d.ts.map +1 -0
- package/dist/core/program/lock.js +49 -0
- package/dist/core/program/read.d.ts +26 -0
- package/dist/core/program/read.d.ts.map +1 -0
- package/dist/core/program/read.js +51 -0
- package/dist/core/program/unlock.d.ts +11 -0
- package/dist/core/program/unlock.d.ts.map +1 -0
- package/dist/core/program/unlock.js +16 -0
- package/dist/core/program/update.d.ts +16 -0
- package/dist/core/program/update.d.ts.map +1 -0
- package/dist/core/program/update.js +82 -0
- package/dist/core/program/validation.d.ts +10 -0
- package/dist/core/program/validation.d.ts.map +1 -0
- package/dist/core/program/validation.js +17 -0
- package/dist/core/readOperations.d.ts +63 -0
- package/dist/core/readOperations.d.ts.map +1 -0
- package/dist/core/readOperations.js +204 -0
- package/dist/core/shared/checkRun.d.ts +68 -0
- package/dist/core/shared/checkRun.d.ts.map +1 -0
- package/dist/core/shared/checkRun.js +292 -0
- package/dist/core/shared/readMetadata.d.ts +16 -0
- package/dist/core/shared/readMetadata.d.ts.map +1 -0
- package/dist/core/shared/readMetadata.js +74 -0
- package/dist/core/shared/readSource.d.ts +21 -0
- package/dist/core/shared/readSource.d.ts.map +1 -0
- package/dist/core/shared/readSource.js +83 -0
- package/dist/core/shared/search.d.ts +26 -0
- package/dist/core/shared/search.d.ts.map +1 -0
- package/dist/core/shared/search.js +32 -0
- package/dist/core/shared/sqlQuery.d.ts +22 -0
- package/dist/core/shared/sqlQuery.d.ts.map +1 -0
- package/dist/core/shared/sqlQuery.js +36 -0
- package/dist/core/shared/systemInfo.d.ts +22 -0
- package/dist/core/shared/systemInfo.d.ts.map +1 -0
- package/dist/core/shared/systemInfo.js +67 -0
- package/dist/core/shared/tableContents.d.ts +22 -0
- package/dist/core/shared/tableContents.d.ts.map +1 -0
- package/dist/core/shared/tableContents.js +89 -0
- package/dist/core/shared/validation.d.ts +26 -0
- package/dist/core/shared/validation.d.ts.map +1 -0
- package/dist/core/shared/validation.js +134 -0
- package/dist/core/shared/whereUsed.d.ts +19 -0
- package/dist/core/shared/whereUsed.d.ts.map +1 -0
- package/dist/core/shared/whereUsed.js +88 -0
- package/dist/core/structure/StructureBuilder.d.ts +124 -0
- package/dist/core/structure/StructureBuilder.d.ts.map +1 -0
- package/dist/core/structure/StructureBuilder.js +357 -0
- package/dist/core/structure/activation.d.ts +10 -0
- package/dist/core/structure/activation.d.ts.map +1 -0
- package/dist/core/structure/activation.js +15 -0
- package/dist/core/structure/check.d.ts +12 -0
- package/dist/core/structure/check.d.ts.map +1 -0
- package/dist/core/structure/check.js +44 -0
- package/dist/core/structure/create.d.ts +12 -0
- package/dist/core/structure/create.d.ts.map +1 -0
- package/dist/core/structure/create.js +136 -0
- package/dist/core/structure/delete.d.ts +14 -0
- package/dist/core/structure/delete.d.ts.map +1 -0
- package/dist/core/structure/delete.js +21 -0
- package/dist/core/structure/index.d.ts +15 -0
- package/dist/core/structure/index.d.ts.map +1 -0
- package/dist/core/structure/index.js +32 -0
- package/dist/core/structure/lock.d.ts +10 -0
- package/dist/core/structure/lock.d.ts.map +1 -0
- package/dist/core/structure/lock.js +28 -0
- package/dist/core/structure/read.d.ts +26 -0
- package/dist/core/structure/read.d.ts.map +1 -0
- package/dist/core/structure/read.js +51 -0
- package/dist/core/structure/types.d.ts +33 -0
- package/dist/core/structure/types.d.ts.map +1 -0
- package/dist/core/structure/types.js +5 -0
- package/dist/core/structure/unlock.d.ts +11 -0
- package/dist/core/structure/unlock.d.ts.map +1 -0
- package/dist/core/structure/unlock.js +16 -0
- package/dist/core/structure/update.d.ts +11 -0
- package/dist/core/structure/update.d.ts.map +1 -0
- package/dist/core/structure/update.js +26 -0
- package/dist/core/structure/validation.d.ts +10 -0
- package/dist/core/structure/validation.d.ts.map +1 -0
- package/dist/core/structure/validation.js +17 -0
- package/dist/core/table/TableBuilder.d.ts +115 -0
- package/dist/core/table/TableBuilder.d.ts.map +1 -0
- package/dist/core/table/TableBuilder.js +328 -0
- package/dist/core/table/activation.d.ts +10 -0
- package/dist/core/table/activation.d.ts.map +1 -0
- package/dist/core/table/activation.js +15 -0
- package/dist/core/table/check.d.ts +11 -0
- package/dist/core/table/check.d.ts.map +1 -0
- package/dist/core/table/check.js +30 -0
- package/dist/core/table/create.d.ts +12 -0
- package/dist/core/table/create.d.ts.map +1 -0
- package/dist/core/table/create.js +182 -0
- package/dist/core/table/delete.d.ts +14 -0
- package/dist/core/table/delete.d.ts.map +1 -0
- package/dist/core/table/delete.js +21 -0
- package/dist/core/table/index.d.ts +15 -0
- package/dist/core/table/index.d.ts.map +1 -0
- package/dist/core/table/index.js +32 -0
- package/dist/core/table/lock.d.ts +9 -0
- package/dist/core/table/lock.d.ts.map +1 -0
- package/dist/core/table/lock.js +29 -0
- package/dist/core/table/read.d.ts +26 -0
- package/dist/core/table/read.d.ts.map +1 -0
- package/dist/core/table/read.js +51 -0
- package/dist/core/table/types.d.ts +10 -0
- package/dist/core/table/types.d.ts.map +1 -0
- package/dist/core/table/types.js +5 -0
- package/dist/core/table/unlock.d.ts +15 -0
- package/dist/core/table/unlock.d.ts.map +1 -0
- package/dist/core/table/unlock.js +32 -0
- package/dist/core/table/update.d.ts +16 -0
- package/dist/core/table/update.d.ts.map +1 -0
- package/dist/core/table/update.js +32 -0
- package/dist/core/table/validation.d.ts +10 -0
- package/dist/core/table/validation.d.ts.map +1 -0
- package/dist/core/table/validation.js +17 -0
- package/dist/core/transport/TransportBuilder.d.ts +85 -0
- package/dist/core/transport/TransportBuilder.d.ts.map +1 -0
- package/dist/core/transport/TransportBuilder.js +154 -0
- package/dist/core/transport/create.d.ts +11 -0
- package/dist/core/transport/create.d.ts.map +1 -0
- package/dist/core/transport/create.js +157 -0
- package/dist/core/transport/index.d.ts +8 -0
- package/dist/core/transport/index.d.ts.map +1 -0
- package/dist/core/transport/index.js +25 -0
- package/dist/core/transport/read.d.ts +10 -0
- package/dist/core/transport/read.d.ts.map +1 -0
- package/dist/core/transport/read.js +22 -0
- package/dist/core/transport/types.d.ts +10 -0
- package/dist/core/transport/types.d.ts.map +1 -0
- package/dist/core/transport/types.js +5 -0
- package/dist/core/view/ViewBuilder.d.ts +117 -0
- package/dist/core/view/ViewBuilder.d.ts.map +1 -0
- package/dist/core/view/ViewBuilder.js +335 -0
- package/dist/core/view/activation.d.ts +10 -0
- package/dist/core/view/activation.d.ts.map +1 -0
- package/dist/core/view/activation.js +15 -0
- package/dist/core/view/check.d.ts +7 -0
- package/dist/core/view/check.d.ts.map +1 -0
- package/dist/core/view/check.js +57 -0
- package/dist/core/view/create.d.ts +12 -0
- package/dist/core/view/create.d.ts.map +1 -0
- package/dist/core/view/create.js +88 -0
- package/dist/core/view/delete.d.ts +14 -0
- package/dist/core/view/delete.d.ts.map +1 -0
- package/dist/core/view/delete.js +21 -0
- package/dist/core/view/index.d.ts +15 -0
- package/dist/core/view/index.d.ts.map +1 -0
- package/dist/core/view/index.js +32 -0
- package/dist/core/view/lock.d.ts +18 -0
- package/dist/core/view/lock.d.ts.map +1 -0
- package/dist/core/view/lock.js +45 -0
- package/dist/core/view/read.d.ts +26 -0
- package/dist/core/view/read.d.ts.map +1 -0
- package/dist/core/view/read.js +51 -0
- package/dist/core/view/types.d.ts +19 -0
- package/dist/core/view/types.d.ts.map +1 -0
- package/dist/core/view/types.js +5 -0
- package/dist/core/view/unlock.d.ts +10 -0
- package/dist/core/view/unlock.d.ts.map +1 -0
- package/dist/core/view/unlock.js +15 -0
- package/dist/core/view/update.d.ts +12 -0
- package/dist/core/view/update.d.ts.map +1 -0
- package/dist/core/view/update.js +89 -0
- package/dist/core/view/validation.d.ts +10 -0
- package/dist/core/view/validation.d.ts.map +1 -0
- package/dist/core/view/validation.js +17 -0
- package/dist/core.d.ts +133 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +175 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/utils/activationUtils.d.ts +44 -0
- package/dist/utils/activationUtils.d.ts.map +1 -0
- package/dist/utils/activationUtils.js +127 -0
- package/dist/utils/internalUtils.d.ts +12 -0
- package/dist/utils/internalUtils.d.ts.map +1 -0
- package/dist/utils/internalUtils.js +16 -0
- package/dist/utils/lockStateManager.d.ts +64 -0
- package/dist/utils/lockStateManager.d.ts.map +1 -0
- package/dist/utils/lockStateManager.js +172 -0
- package/dist/utils/sessionUtils.d.ts +69 -0
- package/dist/utils/sessionUtils.d.ts.map +1 -0
- package/dist/utils/sessionUtils.js +134 -0
- package/package.json +75 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DataElement update operations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getDomainInfo = getDomainInfo;
|
|
7
|
+
exports.updateDataElementInternal = updateDataElementInternal;
|
|
8
|
+
exports.updateDataElement = updateDataElement;
|
|
9
|
+
const connection_1 = require("@mcp-abap-adt/connection");
|
|
10
|
+
const fast_xml_parser_1 = require("fast-xml-parser");
|
|
11
|
+
const internalUtils_1 = require("../../utils/internalUtils");
|
|
12
|
+
const sessionUtils_1 = require("../../utils/sessionUtils");
|
|
13
|
+
const lock_1 = require("./lock");
|
|
14
|
+
const unlock_1 = require("./unlock");
|
|
15
|
+
const activation_1 = require("./activation");
|
|
16
|
+
/**
|
|
17
|
+
* Get domain info to extract dataType, length, decimals
|
|
18
|
+
*/
|
|
19
|
+
async function getDomainInfo(connection, domainName) {
|
|
20
|
+
const baseUrl = await connection.getBaseUrl();
|
|
21
|
+
const domainNameEncoded = (0, internalUtils_1.encodeSapObjectName)(domainName.toLowerCase());
|
|
22
|
+
const url = `${baseUrl}/sap/bc/adt/ddic/domains/${domainNameEncoded}`;
|
|
23
|
+
const headers = {
|
|
24
|
+
'Accept': 'application/vnd.sap.adt.domains.v1+xml, application/vnd.sap.adt.domains.v2+xml'
|
|
25
|
+
};
|
|
26
|
+
const response = await connection.makeAdtRequest({
|
|
27
|
+
url,
|
|
28
|
+
method: 'GET',
|
|
29
|
+
timeout: (0, connection_1.getTimeout)('default'),
|
|
30
|
+
headers
|
|
31
|
+
});
|
|
32
|
+
const parser = new fast_xml_parser_1.XMLParser({
|
|
33
|
+
ignoreAttributes: false,
|
|
34
|
+
attributeNamePrefix: ''
|
|
35
|
+
});
|
|
36
|
+
const result = parser.parse(response.data);
|
|
37
|
+
const domainXml = result['doma:domain'];
|
|
38
|
+
return {
|
|
39
|
+
dataType: domainXml['doma:content']?.['doma:typeInformation']?.['doma:datatype'] || 'CHAR',
|
|
40
|
+
length: domainXml['doma:content']?.['doma:typeInformation']?.['doma:length'] || 100,
|
|
41
|
+
decimals: domainXml['doma:content']?.['doma:typeInformation']?.['doma:decimals'] || 0
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get data element to verify update
|
|
46
|
+
*/
|
|
47
|
+
async function getDataElementForVerification(connection, dataElementName, sessionId) {
|
|
48
|
+
const baseUrl = await connection.getBaseUrl();
|
|
49
|
+
const dataElementNameEncoded = (0, internalUtils_1.encodeSapObjectName)(dataElementName.toLowerCase());
|
|
50
|
+
const url = `${baseUrl}/sap/bc/adt/ddic/dataelements/${dataElementNameEncoded}`;
|
|
51
|
+
const headers = {
|
|
52
|
+
'Accept': 'application/vnd.sap.adt.dataelements.v1+xml, application/vnd.sap.adt.dataelements.v2+xml',
|
|
53
|
+
};
|
|
54
|
+
const response = await connection.makeAdtRequest({
|
|
55
|
+
url,
|
|
56
|
+
method: 'GET',
|
|
57
|
+
timeout: (0, connection_1.getTimeout)('default'),
|
|
58
|
+
headers
|
|
59
|
+
});
|
|
60
|
+
const parser = new fast_xml_parser_1.XMLParser({
|
|
61
|
+
ignoreAttributes: false,
|
|
62
|
+
attributeNamePrefix: '',
|
|
63
|
+
});
|
|
64
|
+
const result = parser.parse(response.data);
|
|
65
|
+
return result['blue:wbobj'];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Update data element with new data
|
|
69
|
+
* Requires object to be locked first (lockHandle must be provided)
|
|
70
|
+
*/
|
|
71
|
+
async function updateDataElementInternal(connection, args, lockHandle, sessionId, username, domainInfo) {
|
|
72
|
+
const dataElementNameEncoded = (0, internalUtils_1.encodeSapObjectName)(args.data_element_name.toLowerCase());
|
|
73
|
+
const corrNrParam = args.transport_request ? `&corrNr=${args.transport_request}` : '';
|
|
74
|
+
const url = `/sap/bc/adt/ddic/dataelements/${dataElementNameEncoded}?lockHandle=${lockHandle}${corrNrParam}`;
|
|
75
|
+
if (!args.type_kind) {
|
|
76
|
+
throw new Error('type_kind is required. Must be one of: domain, predefinedAbapType, refToPredefinedAbapType, refToDictionaryType, refToClifType');
|
|
77
|
+
}
|
|
78
|
+
const typeKind = args.type_kind;
|
|
79
|
+
// Determine typeName based on typeKind (same logic as in create.ts)
|
|
80
|
+
let typeName = '';
|
|
81
|
+
if (typeKind === 'domain') {
|
|
82
|
+
typeName = (args.domain_name || args.type_name || '').toUpperCase();
|
|
83
|
+
}
|
|
84
|
+
else if (typeKind === 'predefinedAbapType' || typeKind === 'refToPredefinedAbapType') {
|
|
85
|
+
// For predefinedAbapType and refToPredefinedAbapType, typeName is empty
|
|
86
|
+
typeName = '';
|
|
87
|
+
}
|
|
88
|
+
else if (typeKind === 'refToDictionaryType' || typeKind === 'refToClifType') {
|
|
89
|
+
// For refToDictionaryType and refToClifType, type_name is required
|
|
90
|
+
typeName = (args.type_name || '').toUpperCase();
|
|
91
|
+
}
|
|
92
|
+
let dataType = '';
|
|
93
|
+
let dataTypeLength = 0;
|
|
94
|
+
let dataTypeDecimals = 0;
|
|
95
|
+
if (typeKind === 'domain') {
|
|
96
|
+
dataType = domainInfo.dataType;
|
|
97
|
+
dataTypeLength = domainInfo.length;
|
|
98
|
+
dataTypeDecimals = domainInfo.decimals;
|
|
99
|
+
}
|
|
100
|
+
else if (typeKind === 'predefinedAbapType' || typeKind === 'refToPredefinedAbapType') {
|
|
101
|
+
// For predefinedAbapType and refToPredefinedAbapType, use provided values
|
|
102
|
+
dataType = args.data_type || 'CHAR';
|
|
103
|
+
dataTypeLength = args.length || 100;
|
|
104
|
+
dataTypeDecimals = args.decimals || 0;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// For refToDictionaryType and refToClifType, dataType is empty, length/decimals are 0
|
|
108
|
+
dataType = '';
|
|
109
|
+
dataTypeLength = 0;
|
|
110
|
+
dataTypeDecimals = 0;
|
|
111
|
+
}
|
|
112
|
+
const shortMaxLength = 10;
|
|
113
|
+
const mediumMaxLength = 20;
|
|
114
|
+
const longMaxLength = 40;
|
|
115
|
+
const headingMaxLength = 55;
|
|
116
|
+
const shortLabel = (args.short_label || '').substring(0, shortMaxLength);
|
|
117
|
+
const mediumLabel = (args.medium_label || '').substring(0, mediumMaxLength);
|
|
118
|
+
const longLabel = (args.long_label || '').substring(0, longMaxLength);
|
|
119
|
+
const headingLabel = (args.heading_label || '').substring(0, headingMaxLength);
|
|
120
|
+
const shortLength = shortLabel.length || shortMaxLength;
|
|
121
|
+
const mediumLength = mediumLabel.length || mediumMaxLength;
|
|
122
|
+
const longLength = longLabel.length || longMaxLength;
|
|
123
|
+
const headingLength = headingLabel.length || headingMaxLength;
|
|
124
|
+
const searchHelp = args.search_help !== undefined ? args.search_help : '';
|
|
125
|
+
const searchHelpParameter = args.search_help_parameter !== undefined ? args.search_help_parameter : '';
|
|
126
|
+
const setGetParameter = args.set_get_parameter !== undefined ? args.set_get_parameter : '';
|
|
127
|
+
const defaultComponentName = args.default_component_name !== undefined ? args.default_component_name : '';
|
|
128
|
+
const deactivateInputHistory = args.deactivate_input_history !== undefined ? args.deactivate_input_history : false;
|
|
129
|
+
const changeDocument = args.change_document !== undefined ? args.change_document : false;
|
|
130
|
+
const leftToRightDirection = args.left_to_right_direction !== undefined ? args.left_to_right_direction : false;
|
|
131
|
+
const deactivateBIDIFiltering = args.deactivate_bidi_filtering !== undefined ? args.deactivate_bidi_filtering : false;
|
|
132
|
+
const xmlBody = `<?xml version="1.0" encoding="UTF-8"?>
|
|
133
|
+
<blue:wbobj xmlns:blue="http://www.sap.com/wbobj/dictionary/dtel"
|
|
134
|
+
xmlns:adtcore="http://www.sap.com/adt/core"
|
|
135
|
+
xmlns:atom="http://www.w3.org/2005/Atom"
|
|
136
|
+
xmlns:dtel="http://www.sap.com/adt/dictionary/dataelements"
|
|
137
|
+
adtcore:description="${args.description || args.data_element_name}"
|
|
138
|
+
adtcore:language="EN"
|
|
139
|
+
adtcore:name="${args.data_element_name.toUpperCase()}"
|
|
140
|
+
adtcore:type="DTEL/DE"
|
|
141
|
+
adtcore:masterLanguage="EN"
|
|
142
|
+
adtcore:responsible="${username}">
|
|
143
|
+
<adtcore:packageRef adtcore:name="${args.package_name.toUpperCase()}"/>
|
|
144
|
+
<dtel:dataElement>
|
|
145
|
+
<dtel:typeKind>${typeKind}</dtel:typeKind>
|
|
146
|
+
${typeName ? `<dtel:typeName>${typeName}</dtel:typeName>` : '<dtel:typeName/>'}
|
|
147
|
+
${dataType ? `<dtel:dataType>${dataType}</dtel:dataType>` : '<dtel:dataType/>'}
|
|
148
|
+
<dtel:dataTypeLength>${String(dataTypeLength).padStart(6, '0')}</dtel:dataTypeLength>
|
|
149
|
+
<dtel:dataTypeDecimals>${String(dataTypeDecimals).padStart(6, '0')}</dtel:dataTypeDecimals>
|
|
150
|
+
<dtel:shortFieldLabel>${shortLabel}</dtel:shortFieldLabel>
|
|
151
|
+
<dtel:shortFieldLength>${shortLength}</dtel:shortFieldLength>
|
|
152
|
+
<dtel:shortFieldMaxLength>${shortMaxLength}</dtel:shortFieldMaxLength>
|
|
153
|
+
<dtel:mediumFieldLabel>${mediumLabel}</dtel:mediumFieldLabel>
|
|
154
|
+
<dtel:mediumFieldLength>${mediumLength}</dtel:mediumFieldLength>
|
|
155
|
+
<dtel:mediumFieldMaxLength>${mediumMaxLength}</dtel:mediumFieldMaxLength>
|
|
156
|
+
<dtel:longFieldLabel>${longLabel}</dtel:longFieldLabel>
|
|
157
|
+
<dtel:longFieldLength>${longLength}</dtel:longFieldLength>
|
|
158
|
+
<dtel:longFieldMaxLength>${longMaxLength}</dtel:longFieldMaxLength>
|
|
159
|
+
<dtel:headingFieldLabel>${headingLabel}</dtel:headingFieldLabel>
|
|
160
|
+
<dtel:headingFieldLength>${headingLength}</dtel:headingFieldLength>
|
|
161
|
+
<dtel:headingFieldMaxLength>${headingMaxLength}</dtel:headingFieldMaxLength>
|
|
162
|
+
${searchHelp ? `<dtel:searchHelp>${searchHelp}</dtel:searchHelp>` : '<dtel:searchHelp/>'}
|
|
163
|
+
${searchHelpParameter ? `<dtel:searchHelpParameter>${searchHelpParameter}</dtel:searchHelpParameter>` : '<dtel:searchHelpParameter/>'}
|
|
164
|
+
${setGetParameter ? `<dtel:setGetParameter>${setGetParameter}</dtel:setGetParameter>` : '<dtel:setGetParameter/>'}
|
|
165
|
+
${defaultComponentName ? `<dtel:defaultComponentName>${defaultComponentName}</dtel:defaultComponentName>` : '<dtel:defaultComponentName/>'}
|
|
166
|
+
<dtel:deactivateInputHistory>${deactivateInputHistory}</dtel:deactivateInputHistory>
|
|
167
|
+
<dtel:changeDocument>${changeDocument}</dtel:changeDocument>
|
|
168
|
+
<dtel:leftToRightDirection>${leftToRightDirection}</dtel:leftToRightDirection>
|
|
169
|
+
<dtel:deactivateBIDIFiltering>${deactivateBIDIFiltering}</dtel:deactivateBIDIFiltering>
|
|
170
|
+
</dtel:dataElement>
|
|
171
|
+
</blue:wbobj>`;
|
|
172
|
+
const headers = {
|
|
173
|
+
'Accept': 'application/vnd.sap.adt.dataelements.v1+xml, application/vnd.sap.adt.dataelements.v2+xml',
|
|
174
|
+
'Content-Type': 'application/vnd.sap.adt.dataelements.v2+xml; charset=utf-8'
|
|
175
|
+
};
|
|
176
|
+
// Debug: log XML when DEBUG_TESTS is enabled (formatted for readability)
|
|
177
|
+
if (process.env.DEBUG_TESTS === 'true') {
|
|
178
|
+
console.log('[UPDATE XML]');
|
|
179
|
+
// Format XML with indentation for readability
|
|
180
|
+
try {
|
|
181
|
+
const { XMLParser, XMLBuilder } = require('fast-xml-parser');
|
|
182
|
+
const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '' });
|
|
183
|
+
const builder = new XMLBuilder({
|
|
184
|
+
ignoreAttributes: false,
|
|
185
|
+
attributeNamePrefix: '',
|
|
186
|
+
format: true,
|
|
187
|
+
indentBy: ' '
|
|
188
|
+
});
|
|
189
|
+
const parsed = parser.parse(xmlBody);
|
|
190
|
+
const formatted = builder.build(parsed);
|
|
191
|
+
console.log(formatted);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// If formatting fails, just log as-is
|
|
195
|
+
console.log(xmlBody);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return (0, sessionUtils_1.makeAdtRequestWithSession)(connection, url, 'PUT', sessionId, xmlBody, headers);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Update ABAP data element
|
|
202
|
+
* Full workflow: get domain info -> lock -> update -> unlock -> activate
|
|
203
|
+
*/
|
|
204
|
+
async function updateDataElement(connection, params) {
|
|
205
|
+
if (!params.data_element_name) {
|
|
206
|
+
throw new Error('Data element name is required');
|
|
207
|
+
}
|
|
208
|
+
if (!params.package_name) {
|
|
209
|
+
throw new Error('Package name is required');
|
|
210
|
+
}
|
|
211
|
+
const sessionId = (0, sessionUtils_1.generateSessionId)();
|
|
212
|
+
const username = process.env.SAP_USER || process.env.SAP_USERNAME || 'MPCUSER';
|
|
213
|
+
let lockHandle = '';
|
|
214
|
+
try {
|
|
215
|
+
if (!params.type_kind) {
|
|
216
|
+
throw new Error('type_kind is required. Must be one of: domain, predefinedAbapType, refToPredefinedAbapType, refToDictionaryType, refToClifType');
|
|
217
|
+
}
|
|
218
|
+
const typeKind = params.type_kind;
|
|
219
|
+
let domainInfo = { dataType: 'CHAR', length: 100, decimals: 0 };
|
|
220
|
+
if (typeKind === 'domain') {
|
|
221
|
+
const domainName = params.type_name || params.domain_name || 'CHAR100';
|
|
222
|
+
domainInfo = await getDomainInfo(connection, domainName);
|
|
223
|
+
}
|
|
224
|
+
else if (typeKind === 'predefinedAbapType') {
|
|
225
|
+
domainInfo = {
|
|
226
|
+
dataType: params.data_type || 'CHAR',
|
|
227
|
+
length: params.length || 100,
|
|
228
|
+
decimals: params.decimals || 0
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
lockHandle = await (0, lock_1.lockDataElement)(connection, params.data_element_name, sessionId);
|
|
232
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
233
|
+
await updateDataElementInternal(connection, params, lockHandle, sessionId, username, domainInfo);
|
|
234
|
+
await (0, unlock_1.unlockDataElement)(connection, params.data_element_name, lockHandle, sessionId);
|
|
235
|
+
const shouldActivate = params.activate !== false;
|
|
236
|
+
if (shouldActivate) {
|
|
237
|
+
await (0, activation_1.activateDataElement)(connection, params.data_element_name, sessionId);
|
|
238
|
+
}
|
|
239
|
+
const updatedDataElement = await getDataElementForVerification(connection, params.data_element_name, sessionId);
|
|
240
|
+
return {
|
|
241
|
+
data: {
|
|
242
|
+
success: true,
|
|
243
|
+
data_element_name: params.data_element_name,
|
|
244
|
+
package: params.package_name,
|
|
245
|
+
transport_request: params.transport_request,
|
|
246
|
+
domain_name: params.domain_name,
|
|
247
|
+
status: shouldActivate ? 'active' : 'inactive',
|
|
248
|
+
session_id: sessionId,
|
|
249
|
+
message: `Data element ${params.data_element_name} updated${shouldActivate ? ' and activated' : ''} successfully`,
|
|
250
|
+
data_element_details: updatedDataElement
|
|
251
|
+
},
|
|
252
|
+
status: 200,
|
|
253
|
+
statusText: 'OK',
|
|
254
|
+
headers: {},
|
|
255
|
+
config: {}
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
if (lockHandle) {
|
|
260
|
+
try {
|
|
261
|
+
await (0, unlock_1.unlockDataElement)(connection, params.data_element_name, lockHandle, sessionId);
|
|
262
|
+
}
|
|
263
|
+
catch (unlockError) {
|
|
264
|
+
// Ignore unlock errors
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete operations - Common deletion logic for all object types
|
|
3
|
+
* All functions extracted 1:1 from handlers, adapted to accept connection as parameter
|
|
4
|
+
*/
|
|
5
|
+
import { AbapConnection } from '@mcp-abap-adt/connection';
|
|
6
|
+
import { AxiosResponse } from 'axios';
|
|
7
|
+
export interface DeleteObjectParams {
|
|
8
|
+
object_name: string;
|
|
9
|
+
object_type: string;
|
|
10
|
+
function_group_name?: string;
|
|
11
|
+
transport_request?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if object can be deleted (deletion check)
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkDeletion(connection: AbapConnection, params: DeleteObjectParams): Promise<AxiosResponse>;
|
|
17
|
+
/**
|
|
18
|
+
* Delete ABAP object using ADT deletion API
|
|
19
|
+
* For some object types (like interfaces), empty transportNumber tag is required
|
|
20
|
+
*/
|
|
21
|
+
export declare function deleteObject(connection: AbapConnection, params: DeleteObjectParams): Promise<AxiosResponse>;
|
|
22
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/core/delete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAyDD;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,aAAa,CAAC,CAoCxB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,aAAa,CAAC,CAoExB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Delete operations - Common deletion logic for all object types
|
|
4
|
+
* All functions extracted 1:1 from handlers, adapted to accept connection as parameter
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.checkDeletion = checkDeletion;
|
|
8
|
+
exports.deleteObject = deleteObject;
|
|
9
|
+
const connection_1 = require("@mcp-abap-adt/connection");
|
|
10
|
+
const internalUtils_1 = require("../utils/internalUtils");
|
|
11
|
+
/**
|
|
12
|
+
* Get ADT URI for object
|
|
13
|
+
*/
|
|
14
|
+
function getObjectUri(objectType, objectName, functionGroupName) {
|
|
15
|
+
const encodedName = (0, internalUtils_1.encodeSapObjectName)(objectName);
|
|
16
|
+
// Normalize object type (order matters! Check longer patterns first)
|
|
17
|
+
const type = objectType.toLowerCase()
|
|
18
|
+
.replace('clas/oc', 'class')
|
|
19
|
+
.replace('prog/p', 'program')
|
|
20
|
+
.replace('intf/oi', 'interface')
|
|
21
|
+
.replace('fugr/ff', 'function_module') // Check this BEFORE 'fugr/f'
|
|
22
|
+
.replace('fugr/f', 'function_group')
|
|
23
|
+
.replace('tabl/dt', 'table')
|
|
24
|
+
.replace('stru/dt', 'structure') // STRU/DT is used for structures
|
|
25
|
+
.replace('ttyp/st', 'structure')
|
|
26
|
+
.replace('ddls/df', 'view')
|
|
27
|
+
.replace('dtel/de', 'data_element')
|
|
28
|
+
.replace('doma/dd', 'domain') // DOMA/DD is also used for domains
|
|
29
|
+
.replace('doma/dm', 'domain');
|
|
30
|
+
switch (type) {
|
|
31
|
+
case 'class':
|
|
32
|
+
return `/sap/bc/adt/oo/classes/${encodedName}`;
|
|
33
|
+
case 'program':
|
|
34
|
+
return `/sap/bc/adt/programs/programs/${encodedName}`;
|
|
35
|
+
case 'interface':
|
|
36
|
+
return `/sap/bc/adt/oo/interfaces/${encodedName}`;
|
|
37
|
+
case 'function_group':
|
|
38
|
+
return `/sap/bc/adt/functions/groups/${encodedName}`;
|
|
39
|
+
case 'function_module':
|
|
40
|
+
if (!functionGroupName) {
|
|
41
|
+
throw new Error('function_group_name is required for function_module deletion');
|
|
42
|
+
}
|
|
43
|
+
const encodedGroupName = (0, internalUtils_1.encodeSapObjectName)(functionGroupName);
|
|
44
|
+
return `/sap/bc/adt/functions/groups/${encodedGroupName}/fmodules/${encodedName}`;
|
|
45
|
+
case 'table':
|
|
46
|
+
return `/sap/bc/adt/ddic/tables/${encodedName}`;
|
|
47
|
+
case 'structure':
|
|
48
|
+
return `/sap/bc/adt/ddic/structures/${encodedName}`;
|
|
49
|
+
case 'view':
|
|
50
|
+
return `/sap/bc/adt/ddic/ddl/sources/${encodedName}`;
|
|
51
|
+
case 'domain':
|
|
52
|
+
return `/sap/bc/adt/ddic/domains/${encodedName}`;
|
|
53
|
+
case 'data_element':
|
|
54
|
+
return `/sap/bc/adt/ddic/dataelements/${encodedName}`;
|
|
55
|
+
default:
|
|
56
|
+
throw new Error(`Unsupported object type: ${objectType}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if object can be deleted (deletion check)
|
|
61
|
+
*/
|
|
62
|
+
async function checkDeletion(connection, params) {
|
|
63
|
+
const { object_name, object_type, function_group_name } = params;
|
|
64
|
+
// Validation
|
|
65
|
+
if (!object_name || !object_type) {
|
|
66
|
+
throw new Error('object_name and object_type are required');
|
|
67
|
+
}
|
|
68
|
+
// Build object URI from object_name and object_type
|
|
69
|
+
const objectUri = getObjectUri(object_type, object_name, function_group_name);
|
|
70
|
+
const baseUrl = await connection.getBaseUrl();
|
|
71
|
+
const checkUrl = `${baseUrl}/sap/bc/adt/deletion/check`;
|
|
72
|
+
// Build XML check request (no transportNumber in check request)
|
|
73
|
+
const xmlPayload = `<?xml version="1.0" encoding="UTF-8"?>
|
|
74
|
+
<del:checkRequest xmlns:del="http://www.sap.com/adt/deletion" xmlns:adtcore="http://www.sap.com/adt/core">
|
|
75
|
+
<del:object adtcore:uri="${objectUri}"/>
|
|
76
|
+
</del:checkRequest>`;
|
|
77
|
+
const headers = {
|
|
78
|
+
'Accept': 'application/vnd.sap.adt.deletion.check.response.v1+xml',
|
|
79
|
+
'Content-Type': 'application/vnd.sap.adt.deletion.check.request.v1+xml'
|
|
80
|
+
};
|
|
81
|
+
return await connection.makeAdtRequest({
|
|
82
|
+
url: checkUrl,
|
|
83
|
+
method: 'POST',
|
|
84
|
+
timeout: (0, connection_1.getTimeout)('default'),
|
|
85
|
+
data: xmlPayload,
|
|
86
|
+
headers
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Delete ABAP object using ADT deletion API
|
|
91
|
+
* For some object types (like interfaces), empty transportNumber tag is required
|
|
92
|
+
*/
|
|
93
|
+
async function deleteObject(connection, params) {
|
|
94
|
+
const { object_name, object_type, function_group_name, transport_request } = params;
|
|
95
|
+
// Validation
|
|
96
|
+
if (!object_name || !object_type) {
|
|
97
|
+
throw new Error('object_name and object_type are required');
|
|
98
|
+
}
|
|
99
|
+
// Build object URI from object_name and object_type
|
|
100
|
+
const objectUri = getObjectUri(object_type, object_name, function_group_name);
|
|
101
|
+
const baseUrl = await connection.getBaseUrl();
|
|
102
|
+
const deletionUrl = `${baseUrl}/sap/bc/adt/deletion/delete`;
|
|
103
|
+
// Build XML deletion request
|
|
104
|
+
// For interfaces and some other object types, empty transportNumber tag is required
|
|
105
|
+
// For structures, empty tag causes failure, so we omit it entirely
|
|
106
|
+
const normalizedType = object_type.toLowerCase();
|
|
107
|
+
const requiresEmptyTransportTag = normalizedType.includes('intf') ||
|
|
108
|
+
normalizedType.includes('clas') ||
|
|
109
|
+
normalizedType.includes('prog');
|
|
110
|
+
let transportNumberTag = '';
|
|
111
|
+
if (transport_request && transport_request.trim()) {
|
|
112
|
+
transportNumberTag = `<del:transportNumber>${transport_request}</del:transportNumber>`;
|
|
113
|
+
}
|
|
114
|
+
else if (requiresEmptyTransportTag) {
|
|
115
|
+
// For interfaces, classes, programs: add empty self-closing tag
|
|
116
|
+
transportNumberTag = '<del:transportNumber/>';
|
|
117
|
+
}
|
|
118
|
+
// For structures and other types: omit tag entirely if no transport_request
|
|
119
|
+
const xmlPayload = `<?xml version="1.0" encoding="UTF-8"?>
|
|
120
|
+
<del:deletionRequest xmlns:del="http://www.sap.com/adt/deletion" xmlns:adtcore="http://www.sap.com/adt/core">
|
|
121
|
+
<del:object adtcore:uri="${objectUri}">
|
|
122
|
+
${transportNumberTag}
|
|
123
|
+
</del:object>
|
|
124
|
+
</del:deletionRequest>`;
|
|
125
|
+
const headers = {
|
|
126
|
+
'Accept': 'application/vnd.sap.adt.deletion.response.v1+xml',
|
|
127
|
+
'Content-Type': 'application/vnd.sap.adt.deletion.request.v1+xml'
|
|
128
|
+
};
|
|
129
|
+
const response = await connection.makeAdtRequest({
|
|
130
|
+
url: deletionUrl,
|
|
131
|
+
method: 'POST',
|
|
132
|
+
timeout: (0, connection_1.getTimeout)('default'),
|
|
133
|
+
data: xmlPayload,
|
|
134
|
+
headers
|
|
135
|
+
});
|
|
136
|
+
// Return success response
|
|
137
|
+
return {
|
|
138
|
+
...response,
|
|
139
|
+
data: {
|
|
140
|
+
success: true,
|
|
141
|
+
object_name,
|
|
142
|
+
object_type,
|
|
143
|
+
object_uri: objectUri,
|
|
144
|
+
transport_request: transport_request || 'local',
|
|
145
|
+
message: `Object ${object_name} deleted successfully`
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DomainBuilder - Fluent API for domain operations with Promise chaining
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Method chaining: builder.create().then(b => b.lock()).then(b => b.update())...
|
|
6
|
+
* - Error handling: .catch() for error callbacks
|
|
7
|
+
* - Cleanup: .finally() for guaranteed execution
|
|
8
|
+
* - Result storage: all results stored in logger/state
|
|
9
|
+
* - Chain interruption: chain stops on first error (standard Promise behavior)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const builder = new DomainBuilder(connection, logger, {
|
|
14
|
+
* domainName: 'Z_TEST_DOMAIN',
|
|
15
|
+
* packageName: 'ZOK_TEST_PKG_01'
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* await builder
|
|
19
|
+
* .create()
|
|
20
|
+
* .then(b => b.lock())
|
|
21
|
+
* .then(b => b.update())
|
|
22
|
+
* .then(b => b.check())
|
|
23
|
+
* .then(b => b.unlock())
|
|
24
|
+
* .then(b => b.activate())
|
|
25
|
+
* .catch(error => {
|
|
26
|
+
* logger.error('Operation failed:', error);
|
|
27
|
+
* })
|
|
28
|
+
* .finally(() => {
|
|
29
|
+
* // Cleanup - always executes
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
import { AbapConnection } from '@mcp-abap-adt/connection';
|
|
34
|
+
import { AxiosResponse } from 'axios';
|
|
35
|
+
import { FixedValue } from './types';
|
|
36
|
+
import { ValidationResult } from '../shared/validation';
|
|
37
|
+
export interface DomainBuilderLogger {
|
|
38
|
+
debug?: (message: string, ...args: any[]) => void;
|
|
39
|
+
info?: (message: string, ...args: any[]) => void;
|
|
40
|
+
warn?: (message: string, ...args: any[]) => void;
|
|
41
|
+
error?: (message: string, ...args: any[]) => void;
|
|
42
|
+
}
|
|
43
|
+
export interface DomainBuilderConfig {
|
|
44
|
+
domainName: string;
|
|
45
|
+
packageName?: string;
|
|
46
|
+
transportRequest?: string;
|
|
47
|
+
description?: string;
|
|
48
|
+
datatype?: string;
|
|
49
|
+
length?: number;
|
|
50
|
+
decimals?: number;
|
|
51
|
+
conversion_exit?: string;
|
|
52
|
+
lowercase?: boolean;
|
|
53
|
+
sign_exists?: boolean;
|
|
54
|
+
value_table?: string;
|
|
55
|
+
fixed_values?: FixedValue[];
|
|
56
|
+
sessionId?: string;
|
|
57
|
+
onLock?: (lockHandle: string, sessionId: string) => void;
|
|
58
|
+
}
|
|
59
|
+
export interface DomainBuilderState {
|
|
60
|
+
validationResult?: ValidationResult;
|
|
61
|
+
createResult?: AxiosResponse;
|
|
62
|
+
lockHandle?: string;
|
|
63
|
+
updateResult?: AxiosResponse;
|
|
64
|
+
checkResult?: AxiosResponse;
|
|
65
|
+
unlockResult?: AxiosResponse;
|
|
66
|
+
activateResult?: AxiosResponse;
|
|
67
|
+
readResult?: AxiosResponse;
|
|
68
|
+
transportResult?: AxiosResponse;
|
|
69
|
+
errors: Array<{
|
|
70
|
+
method: string;
|
|
71
|
+
error: Error;
|
|
72
|
+
timestamp: Date;
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
75
|
+
export declare class DomainBuilder {
|
|
76
|
+
private connection;
|
|
77
|
+
private logger;
|
|
78
|
+
private config;
|
|
79
|
+
private lockHandle?;
|
|
80
|
+
private sessionId;
|
|
81
|
+
private state;
|
|
82
|
+
constructor(connection: AbapConnection, logger: DomainBuilderLogger, config: DomainBuilderConfig);
|
|
83
|
+
setPackage(packageName: string): this;
|
|
84
|
+
setRequest(transportRequest: string): this;
|
|
85
|
+
setName(domainName: string): this;
|
|
86
|
+
setDescription(description: string): this;
|
|
87
|
+
setDatatype(datatype: string): this;
|
|
88
|
+
setLength(length: number): this;
|
|
89
|
+
setDecimals(decimals: number): this;
|
|
90
|
+
setConversionExit(conversion_exit: string): this;
|
|
91
|
+
setLowercase(lowercase: boolean): this;
|
|
92
|
+
setSignExists(sign_exists: boolean): this;
|
|
93
|
+
setValueTable(value_table: string): this;
|
|
94
|
+
setFixedValues(fixed_values: FixedValue[]): this;
|
|
95
|
+
validate(): Promise<this>;
|
|
96
|
+
create(): Promise<this>;
|
|
97
|
+
lock(): Promise<this>;
|
|
98
|
+
update(): Promise<this>;
|
|
99
|
+
check(version?: 'active' | 'inactive'): Promise<this>;
|
|
100
|
+
unlock(): Promise<this>;
|
|
101
|
+
activate(): Promise<this>;
|
|
102
|
+
read(): Promise<this>;
|
|
103
|
+
readTransport(): Promise<this>;
|
|
104
|
+
forceUnlock(): Promise<void>;
|
|
105
|
+
getState(): Readonly<DomainBuilderState>;
|
|
106
|
+
getDomainName(): string;
|
|
107
|
+
getLockHandle(): string | undefined;
|
|
108
|
+
getSessionId(): string;
|
|
109
|
+
getCreateResult(): AxiosResponse | undefined;
|
|
110
|
+
getUpdateResult(): AxiosResponse | undefined;
|
|
111
|
+
getCheckResult(): AxiosResponse | undefined;
|
|
112
|
+
getUnlockResult(): AxiosResponse | undefined;
|
|
113
|
+
getActivateResult(): AxiosResponse | undefined;
|
|
114
|
+
getReadResult(): AxiosResponse | undefined;
|
|
115
|
+
getTransportResult(): AxiosResponse | undefined;
|
|
116
|
+
getErrors(): ReadonlyArray<{
|
|
117
|
+
method: string;
|
|
118
|
+
error: Error;
|
|
119
|
+
timestamp: Date;
|
|
120
|
+
}>;
|
|
121
|
+
getResults(): {
|
|
122
|
+
create?: AxiosResponse;
|
|
123
|
+
update?: AxiosResponse;
|
|
124
|
+
check?: AxiosResponse;
|
|
125
|
+
unlock?: AxiosResponse;
|
|
126
|
+
activate?: AxiosResponse;
|
|
127
|
+
lockHandle?: string;
|
|
128
|
+
errors: Array<{
|
|
129
|
+
method: string;
|
|
130
|
+
error: Error;
|
|
131
|
+
timestamp: Date;
|
|
132
|
+
}>;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=DomainBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/domain/DomainBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAStC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAsB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI5E,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAqB;gBAGhC,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB;IAY7B,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMrC,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAM1C,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMjC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnC,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;IAKhD,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKtC,aAAa,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAKzC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKxC,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI;IAO1C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BzB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA8EvB,KAAK,CAAC,OAAO,GAAE,QAAQ,GAAG,UAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBlC,QAAQ,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIxC,aAAa,IAAI,MAAM;IAIvB,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC,YAAY,IAAI,MAAM;IAItB,eAAe,IAAI,aAAa,GAAG,SAAS;IAI5C,eAAe,IAAI,aAAa,GAAG,SAAS;IAI5C,cAAc,IAAI,aAAa,GAAG,SAAS;IAI3C,eAAe,IAAI,aAAa,GAAG,SAAS;IAI5C,iBAAiB,IAAI,aAAa,GAAG,SAAS;IAI9C,aAAa,IAAI,aAAa,GAAG,SAAS;IAI1C,kBAAkB,IAAI,aAAa,GAAG,SAAS;IAI/C,SAAS,IAAI,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;IAK7E,UAAU,IAAI;QACZ,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,KAAK,CAAC;YAAC,SAAS,EAAE,IAAI,CAAA;SAAE,CAAC,CAAC;KAClE;CAWF"}
|