kirograph 0.12.2 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -2
- package/dist/architecture/layers/index.js +9 -1
- package/dist/architecture/layers/index.js.map +2 -2
- package/dist/architecture/layers/ocaml.js +105 -0
- package/dist/architecture/layers/ocaml.js.map +7 -0
- package/dist/architecture/layers/scala.js +120 -0
- package/dist/architecture/layers/scala.js.map +7 -0
- package/dist/architecture/layers/solidity.js +105 -0
- package/dist/architecture/layers/solidity.js.map +7 -0
- package/dist/architecture/layers/vue.js +111 -0
- package/dist/architecture/layers/vue.js.map +7 -0
- package/dist/architecture/manifest/elm.js +91 -0
- package/dist/architecture/manifest/elm.js.map +7 -0
- package/dist/architecture/manifest/index.js +13 -2
- package/dist/architecture/manifest/index.js.map +2 -2
- package/dist/architecture/manifest/ocaml.js +166 -0
- package/dist/architecture/manifest/ocaml.js.map +7 -0
- package/dist/architecture/manifest/scala.js +117 -0
- package/dist/architecture/manifest/scala.js.map +7 -0
- package/dist/bin/installer/hooks.js +21 -1
- package/dist/bin/installer/hooks.js.map +2 -2
- package/dist/bin/kirograph.js +1 -1
- package/dist/extraction/extractor.js +65 -2
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/extraction/grammars.js +22 -0
- package/dist/extraction/grammars.js.map +2 -2
- package/dist/extraction/languages.js +39 -1
- package/dist/extraction/languages.js.map +2 -2
- package/dist/extraction/wasm/tree-sitter-hcl.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-scss.wasm +0 -0
- package/dist/frameworks/amplify.js +175 -0
- package/dist/frameworks/amplify.js.map +7 -0
- package/dist/frameworks/angular.js +132 -0
- package/dist/frameworks/angular.js.map +7 -0
- package/dist/frameworks/ansible.js +151 -0
- package/dist/frameworks/ansible.js.map +7 -0
- package/dist/frameworks/cloudformation.js +148 -0
- package/dist/frameworks/cloudformation.js.map +7 -0
- package/dist/frameworks/docker.js +149 -0
- package/dist/frameworks/docker.js.map +7 -0
- package/dist/frameworks/iac.js +401 -0
- package/dist/frameworks/iac.js.map +7 -0
- package/dist/frameworks/index.js +81 -3
- package/dist/frameworks/index.js.map +3 -3
- package/dist/frameworks/kubernetes.js +176 -0
- package/dist/frameworks/kubernetes.js.map +7 -0
- package/dist/frameworks/pulumi.js +93 -0
- package/dist/frameworks/pulumi.js.map +7 -0
- package/dist/frameworks/scala.js +124 -0
- package/dist/frameworks/scala.js.map +7 -0
- package/dist/frameworks/solidity.js +93 -0
- package/dist/frameworks/solidity.js.map +7 -0
- package/dist/frameworks/terraform.js +278 -0
- package/dist/frameworks/terraform.js.map +7 -0
- package/dist/frameworks/vue.js +163 -0
- package/dist/frameworks/vue.js.map +7 -0
- package/dist/graph/queries.js +1 -1
- package/dist/graph/queries.js.map +1 -1
- package/dist/types.js.map +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var iac_exports = {};
|
|
20
|
+
__export(iac_exports, {
|
|
21
|
+
cdkResolver: () => cdkResolver,
|
|
22
|
+
samResolver: () => samResolver,
|
|
23
|
+
serverlessResolver: () => serverlessResolver,
|
|
24
|
+
sstResolver: () => sstResolver
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(iac_exports);
|
|
27
|
+
const sstResolver = {
|
|
28
|
+
name: "sst",
|
|
29
|
+
detect(context) {
|
|
30
|
+
if (context.fileExists("sst.config.ts") || context.fileExists("sst.config.js")) return true;
|
|
31
|
+
const pkg = context.readFile("package.json");
|
|
32
|
+
if (pkg) {
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(pkg);
|
|
35
|
+
const deps = { ...parsed.dependencies, ...parsed.devDependencies };
|
|
36
|
+
if ("sst" in deps) return true;
|
|
37
|
+
} catch {
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
},
|
|
42
|
+
resolve(ref, context) {
|
|
43
|
+
if (ref.referenceName.includes(".") && !ref.referenceName.startsWith(".")) {
|
|
44
|
+
const id = resolveHandlerString(ref.referenceName, context);
|
|
45
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: "framework" };
|
|
46
|
+
}
|
|
47
|
+
if (/^[A-Z][a-zA-Z]+$/.test(ref.referenceName)) {
|
|
48
|
+
const id = resolveConstruct(ref.referenceName, ["stacks", "infra", "src", "lib"], context);
|
|
49
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.75, resolvedBy: "framework" };
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
},
|
|
53
|
+
extractNodes(filePath, content) {
|
|
54
|
+
const nodes = [];
|
|
55
|
+
const now = Date.now();
|
|
56
|
+
const routePattern = /\.route\s*\(\s*["'](\w+)\s+([^"']+)["']/g;
|
|
57
|
+
let match;
|
|
58
|
+
while ((match = routePattern.exec(content)) !== null) {
|
|
59
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
60
|
+
const method = match[1].toUpperCase();
|
|
61
|
+
const routePath = match[2];
|
|
62
|
+
const name = `${method} ${routePath}`;
|
|
63
|
+
nodes.push({
|
|
64
|
+
id: `route:${filePath}:${method}:${routePath}:${line}`,
|
|
65
|
+
kind: "route",
|
|
66
|
+
name,
|
|
67
|
+
qualifiedName: `${filePath}::${name}`,
|
|
68
|
+
filePath,
|
|
69
|
+
startLine: line,
|
|
70
|
+
endLine: line,
|
|
71
|
+
startColumn: 0,
|
|
72
|
+
endColumn: match[0].length,
|
|
73
|
+
language: "typescript",
|
|
74
|
+
updatedAt: now
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const routeObjPattern = /["'](GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|ANY)\s+([^"']+)["']\s*:/g;
|
|
78
|
+
while ((match = routeObjPattern.exec(content)) !== null) {
|
|
79
|
+
if (!content.includes("sst") && !content.includes("Api") && !content.includes("Function")) continue;
|
|
80
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
81
|
+
const method = match[1];
|
|
82
|
+
const routePath = match[2];
|
|
83
|
+
const name = `${method} ${routePath}`;
|
|
84
|
+
const id = `route:${filePath}:${method}:${routePath}:${line}`;
|
|
85
|
+
if (!nodes.some((n) => n.id === id)) {
|
|
86
|
+
nodes.push({
|
|
87
|
+
id,
|
|
88
|
+
kind: "route",
|
|
89
|
+
name,
|
|
90
|
+
qualifiedName: `${filePath}::${name}`,
|
|
91
|
+
filePath,
|
|
92
|
+
startLine: line,
|
|
93
|
+
endLine: line,
|
|
94
|
+
startColumn: 0,
|
|
95
|
+
endColumn: match[0].length,
|
|
96
|
+
language: "typescript",
|
|
97
|
+
updatedAt: now
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return nodes;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const cdkResolver = {
|
|
105
|
+
name: "cdk",
|
|
106
|
+
detect(context) {
|
|
107
|
+
if (context.fileExists("cdk.json")) return true;
|
|
108
|
+
const pkg = context.readFile("package.json");
|
|
109
|
+
if (pkg) {
|
|
110
|
+
try {
|
|
111
|
+
const parsed = JSON.parse(pkg);
|
|
112
|
+
const deps = { ...parsed.dependencies, ...parsed.devDependencies };
|
|
113
|
+
if ("aws-cdk-lib" in deps || "aws-cdk" in deps || "@aws-cdk/core" in deps) return true;
|
|
114
|
+
} catch {
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const requirements = context.readFile("requirements.txt");
|
|
118
|
+
if (requirements && requirements.includes("aws-cdk")) return true;
|
|
119
|
+
return false;
|
|
120
|
+
},
|
|
121
|
+
resolve(ref, context) {
|
|
122
|
+
if (ref.referenceName.includes(".") && !ref.referenceName.startsWith(".")) {
|
|
123
|
+
const id = resolveHandlerString(ref.referenceName, context);
|
|
124
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: "framework" };
|
|
125
|
+
}
|
|
126
|
+
if (/^[A-Z][a-zA-Z]+Stack$/.test(ref.referenceName)) {
|
|
127
|
+
const id = resolveConstruct(ref.referenceName, ["lib", "stacks", "infra", "src"], context);
|
|
128
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.85, resolvedBy: "framework" };
|
|
129
|
+
}
|
|
130
|
+
if (/^[A-Z][a-zA-Z]+Construct$/.test(ref.referenceName) || /^[A-Z][a-zA-Z]+$/.test(ref.referenceName)) {
|
|
131
|
+
const id = resolveConstruct(ref.referenceName, ["lib", "constructs", "src", "infra"], context);
|
|
132
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.7, resolvedBy: "framework" };
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
},
|
|
136
|
+
extractNodes(filePath, content) {
|
|
137
|
+
const nodes = [];
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
const addMethodPattern = /\.addMethod\s*\(\s*['"](\w+)['"]/g;
|
|
140
|
+
const addResourcePattern = /\.addResource\s*\(\s*['"]([^'"]+)['"]/g;
|
|
141
|
+
let match;
|
|
142
|
+
const resources = [];
|
|
143
|
+
while ((match = addResourcePattern.exec(content)) !== null) {
|
|
144
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
145
|
+
resources.push({ path: match[1], line });
|
|
146
|
+
}
|
|
147
|
+
while ((match = addMethodPattern.exec(content)) !== null) {
|
|
148
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
149
|
+
const method = match[1].toUpperCase();
|
|
150
|
+
const nearestResource = resources.filter((r) => r.line <= line).pop();
|
|
151
|
+
const routePath = nearestResource ? `/${nearestResource.path}` : "/";
|
|
152
|
+
const name = `${method} ${routePath}`;
|
|
153
|
+
nodes.push({
|
|
154
|
+
id: `route:${filePath}:${method}:${routePath}:${line}`,
|
|
155
|
+
kind: "route",
|
|
156
|
+
name,
|
|
157
|
+
qualifiedName: `${filePath}::${name}`,
|
|
158
|
+
filePath,
|
|
159
|
+
startLine: line,
|
|
160
|
+
endLine: line,
|
|
161
|
+
startColumn: 0,
|
|
162
|
+
endColumn: match[0].length,
|
|
163
|
+
language: filePath.endsWith(".py") ? "python" : "typescript",
|
|
164
|
+
updatedAt: now
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
const httpApiPattern = /addRoutes\s*\(\s*\{[^}]*path\s*:\s*['"]([^'"]+)['"][^}]*methods\s*:\s*\[([^\]]+)\]/gs;
|
|
168
|
+
while ((match = httpApiPattern.exec(content)) !== null) {
|
|
169
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
170
|
+
const routePath = match[1];
|
|
171
|
+
const methods = match[2].match(/HttpMethod\.(\w+)/g) ?? [];
|
|
172
|
+
for (const m of methods) {
|
|
173
|
+
const method = m.replace("HttpMethod.", "");
|
|
174
|
+
const name = `${method} ${routePath}`;
|
|
175
|
+
nodes.push({
|
|
176
|
+
id: `route:${filePath}:${method}:${routePath}:${line}`,
|
|
177
|
+
kind: "route",
|
|
178
|
+
name,
|
|
179
|
+
qualifiedName: `${filePath}::${name}`,
|
|
180
|
+
filePath,
|
|
181
|
+
startLine: line,
|
|
182
|
+
endLine: line,
|
|
183
|
+
startColumn: 0,
|
|
184
|
+
endColumn: match[0].length,
|
|
185
|
+
language: filePath.endsWith(".py") ? "python" : "typescript",
|
|
186
|
+
updatedAt: now
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return nodes;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const serverlessResolver = {
|
|
194
|
+
name: "serverless",
|
|
195
|
+
detect(context) {
|
|
196
|
+
return context.fileExists("serverless.yml") || context.fileExists("serverless.yaml") || context.fileExists("serverless.ts") || context.fileExists("serverless.js");
|
|
197
|
+
},
|
|
198
|
+
resolve(ref, context) {
|
|
199
|
+
if (ref.referenceName.includes(".") && !ref.referenceName.startsWith(".")) {
|
|
200
|
+
const id = resolveHandlerString(ref.referenceName, context);
|
|
201
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: "framework" };
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
},
|
|
205
|
+
extractNodes(filePath, content) {
|
|
206
|
+
const nodes = [];
|
|
207
|
+
const now = Date.now();
|
|
208
|
+
const basename = filePath.split("/").pop() ?? "";
|
|
209
|
+
if (!basename.startsWith("serverless.")) return nodes;
|
|
210
|
+
if (filePath.endsWith(".yml") || filePath.endsWith(".yaml")) {
|
|
211
|
+
const functionBlocks = content.split(/^\s{2}\w+:/gm);
|
|
212
|
+
const httpPattern = /- http(?:Api)?:\s*\n\s+(?:method:\s*(\w+)\s*\n\s+path:\s*(\S+)|path:\s*(\S+)\s*\n\s+method:\s*(\w+))/g;
|
|
213
|
+
const simpleHttpPattern = /- http(?:Api)?:\s*(\w+)\s+(\S+)/g;
|
|
214
|
+
let match;
|
|
215
|
+
while ((match = httpPattern.exec(content)) !== null) {
|
|
216
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
217
|
+
const method = (match[1] || match[4]).toUpperCase();
|
|
218
|
+
const routePath = match[2] || match[3];
|
|
219
|
+
const name = `${method} ${routePath}`;
|
|
220
|
+
nodes.push({
|
|
221
|
+
id: `route:${filePath}:${method}:${routePath}:${line}`,
|
|
222
|
+
kind: "route",
|
|
223
|
+
name,
|
|
224
|
+
qualifiedName: `${filePath}::${name}`,
|
|
225
|
+
filePath,
|
|
226
|
+
startLine: line,
|
|
227
|
+
endLine: line,
|
|
228
|
+
startColumn: 0,
|
|
229
|
+
endColumn: match[0].length,
|
|
230
|
+
language: "yaml",
|
|
231
|
+
updatedAt: now
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
while ((match = simpleHttpPattern.exec(content)) !== null) {
|
|
235
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
236
|
+
const method = match[1].toUpperCase();
|
|
237
|
+
const routePath = match[2];
|
|
238
|
+
const name = `${method} ${routePath}`;
|
|
239
|
+
const id = `route:${filePath}:${method}:${routePath}:${line}`;
|
|
240
|
+
if (!nodes.some((n) => n.id === id)) {
|
|
241
|
+
nodes.push({
|
|
242
|
+
id,
|
|
243
|
+
kind: "route",
|
|
244
|
+
name,
|
|
245
|
+
qualifiedName: `${filePath}::${name}`,
|
|
246
|
+
filePath,
|
|
247
|
+
startLine: line,
|
|
248
|
+
endLine: line,
|
|
249
|
+
startColumn: 0,
|
|
250
|
+
endColumn: match[0].length,
|
|
251
|
+
language: "yaml",
|
|
252
|
+
updatedAt: now
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
} else {
|
|
257
|
+
const routePattern = /["'](GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|ANY)\s+([^"']+)["']/g;
|
|
258
|
+
let match;
|
|
259
|
+
while ((match = routePattern.exec(content)) !== null) {
|
|
260
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
261
|
+
const method = match[1];
|
|
262
|
+
const routePath = match[2];
|
|
263
|
+
const name = `${method} ${routePath}`;
|
|
264
|
+
nodes.push({
|
|
265
|
+
id: `route:${filePath}:${method}:${routePath}:${line}`,
|
|
266
|
+
kind: "route",
|
|
267
|
+
name,
|
|
268
|
+
qualifiedName: `${filePath}::${name}`,
|
|
269
|
+
filePath,
|
|
270
|
+
startLine: line,
|
|
271
|
+
endLine: line,
|
|
272
|
+
startColumn: 0,
|
|
273
|
+
endColumn: match[0].length,
|
|
274
|
+
language: "typescript",
|
|
275
|
+
updatedAt: now
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return nodes;
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const samResolver = {
|
|
283
|
+
name: "sam",
|
|
284
|
+
detect(context) {
|
|
285
|
+
for (const name of ["template.yaml", "template.yml", "sam.yaml", "sam.yml"]) {
|
|
286
|
+
const content = context.readFile(name);
|
|
287
|
+
if (content && content.includes("AWS::Serverless")) return true;
|
|
288
|
+
}
|
|
289
|
+
if (context.fileExists("samconfig.toml") || context.fileExists("samconfig.yaml")) return true;
|
|
290
|
+
return false;
|
|
291
|
+
},
|
|
292
|
+
resolve(ref, context) {
|
|
293
|
+
if (ref.referenceName.includes(".") && !ref.referenceName.startsWith(".")) {
|
|
294
|
+
const id = resolveHandlerString(ref.referenceName, context);
|
|
295
|
+
if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: "framework" };
|
|
296
|
+
}
|
|
297
|
+
return null;
|
|
298
|
+
},
|
|
299
|
+
extractNodes(filePath, content) {
|
|
300
|
+
const nodes = [];
|
|
301
|
+
const now = Date.now();
|
|
302
|
+
const basename = filePath.split("/").pop() ?? "";
|
|
303
|
+
if (!basename.match(/^(template|sam)\.(ya?ml)$/)) return nodes;
|
|
304
|
+
if (!content.includes("AWS::Serverless")) return nodes;
|
|
305
|
+
const apiEventPattern = /Type:\s*(?:Api|HttpApi)\s*\n\s+Properties:\s*\n(?:\s+.*\n)*?\s+Path:\s*(\S+)\s*\n(?:\s+.*\n)*?\s+Method:\s*(\w+)/g;
|
|
306
|
+
let match;
|
|
307
|
+
while ((match = apiEventPattern.exec(content)) !== null) {
|
|
308
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
309
|
+
const routePath = match[1];
|
|
310
|
+
const method = match[2].toUpperCase();
|
|
311
|
+
const name = `${method} ${routePath}`;
|
|
312
|
+
nodes.push({
|
|
313
|
+
id: `route:${filePath}:${method}:${routePath}:${line}`,
|
|
314
|
+
kind: "route",
|
|
315
|
+
name,
|
|
316
|
+
qualifiedName: `${filePath}::${name}`,
|
|
317
|
+
filePath,
|
|
318
|
+
startLine: line,
|
|
319
|
+
endLine: line,
|
|
320
|
+
startColumn: 0,
|
|
321
|
+
endColumn: match[0].length,
|
|
322
|
+
language: "yaml",
|
|
323
|
+
updatedAt: now
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
const simplePattern = /Method:\s*(\w+)\s*\n\s+Path:\s*(\S+)|Path:\s*(\S+)\s*\n\s+Method:\s*(\w+)/g;
|
|
327
|
+
while ((match = simplePattern.exec(content)) !== null) {
|
|
328
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
329
|
+
const method = (match[1] || match[4]).toUpperCase();
|
|
330
|
+
const routePath = match[2] || match[3];
|
|
331
|
+
const name = `${method} ${routePath}`;
|
|
332
|
+
const id = `route:${filePath}:${method}:${routePath}:${line}`;
|
|
333
|
+
if (!nodes.some((n) => n.id === id)) {
|
|
334
|
+
nodes.push({
|
|
335
|
+
id,
|
|
336
|
+
kind: "route",
|
|
337
|
+
name,
|
|
338
|
+
qualifiedName: `${filePath}::${name}`,
|
|
339
|
+
filePath,
|
|
340
|
+
startLine: line,
|
|
341
|
+
endLine: line,
|
|
342
|
+
startColumn: 0,
|
|
343
|
+
endColumn: match[0].length,
|
|
344
|
+
language: "yaml",
|
|
345
|
+
updatedAt: now
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return nodes;
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
function resolveHandlerString(handlerStr, context) {
|
|
353
|
+
const lastDot = handlerStr.lastIndexOf(".");
|
|
354
|
+
if (lastDot <= 0) return null;
|
|
355
|
+
const filePart = handlerStr.slice(0, lastDot);
|
|
356
|
+
const funcName = handlerStr.slice(lastDot + 1);
|
|
357
|
+
const extensions = [".ts", ".js", ".mjs", ".py", ".go"];
|
|
358
|
+
for (const ext of extensions) {
|
|
359
|
+
const candidates = [
|
|
360
|
+
`${filePart}${ext}`,
|
|
361
|
+
`${filePart}/index${ext}`
|
|
362
|
+
];
|
|
363
|
+
for (const candidate of candidates) {
|
|
364
|
+
if (context.fileExists(candidate)) {
|
|
365
|
+
const node = context.getNodesInFile(candidate).find(
|
|
366
|
+
(n) => n.name === funcName && (n.kind === "function" || n.kind === "method" || n.kind === "variable")
|
|
367
|
+
);
|
|
368
|
+
if (node) return node.id;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
const dirs = ["src", "lib", "handlers", "functions", "lambdas", "api"];
|
|
373
|
+
for (const file of context.getAllFiles()) {
|
|
374
|
+
if (!dirs.some((d) => file.includes(`/${d}/`) || file.startsWith(`${d}/`))) continue;
|
|
375
|
+
if (!file.includes(filePart.split("/").pop())) continue;
|
|
376
|
+
const node = context.getNodesInFile(file).find(
|
|
377
|
+
(n) => n.name === funcName && (n.kind === "function" || n.kind === "method" || n.kind === "variable")
|
|
378
|
+
);
|
|
379
|
+
if (node) return node.id;
|
|
380
|
+
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
function resolveConstruct(name, dirs, context) {
|
|
384
|
+
for (const file of context.getAllFiles()) {
|
|
385
|
+
if (!(file.endsWith(".ts") || file.endsWith(".js") || file.endsWith(".py"))) continue;
|
|
386
|
+
if (!dirs.some((d) => file.includes(`/${d}/`) || file.startsWith(`${d}/`))) continue;
|
|
387
|
+
const node = context.getNodesInFile(file).find(
|
|
388
|
+
(n) => n.name === name && (n.kind === "class" || n.kind === "function" || n.kind === "variable")
|
|
389
|
+
);
|
|
390
|
+
if (node) return node.id;
|
|
391
|
+
}
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
395
|
+
0 && (module.exports = {
|
|
396
|
+
cdkResolver,
|
|
397
|
+
samResolver,
|
|
398
|
+
serverlessResolver,
|
|
399
|
+
sstResolver
|
|
400
|
+
});
|
|
401
|
+
//# sourceMappingURL=iac.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/frameworks/iac.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Infrastructure-as-Code Framework Resolvers\n * Supports: AWS CDK, SST, Serverless Framework, AWS SAM\n */\n\nimport type { Node } from '../types';\nimport type { FrameworkResolver, UnresolvedRef, ResolvedRef, ResolutionContext } from './types';\n\n// \u2500\u2500 SST \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const sstResolver: FrameworkResolver = {\n name: 'sst',\n detect(context: ResolutionContext): boolean {\n if (context.fileExists('sst.config.ts') || context.fileExists('sst.config.js')) return true;\n const pkg = context.readFile('package.json');\n if (pkg) {\n try {\n const parsed = JSON.parse(pkg);\n const deps = { ...parsed.dependencies, ...parsed.devDependencies };\n if ('sst' in deps) return true;\n } catch { /* ignore */ }\n }\n return false;\n },\n resolve(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null {\n // Resolve handler string references (e.g., \"src/auth.handler\" \u2192 handler function in src/auth.ts)\n if (ref.referenceName.includes('.') && !ref.referenceName.startsWith('.')) {\n const id = resolveHandlerString(ref.referenceName, context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: 'framework' };\n }\n // Resolve construct references\n if (/^[A-Z][a-zA-Z]+$/.test(ref.referenceName)) {\n const id = resolveConstruct(ref.referenceName, ['stacks', 'infra', 'src', 'lib'], context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.75, resolvedBy: 'framework' };\n }\n return null;\n },\n extractNodes(filePath: string, content: string): Node[] {\n const nodes: Node[] = [];\n const now = Date.now();\n\n // SST v3 Api routes: api.route(\"GET /users\", \"src/users.list\")\n const routePattern = /\\.route\\s*\\(\\s*[\"'](\\w+)\\s+([^\"']+)[\"']/g;\n let match: RegExpExecArray | null;\n while ((match = routePattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const method = match[1]!.toUpperCase();\n const routePath = match[2]!;\n const name = `${method} ${routePath}`;\n nodes.push({\n id: `route:${filePath}:${method}:${routePath}:${line}`,\n kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'typescript', updatedAt: now,\n });\n }\n\n // SST v2 Api routes: routes: { \"GET /users\": \"src/users.list\" }\n const routeObjPattern = /[\"'](GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|ANY)\\s+([^\"']+)[\"']\\s*:/g;\n while ((match = routeObjPattern.exec(content)) !== null) {\n // Only match if this looks like an SST/CDK file\n if (!content.includes('sst') && !content.includes('Api') && !content.includes('Function')) continue;\n const line = content.slice(0, match.index).split('\\n').length;\n const method = match[1]!;\n const routePath = match[2]!;\n const name = `${method} ${routePath}`;\n const id = `route:${filePath}:${method}:${routePath}:${line}`;\n if (!nodes.some(n => n.id === id)) {\n nodes.push({\n id, kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'typescript', updatedAt: now,\n });\n }\n }\n\n return nodes;\n },\n};\n\n// \u2500\u2500 AWS CDK \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cdkResolver: FrameworkResolver = {\n name: 'cdk',\n detect(context: ResolutionContext): boolean {\n if (context.fileExists('cdk.json')) return true;\n const pkg = context.readFile('package.json');\n if (pkg) {\n try {\n const parsed = JSON.parse(pkg);\n const deps = { ...parsed.dependencies, ...parsed.devDependencies };\n if ('aws-cdk-lib' in deps || 'aws-cdk' in deps || '@aws-cdk/core' in deps) return true;\n } catch { /* ignore */ }\n }\n // Python CDK\n const requirements = context.readFile('requirements.txt');\n if (requirements && requirements.includes('aws-cdk')) return true;\n return false;\n },\n resolve(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null {\n // Resolve Lambda handler strings\n if (ref.referenceName.includes('.') && !ref.referenceName.startsWith('.')) {\n const id = resolveHandlerString(ref.referenceName, context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: 'framework' };\n }\n // Resolve Stack/Construct references\n if (/^[A-Z][a-zA-Z]+Stack$/.test(ref.referenceName)) {\n const id = resolveConstruct(ref.referenceName, ['lib', 'stacks', 'infra', 'src'], context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.85, resolvedBy: 'framework' };\n }\n if (/^[A-Z][a-zA-Z]+Construct$/.test(ref.referenceName) || /^[A-Z][a-zA-Z]+$/.test(ref.referenceName)) {\n const id = resolveConstruct(ref.referenceName, ['lib', 'constructs', 'src', 'infra'], context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.7, resolvedBy: 'framework' };\n }\n return null;\n },\n extractNodes(filePath: string, content: string): Node[] {\n const nodes: Node[] = [];\n const now = Date.now();\n\n // CDK API Gateway: addMethod('GET', ...) or addResource('/users')\n const addMethodPattern = /\\.addMethod\\s*\\(\\s*['\"](\\w+)['\"]/g;\n const addResourcePattern = /\\.addResource\\s*\\(\\s*['\"]([^'\"]+)['\"]/g;\n let match: RegExpExecArray | null;\n\n // Track resources for building full paths\n const resources: Array<{ path: string; line: number }> = [];\n while ((match = addResourcePattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n resources.push({ path: match[1]!, line });\n }\n\n while ((match = addMethodPattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const method = match[1]!.toUpperCase();\n // Try to find the nearest resource path above this line\n const nearestResource = resources.filter(r => r.line <= line).pop();\n const routePath = nearestResource ? `/${nearestResource.path}` : '/';\n const name = `${method} ${routePath}`;\n nodes.push({\n id: `route:${filePath}:${method}:${routePath}:${line}`,\n kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: filePath.endsWith('.py') ? 'python' : 'typescript', updatedAt: now,\n });\n }\n\n // CDK HttpApi / RestApi route patterns\n const httpApiPattern = /addRoutes\\s*\\(\\s*\\{[^}]*path\\s*:\\s*['\"]([^'\"]+)['\"][^}]*methods\\s*:\\s*\\[([^\\]]+)\\]/gs;\n while ((match = httpApiPattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const routePath = match[1]!;\n const methods = match[2]!.match(/HttpMethod\\.(\\w+)/g) ?? [];\n for (const m of methods) {\n const method = m.replace('HttpMethod.', '');\n const name = `${method} ${routePath}`;\n nodes.push({\n id: `route:${filePath}:${method}:${routePath}:${line}`,\n kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: filePath.endsWith('.py') ? 'python' : 'typescript', updatedAt: now,\n });\n }\n }\n\n return nodes;\n },\n};\n\n// \u2500\u2500 Serverless Framework \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const serverlessResolver: FrameworkResolver = {\n name: 'serverless',\n detect(context: ResolutionContext): boolean {\n return (\n context.fileExists('serverless.yml') ||\n context.fileExists('serverless.yaml') ||\n context.fileExists('serverless.ts') ||\n context.fileExists('serverless.js')\n );\n },\n resolve(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null {\n // Resolve handler references (e.g., \"src/handlers/auth.login\")\n if (ref.referenceName.includes('.') && !ref.referenceName.startsWith('.')) {\n const id = resolveHandlerString(ref.referenceName, context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: 'framework' };\n }\n return null;\n },\n extractNodes(filePath: string, content: string): Node[] {\n const nodes: Node[] = [];\n const now = Date.now();\n\n // Only process serverless config files\n const basename = filePath.split('/').pop() ?? '';\n if (!basename.startsWith('serverless.')) return nodes;\n\n if (filePath.endsWith('.yml') || filePath.endsWith('.yaml')) {\n // YAML: extract HTTP events\n // Pattern: path: /users\\n ... method: get\n const functionBlocks = content.split(/^\\s{2}\\w+:/gm);\n const httpPattern = /- http(?:Api)?:\\s*\\n\\s+(?:method:\\s*(\\w+)\\s*\\n\\s+path:\\s*(\\S+)|path:\\s*(\\S+)\\s*\\n\\s+method:\\s*(\\w+))/g;\n const simpleHttpPattern = /- http(?:Api)?:\\s*(\\w+)\\s+(\\S+)/g;\n\n let match: RegExpExecArray | null;\n while ((match = httpPattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const method = (match[1] || match[4])!.toUpperCase();\n const routePath = (match[2] || match[3])!;\n const name = `${method} ${routePath}`;\n nodes.push({\n id: `route:${filePath}:${method}:${routePath}:${line}`,\n kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'yaml', updatedAt: now,\n });\n }\n\n while ((match = simpleHttpPattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const method = match[1]!.toUpperCase();\n const routePath = match[2]!;\n const name = `${method} ${routePath}`;\n const id = `route:${filePath}:${method}:${routePath}:${line}`;\n if (!nodes.some(n => n.id === id)) {\n nodes.push({\n id, kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'yaml', updatedAt: now,\n });\n }\n }\n } else {\n // TypeScript/JavaScript serverless config: extract from object literals\n const routePattern = /[\"'](GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|ANY)\\s+([^\"']+)[\"']/g;\n let match: RegExpExecArray | null;\n while ((match = routePattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const method = match[1]!;\n const routePath = match[2]!;\n const name = `${method} ${routePath}`;\n nodes.push({\n id: `route:${filePath}:${method}:${routePath}:${line}`,\n kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'typescript', updatedAt: now,\n });\n }\n }\n\n return nodes;\n },\n};\n\n// \u2500\u2500 AWS SAM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const samResolver: FrameworkResolver = {\n name: 'sam',\n detect(context: ResolutionContext): boolean {\n for (const name of ['template.yaml', 'template.yml', 'sam.yaml', 'sam.yml']) {\n const content = context.readFile(name);\n if (content && content.includes('AWS::Serverless')) return true;\n }\n if (context.fileExists('samconfig.toml') || context.fileExists('samconfig.yaml')) return true;\n return false;\n },\n resolve(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null {\n // Resolve handler references\n if (ref.referenceName.includes('.') && !ref.referenceName.startsWith('.')) {\n const id = resolveHandlerString(ref.referenceName, context);\n if (id) return { original: ref, targetNodeId: id, confidence: 0.9, resolvedBy: 'framework' };\n }\n return null;\n },\n extractNodes(filePath: string, content: string): Node[] {\n const nodes: Node[] = [];\n const now = Date.now();\n\n // Only process SAM template files\n const basename = filePath.split('/').pop() ?? '';\n if (!basename.match(/^(template|sam)\\.(ya?ml)$/)) return nodes;\n if (!content.includes('AWS::Serverless')) return nodes;\n\n // Extract API events from SAM template\n // Pattern: Type: Api\\n Properties:\\n Path: /users\\n Method: get\n const apiEventPattern = /Type:\\s*(?:Api|HttpApi)\\s*\\n\\s+Properties:\\s*\\n(?:\\s+.*\\n)*?\\s+Path:\\s*(\\S+)\\s*\\n(?:\\s+.*\\n)*?\\s+Method:\\s*(\\w+)/g;\n let match: RegExpExecArray | null;\n while ((match = apiEventPattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const routePath = match[1]!;\n const method = match[2]!.toUpperCase();\n const name = `${method} ${routePath}`;\n nodes.push({\n id: `route:${filePath}:${method}:${routePath}:${line}`,\n kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'yaml', updatedAt: now,\n });\n }\n\n // Simpler pattern: Method + Path on same indentation level (either order)\n const simplePattern = /Method:\\s*(\\w+)\\s*\\n\\s+Path:\\s*(\\S+)|Path:\\s*(\\S+)\\s*\\n\\s+Method:\\s*(\\w+)/g;\n while ((match = simplePattern.exec(content)) !== null) {\n const line = content.slice(0, match.index).split('\\n').length;\n const method = (match[1] || match[4])!.toUpperCase();\n const routePath = (match[2] || match[3])!;\n const name = `${method} ${routePath}`;\n const id = `route:${filePath}:${method}:${routePath}:${line}`;\n if (!nodes.some(n => n.id === id)) {\n nodes.push({\n id, kind: 'route', name,\n qualifiedName: `${filePath}::${name}`,\n filePath, startLine: line, endLine: line, startColumn: 0, endColumn: match[0].length,\n language: 'yaml', updatedAt: now,\n });\n }\n }\n\n return nodes;\n },\n};\n\n// \u2500\u2500 Shared helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Resolve a handler string like \"src/auth.handler\" or \"handlers/users.list\"\n * to the actual function symbol in the codebase.\n */\nfunction resolveHandlerString(handlerStr: string, context: ResolutionContext): string | null {\n // Split \"path/to/file.functionName\" into file path and function name\n const lastDot = handlerStr.lastIndexOf('.');\n if (lastDot <= 0) return null;\n\n const filePart = handlerStr.slice(0, lastDot);\n const funcName = handlerStr.slice(lastDot + 1);\n\n // Try common extensions\n const extensions = ['.ts', '.js', '.mjs', '.py', '.go'];\n for (const ext of extensions) {\n const candidates = [\n `${filePart}${ext}`,\n `${filePart}/index${ext}`,\n ];\n for (const candidate of candidates) {\n if (context.fileExists(candidate)) {\n const node = context.getNodesInFile(candidate).find(\n n => n.name === funcName && (n.kind === 'function' || n.kind === 'method' || n.kind === 'variable')\n );\n if (node) return node.id;\n }\n }\n }\n\n // Fallback: search all files for the function name in likely directories\n const dirs = ['src', 'lib', 'handlers', 'functions', 'lambdas', 'api'];\n for (const file of context.getAllFiles()) {\n if (!dirs.some(d => file.includes(`/${d}/`) || file.startsWith(`${d}/`))) continue;\n if (!file.includes(filePart.split('/').pop()!)) continue;\n const node = context.getNodesInFile(file).find(\n n => n.name === funcName && (n.kind === 'function' || n.kind === 'method' || n.kind === 'variable')\n );\n if (node) return node.id;\n }\n\n return null;\n}\n\n/**\n * Resolve a construct/stack class reference by searching in typical IaC directories.\n */\nfunction resolveConstruct(name: string, dirs: string[], context: ResolutionContext): string | null {\n for (const file of context.getAllFiles()) {\n if (!(file.endsWith('.ts') || file.endsWith('.js') || file.endsWith('.py'))) continue;\n if (!dirs.some(d => file.includes(`/${d}/`) || file.startsWith(`${d}/`))) continue;\n const node = context.getNodesInFile(file).find(\n n => n.name === name && (n.kind === 'class' || n.kind === 'function' || n.kind === 'variable')\n );\n if (node) return node.id;\n }\n return null;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/frameworks/index.js
CHANGED
|
@@ -29,26 +29,42 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
var frameworks_exports = {};
|
|
30
30
|
__export(frameworks_exports, {
|
|
31
31
|
FACADE_MAPPINGS: () => import_laravel.FACADE_MAPPINGS,
|
|
32
|
+
amplifyResolver: () => import_amplify.amplifyResolver,
|
|
33
|
+
angularResolver: () => import_angular.angularResolver,
|
|
34
|
+
ansibleResolver: () => import_ansible.ansibleResolver,
|
|
32
35
|
aspnetResolver: () => import_csharp.aspnetResolver,
|
|
36
|
+
cdkResolver: () => import_iac.cdkResolver,
|
|
37
|
+
cloudformationResolver: () => import_cloudformation.cloudformationResolver,
|
|
33
38
|
detectFrameworks: () => detectFrameworks,
|
|
34
39
|
djangoResolver: () => import_python.djangoResolver,
|
|
40
|
+
dockerComposeResolver: () => import_docker.dockerComposeResolver,
|
|
35
41
|
expressResolver: () => import_express.expressResolver,
|
|
36
42
|
fastapiResolver: () => import_python.fastapiResolver,
|
|
37
43
|
flaskResolver: () => import_python.flaskResolver,
|
|
38
44
|
getAllFrameworkResolvers: () => getAllFrameworkResolvers,
|
|
39
45
|
getFrameworkResolver: () => getFrameworkResolver,
|
|
40
46
|
goResolver: () => import_go.goResolver,
|
|
47
|
+
kubernetesResolver: () => import_kubernetes.kubernetesResolver,
|
|
41
48
|
laravelResolver: () => import_laravel.laravelResolver,
|
|
49
|
+
nuxtResolver: () => import_vue.nuxtResolver,
|
|
42
50
|
phoenixResolver: () => import_elixir.phoenixResolver,
|
|
51
|
+
playResolver: () => import_scala.playResolver,
|
|
52
|
+
pulumiResolver: () => import_pulumi.pulumiResolver,
|
|
43
53
|
railsResolver: () => import_ruby.railsResolver,
|
|
44
54
|
reactResolver: () => import_react.reactResolver,
|
|
45
55
|
registerFrameworkResolver: () => registerFrameworkResolver,
|
|
46
56
|
rustResolver: () => import_rust.rustResolver,
|
|
57
|
+
samResolver: () => import_iac.samResolver,
|
|
58
|
+
serverlessResolver: () => import_iac.serverlessResolver,
|
|
59
|
+
solidityResolver: () => import_solidity.solidityResolver,
|
|
47
60
|
springResolver: () => import_java.springResolver,
|
|
61
|
+
sstResolver: () => import_iac.sstResolver,
|
|
48
62
|
svelteResolver: () => import_svelte.svelteResolver,
|
|
49
63
|
swiftUIResolver: () => import_swift.swiftUIResolver,
|
|
64
|
+
terraformResolver: () => import_terraform.terraformResolver,
|
|
50
65
|
uikitResolver: () => import_swift.uikitResolver,
|
|
51
|
-
vaporResolver: () => import_swift.vaporResolver
|
|
66
|
+
vaporResolver: () => import_swift.vaporResolver,
|
|
67
|
+
vueResolver: () => import_vue.vueResolver
|
|
52
68
|
});
|
|
53
69
|
module.exports = __toCommonJS(frameworks_exports);
|
|
54
70
|
var fs = __toESM(require("fs"));
|
|
@@ -67,6 +83,18 @@ var import_csharp = require("./csharp");
|
|
|
67
83
|
var import_swift = require("./swift");
|
|
68
84
|
var import_laravel = require("./laravel");
|
|
69
85
|
var import_elixir = require("./elixir");
|
|
86
|
+
var import_scala = require("./scala");
|
|
87
|
+
var import_vue = require("./vue");
|
|
88
|
+
var import_solidity = require("./solidity");
|
|
89
|
+
var import_iac = require("./iac");
|
|
90
|
+
var import_terraform = require("./terraform");
|
|
91
|
+
var import_pulumi = require("./pulumi");
|
|
92
|
+
var import_cloudformation = require("./cloudformation");
|
|
93
|
+
var import_kubernetes = require("./kubernetes");
|
|
94
|
+
var import_docker = require("./docker");
|
|
95
|
+
var import_ansible = require("./ansible");
|
|
96
|
+
var import_angular = require("./angular");
|
|
97
|
+
var import_amplify = require("./amplify");
|
|
70
98
|
var import_react2 = require("./react");
|
|
71
99
|
var import_svelte2 = require("./svelte");
|
|
72
100
|
var import_express2 = require("./express");
|
|
@@ -79,6 +107,18 @@ var import_csharp2 = require("./csharp");
|
|
|
79
107
|
var import_swift2 = require("./swift");
|
|
80
108
|
var import_laravel2 = require("./laravel");
|
|
81
109
|
var import_elixir2 = require("./elixir");
|
|
110
|
+
var import_scala2 = require("./scala");
|
|
111
|
+
var import_vue2 = require("./vue");
|
|
112
|
+
var import_solidity2 = require("./solidity");
|
|
113
|
+
var import_iac2 = require("./iac");
|
|
114
|
+
var import_terraform2 = require("./terraform");
|
|
115
|
+
var import_pulumi2 = require("./pulumi");
|
|
116
|
+
var import_cloudformation2 = require("./cloudformation");
|
|
117
|
+
var import_kubernetes2 = require("./kubernetes");
|
|
118
|
+
var import_docker2 = require("./docker");
|
|
119
|
+
var import_ansible2 = require("./ansible");
|
|
120
|
+
var import_angular2 = require("./angular");
|
|
121
|
+
var import_amplify2 = require("./amplify");
|
|
82
122
|
const FRAMEWORK_RESOLVERS = [
|
|
83
123
|
// PHP
|
|
84
124
|
import_laravel2.laravelResolver,
|
|
@@ -86,6 +126,10 @@ const FRAMEWORK_RESOLVERS = [
|
|
|
86
126
|
import_express2.expressResolver,
|
|
87
127
|
import_react2.reactResolver,
|
|
88
128
|
import_svelte2.svelteResolver,
|
|
129
|
+
import_angular2.angularResolver,
|
|
130
|
+
// Vue / Nuxt
|
|
131
|
+
import_vue2.nuxtResolver,
|
|
132
|
+
import_vue2.vueResolver,
|
|
89
133
|
// Python
|
|
90
134
|
import_python2.djangoResolver,
|
|
91
135
|
import_python2.flaskResolver,
|
|
@@ -105,7 +149,25 @@ const FRAMEWORK_RESOLVERS = [
|
|
|
105
149
|
import_swift2.uikitResolver,
|
|
106
150
|
import_swift2.vaporResolver,
|
|
107
151
|
// Elixir
|
|
108
|
-
import_elixir2.phoenixResolver
|
|
152
|
+
import_elixir2.phoenixResolver,
|
|
153
|
+
// Scala
|
|
154
|
+
import_scala2.playResolver,
|
|
155
|
+
// Solidity
|
|
156
|
+
import_solidity2.solidityResolver,
|
|
157
|
+
// Infrastructure as Code
|
|
158
|
+
import_iac2.sstResolver,
|
|
159
|
+
import_iac2.cdkResolver,
|
|
160
|
+
import_iac2.serverlessResolver,
|
|
161
|
+
import_iac2.samResolver,
|
|
162
|
+
import_terraform2.terraformResolver,
|
|
163
|
+
import_pulumi2.pulumiResolver,
|
|
164
|
+
import_cloudformation2.cloudformationResolver,
|
|
165
|
+
import_amplify2.amplifyResolver,
|
|
166
|
+
// Containers & Orchestration
|
|
167
|
+
import_kubernetes2.kubernetesResolver,
|
|
168
|
+
import_docker2.dockerComposeResolver,
|
|
169
|
+
// Configuration Management
|
|
170
|
+
import_ansible2.ansibleResolver
|
|
109
171
|
];
|
|
110
172
|
function getAllFrameworkResolvers() {
|
|
111
173
|
return FRAMEWORK_RESOLVERS;
|
|
@@ -219,25 +281,41 @@ async function detectFromPackageJson(projectRoot) {
|
|
|
219
281
|
// Annotate the CommonJS export names for ESM import in node:
|
|
220
282
|
0 && (module.exports = {
|
|
221
283
|
FACADE_MAPPINGS,
|
|
284
|
+
amplifyResolver,
|
|
285
|
+
angularResolver,
|
|
286
|
+
ansibleResolver,
|
|
222
287
|
aspnetResolver,
|
|
288
|
+
cdkResolver,
|
|
289
|
+
cloudformationResolver,
|
|
223
290
|
detectFrameworks,
|
|
224
291
|
djangoResolver,
|
|
292
|
+
dockerComposeResolver,
|
|
225
293
|
expressResolver,
|
|
226
294
|
fastapiResolver,
|
|
227
295
|
flaskResolver,
|
|
228
296
|
getAllFrameworkResolvers,
|
|
229
297
|
getFrameworkResolver,
|
|
230
298
|
goResolver,
|
|
299
|
+
kubernetesResolver,
|
|
231
300
|
laravelResolver,
|
|
301
|
+
nuxtResolver,
|
|
232
302
|
phoenixResolver,
|
|
303
|
+
playResolver,
|
|
304
|
+
pulumiResolver,
|
|
233
305
|
railsResolver,
|
|
234
306
|
reactResolver,
|
|
235
307
|
registerFrameworkResolver,
|
|
236
308
|
rustResolver,
|
|
309
|
+
samResolver,
|
|
310
|
+
serverlessResolver,
|
|
311
|
+
solidityResolver,
|
|
237
312
|
springResolver,
|
|
313
|
+
sstResolver,
|
|
238
314
|
svelteResolver,
|
|
239
315
|
swiftUIResolver,
|
|
316
|
+
terraformResolver,
|
|
240
317
|
uikitResolver,
|
|
241
|
-
vaporResolver
|
|
318
|
+
vaporResolver,
|
|
319
|
+
vueResolver
|
|
242
320
|
});
|
|
243
321
|
//# sourceMappingURL=index.js.map
|