abap-mcp 0.2.0 → 0.3.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 +25 -12
- package/dist/abap/engine.d.ts +24 -0
- package/dist/abap/engine.js +76 -0
- package/dist/abap/readiness.d.ts +33 -4
- package/dist/abap/readiness.js +58 -3
- package/dist/abap/released.d.ts +36 -0
- package/dist/abap/released.js +86 -0
- package/dist/abap.tools.d.ts +6 -0
- package/dist/abap.tools.js +108 -0
- package/dist/cli-commands.d.ts +2 -1
- package/dist/cli-commands.js +38 -0
- package/dist/data/released-apis.json +1 -0
- package/dist/data/table-successors.json +40 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -0
- package/package.json +2 -2
package/dist/cli-commands.js
CHANGED
|
@@ -10,6 +10,7 @@ import { basename, extname, join } from "node:path";
|
|
|
10
10
|
import { ABAP_VERSIONS, MAX_FILES, runAbaplint } from "./abap/engine.js";
|
|
11
11
|
import { outlineAbap } from "./abap/outline.js";
|
|
12
12
|
import { checkCloudReadiness, SCOPE_NOTE } from "./abap/readiness.js";
|
|
13
|
+
import { lookupReleased, RELEASED_API_SNAPSHOT, suggestSuccessor } from "./abap/released.js";
|
|
13
14
|
import { explainRule, listRules } from "./abap/rules.js";
|
|
14
15
|
import { scaffoldRapBo } from "./abap/scaffold.js";
|
|
15
16
|
const ABAP_FILE_RE = /\.(clas\.abap|clas\.locals_imp\.abap|clas\.locals_def\.abap|clas\.testclasses\.abap|prog\.abap|intf\.abap|fugr\.abap|ddls\.asddls|bdef\.asbdef|srvd\.srvdsrv|ddlx\.asddlx)$/;
|
|
@@ -104,9 +105,13 @@ export function mergeReadiness(reports, baseline) {
|
|
|
104
105
|
const categories = new Map();
|
|
105
106
|
let blockers = 0;
|
|
106
107
|
const broken = [];
|
|
108
|
+
const releasedApiFindings = [];
|
|
109
|
+
let snapshotDate = "";
|
|
107
110
|
for (const r of reports) {
|
|
108
111
|
blockers += r.cloudBlockerCount;
|
|
109
112
|
broken.push(...r.brokenAtBaseline);
|
|
113
|
+
releasedApiFindings.push(...r.releasedApiFindings);
|
|
114
|
+
snapshotDate = r.releasedApiSnapshotDate;
|
|
110
115
|
for (const c of r.categories) {
|
|
111
116
|
const cur = categories.get(c.category);
|
|
112
117
|
if (cur === undefined)
|
|
@@ -131,6 +136,8 @@ export function mergeReadiness(reports, baseline) {
|
|
|
131
136
|
cloudBlockerCount: blockers,
|
|
132
137
|
categories: [...categories.values()].sort((a, b) => b.count - a.count),
|
|
133
138
|
brokenAtBaseline: broken,
|
|
139
|
+
releasedApiFindings,
|
|
140
|
+
releasedApiSnapshotDate: snapshotDate,
|
|
134
141
|
baselineVersion: baseline,
|
|
135
142
|
scopeNote: SCOPE_NOTE,
|
|
136
143
|
};
|
|
@@ -155,6 +162,11 @@ export function cmdReadiness(argv, io) {
|
|
|
155
162
|
io.out(` ${c.category.padEnd(18)} ${String(c.count).padStart(4)} ${c.label}`);
|
|
156
163
|
if (merged.brokenAtBaseline.length > 0)
|
|
157
164
|
io.out(`${merged.brokenAtBaseline.length} finding(s) broken at ${baseline} regardless (fix first; not migration work)`);
|
|
165
|
+
if (merged.releasedApiFindings.length > 0) {
|
|
166
|
+
io.out(`${merged.releasedApiFindings.length} released-API note(s) (snapshot ${merged.releasedApiSnapshotDate}; informational, not scored):`);
|
|
167
|
+
for (const f of merged.releasedApiFindings)
|
|
168
|
+
io.out(` ${f.file}:${f.line} [${f.state}] ${f.object}${f.successor !== undefined ? ` → ${f.successor}` : ""}`);
|
|
169
|
+
}
|
|
158
170
|
io.out(`Note: ${merged.scopeNote}`);
|
|
159
171
|
}
|
|
160
172
|
const failBelow = flags.get("fail-below");
|
|
@@ -257,6 +269,29 @@ export function cmdExplain(argv, io) {
|
|
|
257
269
|
io.out(`${d.key} — ${d.title}\n${d.shortDescription}\n${d.extendedInformation}\nDocs: ${d.docsUrl}`);
|
|
258
270
|
return 0;
|
|
259
271
|
}
|
|
272
|
+
export function cmdReleased(argv, io) {
|
|
273
|
+
const { flags, rest } = parseFlags(argv);
|
|
274
|
+
if (rest.length === 0) {
|
|
275
|
+
io.err("Usage: abap-mcp released <object-name…> [--type TABL|CDS_STOB|FUNC|…] [--json]");
|
|
276
|
+
return 2;
|
|
277
|
+
}
|
|
278
|
+
const type = typeof flags.get("type") === "string" ? flags.get("type") : undefined;
|
|
279
|
+
const results = rest.map((name) => {
|
|
280
|
+
const hit = lookupReleased(name, type);
|
|
281
|
+
const successor = suggestSuccessor(name);
|
|
282
|
+
return { ...hit, successor };
|
|
283
|
+
});
|
|
284
|
+
if (flags.has("json")) {
|
|
285
|
+
io.out(JSON.stringify({ snapshotDate: RELEASED_API_SNAPSHOT.snapshotDate, source: RELEASED_API_SNAPSHOT.source, results }, null, 2));
|
|
286
|
+
return 0;
|
|
287
|
+
}
|
|
288
|
+
io.out(`Released-API status (SAP Cloudification snapshot ${RELEASED_API_SNAPSHOT.snapshotDate}):`);
|
|
289
|
+
for (const r of results) {
|
|
290
|
+
const tail = r.successor !== undefined ? ` → use ${r.successor}` : "";
|
|
291
|
+
io.out(` ${r.name.padEnd(34)} ${r.state.padEnd(13)} ${(r.objectType ?? "").padEnd(9)}${tail}`);
|
|
292
|
+
}
|
|
293
|
+
return 0;
|
|
294
|
+
}
|
|
260
295
|
export function cmdRules(argv, io) {
|
|
261
296
|
const { flags } = parseFlags(argv);
|
|
262
297
|
const q = flags.get("query");
|
|
@@ -275,6 +310,7 @@ Usage:
|
|
|
275
310
|
abap-mcp readiness [paths…] ABAP Cloud readiness diff [--baseline v758] [--fail-below N] [--json]
|
|
276
311
|
abap-mcp scaffold … generate a RAP managed BO (--entity --table --key [--fields n:type,…] [--no-draft] [--provided-key] [--out DIR])
|
|
277
312
|
abap-mcp outline [paths…] classes/methods/forms structure [--json]
|
|
313
|
+
abap-mcp released <names…> released-API status from the bundled SAP snapshot [--type TABL|FUNC|…] [--json]
|
|
278
314
|
abap-mcp explain <rule> explain an abaplint rule
|
|
279
315
|
abap-mcp rules list rules [--query q] [--tag Security]
|
|
280
316
|
|
|
@@ -293,6 +329,8 @@ export function runCli(argv, io) {
|
|
|
293
329
|
return cmdScaffold(rest, io);
|
|
294
330
|
case "outline":
|
|
295
331
|
return cmdOutline(rest, io);
|
|
332
|
+
case "released":
|
|
333
|
+
return cmdReleased(rest, io);
|
|
296
334
|
case "explain":
|
|
297
335
|
return cmdExplain(rest, io);
|
|
298
336
|
case "rules":
|