@specverse/engines 6.21.4 → 6.27.10
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/dist/ai/analyse-runner.d.ts +16 -0
- package/dist/ai/analyse-runner.d.ts.map +1 -1
- package/dist/ai/analyse-runner.js +417 -53
- package/dist/ai/analyse-runner.js.map +1 -1
- package/dist/ai/microcall-orchestrator.d.ts +187 -0
- package/dist/ai/microcall-orchestrator.d.ts.map +1 -0
- package/dist/ai/microcall-orchestrator.js +673 -0
- package/dist/ai/microcall-orchestrator.js.map +1 -0
- package/dist/ai/skeleton-emitter.d.ts +94 -0
- package/dist/ai/skeleton-emitter.d.ts.map +1 -0
- package/dist/ai/skeleton-emitter.js +752 -0
- package/dist/ai/skeleton-emitter.js.map +1 -0
- package/dist/analyse-prepass/adapters/express-routes.d.ts +71 -0
- package/dist/analyse-prepass/adapters/express-routes.d.ts.map +1 -0
- package/dist/analyse-prepass/adapters/express-routes.js +329 -0
- package/dist/analyse-prepass/adapters/express-routes.js.map +1 -0
- package/dist/analyse-prepass/adapters/typescript-interfaces.d.ts +91 -0
- package/dist/analyse-prepass/adapters/typescript-interfaces.d.ts.map +1 -0
- package/dist/analyse-prepass/adapters/typescript-interfaces.js +411 -0
- package/dist/analyse-prepass/adapters/typescript-interfaces.js.map +1 -0
- package/dist/analyse-prepass/backends/gitnexus.d.ts.map +1 -1
- package/dist/analyse-prepass/backends/gitnexus.js +36 -8
- package/dist/analyse-prepass/backends/gitnexus.js.map +1 -1
- package/dist/analyse-prepass/backends/index.d.ts.map +1 -1
- package/dist/analyse-prepass/backends/index.js +3 -5
- package/dist/analyse-prepass/backends/index.js.map +1 -1
- package/dist/analyse-prepass/behavior-step-classifier.d.ts +3 -0
- package/dist/analyse-prepass/behavior-step-classifier.d.ts.map +1 -1
- package/dist/analyse-prepass/behavior-step-classifier.js +1 -0
- package/dist/analyse-prepass/behavior-step-classifier.js.map +1 -1
- package/dist/analyse-prepass/index.d.ts +69 -0
- package/dist/analyse-prepass/index.d.ts.map +1 -1
- package/dist/analyse-prepass/index.js +319 -37
- package/dist/analyse-prepass/index.js.map +1 -1
- package/dist/analyse-prepass/method-body-walker.d.ts +4 -0
- package/dist/analyse-prepass/method-body-walker.d.ts.map +1 -1
- package/dist/analyse-prepass/method-body-walker.js +14 -0
- package/dist/analyse-prepass/method-body-walker.js.map +1 -1
- package/dist/audit/realize-recorder.d.ts +164 -0
- package/dist/audit/realize-recorder.d.ts.map +1 -0
- package/dist/audit/realize-recorder.js +153 -0
- package/dist/audit/realize-recorder.js.map +1 -0
- package/dist/audit/verify-checks.d.ts +32 -0
- package/dist/audit/verify-checks.d.ts.map +1 -0
- package/dist/audit/verify-checks.js +202 -0
- package/dist/audit/verify-checks.js.map +1 -0
- package/dist/audit/verify-recorder.d.ts +84 -0
- package/dist/audit/verify-recorder.d.ts.map +1 -0
- package/dist/audit/verify-recorder.js +90 -0
- package/dist/audit/verify-recorder.js.map +1 -0
- package/dist/inference/core/specly-converter.d.ts.map +1 -1
- package/dist/inference/core/specly-converter.js +67 -36
- package/dist/inference/core/specly-converter.js.map +1 -1
- package/dist/libs/instance-factories/services/templates/_shared/step-matching.js +39 -15
- package/dist/realize/index.d.ts.map +1 -1
- package/dist/realize/index.js +63 -0
- package/dist/realize/index.js.map +1 -1
- package/libs/instance-factories/services/templates/_shared/step-matching.ts +61 -16
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-emitter.js","sourceRoot":"","sources":["../../src/ai/skeleton-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `express-routes` adapter — surfaces HTTP routes from Express-style
|
|
3
|
+
* router files as synthetic *Controller classes.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: idle-meta-style codebases keep their HTTP API in
|
|
6
|
+
* `routes/<resource>.ts` modules using `const router = Router()` +
|
|
7
|
+
* `router.<verb>(path, handler)` declarations. There are NO class-based
|
|
8
|
+
* `*Controller`s — but the API surface is real and architecturally
|
|
9
|
+
* meaningful. Without this adapter the spec loses the entire
|
|
10
|
+
* controllers: layer (every action collapses into services or
|
|
11
|
+
* Unassigned).
|
|
12
|
+
*
|
|
13
|
+
* Each route file becomes one synthetic controller in the prepass
|
|
14
|
+
* output. Each `router.<verb>(path, handler)` becomes one method on
|
|
15
|
+
* that controller. The handler's body is extracted verbatim so the
|
|
16
|
+
* existing candidate-step classifier can run on it unmodified.
|
|
17
|
+
*
|
|
18
|
+
* Detection criteria (must match BOTH):
|
|
19
|
+
* - File contains `Router()` or `import { Router }` from express
|
|
20
|
+
* - File has at least one `router.<verb>(...)` call where verb is
|
|
21
|
+
* get|post|put|patch|delete|all|head|options
|
|
22
|
+
*
|
|
23
|
+
* Naming derivation:
|
|
24
|
+
* - filename `auth.ts` → `AuthController`
|
|
25
|
+
* - filename `games.v3.ts` → `GamesV3Controller`
|
|
26
|
+
* - filename `user-profile.ts` → `UserProfileController`
|
|
27
|
+
*
|
|
28
|
+
* Action-name derivation (per handler, in priority order):
|
|
29
|
+
* 1. Named handler reference: `router.post('/x', registerHandler)` →
|
|
30
|
+
* strip `Handler` suffix → `register`
|
|
31
|
+
* 2. Single-word path with no parameters: `router.post('/login', ...)` →
|
|
32
|
+
* `login`
|
|
33
|
+
* 3. Verb + path PascalCase: `router.get('/users/:id', ...)` → `getUsers`
|
|
34
|
+
* 4. Fallback: `<verb><N>` where N is the handler ordinal
|
|
35
|
+
*/
|
|
36
|
+
export interface ExpressRouteHandler {
|
|
37
|
+
/** Action name (suitable as a yaml key — lowercase first char, [a-z][a-zA-Z0-9_]*). */
|
|
38
|
+
methodName: string;
|
|
39
|
+
/** Whether the handler is declared async. */
|
|
40
|
+
isAsync: boolean;
|
|
41
|
+
/** The handler function body (between matching braces, no wrapping). */
|
|
42
|
+
body: string;
|
|
43
|
+
/** Source line range of the FULL handler declaration (start of router.x() call to closing brace). */
|
|
44
|
+
sourceLineRange: [number, number];
|
|
45
|
+
/** Original HTTP verb, lowercase. */
|
|
46
|
+
httpVerb: 'get' | 'post' | 'put' | 'patch' | 'delete' | 'all' | 'head' | 'options';
|
|
47
|
+
/** Original path. */
|
|
48
|
+
routePath: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ExpressRouteFile {
|
|
51
|
+
filePath: string;
|
|
52
|
+
/** Synthesized controller name (PascalCase + Controller suffix). */
|
|
53
|
+
controllerName: string;
|
|
54
|
+
handlers: ExpressRouteHandler[];
|
|
55
|
+
}
|
|
56
|
+
/** True when the source looks like an Express router file. */
|
|
57
|
+
export declare function isExpressRouterFile(source: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Scan an Express router file and extract every `router.<verb>(path, handler)` call.
|
|
60
|
+
* Returns one `ExpressRouteHandler` per call — handler body included verbatim.
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseExpressRoutes(source: string): ExpressRouteHandler[];
|
|
63
|
+
/**
|
|
64
|
+
* Wrap a list of handlers in a synthetic class body. The output is
|
|
65
|
+
* suitable for `walkMethodBodies` / `extractCandidateSteps` to consume.
|
|
66
|
+
* Each handler becomes a `<methodName>(req, res) { <body> }` member.
|
|
67
|
+
*/
|
|
68
|
+
export declare function synthesizeControllerClass(controllerName: string, handlers: ExpressRouteHandler[]): string;
|
|
69
|
+
/** Derive a controller name from a route file's basename. */
|
|
70
|
+
export declare function deriveControllerName(filePath: string): string;
|
|
71
|
+
//# sourceMappingURL=express-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express-routes.d.ts","sourceRoot":"","sources":["../../../src/analyse-prepass/adapters/express-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,mBAAmB;IAClC,uFAAuF;IACvF,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,qGAAqG;IACrG,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,qCAAqC;IACrC,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IACnF,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK3D;AAoID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAuFxE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,MAAM,CAcR;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI7D"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `express-routes` adapter — surfaces HTTP routes from Express-style
|
|
3
|
+
* router files as synthetic *Controller classes.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: idle-meta-style codebases keep their HTTP API in
|
|
6
|
+
* `routes/<resource>.ts` modules using `const router = Router()` +
|
|
7
|
+
* `router.<verb>(path, handler)` declarations. There are NO class-based
|
|
8
|
+
* `*Controller`s — but the API surface is real and architecturally
|
|
9
|
+
* meaningful. Without this adapter the spec loses the entire
|
|
10
|
+
* controllers: layer (every action collapses into services or
|
|
11
|
+
* Unassigned).
|
|
12
|
+
*
|
|
13
|
+
* Each route file becomes one synthetic controller in the prepass
|
|
14
|
+
* output. Each `router.<verb>(path, handler)` becomes one method on
|
|
15
|
+
* that controller. The handler's body is extracted verbatim so the
|
|
16
|
+
* existing candidate-step classifier can run on it unmodified.
|
|
17
|
+
*
|
|
18
|
+
* Detection criteria (must match BOTH):
|
|
19
|
+
* - File contains `Router()` or `import { Router }` from express
|
|
20
|
+
* - File has at least one `router.<verb>(...)` call where verb is
|
|
21
|
+
* get|post|put|patch|delete|all|head|options
|
|
22
|
+
*
|
|
23
|
+
* Naming derivation:
|
|
24
|
+
* - filename `auth.ts` → `AuthController`
|
|
25
|
+
* - filename `games.v3.ts` → `GamesV3Controller`
|
|
26
|
+
* - filename `user-profile.ts` → `UserProfileController`
|
|
27
|
+
*
|
|
28
|
+
* Action-name derivation (per handler, in priority order):
|
|
29
|
+
* 1. Named handler reference: `router.post('/x', registerHandler)` →
|
|
30
|
+
* strip `Handler` suffix → `register`
|
|
31
|
+
* 2. Single-word path with no parameters: `router.post('/login', ...)` →
|
|
32
|
+
* `login`
|
|
33
|
+
* 3. Verb + path PascalCase: `router.get('/users/:id', ...)` → `getUsers`
|
|
34
|
+
* 4. Fallback: `<verb><N>` where N is the handler ordinal
|
|
35
|
+
*/
|
|
36
|
+
/** True when the source looks like an Express router file. */
|
|
37
|
+
export function isExpressRouterFile(source) {
|
|
38
|
+
// Must reference Router (named import or call) AND have ≥1 router.<verb>(...) call.
|
|
39
|
+
const hasRouter = /\bRouter\s*\(\s*\)/.test(source) || /from\s+['"]express['"]/.test(source);
|
|
40
|
+
if (!hasRouter)
|
|
41
|
+
return false;
|
|
42
|
+
return /\b\w+\.(?:get|post|put|patch|delete|all|head|options)\s*\(/.test(source);
|
|
43
|
+
}
|
|
44
|
+
/** PascalCase a filename basename, stripping the extension first. */
|
|
45
|
+
function fileBasenameToPascalCase(basename) {
|
|
46
|
+
const noExt = basename.replace(/\.(ts|js|tsx|jsx|mjs|cjs)$/, '');
|
|
47
|
+
return noExt
|
|
48
|
+
.split(/[-_./]+/)
|
|
49
|
+
.filter((p) => p.length > 0)
|
|
50
|
+
.map((p) => p.charAt(0).toUpperCase() + p.slice(1))
|
|
51
|
+
.join('');
|
|
52
|
+
}
|
|
53
|
+
/** PascalCase a single segment of a route path. */
|
|
54
|
+
function segmentToPascalCase(seg) {
|
|
55
|
+
if (!seg)
|
|
56
|
+
return '';
|
|
57
|
+
return seg
|
|
58
|
+
.split(/[-_]/)
|
|
59
|
+
.map((p) => p.charAt(0).toUpperCase() + p.slice(1))
|
|
60
|
+
.join('');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Find the matching close brace for an open brace at `openIdx`. Naive
|
|
64
|
+
* brace-balancer — sufficient for handler bodies (no string-literal
|
|
65
|
+
* backslash escapes to worry about that contain unbalanced braces in
|
|
66
|
+
* practice). Returns -1 if unmatched.
|
|
67
|
+
*/
|
|
68
|
+
function findMatchingBrace(source, openIdx) {
|
|
69
|
+
let depth = 1;
|
|
70
|
+
let inString = null;
|
|
71
|
+
let inLineComment = false;
|
|
72
|
+
let inBlockComment = false;
|
|
73
|
+
for (let i = openIdx + 1; i < source.length; i++) {
|
|
74
|
+
const c = source[i];
|
|
75
|
+
const n = source[i + 1];
|
|
76
|
+
if (inLineComment) {
|
|
77
|
+
if (c === '\n')
|
|
78
|
+
inLineComment = false;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (inBlockComment) {
|
|
82
|
+
if (c === '*' && n === '/') {
|
|
83
|
+
inBlockComment = false;
|
|
84
|
+
i++;
|
|
85
|
+
}
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (inString) {
|
|
89
|
+
if (c === '\\') {
|
|
90
|
+
i++;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (c === inString)
|
|
94
|
+
inString = null;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (c === '/' && n === '/') {
|
|
98
|
+
inLineComment = true;
|
|
99
|
+
i++;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (c === '/' && n === '*') {
|
|
103
|
+
inBlockComment = true;
|
|
104
|
+
i++;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (c === '"' || c === "'" || c === '`') {
|
|
108
|
+
inString = c;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (c === '{')
|
|
112
|
+
depth++;
|
|
113
|
+
else if (c === '}') {
|
|
114
|
+
depth--;
|
|
115
|
+
if (depth === 0)
|
|
116
|
+
return i;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return -1;
|
|
120
|
+
}
|
|
121
|
+
/** Find the matching close paren for an open paren at `openIdx`. */
|
|
122
|
+
function findMatchingParen(source, openIdx) {
|
|
123
|
+
let depth = 1;
|
|
124
|
+
let inString = null;
|
|
125
|
+
for (let i = openIdx + 1; i < source.length; i++) {
|
|
126
|
+
const c = source[i];
|
|
127
|
+
if (inString) {
|
|
128
|
+
if (c === '\\') {
|
|
129
|
+
i++;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (c === inString)
|
|
133
|
+
inString = null;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (c === '"' || c === "'" || c === '`') {
|
|
137
|
+
inString = c;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (c === '(')
|
|
141
|
+
depth++;
|
|
142
|
+
else if (c === ')') {
|
|
143
|
+
depth--;
|
|
144
|
+
if (depth === 0)
|
|
145
|
+
return i;
|
|
146
|
+
}
|
|
147
|
+
else if (c === '{') {
|
|
148
|
+
// Skip object-literal / arrow-body braces.
|
|
149
|
+
const close = findMatchingBrace(source, i);
|
|
150
|
+
if (close < 0)
|
|
151
|
+
return -1;
|
|
152
|
+
i = close;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return -1;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Derive an action method name from the route definition + handler.
|
|
159
|
+
* Resolution order (per file-header doc).
|
|
160
|
+
*/
|
|
161
|
+
function deriveMethodName(verb, routePath, handlerExpr, ordinal) {
|
|
162
|
+
// 1. Named handler reference (NOT an inline arrow/function expression).
|
|
163
|
+
const nameRefMatch = handlerExpr.match(/^([a-zA-Z_$][\w$]*)\s*$/);
|
|
164
|
+
if (nameRefMatch) {
|
|
165
|
+
const name = nameRefMatch[1].replace(/Handler$/, '');
|
|
166
|
+
if (name && /^[a-z]/.test(name))
|
|
167
|
+
return name;
|
|
168
|
+
}
|
|
169
|
+
// 2. Single segment, no params, lowercase-friendly.
|
|
170
|
+
const cleanedPath = routePath.replace(/^\//, '').replace(/\/$/, '');
|
|
171
|
+
if (cleanedPath && !/[:/]/.test(cleanedPath)) {
|
|
172
|
+
return cleanedPath.replace(/[-_.]/g, '').toLowerCase();
|
|
173
|
+
}
|
|
174
|
+
// 3. Verb + path PascalCase. Skip params (`:id`).
|
|
175
|
+
const segments = cleanedPath
|
|
176
|
+
.split('/')
|
|
177
|
+
.filter((s) => s.length > 0 && !s.startsWith(':'));
|
|
178
|
+
if (segments.length > 0) {
|
|
179
|
+
const path = segments.map(segmentToPascalCase).join('');
|
|
180
|
+
return verb + path;
|
|
181
|
+
}
|
|
182
|
+
// 4. Fallback.
|
|
183
|
+
return `${verb}${ordinal}`;
|
|
184
|
+
}
|
|
185
|
+
/** Given an ordered list of methodNames, append _N to disambiguate duplicates. */
|
|
186
|
+
function deduplicateMethodNames(handlers) {
|
|
187
|
+
const seen = new Map();
|
|
188
|
+
for (const h of handlers) {
|
|
189
|
+
const count = seen.get(h.methodName) ?? 0;
|
|
190
|
+
if (count > 0) {
|
|
191
|
+
h.methodName = `${h.methodName}_${count + 1}`;
|
|
192
|
+
}
|
|
193
|
+
seen.set(h.methodName, count + 1);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Scan an Express router file and extract every `router.<verb>(path, handler)` call.
|
|
198
|
+
* Returns one `ExpressRouteHandler` per call — handler body included verbatim.
|
|
199
|
+
*/
|
|
200
|
+
export function parseExpressRoutes(source) {
|
|
201
|
+
const out = [];
|
|
202
|
+
// Match `<ident>.<verb>(` — capture the verb. The leading identifier
|
|
203
|
+
// is usually `router` but not always (some codebases use `app.get`,
|
|
204
|
+
// `route.post`, etc.); accept any identifier the source uses.
|
|
205
|
+
const re = /\b\w+\.(get|post|put|patch|delete|all|head|options)\s*\(/g;
|
|
206
|
+
let m;
|
|
207
|
+
let ordinal = 0;
|
|
208
|
+
while ((m = re.exec(source)) !== null) {
|
|
209
|
+
const verb = m[1];
|
|
210
|
+
const argsOpenIdx = m.index + m[0].length - 1; // position of `(`
|
|
211
|
+
const argsCloseIdx = findMatchingParen(source, argsOpenIdx);
|
|
212
|
+
if (argsCloseIdx < 0)
|
|
213
|
+
continue;
|
|
214
|
+
const argsStr = source.slice(argsOpenIdx + 1, argsCloseIdx);
|
|
215
|
+
// Find the path string (first quoted argument).
|
|
216
|
+
const pathMatch = argsStr.match(/^\s*(['"`])([^'"`]+)\1/);
|
|
217
|
+
if (!pathMatch)
|
|
218
|
+
continue;
|
|
219
|
+
const routePath = pathMatch[2];
|
|
220
|
+
// Extract the handler arg — skip the path + any middleware args, take the LAST argument
|
|
221
|
+
// (the one whose body we want). Handlers can be:
|
|
222
|
+
// (a) inline arrow: `async (req, res) => { ... }` or `(req, res) => expr`
|
|
223
|
+
// (b) named: `someHandler` or `asyncHandler(myFn)`
|
|
224
|
+
// For our purpose, we want the BODY when (a), the NAME when (b).
|
|
225
|
+
// Walk the args from start, skipping until we find the last comma at depth 0.
|
|
226
|
+
let lastTopComma = -1;
|
|
227
|
+
let depth = 0;
|
|
228
|
+
let strChar = null;
|
|
229
|
+
for (let i = 0; i < argsStr.length; i++) {
|
|
230
|
+
const c = argsStr[i];
|
|
231
|
+
if (strChar) {
|
|
232
|
+
if (c === '\\') {
|
|
233
|
+
i++;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (c === strChar)
|
|
237
|
+
strChar = null;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (c === '"' || c === "'" || c === '`') {
|
|
241
|
+
strChar = c;
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (c === '(' || c === '[' || c === '{')
|
|
245
|
+
depth++;
|
|
246
|
+
else if (c === ')' || c === ']' || c === '}')
|
|
247
|
+
depth--;
|
|
248
|
+
else if (c === ',' && depth === 0)
|
|
249
|
+
lastTopComma = i;
|
|
250
|
+
}
|
|
251
|
+
if (lastTopComma < 0)
|
|
252
|
+
continue;
|
|
253
|
+
const handlerExpr = argsStr.slice(lastTopComma + 1).trim();
|
|
254
|
+
let body = '';
|
|
255
|
+
let isAsync = false;
|
|
256
|
+
// (a) Inline arrow.
|
|
257
|
+
const arrowMatch = handlerExpr.match(/^(async\s+)?\(([^)]*)\)\s*=>\s*\{/);
|
|
258
|
+
if (arrowMatch) {
|
|
259
|
+
isAsync = !!arrowMatch[1];
|
|
260
|
+
// Find the opening brace of the arrow body in the ORIGINAL source.
|
|
261
|
+
// The handlerExpr starts at `argsOpenIdx + 1 + lastTopComma + 1`,
|
|
262
|
+
// possibly with leading whitespace. Locate the first `{` after that.
|
|
263
|
+
const handlerStartInSource = argsOpenIdx + 1 + lastTopComma + 1;
|
|
264
|
+
const braceIdx = source.indexOf('{', handlerStartInSource);
|
|
265
|
+
if (braceIdx > 0 && braceIdx < argsCloseIdx) {
|
|
266
|
+
const closeIdx = findMatchingBrace(source, braceIdx);
|
|
267
|
+
if (closeIdx > 0)
|
|
268
|
+
body = source.slice(braceIdx + 1, closeIdx);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
// (b) Named handler — wrapped or bare. We can't see the body, but
|
|
273
|
+
// extractCandidateSteps wants something to walk. Synthesize a
|
|
274
|
+
// pseudo-body with a single call so it produces a `call` step.
|
|
275
|
+
// The microcall LLM gets the original source location anyway.
|
|
276
|
+
const wrapperMatch = handlerExpr.match(/^([a-zA-Z_$][\w$]*)\s*\(\s*([a-zA-Z_$][\w$]*)\s*\)/);
|
|
277
|
+
const handlerName = wrapperMatch?.[2] ?? handlerExpr.match(/^[a-zA-Z_$][\w$]*/)?.[0];
|
|
278
|
+
body = handlerName ? `${handlerName}(req, res);` : '';
|
|
279
|
+
// We don't know if the named function is async without more
|
|
280
|
+
// analysis; assume false — the microcall LLM will see the actual
|
|
281
|
+
// declaration when authoring the body.
|
|
282
|
+
}
|
|
283
|
+
// Compute source line range — start at the line of `router.<verb>(`,
|
|
284
|
+
// end at the line of the closing `)`.
|
|
285
|
+
const startOffset = m.index;
|
|
286
|
+
const endOffset = argsCloseIdx;
|
|
287
|
+
const startLine = source.slice(0, startOffset).split('\n').length;
|
|
288
|
+
const endLine = source.slice(0, endOffset + 1).split('\n').length;
|
|
289
|
+
const methodName = deriveMethodName(verb, routePath, handlerExpr, ordinal);
|
|
290
|
+
out.push({
|
|
291
|
+
methodName,
|
|
292
|
+
isAsync,
|
|
293
|
+
body,
|
|
294
|
+
sourceLineRange: [startLine, endLine],
|
|
295
|
+
httpVerb: verb,
|
|
296
|
+
routePath,
|
|
297
|
+
});
|
|
298
|
+
ordinal++;
|
|
299
|
+
}
|
|
300
|
+
deduplicateMethodNames(out);
|
|
301
|
+
return out;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Wrap a list of handlers in a synthetic class body. The output is
|
|
305
|
+
* suitable for `walkMethodBodies` / `extractCandidateSteps` to consume.
|
|
306
|
+
* Each handler becomes a `<methodName>(req, res) { <body> }` member.
|
|
307
|
+
*/
|
|
308
|
+
export function synthesizeControllerClass(controllerName, handlers) {
|
|
309
|
+
const lines = [];
|
|
310
|
+
lines.push(`class ${controllerName} {`);
|
|
311
|
+
for (const h of handlers) {
|
|
312
|
+
const asyncWord = h.isAsync ? 'async ' : '';
|
|
313
|
+
lines.push(` ${asyncWord}${h.methodName}(req, res) {`);
|
|
314
|
+
// Preserve body indentation reasonably; avoid empty lines breaking
|
|
315
|
+
// the regex-based walker.
|
|
316
|
+
const bodyLines = h.body.split('\n').map((l) => ' ' + l);
|
|
317
|
+
lines.push(...bodyLines);
|
|
318
|
+
lines.push(' }');
|
|
319
|
+
}
|
|
320
|
+
lines.push('}');
|
|
321
|
+
return lines.join('\n');
|
|
322
|
+
}
|
|
323
|
+
/** Derive a controller name from a route file's basename. */
|
|
324
|
+
export function deriveControllerName(filePath) {
|
|
325
|
+
const basename = filePath.split('/').pop() ?? filePath;
|
|
326
|
+
const pascal = fileBasenameToPascalCase(basename);
|
|
327
|
+
return /Controller$/.test(pascal) ? pascal : `${pascal}Controller`;
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=express-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express-routes.js","sourceRoot":"","sources":["../../../src/analyse-prepass/adapters/express-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `typescript-interfaces` adapter — entity-shape extraction from raw
|
|
3
|
+
* TypeScript class / interface / type declarations. Designed for
|
|
4
|
+
* adapter-free codebases (no decorators, no schema.prisma, no JPA
|
|
5
|
+
* annotations) where the only source signal is the declared types
|
|
6
|
+
* themselves.
|
|
7
|
+
*
|
|
8
|
+
* Phase C of the 2026-05-04-ANALYSE-VIA-FAITHFUL-SKELETON-AND-MICROCALLS
|
|
9
|
+
* plan. Closes the empirical gap surfaced when comparing the giant-call
|
|
10
|
+
* idle-meta output (20 LLM-fabricated models, faithfully translated
|
|
11
|
+
* from TS interfaces) vs the microcall idle-meta output (0 models,
|
|
12
|
+
* because no adapter detected entities).
|
|
13
|
+
*
|
|
14
|
+
* Design principle: faithful mirror of source, no fabrication. Promotes
|
|
15
|
+
* an interface/class to an entity ONLY when its shape suggests
|
|
16
|
+
* persistence. Non-entity types (DTOs, request/response shapes, internal
|
|
17
|
+
* computation aids) are recorded separately in `declaredTypes` but NOT
|
|
18
|
+
* promoted to `facts.entities`. The future `types:` schema slot is
|
|
19
|
+
* deferred to TODO #49.
|
|
20
|
+
*
|
|
21
|
+
* Heuristics (configurable):
|
|
22
|
+
* - liberal (default): has an `id` field of any type → entity
|
|
23
|
+
* - conservative: has `id` AND at least one of {createdAt, updatedAt, _id} → entity
|
|
24
|
+
*
|
|
25
|
+
* Relationships are inferred by cross-referencing field types:
|
|
26
|
+
* - `field: T[]` where T is a detected entity → hasMany
|
|
27
|
+
* - `field: T` where T is a detected entity → belongsTo (or hasOne)
|
|
28
|
+
* - bidirectional pairs: hasMany + belongsTo when both sides exist
|
|
29
|
+
*
|
|
30
|
+
* Lifecycles are NOT inferred here — that requires method-body analysis
|
|
31
|
+
* (the existing method-body-walker already covers that path via the
|
|
32
|
+
* lifecycleField hint, separate from this walker).
|
|
33
|
+
*/
|
|
34
|
+
import type { StructuralPrepass } from '../interface.js';
|
|
35
|
+
export interface TypeScriptInterfaceField {
|
|
36
|
+
name: string;
|
|
37
|
+
declaredType: string;
|
|
38
|
+
isOptional: boolean;
|
|
39
|
+
isArray: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface TypeScriptDeclaredType {
|
|
42
|
+
name: string;
|
|
43
|
+
filePath: string;
|
|
44
|
+
startLine: number;
|
|
45
|
+
endLine: number;
|
|
46
|
+
/** class | interface | type-alias */
|
|
47
|
+
kind: 'class' | 'interface' | 'type';
|
|
48
|
+
fields: TypeScriptInterfaceField[];
|
|
49
|
+
/** Classified shape: persistent entity vs DTO vs utility. */
|
|
50
|
+
shape: 'entity' | 'dto-shape' | 'utility' | 'unknown';
|
|
51
|
+
}
|
|
52
|
+
export interface TypeScriptInterfaceFacts {
|
|
53
|
+
/** Types that look like persistent entities (per the heuristic). */
|
|
54
|
+
entities: TypeScriptDeclaredType[];
|
|
55
|
+
/** Inferred relationships between entities via field cross-reference. */
|
|
56
|
+
relationships: Array<{
|
|
57
|
+
from: string;
|
|
58
|
+
to: string;
|
|
59
|
+
type: 'hasMany' | 'hasOne' | 'belongsTo';
|
|
60
|
+
fieldName: string;
|
|
61
|
+
}>;
|
|
62
|
+
/** Inferred lifecycles from literal-union type aliases (engines 6.27.6+).
|
|
63
|
+
* Symmetry with the typescript-decorators adapter, which derives
|
|
64
|
+
* lifecycles from `@Column({ enum: ... })` shapes. Adapter-free
|
|
65
|
+
* codebases declare states as `type Status = "a" | "b" | "c"` and
|
|
66
|
+
* reference them in entity fields; we surface those as state machines.
|
|
67
|
+
* Transitions intentionally empty here — recovering transitions
|
|
68
|
+
* needs method-body analysis (see method-body-walker for the
|
|
69
|
+
* `this.<field> = <enumMember>` path). */
|
|
70
|
+
lifecycles: Array<{
|
|
71
|
+
model: string;
|
|
72
|
+
field: string;
|
|
73
|
+
states: string[];
|
|
74
|
+
transitions: Array<{
|
|
75
|
+
action: string;
|
|
76
|
+
from: string[];
|
|
77
|
+
to: string;
|
|
78
|
+
}>;
|
|
79
|
+
}>;
|
|
80
|
+
/** Non-entity declared types — DTOs, request/response shapes, etc.
|
|
81
|
+
* Captured for future use (TODO #49 — `types:` schema slot) but NOT
|
|
82
|
+
* promoted to facts.entities. */
|
|
83
|
+
declaredTypes: TypeScriptDeclaredType[];
|
|
84
|
+
}
|
|
85
|
+
export interface TypeScriptInterfaceOptions {
|
|
86
|
+
/** Default 'liberal'. Liberal: has `id` field. Conservative: has `id`
|
|
87
|
+
* AND timestamp field (createdAt | updatedAt | _id). */
|
|
88
|
+
entityShapeHeuristic?: 'liberal' | 'conservative';
|
|
89
|
+
}
|
|
90
|
+
export declare function extractTypeScriptInterfaces(prepass: StructuralPrepass, options?: TypeScriptInterfaceOptions): Promise<TypeScriptInterfaceFacts>;
|
|
91
|
+
//# sourceMappingURL=typescript-interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-interfaces.d.ts","sourceRoot":"","sources":["../../../src/analyse-prepass/adapters/typescript-interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IACrC,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,6DAA6D;IAC7D,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,wBAAwB;IACvC,oEAAoE;IACpE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,yEAAyE;IACzE,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH;;;;;;;+CAO2C;IAC3C,UAAU,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACpE,CAAC,CAAC;IACH;;sCAEkC;IAClC,aAAa,EAAE,sBAAsB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC;6DACyD;IACzD,oBAAoB,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC;CACnD;AAID,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,wBAAwB,CAAC,CAwGnC"}
|