@mcp-abap-adt/interfaces-adt 23.1.1 → 24.0.1

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/CHANGELOG.md CHANGED
@@ -7,6 +7,65 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [24.0.1] - 2026-10-30
11
+
12
+ ### Fixed
13
+
14
+ - **A 7.40 search name says what it selects.** `IAdtMeasuredSearchType`
15
+ requires `answered`: the codes of the hits the name's recorded quick search
16
+ answered (`query=*`, `maxResults=200`, recorded 2026-10-30), as the newer
17
+ releases' entries carry the `type` their list says. Every entry of
18
+ `ADT_SEARCH_TYPES_BASIS_740` states it: `DEVC/K`, `CLAS/OC`, `INTF/OI`,
19
+ `PROG/P`, `FUGR/F`, `FUGR/FF` (`FUNC`), `DDLS/DF`, `MSAG/N`, `TABL/DS` and
20
+ `TABL/DT` (`TABL`), `ENHO/XH` and `FUGR/XH` (`ENHO`), `ENHS/XS`. A
21
+ consumer's conformance check can now hold a recorded search against what
22
+ its name selects, not only count its hits.
23
+
24
+ ## [24.0.0] - 2026-10-29
25
+
26
+ ### Breaking
27
+
28
+ - **The search filter takes the release's search names, not a code.**
29
+ `ISearchObjectsParams.objectType` was `AdtTypeCode`; it is `AdtSearchType`,
30
+ the names of the quick search's object types list. A code no longer
31
+ compiles as a filter: on S/4HANA 2025 and ABAP cloud a code that is no
32
+ list item's `type` selects as the text before its `/` (`ENHO/XHH` answers
33
+ as `ENHO`, with other first hits under `maxResults`) and an unknown one
34
+ answers nothing, silently (measured 2026-10-29).
35
+ - **`IAdtCodeFacts.main` is required.** Every code of a table checked against
36
+ `AdtApiTable<R>` states its main type, and `AdtCheckedTable<T>` requires it
37
+ to be its own key's (`AdtMainTypeOf`).
38
+
39
+ ### Added
40
+
41
+ - **Main types.** Every code entry of `ADT_TYPES_ONPREM`, `ADT_TYPES_CLOUD`
42
+ and `ADT_TYPES_BASIS_740` states its main type, the TADIR object type of
43
+ `R3TR <type>`: `'ENHO/XHH': { main: 'ENHO', … }` — a missing or a wrong one
44
+ does not compile, per key. **`AdtMainTypeOf<C>`**, **`AdtMainType`**,
45
+ **`AdtMainTypeOfVariant<V>`** and **`CodesOfMain<M>`** (a code with no `/`,
46
+ `AUTH`, is its own). A main type is not an address: every parameter that
47
+ builds one keeps taking a code.
48
+ - **Search names.** `ADT_SEARCH_TYPES_ONPREM` (385 names) and
49
+ `ADT_SEARCH_TYPES_CLOUD` (372), written from the recorded
50
+ `/sap/bc/adt/repository/informationsystem/objecttypes` lists — each name
51
+ with the code it selects (`type`: `STRU` → `TABL/DS`) or `group: true`
52
+ (`ABAP_TEST_COCKPIT`); `ADT_SEARCH_TYPES_BASIS_740`, the eleven names
53
+ measured to select on 7.40, which has no list (`404`) and answers its
54
+ aliases (`STRU`, `DTAB`, `REPO`, `INCL`, `BADI`) and unknown names with no
55
+ hits, silently. **`AdtSearchType`**, **`AdtSearchTypeOf<V>`**
56
+ (intersecting), **`IAdtSearchObjectsParamsOf<V>`**, and the shapes
57
+ `AdtSearchTypeTable`, `AdtListedSearchType`, `IAdtMeasuredSearchType`,
58
+ `AdtSearchTypeEvidence`, `IAdtSearchTypeTables`. Every main type of a
59
+ variant's table is a search name of that variant (recorded).
60
+
61
+ ### Migration
62
+
63
+ - Where a code was passed as the search filter, pass the search name: the
64
+ main type from the table entry's `main`
65
+ (`ADT_TYPES_ONPREM.package.codes['DEVC/K'].main`), or the alias of a
66
+ subtype (`STRU` for `TABL/DS`).
67
+ - A table built against `AdtApiTable` carries `main` on every code.
68
+
10
69
  ## [23.1.1] - 2026-10-29
11
70
 
12
71
  ### Fixed
