@mcp-abap-adt/adt-clients 37.4.0 → 38.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.
Files changed (469) hide show
  1. package/README.md +266 -46
  2. package/dist/clients/AdtAbapGitClient.d.ts +13 -3
  3. package/dist/clients/AdtAbapGitClient.d.ts.map +1 -1
  4. package/dist/clients/AdtAbapGitClient.js +15 -6
  5. package/dist/clients/AdtClient.d.ts +123 -211
  6. package/dist/clients/AdtClient.d.ts.map +1 -1
  7. package/dist/clients/AdtClient.js +226 -43
  8. package/dist/clients/AdtClientVariants.d.ts +16 -0
  9. package/dist/clients/AdtClientVariants.d.ts.map +1 -0
  10. package/dist/clients/AdtClientVariants.js +20 -0
  11. package/dist/clients/AdtExecutor.d.ts +39 -7
  12. package/dist/clients/AdtExecutor.d.ts.map +1 -1
  13. package/dist/clients/AdtExecutor.js +26 -26
  14. package/dist/clients/AdtRuntimeClient.d.ts +22 -11
  15. package/dist/clients/AdtRuntimeClient.d.ts.map +1 -1
  16. package/dist/clients/AdtRuntimeClient.js +44 -23
  17. package/dist/clients/createAdtClient.d.ts +22 -8
  18. package/dist/clients/createAdtClient.d.ts.map +1 -1
  19. package/dist/clients/createAdtClient.js +12 -9
  20. package/dist/clients/variant.d.ts +80 -0
  21. package/dist/clients/variant.d.ts.map +1 -0
  22. package/dist/clients/variant.js +22 -0
  23. package/dist/constants/contentTypes.d.ts +8 -1
  24. package/dist/constants/contentTypes.d.ts.map +1 -1
  25. package/dist/constants/contentTypes.js +11 -4
  26. package/dist/constants/typeCodes.d.ts +45 -0
  27. package/dist/constants/typeCodes.d.ts.map +1 -0
  28. package/dist/constants/typeCodes.js +44 -0
  29. package/dist/core/accessControl/AdtAccessControl.d.ts +25 -6
  30. package/dist/core/accessControl/AdtAccessControl.d.ts.map +1 -1
  31. package/dist/core/accessControl/AdtAccessControl.js +21 -9
  32. package/dist/core/accessControl/check.d.ts.map +1 -1
  33. package/dist/core/accessControl/check.js +1 -1
  34. package/dist/core/accessControl/create.d.ts.map +1 -1
  35. package/dist/core/accessControl/create.js +2 -1
  36. package/dist/core/accessControl/types.d.ts +13 -31
  37. package/dist/core/accessControl/types.d.ts.map +1 -1
  38. package/dist/core/accessControl/types.js +1 -0
  39. package/dist/core/appendStructure/AdtAppendStructure.d.ts +5 -6
  40. package/dist/core/appendStructure/AdtAppendStructure.d.ts.map +1 -1
  41. package/dist/core/appendStructure/AdtAppendStructure.js +4 -6
  42. package/dist/core/appendStructure/check.d.ts.map +1 -1
  43. package/dist/core/appendStructure/check.js +1 -1
  44. package/dist/core/appendStructure/create.d.ts.map +1 -1
  45. package/dist/core/appendStructure/create.js +2 -1
  46. package/dist/core/appendStructure/types.d.ts +12 -31
  47. package/dist/core/appendStructure/types.d.ts.map +1 -1
  48. package/dist/core/authorizationField/AdtAuthorizationField.d.ts +6 -6
  49. package/dist/core/authorizationField/AdtAuthorizationField.d.ts.map +1 -1
  50. package/dist/core/authorizationField/AdtAuthorizationField.js +4 -9
  51. package/dist/core/authorizationField/types.d.ts +9 -23
  52. package/dist/core/authorizationField/types.d.ts.map +1 -1
  53. package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts +25 -6
  54. package/dist/core/behaviorDefinition/AdtBehaviorDefinition.d.ts.map +1 -1
  55. package/dist/core/behaviorDefinition/AdtBehaviorDefinition.js +21 -9
  56. package/dist/core/behaviorDefinition/create.d.ts.map +1 -1
  57. package/dist/core/behaviorDefinition/create.js +2 -1
  58. package/dist/core/behaviorDefinition/types.d.ts +14 -31
  59. package/dist/core/behaviorDefinition/types.d.ts.map +1 -1
  60. package/dist/core/behaviorDefinition/types.js +1 -0
  61. package/dist/core/behaviorImplementation/AdtBehaviorImplementation.d.ts +5 -6
  62. package/dist/core/behaviorImplementation/AdtBehaviorImplementation.d.ts.map +1 -1
  63. package/dist/core/behaviorImplementation/AdtBehaviorImplementation.js +9 -13
  64. package/dist/core/behaviorImplementation/read.js +2 -2
  65. package/dist/core/behaviorImplementation/types.d.ts +1 -1
  66. package/dist/core/behaviorImplementation/types.d.ts.map +1 -1
  67. package/dist/core/behaviorImplementation/validation.d.ts.map +1 -1
  68. package/dist/core/behaviorImplementation/validation.js +3 -2
  69. package/dist/core/class/AdtClass.d.ts +21 -8
  70. package/dist/core/class/AdtClass.d.ts.map +1 -1
  71. package/dist/core/class/AdtClass.js +21 -9
  72. package/dist/core/class/AdtClassMemberBase.d.ts +15 -4
  73. package/dist/core/class/AdtClassMemberBase.d.ts.map +1 -1
  74. package/dist/core/class/AdtLocalDefinitions.d.ts +7 -7
  75. package/dist/core/class/AdtLocalDefinitions.d.ts.map +1 -1
  76. package/dist/core/class/AdtLocalDefinitions.js +4 -6
  77. package/dist/core/class/AdtLocalMacros.d.ts +7 -7
  78. package/dist/core/class/AdtLocalMacros.d.ts.map +1 -1
  79. package/dist/core/class/AdtLocalMacros.js +4 -6
  80. package/dist/core/class/AdtLocalTestClass.d.ts +7 -7
  81. package/dist/core/class/AdtLocalTestClass.d.ts.map +1 -1
  82. package/dist/core/class/AdtLocalTestClass.js +4 -6
  83. package/dist/core/class/AdtLocalTypes.d.ts +7 -7
  84. package/dist/core/class/AdtLocalTypes.d.ts.map +1 -1
  85. package/dist/core/class/AdtLocalTypes.js +4 -6
  86. package/dist/core/class/check.d.ts.map +1 -1
  87. package/dist/core/class/check.js +2 -2
  88. package/dist/core/class/create.d.ts.map +1 -1
  89. package/dist/core/class/create.js +3 -2
  90. package/dist/core/class/read.d.ts.map +1 -1
  91. package/dist/core/class/read.js +2 -2
  92. package/dist/core/class/types.d.ts +15 -54
  93. package/dist/core/class/types.d.ts.map +1 -1
  94. package/dist/core/class/types.js +1 -0
  95. package/dist/core/class/validation.d.ts.map +1 -1
  96. package/dist/core/class/validation.js +4 -3
  97. package/dist/core/dataElement/AdtDataElement.d.ts +5 -5
  98. package/dist/core/dataElement/AdtDataElement.d.ts.map +1 -1
  99. package/dist/core/dataElement/AdtDataElement.js +4 -9
  100. package/dist/core/dataElement/check.d.ts.map +1 -1
  101. package/dist/core/dataElement/check.js +1 -1
  102. package/dist/core/dataElement/create.d.ts.map +1 -1
  103. package/dist/core/dataElement/create.js +2 -1
  104. package/dist/core/dataElement/types.d.ts +10 -25
  105. package/dist/core/dataElement/types.d.ts.map +1 -1
  106. package/dist/core/ddl/AdtDdl.d.ts +31 -11
  107. package/dist/core/ddl/AdtDdl.d.ts.map +1 -1
  108. package/dist/core/ddl/AdtDdl.js +22 -9
  109. package/dist/core/ddl/check.d.ts.map +1 -1
  110. package/dist/core/ddl/check.js +1 -1
  111. package/dist/core/ddl/create.d.ts.map +1 -1
  112. package/dist/core/ddl/create.js +2 -1
  113. package/dist/core/ddl/read.js +2 -2
  114. package/dist/core/ddl/types.d.ts +14 -37
  115. package/dist/core/ddl/types.d.ts.map +1 -1
  116. package/dist/core/ddl/types.js +1 -0
  117. package/dist/core/domain/AdtDomain.d.ts +5 -5
  118. package/dist/core/domain/AdtDomain.d.ts.map +1 -1
  119. package/dist/core/domain/AdtDomain.js +4 -9
  120. package/dist/core/domain/check.d.ts.map +1 -1
  121. package/dist/core/domain/check.js +1 -1
  122. package/dist/core/domain/create.d.ts.map +1 -1
  123. package/dist/core/domain/create.js +2 -1
  124. package/dist/core/domain/types.d.ts +10 -25
  125. package/dist/core/domain/types.d.ts.map +1 -1
  126. package/dist/core/enhancement/AdtEnhancement.d.ts +32 -8
  127. package/dist/core/enhancement/AdtEnhancement.d.ts.map +1 -1
  128. package/dist/core/enhancement/AdtEnhancement.js +4 -9
  129. package/dist/core/enhancement/index.d.ts +2 -2
  130. package/dist/core/enhancement/index.d.ts.map +1 -1
  131. package/dist/core/enhancement/read.d.ts +6 -0
  132. package/dist/core/enhancement/read.d.ts.map +1 -1
  133. package/dist/core/enhancement/read.js +10 -1
  134. package/dist/core/enhancement/types.d.ts +18 -35
  135. package/dist/core/enhancement/types.d.ts.map +1 -1
  136. package/dist/core/featureToggle/AdtFeatureToggle.d.ts +5 -5
  137. package/dist/core/featureToggle/AdtFeatureToggle.d.ts.map +1 -1
  138. package/dist/core/featureToggle/AdtFeatureToggle.js +4 -9
  139. package/dist/core/featureToggle/types.d.ts +14 -37
  140. package/dist/core/featureToggle/types.d.ts.map +1 -1
  141. package/dist/core/featureToggle/xmlBuilder.d.ts.map +1 -1
  142. package/dist/core/featureToggle/xmlBuilder.js +2 -1
  143. package/dist/core/functionGroup/AdtFunctionGroup.d.ts +35 -16
  144. package/dist/core/functionGroup/AdtFunctionGroup.d.ts.map +1 -1
  145. package/dist/core/functionGroup/AdtFunctionGroup.js +30 -13
  146. package/dist/core/functionGroup/activation.d.ts +8 -1
  147. package/dist/core/functionGroup/activation.d.ts.map +1 -1
  148. package/dist/core/functionGroup/activation.js +11 -2
  149. package/dist/core/functionGroup/check.d.ts.map +1 -1
  150. package/dist/core/functionGroup/check.js +2 -2
  151. package/dist/core/functionGroup/create.d.ts.map +1 -1
  152. package/dist/core/functionGroup/create.js +2 -1
  153. package/dist/core/functionGroup/read.d.ts +4 -0
  154. package/dist/core/functionGroup/read.d.ts.map +1 -1
  155. package/dist/core/functionGroup/read.js +17 -0
  156. package/dist/core/functionGroup/types.d.ts +13 -31
  157. package/dist/core/functionGroup/types.d.ts.map +1 -1
  158. package/dist/core/functionGroup/types.js +1 -0
  159. package/dist/core/functionGroup/update.d.ts +5 -0
  160. package/dist/core/functionGroup/update.d.ts.map +1 -1
  161. package/dist/core/functionGroup/update.js +18 -0
  162. package/dist/core/functionGroup/validation.d.ts.map +1 -1
  163. package/dist/core/functionGroup/validation.js +2 -1
  164. package/dist/core/functionInclude/AdtFunctionInclude.d.ts +24 -18
  165. package/dist/core/functionInclude/AdtFunctionInclude.d.ts.map +1 -1
  166. package/dist/core/functionInclude/AdtFunctionInclude.js +4 -6
  167. package/dist/core/functionInclude/types.d.ts +12 -32
  168. package/dist/core/functionInclude/types.d.ts.map +1 -1
  169. package/dist/core/functionInclude/xmlBuilder.d.ts.map +1 -1
  170. package/dist/core/functionInclude/xmlBuilder.js +3 -2
  171. package/dist/core/functionModule/AdtFunctionModule.d.ts +38 -18
  172. package/dist/core/functionModule/AdtFunctionModule.d.ts.map +1 -1
  173. package/dist/core/functionModule/AdtFunctionModule.js +23 -6
  174. package/dist/core/functionModule/create.d.ts.map +1 -1
  175. package/dist/core/functionModule/create.js +3 -2
  176. package/dist/core/functionModule/read.js +2 -2
  177. package/dist/core/functionModule/types.d.ts +13 -31
  178. package/dist/core/functionModule/types.d.ts.map +1 -1
  179. package/dist/core/functionModule/types.js +1 -0
  180. package/dist/core/functionModule/validation.d.ts.map +1 -1
  181. package/dist/core/functionModule/validation.js +9 -6
  182. package/dist/core/include/AdtInclude.d.ts +27 -8
  183. package/dist/core/include/AdtInclude.d.ts.map +1 -1
  184. package/dist/core/include/AdtInclude.js +26 -19
  185. package/dist/core/include/create.d.ts.map +1 -1
  186. package/dist/core/include/create.js +2 -1
  187. package/dist/core/include/types.d.ts +11 -27
  188. package/dist/core/include/types.d.ts.map +1 -1
  189. package/dist/core/include/types.js +1 -0
  190. package/dist/core/interface/AdtInterface.d.ts +27 -8
  191. package/dist/core/interface/AdtInterface.d.ts.map +1 -1
  192. package/dist/core/interface/AdtInterface.js +21 -6
  193. package/dist/core/interface/check.d.ts.map +1 -1
  194. package/dist/core/interface/check.js +1 -1
  195. package/dist/core/interface/create.d.ts.map +1 -1
  196. package/dist/core/interface/create.js +2 -1
  197. package/dist/core/interface/read.js +2 -2
  198. package/dist/core/interface/types.d.ts +13 -31
  199. package/dist/core/interface/types.d.ts.map +1 -1
  200. package/dist/core/interface/types.js +1 -0
  201. package/dist/core/interface/validation.d.ts.map +1 -1
  202. package/dist/core/interface/validation.js +2 -1
  203. package/dist/core/messageClass/AdtMessageClass.d.ts +14 -9
  204. package/dist/core/messageClass/AdtMessageClass.d.ts.map +1 -1
  205. package/dist/core/messageClass/AdtMessageClass.js +4 -6
  206. package/dist/core/messageClass/AdtMessageClassMessage.d.ts +5 -5
  207. package/dist/core/messageClass/AdtMessageClassMessage.d.ts.map +1 -1
  208. package/dist/core/messageClass/AdtMessageClassMessage.js +4 -6
  209. package/dist/core/messageClass/types.d.ts +10 -35
  210. package/dist/core/messageClass/types.d.ts.map +1 -1
  211. package/dist/core/messageClass/xml.d.ts.map +1 -1
  212. package/dist/core/messageClass/xml.js +23 -5
  213. package/dist/core/metadataExtension/AdtMetadataExtension.d.ts +25 -6
  214. package/dist/core/metadataExtension/AdtMetadataExtension.d.ts.map +1 -1
  215. package/dist/core/metadataExtension/AdtMetadataExtension.js +20 -9
  216. package/dist/core/metadataExtension/check.d.ts.map +1 -1
  217. package/dist/core/metadataExtension/check.js +1 -4
  218. package/dist/core/metadataExtension/create.d.ts.map +1 -1
  219. package/dist/core/metadataExtension/create.js +2 -1
  220. package/dist/core/metadataExtension/types.d.ts +13 -31
  221. package/dist/core/metadataExtension/types.d.ts.map +1 -1
  222. package/dist/core/metadataExtension/types.js +1 -0
  223. package/dist/core/metadataExtension/validation.js +1 -1
  224. package/dist/core/package/AdtPackage.d.ts +5 -5
  225. package/dist/core/package/AdtPackage.d.ts.map +1 -1
  226. package/dist/core/package/AdtPackage.js +4 -6
  227. package/dist/core/package/create.d.ts.map +1 -1
  228. package/dist/core/package/create.js +2 -1
  229. package/dist/core/package/types.d.ts +9 -23
  230. package/dist/core/package/types.d.ts.map +1 -1
  231. package/dist/core/program/AdtProgram.d.ts +27 -8
  232. package/dist/core/program/AdtProgram.d.ts.map +1 -1
  233. package/dist/core/program/AdtProgram.js +22 -10
  234. package/dist/core/program/check.d.ts.map +1 -1
  235. package/dist/core/program/check.js +1 -1
  236. package/dist/core/program/create.d.ts.map +1 -1
  237. package/dist/core/program/create.js +2 -1
  238. package/dist/core/program/read.js +2 -2
  239. package/dist/core/program/types.d.ts +15 -37
  240. package/dist/core/program/types.d.ts.map +1 -1
  241. package/dist/core/program/types.js +1 -0
  242. package/dist/core/program/validation.d.ts.map +1 -1
  243. package/dist/core/program/validation.js +2 -1
  244. package/dist/core/scalarFunction/AdtScalarFunction.d.ts +26 -7
  245. package/dist/core/scalarFunction/AdtScalarFunction.d.ts.map +1 -1
  246. package/dist/core/scalarFunction/AdtScalarFunction.js +21 -9
  247. package/dist/core/scalarFunction/check.d.ts.map +1 -1
  248. package/dist/core/scalarFunction/check.js +1 -1
  249. package/dist/core/scalarFunction/create.d.ts.map +1 -1
  250. package/dist/core/scalarFunction/create.js +2 -1
  251. package/dist/core/scalarFunction/types.d.ts +13 -31
  252. package/dist/core/scalarFunction/types.d.ts.map +1 -1
  253. package/dist/core/scalarFunction/types.js +1 -0
  254. package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts +6 -6
  255. package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.d.ts.map +1 -1
  256. package/dist/core/scalarFunctionImplementation/AdtScalarFunctionImplementation.js +4 -9
  257. package/dist/core/scalarFunctionImplementation/check.d.ts.map +1 -1
  258. package/dist/core/scalarFunctionImplementation/check.js +1 -1
  259. package/dist/core/scalarFunctionImplementation/create.d.ts.map +1 -1
  260. package/dist/core/scalarFunctionImplementation/create.js +2 -1
  261. package/dist/core/scalarFunctionImplementation/types.d.ts +14 -34
  262. package/dist/core/scalarFunctionImplementation/types.d.ts.map +1 -1
  263. package/dist/core/service/AdtService.d.ts +29 -7
  264. package/dist/core/service/AdtService.d.ts.map +1 -1
  265. package/dist/core/service/AdtService.js +25 -4
  266. package/dist/core/service/index.d.ts +1 -1
  267. package/dist/core/service/index.d.ts.map +1 -1
  268. package/dist/core/service/types.d.ts +14 -88
  269. package/dist/core/service/types.d.ts.map +1 -1
  270. package/dist/core/service/types.js +1 -0
  271. package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts +25 -6
  272. package/dist/core/serviceDefinition/AdtServiceDefinition.d.ts.map +1 -1
  273. package/dist/core/serviceDefinition/AdtServiceDefinition.js +21 -9
  274. package/dist/core/serviceDefinition/check.d.ts.map +1 -1
  275. package/dist/core/serviceDefinition/check.js +1 -1
  276. package/dist/core/serviceDefinition/create.d.ts.map +1 -1
  277. package/dist/core/serviceDefinition/create.js +2 -1
  278. package/dist/core/serviceDefinition/types.d.ts +13 -31
  279. package/dist/core/serviceDefinition/types.d.ts.map +1 -1
  280. package/dist/core/serviceDefinition/types.js +1 -0
  281. package/dist/core/shared/AdtUtils.d.ts +65 -29
  282. package/dist/core/shared/AdtUtils.d.ts.map +1 -1
  283. package/dist/core/shared/AdtUtils.js +78 -35
  284. package/dist/core/shared/abapUnit.d.ts +32 -6
  285. package/dist/core/shared/abapUnit.d.ts.map +1 -1
  286. package/dist/core/shared/abapUnit.js +79 -24
  287. package/dist/core/shared/capabilities/statefulSession.js +2 -2
  288. package/dist/core/shared/codeSets.d.ts +133 -0
  289. package/dist/core/shared/codeSets.d.ts.map +1 -0
  290. package/dist/core/shared/codeSets.js +73 -0
  291. package/dist/core/shared/documentWrite.d.ts +17 -0
  292. package/dist/core/shared/documentWrite.d.ts.map +1 -0
  293. package/dist/core/shared/documentWrite.js +27 -0
  294. package/dist/core/shared/groupActivation.d.ts +3 -2
  295. package/dist/core/shared/groupActivation.d.ts.map +1 -1
  296. package/dist/core/shared/groupActivation.js +1 -2
  297. package/dist/core/shared/groupDeletion.d.ts +4 -3
  298. package/dist/core/shared/groupDeletion.d.ts.map +1 -1
  299. package/dist/core/shared/handlerOptions.d.ts +45 -0
  300. package/dist/core/shared/handlerOptions.d.ts.map +1 -0
  301. package/dist/core/shared/handlerOptions.js +2 -0
  302. package/dist/core/shared/nodeStructure.d.ts +2 -2
  303. package/dist/core/shared/nodeStructure.d.ts.map +1 -1
  304. package/dist/core/shared/objectStructure.d.ts +2 -1
  305. package/dist/core/shared/objectStructure.d.ts.map +1 -1
  306. package/dist/core/shared/objectWire.d.ts +24 -7
  307. package/dist/core/shared/objectWire.d.ts.map +1 -1
  308. package/dist/core/shared/objectWire.js +36 -141
  309. package/dist/core/shared/typeStructure.d.ts +14 -0
  310. package/dist/core/shared/typeStructure.d.ts.map +1 -0
  311. package/dist/core/shared/typeStructure.js +22 -0
  312. package/dist/core/shared/types.d.ts +1 -1
  313. package/dist/core/shared/types.d.ts.map +1 -1
  314. package/dist/core/shared/utilResultSet.d.ts +21 -85
  315. package/dist/core/shared/utilResultSet.d.ts.map +1 -1
  316. package/dist/core/shared/whereUsed.d.ts +29 -14
  317. package/dist/core/shared/whereUsed.d.ts.map +1 -1
  318. package/dist/core/shared/whereUsed.js +15 -46
  319. package/dist/core/structure/AdtStructure.d.ts +25 -6
  320. package/dist/core/structure/AdtStructure.d.ts.map +1 -1
  321. package/dist/core/structure/AdtStructure.js +21 -9
  322. package/dist/core/structure/check.d.ts.map +1 -1
  323. package/dist/core/structure/check.js +1 -1
  324. package/dist/core/structure/create.d.ts.map +1 -1
  325. package/dist/core/structure/create.js +2 -1
  326. package/dist/core/structure/read.js +2 -2
  327. package/dist/core/structure/types.d.ts +13 -31
  328. package/dist/core/structure/types.d.ts.map +1 -1
  329. package/dist/core/structure/types.js +1 -0
  330. package/dist/core/table/AdtTable.d.ts +25 -6
  331. package/dist/core/table/AdtTable.d.ts.map +1 -1
  332. package/dist/core/table/AdtTable.js +21 -9
  333. package/dist/core/table/create.d.ts.map +1 -1
  334. package/dist/core/table/create.js +2 -1
  335. package/dist/core/table/read.d.ts.map +1 -1
  336. package/dist/core/table/read.js +2 -2
  337. package/dist/core/table/types.d.ts +13 -31
  338. package/dist/core/table/types.d.ts.map +1 -1
  339. package/dist/core/table/types.js +1 -0
  340. package/dist/core/tabletype/AdtDdicTableType.d.ts +5 -5
  341. package/dist/core/tabletype/AdtDdicTableType.d.ts.map +1 -1
  342. package/dist/core/tabletype/AdtDdicTableType.js +4 -9
  343. package/dist/core/tabletype/create.d.ts.map +1 -1
  344. package/dist/core/tabletype/create.js +2 -1
  345. package/dist/core/tabletype/types.d.ts +12 -31
  346. package/dist/core/tabletype/types.d.ts.map +1 -1
  347. package/dist/core/transformation/AdtTransformation.d.ts +25 -6
  348. package/dist/core/transformation/AdtTransformation.d.ts.map +1 -1
  349. package/dist/core/transformation/AdtTransformation.js +21 -9
  350. package/dist/core/transformation/check.d.ts.map +1 -1
  351. package/dist/core/transformation/check.js +1 -1
  352. package/dist/core/transformation/create.d.ts.map +1 -1
  353. package/dist/core/transformation/create.js +2 -1
  354. package/dist/core/transformation/types.d.ts +14 -31
  355. package/dist/core/transformation/types.d.ts.map +1 -1
  356. package/dist/core/transformation/types.js +1 -0
  357. package/dist/core/transport/AdtRequest.d.ts +25 -19
  358. package/dist/core/transport/AdtRequest.d.ts.map +1 -1
  359. package/dist/core/transport/AdtRequest.js +6 -8
  360. package/dist/core/transport/types.d.ts +15 -77
  361. package/dist/core/transport/types.d.ts.map +1 -1
  362. package/dist/endpoints/codes.d.ts +74 -0
  363. package/dist/endpoints/codes.d.ts.map +1 -0
  364. package/dist/endpoints/codes.js +95 -0
  365. package/dist/executors/abapUnitRunner.d.ts +15 -6
  366. package/dist/executors/abapUnitRunner.d.ts.map +1 -1
  367. package/dist/executors/abapUnitRunner.js +2 -1
  368. package/dist/executors/abapUnitTestRunner.d.ts +107 -0
  369. package/dist/executors/abapUnitTestRunner.d.ts.map +1 -0
  370. package/dist/executors/abapUnitTestRunner.js +99 -0
  371. package/dist/executors/class/ClassExecutor.d.ts +12 -6
  372. package/dist/executors/class/ClassExecutor.d.ts.map +1 -1
  373. package/dist/executors/class/ClassExecutor.js +3 -4
  374. package/dist/executors/class/ClassTestRunner.d.ts +7 -6
  375. package/dist/executors/class/ClassTestRunner.d.ts.map +1 -1
  376. package/dist/executors/class/ClassTestRunner.js +2 -4
  377. package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts +7 -6
  378. package/dist/executors/functionGroup/FunctionGroupTestRunner.d.ts.map +1 -1
  379. package/dist/executors/functionGroup/FunctionGroupTestRunner.js +2 -4
  380. package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts +7 -6
  381. package/dist/executors/functionModule/FunctionModuleTestRunner.d.ts.map +1 -1
  382. package/dist/executors/functionModule/FunctionModuleTestRunner.js +2 -4
  383. package/dist/executors/index.d.ts +1 -0
  384. package/dist/executors/index.d.ts.map +1 -1
  385. package/dist/executors/index.js +4 -1
  386. package/dist/executors/program/ProgramExecutor.d.ts +12 -6
  387. package/dist/executors/program/ProgramExecutor.d.ts.map +1 -1
  388. package/dist/executors/program/ProgramExecutor.js +3 -4
  389. package/dist/executors/program/ProgramTestRunner.d.ts +7 -6
  390. package/dist/executors/program/ProgramTestRunner.d.ts.map +1 -1
  391. package/dist/executors/program/ProgramTestRunner.js +2 -4
  392. package/dist/executors/traceScheduling.d.ts +2 -1
  393. package/dist/executors/traceScheduling.d.ts.map +1 -1
  394. package/dist/executors/traceScheduling.js +2 -4
  395. package/dist/index.core.d.ts +9 -5
  396. package/dist/index.core.d.ts.map +1 -1
  397. package/dist/index.core.js +13 -2
  398. package/dist/index.executors.d.ts +1 -0
  399. package/dist/index.executors.d.ts.map +1 -1
  400. package/dist/index.executors.js +4 -1
  401. package/dist/index.readings.d.ts +7 -35
  402. package/dist/index.readings.d.ts.map +1 -1
  403. package/dist/index.readings.js +8 -6
  404. package/dist/index.runtime.d.ts +1 -1
  405. package/dist/index.runtime.d.ts.map +1 -1
  406. package/dist/runtime/applicationLog/ApplicationLog.d.ts +4 -4
  407. package/dist/runtime/applicationLog/ApplicationLog.d.ts.map +1 -1
  408. package/dist/runtime/applicationLog/ApplicationLog.js +5 -7
  409. package/dist/runtime/atc/AdtAtc.d.ts +3 -3
  410. package/dist/runtime/atc/AdtAtc.d.ts.map +1 -1
  411. package/dist/runtime/atc/AdtAtc.js +4 -6
  412. package/dist/runtime/atc/AtcLog.d.ts +4 -4
  413. package/dist/runtime/atc/AtcLog.d.ts.map +1 -1
  414. package/dist/runtime/atc/AtcLog.js +5 -7
  415. package/dist/runtime/ddic/DdicActivation.d.ts +4 -4
  416. package/dist/runtime/ddic/DdicActivation.d.ts.map +1 -1
  417. package/dist/runtime/ddic/DdicActivation.js +5 -7
  418. package/dist/runtime/debugger/AbapDebugger.d.ts +15 -3
  419. package/dist/runtime/debugger/AbapDebugger.d.ts.map +1 -1
  420. package/dist/runtime/debugger/AbapDebugger.js +10 -5
  421. package/dist/runtime/debugger/AmdpDebugger.d.ts +10 -3
  422. package/dist/runtime/debugger/AmdpDebugger.d.ts.map +1 -1
  423. package/dist/runtime/debugger/AmdpDebugger.js +9 -5
  424. package/dist/runtime/debugger/index.d.ts +1 -1
  425. package/dist/runtime/debugger/index.d.ts.map +1 -1
  426. package/dist/runtime/dumps/RuntimeDumps.d.ts +4 -4
  427. package/dist/runtime/dumps/RuntimeDumps.d.ts.map +1 -1
  428. package/dist/runtime/dumps/RuntimeDumps.js +5 -7
  429. package/dist/runtime/feeds/FeedRepository.d.ts +4 -4
  430. package/dist/runtime/feeds/FeedRepository.d.ts.map +1 -1
  431. package/dist/runtime/feeds/FeedRepository.js +5 -7
  432. package/dist/runtime/gatewayErrorLog/GatewayErrorLog.d.ts +4 -4
  433. package/dist/runtime/gatewayErrorLog/GatewayErrorLog.d.ts.map +1 -1
  434. package/dist/runtime/gatewayErrorLog/GatewayErrorLog.js +5 -7
  435. package/dist/runtime/memory/MemorySnapshots.d.ts +10 -3
  436. package/dist/runtime/memory/MemorySnapshots.d.ts.map +1 -1
  437. package/dist/runtime/memory/MemorySnapshots.js +9 -5
  438. package/dist/runtime/systemMessages/SystemMessages.d.ts +4 -4
  439. package/dist/runtime/systemMessages/SystemMessages.d.ts.map +1 -1
  440. package/dist/runtime/systemMessages/SystemMessages.js +5 -7
  441. package/dist/runtime/traces/CrossTraceDomain.d.ts +4 -4
  442. package/dist/runtime/traces/CrossTraceDomain.d.ts.map +1 -1
  443. package/dist/runtime/traces/CrossTraceDomain.js +5 -7
  444. package/dist/runtime/traces/ProfilerDomain.d.ts +4 -3
  445. package/dist/runtime/traces/ProfilerDomain.d.ts.map +1 -1
  446. package/dist/runtime/traces/ProfilerDomain.js +5 -7
  447. package/dist/runtime/traces/St05Trace.d.ts +4 -4
  448. package/dist/runtime/traces/St05Trace.d.ts.map +1 -1
  449. package/dist/runtime/traces/St05Trace.js +5 -7
  450. package/dist/utils/activationUtils.d.ts +19 -6
  451. package/dist/utils/activationUtils.d.ts.map +1 -1
  452. package/dist/utils/activationUtils.js +40 -132
  453. package/dist/utils/checkRun.d.ts +10 -6
  454. package/dist/utils/checkRun.d.ts.map +1 -1
  455. package/dist/utils/checkRun.js +12 -69
  456. package/dist/utils/criticalSection.d.ts +2 -1
  457. package/dist/utils/criticalSection.d.ts.map +1 -1
  458. package/dist/utils/criticalSection.js +31 -3
  459. package/dist/utils/requestTrace.d.ts.map +1 -1
  460. package/dist/utils/requestTrace.js +5 -6
  461. package/docs/README.md +5 -4
  462. package/docs/usage/ADT_OBJECT_ENTITIES.md +79 -10
  463. package/docs/usage/ANSWER_SHAPES.md +3 -2
  464. package/docs/usage/CLIENT_API_REFERENCE.md +72 -40
  465. package/docs/usage/ERRATA.md +2 -2
  466. package/docs/usage/MIGRATION-38.md +507 -0
  467. package/docs/usage/OBJECT_LIFECYCLE.md +23 -10
  468. package/docs/usage/RFC_CONNECTION.md +3 -2
  469. package/package.json +7 -5
