arc-1 0.3.0 → 0.4.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/README.md +77 -199
- package/dist/adt/btp.d.ts +2 -2
- package/dist/adt/btp.d.ts.map +1 -1
- package/dist/adt/btp.js +1 -1
- package/dist/adt/btp.js.map +1 -1
- package/dist/adt/client.d.ts +13 -1
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +39 -1
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/codeintel.d.ts +41 -0
- package/dist/adt/codeintel.d.ts.map +1 -1
- package/dist/adt/codeintel.js +99 -27
- package/dist/adt/codeintel.js.map +1 -1
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/cookies.d.ts.map +1 -1
- package/dist/adt/cookies.js.map +1 -1
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/devtools.d.ts +14 -0
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +28 -3
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.d.ts +101 -0
- package/dist/adt/diagnostics.d.ts.map +1 -0
- package/dist/adt/diagnostics.js +349 -0
- package/dist/adt/diagnostics.js.map +1 -0
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/features.d.ts.map +1 -1
- package/dist/adt/features.js.map +1 -1
- package/dist/adt/http.d.ts +26 -7
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +140 -86
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/oauth.d.ts.map +1 -1
- package/dist/adt/oauth.js.map +1 -1
- package/dist/adt/safety.d.ts.map +1 -1
- package/dist/adt/safety.js.map +1 -1
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +139 -0
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/types.js.map +1 -1
- package/dist/adt/xml-parser.d.ts +37 -1
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +147 -0
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/cache/cache.d.ts +47 -4
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js +16 -5
- package/dist/cache/cache.js.map +1 -1
- package/dist/cache/caching-layer.d.ts +82 -0
- package/dist/cache/caching-layer.d.ts.map +1 -0
- package/dist/cache/caching-layer.js +134 -0
- package/dist/cache/caching-layer.js.map +1 -0
- package/dist/cache/memory.d.ts +14 -2
- package/dist/cache/memory.d.ts.map +1 -1
- package/dist/cache/memory.js +72 -5
- package/dist/cache/memory.js.map +1 -1
- package/dist/cache/sqlite.d.ts +10 -1
- package/dist/cache/sqlite.d.ts.map +1 -1
- package/dist/cache/sqlite.js +90 -2
- package/dist/cache/sqlite.js.map +1 -1
- package/dist/cache/warmup.d.ts +41 -0
- package/dist/cache/warmup.d.ts.map +1 -0
- package/dist/cache/warmup.js +286 -0
- package/dist/cache/warmup.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/context/cds-deps.d.ts +35 -0
- package/dist/context/cds-deps.d.ts.map +1 -0
- package/dist/context/cds-deps.js +201 -0
- package/dist/context/cds-deps.js.map +1 -0
- package/dist/context/compressor.d.ts +20 -1
- package/dist/context/compressor.d.ts.map +1 -1
- package/dist/context/compressor.js +178 -17
- package/dist/context/compressor.js.map +1 -1
- package/dist/context/contract.d.ts.map +1 -1
- package/dist/context/contract.js.map +1 -1
- package/dist/context/deps.d.ts.map +1 -1
- package/dist/context/deps.js.map +1 -1
- package/dist/context/method-surgery.d.ts +91 -0
- package/dist/context/method-surgery.d.ts.map +1 -0
- package/dist/context/method-surgery.js +441 -0
- package/dist/context/method-surgery.js.map +1 -0
- package/dist/context/types.d.ts +7 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js.map +1 -1
- package/dist/handlers/hyperfocused.d.ts +35 -0
- package/dist/handlers/hyperfocused.d.ts.map +1 -0
- package/dist/handlers/hyperfocused.js +104 -0
- package/dist/handlers/hyperfocused.js.map +1 -0
- package/dist/handlers/intent.d.ts +2 -1
- package/dist/handlers/intent.d.ts.map +1 -1
- package/dist/handlers/intent.js +440 -43
- package/dist/handlers/intent.js.map +1 -1
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +130 -39
- package/dist/handlers/tools.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lint/config-builder.d.ts +60 -0
- package/dist/lint/config-builder.d.ts.map +1 -0
- package/dist/lint/config-builder.js +187 -0
- package/dist/lint/config-builder.js.map +1 -0
- package/dist/lint/lint.d.ts +43 -0
- package/dist/lint/lint.d.ts.map +1 -1
- package/dist/lint/lint.js +77 -2
- package/dist/lint/lint.js.map +1 -1
- package/dist/lint/presets/cloud.d.ts +16 -0
- package/dist/lint/presets/cloud.d.ts.map +1 -0
- package/dist/lint/presets/cloud.js +111 -0
- package/dist/lint/presets/cloud.js.map +1 -0
- package/dist/lint/presets/onprem.d.ts +17 -0
- package/dist/lint/presets/onprem.d.ts.map +1 -0
- package/dist/lint/presets/onprem.js +82 -0
- package/dist/lint/presets/onprem.js.map +1 -0
- package/dist/server/audit.d.ts +1 -0
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js.map +1 -1
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +12 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js.map +1 -1
- package/dist/server/elicit.d.ts.map +1 -1
- package/dist/server/elicit.js.map +1 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +4 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/logger.js.map +1 -1
- package/dist/server/server.d.ts +3 -2
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +90 -5
- package/dist/server/server.js.map +1 -1
- package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
- package/dist/server/sinks/btp-auditlog.js.map +1 -1
- package/dist/server/sinks/file.d.ts.map +1 -1
- package/dist/server/sinks/file.js.map +1 -1
- package/dist/server/sinks/stderr.d.ts.map +1 -1
- package/dist/server/sinks/stderr.js.map +1 -1
- package/dist/server/sinks/types.d.ts.map +1 -1
- package/dist/server/sinks/types.js.map +1 -1
- package/dist/server/types.d.ts +14 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +6 -0
- package/dist/server/types.js.map +1 -1
- package/dist/server/xsuaa.d.ts.map +1 -1
- package/dist/server/xsuaa.js.map +1 -1
- package/package.json +13 -6
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache warmup — pre-indexes all custom objects from the SAP system.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline:
|
|
5
|
+
* 1. Query TADIR for all custom objects (CLAS, INTF, FUNC) matching package filter
|
|
6
|
+
* 2. Fetch source code for each object (bounded parallel)
|
|
7
|
+
* 3. Extract dependencies from each source (local AST, no ADT calls)
|
|
8
|
+
* 4. Store source + deps + edges in cache
|
|
9
|
+
* 5. Build reverse dependency index (edges indexed by toId)
|
|
10
|
+
*
|
|
11
|
+
* Delta strategy:
|
|
12
|
+
* - On-premise: query REPOSRC for objects changed since last warmup (UDAT field)
|
|
13
|
+
* - BTP: full re-scan (no reliable change timestamp available)
|
|
14
|
+
* - Fallback: compare source hash — if unchanged, skip dep extraction
|
|
15
|
+
*
|
|
16
|
+
* Timing estimates (5 concurrent requests):
|
|
17
|
+
* - 500 objects: ~2-3 minutes
|
|
18
|
+
* - 2,000 objects: ~8-12 minutes
|
|
19
|
+
* - 5,000 objects: ~20-30 minutes
|
|
20
|
+
*/
|
|
21
|
+
import { extractDependencies } from '../context/deps.js';
|
|
22
|
+
import { logger } from '../server/logger.js';
|
|
23
|
+
import { hashSource } from './cache.js';
|
|
24
|
+
const WARMUP_CONCURRENT = 5;
|
|
25
|
+
const WARMUP_MAX_OBJECTS = 10000;
|
|
26
|
+
/**
|
|
27
|
+
* Run cache warmup: enumerate + fetch + index all custom objects.
|
|
28
|
+
*
|
|
29
|
+
* @param client - ADT client for SAP access
|
|
30
|
+
* @param cachingLayer - Caching layer to populate
|
|
31
|
+
* @param packageFilter - Package name filter (supports wildcards, e.g. "Z*,Y*")
|
|
32
|
+
* @param systemType - System type for choosing delta strategy
|
|
33
|
+
*/
|
|
34
|
+
export async function runWarmup(client, cachingLayer, packageFilter, _systemType) {
|
|
35
|
+
const start = Date.now();
|
|
36
|
+
let fetched = 0;
|
|
37
|
+
let skipped = 0;
|
|
38
|
+
let failed = 0;
|
|
39
|
+
let edgesCreated = 0;
|
|
40
|
+
// Phase 1: Enumerate objects from TADIR
|
|
41
|
+
logger.info('Cache warmup: enumerating objects from TADIR...');
|
|
42
|
+
const entries = await enumerateObjects(client, packageFilter);
|
|
43
|
+
logger.info(`Cache warmup: found ${entries.length} objects to index`);
|
|
44
|
+
// Phase 2: Fetch + index in parallel batches
|
|
45
|
+
for (let i = 0; i < entries.length; i += WARMUP_CONCURRENT) {
|
|
46
|
+
const batch = entries.slice(i, i + WARMUP_CONCURRENT);
|
|
47
|
+
const results = await Promise.all(batch.map(async (entry) => {
|
|
48
|
+
try {
|
|
49
|
+
return await indexObject(client, cachingLayer, entry);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
logger.debug(`Cache warmup: failed to index ${entry.objectType}:${entry.objectName}`, {
|
|
53
|
+
error: err instanceof Error ? err.message : String(err),
|
|
54
|
+
});
|
|
55
|
+
return { status: 'failed', edges: 0 };
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
for (const r of results) {
|
|
59
|
+
if (r.status === 'fetched') {
|
|
60
|
+
fetched++;
|
|
61
|
+
edgesCreated += r.edges;
|
|
62
|
+
}
|
|
63
|
+
else if (r.status === 'skipped') {
|
|
64
|
+
skipped++;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
failed++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Progress logging every 50 objects
|
|
71
|
+
if ((i + WARMUP_CONCURRENT) % 50 === 0 || i + WARMUP_CONCURRENT >= entries.length) {
|
|
72
|
+
logger.info(`Cache warmup: ${fetched + skipped + failed}/${entries.length} (${fetched} fetched, ${skipped} skipped, ${failed} failed)`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
cachingLayer.setWarmupDone(true);
|
|
76
|
+
const durationMs = Date.now() - start;
|
|
77
|
+
logger.info('Cache warmup complete', {
|
|
78
|
+
totalObjects: entries.length,
|
|
79
|
+
fetched,
|
|
80
|
+
skipped,
|
|
81
|
+
failed,
|
|
82
|
+
edgesCreated,
|
|
83
|
+
durationMs,
|
|
84
|
+
});
|
|
85
|
+
return { totalObjects: entries.length, fetched, skipped, failed, edgesCreated, durationMs };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Enumerate all custom CLAS/INTF/FUNC objects from TADIR.
|
|
89
|
+
*
|
|
90
|
+
* Runs separate queries per OBJ_NAME prefix (Z%, Y%, /%) to avoid
|
|
91
|
+
* parenthesized OR-LIKE clauses that some ADT systems reject.
|
|
92
|
+
* Package filtering is done in-memory after fetching.
|
|
93
|
+
*/
|
|
94
|
+
async function enumerateObjects(client, packageFilter) {
|
|
95
|
+
// TADIR uses PGMID = 'R3TR' for main repository objects
|
|
96
|
+
const objectTypes = "'CLAS','INTF','FUGR'"; // FUGR not FUNC — TADIR stores function groups
|
|
97
|
+
const baseWhere = `PGMID = 'R3TR' AND OBJECT IN (${objectTypes})`;
|
|
98
|
+
// Custom object name prefixes: Z*, Y*, namespaced /XX/*
|
|
99
|
+
// We run one query per prefix to avoid OR-in-parens which some ADT systems reject
|
|
100
|
+
const namePrefixes = ['Z%', 'Y%', '/%'];
|
|
101
|
+
// Compile package filter patterns into regex for in-memory filtering
|
|
102
|
+
let packageRegexes = null;
|
|
103
|
+
if (packageFilter) {
|
|
104
|
+
const patterns = packageFilter
|
|
105
|
+
.split(',')
|
|
106
|
+
.map((p) => p.trim())
|
|
107
|
+
.filter(Boolean);
|
|
108
|
+
if (patterns.length > 0) {
|
|
109
|
+
packageRegexes = patterns.map((p) => {
|
|
110
|
+
// Convert glob-style wildcards to regex
|
|
111
|
+
const escaped = p
|
|
112
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
113
|
+
.replace(/\*/g, '.*')
|
|
114
|
+
.replace(/\?/g, '.');
|
|
115
|
+
return new RegExp(`^${escaped}$`, 'i');
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const seen = new Set();
|
|
120
|
+
const entries = [];
|
|
121
|
+
for (const prefix of namePrefixes) {
|
|
122
|
+
const sql = `SELECT OBJECT, OBJ_NAME, DEVCLASS FROM TADIR WHERE ${baseWhere} AND OBJ_NAME LIKE '${prefix}' ORDER BY OBJECT, OBJ_NAME`;
|
|
123
|
+
try {
|
|
124
|
+
const data = await client.runQuery(sql, WARMUP_MAX_OBJECTS);
|
|
125
|
+
for (const row of data.rows) {
|
|
126
|
+
const objectType = String(row.OBJECT ?? '').trim();
|
|
127
|
+
const objectName = String(row.OBJ_NAME ?? '').trim();
|
|
128
|
+
const packageName = String(row.DEVCLASS ?? '').trim();
|
|
129
|
+
if (!objectType || !objectName)
|
|
130
|
+
continue;
|
|
131
|
+
// Deduplicate (shouldn't happen, but defensive)
|
|
132
|
+
const key = `${objectType}:${objectName}`;
|
|
133
|
+
if (seen.has(key))
|
|
134
|
+
continue;
|
|
135
|
+
// Apply package filter in memory
|
|
136
|
+
if (packageRegexes && !packageRegexes.some((r) => r.test(packageName)))
|
|
137
|
+
continue;
|
|
138
|
+
// Map TADIR types to our types
|
|
139
|
+
if (objectType === 'CLAS' || objectType === 'INTF' || objectType === 'FUGR') {
|
|
140
|
+
seen.add(key);
|
|
141
|
+
entries.push({ objectType, objectName, packageName });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
logger.warn(`Cache warmup: TADIR query failed for prefix '${prefix}'`, {
|
|
147
|
+
error: err instanceof Error ? err.message : String(err),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (entries.length === 0) {
|
|
152
|
+
logger.warn('Cache warmup: no objects found in TADIR — check package filter or system content');
|
|
153
|
+
}
|
|
154
|
+
else if (entries.length >= WARMUP_MAX_OBJECTS) {
|
|
155
|
+
logger.warn(`Cache warmup: found ${entries.length} objects (limit: ${WARMUP_MAX_OBJECTS}). ` +
|
|
156
|
+
'Results may be truncated. Consider narrowing the package filter (--cache-warmup-packages).');
|
|
157
|
+
}
|
|
158
|
+
return entries;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Index a single object: fetch source, extract deps, store in cache.
|
|
162
|
+
* Returns 'skipped' if source hash matches cached version.
|
|
163
|
+
*/
|
|
164
|
+
async function indexObject(client, cachingLayer, entry) {
|
|
165
|
+
const { objectType, objectName, packageName } = entry;
|
|
166
|
+
// For FUGR: we enumerate the function modules within the group
|
|
167
|
+
if (objectType === 'FUGR') {
|
|
168
|
+
return indexFunctionGroup(client, cachingLayer, objectName, packageName);
|
|
169
|
+
}
|
|
170
|
+
// Fetch source
|
|
171
|
+
let source;
|
|
172
|
+
try {
|
|
173
|
+
if (objectType === 'CLAS') {
|
|
174
|
+
source = await client.getClass(objectName);
|
|
175
|
+
}
|
|
176
|
+
else if (objectType === 'INTF') {
|
|
177
|
+
source = await client.getInterface(objectName);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
return { status: 'failed', edges: 0 };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return { status: 'failed', edges: 0 };
|
|
185
|
+
}
|
|
186
|
+
// Check if source changed since last cache
|
|
187
|
+
const cached = cachingLayer.getCachedSource(objectType, objectName);
|
|
188
|
+
const newHash = hashSource(source);
|
|
189
|
+
if (cached && cached.hash === newHash) {
|
|
190
|
+
return { status: 'skipped', edges: 0 };
|
|
191
|
+
}
|
|
192
|
+
// Store source
|
|
193
|
+
cachingLayer.cache.putSource(objectType, objectName, source);
|
|
194
|
+
// Store node metadata
|
|
195
|
+
cachingLayer.cache.putNode({
|
|
196
|
+
id: `${objectType}:${objectName}`.toUpperCase(),
|
|
197
|
+
objectType,
|
|
198
|
+
objectName: objectName.toUpperCase(),
|
|
199
|
+
packageName: packageName.toUpperCase(),
|
|
200
|
+
sourceHash: newHash,
|
|
201
|
+
cachedAt: new Date().toISOString(),
|
|
202
|
+
valid: true,
|
|
203
|
+
});
|
|
204
|
+
// Extract and store dependencies as edges
|
|
205
|
+
const deps = extractDependencies(source, objectName, true);
|
|
206
|
+
let edges = 0;
|
|
207
|
+
const fromId = objectName.toUpperCase();
|
|
208
|
+
for (const dep of deps) {
|
|
209
|
+
const edgeType = mapDepKindToEdgeType(dep.kind);
|
|
210
|
+
cachingLayer.cache.putEdge({
|
|
211
|
+
fromId,
|
|
212
|
+
toId: dep.name.toUpperCase(),
|
|
213
|
+
edgeType,
|
|
214
|
+
discoveredAt: new Date().toISOString(),
|
|
215
|
+
valid: true,
|
|
216
|
+
});
|
|
217
|
+
edges++;
|
|
218
|
+
}
|
|
219
|
+
return { status: 'fetched', edges };
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Index a function group: fetch its function modules and index each.
|
|
223
|
+
*/
|
|
224
|
+
async function indexFunctionGroup(client, cachingLayer, groupName, packageName) {
|
|
225
|
+
try {
|
|
226
|
+
const fg = await client.getFunctionGroup(groupName);
|
|
227
|
+
let totalEdges = 0;
|
|
228
|
+
let anyFetched = false;
|
|
229
|
+
// fg is a parsed object with functions list
|
|
230
|
+
const fgData = typeof fg === 'string' ? JSON.parse(fg) : fg;
|
|
231
|
+
const functions = fgData.functions ?? [];
|
|
232
|
+
for (const funcName of functions) {
|
|
233
|
+
// Cache the group mapping
|
|
234
|
+
cachingLayer.cache.putFuncGroup(funcName, groupName);
|
|
235
|
+
try {
|
|
236
|
+
const source = await client.getFunction(groupName, funcName);
|
|
237
|
+
const cached = cachingLayer.getCachedSource('FUNC', funcName);
|
|
238
|
+
const newHash = hashSource(source);
|
|
239
|
+
if (cached && cached.hash === newHash)
|
|
240
|
+
continue;
|
|
241
|
+
cachingLayer.cache.putSource('FUNC', funcName, source);
|
|
242
|
+
cachingLayer.cache.putNode({
|
|
243
|
+
id: `FUNC:${funcName}`.toUpperCase(),
|
|
244
|
+
objectType: 'FUNC',
|
|
245
|
+
objectName: funcName.toUpperCase(),
|
|
246
|
+
packageName: packageName.toUpperCase(),
|
|
247
|
+
sourceHash: newHash,
|
|
248
|
+
cachedAt: new Date().toISOString(),
|
|
249
|
+
valid: true,
|
|
250
|
+
});
|
|
251
|
+
const deps = extractDependencies(source, funcName, true);
|
|
252
|
+
for (const dep of deps) {
|
|
253
|
+
cachingLayer.cache.putEdge({
|
|
254
|
+
fromId: funcName.toUpperCase(),
|
|
255
|
+
toId: dep.name.toUpperCase(),
|
|
256
|
+
edgeType: mapDepKindToEdgeType(dep.kind),
|
|
257
|
+
discoveredAt: new Date().toISOString(),
|
|
258
|
+
valid: true,
|
|
259
|
+
});
|
|
260
|
+
totalEdges++;
|
|
261
|
+
}
|
|
262
|
+
anyFetched = true;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
// Individual func fetch failure — continue with others
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return { status: anyFetched ? 'fetched' : 'skipped', edges: totalEdges };
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
return { status: 'failed', edges: 0 };
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/** Map dependency kind to cache edge type */
|
|
275
|
+
function mapDepKindToEdgeType(kind) {
|
|
276
|
+
switch (kind) {
|
|
277
|
+
case 'function_call':
|
|
278
|
+
return 'CALLS';
|
|
279
|
+
case 'interface':
|
|
280
|
+
case 'inheritance':
|
|
281
|
+
return 'IMPLEMENTS';
|
|
282
|
+
default:
|
|
283
|
+
return 'USES';
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=warmup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warmup.js","sourceRoot":"","sources":["../../src/cache/warmup.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDS DDL dependency and element extraction.
|
|
3
|
+
*
|
|
4
|
+
* Regex-based parser for CDS Data Definition Language source code.
|
|
5
|
+
* Extracts:
|
|
6
|
+
* - Data sources (FROM, JOIN)
|
|
7
|
+
* - Associations and compositions
|
|
8
|
+
* - Projection bases
|
|
9
|
+
* - Field/element listings from the SELECT projection
|
|
10
|
+
*
|
|
11
|
+
* Used by SAPContext (DDLS type) and SAPRead (DDLS include="elements").
|
|
12
|
+
*/
|
|
13
|
+
import type { CdsDependency } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Extract dependencies from CDS DDL source.
|
|
16
|
+
*
|
|
17
|
+
* Identifies data sources, associations, compositions, and projection bases
|
|
18
|
+
* referenced in the CDS entity definition.
|
|
19
|
+
*
|
|
20
|
+
* @param ddlSource - Raw CDS DDL source code
|
|
21
|
+
* @returns Deduplicated list of CDS dependencies
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractCdsDependencies(ddlSource: string): CdsDependency[];
|
|
24
|
+
/**
|
|
25
|
+
* Extract a structured element listing from CDS DDL source.
|
|
26
|
+
*
|
|
27
|
+
* Parses the SELECT projection list between { and } to produce a
|
|
28
|
+
* human-readable, LLM-friendly element listing.
|
|
29
|
+
*
|
|
30
|
+
* @param ddlSource - Raw CDS DDL source code
|
|
31
|
+
* @param entityName - Entity name for the header
|
|
32
|
+
* @returns Formatted element listing text
|
|
33
|
+
*/
|
|
34
|
+
export declare function extractCdsElements(ddlSource: string, entityName: string): string;
|
|
35
|
+
//# sourceMappingURL=cds-deps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cds-deps.d.ts","sourceRoot":"","sources":["../../src/context/cds-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAehD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAyCzE;AAUD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA4BhF"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDS DDL dependency and element extraction.
|
|
3
|
+
*
|
|
4
|
+
* Regex-based parser for CDS Data Definition Language source code.
|
|
5
|
+
* Extracts:
|
|
6
|
+
* - Data sources (FROM, JOIN)
|
|
7
|
+
* - Associations and compositions
|
|
8
|
+
* - Projection bases
|
|
9
|
+
* - Field/element listings from the SELECT projection
|
|
10
|
+
*
|
|
11
|
+
* Used by SAPContext (DDLS type) and SAPRead (DDLS include="elements").
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Strip comments and string literals from CDS DDL source to prevent false matches.
|
|
15
|
+
*/
|
|
16
|
+
function stripCommentsAndStrings(source) {
|
|
17
|
+
// Remove block comments /* ... */
|
|
18
|
+
let result = source.replace(/\/\*[\s\S]*?\*\//g, ' ');
|
|
19
|
+
// Remove line comments // ...
|
|
20
|
+
result = result.replace(/\/\/.*$/gm, '');
|
|
21
|
+
// Remove string literals 'value'
|
|
22
|
+
result = result.replace(/'[^']*'/g, "''");
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extract dependencies from CDS DDL source.
|
|
27
|
+
*
|
|
28
|
+
* Identifies data sources, associations, compositions, and projection bases
|
|
29
|
+
* referenced in the CDS entity definition.
|
|
30
|
+
*
|
|
31
|
+
* @param ddlSource - Raw CDS DDL source code
|
|
32
|
+
* @returns Deduplicated list of CDS dependencies
|
|
33
|
+
*/
|
|
34
|
+
export function extractCdsDependencies(ddlSource) {
|
|
35
|
+
const cleaned = stripCommentsAndStrings(ddlSource);
|
|
36
|
+
const deps = [];
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
// Pattern for entity names: word chars, forward slashes (namespaced), underscores
|
|
39
|
+
// Matches: zsalesorder, ZI_ORDER, /DMO/I_TRAVEL
|
|
40
|
+
const namePattern = '[\\w/]+';
|
|
41
|
+
// 1. select from <source> [as <alias>]
|
|
42
|
+
// Also handles: as select from, as projection on
|
|
43
|
+
const selectFromRe = new RegExp(`\\bselect\\s+from\\s+(${namePattern})`, 'gi');
|
|
44
|
+
for (const match of cleaned.matchAll(selectFromRe)) {
|
|
45
|
+
addDep(deps, seen, match[1], 'data_source');
|
|
46
|
+
}
|
|
47
|
+
// 2. projection on <source>
|
|
48
|
+
const projectionRe = new RegExp(`\\bprojection\\s+on\\s+(${namePattern})`, 'gi');
|
|
49
|
+
for (const match of cleaned.matchAll(projectionRe)) {
|
|
50
|
+
addDep(deps, seen, match[1], 'projection_base');
|
|
51
|
+
}
|
|
52
|
+
// 3. join <source> — inner join, left outer join, right outer join, cross join
|
|
53
|
+
const joinRe = new RegExp(`\\bjoin\\s+(${namePattern})`, 'gi');
|
|
54
|
+
for (const match of cleaned.matchAll(joinRe)) {
|
|
55
|
+
addDep(deps, seen, match[1], 'data_source');
|
|
56
|
+
}
|
|
57
|
+
// 4. association [...] to <source>
|
|
58
|
+
const assocRe = new RegExp(`\\bassociation\\s+(?:\\[[^\\]]*\\]\\s+)?to\\s+(${namePattern})`, 'gi');
|
|
59
|
+
for (const match of cleaned.matchAll(assocRe)) {
|
|
60
|
+
addDep(deps, seen, match[1], 'association');
|
|
61
|
+
}
|
|
62
|
+
// 5. composition [...] of <source>
|
|
63
|
+
const compRe = new RegExp(`\\bcomposition\\s+(?:\\[[^\\]]*\\]\\s+)?of\\s+(${namePattern})`, 'gi');
|
|
64
|
+
for (const match of cleaned.matchAll(compRe)) {
|
|
65
|
+
addDep(deps, seen, match[1], 'composition');
|
|
66
|
+
}
|
|
67
|
+
return deps;
|
|
68
|
+
}
|
|
69
|
+
/** Add a dependency if not already seen (case-insensitive dedup) */
|
|
70
|
+
function addDep(deps, seen, name, kind) {
|
|
71
|
+
const upper = name.toUpperCase();
|
|
72
|
+
if (seen.has(upper))
|
|
73
|
+
return;
|
|
74
|
+
seen.add(upper);
|
|
75
|
+
deps.push({ name, kind });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract a structured element listing from CDS DDL source.
|
|
79
|
+
*
|
|
80
|
+
* Parses the SELECT projection list between { and } to produce a
|
|
81
|
+
* human-readable, LLM-friendly element listing.
|
|
82
|
+
*
|
|
83
|
+
* @param ddlSource - Raw CDS DDL source code
|
|
84
|
+
* @param entityName - Entity name for the header
|
|
85
|
+
* @returns Formatted element listing text
|
|
86
|
+
*/
|
|
87
|
+
export function extractCdsElements(ddlSource, entityName) {
|
|
88
|
+
const lines = [];
|
|
89
|
+
lines.push(`=== ${entityName} elements ===`);
|
|
90
|
+
// Find the projection block between { and }
|
|
91
|
+
// Use the original source (not stripped) to preserve field expressions
|
|
92
|
+
const braceStart = ddlSource.indexOf('{');
|
|
93
|
+
const braceEnd = ddlSource.lastIndexOf('}');
|
|
94
|
+
if (braceStart === -1 || braceEnd === -1 || braceEnd <= braceStart) {
|
|
95
|
+
return lines.join('\n');
|
|
96
|
+
}
|
|
97
|
+
const projectionBlock = ddlSource.slice(braceStart + 1, braceEnd);
|
|
98
|
+
// Split into field expressions by comma, but respect nested parens and case blocks
|
|
99
|
+
const fields = splitFieldExpressions(projectionBlock);
|
|
100
|
+
for (const fieldExpr of fields) {
|
|
101
|
+
const trimmed = fieldExpr.trim();
|
|
102
|
+
if (!trimmed)
|
|
103
|
+
continue;
|
|
104
|
+
const element = parseFieldExpression(trimmed);
|
|
105
|
+
if (element) {
|
|
106
|
+
lines.push(element);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return lines.join('\n');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Split the projection block into individual field expressions,
|
|
113
|
+
* respecting nested parentheses and case...end blocks.
|
|
114
|
+
*/
|
|
115
|
+
function splitFieldExpressions(block) {
|
|
116
|
+
const fields = [];
|
|
117
|
+
let current = '';
|
|
118
|
+
let parenDepth = 0;
|
|
119
|
+
let caseDepth = 0;
|
|
120
|
+
// Tokenize by character, tracking nesting
|
|
121
|
+
const tokens = block.split('\n');
|
|
122
|
+
const flatBlock = tokens.join(' ');
|
|
123
|
+
for (let i = 0; i < flatBlock.length; i++) {
|
|
124
|
+
const ch = flatBlock[i];
|
|
125
|
+
if (ch === '(')
|
|
126
|
+
parenDepth++;
|
|
127
|
+
if (ch === ')')
|
|
128
|
+
parenDepth--;
|
|
129
|
+
// Track case...end blocks
|
|
130
|
+
const remaining = flatBlock.slice(i).toLowerCase();
|
|
131
|
+
if (remaining.startsWith('case ') || remaining.startsWith('case\n')) {
|
|
132
|
+
caseDepth++;
|
|
133
|
+
}
|
|
134
|
+
if (remaining.startsWith('end ') || remaining.startsWith('end,') || remaining === 'end') {
|
|
135
|
+
caseDepth = Math.max(0, caseDepth - 1);
|
|
136
|
+
}
|
|
137
|
+
if (ch === ',' && parenDepth === 0 && caseDepth === 0) {
|
|
138
|
+
fields.push(current);
|
|
139
|
+
current = '';
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
current += ch;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (current.trim()) {
|
|
146
|
+
fields.push(current);
|
|
147
|
+
}
|
|
148
|
+
return fields;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Parse a single field expression into a formatted element line.
|
|
152
|
+
*/
|
|
153
|
+
function parseFieldExpression(expr) {
|
|
154
|
+
// Normalize whitespace
|
|
155
|
+
const normalized = expr.replace(/\s+/g, ' ').trim();
|
|
156
|
+
if (!normalized)
|
|
157
|
+
return null;
|
|
158
|
+
// Check for key prefix
|
|
159
|
+
const isKey = /^\s*key\b/i.test(normalized);
|
|
160
|
+
const withoutKey = normalized.replace(/^\s*key\s+/i, '').trim();
|
|
161
|
+
// Check if it's an association exposure (starts with _)
|
|
162
|
+
if (/^_\w+/.test(withoutKey)) {
|
|
163
|
+
const assocName = withoutKey.split(/[\s,]/)[0];
|
|
164
|
+
const keyPrefix = isKey ? 'key ' : ' ';
|
|
165
|
+
return `${keyPrefix}${assocName.padEnd(30)} [association]`;
|
|
166
|
+
}
|
|
167
|
+
// Check for "as Alias" at the end to get the field name
|
|
168
|
+
const aliasMatch = withoutKey.match(/\bas\s+(\w+)\s*$/i);
|
|
169
|
+
const fieldName = aliasMatch ? aliasMatch[1] : withoutKey.split(/[\s.(]/)[0];
|
|
170
|
+
if (!fieldName)
|
|
171
|
+
return null;
|
|
172
|
+
// Determine the kind of expression
|
|
173
|
+
const kind = classifyExpression(withoutKey, aliasMatch ? withoutKey.slice(0, aliasMatch.index).trim() : '');
|
|
174
|
+
const keyPrefix = isKey ? 'key ' : ' ';
|
|
175
|
+
const kindLabel = kind ? ` [${kind}]` : '';
|
|
176
|
+
return `${keyPrefix}${fieldName.padEnd(30)}${kindLabel}`;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Classify what kind of expression produces this field.
|
|
180
|
+
*/
|
|
181
|
+
function classifyExpression(fullExpr, beforeAlias) {
|
|
182
|
+
const lower = (beforeAlias || fullExpr).toLowerCase();
|
|
183
|
+
if (/\bcase\b/.test(lower))
|
|
184
|
+
return 'case';
|
|
185
|
+
if (/\bcast\s*\(/.test(lower))
|
|
186
|
+
return 'cast';
|
|
187
|
+
if (/\bcoalesce\s*\(/.test(lower))
|
|
188
|
+
return 'coalesce';
|
|
189
|
+
if (/\bconcat\s*\(/.test(lower))
|
|
190
|
+
return 'concat';
|
|
191
|
+
if (/\bcurrency_conversion\s*\(/.test(lower))
|
|
192
|
+
return 'currency_conversion';
|
|
193
|
+
if (/\bunit_conversion\s*\(/.test(lower))
|
|
194
|
+
return 'unit_conversion';
|
|
195
|
+
// Arithmetic: contains +, -, *, / between word chars (not in function calls)
|
|
196
|
+
if (/\w\s*[-+*/]\s*\w/.test(beforeAlias || fullExpr))
|
|
197
|
+
return 'calculated';
|
|
198
|
+
// Simple field reference: source.field or just field_name — no label needed
|
|
199
|
+
return '';
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=cds-deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cds-deps.js","sourceRoot":"","sources":["../../src/context/cds-deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,15 @@
|
|
|
7
7
|
* 3. Sort (custom objects first)
|
|
8
8
|
* 4. Limit to maxDeps
|
|
9
9
|
* 5. Fetch dependency sources (parallel, bounded to MAX_CONCURRENT)
|
|
10
|
+
* → With caching layer: check cache first, only fetch on miss
|
|
10
11
|
* 6. Extract contracts (public API only) (contract.ts)
|
|
11
12
|
* 7. If depth > 1, recurse on each dependency's source
|
|
12
13
|
* 8. Format output prologue
|
|
14
|
+
* 9. Cache the resolved dep graph (keyed by source hash)
|
|
13
15
|
*/
|
|
14
16
|
import type { Version } from '@abaplint/core';
|
|
15
17
|
import type { AdtClient } from '../adt/client.js';
|
|
18
|
+
import type { CachingLayer } from '../cache/caching-layer.js';
|
|
16
19
|
import type { ContextResult, Dependency } from './types.js';
|
|
17
20
|
/**
|
|
18
21
|
* Compress dependency context for an ABAP object.
|
|
@@ -24,10 +27,26 @@ import type { ContextResult, Dependency } from './types.js';
|
|
|
24
27
|
* @param maxDeps - Maximum number of dependencies to resolve (default 20)
|
|
25
28
|
* @param depth - Dependency expansion depth 1-3 (default 1)
|
|
26
29
|
* @param abaplintVersion - abaplint parser version (detected from SAP system, defaults to Cloud)
|
|
30
|
+
* @param cachingLayer - Optional caching layer for source and contract caching
|
|
27
31
|
*/
|
|
28
|
-
export declare function compressContext(client: AdtClient, source: string, objectName: string, objectType: string, maxDeps?: number, depth?: number, abaplintVersion?: Version): Promise<ContextResult>;
|
|
32
|
+
export declare function compressContext(client: AdtClient, source: string, objectName: string, objectType: string, maxDeps?: number, depth?: number, abaplintVersion?: Version, cachingLayer?: CachingLayer): Promise<ContextResult>;
|
|
29
33
|
/**
|
|
30
34
|
* Infer the object type from the dependency kind and naming convention.
|
|
31
35
|
*/
|
|
32
36
|
export declare function inferObjectType(dep: Dependency): 'CLAS' | 'INTF' | 'FUNC' | 'UNKNOWN';
|
|
37
|
+
/**
|
|
38
|
+
* Compress dependency context for a CDS entity.
|
|
39
|
+
*
|
|
40
|
+
* Unlike ABAP context (AST-based), CDS context uses regex to extract
|
|
41
|
+
* dependencies from DDL source, then fetches each dependency's source
|
|
42
|
+
* with a type fallback chain: DDLS → TABL → STRU.
|
|
43
|
+
*
|
|
44
|
+
* @param client - ADT client for fetching dependency sources
|
|
45
|
+
* @param ddlSource - CDS DDL source code of the target entity
|
|
46
|
+
* @param objectName - CDS entity name
|
|
47
|
+
* @param maxDeps - Maximum dependencies to resolve (default 20)
|
|
48
|
+
* @param depth - Dependency depth 1-3 (default 1)
|
|
49
|
+
* @param cachingLayer - Optional caching layer for source caching
|
|
50
|
+
*/
|
|
51
|
+
export declare function compressCdsContext(client: AdtClient, ddlSource: string, objectName: string, maxDeps?: number, depth?: number, cachingLayer?: CachingLayer): Promise<ContextResult>;
|
|
33
52
|
//# sourceMappingURL=compressor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../../
|
|
1
|
+
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../../src/context/compressor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,KAAK,EAAiB,aAAa,EAAY,UAAU,EAAE,MAAM,YAAY,CAAC;AAOrF;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,SAAmB,EAC1B,KAAK,SAAgB,EACrB,eAAe,CAAC,EAAE,OAAO,EACzB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,aAAa,CAAC,CAkCxB;AA4GD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBrF;AA+HD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,SAAmB,EAC1B,KAAK,SAAgB,EACrB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,aAAa,CAAC,CAUxB"}
|