package/README.md CHANGED
@@ -71,7 +71,8 @@ code serves two APIs (`CLAS/OC`: `class` and `behaviorImplementation`;
71
71
  two APIs on one code share it;
72
72
  - `collection` — the ADT collection its resource lives in, the parent's for an
73
73
  API addressed under a parent;
74
- - `codes` — for each code: `parent` (the parent API, or `null`),
74
+ - `codes` — for each code: `main` (its main type, below), `parent` (the
75
+ parent API, or `null`),
75
76
  `nameMaxLength`, `operations` and `evidence`, the corpus case of the
76
77
  release's `typestructure` answer that lists the code
77
78
  (`system-description-basis-740--07-typestructure`); and, where a code lives
@@ -126,6 +127,10 @@ evidence at compile time.
126
127
  | `AdtObjectKind` | every kind |
127
128
  | `AdtSourceTypeCode` | the codes with `source` |
128
129
  | `AdtParentedTypeCode` | the codes with a parent API: `FUGR/FF`, `FUGR/I` |
130
+ | `AdtMainTypeOf<C>` | the main type of code `C`: `'ENHO'` of `'ENHO/XHH'` |
131
+ | `AdtMainType` | every main type of any table (`AdtMainTypeOfVariant<V>` per variant) |
132
+ | `CodesOfMain<M>` | the codes of main type `M` |
133
+ | `AdtSearchType` | every search name of any release's list (`AdtSearchTypeOf<V>` the names every variant of `V` takes) |
129
134
 
130
135
  A map a consumer keeps over the codes is typed by them, and the compiler then
131
136
  asks for every code and refuses any other:
@@ -173,6 +178,49 @@ when `[C] extends [AdtParentedTypeCode]` — `IObjectReference<'FUGR/FF'>` —
173
178
  and leaves it optional otherwise, the default included, so a reference built
174
179
  from a code typed `AdtTypeCode` compiles and an interface can extend it.
175
180
 
181
+ ### Main types and search names (24.0.0)
182
+
183
+ A code's **main type** is its TADIR object type, the `R3TR <type>` before the
184
+ `/`: `ENHO` of `ENHO/XHH`, `DEVC` of `DEVC/K`, `TABL` of `TABL/DS`. Every code
185
+ entry states its own as `main`; the table's `satisfies` refuses an entry
186
+ without one, and `AdtCheckedTable<T>` one whose `main` is not its own key's
187
+ (per key: the main type of a neighbouring code is refused too).
188
+ `AdtMainTypeOf<C>` is the main type of a code, `CodesOfMain<M>` the codes of a
189
+ main type (`CodesOfMain<'ENHO'>` is `'ENHO/XHB' | 'ENHO/XHH'`),
190
+ `AdtMainType` every main type of any table and `AdtMainTypeOfVariant<V>` a
191
+ variant's. **A main type is not an address:** `TABL` is `TABL/DT` or
192
+ `TABL/DS`, and every parameter that builds an address — read, write,
193
+ metadata, a URI, where-used, the group operations — takes a code.
194
+
195
+ **The search filter takes the release's search names.**
196
+ `ISearchObjectsParams.objectType` is an `AdtSearchType`: a name of the quick
197
+ search's object types list
198
+ (`/sap/bc/adt/repository/informationsystem/objecttypes`), held per variant in
199
+ `ADT_SEARCH_TYPES_ONPREM`, `ADT_SEARCH_TYPES_CLOUD` (written from the recorded
200
+ lists: each name with the code it selects, `type`, or `group: true`) and
201
+ `ADT_SEARCH_TYPES_BASIS_740` (7.40 has no list: each name with the codes its
202
+ recorded search's hits carry, `answered`); `IAdtSearchObjectsParamsOf<V>` takes only the
203
+ names every variant of `V` takes (`AdtSearchTypeOf<V>`). Measured
204
+ 2026-10-29, read only:
205
+
206
+ - on S/4HANA 2025 and ABAP cloud, identically, a name selects what the list
207
+ says — `STRU` only `TABL/DS`, `DTAB` only `TABL/DT`, `TABL` both, a group
208
+ (`ABAP_TEST_COCKPIT`) its members — and an unknown name is refused `400`;
209
+ - a code is no filter value: one equal to an item's `type` selects as that
210
+ item, any other as the text before its `/` (`ENHO/XHH` answers as `ENHO`,
211
+ with other first hits under `maxResults`), and an unknown code answers
212
+ nothing, silently;
213
+ - SAP_BASIS 7.40 has no list (`404`); `DEVC`, `CLAS`, `INTF`, `PROG`, `FUGR`,
214
+ `FUNC`, `DDLS`, `MSAG`, `TABL`, `ENHO` and `ENHS` select there, and the
215
+ aliases (`STRU`, `DTAB`, `REPO`, `INCL`, `BADI`) and an unknown name answer
216
+ no hits, silently.
217
+
218
+ Every main type of a variant's table is a search name of that variant
219
+ (`src/__typechecks__/mainTypes.ts`), so a search for a code's objects sends
220
+ its entry's `main` (`ADT_TYPES_ONPREM.package.codes['DEVC/K'].main`), and a
221
+ subtype with an alias its alias (`STRU`). A subtype without one (`ENHO/XHH`)
222
+ cannot be searched alone: the caller filters the hits.
223
+
176
224
  ### Intersections, group-only codes and group references (22.0.0)
177
225
 
178
226
  **A union of variants.** `AdtTypeCodeOf<V>`, `AdtTypeCodeWith<V, Op>` and
@@ -338,6 +386,18 @@ The field is on each member's own options, not on `IAdtAnalyseOptions` or
338
386
  `IAdtOperationOptions`. `src/__typechecks__/headersOnEveryMember.ts` holds this
339
387
  for every member and every overload.
340
388
 
389
+ ## Migrating to 24.0.0
390
+
391
+ - **The search filter takes a search name, not a code.**
392
+ `ISearchObjectsParams.objectType` was `AdtTypeCode`; it is `AdtSearchType`.
393
+ Where a code was passed, pass the search name: the main type from the table
394
+ entry's `main` (`ADT_TYPES_ONPREM.package.codes['DEVC/K'].main`, `'DEVC'`),
395
+ or the alias of a subtype (`'STRU'` for `TABL/DS`, `'DTAB'` for `TABL/DT`).
396
+ A code passed before selected as its main type, unless it was an item's own
397
+ `type`, so the main type keeps what such a search answered.
398
+ - **A table built against `AdtApiTable` carries `main` on every code**, equal
399
+ to `AdtMainTypeOf` of the code (`'ENHO'` for `'ENHO/XHH'`).
400
+
341
401
  ## Migrating to 23.0.4
342
402
 
343
403
  - **A results set for a function group adds `updated`.** `IFunctionGroupResults`