@mcp-abap-adt/adt-clients 37.4.0 → 39.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 +303 -45
- package/dist/clients/AdtAbapGitClient.d.ts +13 -3
- package/dist/clients/AdtAbapGitClient.d.ts.map +1 -1
- package/dist/clients/AdtAbapGitClient.js +15 -6
- package/dist/clients/AdtClient.d.ts +123 -211
- package/dist/clients/AdtClient.d.ts.map +1 -1
- package/dist/clients/AdtClient.js +226 -43
- package/dist/clients/AdtClientVariants.d.ts +16 -0
- package/dist/clients/AdtClientVariants.d.ts.map +1 -0
- package/dist/clients/AdtClientVariants.js +20 -0
- package/dist/clients/AdtExecutor.d.ts +39 -7
- package/dist/clients/AdtExecutor.d.ts.map +1 -1
- package/dist/clients/AdtExecutor.js +26 -26
- package/dist/clients/AdtRuntimeClient.d.ts +22 -11
- package/dist/clients/AdtRuntimeClient.d.ts.map +1 -1
- package/dist/clients/AdtRuntimeClient.js +44 -23
- package/dist/clients/createAdtClient.d.ts +22 -8
- package/dist/clients/createAdtClient.d.ts.map +1 -1
- package/dist/clients/createAdtClient.js +12 -9
- package/dist/clients/variant.d.ts +80 -0
- package/dist/clients/variant.d.ts.map +1 -0
- package/dist/clients/variant.js +22 -0
- package/dist/constants/contentTypes.d.ts +8 -1
- package/dist/constants/contentTypes.d.ts.map +1 -1
- package/dist/constants/contentTypes.js +11 -4
- package/dist/constants/typeCodes.d.ts +45 -0
- package/dist/constants/typeCodes.d.ts.map +1 -0
- package/dist/constants/typeCodes.js +44 -0
- package/dist/core/accessControl/AdtAccessControl.d.ts +25 -6
- package/dist/core/accessControl/AdtAccessControl.d.ts.map +1 -1
- package/dist/core/accessControl/AdtAccessControl.js +21 -9
- package/dist/core/accessControl/check.d.ts.map +1 -1
- package/dist/core/accessControl/check.js +1 -1
- package/dist/core/accessControl/create.d.ts.map +1 -1
- package/dist/core/accessControl/create.js +2 -1
- package/dist/core/accessControl/types.d.ts +13 -31
- package/dist/core/accessControl/types.d.ts.map +1 -1
- package/dist/core/accessControl/types.js +1 -0
- package/dist/core/appendStructure/AdtAppendStructure.d.ts +5 -6
- package/dist/core/appendStructure/AdtAppendStructure.d.ts.map +1 -1
- package/dist/core/appendStructure/AdtAppendStructure.js +4 -6
- package/dist/core/appendStructure/check.d.ts.map +1 -1
- package/dist/core/appendStructure/check.js +1 -1
- package/dist/core/appendStructure/create.d.ts.map +1 -1
- package/dist/core/appendStructure/create.js +2 -1
- package/dist/core/appendStructure/types.d.ts +12 -31
- package/dist/core/appendStructure/types.d.ts.map +1 -1
- package/dist/core/authorizationField/AdtAuthorizationField.d.ts +6 -6
- package/dist/core/authorizationField/AdtAuthorizationField.d.ts.map +1 -1
- package/dist/core/authorizationField/AdtAuthorizationField.js +4 -9
- package/dist/core/authorizationField/types.d.ts +9 -23
- package/dist/core/authorizationField/types.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts +25 -6
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/AdtBehaviorDefinition.js +21 -9
- package/dist/core/behaviorDefinition/create.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/create.js +2 -1
- package/dist/core/behaviorDefinition/types.d.ts +14 -31
- package/dist/core/behaviorDefinition/types.d.ts.map +1 -1
- package/dist/core/behaviorDefinition/types.js +1 -0
- package/dist/core/behaviorImplementation/AdtBehaviorImplementation.d.ts +5 -6
- package/dist/core/behaviorImplementation/AdtBehaviorImplementation.d.ts.map +1 -1
- package/dist/core/behaviorImplementation/AdtBehaviorImplementation.js +9 -13
- package/dist/core/behaviorImplementation/read.js +2 -2
- package/dist/core/behaviorImplementation/types.d.ts +1 -1
- package/dist/core/behaviorImplementation/types.d.ts.map +1 -1
- package/dist/core/behaviorImplementation/validation.d.ts.map +1 -1
- package/dist/core/behaviorImplementation/validation.js +3 -2
- package/dist/core/class/AdtClass.d.ts +21 -8
- package/dist/core/class/AdtClass.d.ts.map +1 -1
- package/dist/core/class/AdtClass.js +21 -9
- package/dist/core/class/AdtClassMemberBase.d.ts +15 -4
- package/dist/core/class/AdtClassMemberBase.d.ts.map +1 -1
- package/dist/core/class/AdtLocalDefinitions.d.ts +7 -7
- package/dist/core/class/AdtLocalDefinitions.d.ts.map +1 -1
- package/dist/core/class/AdtLocalDefinitions.js +4 -6
- package/dist/core/class/AdtLocalMacros.d.ts +7 -7
- package/dist/core/class/AdtLocalMacros.d.ts.map +1 -1
- package/dist/core/class/AdtLocalMacros.js +4 -6
- package/dist/core/class/AdtLocalTestClass.d.ts +7 -7
- package/dist/core/class/AdtLocalTestClass.d.ts.map +1 -1
- package/dist/core/class/AdtLocalTestClass.js +4 -6
- package/dist/core/class/AdtLocalTypes.d.ts +7 -7
- package/dist/core/class/AdtLocalTypes.d.ts.map +1 -1
- package/dist/core/class/AdtLocalTypes.js +4 -6
- package/dist/core/class/check.d.ts.map +1 -1
- package/dist/core/class/check.js +2 -2
- package/dist/core/class/create.d.ts.map +1 -1
- package/dist/core/class/create.js +3 -2
- package/dist/core/class/read.d.ts.map +1 -1
- package/dist/core/class/read.js +2 -2
- package/dist/core/class/types.d.ts +15 -54
- package/dist/core/class/types.d.ts.map +1 -1
- package/dist/core/class/types.js +1 -0
- package/dist/core/class/validation.d.ts.map +1 -1
- package/dist/core/class/validation.js +4 -3
- package/dist/core/dataElement/AdtDataElement.d.ts +5 -5
- package/dist/core/dataElement/AdtDataElement.d.ts.map +1 -1
- package/dist/core/dataElement/AdtDataElement.js +4 -9
- package/dist/core/dataElement/check.d.ts.map +1 -1
- package/dist/core/dataElement/check.js +1 -1
- package/dist/core/dataElement/create.d.ts.map +1 -1
- package/dist/core/dataElement/create.js +2 -1
- package/dist/core/dataElement/types.d.ts +10 -25
- package/dist/core/dataElement/types.d.ts.map +1 -1
- package/dist/core/ddl/AdtDdl.d.ts +31 -11
- package/dist/core/ddl/AdtDdl.d.ts.map +1 -1
- package/dist/core/ddl/AdtDdl.js +22 -9
- package/dist/core/ddl/check.d.ts.map +1 -1
- package/dist/core/ddl/check.js +1 -1
- package/dist/core/ddl/create.d.ts.map +1 -1
- package/dist/core/ddl/create.js +2 -1
- package/dist/core/ddl/read.js +2 -2
- package/dist/core/ddl/types.d.ts +14 -37
- package/dist/core/ddl/types.d.ts.map +1 -1
- package/dist/core/ddl/types.js +1 -0
- package/dist/core/domain/AdtDomain.d.ts +5 -5
- package/dist/core/domain/AdtDomain.d.ts.map +1 -1
- package/dist/core/domain/AdtDomain.js +4 -9
- package/dist/core/domain/check.d.ts.map +1 -1
- package/dist/core/domain/check.js +1 -1
- package/dist/core/domain/create.d.ts.map +1 -1
- package/dist/core/domain/create.js +2 -1
- package/dist/core/domain/types.d.ts +10 -25
- package/dist/core/domain/types.d.ts.map +1 -1
- package/dist/core/enhancement/AdtEnhancement.d.ts +32 -8
- package/dist/core/enhancement/AdtEnhancement.d.ts.map +1 -1
- package/dist/core/enhancement/AdtEnhancement.js +4 -9
- package/dist/core/enhancement/index.d.ts +2 -2
- package/dist/core/enhancement/index.d.ts.map +1 -1
- package/dist/core/enhancement/read.d.ts +6 -0
- package/dist/core/enhancement/read.d.ts.map +1 -1
- package/dist/core/enhancement/read.js +10 -1
- package/dist/core/enhancement/types.d.ts +18 -35
- package/dist/core/enhancement/types.d.ts.map +1 -1
- package/dist/core/featureToggle/AdtFeatureToggle.d.ts +5 -5
- package/dist/core/featureToggle/AdtFeatureToggle.d.ts.map +1 -1
- package/dist/core/featureToggle/AdtFeatureToggle.js +4 -9
- package/dist/core/featureToggle/types.d.ts +14 -37
- package/dist/core/featureToggle/types.d.ts.map +1 -1
- package/dist/core/featureToggle/xmlBuilder.d.ts.map +1 -1
- package/dist/core/featureToggle/xmlBuilder.js +2 -1
- package/dist/core/functionGroup/AdtFunctionGroup.d.ts +35 -16
- package/dist/core/functionGroup/AdtFunctionGroup.d.ts.map +1 -1
- package/dist/core/functionGroup/AdtFunctionGroup.js +30 -13
- package/dist/core/functionGroup/activation.d.ts +8 -1
- package/dist/core/functionGroup/activation.d.ts.map +1 -1
- package/dist/core/functionGroup/activation.js +11 -2
- package/dist/core/functionGroup/check.d.ts.map +1 -1
- package/dist/core/functionGroup/check.js +2 -2
- package/dist/core/functionGroup/create.d.ts.map +1 -1
- package/dist/core/functionGroup/create.js +2 -1
- package/dist/core/functionGroup/read.d.ts +4 -0
- package/dist/core/functionGroup/read.d.ts.map +1 -1
- package/dist/core/functionGroup/read.js +17 -0
- package/dist/core/functionGroup/types.d.ts +13 -31
- package/dist/core/functionGroup/types.d.ts.map +1 -1
- package/dist/core/functionGroup/types.js +1 -0
- package/dist/core/functionGroup/update.d.ts +5 -0
- package/dist/core/functionGroup/update.d.ts.map +1 -1
- package/dist/core/functionGroup/update.js +18 -0
- package/dist/core/functionGroup/validation.d.ts.map +1 -1
- package/dist/core/functionGroup/validation.js +2 -1
- package/dist/core/functionInclude/AdtFunctionInclude.d.ts +24 -18
- package/dist/core/functionInclude/AdtFunctionInclude.d.ts.map +1 -1
- package/dist/core/functionInclude/AdtFunctionInclude.js +4 -6
- package/dist/core/functionInclude/types.d.ts +12 -32
- package/dist/core/functionInclude/types.d.ts.map +1 -1
- package/dist/core/functionInclude/xmlBuilder.d.ts.map +1 -1
- package/dist/core/functionInclude/xmlBuilder.js +3 -2
- package/dist/core/functionModule/AdtFunctionModule.d.ts +38 -18
- package/dist/core/functionModule/AdtFunctionModule.d.ts.map +1 -1
- package/dist/core/functionModule/AdtFunctionModule.js +23 -6
- package/dist/core/functionModule/create.d.ts.map +1 -1
- package/dist/core/functionModule/create.js +3 -2
- package/dist/core/functionModule/read.js +2 -2
- package/dist/core/functionModule/types.d.ts +13 -31
- package/dist/core/functionModule/types.d.ts.map +1 -1
- package/dist/core/functionModule/types.js +1 -0
- package/dist/core/functionModule/validation.d.ts.map +1 -1
- package/dist/core/functionModule/validation.js +9 -6
- package/dist/core/include/AdtInclude.d.ts +27 -8
- package/dist/core/include/AdtInclude.d.ts.map +1 -1
- package/dist/core/include/AdtInclude.js +26 -19
- package/dist/core/include/create.d.ts.map +1 -1
- package/dist/core/include/create.js +2 -1
- package/dist/core/include/types.d.ts +11 -27
- package/dist/core/include/types.d.ts.map +1 -1
- package/dist/core/include/types.js +1 -0
- package/dist/core/interface/AdtInterface.d.ts +27 -8
- package/dist/core/interface/AdtInterface.d.ts.map +1 -1
- package/dist/core/interface/AdtInterface.js +21 -6
- package/dist/core/interface/check.d.ts.map +1 -1
- package/dist/core/interface/check.js +1 -1
- package/dist/core/interface/create.d.ts.map +1 -1
- package/dist/core/interface/create.js +2 -1
- package/dist/core/interface/read.js +2 -2
- package/dist/core/interface/types.d.ts +13 -31
- package/dist/core/interface/types.d.ts.map +1 -1
- package/dist/core/interface/types.js +1 -0
- package/dist/core/interface/validation.d.ts.map +1 -1
- package/dist/core/interface/validation.js +2 -1
- package/dist/core/messageClass/AdtMessageClass.d.ts +14 -9
- package/dist/core/messageClass/AdtMessageClass.d.ts.map +1 -1
- package/dist/core/messageClass/AdtMessageClass.js +4 -6
- package/dist/core/messageClass/AdtMessageClassMessage.d.ts +5 -5
- package/dist/core/messageClass/AdtMessageClassMessage.d.ts.map +1 -1
- package/dist/core/messageClass/AdtMessageClassMessage.js +4 -6
- package/dist/core/messageClass/types.d.ts +10 -35
- package/dist/core/messageClass/types.d.ts.map +1 -1
- package/dist/core/messageClass/xml.d.ts.map +1 -1
- package/dist/core/messageClass/xml.js +23 -5
- package/dist/core/metadataExtension/AdtMetadataExtension.d.ts +25 -6
- package/dist/core/metadataExtension/AdtMetadataExtension.d.ts.map +1 -1
- package/dist/core/metadataExtension/AdtMetadataExtension.js +20 -9
- package/dist/core/metadataExtension/check.d.ts.map +1 -1
- package/dist/core/metadataExtension/check.js +1 -4
- package/dist/core/metadataExtension/create.d.ts.map +1 -1
- package/dist/core/metadataExtension/create.js +2 -1
- package/dist/core/metadataExtension/types.d.ts +13 -31
- package/dist/core/metadataExtension/types.d.ts.map +1 -1
- package/dist/core/metadataExtension/types.js +1 -0
- package/dist/core/metadataExtension/validation.js +1 -1
- package/dist/core/package/AdtPackage.d.ts +5 -5
- package/dist/core/package/AdtPackage.d.ts.map +1 -1
- package/dist/core/package/AdtPackage.js +4 -6
- package/dist/core/package/create.d.ts.map +1 -1
- package/dist/core/package/create.js +2 -1
- package/dist/core/package/types.d.ts +9 -23
- package/dist/core/package/types.d.ts.map +1 -1
- package/dist/core/program/AdtProgram.d.ts +27 -8
- package/dist/core/program/AdtProgram.d.ts.map +1 -1
- package/dist/core/program/AdtProgram.js +22 -10
- package/dist/core/program/check.d.ts.map +1 -1
- package/dist/core/program/check.js +1 -1
- package/dist/core/program/create.d.ts.map +1 -1
- package/dist/core/program/create.js +2 -1
- package/dist/core/program/read.js +2 -2
- package/dist/core/program/types.d.ts +15 -37
- package/dist/core/program/types.d.ts.map +1 -1
- package/dist/core/program/types.js +1 -0
- package/dist/core/program/validation.d.ts.map +1 -1
- package/dist/core/program/validation.js +2 -1
- package/dist/core/scalarFunction/AdtScalarFunction.d.ts +26 -7
- package/dist/core/scalarFunction/AdtScalarFunction.d.ts.map +1 -1
- package/dist/core/scalarFunction/AdtScalarFunction.js +21 -9
- package/dist/core/scalarFunction/check.d.ts.map +1 -1
- package/dist/core/scalarFunction/check.js +1 -1
- package/dist/core/scalarFunction/create.d.ts.map +1 -1
- package/dist/core/scalarFunction/create.js +2 -1
- package/dist/core/scalarFunction/types.d.ts +13 -31
- package/dist/core/scalarFunction/types.d.ts.map +1 -1
- package/dist/core/scalarFunction/types.js +1 -0
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts +6 -6
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.js +4 -9
- package/dist/core/scalarFunctionImplementation/check.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/check.js +1 -1
- package/dist/core/scalarFunctionImplementation/create.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/create.js +2 -1
- package/dist/core/scalarFunctionImplementation/types.d.ts +14 -34
- package/dist/core/scalarFunctionImplementation/types.d.ts.map +1 -1
- package/dist/core/service/AdtService.d.ts +29 -7
- package/dist/core/service/AdtService.d.ts.map +1 -1
- package/dist/core/service/AdtService.js +25 -4
- package/dist/core/service/index.d.ts +1 -1
- package/dist/core/service/index.d.ts.map +1 -1
- package/dist/core/service/types.d.ts +14 -88
- package/dist/core/service/types.d.ts.map +1 -1
- package/dist/core/service/types.js +1 -0
- package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts +25 -6
- package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts.map +1 -1
- package/dist/core/serviceDefinition/AdtServiceDefinition.js +21 -9
- package/dist/core/serviceDefinition/check.d.ts.map +1 -1
- package/dist/core/serviceDefinition/check.js +1 -1
- package/dist/core/serviceDefinition/create.d.ts.map +1 -1
- package/dist/core/serviceDefinition/create.js +2 -1
- package/dist/core/serviceDefinition/types.d.ts +13 -31
- package/dist/core/serviceDefinition/types.d.ts.map +1 -1
- package/dist/core/serviceDefinition/types.js +1 -0
- package/dist/core/shared/AdtUtils.d.ts +59 -29
- package/dist/core/shared/AdtUtils.d.ts.map +1 -1
- package/dist/core/shared/AdtUtils.js +90 -35
- package/dist/core/shared/abapUnit.d.ts +32 -6
- package/dist/core/shared/abapUnit.d.ts.map +1 -1
- package/dist/core/shared/abapUnit.js +79 -24
- package/dist/core/shared/capabilities/statefulSession.js +2 -2
- package/dist/core/shared/codeSets.d.ts +162 -0
- package/dist/core/shared/codeSets.d.ts.map +1 -0
- package/dist/core/shared/codeSets.js +73 -0
- package/dist/core/shared/documentWrite.d.ts +17 -0
- package/dist/core/shared/documentWrite.d.ts.map +1 -0
- package/dist/core/shared/documentWrite.js +27 -0
- package/dist/core/shared/groupActivation.d.ts +3 -2
- package/dist/core/shared/groupActivation.d.ts.map +1 -1
- package/dist/core/shared/groupActivation.js +1 -2
- package/dist/core/shared/groupDeletion.d.ts +4 -3
- package/dist/core/shared/groupDeletion.d.ts.map +1 -1
- package/dist/core/shared/handlerOptions.d.ts +45 -0
- package/dist/core/shared/handlerOptions.d.ts.map +1 -0
- package/dist/core/shared/handlerOptions.js +2 -0
- package/dist/core/shared/nodeStructure.d.ts +2 -2
- package/dist/core/shared/nodeStructure.d.ts.map +1 -1
- package/dist/core/shared/objectStructure.d.ts +2 -1
- package/dist/core/shared/objectStructure.d.ts.map +1 -1
- package/dist/core/shared/objectWire.d.ts +24 -7
- package/dist/core/shared/objectWire.d.ts.map +1 -1
- package/dist/core/shared/objectWire.js +36 -141
- package/dist/core/shared/typeStructure.d.ts +14 -0
- package/dist/core/shared/typeStructure.d.ts.map +1 -0
- package/dist/core/shared/typeStructure.js +22 -0
- package/dist/core/shared/types.d.ts +1 -1
- package/dist/core/shared/types.d.ts.map +1 -1
- package/dist/core/shared/utilResultSet.d.ts +21 -85
- package/dist/core/shared/utilResultSet.d.ts.map +1 -1
- package/dist/core/shared/whereUsed.d.ts +29 -14
- package/dist/core/shared/whereUsed.d.ts.map +1 -1
- package/dist/core/shared/whereUsed.js +15 -46
- package/dist/core/structure/AdtStructure.d.ts +25 -6
- package/dist/core/structure/AdtStructure.d.ts.map +1 -1
- package/dist/core/structure/AdtStructure.js +21 -9
- package/dist/core/structure/check.d.ts.map +1 -1
- package/dist/core/structure/check.js +1 -1
- package/dist/core/structure/create.d.ts.map +1 -1
- package/dist/core/structure/create.js +2 -1
- package/dist/core/structure/read.js +2 -2
- package/dist/core/structure/types.d.ts +13 -31
- package/dist/core/structure/types.d.ts.map +1 -1
- package/dist/core/structure/types.js +1 -0
- package/dist/core/table/AdtTable.d.ts +25 -6
- package/dist/core/table/AdtTable.d.ts.map +1 -1
- package/dist/core/table/AdtTable.js +21 -9
- package/dist/core/table/create.d.ts.map +1 -1
- package/dist/core/table/create.js +2 -1
- package/dist/core/table/read.d.ts.map +1 -1
- package/dist/core/table/read.js +2 -2
- package/dist/core/table/types.d.ts +13 -31
- package/dist/core/table/types.d.ts.map +1 -1
- package/dist/core/table/types.js +1 -0
- package/dist/core/tabletype/AdtDdicTableType.d.ts +5 -5
- package/dist/core/tabletype/AdtDdicTableType.d.ts.map +1 -1
- package/dist/core/tabletype/AdtDdicTableType.js +4 -9
- package/dist/core/tabletype/create.d.ts.map +1 -1
- package/dist/core/tabletype/create.js +2 -1
- package/dist/core/tabletype/types.d.ts +12 -31
- package/dist/core/tabletype/types.d.ts.map +1 -1
- package/dist/core/transformation/AdtTransformation.d.ts +25 -6
- package/dist/core/transformation/AdtTransformation.d.ts.map +1 -1
- package/dist/core/transformation/AdtTransformation.js +21 -9
- package/dist/core/transformation/check.d.ts.map +1 -1
- package/dist/core/transformation/check.js +1 -1
- package/dist/core/transformation/create.d.ts.map +1 -1
- package/dist/core/transformation/create.js +2 -1
- package/dist/core/transformation/types.d.ts +14 -31
- package/dist/core/transformation/types.d.ts.map +1 -1
- package/dist/core/transformation/types.js +1 -0
- package/dist/core/transport/AdtRequest.d.ts +25 -19
- package/dist/core/transport/AdtRequest.d.ts.map +1 -1
- package/dist/core/transport/AdtRequest.js +6 -8
- package/dist/core/transport/types.d.ts +15 -77
- package/dist/core/transport/types.d.ts.map +1 -1
- package/dist/endpoints/codes.d.ts +74 -0
- package/dist/endpoints/codes.d.ts.map +1 -0
- package/dist/endpoints/codes.js +95 -0
- package/dist/executors/abapUnitRunner.d.ts +15 -6
- package/dist/executors/abapUnitRunner.d.ts.map +1 -1
- package/dist/executors/abapUnitRunner.js +2 -1
- package/dist/executors/abapUnitTestRunner.d.ts +107 -0
- package/dist/executors/abapUnitTestRunner.d.ts.map +1 -0
- package/dist/executors/abapUnitTestRunner.js +99 -0
- package/dist/executors/class/ClassExecutor.d.ts +12 -6
- package/dist/executors/class/ClassExecutor.d.ts.map +1 -1
- package/dist/executors/class/ClassExecutor.js +3 -4
- package/dist/executors/class/ClassTestRunner.d.ts +7 -6
- package/dist/executors/class/ClassTestRunner.d.ts.map +1 -1
- package/dist/executors/class/ClassTestRunner.js +2 -4
- package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts +7 -6
- package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts.map +1 -1
- package/dist/executors/functionGroup/FunctionGroupTestRunner.js +2 -4
- package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts +7 -6
- package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts.map +1 -1
- package/dist/executors/functionModule/FunctionModuleTestRunner.js +2 -4
- package/dist/executors/index.d.ts +1 -0
- package/dist/executors/index.d.ts.map +1 -1
- package/dist/executors/index.js +4 -1
- package/dist/executors/program/ProgramExecutor.d.ts +12 -6
- package/dist/executors/program/ProgramExecutor.d.ts.map +1 -1
- package/dist/executors/program/ProgramExecutor.js +3 -4
- package/dist/executors/program/ProgramTestRunner.d.ts +7 -6
- package/dist/executors/program/ProgramTestRunner.d.ts.map +1 -1
- package/dist/executors/program/ProgramTestRunner.js +2 -4
- package/dist/executors/traceScheduling.d.ts +2 -1
- package/dist/executors/traceScheduling.d.ts.map +1 -1
- package/dist/executors/traceScheduling.js +2 -4
- package/dist/index.core.d.ts +9 -5
- package/dist/index.core.d.ts.map +1 -1
- package/dist/index.core.js +13 -2
- package/dist/index.executors.d.ts +1 -0
- package/dist/index.executors.d.ts.map +1 -1
- package/dist/index.executors.js +4 -1
- package/dist/index.readings.d.ts +7 -35
- package/dist/index.readings.d.ts.map +1 -1
- package/dist/index.readings.js +8 -6
- package/dist/index.runtime.d.ts +1 -1
- package/dist/index.runtime.d.ts.map +1 -1
- package/dist/runtime/applicationLog/ApplicationLog.d.ts +4 -4
- package/dist/runtime/applicationLog/ApplicationLog.d.ts.map +1 -1
- package/dist/runtime/applicationLog/ApplicationLog.js +5 -7
- package/dist/runtime/atc/AdtAtc.d.ts +3 -3
- package/dist/runtime/atc/AdtAtc.d.ts.map +1 -1
- package/dist/runtime/atc/AdtAtc.js +4 -6
- package/dist/runtime/atc/AtcLog.d.ts +4 -4
- package/dist/runtime/atc/AtcLog.d.ts.map +1 -1
- package/dist/runtime/atc/AtcLog.js +5 -7
- package/dist/runtime/ddic/DdicActivation.d.ts +4 -4
- package/dist/runtime/ddic/DdicActivation.d.ts.map +1 -1
- package/dist/runtime/ddic/DdicActivation.js +5 -7
- package/dist/runtime/debugger/AbapDebugger.d.ts +15 -3
- package/dist/runtime/debugger/AbapDebugger.d.ts.map +1 -1
- package/dist/runtime/debugger/AbapDebugger.js +10 -5
- package/dist/runtime/debugger/AmdpDebugger.d.ts +10 -3
- package/dist/runtime/debugger/AmdpDebugger.d.ts.map +1 -1
- package/dist/runtime/debugger/AmdpDebugger.js +9 -5
- package/dist/runtime/debugger/index.d.ts +1 -1
- package/dist/runtime/debugger/index.d.ts.map +1 -1
- package/dist/runtime/dumps/RuntimeDumps.d.ts +4 -4
- package/dist/runtime/dumps/RuntimeDumps.d.ts.map +1 -1
- package/dist/runtime/dumps/RuntimeDumps.js +5 -7
- package/dist/runtime/feeds/FeedRepository.d.ts +4 -4
- package/dist/runtime/feeds/FeedRepository.d.ts.map +1 -1
- package/dist/runtime/feeds/FeedRepository.js +5 -7
- package/dist/runtime/gatewayErrorLog/GatewayErrorLog.d.ts +4 -4
- package/dist/runtime/gatewayErrorLog/GatewayErrorLog.d.ts.map +1 -1
- package/dist/runtime/gatewayErrorLog/GatewayErrorLog.js +5 -7
- package/dist/runtime/memory/MemorySnapshots.d.ts +10 -3
- package/dist/runtime/memory/MemorySnapshots.d.ts.map +1 -1
- package/dist/runtime/memory/MemorySnapshots.js +9 -5
- package/dist/runtime/systemMessages/SystemMessages.d.ts +4 -4
- package/dist/runtime/systemMessages/SystemMessages.d.ts.map +1 -1
- package/dist/runtime/systemMessages/SystemMessages.js +5 -7
- package/dist/runtime/traces/CrossTraceDomain.d.ts +4 -4
- package/dist/runtime/traces/CrossTraceDomain.d.ts.map +1 -1
- package/dist/runtime/traces/CrossTraceDomain.js +5 -7
- package/dist/runtime/traces/ProfilerDomain.d.ts +4 -3
- package/dist/runtime/traces/ProfilerDomain.d.ts.map +1 -1
- package/dist/runtime/traces/ProfilerDomain.js +5 -7
- package/dist/runtime/traces/St05Trace.d.ts +4 -4
- package/dist/runtime/traces/St05Trace.d.ts.map +1 -1
- package/dist/runtime/traces/St05Trace.js +5 -7
- package/dist/utils/activationUtils.d.ts +19 -6
- package/dist/utils/activationUtils.d.ts.map +1 -1
- package/dist/utils/activationUtils.js +40 -132
- package/dist/utils/checkRun.d.ts +10 -6
- package/dist/utils/checkRun.d.ts.map +1 -1
- package/dist/utils/checkRun.js +12 -69
- package/dist/utils/criticalSection.d.ts +2 -1
- package/dist/utils/criticalSection.d.ts.map +1 -1
- package/dist/utils/criticalSection.js +31 -3
- package/dist/utils/requestTrace.d.ts.map +1 -1
- package/dist/utils/requestTrace.js +5 -6
- package/docs/README.md +5 -3
- package/docs/usage/ADT_OBJECT_ENTITIES.md +79 -10
- package/docs/usage/ANSWER_SHAPES.md +3 -2
- package/docs/usage/CLIENT_API_REFERENCE.md +125 -39
- package/docs/usage/ERRATA.md +2 -2
- package/docs/usage/MIGRATION-38.md +507 -0
- package/docs/usage/MIGRATION-39.md +150 -0
- package/docs/usage/OBJECT_LIFECYCLE.md +23 -10
- package/docs/usage/RFC_CONNECTION.md +3 -2
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -16,6 +16,29 @@ TypeScript clients for SAP ABAP Development Tools (ADT).
|
|
|
16
16
|
> **From 18.x?** Read [`docs/usage/MIGRATION-19.md`](docs/usage/MIGRATION-19.md)
|
|
17
17
|
> first: 19.0.0 is where members became one endpoint call each.
|
|
18
18
|
>
|
|
19
|
+
> **From 38.x?** 39.0.0 (on `interfaces-adt` ^24.0.1) types the search filter
|
|
20
|
+
> by the release's search names: `getUtils().search({ objectType })` takes
|
|
21
|
+
> `'DEVC'`, `'STRU'` or a group (`'ABAP_TEST_COCKPIT'`), not a code
|
|
22
|
+
> (`'DEVC/K'`), and a 7.40 client takes only the eleven names 7.40 selects by.
|
|
23
|
+
> Where-used and the group members take interfaces-adt's typed references —
|
|
24
|
+
> `VIEW/DV` compiles, a function module names its group — so `getUtils()`
|
|
25
|
+
> satisfies `IAdtTypedWhereUsed<…, V>` and `IAdtTypedGroupLifecycle<…, V>`.
|
|
26
|
+
> See [Release variants and type codes](#release-variants-and-type-codes) and
|
|
27
|
+
> [`docs/usage/MIGRATION-39.md`](docs/usage/MIGRATION-39.md).
|
|
28
|
+
>
|
|
29
|
+
> **From 37.x?** 38.0.0 (on `interfaces-adt` ^23.1.1) is typed by the ADT type
|
|
30
|
+
> tables: a client is fixed to its release variant (`AdtClientOnPrem`,
|
|
31
|
+
> `AdtClientCloud`, `createAdtClient(connection, { variant })`), every type
|
|
32
|
+
> code is a code of the tables (the `AdtObjectType*` unions, friendly names,
|
|
33
|
+
> `FUNC` and the other codes no table holds are gone), an API with a parent
|
|
34
|
+
> takes it, and `updateMetadata` is there for fifteen more types. It also puts
|
|
35
|
+
> each contract where it is accepted: the result-set contracts (`IClassResults`,
|
|
36
|
+
> …) are imported from `@mcp-abap-adt/interfaces-adt`, and each factory answers
|
|
37
|
+
> its class — a consumer composes the contract it accepts from interfaces-adt.
|
|
38
|
+
> See [Release variants and type codes](#release-variants-and-type-codes),
|
|
39
|
+
> [The contract you accept is yours](#the-contract-you-accept-is-yours) and
|
|
40
|
+
> [`docs/usage/MIGRATION-38.md`](docs/usage/MIGRATION-38.md).
|
|
41
|
+
>
|
|
19
42
|
> **From 36.x?** 37.0.0 (on `interfaces-adt` ^20.1.0) makes
|
|
20
43
|
> `getSystemInformation` answer an `IAdtResponse` — present, absent (a `404`)
|
|
21
44
|
> or failed — and adds the required `objectProperties` slot to `IUtilResults`
|
|
@@ -104,7 +127,7 @@ This package interacts with external packages **ONLY through interfaces**:
|
|
|
104
127
|
|
|
105
128
|
| package | what this package takes from it |
|
|
106
129
|
|---|---|
|
|
107
|
-
| [`@mcp-abap-adt/interfaces-adt`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt) `^
|
|
130
|
+
| [`@mcp-abap-adt/interfaces-adt`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt) `^23.1.1` | the ADT type tables (`ADT_TYPES_ONPREM`, `ADT_TYPES_CLOUD`, `ADT_TYPES_BASIS_740`) and their code types (`AdtTypeCode`, …), the ABAP Unit run registry (`ABAP_UNIT_RUN_TYPES`, `AbapUnitRunObjectType`, `AbapUnitRunTarget`), the capability atoms, every object's config, the result-set contracts, `IAdtAnsweredObject`, `IAdtResponse`, `IAnalyse`, `IAdtAnalyseOptions`, `IAdtHeaders`, `IResultStrategy`, `ADT_NO_FAILURE`, `ADT_TASK_TYPE` |
|
|
108
131
|
| [`@mcp-abap-adt/interfaces-adt-connection`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt-connection) `^3.0.0` | `IAbapConnection`, `IAdtWireResponse`, `IAbapRequestOptions`, the connection capability atoms, `ADT_SESSION_ERROR` |
|
|
109
132
|
| [`@mcp-abap-adt/interfaces-network`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-network) `^2.0.1` | `IWebSocketTransport` and its four companions, `HttpError` |
|
|
110
133
|
| [`@mcp-abap-adt/interfaces-utils`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-utils) `^1.1.1` | `ILogger`, `LogLevel`, `XmlNode` |
|
|
@@ -146,7 +169,8 @@ npm install @mcp-abap-adt/adt-clients
|
|
|
146
169
|
- Every answer is a contract — a result or a failure, never a throw
|
|
147
170
|
- Utility functions via `client.getUtils()`
|
|
148
171
|
- Example: `await client.getClass().create({...}, { headers })` — the POST, and nothing else
|
|
149
|
-
- **
|
|
172
|
+
- **Fixed to a release variant** (since 38.0.0): `AdtClientOnPrem` (S/4HANA 2025, `ADT_TYPES_ONPREM`), `AdtClientCloud` (ABAP cloud, `ADT_TYPES_CLOUD`), or a plain `AdtClient` served what both serve. A factory or member the variant's table lacks does not compile — see [Release variants and type codes](#release-variants-and-type-codes)
|
|
173
|
+
- **Legacy systems (SAP_BASIS 7.40, measured on 7.40 SP04) are a separate package**, [`@mcp-abap-adt/adt-clients-legacy`](https://github.com/fr0ster/mcp-abap-adt-clients/blob/main/packages/adt-clients-legacy/README.md): its `AdtClientLegacy` and `AdtExecutorLegacy` extend this package's classes. The consumer declares the system type by constructing them over an RFC connection (`new AdtClientLegacy(connection, logger)`); nothing here detects a system, and `createAdtClient(connection, { variant })` answers the declared modern variant's client and sends no request. They are **RFC clients**, supported and measured on SAP_BASIS 7.40 SP04 over RFC only — HTTP to a legacy system is unsupported. What each member does on 7.40 is in that package's [README](https://github.com/fr0ster/mcp-abap-adt-clients/blob/main/packages/adt-clients-legacy/README.md) and [LEGACY.md](https://github.com/fr0ster/mcp-abap-adt-clients/blob/main/packages/adt-clients-legacy/docs/LEGACY.md)
|
|
150
174
|
|
|
151
175
|
2. **AdtRuntimeClient**
|
|
152
176
|
- Stable runtime operations for traces, dumps, logs, feeds, ATC check runs, and more
|
|
@@ -161,13 +185,14 @@ npm install @mcp-abap-adt/adt-clients
|
|
|
161
185
|
- `getClassTestRunner()` for a class's ABAP Unit tests: `run`, `getStatus`, `getResult` (asynchronous, the default), or `runSync` (synchronous)
|
|
162
186
|
- `getProgramTestRunner()` for a report's ABAP Unit tests, in its source or its includes — `run` (asynchronous, the default) or `runSync`
|
|
163
187
|
- `getFunctionGroupTestRunner()` / `getFunctionModuleTestRunner()` for a function group's tests, or a module's — `run` (asynchronous, the default) or `runSync`
|
|
188
|
+
- `getAbapUnitTestRunner()`, the generic runner: `run` of an object target of any type the run registry `ABAP_UNIT_RUN_TYPES` lists (a class include, a CDS view's assigned tests, …) or of a package target, `runSync` of ADT URIs, `getStatus`, `getResult`
|
|
164
189
|
- `getProgramExecutor()` for `programrun` (on-premise systems)
|
|
165
190
|
- Methods: `run`, `runWithProfiler`, and trace scheduling (`scheduleTrace`, `listRequests`, `getRequestsByUri`, `listObjectTypes`, `listProcessTypes`)
|
|
166
191
|
- Each executor factory takes an optional result set, like the runtime client's
|
|
167
192
|
- `createAdtExecutor(connection)` returns `AdtExecutor`, like `createAdtClient` detecting nothing. The legacy executor, `AdtExecutorLegacy` of `@mcp-abap-adt/adt-clients-legacy` (SAP_BASIS 7.40 SP04, over RFC), runs ABAP Unit through the synchronous `/abapunit/testruns` request for every runner, and refuses without a request what 7.40 does not serve — the class run (`/oo/classrun`, measured `404`), `getStatus`/`getResult` (no run id) and a function module's `run` (it names no group) — and, until a run measures them, what 7.40 SP04 does not advertise: the program run (`programrun`) and the trace type lists — see [LEGACY.md](https://github.com/fr0ster/mcp-abap-adt-clients/blob/main/packages/adt-clients-legacy/docs/LEGACY.md#abap-unit-runners-and-executors)
|
|
168
193
|
|
|
169
194
|
4. **AdtAbapGitClient**
|
|
170
|
-
- Standalone
|
|
195
|
+
- Standalone, not a factory on `AdtClient`: `AdtAbapGitClient.create(connection, { logger? })` answers the shipped documents (`abapGitDocuments`), `AdtAbapGitClient.create(connection, { logger?, results })` the caller's (since 38.0.0); `new AdtAbapGitClient(connection, { logger?, results })` takes its results always (the options argument, `contentTypeVersion`, was removed in 36.0.0)
|
|
171
196
|
- `link`, `pull`, `unlink({ repositoryId })`, `listRepos`, `getErrorLog(logLink)`, `checkExternalRepo` — one request each; `pull` does not wait
|
|
172
197
|
|
|
173
198
|
5. **AdtClientsWS**
|
|
@@ -175,7 +200,7 @@ npm install @mcp-abap-adt/adt-clients
|
|
|
175
200
|
- Example: `await wsClient.request('<operation>', { … })` against a backend that speaks its envelope
|
|
176
201
|
|
|
177
202
|
6. **AbapDebugger, AmdpDebugger, MemorySnapshots**
|
|
178
|
-
- Standalone, from `@mcp-abap-adt/adt-clients/runtime` or the root: `
|
|
203
|
+
- Standalone, from `@mcp-abap-adt/adt-clients/runtime` or the root: `AbapDebugger.create(connection, { logger?, onConflict? })` answers the shipped documents (`abapDebuggerDocuments`), `AbapDebugger.create(connection, { results, logger?, onConflict? })` the caller's; likewise `AmdpDebugger.create` and `MemorySnapshots.create` (`{ logger?, results? }`, since 38.0.0). `new AbapDebugger(connection, { results, logger?, onConflict? })` takes its results always
|
|
179
204
|
- One member per request, contracts `IAbapDebugger`, `IAmdpDebugger`, `IMemorySnapshots` from `@mcp-abap-adt/interfaces-adt` (contract 18 pairs with clients 32)
|
|
180
205
|
- **The identity states its mode.** `{ debuggingMode: 'user', requestUser, terminalId, ideId }`, or `{ debuggingMode: 'terminal', terminalId, ideId }`; `attach` takes the identity, not the user. A terminal-mode listener catches a run that carries its ids: `run(target, { debuggee: { terminalId, ideId } })` sends them in `SAP-PASSPORT` (since 29.1.0)
|
|
181
206
|
- **Breakpoints are replaced, not added to.** `setBreakpoints` and `syncBreakpoints` replace the identity's set, and `stopListener` deletes it: arm the whole set in one call
|
|
@@ -184,28 +209,51 @@ npm install @mcp-abap-adt/adt-clients
|
|
|
184
209
|
|
|
185
210
|
## Supported Object Types
|
|
186
211
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
|
195
|
-
|
|
196
|
-
|
|
|
197
|
-
|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
207
|
-
|
|
|
208
|
-
|
|
|
212
|
+
What the library serves is declared by the ADT type tables of
|
|
213
|
+
`@mcp-abap-adt/interfaces-adt`, one per release variant; the factory is the
|
|
214
|
+
API, the codes are the tables'. ✅ the variant's table holds the API, — it does
|
|
215
|
+
not (the factory does not compile there). 7.40 is `AdtClientLegacy` of
|
|
216
|
+
`@mcp-abap-adt/adt-clients-legacy`, which serves less than its table lists
|
|
217
|
+
where 7.40 is not measured (its [LEGACY.md](https://github.com/fr0ster/mcp-abap-adt-clients/blob/main/packages/adt-clients-legacy/docs/LEGACY.md)).
|
|
218
|
+
|
|
219
|
+
| Object type | Factory | Codes | On premise | Cloud | 7.40 |
|
|
220
|
+
|---|---|---|---|---|---|
|
|
221
|
+
| Classes | `getClass()` | `CLAS/OC` | ✅ | ✅ | ✅ |
|
|
222
|
+
| Behavior implementations | `getBehaviorImplementation()` | `CLAS/OC` | ✅ | ✅ | — |
|
|
223
|
+
| Behavior definitions | `getBehaviorDefinition()` | `BDEF/BDO` | ✅ | ✅ | — |
|
|
224
|
+
| Interfaces | `getInterface()` | `INTF/OI` | ✅ | ✅ | ✅ |
|
|
225
|
+
| Programs | `getProgram()` | `PROG/P` | ✅ | ✅ | ✅ |
|
|
226
|
+
| Includes | `getInclude()` | `PROG/I` | ✅ | ✅ | ✅ |
|
|
227
|
+
| Enhancements | `getEnhancement()` | `ENHO/XHH`, `ENHO/XHB`, `ENHS/XSB` | ✅ | ✅ | — |
|
|
228
|
+
| Function groups | `getFunctionGroup()` | `FUGR/F` | ✅ | ✅ | ✅ |
|
|
229
|
+
| Function modules | `getFunctionModule()` | `FUGR/FF`, under its group | ✅ | ✅ | ✅ |
|
|
230
|
+
| Function includes | `getFunctionInclude()` | `FUGR/I`, under its group | ✅ | ✅ | ✅ |
|
|
231
|
+
| Domains | `getDomain()` | `DOMA/DD` | ✅ | ✅ | — |
|
|
232
|
+
| Data elements | `getDataElement()` | `DTEL/DE` | ✅ | ✅ | — |
|
|
233
|
+
| Structures | `getStructure()` | `TABL/DS` | ✅ | ✅ | — |
|
|
234
|
+
| Append structures | `getAppendStructure()` | `TABL/DS` | ✅ | ✅ | — |
|
|
235
|
+
| Tables | `getTable()` | `TABL/DT` | ✅ | ✅ | — |
|
|
236
|
+
| Table types | `getTableType()` | `TTYP/DA` | ✅ | ✅ | — |
|
|
237
|
+
| DDL sources (CDS views) | `getDdl()` | `DDLS/DF` | ✅ | ✅ | ✅ |
|
|
238
|
+
| Access controls | `getAccessControl()` | `DCLS/DL` | ✅ | ✅ | — |
|
|
239
|
+
| Metadata extensions | `getMetadataExtension()` | `DDLX/EX` | ✅ | ✅ | — |
|
|
240
|
+
| Service definitions | `getServiceDefinition()` | `SRVD/SRV` | ✅ | ✅ | — |
|
|
241
|
+
| Service bindings | `getServiceBinding()` | `SRVB/SVB` | ✅ | ✅ | — |
|
|
242
|
+
| Scalar functions | `getScalarFunction()` | `DSFD/SCF` | ✅ | ✅ | — |
|
|
243
|
+
| Scalar function implementations | `getScalarFunctionImplementation()` | `DSFI/SFI` | ✅ | ✅ | — |
|
|
244
|
+
| Transformations | `getTransformation()` | `XSLT/VT` | ✅ | ✅ | — |
|
|
245
|
+
| Message classes | `getMessageClass()` | `MSAG/N` | ✅ | ✅ | ✅ |
|
|
246
|
+
| Messages | `getMessageClassMessage()` | `MSAG/NN`, read from its class | ✅ | ✅ | ✅ |
|
|
247
|
+
| Packages | `getPackage()` | `DEVC/K` | ✅ | ✅ | — |
|
|
248
|
+
| Authorization fields | `getAuthorizationField()` | `AUTH` | ✅ | ✅ | — |
|
|
249
|
+
| Feature toggles | `getFeatureToggle()` | `FTG2/FT` | ✅ | ✅ | — |
|
|
250
|
+
| Local includes of a class | `getLocalTestClass()`, `getLocalTypes()`, `getLocalDefinitions()`, `getLocalMacros()` | — | ✅ | ✅ | ✅ |
|
|
251
|
+
| Transport requests | `getRequest()` | — | ✅ | ✅ | ✅ |
|
|
252
|
+
|
|
253
|
+
Which operations each code has — `source`, `updateMetadata`, `run`, … — is the
|
|
254
|
+
code's `operations` in the table; a member whose operation the variant's table
|
|
255
|
+
does not list for the code does not compile (`getProgram().updateMetadata()`
|
|
256
|
+
on a cloud client, say).
|
|
209
257
|
|
|
210
258
|
`getEnhancement().updateMetadata()` writes the whole object document from
|
|
211
259
|
`options.source` under the caller's lock, then the caller unlocks and activates.
|
|
@@ -229,7 +277,7 @@ import {
|
|
|
229
277
|
AdtOnPremConnector,
|
|
230
278
|
OnPremHttpTransport,
|
|
231
279
|
} from '@mcp-abap-adt/connection';
|
|
232
|
-
import {
|
|
280
|
+
import { AdtClientOnPrem, utilDocuments } from '@mcp-abap-adt/adt-clients';
|
|
233
281
|
import {
|
|
234
282
|
utilSearchHits,
|
|
235
283
|
utilWhereUsedReferences,
|
|
@@ -265,7 +313,9 @@ const connection = new AdtOnPremConnector(
|
|
|
265
313
|
// surfacing later as `400 Session not found` mid-edit.
|
|
266
314
|
await connection.connect();
|
|
267
315
|
|
|
268
|
-
|
|
316
|
+
// The release variant is yours to declare, like the system: an on-premise
|
|
317
|
+
// client is typed by ADT_TYPES_ONPREM (AdtClientCloud for ABAP cloud).
|
|
318
|
+
const client = new AdtClientOnPrem(connection, console);
|
|
269
319
|
|
|
270
320
|
// One member, one request: this is the POST that makes the class shell.
|
|
271
321
|
// Writing its source and activating it are calls of your own, below.
|
|
@@ -305,6 +355,8 @@ const utils = client.getUtils({
|
|
|
305
355
|
whereUsed: utilWhereUsedReferences,
|
|
306
356
|
});
|
|
307
357
|
|
|
358
|
+
// The filter is a search name of the release's object types list — `CLAS`,
|
|
359
|
+
// an alias such as `STRU` (structures alone), a group — not a code.
|
|
308
360
|
const found = await utils.search({ query: 'Z*', objectType: 'CLAS' });
|
|
309
361
|
if (found.ok) {
|
|
310
362
|
found.getResult().value; // ISearchResult[] — the document, without utilSearchHits
|
|
@@ -318,7 +370,7 @@ if (found.ok) {
|
|
|
318
370
|
// /usageReferences/scope sub-resource (some S/4 releases 404 it) is a decision
|
|
319
371
|
// about your system, so it is yours rather than a fallback hidden in here.
|
|
320
372
|
const scope = await utils.getWhereUsedScope(
|
|
321
|
-
{ object_name: 'ZMY_TABLE', object_type: '
|
|
373
|
+
{ object_name: 'ZMY_TABLE', object_type: 'TABL/DT' },
|
|
322
374
|
{ headers: WHERE_USED_SCOPE },
|
|
323
375
|
);
|
|
324
376
|
if (!scope.ok) {
|
|
@@ -334,7 +386,7 @@ const narrowed = utils.modifyWhereUsedScope(scope.getResult().value, {
|
|
|
334
386
|
});
|
|
335
387
|
|
|
336
388
|
const answer = await utils.getWhereUsed(
|
|
337
|
-
{ object_name: 'ZMY_TABLE', object_type: '
|
|
389
|
+
{ object_name: 'ZMY_TABLE', object_type: 'TABL/DT', scopeXml: narrowed },
|
|
338
390
|
{ headers: WHERE_USED },
|
|
339
391
|
);
|
|
340
392
|
|
|
@@ -344,7 +396,8 @@ if (answer.ok) {
|
|
|
344
396
|
const references = answer.getResult().value;
|
|
345
397
|
console.log(`Found ${references.totalReferences} references`);
|
|
346
398
|
for (const ref of references.references) {
|
|
347
|
-
|
|
399
|
+
// `type` for a code of the tables, `unknownType` for any other text.
|
|
400
|
+
console.log(`${ref.name} (${ref.type ?? ref.unknownType}) in ${ref.packageName}`);
|
|
348
401
|
}
|
|
349
402
|
}
|
|
350
403
|
```
|
|
@@ -508,14 +561,61 @@ Doc test relation (`"! @testing FUNC:<module>`) on a test class, the default
|
|
|
508
561
|
scope answered the group's tests as a preview (`isForeign="true"`, nothing
|
|
509
562
|
executed) and `scope: { foreignTests: true }` ran them.
|
|
510
563
|
|
|
511
|
-
**
|
|
512
|
-
|
|
564
|
+
**The generic runner, `getAbapUnitTestRunner()`.** The four runners above each
|
|
565
|
+
fix the `osl:object type` they send (`CLAS`, `PROG`, `FUGR`, `FUNC`). The
|
|
566
|
+
generic one takes it from the caller, typed `AbapUnitRunObjectType` — every key
|
|
567
|
+
of `ABAP_UNIT_RUN_TYPES` in `@mcp-abap-adt/interfaces-adt`, and nothing else —
|
|
568
|
+
or runs a package:
|
|
513
569
|
|
|
514
570
|
```typescript
|
|
515
|
-
import
|
|
571
|
+
import { abapUnitTestRunnerDocuments } from '@mcp-abap-adt/adt-clients';
|
|
516
572
|
|
|
517
|
-
|
|
518
|
-
|
|
573
|
+
const generic = executor.getAbapUnitTestRunner({
|
|
574
|
+
...abapUnitTestRunnerDocuments,
|
|
575
|
+
run: unitTestRunId,
|
|
576
|
+
});
|
|
577
|
+
// An object target: one osl:object in an osl:flatObjectSet.
|
|
578
|
+
await generic.run({ kind: 'object', name: 'ZCL_UNDER_TEST', type: 'CLAS/OC' });
|
|
579
|
+
// A CDS view's tests are assigned tests: they execute only with foreignTests.
|
|
580
|
+
await generic.run(
|
|
581
|
+
{ kind: 'object', name: 'ZI_VIEW', type: 'DDLS/DF' },
|
|
582
|
+
{ scope: { foreignTests: true }, analyse: analyseUnitTestStart },
|
|
583
|
+
);
|
|
584
|
+
// A package target: an osl:packageSet with one osl:package.
|
|
585
|
+
await generic.run({ kind: 'package', name: '$ZPKG', includeSubpackages: true });
|
|
586
|
+
// ADT URIs, on /abapunit/testruns, with the request's headers.
|
|
587
|
+
await generic.runSync(['/sap/bc/adt/oo/classes/zcl_under_test'], {
|
|
588
|
+
headers: { accept: 'application/xml', contentType: 'application/xml' },
|
|
589
|
+
analyse: analyseUnitTest,
|
|
590
|
+
});
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
Both targets go to `POST /sap/bc/adt/abapunit/runs` and are polled with
|
|
594
|
+
`getStatus` and `getResult`, as every runner's. **A CDS view holds no test
|
|
595
|
+
class**: its tests are local test classes elsewhere — a class's testclasses
|
|
596
|
+
include — marked `"! @testing <view>`, and they execute by `DDLS/DF` (or
|
|
597
|
+
`DDLS`) only when the scope sets `foreignTests: true`. Without it, the default
|
|
598
|
+
`addForeignTestsAsPreview: true` lists them in the result **without executing
|
|
599
|
+
them**: every method is there with no alert, so a failing test looks like a
|
|
600
|
+
pass; with the preview off too, the result is empty (measured 2026-10-29 on
|
|
601
|
+
S/4HANA 2025 and ABAP cloud). **A consumer reading a CDS run sets
|
|
602
|
+
`foreignTests: true`.** **A package** runs only as an `osl:packageSet` — `osl:object
|
|
603
|
+
type="DEVC/K"` answered empty (measured 2026-10-29, S/4HANA 2025 and ABAP
|
|
604
|
+
cloud). **A wrong type is not an error**: the endpoint answers the start `201`
|
|
605
|
+
and the result as an empty `<aunit:runResult/>`, which is why the type is the
|
|
606
|
+
compiler's to check. On a legacy system the generic runner keeps `runSync` and
|
|
607
|
+
refuses a target run, `getStatus` and `getResult` without a request (7.40 has
|
|
608
|
+
no `/abapunit/runs`).
|
|
609
|
+
|
|
610
|
+
**AdtUtils read type safety:**
|
|
611
|
+
`readObjectMetadata` and `readObjectSource` take the codes of the tables they
|
|
612
|
+
read (`AdtMetadataReadCode`, `AdtSourceReadCode`), so `'view'` or `'CLAS'` does
|
|
613
|
+
not compile, and a function module's group is required:
|
|
614
|
+
|
|
615
|
+
```typescript
|
|
616
|
+
await utils.readObjectMetadata('DDLS/DF', 'ZOK_I_CDS_TEST');
|
|
617
|
+
await utils.readObjectSource('DDLS/DF', 'ZOK_I_CDS_TEST');
|
|
618
|
+
await utils.readObjectSource('FUGR/FF', 'Z_MY_FM', 'ZMY_GROUP');
|
|
519
619
|
```
|
|
520
620
|
|
|
521
621
|
**Benefits:**
|
|
@@ -578,10 +678,13 @@ change what you mean to change, pass the result. Anything you leave out is gone,
|
|
|
578
678
|
because nothing is read on your behalf to keep it.
|
|
579
679
|
|
|
580
680
|
For a class, a program or a DDL source the whole content is the **full source**.
|
|
581
|
-
For domain, package, dataElement, tableType, transport
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
the message class until 23.0.0, and none of them does now.
|
|
681
|
+
For domain, package, dataElement, tableType, transport and message class it is
|
|
682
|
+
the object's own **document**, passed as `options.source` to `updateMetadata` —
|
|
683
|
+
the first five and the function group fetched and patched it for you until
|
|
684
|
+
19.0.0, the message class until 23.0.0, and none of them does now. Every type
|
|
685
|
+
that has both — a class, a function group, a table, … (38.0.0 added
|
|
686
|
+
`updateMetadata` to fifteen of them) — writes its metadata document the same way:
|
|
687
|
+
read it, change it, pass the whole document back.
|
|
585
688
|
|
|
586
689
|
```typescript
|
|
587
690
|
const cls = client.getClass();
|
|
@@ -694,6 +797,53 @@ The script uses the same environment variables as the main package:
|
|
|
694
797
|
|
|
695
798
|
See [Tools Documentation](tools/README.md) for complete details and options.
|
|
696
799
|
|
|
800
|
+
### The type tables' conformance check
|
|
801
|
+
|
|
802
|
+
The ADT type tables of `@mcp-abap-adt/interfaces-adt` (`ADT_TYPES_ONPREM`,
|
|
803
|
+
`ADT_TYPES_CLOUD`, `ADT_TYPES_BASIS_740`) are held to what each release
|
|
804
|
+
answers: its `typestructure`, its `discovery` and, per sample object, its
|
|
805
|
+
`urimapper` and metadata answers. The answers are recorded in `corpus/adt/`
|
|
806
|
+
(`typestructure/`, `discovery/`, `conformance/<release>/`; see
|
|
807
|
+
[`corpus/README.md`](corpus/README.md)). The search type tables
|
|
808
|
+
(`ADT_SEARCH_TYPES_ONPREM`, `_CLOUD`, `_BASIS_740`) are held to each
|
|
809
|
+
release's recorded object types list, or on 7.40 its recorded quick searches
|
|
810
|
+
(`informationsystem/<release>/`), by
|
|
811
|
+
`src/__tests__/unit/conformance/searchTypesConformance.test.ts`: the table
|
|
812
|
+
equals the list name for name and type for type, every `main` of the type
|
|
813
|
+
table is a search name, every evidence name is a recorded case.
|
|
814
|
+
|
|
815
|
+
- **In CI** — `src/__tests__/unit/conformance/typeTablesConformance.test.ts`
|
|
816
|
+
runs the check against the recorded answers. What it finds is committed
|
|
817
|
+
beside it: the known divergences with their reasons, the list of creates
|
|
818
|
+
without `CREATE` and the collections that advertise no `app:accept` for an
|
|
819
|
+
`updateMetadata` (`recorded.ts`), and the coverage (`coverage.json`). A
|
|
820
|
+
change that changes what the check finds is an edit of those lists.
|
|
821
|
+
- **On a live system** — `src/__tests__/integration/shared/typeTablesConformance.test.ts`
|
|
822
|
+
reads the same endpoints for the configured variant (`environment.system`)
|
|
823
|
+
and runs the same check. It prints the system's identity and writes it
|
|
824
|
+
nowhere:
|
|
825
|
+
|
|
826
|
+
```bash
|
|
827
|
+
MCP_ENV_PATH=<env> MCP_TEST_OVERLAY=<overlay> \
|
|
828
|
+
npm test -- src/__tests__/integration/shared/typeTablesConformance.test.ts
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
**Refreshing a release's answers.** Run the live check with
|
|
832
|
+
`CONFORMANCE_WRITE_DIR=<dir>` (refused when `CI` is set). It writes the
|
|
833
|
+
answers, scrubbed with the corpus placeholders, under `<dir>` in the corpus
|
|
834
|
+
layout: `typestructure/system-description-<release>--07-typestructure.*`,
|
|
835
|
+
`discovery/system-description-<release>--03-discovery.*` and
|
|
836
|
+
`conformance/<release>/` with its `_index.json`. Then:
|
|
837
|
+
|
|
838
|
+
1. Review the written files: no host, user, system id or token may be left
|
|
839
|
+
(`src/__tests__/unit/corpusCarriesNoIdentity.test.ts` checks the corpus).
|
|
840
|
+
2. Copy them over the release's files in `corpus/adt/`. A written
|
|
841
|
+
`_index.json` carries the sample, statuses, both addresses and the files;
|
|
842
|
+
keep the recorded index's notes and reasons where they still hold.
|
|
843
|
+
3. Run `npm run corpus:format`, then the unit tests; edit `recorded.ts` and
|
|
844
|
+
`coverage.json` for what the check now finds, with a reason for each
|
|
845
|
+
divergence.
|
|
846
|
+
|
|
697
847
|
## API Reference
|
|
698
848
|
|
|
699
849
|
### AdtClient Overview
|
|
@@ -868,7 +1018,7 @@ await client.getClass().read(
|
|
|
868
1018
|
```
|
|
869
1019
|
|
|
870
1020
|
- Factory accessors for ADT objects: `client.getClass()`, `client.getProgram()`, `client.getDdl()` (DDL sources — CDS views, AMDP table functions; formerly `getView()`), `client.getTable()`, `client.getScalarFunction()`, `client.getScalarFunctionImplementation()`, `client.getAppendStructure()`, `client.getRequest()`, `client.getUtils()`, etc.
|
|
871
|
-
- Each accessor returns
|
|
1021
|
+
- Each accessor returns its `Adt*` class, typed to its **honest capability set** (since 8.0.0, completed in 12.0.0): the class implements only the capability atoms that object actually supports, written positively — there is no composite at all, and none named for what an object lacks. Since 38.0.0 the accessor answers the class itself (`AdtClass<R>`, …), not a composition of its atoms. Calling a capability a handler lacks — e.g. `client.getDomain().getVersions(...)` — is a **compile error** rather than a runtime throw. See the [Type System](#type-system) section.
|
|
872
1022
|
- See `src/index.ts` for the full type exports and object configs.
|
|
873
1023
|
|
|
874
1024
|
### AdtObject Methods (with Long Polling Support)
|
|
@@ -1073,7 +1223,9 @@ hold yourself:
|
|
|
1073
1223
|
headers) or `AdtContentTypesBase` (v1, universal) from that answer.
|
|
1074
1224
|
- `fetchDiscoveryEndpoints(connection)` / `isEndpointInDiscovery(...)` — the
|
|
1075
1225
|
discovery document and a membership test over it.
|
|
1076
|
-
- `createAdtClient(connection, logger?, options
|
|
1226
|
+
- `createAdtClient(connection, { variant, logger?, …options })` —
|
|
1227
|
+
`AdtClientOnPrem` for `variant: 'onprem'`, `AdtClientCloud` for `'cloud'`
|
|
1228
|
+
(since 38.0.0; it took `(connection, logger?, options?)` before). It detects
|
|
1077
1229
|
nothing and sends no request (since 37.4.0): the consumer declares the system
|
|
1078
1230
|
type, and a legacy system is served by `AdtClientLegacy` of
|
|
1079
1231
|
`@mcp-abap-adt/adt-clients-legacy`, an RFC client constructed by the consumer.
|
|
@@ -1119,7 +1271,7 @@ everything else is not.
|
|
|
1119
1271
|
|
|
1120
1272
|
### Single Definition Site: the contract packages
|
|
1121
1273
|
|
|
1122
|
-
Since **7.5.0**, every contract type is **defined once**, in the contract packages — today `@mcp-abap-adt/interfaces-adt` (`^
|
|
1274
|
+
Since **7.5.0**, every contract type is **defined once**, in the contract packages — today `@mcp-abap-adt/interfaces-adt` (`^23.1.1`) for the ADT contracts and `@mcp-abap-adt/interfaces-adt-connection` (`^3.0.0`) for the connection. This package declares no copies of its own — every `IXxxConfig`, the capability atoms, the result-set contracts a factory accepts (`IClassResults`, …, since 38.0.0), the option and response types and the cross-cutting shared types all live there.
|
|
1123
1275
|
|
|
1124
1276
|
**Import them from the package that owns them:**
|
|
1125
1277
|
|
|
@@ -1146,7 +1298,7 @@ the contract naming one would be describing an implementation.
|
|
|
1146
1298
|
|
|
1147
1299
|
Since **9.0.0** this is the only route: the package no longer re-exports types it does not own. It used to republish 145 of them, which was more than half its public surface — so a consumer could hold `IClassConfig` believing it came from this client, and a type would appear to change whenever this client released, for reasons that had nothing to do with it. Types now travel on the contract package's release cycle, which is where they are actually decided.
|
|
1148
1300
|
|
|
1149
|
-
What this package exports is what it owns: the clients, the handler classes, the batch and runtime facades, the result sets each implementation is built with (`<x>Documents
|
|
1301
|
+
What this package exports is what it owns: the clients, the handler classes, the batch and runtime facades, the default result sets each implementation is built with (`<x>Documents`; the client result-set contracts they satisfy are interfaces-adt's since 38.0.0, the executor, runtime and abapGit ones are still here), the building blocks `rawDocument`, `nothing`, `wireItself` and `nothingIsARefusal`, and a few helpers.
|
|
1150
1302
|
|
|
1151
1303
|
### Honest capability types (since 8.0.0)
|
|
1152
1304
|
|
|
@@ -1171,7 +1323,7 @@ Since **25.0.0** ATC takes programs and every kind of include, `interfaces-adt`
|
|
|
1171
1323
|
|
|
1172
1324
|
The runtime client narrows the same way. `AdtRuntimeClient.getAtc()` implements `IAtcRunStatusReadable & IAtcFindings`, plus `resolveCheckVariant`, `listCheckVariants`, `createWorklist` and `startRun` — a check run is three requests, started and then read, never created, locked, activated or versioned, and the type says so rather than offering the rest and throwing. It is not `IAdtRunnable` since 19.0.0: that atom's `run` is one call.
|
|
1173
1325
|
|
|
1174
|
-
**A guard keeps this true.** `src/__tests__/unit/capabilities/` compares
|
|
1326
|
+
**A guard keeps this true.** `src/__tests__/unit/capabilities/` compares what every factory answers (its class, since 38.0.0) against the atoms in both directions at compile time, refuses a public method of `AdtUtils`, `AdtFeatureToggle` or `AdtServiceBinding` that no interfaces-adt atom declares, calls every method of every declared capability against a recording connection to check it issues the request its capability names, and fails if a new factory appears without an entry. Adding a throwing method back to a narrowed handler stops compiling. The guard walks `AdtClient`; the legacy package runs the same guard over `AdtClientLegacy`; the runtime accessors are pinned by `src/__tests__/unit/clients/AdtRuntimeClient.factory.test.ts`.
|
|
1175
1327
|
|
|
1176
1328
|
One category deliberately remains local, because it is code, not contract:
|
|
1177
1329
|
|
|
@@ -1201,6 +1353,110 @@ sourced from the contract packages.
|
|
|
1201
1353
|
|
|
1202
1354
|
> **Version pairing.** `adt-clients` 32 pairs with `interfaces-adt` 18 and `interfaces-adt-connection` 3 (the enhancement subtype and host contracts), and `adt-strategies` 0.12.0 declares the same ranges. Because the types are sourced rather than copied, `@mcp-abap-adt/interfaces-adt` and `@mcp-abap-adt/interfaces-adt-connection` are hard peers of this package's public API. A major bump there implies a bump here; keep the two in step rather than letting a resolver pick a mismatched pair.
|
|
1203
1355
|
|
|
1356
|
+
### Release variants and type codes
|
|
1357
|
+
|
|
1358
|
+
Since **38.0.0** the library is typed by the ADT type tables of
|
|
1359
|
+
`@mcp-abap-adt/interfaces-adt`: `ADT_TYPES_ONPREM` (S/4HANA 2025),
|
|
1360
|
+
`ADT_TYPES_CLOUD` (ABAP cloud) and `ADT_TYPES_BASIS_740` (SAP_BASIS 7.40). Each
|
|
1361
|
+
names the APIs the library offers on that release — one per factory — with
|
|
1362
|
+
their codes, and for each code its parent API, its name length and the
|
|
1363
|
+
operations the library performs there. The tables are the library's
|
|
1364
|
+
declaration; the [conformance check](#the-type-tables-conformance-check) holds
|
|
1365
|
+
them to what each release answers.
|
|
1366
|
+
|
|
1367
|
+
- **The variant is declared, never detected.** `AdtClient<V>` is fixed to one:
|
|
1368
|
+
`AdtClientOnPrem`, `AdtClientCloud`, or the plain `AdtClient`, served what
|
|
1369
|
+
both modern tables serve. `createAdtClient(connection, { variant, logger })`
|
|
1370
|
+
answers the declared one. A SAP_BASIS 7.40 system is `AdtClientLegacy`
|
|
1371
|
+
(`AdtClient<'basis740'>`) of `@mcp-abap-adt/adt-clients-legacy`.
|
|
1372
|
+
- **The gates are types.** A factory takes `this: this & AdtServedBy<'<api>'>`
|
|
1373
|
+
and a member whose availability differs by variant `this: this &
|
|
1374
|
+
AdtPerformedBy<'<api>', '<operation>'>`: a factory or operation the variant's
|
|
1375
|
+
table lacks is a compile error naming it. The executors and ABAP Unit runners
|
|
1376
|
+
(`AdtExecutor<V>`) are gated the same way.
|
|
1377
|
+
- **A code is a code of the tables.** Every code taken or answered is an
|
|
1378
|
+
`AdtTypeCode` (`'CLAS/OC'`, `'FUGR/FF'`, `'TABL/DT'`, …) or a subset of it
|
|
1379
|
+
(`AdtSourceTypeCode`, `AdtCodeOf<V>`, the `getUtils()` code sets). No
|
|
1380
|
+
friendly name, bare R3TR type or lower-case spelling is taken. `VIEW/DV` is
|
|
1381
|
+
a group-only code: group activation, group deletion and where-used address
|
|
1382
|
+
it, and no factory serves it.
|
|
1383
|
+
- **An API with a parent takes it.** A function module and a function include
|
|
1384
|
+
are addressed under their function group: their members, a
|
|
1385
|
+
`readObjectSource('FUGR/FF', name, group)`, an
|
|
1386
|
+
`IObjectReference<'FUGR/FF'>` and a group reference (`IAdtCodedReference`)
|
|
1387
|
+
require the group.
|
|
1388
|
+
- **The search filter is a search name, not a code** (39.0.0). The quick
|
|
1389
|
+
search's `objectType` is read against the release's object types list
|
|
1390
|
+
(`GET /repository/informationsystem/objecttypes`): most names are a main
|
|
1391
|
+
type (`DEVC` selects `DEVC/K`, `TABL` both table kinds), six are aliases of
|
|
1392
|
+
one code (`STRU` → `TABL/DS`, `DTAB` → `TABL/DT`, `REPO`, `INCL`, `FUNC`,
|
|
1393
|
+
`BADI`), about fifty are groups (`ABAP_TEST_COCKPIT`). A code that is no
|
|
1394
|
+
item's type selects as its main type and an unknown one answers nothing,
|
|
1395
|
+
silently, so `search` takes `IAdtSearchObjectsParamsOf<V>`: the names of
|
|
1396
|
+
`ADT_SEARCH_TYPES_ONPREM` (385) or `ADT_SEARCH_TYPES_CLOUD` (372), and on
|
|
1397
|
+
7.40, which has no list and answers the aliases with no hits, the eleven of
|
|
1398
|
+
`ADT_SEARCH_TYPES_BASIS_740`. A main type comes from the table entry
|
|
1399
|
+
(`ADT_TYPES_ONPREM.package.codes['DEVC/K'].main`). A subtype without an
|
|
1400
|
+
alias (`ENHO/XHH`) is searched by its main type, the hits filtered by you.
|
|
1401
|
+
- **`getUtils()` is typed per variant** (39.0.0): `AdtUtils<R, V>` is an
|
|
1402
|
+
`IAdtTypedWhereUsed<…, V>` and an `IAdtTypedGroupLifecycle<…, V>` of
|
|
1403
|
+
interfaces-adt — `VIEW/DV` in where-used and the group members, a parented
|
|
1404
|
+
code's `parentName` required.
|
|
1405
|
+
- **What an answer names is `type` or `unknownType`.** A reading of
|
|
1406
|
+
`@mcp-abap-adt/adt-strategies` that takes a code from an answer answers an
|
|
1407
|
+
`IAdtAnsweredObject`: `type` for a code a table holds, `unknownType` — the
|
|
1408
|
+
text as ADT sent it — for any other.
|
|
1409
|
+
|
|
1410
|
+
`src/__tests__/unit/typeCodeLiterals.test.ts` (one per package) holds the
|
|
1411
|
+
source to it: a code literal — and, since 39.0.0, a main-type literal
|
|
1412
|
+
(`'ENHO'`) or a search-name literal (`'STRU'`) — passes only where the
|
|
1413
|
+
compiler types it by the tables, and a code named in a comment or inside a
|
|
1414
|
+
longer string (a message, an XML template's span) is a code of the tables.
|
|
1415
|
+
|
|
1416
|
+
### The contract you accept is yours
|
|
1417
|
+
|
|
1418
|
+
Since **38.0.0** a contract lives in the package that accepts it. A factory
|
|
1419
|
+
accepts a result set, so the result-set contracts are
|
|
1420
|
+
`@mcp-abap-adt/interfaces-adt`'s; a consumer accepts the client, so the client
|
|
1421
|
+
contract is the consumer's. This package declares no composition: each factory
|
|
1422
|
+
answers its own class, and the class's members are what the factory offers.
|
|
1423
|
+
|
|
1424
|
+
A consumer composes the contract it accepts from interfaces-adt alone — the
|
|
1425
|
+
factories it calls, each answering the atoms whose members it calls, generic
|
|
1426
|
+
over the result-set contract it is given — and types its code against it. The
|
|
1427
|
+
compiler checks, where the client is taken, that `AdtClient`,
|
|
1428
|
+
`AdtClientLegacy` or the consumer's own implementation satisfies it:
|
|
1429
|
+
|
|
1430
|
+
```typescript
|
|
1431
|
+
import type {
|
|
1432
|
+
IAdtLockable,
|
|
1433
|
+
IAdtReadable,
|
|
1434
|
+
IAdtUpdatable,
|
|
1435
|
+
IClassConfig,
|
|
1436
|
+
IClassResults,
|
|
1437
|
+
} from '@mcp-abap-adt/interfaces-adt';
|
|
1438
|
+
import { classDocuments, createAdtClient } from '@mcp-abap-adt/adt-clients';
|
|
1439
|
+
|
|
1440
|
+
interface IMyClient {
|
|
1441
|
+
getClass<R extends IClassResults>(
|
|
1442
|
+
results: R,
|
|
1443
|
+
): IAdtReadable<IClassConfig, ReturnType<R['source']>> &
|
|
1444
|
+
IAdtLockable<IClassConfig> &
|
|
1445
|
+
IAdtUpdatable<Partial<IClassConfig>, ReturnType<R['updated']>>;
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
const client: IMyClient = await createAdtClient(connection, {
|
|
1449
|
+
variant: 'onprem',
|
|
1450
|
+
logger,
|
|
1451
|
+
});
|
|
1452
|
+
const classes = client.getClass(classDocuments); // read answers a string
|
|
1453
|
+
```
|
|
1454
|
+
|
|
1455
|
+
`src/__tests__/unit/clients/consumerContract.test.ts` holds this package to it:
|
|
1456
|
+
such a contract accepts `AdtClient` and an object written by hand, and refuses
|
|
1457
|
+
one missing a member it names; the legacy package proves the same of
|
|
1458
|
+
`AdtClientLegacy`.
|
|
1459
|
+
|
|
1204
1460
|
### Naming Conventions
|
|
1205
1461
|
|
|
1206
1462
|
The package uses **dual naming conventions** to distinguish API layers:
|
|
@@ -1236,6 +1492,8 @@ See [Architecture Documentation](docs/architecture/ARCHITECTURE.md#type-system-a
|
|
|
1236
1492
|
One document per breaking release, each written for a consumer on the contract
|
|
1237
1493
|
before it:
|
|
1238
1494
|
|
|
1495
|
+
- **[38.x → 39.0.0](docs/usage/MIGRATION-39.md)** — the search filter takes the release's search names (`DEVC`, `STRU`), not a code; where-used and the group members take interfaces-adt's typed references (`VIEW/DV`, a function module's group), and `getUtils()` satisfies `IAdtTypedWhereUsed` / `IAdtTypedGroupLifecycle` instead of `IAdtWhereUsed` / `IAdtGroupLifecycle`.
|
|
1496
|
+
- **[37.x → 38.0.0](docs/usage/MIGRATION-38.md)** — the ADT type tables decide: a client is fixed to its release variant, every type code is a code of the tables, an API with a parent takes it, answered objects are `type` / `unknownType`, and `updateMetadata` covers fifteen more types; the result-set contracts are imported from `@mcp-abap-adt/interfaces-adt`, and each factory answers its class, so a consumer composes the contract it accepts from interfaces-adt.
|
|
1239
1497
|
- **[36.x → 37.0.0](docs/usage/MIGRATION-37.md)** — `getSystemInformation` answers an `IAdtResponse` (present, absent for a `404`, or a failure, through `options.analyse`), and `IUtilResults` has the required `objectProperties` slot.
|
|
1240
1498
|
- **[35.x → 36.0.0](docs/usage/MIGRATION-36.md)** — a request's `Accept` and `Content-Type` are the caller's: 32 members take the required `options.headers` and send exactly that pair.
|
|
1241
1499
|
- **[34.x → 35.0.0](docs/usage/MIGRATION-35.md)** — accept negotiation is off by default: a `406`/`415` is the call's answer unless you switch it on.
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Standalone top-level class — NOT a factory on AdtClient (which is
|
|
5
5
|
* reserved for IAdtObject<Config, State> implementations only).
|
|
6
|
-
* Consumers
|
|
6
|
+
* Consumers build it themselves: `AdtAbapGitClient.create(connection, { logger })`
|
|
7
|
+
* answers the shipped documents, `create(connection, { logger, results })` the
|
|
8
|
+
* caller's; `new AdtAbapGitClient(connection, { logger, results })` takes its
|
|
9
|
+
* results always.
|
|
7
10
|
*
|
|
8
11
|
* Implements IAdtAbapGitClient. HTTP operations are delegated to
|
|
9
12
|
* low-level functions in ./abapGit/*; this class owns the options,
|
|
@@ -12,7 +15,7 @@
|
|
|
12
15
|
*/
|
|
13
16
|
import type { IAbapGitExternalRepoCredentials, IAbapGitLinkArgs, IAbapGitPullArgs, IAbapGitUnlinkArgs, IAdtAbapGitClient, IAdtAnalyseOptions, IAdtError, IAdtHeaders, IAdtResponse } from '@mcp-abap-adt/interfaces-adt';
|
|
14
17
|
import type { IAbapConnection } from '@mcp-abap-adt/interfaces-adt-connection';
|
|
15
|
-
import type {
|
|
18
|
+
import type { AdtHandlerOptions, AdtShippedOptions } from '../core/shared/handlerOptions';
|
|
16
19
|
import { abapGitDocuments, type IAbapGitResults } from './abapGit/types';
|
|
17
20
|
/**
|
|
18
21
|
* One request per member, each read by the strategy the client was built
|
|
@@ -28,7 +31,14 @@ export declare class AdtAbapGitClient<R extends IAbapGitResults = typeof abapGit
|
|
|
28
31
|
private readonly connection;
|
|
29
32
|
private readonly logger?;
|
|
30
33
|
private readonly results;
|
|
31
|
-
|
|
34
|
+
/**
|
|
35
|
+
* An abapGit client with the shipped documents, or with the caller's results.
|
|
36
|
+
* No client hands one out, so this is where the shipped documents are the
|
|
37
|
+
* default, as a getter's are.
|
|
38
|
+
*/
|
|
39
|
+
static create(connection: IAbapConnection, options?: AdtShippedOptions<'logger'>): AdtAbapGitClient<typeof abapGitDocuments>;
|
|
40
|
+
static create<R extends IAbapGitResults>(connection: IAbapConnection, options: AdtHandlerOptions<R, 'logger'>): AdtAbapGitClient<R>;
|
|
41
|
+
constructor(connection: IAbapConnection, options: AdtHandlerOptions<R, 'logger'>);
|
|
32
42
|
/** Link a package to a repository. */
|
|
33
43
|
link<E extends IAdtError = IAdtError>(args: IAbapGitLinkArgs, options: {
|
|
34
44
|
headers: IAdtHeaders;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtAbapGitClient.d.ts","sourceRoot":"","sources":["../../src/clients/AdtAbapGitClient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AdtAbapGitClient.d.ts","sourceRoot":"","sources":["../../src/clients/AdtAbapGitClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,+BAA+B,EAC/B,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,EAGb,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGzE;;;;;;;;;GASG;AACH,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,eAAe,GAAG,OAAO,gBAAgB,CACnD,YACE,iBAAiB,CACf,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EACtB,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EACzB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EACvB,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAC9B;IAEH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAI;IAE5B;;;;OAIG;IACH,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,eAAe,EAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACpC,gBAAgB,CAAC,OAAO,gBAAgB,CAAC;IAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,eAAe,EACrC,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC,GACtC,gBAAgB,CAAC,CAAC,CAAC;gBAYpB,UAAU,EAAE,eAAe,EAG3B,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC;IAQzC,sCAAsC;IAChC,IAAI,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACxC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAWjC;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACxC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IASpD,iEAAiE;IAC3D,MAAM,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC1C,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAWjC,+CAA+C;IACzC,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC7C,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQnD,iEAAiE;IAC3D,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAC/C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQtD,yEAAyE;IACnE,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACrD,IAAI,EAAE,+BAA+B,EACrC,OAAO,EAAE;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAS3D"}
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Standalone top-level class — NOT a factory on AdtClient (which is
|
|
6
6
|
* reserved for IAdtObject<Config, State> implementations only).
|
|
7
|
-
* Consumers
|
|
7
|
+
* Consumers build it themselves: `AdtAbapGitClient.create(connection, { logger })`
|
|
8
|
+
* answers the shipped documents, `create(connection, { logger, results })` the
|
|
9
|
+
* caller's; `new AdtAbapGitClient(connection, { logger, results })` takes its
|
|
10
|
+
* results always.
|
|
8
11
|
*
|
|
9
12
|
* Implements IAdtAbapGitClient. HTTP operations are delegated to
|
|
10
13
|
* low-level functions in ./abapGit/*; this class owns the options,
|
|
@@ -35,11 +38,17 @@ class AdtAbapGitClient {
|
|
|
35
38
|
connection;
|
|
36
39
|
logger;
|
|
37
40
|
results;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
static create(connection, options = {}) {
|
|
42
|
+
return new AdtAbapGitClient(connection, {
|
|
43
|
+
...options,
|
|
44
|
+
results: options.results ?? types_1.abapGitDocuments,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
constructor(connection,
|
|
48
|
+
// `contentTypeVersion`, which chose what `link` and `pull` sent, is gone
|
|
49
|
+
// since 36.0.0: those members send the caller's `headers`.
|
|
50
|
+
options) {
|
|
51
|
+
const { logger, results } = options;
|
|
43
52
|
this.connection = connection;
|
|
44
53
|
this.logger = logger;
|
|
45
54
|
this.results = results;
|