arc-1 0.9.6 → 0.9.7
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 +2 -2
- package/dist/adt/abapgit.d.ts +2 -1
- package/dist/adt/abapgit.d.ts.map +1 -1
- package/dist/adt/abapgit.js +2 -2
- package/dist/adt/abapgit.js.map +1 -1
- package/dist/adt/btp.d.ts.map +1 -1
- package/dist/adt/btp.js +7 -3
- package/dist/adt/btp.js.map +1 -1
- package/dist/adt/class-structure.d.ts +176 -0
- package/dist/adt/class-structure.d.ts.map +1 -0
- package/dist/adt/class-structure.js +317 -0
- package/dist/adt/class-structure.js.map +1 -0
- package/dist/adt/client.d.ts +112 -1
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +245 -3
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/crud.d.ts +38 -0
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +73 -1
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/errors.d.ts +2 -2
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +50 -6
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/gcts.d.ts +3 -2
- package/dist/adt/gcts.d.ts.map +1 -1
- package/dist/adt/gcts.js +4 -4
- package/dist/adt/gcts.js.map +1 -1
- package/dist/adt/http.d.ts +18 -0
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +50 -43
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/package-hierarchy.d.ts +67 -0
- package/dist/adt/package-hierarchy.d.ts.map +1 -0
- package/dist/adt/package-hierarchy.js +100 -0
- package/dist/adt/package-hierarchy.js.map +1 -0
- package/dist/adt/release.d.ts +35 -0
- package/dist/adt/release.d.ts.map +1 -0
- package/dist/adt/release.js +48 -0
- package/dist/adt/release.js.map +1 -0
- package/dist/adt/safety.d.ts +39 -3
- package/dist/adt/safety.d.ts.map +1 -1
- package/dist/adt/safety.js +136 -15
- package/dist/adt/safety.js.map +1 -1
- package/dist/adt/types.d.ts +74 -0
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/xml-parser.d.ts +46 -1
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +231 -0
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/authz/policy.d.ts.map +1 -1
- package/dist/authz/policy.js +12 -0
- package/dist/authz/policy.js.map +1 -1
- package/dist/context/grep.d.ts +48 -0
- package/dist/context/grep.d.ts.map +1 -0
- package/dist/context/grep.js +146 -0
- package/dist/context/grep.js.map +1 -0
- package/dist/handlers/intent.d.ts.map +1 -1
- package/dist/handlers/intent.js +430 -24
- package/dist/handlers/intent.js.map +1 -1
- package/dist/handlers/schemas.d.ts +42 -4
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +85 -9
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +68 -12
- package/dist/handlers/tools.js.map +1 -1
- package/dist/server/server.d.ts +20 -2
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +45 -11
- package/dist/server/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure splice + diff helpers for class-section surgery (issue #303).
|
|
3
|
+
*
|
|
4
|
+
* All functions operate on `(source, structure)` and return new source. No HTTP,
|
|
5
|
+
* no lock, no I/O. The handler in `src/handlers/intent.ts` wires lock → splice →
|
|
6
|
+
* PUT /source/main → unlock around these.
|
|
7
|
+
*
|
|
8
|
+
* Line-range semantics (matches `LineRange` in `src/adt/types.ts`):
|
|
9
|
+
* - `sr`/`er` are 1-indexed rows. `sc`/`ec` are 0-indexed columns.
|
|
10
|
+
* - The `er` row is INCLUSIVE (the end token lives on that line).
|
|
11
|
+
* - The `ec` column is the column AFTER the end token (half-open [sc, ec)).
|
|
12
|
+
*
|
|
13
|
+
* Splice strategy:
|
|
14
|
+
* - Whole-line splices for class-level and method-level blocks (we never need
|
|
15
|
+
* sub-line precision; ABAP statements occupy whole lines).
|
|
16
|
+
* - When inserting/removing one METHOD pair, we must process IMPL ranges BEFORE
|
|
17
|
+
* DEFINITION ranges (they're at larger line numbers) so DEFINITION ranges
|
|
18
|
+
* stay valid even after the IMPL splice shifts later content.
|
|
19
|
+
*
|
|
20
|
+
* Line-ending handling: source from SAP is CRLF. Helpers detect the prevailing
|
|
21
|
+
* convention and re-emit it, so the PUT-back round-trips byte-for-byte (modulo
|
|
22
|
+
* the intended change).
|
|
23
|
+
*/
|
|
24
|
+
// ─── Line-ending helpers ───────────────────────────────────────────────
|
|
25
|
+
/**
|
|
26
|
+
* Detect the prevailing line terminator in `source`. Defaults to CRLF when the
|
|
27
|
+
* source has no terminator (an unusual single-line PROG would be the only case
|
|
28
|
+
* — and a fresh write should match SAP's CRLF anyway).
|
|
29
|
+
*/
|
|
30
|
+
function detectEol(source) {
|
|
31
|
+
return source.includes('\r\n') ? '\r\n' : '\n';
|
|
32
|
+
}
|
|
33
|
+
function splitLines(source) {
|
|
34
|
+
return source.split(/\r?\n/);
|
|
35
|
+
}
|
|
36
|
+
function joinLines(lines, eol) {
|
|
37
|
+
return lines.join(eol);
|
|
38
|
+
}
|
|
39
|
+
// ─── Whole-line splice primitives ──────────────────────────────────────
|
|
40
|
+
/**
|
|
41
|
+
* Replace whole lines `[sr..er]` (1-indexed, INCLUSIVE) with `replacement`.
|
|
42
|
+
* The replacement is line-split and reflowed with `source`'s prevailing EOL.
|
|
43
|
+
*/
|
|
44
|
+
export function spliceLines(source, sr, er, replacement) {
|
|
45
|
+
const eol = detectEol(source);
|
|
46
|
+
const lines = splitLines(source);
|
|
47
|
+
if (sr < 1 || er < sr || er > lines.length) {
|
|
48
|
+
throw new RangeError(`spliceLines: invalid range sr=${sr} er=${er} (have ${lines.length} lines)`);
|
|
49
|
+
}
|
|
50
|
+
const before = lines.slice(0, sr - 1);
|
|
51
|
+
const after = lines.slice(er);
|
|
52
|
+
// Empty replacement means DELETE the range — splice in zero lines, not [''].
|
|
53
|
+
// (splitLines('') returns [''] which would leave a stray blank line behind.)
|
|
54
|
+
const replLines = replacement === '' ? [] : splitLines(replacement.replace(/\r?\n$/, ''));
|
|
55
|
+
return joinLines([...before, ...replLines, ...after], eol);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Insert `text` BEFORE line `lineNo` (1-indexed). When `lineNo === lines.length + 1`,
|
|
59
|
+
* appends at end. The inserted text gets `source`'s prevailing EOL.
|
|
60
|
+
*/
|
|
61
|
+
export function insertBeforeLine(source, lineNo, text) {
|
|
62
|
+
const eol = detectEol(source);
|
|
63
|
+
const lines = splitLines(source);
|
|
64
|
+
if (lineNo < 1 || lineNo > lines.length + 1) {
|
|
65
|
+
throw new RangeError(`insertBeforeLine: invalid lineNo=${lineNo} (have ${lines.length} lines)`);
|
|
66
|
+
}
|
|
67
|
+
const before = lines.slice(0, lineNo - 1);
|
|
68
|
+
const after = lines.slice(lineNo - 1);
|
|
69
|
+
const insertLines = splitLines(text.replace(/\r?\n$/, ''));
|
|
70
|
+
return joinLines([...before, ...insertLines, ...after], eol);
|
|
71
|
+
}
|
|
72
|
+
// ─── Splice helpers backed by ClassStructure ───────────────────────────
|
|
73
|
+
/**
|
|
74
|
+
* Replace the class-level DEFINITION block lines with `newDefBlock`. Does NOT
|
|
75
|
+
* touch the IMPLEMENTATION block — callers run diff-then-refuse before this
|
|
76
|
+
* helper to ensure the result is activatable.
|
|
77
|
+
*/
|
|
78
|
+
export function spliceClassDefinition(source, structure, newDefBlock) {
|
|
79
|
+
const r = structure.classDefinitionBlock;
|
|
80
|
+
return spliceLines(source, r.sr, r.er, newDefBlock);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Replace a single method's signature lines (the METHODS clause in DEFINITION)
|
|
84
|
+
* with `newSig`. Touches DEFINITION only — IMPLEMENTATION block is untouched,
|
|
85
|
+
* so any body incompatibility surfaces at SAP activation, not before. Mirrors
|
|
86
|
+
* `edit_method`'s contract.
|
|
87
|
+
*/
|
|
88
|
+
export function spliceMethodSignature(source, method, newSig) {
|
|
89
|
+
if (!method.definition) {
|
|
90
|
+
throw new Error(`spliceMethodSignature: method ${method.name} has no definition range`);
|
|
91
|
+
}
|
|
92
|
+
const r = method.definition;
|
|
93
|
+
return spliceLines(source, r.sr, r.er, newSig);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Insert a METHODS declaration in the target visibility section AND (unless
|
|
97
|
+
* `isAbstract`) an empty `METHOD <name>. ENDMETHOD.` stub at the end of the
|
|
98
|
+
* IMPLEMENTATION block. Returns the new source (both halves spliced atomically).
|
|
99
|
+
*
|
|
100
|
+
* Anchor strategy:
|
|
101
|
+
* 1. PRIMARY — locate the LAST existing method in `visibility` per
|
|
102
|
+
* `structure.methods` and insert AFTER its `definition.er` row.
|
|
103
|
+
* 2. FALLBACK — when the section has zero existing methods, regex-scan the
|
|
104
|
+
* DEFINITION block source for `^\s*(PUBLIC|PROTECTED|PRIVATE)\s+SECTION\s*\.\s*$`
|
|
105
|
+
* and insert AFTER that line.
|
|
106
|
+
* 3. THROW — if neither anchor exists (section header missing), the caller
|
|
107
|
+
* MUST refuse the write and route the user to `edit_class_definition`.
|
|
108
|
+
*
|
|
109
|
+
* IMPL stub goes at end of `classImplementationBlock` (just before the trailing
|
|
110
|
+
* ENDCLASS of the IMPLEMENTATION block). When the class has no IMPLEMENTATION
|
|
111
|
+
* block at all (rare, all-abstract), only the DEFINITION is touched.
|
|
112
|
+
*/
|
|
113
|
+
export function insertMethodPair(source, structure, opts) {
|
|
114
|
+
const anchor = findSectionAnchor(source, structure, opts.visibility);
|
|
115
|
+
if (anchor === null) {
|
|
116
|
+
throw new Error(`insertMethodPair: no ${opts.visibility.toUpperCase()} SECTION found in class ${structure.className}`);
|
|
117
|
+
}
|
|
118
|
+
// Stage 1: insert METHODS clause in DEFINITION.
|
|
119
|
+
let next = insertBeforeLine(source, anchor.afterLine + 1, opts.decl);
|
|
120
|
+
// Stage 2: insert IMPL stub (unless abstract). All IMPL line numbers shift by
|
|
121
|
+
// the count of inserted decl lines, so we adjust the end-of-impl-block anchor.
|
|
122
|
+
// insertedCount must match what insertBeforeLine ACTUALLY inserted — it strips
|
|
123
|
+
// a single trailing newline before splitting (line 76), so we strip here too.
|
|
124
|
+
// Without this, a caller-supplied `decl` with a trailing "\n" over-counts by one
|
|
125
|
+
// and the stub lands AFTER the IMPLEMENTATION's ENDCLASS (invalid ABAP).
|
|
126
|
+
if (!opts.isAbstract && structure.classImplementationBlock) {
|
|
127
|
+
const insertedCount = splitLines(opts.decl.replace(/\r?\n$/, '')).length;
|
|
128
|
+
const newImplEndLine = structure.classImplementationBlock.er + insertedCount;
|
|
129
|
+
const indent = opts.implIndent ?? ' ';
|
|
130
|
+
const stub = `${indent}METHOD ${opts.methodName.toLowerCase()}.\n${indent}ENDMETHOD.`;
|
|
131
|
+
next = insertBeforeLine(next, newImplEndLine, stub);
|
|
132
|
+
}
|
|
133
|
+
return next;
|
|
134
|
+
}
|
|
135
|
+
// ─── removeMethodPair: atomic DEFINITION + IMPLEMENTATION delete ──────
|
|
136
|
+
/**
|
|
137
|
+
* Remove a method from both DEFINITION and IMPLEMENTATION blocks. Removes in
|
|
138
|
+
* descending line-order (IMPL first, then DEF) so the earlier range stays valid
|
|
139
|
+
* after the later range is removed. ABSTRACT methods (no `implementation`
|
|
140
|
+
* range) only have their DEFINITION line range removed.
|
|
141
|
+
*/
|
|
142
|
+
export function removeMethodPair(source, method) {
|
|
143
|
+
let next = source;
|
|
144
|
+
if (method.implementation) {
|
|
145
|
+
next = spliceLines(next, method.implementation.sr, method.implementation.er, '');
|
|
146
|
+
}
|
|
147
|
+
next = spliceLines(next, method.definition.sr, method.definition.er, '');
|
|
148
|
+
return next;
|
|
149
|
+
}
|
|
150
|
+
// ─── moveMethodDefinition: DEFINITION-only section move ────────────────
|
|
151
|
+
/**
|
|
152
|
+
* Move a method's METHODS clause from its current visibility section to a new
|
|
153
|
+
* location in the DEFINITION block, leaving the IMPLEMENTATION block UNTOUCHED.
|
|
154
|
+
*
|
|
155
|
+
* This is the body-preserving primitive behind `change_method_visibility`
|
|
156
|
+
* (issue #303 follow-up). Contrast with `delete_method` + `add_method`, which
|
|
157
|
+
* discards the method body and recreates an empty stub.
|
|
158
|
+
*
|
|
159
|
+
* Single-pass line walk over the ORIGINAL source: the method's `definition`
|
|
160
|
+
* lines are captured, every other line is re-emitted in order, and the captured
|
|
161
|
+
* clause is re-inserted immediately AFTER `targetAfterLine`. Because both the
|
|
162
|
+
* skip-range and the anchor are expressed in original 1-indexed line numbers,
|
|
163
|
+
* the walk is correct whether the target section sits above or below the
|
|
164
|
+
* method's current position — no index-shift arithmetic between a remove and an
|
|
165
|
+
* insert.
|
|
166
|
+
*
|
|
167
|
+
* `targetAfterLine` (1-indexed) is the line to insert AFTER — typically from
|
|
168
|
+
* `findSectionAnchor(source, structure, targetVisibility)`. It MUST lie outside
|
|
169
|
+
* the moved method's `definition` range; the caller guarantees this by only
|
|
170
|
+
* moving between DIFFERENT sections (a method's clause and the target-section
|
|
171
|
+
* anchor never overlap). A `targetAfterLine` inside the range is a caller bug
|
|
172
|
+
* and throws.
|
|
173
|
+
*
|
|
174
|
+
* IMPLEMENTATION is never read or written here — the METHOD…ENDMETHOD body is
|
|
175
|
+
* preserved verbatim. The clause keeps its original indentation.
|
|
176
|
+
*/
|
|
177
|
+
export function moveMethodDefinition(source, method, targetAfterLine) {
|
|
178
|
+
if (!method.definition) {
|
|
179
|
+
throw new Error(`moveMethodDefinition: method ${method.name} has no definition range`);
|
|
180
|
+
}
|
|
181
|
+
const { sr, er } = method.definition;
|
|
182
|
+
if (targetAfterLine >= sr && targetAfterLine <= er) {
|
|
183
|
+
throw new RangeError(`moveMethodDefinition: targetAfterLine ${targetAfterLine} is inside the moved method's definition range [${sr}, ${er}]`);
|
|
184
|
+
}
|
|
185
|
+
const eol = detectEol(source);
|
|
186
|
+
const lines = splitLines(source);
|
|
187
|
+
const clause = lines.slice(sr - 1, er);
|
|
188
|
+
const out = [];
|
|
189
|
+
for (let i = 0; i < lines.length; i++) {
|
|
190
|
+
const lineNo = i + 1;
|
|
191
|
+
if (lineNo >= sr && lineNo <= er)
|
|
192
|
+
continue; // drop the moved clause from its old spot
|
|
193
|
+
out.push(lines[i]);
|
|
194
|
+
if (lineNo === targetAfterLine)
|
|
195
|
+
out.push(...clause); // re-insert after the anchor
|
|
196
|
+
}
|
|
197
|
+
return joinLines(out, eol);
|
|
198
|
+
}
|
|
199
|
+
// ─── findSectionAnchor ────────────────────────────────────────────────
|
|
200
|
+
/**
|
|
201
|
+
* Locate the insertion point for a new METHODS clause in the target visibility
|
|
202
|
+
* section. See `insertMethodPair` jsdoc for the two-step strategy.
|
|
203
|
+
*
|
|
204
|
+
* Returns `{ afterLine }` (1-indexed; the new clause goes on the line AFTER
|
|
205
|
+
* this row). Returns `null` if the section header doesn't exist in DEFINITION.
|
|
206
|
+
*/
|
|
207
|
+
export function findSectionAnchor(source, structure, visibility) {
|
|
208
|
+
// Step 1: anchor after the LAST existing method in the target section.
|
|
209
|
+
const methods = structure.methods.filter((m) => m.visibility === visibility && m.definition);
|
|
210
|
+
if (methods.length > 0) {
|
|
211
|
+
const lastEr = Math.max(...methods.map((m) => m.definition.er));
|
|
212
|
+
return { afterLine: lastEr };
|
|
213
|
+
}
|
|
214
|
+
// Step 2: anchor immediately after the SECTION header line within the
|
|
215
|
+
// class-level DEFINITION block. Strip a trailing ABAP line comment (`"…`)
|
|
216
|
+
// before matching, so a header like ` PUBLIC SECTION. " public API` (very
|
|
217
|
+
// common in class templates) is still recognized. The `\.` requires the
|
|
218
|
+
// period after SECTION but no `$` anchor, tolerating trailing tokens.
|
|
219
|
+
const defBlock = structure.classDefinitionBlock;
|
|
220
|
+
const lines = splitLines(source);
|
|
221
|
+
const sectionRe = new RegExp(`^\\s*${visibility.toUpperCase()}\\s+SECTION\\s*\\.`, 'i');
|
|
222
|
+
for (let i = defBlock.sr - 1; i < Math.min(defBlock.er, lines.length); i++) {
|
|
223
|
+
const stripped = lines[i].replace(/"[^\n]*$/, '');
|
|
224
|
+
if (sectionRe.test(stripped))
|
|
225
|
+
return { afterLine: i + 1 };
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Diff the method set declared in a NEW DEFINITION block against the current
|
|
231
|
+
* `structure.methods`. Uses abaplint's `Structures.ClassDefinition` AST to
|
|
232
|
+
* enumerate METHODS/CLASS-METHODS/EVENTS/INTERFACES/ALIASES declarations.
|
|
233
|
+
*
|
|
234
|
+
* Returns added/removed by name (UPPERCASE). The handler's refuse-policy then
|
|
235
|
+
* exempts ABSTRACT METHODS, EVENTS, INTERFACES, ALIASES from the symmetry
|
|
236
|
+
* check — only concrete methods that need a METHOD…ENDMETHOD block in IMPL.
|
|
237
|
+
*/
|
|
238
|
+
export function diffMethodSets(structure, newDefBlock) {
|
|
239
|
+
const oldNames = new Set(structure.methods.map((m) => m.name));
|
|
240
|
+
const declared = parseDefinitionBlockDeclarations(newDefBlock);
|
|
241
|
+
const declaredNames = new Set(declared.map((d) => d.name));
|
|
242
|
+
const added = declared.filter((d) => !oldNames.has(d.name));
|
|
243
|
+
const removed = structure.methods.filter((m) => !declaredNames.has(m.name));
|
|
244
|
+
return { added, removed };
|
|
245
|
+
}
|
|
246
|
+
// ─── DEFINITION-block declaration parser (abaplint primary, regex fallback) ─
|
|
247
|
+
/**
|
|
248
|
+
* Enumerate METHODS / CLASS-METHODS / EVENTS / INTERFACES / ALIASES
|
|
249
|
+
* declarations in a NEW DEFINITION block string. Returns UPPERCASE names with
|
|
250
|
+
* the abstract/event/interface/alias flags.
|
|
251
|
+
*
|
|
252
|
+
* Implementation: regex-scan with leading-comment stripping. We deliberately
|
|
253
|
+
* avoid abaplint here — the fragment is a partial CLASS DEFINITION block and
|
|
254
|
+
* abaplint requires a synthetic IMPLEMENTATION shell wrapper to parse it,
|
|
255
|
+
* which obscures errors and adds complexity for no benefit. The regex handles
|
|
256
|
+
* single-line and multi-line METHODS clauses (REDEFINITION, ABSTRACT keyword
|
|
257
|
+
* detection, multi-line IMPORTING/EXPORTING tails) reliably for issue #303's
|
|
258
|
+
* symmetry-check use case. Edge cases (e.g. METHODS keyword inside a string
|
|
259
|
+
* literal) cannot occur in a valid DEFINITION block — there are no executable
|
|
260
|
+
* statements there.
|
|
261
|
+
*/
|
|
262
|
+
export function parseDefinitionBlockDeclarations(defBlock) {
|
|
263
|
+
return parseWithRegex(defBlock);
|
|
264
|
+
}
|
|
265
|
+
function parseWithRegex(defBlock) {
|
|
266
|
+
const out = [];
|
|
267
|
+
// Strip block + line comments before scanning so commented-out METHODS don't count.
|
|
268
|
+
const stripped = defBlock.replace(/^\s*\*.*$/gm, '').replace(/"[^\n]*$/gm, '');
|
|
269
|
+
// METHODS / CLASS-METHODS <name> — multi-line clauses span until the period.
|
|
270
|
+
// We only need the NAME, so the regex looks at the start of each clause.
|
|
271
|
+
const methodRe = /^\s*(CLASS-METHODS|METHODS)\s+([A-Z_][A-Z0-9_]*)([^.]*)\./gim;
|
|
272
|
+
for (const m of stripped.matchAll(methodRe)) {
|
|
273
|
+
const name = m[2].toUpperCase();
|
|
274
|
+
const tail = m[3] ?? '';
|
|
275
|
+
const isAbstract = /\bABSTRACT\b/i.test(tail);
|
|
276
|
+
out.push({ name, isAbstract, isEvent: false, isInterface: false, isAlias: false });
|
|
277
|
+
}
|
|
278
|
+
const eventRe = /^\s*(CLASS-EVENTS|EVENTS)\s+([A-Z_][A-Z0-9_]*)/gim;
|
|
279
|
+
for (const m of stripped.matchAll(eventRe)) {
|
|
280
|
+
out.push({ name: m[2].toUpperCase(), isAbstract: false, isEvent: true, isInterface: false, isAlias: false });
|
|
281
|
+
}
|
|
282
|
+
const ifaceRe = /^\s*INTERFACES\s+([A-Z_][A-Z0-9_]*)/gim;
|
|
283
|
+
for (const m of stripped.matchAll(ifaceRe)) {
|
|
284
|
+
out.push({ name: m[1].toUpperCase(), isAbstract: false, isEvent: false, isInterface: true, isAlias: false });
|
|
285
|
+
}
|
|
286
|
+
const aliasRe = /^\s*ALIASES\s+([A-Z_][A-Z0-9_]*)/gim;
|
|
287
|
+
for (const m of stripped.matchAll(aliasRe)) {
|
|
288
|
+
out.push({ name: m[1].toUpperCase(), isAbstract: false, isEvent: false, isInterface: false, isAlias: true });
|
|
289
|
+
}
|
|
290
|
+
return out;
|
|
291
|
+
}
|
|
292
|
+
// ─── extractMethodNameFromClause ───────────────────────────────────────
|
|
293
|
+
/**
|
|
294
|
+
* Pull the method name out of a `METHODS x ...` or `CLASS-METHODS x ...` clause.
|
|
295
|
+
* Returns UPPERCASE name, or `null` if the clause doesn't start with a recognised
|
|
296
|
+
* keyword. Used by `add_method` to derive the IMPL stub name when the caller
|
|
297
|
+
* doesn't pass `methodName` explicitly.
|
|
298
|
+
*
|
|
299
|
+
* Comments and leading whitespace are skipped. Multi-line clauses are handled
|
|
300
|
+
* (the name is on the first non-comment line).
|
|
301
|
+
*/
|
|
302
|
+
export function extractMethodNameFromClause(clause) {
|
|
303
|
+
// Strip leading line comments (`*…` whole-line + `"…` trailing).
|
|
304
|
+
const lines = clause.split(/\r?\n/);
|
|
305
|
+
for (const raw of lines) {
|
|
306
|
+
const line = raw.replace(/"[^\n]*$/, '').trim();
|
|
307
|
+
if (!line || line.startsWith('*'))
|
|
308
|
+
continue;
|
|
309
|
+
const m = line.match(/^(?:CLASS-METHODS|METHODS)\s+([A-Z_][A-Z0-9_~]*)/i);
|
|
310
|
+
if (m)
|
|
311
|
+
return m[1].toUpperCase();
|
|
312
|
+
// First non-comment line that isn't a METHODS keyword — bail.
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=class-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-structure.js","sourceRoot":"","sources":["../../src/adt/class-structure.ts"],"names":[],"mappings":"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"}
|
package/dist/adt/client.d.ts
CHANGED
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { AdtClientConfig } from './config.js';
|
|
19
19
|
import { AdtHttpClient } from './http.js';
|
|
20
|
+
import { type PackageHierarchyResolver } from './package-hierarchy.js';
|
|
20
21
|
import { type SafetyConfig } from './safety.js';
|
|
21
|
-
import type { AdtObjectLookupResult, AdtSearchResult, ApiReleaseStateInfo, AuthorizationFieldInfo, BspAppInfo, BspFileNode, ClassMetadata, DataElementInfo, DomainInfo, EnhancementImplementationInfo, FeatureToggleInfo, InactiveObject, MessageClassInfo, RevisionListResult, SourceSearchResult, StructuredClassResponse, TransactionInfo } from './types.js';
|
|
22
|
+
import type { AdtObjectLookupResult, AdtSearchResult, ApiReleaseStateInfo, AuthorizationFieldInfo, BspAppInfo, BspFileNode, ClassMetadata, ClassStructure, DataElementInfo, DomainInfo, EnhancementImplementationInfo, FeatureToggleInfo, InactiveObject, MessageClassInfo, RevisionListResult, SourceSearchResult, StructuredClassResponse, TransactionInfo } from './types.js';
|
|
22
23
|
export interface SourceReadResult {
|
|
23
24
|
source: string;
|
|
24
25
|
etag?: string;
|
|
@@ -30,6 +31,23 @@ export interface SourceReadOptions {
|
|
|
30
31
|
version?: 'active' | 'inactive';
|
|
31
32
|
accept?: string;
|
|
32
33
|
}
|
|
34
|
+
/** Coerce a caller-supplied row limit into a safe positive integer in [1, MAX_TABLE_QUERY_ROWS].
|
|
35
|
+
* NaN / non-finite / non-positive / undefined fall back to the default (prevents `rowNumber=NaN`
|
|
36
|
+
* and unbounded result buffering). */
|
|
37
|
+
export declare function clampPreviewRows(requested: number | undefined, fallback?: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Build a safe SELECT statement from structured parameters.
|
|
40
|
+
* All identifiers are uppercased, stripped to word-chars + namespace slash, and rejected if empty.
|
|
41
|
+
* String values are single-quote escaped (doubled single quotes).
|
|
42
|
+
* IN/NOT IN values are strictly parsed as quoted literal lists (no subqueries).
|
|
43
|
+
* Raises if the table, any column, or any where-field is empty after sanitization.
|
|
44
|
+
* ORDER BY is intentionally omitted: the ADT freestyle endpoint rejects it on NW 7.50/7.51.
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildTableQuerySql(tableName: string, columns?: string[], where?: Array<{
|
|
47
|
+
field: string;
|
|
48
|
+
op: string;
|
|
49
|
+
value?: string;
|
|
50
|
+
}>): string;
|
|
33
51
|
export declare class AdtClient {
|
|
34
52
|
readonly http: AdtHttpClient;
|
|
35
53
|
readonly safety: SafetyConfig;
|
|
@@ -44,6 +62,10 @@ export declare class AdtClient {
|
|
|
44
62
|
* actual `adtcore:type` (TABL/DT vs TABL/DS). Separate from `tablUrlCache`
|
|
45
63
|
* so the two contracts don't contaminate each other. See issue #285. */
|
|
46
64
|
private readonly tablWriteUrlCache;
|
|
65
|
+
/** Lazily-instantiated DEVCLASS hierarchy resolver — only built when a subtree
|
|
66
|
+
* allowedPackages rule is hit. Shared across `withSafety()` clones because the
|
|
67
|
+
* hierarchy is a property of the SAP system, not of the current safety scope. */
|
|
68
|
+
private packageHierarchyResolverHolder;
|
|
47
69
|
constructor(options?: Partial<AdtClientConfig>);
|
|
48
70
|
/**
|
|
49
71
|
* Create a lightweight copy of this client with a different safety config.
|
|
@@ -51,15 +73,47 @@ export declare class AdtClient {
|
|
|
51
73
|
* Used for per-request safety derived from JWT scopes.
|
|
52
74
|
*/
|
|
53
75
|
withSafety(safety: SafetyConfig): AdtClient;
|
|
76
|
+
/**
|
|
77
|
+
* Lazily build (and return) the DEVCLASS hierarchy resolver. The resolver
|
|
78
|
+
* powers `ZFOO/**` subtree rules in `allowedPackages`; reads/writes that
|
|
79
|
+
* don't trigger a subtree rule never instantiate it (zero cost).
|
|
80
|
+
*
|
|
81
|
+
* Shared across `withSafety()` clones — the hierarchy is per-SAP-system, not
|
|
82
|
+
* per-safety-scope. Cache invalidation is exposed via `invalidatePackageHierarchy()`.
|
|
83
|
+
*/
|
|
84
|
+
getPackageHierarchyResolver(): PackageHierarchyResolver;
|
|
85
|
+
/** Invalidate the resolver cache. Called after admin actions that change the
|
|
86
|
+
* hierarchy (create_package / change_package / delete_package). */
|
|
87
|
+
invalidatePackageHierarchy(root?: string): void;
|
|
54
88
|
private fetchSource;
|
|
55
89
|
/** Get program source code */
|
|
56
90
|
getProgram(name: string, opts?: SourceReadOptions): Promise<SourceReadResult>;
|
|
57
91
|
/** Get class source code (main include by default) */
|
|
58
92
|
getClass(name: string, include?: string, opts?: SourceReadOptions): Promise<SourceReadResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Get the RAW source of a single class include (no `=== inc ===` wrapper that
|
|
95
|
+
* `getClass(name, include)` adds), so line numbers stay accurate for grep.
|
|
96
|
+
*/
|
|
97
|
+
getClassInclude(name: string, include: string, opts?: SourceReadOptions): Promise<SourceReadResult>;
|
|
59
98
|
/** Get class metadata (description, language, category, etc.) from the object endpoint */
|
|
60
99
|
getClassMetadata(name: string): Promise<ClassMetadata>;
|
|
61
100
|
/** Get structured class response with metadata + decomposed includes */
|
|
62
101
|
getClassStructured(name: string): Promise<StructuredClassResponse>;
|
|
102
|
+
/**
|
|
103
|
+
* Get the class structure map (line ranges for DEFINITION / IMPLEMENTATION
|
|
104
|
+
* blocks, per-method/attribute ranges) from `/sap/bc/adt/oo/classes/{name}/objectstructure`.
|
|
105
|
+
*
|
|
106
|
+
* The endpoint is read-only — the response carries `#start=L,C;end=L,C`
|
|
107
|
+
* coordinates that `class-section surgery` actions (`edit_class_definition`,
|
|
108
|
+
* `add_method`, `edit_method_signature`, `delete_method`) use to splice into
|
|
109
|
+
* `/source/main` without re-sending the full class. Issue #303.
|
|
110
|
+
*
|
|
111
|
+
* Cross-release: works on both NW 7.50 SP02 (split CLAS/OO + CLAS/OM elements
|
|
112
|
+
* merged by name) and S/4HANA 2023 kernel 7.58+ (single CLAS/OM per method).
|
|
113
|
+
* MIME negotiation is delegated to the discovery cache in http.ts — v1+xml on
|
|
114
|
+
* 7.50, v2+xml on 7.58+.
|
|
115
|
+
*/
|
|
116
|
+
getClassStructure(name: string, version?: 'active' | 'inactive'): Promise<ClassStructure>;
|
|
63
117
|
/** Get interface source code */
|
|
64
118
|
getInterface(name: string, opts?: SourceReadOptions): Promise<SourceReadResult>;
|
|
65
119
|
/** Get function module source code */
|
|
@@ -245,6 +299,36 @@ export declare class AdtClient {
|
|
|
245
299
|
description: string;
|
|
246
300
|
uri: string;
|
|
247
301
|
}>>;
|
|
302
|
+
/**
|
|
303
|
+
* Direct sub-packages of `packageName` — names only, uppercased, deduplicated.
|
|
304
|
+
*
|
|
305
|
+
* Uses ADT's `POST /sap/bc/adt/repository/nodestructure` with
|
|
306
|
+
* `parent_type=DEVC/K`, which is the canonical primitive for "direct
|
|
307
|
+
* children of package X" — returning exactly the set of DEVCLASS rows
|
|
308
|
+
* whose `TDEVC.PARENTCL = packageName`. Verified live against S/4HANA
|
|
309
|
+
* 2023 to match `SELECT devclass FROM tdevc WHERE parentcl = ?` for
|
|
310
|
+
* a range of roots, including namespace packages (`/AIF/MAIN`) and
|
|
311
|
+
* deep subtrees (5 levels under `SABP_TOOLS`).
|
|
312
|
+
*
|
|
313
|
+
* NOTE: the previous implementation used
|
|
314
|
+
* `informationsystem/search?packageName=X&objectType=DEVC/K`, which
|
|
315
|
+
* silently ignores `packageName` and returns ~1000 unrelated packages.
|
|
316
|
+
* That bug caused `allowedPackages` `X/**` rules to silently over-grant
|
|
317
|
+
* writes to unrelated packages. See
|
|
318
|
+
* `docs/research/package-subtree-endpoints.md` for the comparative analysis.
|
|
319
|
+
*
|
|
320
|
+
* Backs the `allowedPackages` subtree-rule (`ZFOO/**`) safety gate, so any
|
|
321
|
+
* failure (network, 4xx/5xx, parse) is surfaced as an exception, NEVER as
|
|
322
|
+
* an empty list. An empty list always means "SAP returned no children" —
|
|
323
|
+
* `nodestructure` responds with HTTP 200 and an empty (or absent) body
|
|
324
|
+
* for an unknown `parent_name`.
|
|
325
|
+
*
|
|
326
|
+
* `maxResults` is preserved for API compatibility and applied as a
|
|
327
|
+
* defense-in-depth post-filter on the parsed result. `nodestructure`
|
|
328
|
+
* itself does not honour a maxResults parameter on the SAP side and
|
|
329
|
+
* returns the full child set in one round-trip.
|
|
330
|
+
*/
|
|
331
|
+
getSubpackages(packageName: string, maxResults?: number): Promise<string[]>;
|
|
248
332
|
/** Get table contents via data preview */
|
|
249
333
|
getTableContents(tableName: string, maxRows?: number, sqlFilter?: string): Promise<{
|
|
250
334
|
columns: string[];
|
|
@@ -255,6 +339,25 @@ export declare class AdtClient {
|
|
|
255
339
|
columns: string[];
|
|
256
340
|
rows: Record<string, string>[];
|
|
257
341
|
}>;
|
|
342
|
+
/**
|
|
343
|
+
* Query a table or CDS view with structured parameters.
|
|
344
|
+
* Builds the SELECT server-side from structured params. IN/NOT IN values are strictly
|
|
345
|
+
* parsed as quoted literal lists (no subqueries). Uses the freestyle endpoint so
|
|
346
|
+
* multi-column WHERE and CDS views work on all SAP releases.
|
|
347
|
+
* Gated by allowDataPreview (not allowFreeSQL).
|
|
348
|
+
*/
|
|
349
|
+
runTableQuery(tableName: string, opts?: {
|
|
350
|
+
columns?: string[];
|
|
351
|
+
where?: Array<{
|
|
352
|
+
field: string;
|
|
353
|
+
op: string;
|
|
354
|
+
value?: string;
|
|
355
|
+
}>;
|
|
356
|
+
maxRows?: number;
|
|
357
|
+
}): Promise<{
|
|
358
|
+
columns: string[];
|
|
359
|
+
rows: Record<string, string>[];
|
|
360
|
+
}>;
|
|
258
361
|
/** Get system info as structured JSON (user, system details from discovery XML) */
|
|
259
362
|
getSystemInfo(): Promise<string>;
|
|
260
363
|
/** Get installed SAP components */
|
|
@@ -281,6 +384,14 @@ export declare class AdtClient {
|
|
|
281
384
|
* Resolve the ABAP package of an existing object by fetching its metadata.
|
|
282
385
|
* Returns the package name (e.g., "$TMP", "ZPACKAGE") or empty string if not found.
|
|
283
386
|
* Used by SAPWrite to enforce allowedPackages on update/delete/edit_method.
|
|
387
|
+
*
|
|
388
|
+
* Top-level objects (CLAS, INTF, PROG, TABL, DDLS, ...) expose
|
|
389
|
+
* `<adtcore:packageRef adtcore:name="…"/>` directly. Contained objects
|
|
390
|
+
* (notably FUNC, which lives inside a FUGR) instead expose the package via
|
|
391
|
+
* `<adtcore:containerRef … adtcore:packageName="…"/>` since their own
|
|
392
|
+
* `packageRef` would just point at the parent — the `containerRef` already
|
|
393
|
+
* surfaces the package as a denormalised attribute. Both shapes resolve
|
|
394
|
+
* to the same package; we accept either.
|
|
284
395
|
*/
|
|
285
396
|
resolveObjectPackage(objectUrl: string): Promise<string>;
|
|
286
397
|
}
|
package/dist/adt/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/adt/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAsB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,UAAU,EACV,6BAA6B,EAC7B,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/adt/client.ts"],"names":[],"mappings":"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"}
|