package/README.md CHANGED
@@ -16,6 +16,19 @@ 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 37.x?** 38.0.0 (on `interfaces-adt` ^23.1.1) is typed by the ADT type
20
+ > tables: a client is fixed to its release variant (`AdtClientOnPrem`,
21
+ > `AdtClientCloud`, `createAdtClient(connection, { variant })`), every type
22
+ > code is a code of the tables (the `AdtObjectType*` unions, friendly names,
23
+ > `FUNC` and the other codes no table holds are gone), an API with a parent
24
+ > takes it, and `updateMetadata` is there for fifteen more types. It also puts
25
+ > each contract where it is accepted: the result-set contracts (`IClassResults`,
26
+ > …) are imported from `@mcp-abap-adt/interfaces-adt`, and each factory answers
27
+ > its class — a consumer composes the contract it accepts from interfaces-adt.
28
+ > See [Release variants and type codes](#release-variants-and-type-codes),
29
+ > [The contract you accept is yours](#the-contract-you-accept-is-yours) and
30
+ > [`docs/usage/MIGRATION-38.md`](docs/usage/MIGRATION-38.md).
31
+ >
19
32
  > **From 36.x?** 37.0.0 (on `interfaces-adt` ^20.1.0) makes
20
33
  > `getSystemInformation` answer an `IAdtResponse` — present, absent (a `404`)
21
34
  > or failed — and adds the required `objectProperties` slot to `IUtilResults`
@@ -104,7 +117,7 @@ This package interacts with external packages **ONLY through interfaces**:
104
117
 
105
118
  | package | what this package takes from it |
106
119
  |---|---|
107
- | [`@mcp-abap-adt/interfaces-adt`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-adt) `^20.1.0` | the capability atoms, every object's config, `IAdtResponse`, `IAnalyse`, `IAdtAnalyseOptions`, `IAdtHeaders`, `IResultStrategy`, `ADT_NO_FAILURE`, `ADT_TASK_TYPE` |
120
+ | [`@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
121
  | [`@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
122
  | [`@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
123
  | [`@mcp-abap-adt/interfaces-utils`](https://www.npmjs.com/package/@mcp-abap-adt/interfaces-utils) `^1.1.1` | `ILogger`, `LogLevel`, `XmlNode` |
@@ -146,7 +159,8 @@ npm install @mcp-abap-adt/adt-clients
146
159
  - Every answer is a contract — a result or a failure, never a throw
147
160
  - Utility functions via `client.getUtils()`
148
161
  - Example: `await client.getClass().create({...}, { headers })` — the POST, and nothing else
149
- - **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()` returns `AdtClient` 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)
162
+ - **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)
163
+ - **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
164
 
151
165
  2. **AdtRuntimeClient**
152
166
  - Stable runtime operations for traces, dumps, logs, feeds, ATC check runs, and more
@@ -161,13 +175,14 @@ npm install @mcp-abap-adt/adt-clients
161
175
  - `getClassTestRunner()` for a class's ABAP Unit tests: `run`, `getStatus`, `getResult` (asynchronous, the default), or `runSync` (synchronous)
162
176
  - `getProgramTestRunner()` for a report's ABAP Unit tests, in its source or its includes — `run` (asynchronous, the default) or `runSync`
163
177
  - `getFunctionGroupTestRunner()` / `getFunctionModuleTestRunner()` for a function group's tests, or a module's — `run` (asynchronous, the default) or `runSync`
178
+ - `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
179
  - `getProgramExecutor()` for `programrun` (on-premise systems)
165
180
  - Methods: `run`, `runWithProfiler`, and trace scheduling (`scheduleTrace`, `listRequests`, `getRequestsByUri`, `listObjectTypes`, `listProcessTypes`)
166
181
  - Each executor factory takes an optional result set, like the runtime client's
167
182
  - `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
183
 
169
184
  4. **AdtAbapGitClient**
170
- - Standalone: `new AdtAbapGitClient(connection, logger?, results?)` (the options argument, `contentTypeVersion`, was removed in 36.0.0)
185
+ - 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
186
  - `link`, `pull`, `unlink({ repositoryId })`, `listRepos`, `getErrorLog(logLink)`, `checkExternalRepo` — one request each; `pull` does not wait
172
187
 
173
188
  5. **AdtClientsWS**
@@ -175,7 +190,7 @@ npm install @mcp-abap-adt/adt-clients
175
190
  - Example: `await wsClient.request('<operation>', { … })` against a backend that speaks its envelope
176
191
 
177
192
  6. **AbapDebugger, AmdpDebugger, MemorySnapshots**
178
- - Standalone, from `@mcp-abap-adt/adt-clients/runtime` or the root: `new AbapDebugger(connection, logger, results?, { onConflict? })`
193
+ - 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
194
  - One member per request, contracts `IAbapDebugger`, `IAmdpDebugger`, `IMemorySnapshots` from `@mcp-abap-adt/interfaces-adt` (contract 18 pairs with clients 32)
180
195
  - **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
196
  - **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 +199,51 @@ npm install @mcp-abap-adt/adt-clients
184
199
 
185
200
  ## Supported Object Types
186
201
 
187
- | Object Type | AdtClient |
188
- |------------|-----------|
189
- | Classes (CLAS) | ✅ |
190
- | Behavior Implementations (CLAS) | ✅ |
191
- | Behavior Definitions (BDEF) | ✅ |
192
- | Interfaces (INTF) | ✅ |
193
- | Programs (PROG) | ✅ |
194
- | Includes (PROG/I) | ✅ |
195
- | Enhancements (ENHO/XHB, ENHO/XHH, ENHS/XSB) | ✅ |
196
- | Function Groups (FUGR) | ✅ |
197
- | Function Modules (FUGR/FF) | ✅ |
198
- | Function Includes (FUGR/I) | ✅ |
199
- | Domains (DOMA) | ✅ |
200
- | Data Elements (DTEL) | ✅ |
201
- | Structures (TABL/DS) | ✅ |
202
- | Tables (TABL/DT) | ✅ |
203
- | Views (DDLS) | ✅ |
204
- | Metadata Extensions (DDLX) | ✅ |
205
- | Packages (DEVC) | ✅ |
206
- | Authorization Fields (SUSO / AUTH) | ✅ |
207
- | Feature Toggles (FTG2/FT) | ✅ |
208
- | Transports (TRNS) | ✅ |
202
+ What the library serves is declared by the ADT type tables of
203
+ `@mcp-abap-adt/interfaces-adt`, one per release variant; the factory is the
204
+ API, the codes are the tables'. ✅ the variant's table holds the API, — it does
205
+ not (the factory does not compile there). 7.40 is `AdtClientLegacy` of
206
+ `@mcp-abap-adt/adt-clients-legacy`, which serves less than its table lists
207
+ 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)).
208
+
209
+ | Object type | Factory | Codes | On premise | Cloud | 7.40 |
210
+ |---|---|---|---|---|---|
211
+ | Classes | `getClass()` | `CLAS/OC` | ✅ | ✅ | ✅ |
212
+ | Behavior implementations | `getBehaviorImplementation()` | `CLAS/OC` | ✅ | ✅ | — |
213
+ | Behavior definitions | `getBehaviorDefinition()` | `BDEF/BDO` | ✅ | ✅ | — |
214
+ | Interfaces | `getInterface()` | `INTF/OI` | ✅ | ✅ | ✅ |
215
+ | Programs | `getProgram()` | `PROG/P` | ✅ | ✅ | ✅ |
216
+ | Includes | `getInclude()` | `PROG/I` | ✅ | ✅ | ✅ |
217
+ | Enhancements | `getEnhancement()` | `ENHO/XHH`, `ENHO/XHB`, `ENHS/XSB` | ✅ | ✅ | — |
218
+ | Function groups | `getFunctionGroup()` | `FUGR/F` | ✅ | ✅ | ✅ |
219
+ | Function modules | `getFunctionModule()` | `FUGR/FF`, under its group | ✅ | ✅ | ✅ |
220
+ | Function includes | `getFunctionInclude()` | `FUGR/I`, under its group | ✅ | ✅ | ✅ |
221
+ | Domains | `getDomain()` | `DOMA/DD` | ✅ | ✅ | — |
222
+ | Data elements | `getDataElement()` | `DTEL/DE` | ✅ | ✅ | — |
223
+ | Structures | `getStructure()` | `TABL/DS` | ✅ | ✅ | — |
224
+ | Append structures | `getAppendStructure()` | `TABL/DS` | ✅ | ✅ | — |
225
+ | Tables | `getTable()` | `TABL/DT` | ✅ | ✅ | — |
226
+ | Table types | `getTableType()` | `TTYP/DA` | ✅ | ✅ | — |
227
+ | DDL sources (CDS views) | `getDdl()` | `DDLS/DF` | ✅ | ✅ | ✅ |
228
+ | Access controls | `getAccessControl()` | `DCLS/DL` | ✅ | ✅ | — |
229
+ | Metadata extensions | `getMetadataExtension()` | `DDLX/EX` | ✅ | ✅ | — |
230
+ | Service definitions | `getServiceDefinition()` | `SRVD/SRV` | ✅ | ✅ | — |
231
+ | Service bindings | `getServiceBinding()` | `SRVB/SVB` | ✅ | ✅ | — |
232
+ | Scalar functions | `getScalarFunction()` | `DSFD/SCF` | ✅ | ✅ | — |
233
+ | Scalar function implementations | `getScalarFunctionImplementation()` | `DSFI/SFI` | ✅ | ✅ | — |
234
+ | Transformations | `getTransformation()` | `XSLT/VT` | ✅ | ✅ | — |
235
+ | Message classes | `getMessageClass()` | `MSAG/N` | ✅ | ✅ | ✅ |
236
+ | Messages | `getMessageClassMessage()` | `MSAG/NN`, read from its class | ✅ | ✅ | ✅ |
237
+ | Packages | `getPackage()` | `DEVC/K` | ✅ | ✅ | — |
238
+ | Authorization fields | `getAuthorizationField()` | `AUTH` | ✅ | ✅ | — |
239
+ | Feature toggles | `getFeatureToggle()` | `FTG2/FT` | ✅ | ✅ | — |
240
+ | Local includes of a class | `getLocalTestClass()`, `getLocalTypes()`, `getLocalDefinitions()`, `getLocalMacros()` | — | ✅ | ✅ | ✅ |
241
+ | Transport requests | `getRequest()` | — | ✅ | ✅ | ✅ |
242
+
243
+ Which operations each code has — `source`, `updateMetadata`, `run`, … — is the
244
+ code's `operations` in the table; a member whose operation the variant's table
245
+ does not list for the code does not compile (`getProgram().updateMetadata()`
246
+ on a cloud client, say).
209
247
 
210
248
  `getEnhancement().updateMetadata()` writes the whole object document from
211
249
  `options.source` under the caller's lock, then the caller unlocks and activates.
@@ -229,7 +267,7 @@ import {
229
267
  AdtOnPremConnector,
230
268
  OnPremHttpTransport,
231
269
  } from '@mcp-abap-adt/connection';
232
- import { AdtClient, utilDocuments } from '@mcp-abap-adt/adt-clients';
270
+ import { AdtClientOnPrem, utilDocuments } from '@mcp-abap-adt/adt-clients';
233
271
  import {
234
272
  utilSearchHits,
235
273
  utilWhereUsedReferences,
@@ -265,7 +303,9 @@ const connection = new AdtOnPremConnector(
265
303
  // surfacing later as `400 Session not found` mid-edit.
266
304
  await connection.connect();
267
305
 
268
- const client = new AdtClient(connection, console);
306
+ // The release variant is yours to declare, like the system: an on-premise
307
+ // client is typed by ADT_TYPES_ONPREM (AdtClientCloud for ABAP cloud).
308
+ const client = new AdtClientOnPrem(connection, console);
269
309
 
270
310
  // One member, one request: this is the POST that makes the class shell.
271
311
  // Writing its source and activating it are calls of your own, below.
@@ -305,7 +345,7 @@ const utils = client.getUtils({
305
345
  whereUsed: utilWhereUsedReferences,
306
346
  });
307
347
 
308
- const found = await utils.search({ query: 'Z*', objectType: 'CLAS' });
348
+ const found = await utils.search({ query: 'Z*', objectType: 'CLAS/OC' });
309
349
  if (found.ok) {
310
350
  found.getResult().value; // ISearchResult[] — the document, without utilSearchHits
311
351
  } else {
@@ -318,7 +358,7 @@ if (found.ok) {
318
358
  // /usageReferences/scope sub-resource (some S/4 releases 404 it) is a decision
319
359
  // about your system, so it is yours rather than a fallback hidden in here.
320
360
  const scope = await utils.getWhereUsedScope(
321
- { object_name: 'ZMY_TABLE', object_type: 'table' },
361
+ { object_name: 'ZMY_TABLE', object_type: 'TABL/DT' },
322
362
  { headers: WHERE_USED_SCOPE },
323
363
  );
324
364
  if (!scope.ok) {
@@ -334,7 +374,7 @@ const narrowed = utils.modifyWhereUsedScope(scope.getResult().value, {
334
374
  });
335
375
 
336
376
  const answer = await utils.getWhereUsed(
337
- { object_name: 'ZMY_TABLE', object_type: 'table', scopeXml: narrowed },
377
+ { object_name: 'ZMY_TABLE', object_type: 'TABL/DT', scopeXml: narrowed },
338
378
  { headers: WHERE_USED },
339
379
  );
340
380
 
@@ -344,7 +384,8 @@ if (answer.ok) {
344
384
  const references = answer.getResult().value;
345
385
  console.log(`Found ${references.totalReferences} references`);
346
386
  for (const ref of references.references) {
347
- console.log(`${ref.name} (${ref.type}) in ${ref.packageName}`);
387
+ // `type` for a code of the tables, `unknownType` for any other text.
388
+ console.log(`${ref.name} (${ref.type ?? ref.unknownType}) in ${ref.packageName}`);
348
389
  }
349
390
  }
350
391
  ```
@@ -508,14 +549,61 @@ Doc test relation (`"! @testing FUNC:<module>`) on a test class, the default
508
549
  scope answered the group's tests as a preview (`isForeign="true"`, nothing
509
550
  executed) and `scope: { foreignTests: true }` ran them.
510
551
 
511
- **AdtUtils read type safety:**
512
- `readObjectMetadata` and `readObjectSource` accept strict object type unions to prevent invalid inputs like `view:ZOBJ`.
552
+ **The generic runner, `getAbapUnitTestRunner()`.** The four runners above each
553
+ fix the `osl:object type` they send (`CLAS`, `PROG`, `FUGR`, `FUNC`). The
554
+ generic one takes it from the caller, typed `AbapUnitRunObjectType` — every key
555
+ of `ABAP_UNIT_RUN_TYPES` in `@mcp-abap-adt/interfaces-adt`, and nothing else —
556
+ or runs a package:
513
557
 
514
558
  ```typescript
515
- import type { AdtObjectType, AdtSourceObjectType } from '@mcp-abap-adt/interfaces-adt';
559
+ import { abapUnitTestRunnerDocuments } from '@mcp-abap-adt/adt-clients';
560
+
561
+ const generic = executor.getAbapUnitTestRunner({
562
+ ...abapUnitTestRunnerDocuments,
563
+ run: unitTestRunId,
564
+ });
565
+ // An object target: one osl:object in an osl:flatObjectSet.
566
+ await generic.run({ kind: 'object', name: 'ZCL_UNDER_TEST', type: 'CLAS/OC' });
567
+ // A CDS view's tests are assigned tests: they execute only with foreignTests.
568
+ await generic.run(
569
+ { kind: 'object', name: 'ZI_VIEW', type: 'DDLS/DF' },
570
+ { scope: { foreignTests: true }, analyse: analyseUnitTestStart },
571
+ );
572
+ // A package target: an osl:packageSet with one osl:package.
573
+ await generic.run({ kind: 'package', name: '$ZPKG', includeSubpackages: true });
574
+ // ADT URIs, on /abapunit/testruns, with the request's headers.
575
+ await generic.runSync(['/sap/bc/adt/oo/classes/zcl_under_test'], {
576
+ headers: { accept: 'application/xml', contentType: 'application/xml' },
577
+ analyse: analyseUnitTest,
578
+ });
579
+ ```
580
+
581
+ Both targets go to `POST /sap/bc/adt/abapunit/runs` and are polled with
582
+ `getStatus` and `getResult`, as every runner's. **A CDS view holds no test
583
+ class**: its tests are local test classes elsewhere — a class's testclasses
584
+ include — marked `"! @testing <view>`, and they execute by `DDLS/DF` (or
585
+ `DDLS`) only when the scope sets `foreignTests: true`. Without it, the default
586
+ `addForeignTestsAsPreview: true` lists them in the result **without executing
587
+ them**: every method is there with no alert, so a failing test looks like a
588
+ pass; with the preview off too, the result is empty (measured 2026-10-29 on
589
+ S/4HANA 2025 and ABAP cloud). **A consumer reading a CDS run sets
590
+ `foreignTests: true`.** **A package** runs only as an `osl:packageSet` — `osl:object
591
+ type="DEVC/K"` answered empty (measured 2026-10-29, S/4HANA 2025 and ABAP
592
+ cloud). **A wrong type is not an error**: the endpoint answers the start `201`
593
+ and the result as an empty `<aunit:runResult/>`, which is why the type is the
594
+ compiler's to check. On a legacy system the generic runner keeps `runSync` and
595
+ refuses a target run, `getStatus` and `getResult` without a request (7.40 has
596
+ no `/abapunit/runs`).
597
+
598
+ **AdtUtils read type safety:**
599
+ `readObjectMetadata` and `readObjectSource` take the codes of the tables they
600
+ read (`AdtMetadataReadCode`, `AdtSourceReadCode`), so `'view'` or `'CLAS'` does
601
+ not compile, and a function module's group is required:
516
602
 
517
- await utils.readObjectMetadata('DDLS/DF' satisfies AdtObjectType, 'ZOK_I_CDS_TEST');
518
- await utils.readObjectSource('view' satisfies AdtSourceObjectType, 'ZOK_I_CDS_TEST');
603
+ ```typescript
604
+ await utils.readObjectMetadata('DDLS/DF', 'ZOK_I_CDS_TEST');
605
+ await utils.readObjectSource('DDLS/DF', 'ZOK_I_CDS_TEST');
606
+ await utils.readObjectSource('FUGR/FF', 'Z_MY_FM', 'ZMY_GROUP');
519
607
  ```
520
608
 
521
609
  **Benefits:**
@@ -578,10 +666,13 @@ change what you mean to change, pass the result. Anything you leave out is gone,
578
666
  because nothing is read on your behalf to keep it.
579
667
 
580
668
  For a class, a program or a DDL source the whole content is the **full source**.
581
- For domain, package, dataElement, tableType, transport, functionGroup and
582
- message class it is the object's own **document**, passed as `options.source` to
583
- `updateMetadata` — the first six fetched and patched it for you until 19.0.0,
584
- the message class until 23.0.0, and none of them does now.
669
+ For domain, package, dataElement, tableType, transport and message class it is
670
+ the object's own **document**, passed as `options.source` to `updateMetadata` —
671
+ the first five and the function group fetched and patched it for you until
672
+ 19.0.0, the message class until 23.0.0, and none of them does now. Every type
673
+ that has both — a class, a function group, a table, … (38.0.0 added
674
+ `updateMetadata` to fifteen of them) — writes its metadata document the same way:
675
+ read it, change it, pass the whole document back.
585
676
 
586
677
  ```typescript
587
678
  const cls = client.getClass();
@@ -694,6 +785,47 @@ The script uses the same environment variables as the main package:
694
785
 
695
786
  See [Tools Documentation](tools/README.md) for complete details and options.
696
787
 
788
+ ### The type tables' conformance check
789
+
790
+ The ADT type tables of `@mcp-abap-adt/interfaces-adt` (`ADT_TYPES_ONPREM`,
791
+ `ADT_TYPES_CLOUD`, `ADT_TYPES_BASIS_740`) are held to what each release
792
+ answers: its `typestructure`, its `discovery` and, per sample object, its
793
+ `urimapper` and metadata answers. The answers are recorded in `corpus/adt/`
794
+ (`typestructure/`, `discovery/`, `conformance/<release>/`; see
795
+ [`corpus/README.md`](corpus/README.md)).
796
+
797
+ - **In CI** — `src/__tests__/unit/conformance/typeTablesConformance.test.ts`
798
+ runs the check against the recorded answers. What it finds is committed
799
+ beside it: the known divergences with their reasons, the list of creates
800
+ without `CREATE` and the collections that advertise no `app:accept` for an
801
+ `updateMetadata` (`recorded.ts`), and the coverage (`coverage.json`). A
802
+ change that changes what the check finds is an edit of those lists.
803
+ - **On a live system** — `src/__tests__/integration/shared/typeTablesConformance.test.ts`
804
+ reads the same endpoints for the configured variant (`environment.system`)
805
+ and runs the same check. It prints the system's identity and writes it
806
+ nowhere:
807
+
808
+ ```bash
809
+ MCP_ENV_PATH=<env> MCP_TEST_OVERLAY=<overlay> \
810
+ npm test -- src/__tests__/integration/shared/typeTablesConformance.test.ts
811
+ ```
812
+
813
+ **Refreshing a release's answers.** Run the live check with
814
+ `CONFORMANCE_WRITE_DIR=<dir>` (refused when `CI` is set). It writes the
815
+ answers, scrubbed with the corpus placeholders, under `<dir>` in the corpus
816
+ layout: `typestructure/system-description-<release>--07-typestructure.*`,
817
+ `discovery/system-description-<release>--03-discovery.*` and
818
+ `conformance/<release>/` with its `_index.json`. Then:
819
+
820
+ 1. Review the written files: no host, user, system id or token may be left
821
+ (`src/__tests__/unit/corpusCarriesNoIdentity.test.ts` checks the corpus).
822
+ 2. Copy them over the release's files in `corpus/adt/`. A written
823
+ `_index.json` carries the sample, statuses, both addresses and the files;
824
+ keep the recorded index's notes and reasons where they still hold.
825
+ 3. Run `npm run corpus:format`, then the unit tests; edit `recorded.ts` and
826
+ `coverage.json` for what the check now finds, with a reason for each
827
+ divergence.
828
+
697
829
  ## API Reference
698
830
 
699
831
  ### AdtClient Overview
@@ -868,7 +1000,7 @@ await client.getClass().read(
868
1000
  ```
869
1001
 
870
1002
  - 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 an `Adt*` object typed to its **honest capability set** (since 8.0.0, completed in 12.0.0). Every accessor returns the intersection of the capability atoms that object actually supports, written positively — there is no composite at all, and none named for what an object lacks. 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.
1003
+ - 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
1004
  - See `src/index.ts` for the full type exports and object configs.
873
1005
 
874
1006
  ### AdtObject Methods (with Long Polling Support)
@@ -1073,7 +1205,9 @@ hold yourself:
1073
1205
  headers) or `AdtContentTypesBase` (v1, universal) from that answer.
1074
1206
  - `fetchDiscoveryEndpoints(connection)` / `isEndpointInDiscovery(...)` — the
1075
1207
  discovery document and a membership test over it.
1076
- - `createAdtClient(connection, logger?, options?)` — `AdtClient`. It detects
1208
+ - `createAdtClient(connection, { variant, logger?, …options })` —
1209
+ `AdtClientOnPrem` for `variant: 'onprem'`, `AdtClientCloud` for `'cloud'`
1210
+ (since 38.0.0; it took `(connection, logger?, options?)` before). It detects
1077
1211
  nothing and sends no request (since 37.4.0): the consumer declares the system
1078
1212
  type, and a legacy system is served by `AdtClientLegacy` of
1079
1213
  `@mcp-abap-adt/adt-clients-legacy`, an RFC client constructed by the consumer.
@@ -1119,7 +1253,7 @@ everything else is not.
1119
1253
 
1120
1254
  ### Single Definition Site: the contract packages
1121
1255
 
1122
- Since **7.5.0**, every contract type is **defined once**, in the contract packages — today `@mcp-abap-adt/interfaces-adt` (`^20.1.0`) 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 option and response types and the cross-cutting shared types all live there.
1256
+ 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
1257
 
1124
1258
  **Import them from the package that owns them:**
1125
1259
 
@@ -1146,7 +1280,7 @@ the contract naming one would be describing an implementation.
1146
1280
 
1147
1281
  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
1282
 
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` and their `I…Results` types), the building blocks `rawDocument`, `nothing`, `wireItself` and `nothingIsARefusal`, and a few helpers.
1283
+ 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
1284
 
1151
1285
  ### Honest capability types (since 8.0.0)
1152
1286
 
@@ -1171,7 +1305,7 @@ Since **25.0.0** ATC takes programs and every kind of include, `interfaces-adt`
1171
1305
 
1172
1306
  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
1307
 
1174
- **A guard keeps this true.** `src/__tests__/unit/capabilities/` compares all 37 factory return types against the 12 atoms in both directions at compile time, 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`.
1308
+ **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
1309
 
1176
1310
  One category deliberately remains local, because it is code, not contract:
1177
1311
 
@@ -1201,6 +1335,91 @@ sourced from the contract packages.
1201
1335
 
1202
1336
  > **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
1337
 
1338
+ ### Release variants and type codes
1339
+
1340
+ Since **38.0.0** the library is typed by the ADT type tables of
1341
+ `@mcp-abap-adt/interfaces-adt`: `ADT_TYPES_ONPREM` (S/4HANA 2025),
1342
+ `ADT_TYPES_CLOUD` (ABAP cloud) and `ADT_TYPES_BASIS_740` (SAP_BASIS 7.40). Each
1343
+ names the APIs the library offers on that release — one per factory — with
1344
+ their codes, and for each code its parent API, its name length and the
1345
+ operations the library performs there. The tables are the library's
1346
+ declaration; the [conformance check](#the-type-tables-conformance-check) holds
1347
+ them to what each release answers.
1348
+
1349
+ - **The variant is declared, never detected.** `AdtClient<V>` is fixed to one:
1350
+ `AdtClientOnPrem`, `AdtClientCloud`, or the plain `AdtClient`, served what
1351
+ both modern tables serve. `createAdtClient(connection, { variant, logger })`
1352
+ answers the declared one. A SAP_BASIS 7.40 system is `AdtClientLegacy`
1353
+ (`AdtClient<'basis740'>`) of `@mcp-abap-adt/adt-clients-legacy`.
1354
+ - **The gates are types.** A factory takes `this: this & AdtServedBy<'<api>'>`
1355
+ and a member whose availability differs by variant `this: this &
1356
+ AdtPerformedBy<'<api>', '<operation>'>`: a factory or operation the variant's
1357
+ table lacks is a compile error naming it. The executors and ABAP Unit runners
1358
+ (`AdtExecutor<V>`) are gated the same way.
1359
+ - **A code is a code of the tables.** Every code taken or answered is an
1360
+ `AdtTypeCode` (`'CLAS/OC'`, `'FUGR/FF'`, `'TABL/DT'`, …) or a subset of it
1361
+ (`AdtSourceTypeCode`, `AdtCodeOf<V>`, the `getUtils()` code sets). No
1362
+ friendly name, bare R3TR type or lower-case spelling is taken. `VIEW/DV` is
1363
+ a group-only code: group activation, group deletion and where-used address
1364
+ it, and no factory serves it.
1365
+ - **An API with a parent takes it.** A function module and a function include
1366
+ are addressed under their function group: their members, a
1367
+ `readObjectSource('FUGR/FF', name, group)` and an
1368
+ `IObjectReference<'FUGR/FF'>` require the group.
1369
+ - **What an answer names is `type` or `unknownType`.** A reading of
1370
+ `@mcp-abap-adt/adt-strategies` that takes a code from an answer answers an
1371
+ `IAdtAnsweredObject`: `type` for a code a table holds, `unknownType` — the
1372
+ text as ADT sent it — for any other.
1373
+
1374
+ `src/__tests__/unit/typeCodeLiterals.test.ts` (one per package) holds the
1375
+ source to it: a code literal passes only where the compiler types it by the
1376
+ tables, and a code named in a comment or inside a longer string (a message,
1377
+ an XML template's span) is a code of the tables.
1378
+
1379
+ ### The contract you accept is yours
1380
+
1381
+ Since **38.0.0** a contract lives in the package that accepts it. A factory
1382
+ accepts a result set, so the result-set contracts are
1383
+ `@mcp-abap-adt/interfaces-adt`'s; a consumer accepts the client, so the client
1384
+ contract is the consumer's. This package declares no composition: each factory
1385
+ answers its own class, and the class's members are what the factory offers.
1386
+
1387
+ A consumer composes the contract it accepts from interfaces-adt alone — the
1388
+ factories it calls, each answering the atoms whose members it calls, generic
1389
+ over the result-set contract it is given — and types its code against it. The
1390
+ compiler checks, where the client is taken, that `AdtClient`,
1391
+ `AdtClientLegacy` or the consumer's own implementation satisfies it:
1392
+
1393
+ ```typescript
1394
+ import type {
1395
+ IAdtLockable,
1396
+ IAdtReadable,
1397
+ IAdtUpdatable,
1398
+ IClassConfig,
1399
+ IClassResults,
1400
+ } from '@mcp-abap-adt/interfaces-adt';
1401
+ import { classDocuments, createAdtClient } from '@mcp-abap-adt/adt-clients';
1402
+
1403
+ interface IMyClient {
1404
+ getClass<R extends IClassResults>(
1405
+ results: R,
1406
+ ): IAdtReadable<IClassConfig, ReturnType<R['source']>> &
1407
+ IAdtLockable<IClassConfig> &
1408
+ IAdtUpdatable<Partial<IClassConfig>, ReturnType<R['updated']>>;
1409
+ }
1410
+
1411
+ const client: IMyClient = await createAdtClient(connection, {
1412
+ variant: 'onprem',
1413
+ logger,
1414
+ });
1415
+ const classes = client.getClass(classDocuments); // read answers a string
1416
+ ```
1417
+
1418
+ `src/__tests__/unit/clients/consumerContract.test.ts` holds this package to it:
1419
+ such a contract accepts `AdtClient` and an object written by hand, and refuses
1420
+ one missing a member it names; the legacy package proves the same of
1421
+ `AdtClientLegacy`.
1422
+
1204
1423
  ### Naming Conventions
1205
1424
 
1206
1425
  The package uses **dual naming conventions** to distinguish API layers:
@@ -1236,6 +1455,7 @@ See [Architecture Documentation](docs/architecture/ARCHITECTURE.md#type-system-a
1236
1455
  One document per breaking release, each written for a consumer on the contract
1237
1456
  before it:
1238
1457
 
1458
+ - **[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
1459
  - **[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
1460
  - **[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
1461
  - **[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 instantiate directly: new AdtAbapGitClient(connection, logger, results?).
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 { ILogger } from '@mcp-abap-adt/interfaces-utils';
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
- constructor(connection: IAbapConnection, logger?: ILogger, results?: R);
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;;;;;;;;;;;GAWG;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;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAO9D,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;gBAG1B,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAIhB,OAAO,GAAE,CAAoC;IAO/C,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"}
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 instantiate directly: new AdtAbapGitClient(connection, logger, results?).
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
- constructor(connection, logger,
39
- // The options (`contentTypeVersion`, which chose what `link` and `pull`
40
- // sent) are gone since 36.0.0: those members send the caller's `headers`.
41
- // The one cast in this file, and it is on the default. See AdtClass.
42
- results = types_1.abapGitDocuments) {
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;