@sdd-method/sdd-cli 0.59.0 → 0.61.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.
Files changed (79) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/api-surface/__fixtures__/serverless-repo/serverless/serverless.yml +18 -0
  5. package/dist/lib/api-surface/analyzers/library.d.ts +4 -0
  6. package/dist/lib/api-surface/analyzers/library.d.ts.map +1 -0
  7. package/dist/lib/api-surface/analyzers/library.js +95 -0
  8. package/dist/lib/api-surface/analyzers/library.js.map +1 -0
  9. package/dist/lib/api-surface/analyzers/serverless.d.ts +13 -0
  10. package/dist/lib/api-surface/analyzers/serverless.d.ts.map +1 -0
  11. package/dist/lib/api-surface/analyzers/serverless.js +336 -0
  12. package/dist/lib/api-surface/analyzers/serverless.js.map +1 -0
  13. package/dist/lib/api-surface/analyzers/spring.d.ts +4 -0
  14. package/dist/lib/api-surface/analyzers/spring.d.ts.map +1 -0
  15. package/dist/lib/api-surface/analyzers/spring.js +237 -0
  16. package/dist/lib/api-surface/analyzers/spring.js.map +1 -0
  17. package/dist/lib/api-surface/analyzers/terraform.d.ts +4 -0
  18. package/dist/lib/api-surface/analyzers/terraform.d.ts.map +1 -0
  19. package/dist/lib/api-surface/analyzers/terraform.js +109 -0
  20. package/dist/lib/api-surface/analyzers/terraform.js.map +1 -0
  21. package/dist/lib/api-surface/detect.d.ts +8 -0
  22. package/dist/lib/api-surface/detect.d.ts.map +1 -0
  23. package/dist/lib/api-surface/detect.js +25 -0
  24. package/dist/lib/api-surface/detect.js.map +1 -0
  25. package/dist/lib/api-surface/emit.d.ts +4 -0
  26. package/dist/lib/api-surface/emit.d.ts.map +1 -0
  27. package/dist/lib/api-surface/emit.js +109 -0
  28. package/dist/lib/api-surface/emit.js.map +1 -0
  29. package/dist/lib/api-surface/file-set.d.ts +14 -0
  30. package/dist/lib/api-surface/file-set.d.ts.map +1 -0
  31. package/dist/lib/api-surface/file-set.js +43 -0
  32. package/dist/lib/api-surface/file-set.js.map +1 -0
  33. package/dist/lib/api-surface/index.d.ts +18 -0
  34. package/dist/lib/api-surface/index.d.ts.map +1 -0
  35. package/dist/lib/api-surface/index.js +134 -0
  36. package/dist/lib/api-surface/index.js.map +1 -0
  37. package/dist/lib/api-surface/types.d.ts +86 -0
  38. package/dist/lib/api-surface/types.d.ts.map +1 -0
  39. package/dist/lib/api-surface/types.js +17 -0
  40. package/dist/lib/api-surface/types.js.map +1 -0
  41. package/dist/lib/catalogue/aggregate.js +3 -3
  42. package/dist/lib/catalogue/aggregate.js.map +1 -1
  43. package/dist/lib/catalogue/builders/c4-entity-rollups.js +1 -1
  44. package/dist/lib/catalogue/builders/c4-entity-rollups.js.map +1 -1
  45. package/dist/lib/catalogue/builders/data-store-mapping.js +1 -1
  46. package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -1
  47. package/dist/lib/catalogue/builders/entities-mermaid.js +1 -1
  48. package/dist/lib/catalogue/builders/entities-mermaid.js.map +1 -1
  49. package/dist/lib/catalogue/builders/event-catalog-walker.js +1 -1
  50. package/dist/lib/catalogue/builders/event-catalog-walker.js.map +1 -1
  51. package/dist/lib/catalogue/builders/event-edges.js +1 -1
  52. package/dist/lib/catalogue/builders/event-edges.js.map +1 -1
  53. package/dist/lib/catalogue/builders/feature-grounding.js +4 -4
  54. package/dist/lib/catalogue/builders/glossary.js +1 -1
  55. package/dist/lib/catalogue/builders/glossary.js.map +1 -1
  56. package/dist/lib/catalogue/builders/repo-edges.js +2 -2
  57. package/dist/lib/catalogue/builders/repo-edges.js.map +1 -1
  58. package/dist/lib/catalogue/builders/service-contract-consumes.d.ts +1 -1
  59. package/dist/lib/catalogue/builders/service-contract-consumes.js +1 -1
  60. package/dist/lib/catalogue/builders/service-contract-consumes.js.map +1 -1
  61. package/dist/lib/catalogue/builders/service-entity-tables.js +1 -1
  62. package/dist/lib/catalogue/builders/service-entity-tables.js.map +1 -1
  63. package/dist/lib/catalogue/feature-grounding-aliases-loader.d.ts +2 -2
  64. package/dist/lib/catalogue/feature-grounding-aliases-loader.js +2 -2
  65. package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +6 -6
  66. package/dist/lib/catalogue/service-contract-aliases-loader.js +6 -6
  67. package/dist/lib/conformance/index.d.ts +1 -0
  68. package/dist/lib/conformance/index.d.ts.map +1 -1
  69. package/dist/lib/conformance/index.js +26 -5
  70. package/dist/lib/conformance/index.js.map +1 -1
  71. package/dist/lib/mcp/tools/cascade-impact.d.ts +1 -1
  72. package/dist/lib/pack/builder.js +1 -1
  73. package/dist/lib/pack/builder.js.map +1 -1
  74. package/dist/lib/sync/config.d.ts +1 -1
  75. package/dist/verbs/api-surface.d.ts +3 -0
  76. package/dist/verbs/api-surface.d.ts.map +1 -0
  77. package/dist/verbs/api-surface.js +71 -0
  78. package/dist/verbs/api-surface.js.map +1 -0
  79. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Command, CommanderError } from "commander";
2
2
  import { getPackageVersion } from "./lib/package-version.js";
3
+ import { registerApiSurface } from "./verbs/api-surface.js";
3
4
  import { registerCatalogue } from "./verbs/catalogue.js";
4
5
  import { registerConformance } from "./verbs/conformance.js";
5
6
  import { registerGenerateBriefing } from "./verbs/generate-briefing.js";
@@ -50,6 +51,7 @@ function buildProgram() {
50
51
  registerMcp(program);
51
52
  registerCatalogue(program);
52
53
  registerConformance(program);
54
+ registerApiSurface(program);
53
55
  registerPack(program);
54
56
  registerRender(program);
55
57
  registerScaffold(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ {{- $vpc := .Values.Vpc | default "true" -}}
2
+ service: demo-sms
3
+ provider:
4
+ name: aws
5
+ runtime: nodejs18.x
6
+ functions:
7
+ sendSms:
8
+ handler: src/sendSms.handler
9
+ events:
10
+ - http:
11
+ method: POST
12
+ path: /sms/
13
+ resources:
14
+ Resources:
15
+ OutboundQueue:
16
+ Type: "AWS::SQS::Queue"
17
+ Properties:
18
+ QueueName: 'demo-outbound-sqs'
@@ -0,0 +1,4 @@
1
+ import type { FileSet } from "../file-set.js";
2
+ import type { AnalyzerResult } from "../types.js";
3
+ export declare function analyzeLibrary(fileSet: FileSet): Promise<AnalyzerResult>;
4
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../../src/lib/api-surface/analyzers/library.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,aAAa,CAAC;AAS1E,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAe9E"}
@@ -0,0 +1,95 @@
1
+ import { dirname } from "node:path";
2
+ import { allBySuffix, findBySuffix } from "../file-set.js";
3
+ // library analyzer. A repo with a build manifest but no endpoints: a shared library / API client.
4
+ // pom.xml → package_name = <groupId>:<artifactId>; exports = top-level Java packages.
5
+ // package.json → package_name = name; exports from `main`/`exports`.
6
+ // `consumed_by` is left [] with a TODO marker — it cannot be known from the repo alone (no fabrication).
7
+ const CONSUMED_BY_TODO = "TODO: consumed_by unknown from repo alone — fill from catalogue/aggregate";
8
+ export async function analyzeLibrary(fileSet) {
9
+ const pom = findBySuffix(fileSet.files, "pom.xml");
10
+ if (pom) {
11
+ return analyzeMaven(fileSet, pom);
12
+ }
13
+ const pkg = findBySuffix(fileSet.files, "package.json");
14
+ if (pkg) {
15
+ return analyzeNpm(fileSet, pkg);
16
+ }
17
+ // Fallback: build.gradle library.
18
+ const gradle = findBySuffix(fileSet.files, "build.gradle");
19
+ if (gradle) {
20
+ return analyzeGradle(fileSet, gradle);
21
+ }
22
+ return emptyLibrary();
23
+ }
24
+ async function analyzeMaven(fileSet, pomPath) {
25
+ const pom = await fileSet.read(pomPath);
26
+ const groupId = pom.match(/<groupId>\s*([^<]+)<\/groupId>/)?.[1]?.trim() ?? "";
27
+ const artifactId = pom.match(/<artifactId>\s*([^<]+)<\/artifactId>/)?.[1]?.trim() ?? "";
28
+ const packageName = [groupId, artifactId].filter(Boolean).join(":") || artifactId;
29
+ const exports = topLevelJavaPackages(fileSet);
30
+ return libraryResult({ package_name: packageName, exports });
31
+ }
32
+ async function analyzeNpm(fileSet, pkgPath) {
33
+ const raw = await fileSet.read(pkgPath);
34
+ let pkg = {};
35
+ try {
36
+ pkg = JSON.parse(raw);
37
+ }
38
+ catch {
39
+ pkg = {};
40
+ }
41
+ const packageName = typeof pkg["name"] === "string" ? pkg["name"] : "";
42
+ const exports = [];
43
+ if (typeof pkg["main"] === "string") {
44
+ exports.push({ name: pkg["main"], type: "entrypoint", description: "main" });
45
+ }
46
+ const exp = pkg["exports"];
47
+ if (typeof exp === "string") {
48
+ exports.push({ name: exp, type: "entrypoint", description: "exports" });
49
+ }
50
+ else if (exp && typeof exp === "object") {
51
+ for (const key of Object.keys(exp)) {
52
+ exports.push({ name: key, type: "export-path", description: "exports" });
53
+ }
54
+ }
55
+ return libraryResult({ package_name: packageName, exports });
56
+ }
57
+ async function analyzeGradle(fileSet, gradlePath) {
58
+ const src = await fileSet.read(gradlePath);
59
+ const group = src.match(/group\s*=?\s*['"]([^'"]+)['"]/)?.[1] ?? "";
60
+ // Artifact name is usually the repo dir; use the gradle file's parent dir basename.
61
+ const artifact = dirname(gradlePath).split("/").pop() ?? "";
62
+ const packageName = [group, artifact].filter(Boolean).join(":") || artifact;
63
+ return libraryResult({ package_name: packageName, exports: topLevelJavaPackages(fileSet) });
64
+ }
65
+ function topLevelJavaPackages(fileSet) {
66
+ const javaFiles = allBySuffix(fileSet.files, ".java").filter((f) => !/(^|\/)(target|build|test)\//.test(f) && !/Test\.java$/.test(f));
67
+ const packages = new Set();
68
+ for (const f of javaFiles) {
69
+ // Derive a package from `src/main/java/<a>/<b>/<c>/File.java` → a.b.c (cap at 4 segments).
70
+ const m = f.match(/src\/main\/java\/(.+)\/[^/]+\.java$/);
71
+ if (!m)
72
+ continue;
73
+ const segments = m[1].split("/").slice(0, 4);
74
+ packages.add(segments.join("."));
75
+ }
76
+ return [...packages]
77
+ .sort()
78
+ .map((p) => ({ name: p, type: "java-package", description: "exported package" }));
79
+ }
80
+ function libraryResult(publicApi) {
81
+ return {
82
+ stack: "library",
83
+ component_type: "library",
84
+ endpoints: [],
85
+ dependencies: { downstream: [], upstream: [] },
86
+ external_contracts: [],
87
+ deployment: { runtime: "", shared_infra: [], notes: [CONSUMED_BY_TODO] },
88
+ public_api: publicApi,
89
+ consumed_by: [],
90
+ };
91
+ }
92
+ function emptyLibrary() {
93
+ return libraryResult({ package_name: "", exports: [] });
94
+ }
95
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../../src/lib/api-surface/analyzers/library.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { FileSet } from "../file-set.js";
2
+ import type { AnalyzerResult } from "../types.js";
3
+ export declare function analyzeServerless(fileSet: FileSet): Promise<AnalyzerResult>;
4
+ /**
5
+ * Make a Helm/Go-templated serverless.yml parseable as YAML:
6
+ * - drop whole control lines (`{{- if ... }}`, `{{ range ... }}`, `{{ end }}`) — they're block
7
+ * directives, not values, so removing the line keeps the surrounding structure valid;
8
+ * - replace inline `{{ expr }}` with a quoted placeholder so a value position stays a scalar;
9
+ * - leave `${self:...}` / `${opt:...}` serverless vars alone (they're valid YAML scalars already,
10
+ * just quote bare ones that would otherwise be read as a mapping).
11
+ */
12
+ export declare function sanitiseTemplate(raw: string): string;
13
+ //# sourceMappingURL=serverless.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverless.d.ts","sourceRoot":"","sources":["../../../../src/lib/api-surface/analyzers/serverless.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,aAAa,CAAC;AASlF,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CA+CjF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBpD"}
@@ -0,0 +1,336 @@
1
+ import { parse as parseYaml } from "yaml";
2
+ import { allBySuffix } from "../file-set.js";
3
+ // node-serverless analyzer.
4
+ //
5
+ // The serverless.yml in these repos is Go/Helm-templated (`{{ ... }}`, `${self:...}`, `${opt:...}`).
6
+ // Strategy: sanitise the template directives so the YAML parser succeeds, then read functions/events
7
+ // /provider/resources structurally. If the sanitised doc still won't parse, fall back to a line-based
8
+ // regex sweep so we never come back empty on a real (messy) file.
9
+ export async function analyzeServerless(fileSet) {
10
+ const serverlessFiles = fileSet.files.filter((f) => {
11
+ const lower = f.toLowerCase();
12
+ return lower.endsWith("serverless.yml") || lower.endsWith("serverless.yaml");
13
+ });
14
+ const endpoints = [];
15
+ const downstream = [];
16
+ const sharedInfra = new Set();
17
+ const externalContracts = new Set();
18
+ let runtime = "";
19
+ for (const slPath of serverlessFiles) {
20
+ const raw = await fileSet.read(slPath);
21
+ if (raw === "")
22
+ continue;
23
+ const sanitised = sanitiseTemplate(raw);
24
+ let doc = null;
25
+ try {
26
+ doc = parseYaml(sanitised);
27
+ }
28
+ catch {
29
+ doc = null;
30
+ }
31
+ if (isRecord(doc)) {
32
+ runtime = runtime || extractRuntime(doc);
33
+ collectFromStructured(doc, endpoints, downstream, sharedInfra);
34
+ }
35
+ else {
36
+ // Structured parse failed — fall back to regex extraction over the raw text.
37
+ collectFromRegex(raw, endpoints, downstream, sharedInfra);
38
+ runtime = runtime || (raw.match(/^\s*runtime:\s*([\w.-]+)/m)?.[1] ?? "");
39
+ }
40
+ }
41
+ // Scan handler source for AWS SDK clients + outbound HTTP base URLs → downstream deps.
42
+ await scanHandlerSources(fileSet, downstream, externalContracts);
43
+ dedupeDownstream(downstream);
44
+ return {
45
+ stack: "node-serverless",
46
+ component_type: "service",
47
+ endpoints,
48
+ dependencies: { downstream, upstream: [] },
49
+ external_contracts: [...externalContracts].sort(),
50
+ deployment: { runtime, shared_infra: [...sharedInfra].sort() },
51
+ };
52
+ }
53
+ /**
54
+ * Make a Helm/Go-templated serverless.yml parseable as YAML:
55
+ * - drop whole control lines (`{{- if ... }}`, `{{ range ... }}`, `{{ end }}`) — they're block
56
+ * directives, not values, so removing the line keeps the surrounding structure valid;
57
+ * - replace inline `{{ expr }}` with a quoted placeholder so a value position stays a scalar;
58
+ * - leave `${self:...}` / `${opt:...}` serverless vars alone (they're valid YAML scalars already,
59
+ * just quote bare ones that would otherwise be read as a mapping).
60
+ */
61
+ export function sanitiseTemplate(raw) {
62
+ const out = [];
63
+ for (const line of raw.split(/\r?\n/)) {
64
+ const trimmed = line.trim();
65
+ // A line whose entire content is one template directive (control flow `{{ if }}`/`{{ end }}`,
66
+ // an assignment `{{ $x := ... }}`, or a bare expression `{{ .Values.X }}`) is a directive, not a
67
+ // mapping/value — drop the whole line so the surrounding YAML structure stays valid. Detected by:
68
+ // starts with `{{`/`{{-` and ends with `}}`/`-}}` with no YAML payload before/after the braces.
69
+ if (/^\{\{-?[\s\S]*?-?\}\}$/.test(trimmed)) {
70
+ continue;
71
+ }
72
+ // Inline `{{ ... }}` in a value position → placeholder scalar.
73
+ const replaced = line.replace(/\{\{-?.*?-?\}\}/g, "TEMPLATED");
74
+ out.push(replaced);
75
+ }
76
+ return out.join("\n");
77
+ }
78
+ function extractRuntime(doc) {
79
+ const provider = doc["provider"];
80
+ if (isRecord(provider) && typeof provider["runtime"] === "string") {
81
+ return provider["runtime"];
82
+ }
83
+ return "";
84
+ }
85
+ function collectFromStructured(doc, endpoints, downstream, sharedInfra) {
86
+ const functions = doc["functions"];
87
+ if (isRecord(functions)) {
88
+ for (const [fnName, fnDef] of Object.entries(functions)) {
89
+ if (!isRecord(fnDef))
90
+ continue;
91
+ const handler = typeof fnDef["handler"] === "string" ? fnDef["handler"] : fnName;
92
+ const events = fnDef["events"];
93
+ if (!Array.isArray(events))
94
+ continue;
95
+ for (const evt of events) {
96
+ if (!isRecord(evt))
97
+ continue;
98
+ const httpEvt = evt["http"] ?? evt["httpApi"];
99
+ if (httpEvt !== undefined) {
100
+ endpoints.push(httpEndpoint(httpEvt, handler));
101
+ }
102
+ // Non-http event sources (sqs/sns/eventBridge) are dependency signals, not endpoints.
103
+ collectEventSource(evt, fnName, downstream, sharedInfra);
104
+ }
105
+ }
106
+ }
107
+ // provider.iam + resources + environment → infra + downstream.
108
+ const provider = doc["provider"];
109
+ if (isRecord(provider)) {
110
+ collectInfraFromNode(provider, downstream, sharedInfra);
111
+ }
112
+ const resources = doc["resources"];
113
+ if (resources !== undefined) {
114
+ collectInfraFromNode(resources, downstream, sharedInfra);
115
+ }
116
+ }
117
+ function httpEndpoint(httpEvt, handler) {
118
+ let method = "ANY";
119
+ let path = "/";
120
+ let auth = "none";
121
+ if (typeof httpEvt === "string") {
122
+ // `http: GET users/list` shorthand.
123
+ const parts = httpEvt.trim().split(/\s+/);
124
+ if (parts.length >= 2) {
125
+ method = parts[0].toUpperCase();
126
+ path = normalisePath(parts[1]);
127
+ }
128
+ else {
129
+ path = normalisePath(httpEvt);
130
+ }
131
+ }
132
+ else if (isRecord(httpEvt)) {
133
+ if (typeof httpEvt["method"] === "string")
134
+ method = httpEvt["method"].toUpperCase();
135
+ if (typeof httpEvt["path"] === "string")
136
+ path = normalisePath(httpEvt["path"]);
137
+ const authorizer = httpEvt["authorizer"];
138
+ if (typeof authorizer === "string")
139
+ auth = `authorizer:${authorizer}`;
140
+ else if (isRecord(authorizer)) {
141
+ const name = authorizer["name"] ?? authorizer["type"] ?? authorizer["arn"];
142
+ auth = typeof name === "string" ? `authorizer:${name}` : "authorizer:custom";
143
+ }
144
+ else if (httpEvt["private"] === true) {
145
+ auth = "api-key";
146
+ }
147
+ }
148
+ return { method, path, auth, handler };
149
+ }
150
+ function collectEventSource(evt, fnName, downstream, sharedInfra) {
151
+ if ("sqs" in evt) {
152
+ const detail = describeArnRef(evt["sqs"]) || `${fnName}-sqs`;
153
+ downstream.push({ target: detail, kind: "sqs", detail, load_bearing: true });
154
+ if (detail)
155
+ sharedInfra.add(detail);
156
+ }
157
+ if ("sns" in evt) {
158
+ const detail = describeArnRef(evt["sns"]) || `${fnName}-sns`;
159
+ downstream.push({ target: detail, kind: "sns", detail, load_bearing: true });
160
+ if (detail)
161
+ sharedInfra.add(detail);
162
+ }
163
+ if ("stream" in evt) {
164
+ const detail = describeArnRef(evt["stream"]) || `${fnName}-stream`;
165
+ downstream.push({ target: detail, kind: "dynamodb", detail, load_bearing: true });
166
+ }
167
+ if ("eventBridge" in evt) {
168
+ const eb = evt["eventBridge"];
169
+ const detail = isRecord(eb) && typeof eb["name"] === "string" ? eb["name"] : `${fnName}-eb`;
170
+ downstream.push({ target: detail, kind: "eventbridge", detail, load_bearing: false });
171
+ }
172
+ }
173
+ /** Recursively collect DynamoDB tables, SQS/SNS refs, S3 buckets, VPC from a provider/resources node. */
174
+ function collectInfraFromNode(node, downstream, sharedInfra) {
175
+ walk(node, (key, value) => {
176
+ if (!isRecord(value))
177
+ return;
178
+ const type = value["Type"];
179
+ if (typeof type === "string") {
180
+ const props = isRecord(value["Properties"]) ? value["Properties"] : {};
181
+ if (type === "AWS::SQS::Queue") {
182
+ const name = strProp(props, "QueueName") || key;
183
+ downstream.push({ target: name, kind: "sqs", detail: name, load_bearing: true });
184
+ sharedInfra.add(name);
185
+ }
186
+ else if (type === "AWS::SNS::Topic") {
187
+ const name = strProp(props, "TopicName") || key;
188
+ downstream.push({ target: name, kind: "sns", detail: name, load_bearing: true });
189
+ sharedInfra.add(name);
190
+ }
191
+ else if (type === "AWS::DynamoDB::Table") {
192
+ const name = strProp(props, "TableName") || key;
193
+ downstream.push({ target: name, kind: "dynamodb", detail: name, load_bearing: true });
194
+ sharedInfra.add(name);
195
+ }
196
+ else if (type === "AWS::S3::Bucket") {
197
+ const name = strProp(props, "BucketName") || key;
198
+ downstream.push({ target: name, kind: "s3", detail: name, load_bearing: false });
199
+ sharedInfra.add(name);
200
+ }
201
+ }
202
+ });
203
+ }
204
+ function strProp(props, key) {
205
+ const v = props[key];
206
+ return typeof v === "string" ? v : "";
207
+ }
208
+ /** Visit every (key,value) pair in a nested object/array tree. */
209
+ function walk(node, visit) {
210
+ if (Array.isArray(node)) {
211
+ for (const el of node)
212
+ walk(el, visit);
213
+ return;
214
+ }
215
+ if (isRecord(node)) {
216
+ for (const [k, v] of Object.entries(node)) {
217
+ visit(k, v);
218
+ walk(v, visit);
219
+ }
220
+ }
221
+ }
222
+ function describeArnRef(node) {
223
+ if (typeof node === "string")
224
+ return node;
225
+ if (isRecord(node)) {
226
+ const arn = node["arn"];
227
+ if (typeof arn === "string")
228
+ return arn;
229
+ if (isRecord(arn)) {
230
+ const getAtt = arn["Fn::GetAtt"];
231
+ if (Array.isArray(getAtt) && typeof getAtt[0] === "string")
232
+ return getAtt[0];
233
+ }
234
+ const ref = node["Ref"];
235
+ if (typeof ref === "string")
236
+ return ref;
237
+ }
238
+ return "";
239
+ }
240
+ // --- regex fallback (when YAML won't parse even after sanitising) ---
241
+ function collectFromRegex(raw, endpoints, downstream, sharedInfra) {
242
+ const lines = raw.split(/\r?\n/);
243
+ let currentHandler = "";
244
+ for (let i = 0; i < lines.length; i++) {
245
+ const line = lines[i];
246
+ const handlerM = line.match(/^\s*handler:\s*([\w.\/-]+)/);
247
+ if (handlerM)
248
+ currentHandler = handlerM[1];
249
+ const methodM = line.match(/^\s*method:\s*([A-Za-z]+)/);
250
+ if (methodM) {
251
+ // Look a few lines around for a path:.
252
+ const path = findNearby(lines, i, /^\s*path:\s*([^\s]+)/) ?? "/";
253
+ const auth = findNearby(lines, i, /^\s*authorizer:\s*([\w-]+)/) ?? "none";
254
+ endpoints.push({
255
+ method: methodM[1].toUpperCase(),
256
+ path: normalisePath(path),
257
+ auth: auth === "none" ? "none" : `authorizer:${auth}`,
258
+ handler: currentHandler || "unknown",
259
+ });
260
+ }
261
+ const sqsM = line.match(/QueueName:\s*['"]?([\w${}:.\-]+)/);
262
+ if (sqsM) {
263
+ downstream.push({ target: sqsM[1], kind: "sqs", detail: sqsM[1], load_bearing: true });
264
+ sharedInfra.add(sqsM[1]);
265
+ }
266
+ const tableM = line.match(/TableName:\s*['"]?([\w${}:.\-]+)/);
267
+ if (tableM) {
268
+ downstream.push({ target: tableM[1], kind: "dynamodb", detail: tableM[1], load_bearing: true });
269
+ sharedInfra.add(tableM[1]);
270
+ }
271
+ }
272
+ }
273
+ function findNearby(lines, idx, re) {
274
+ for (let j = Math.max(0, idx - 3); j <= Math.min(lines.length - 1, idx + 3); j++) {
275
+ const m = lines[j].match(re);
276
+ if (m)
277
+ return m[1];
278
+ }
279
+ return null;
280
+ }
281
+ // --- handler source scan ---
282
+ const AWS_CLIENT_RE = [
283
+ { re: /\bnew\s+(?:AWS\.)?DynamoDB(?:Client|\.DocumentClient)?\b|DynamoDbClient\b/, kind: "dynamodb" },
284
+ { re: /\bnew\s+(?:AWS\.)?SQS\b|SqsClient\b|AmazonSQS\b/, kind: "sqs" },
285
+ { re: /\bnew\s+(?:AWS\.)?SNS\b|SnsClient\b|AmazonSNS\b/, kind: "sns" },
286
+ { re: /\bnew\s+(?:AWS\.)?S3\b|S3Client\b|AmazonS3\b/, kind: "s3" },
287
+ { re: /SecretsManager(?:Client)?\b|AWSSecretsManager\b/, kind: "secretsmanager" },
288
+ ];
289
+ async function scanHandlerSources(fileSet, downstream, externalContracts) {
290
+ const sources = [
291
+ ...allBySuffix(fileSet.files, ".js"),
292
+ ...allBySuffix(fileSet.files, ".ts"),
293
+ ...allBySuffix(fileSet.files, ".java"),
294
+ ].filter((f) => !/(^|\/)(node_modules|target|dist|build)\//.test(f) && !/\.test\.|Test\.java$/.test(f));
295
+ for (const path of sources) {
296
+ const src = await fileSet.read(path);
297
+ if (src === "")
298
+ continue;
299
+ for (const { re, kind } of AWS_CLIENT_RE) {
300
+ if (re.test(src)) {
301
+ downstream.push({ target: kind, kind, detail: `client in ${path}`, load_bearing: false });
302
+ }
303
+ }
304
+ // Outbound HTTP base URLs.
305
+ for (const m of src.matchAll(/axios\.create\(\s*\{\s*baseURL:\s*['"`]([^'"`]+)/g)) {
306
+ externalContracts.add(m[1]);
307
+ downstream.push({ target: m[1], kind: "http", detail: m[1], load_bearing: false });
308
+ }
309
+ for (const m of src.matchAll(/fetch\(\s*['"`](https?:\/\/[^'"`]+)/g)) {
310
+ externalContracts.add(m[1]);
311
+ downstream.push({ target: m[1], kind: "http", detail: m[1], load_bearing: false });
312
+ }
313
+ }
314
+ }
315
+ function dedupeDownstream(deps) {
316
+ const seen = new Set();
317
+ for (let i = deps.length - 1; i >= 0; i--) {
318
+ const dep = deps[i];
319
+ const key = `${dep.kind}|${dep.detail}`;
320
+ if (seen.has(key))
321
+ deps.splice(i, 1);
322
+ else
323
+ seen.add(key);
324
+ }
325
+ deps.sort((a, b) => (a.kind + a.detail).localeCompare(b.kind + b.detail));
326
+ }
327
+ function normalisePath(p) {
328
+ let s = p.trim().replace(/^['"]|['"]$/g, "");
329
+ if (!s.startsWith("/"))
330
+ s = `/${s}`;
331
+ return s;
332
+ }
333
+ function isRecord(value) {
334
+ return typeof value === "object" && value !== null && !Array.isArray(value);
335
+ }
336
+ //# sourceMappingURL=serverless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverless.js","sourceRoot":"","sources":["../../../../src/lib/api-surface/analyzers/serverless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,4BAA4B;AAC5B,EAAE;AACF,qGAAqG;AACrG,qGAAqG;AACrG,sGAAsG;AACtG,kEAAkE;AAElE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAgB;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACjD,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QACzB,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,GAAG,GAAY,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;QAED,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,GAAG,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;YACzC,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAC1D,OAAO,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,uFAAuF;IACvF,MAAM,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAEjE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE7B,OAAO;QACL,KAAK,EAAE,iBAAiB;QACxB,cAAc,EAAE,SAAS;QACzB,SAAS;QACT,YAAY,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,kBAAkB,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE;QACjD,UAAU,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,8FAA8F;QAC9F,iGAAiG;QACjG,kGAAkG;QAClG,gGAAgG;QAChG,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC/D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B;IAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,qBAAqB,CAC5B,GAA4B,EAC5B,SAAqB,EACrB,UAAkC,EAClC,WAAwB;IAExB,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC/B,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACjF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,SAAS;YACrC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACjD,CAAC;gBACD,sFAAsF;gBACtF,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB,EAAE,OAAe;IACrD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,oCAAoC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ;YAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACpF,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ;YAAE,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,IAAI,GAAG,cAAc,UAAU,EAAE,CAAC;aACjE,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC/E,CAAC;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,kBAAkB,CACzB,GAA4B,EAC5B,MAAc,EACd,UAAkC,EAClC,WAAwB;IAExB,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC;QAC7D,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM;YAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC;QAC7D,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM;YAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,MAAM,SAAS,CAAC;QACnE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,aAAa,IAAI,GAAG,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC;QAC5F,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,yGAAyG;AACzG,SAAS,oBAAoB,CAC3B,IAAa,EACb,UAAkC,EAClC,WAAwB;IAExB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;gBAChD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;gBAChD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;gBAChD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,GAAG,CAAC;gBACjD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,KAA8B,EAAE,GAAW;IAC1D,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,kEAAkE;AAClE,SAAS,IAAI,CAAC,IAAa,EAAE,KAA4C;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,EAAE,IAAI,IAAI;YAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAa;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,uEAAuE;AAEvE,SAAS,gBAAgB,CACvB,GAAW,EACX,SAAqB,EACrB,UAAkC,EAClC,WAAwB;IAExB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC1D,IAAI,QAAQ;YAAE,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACxD,IAAI,OAAO,EAAE,CAAC;YACZ,uCAAuC;YACvC,MAAM,IAAI,GACR,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,sBAAsB,CAAC,IAAI,GAAG,CAAC;YACtD,MAAM,IAAI,GACR,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,4BAA4B,CAAC,IAAI,MAAM,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC;gBACb,MAAM,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;gBACjC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE;gBACrD,OAAO,EAAE,cAAc,IAAI,SAAS;aACrC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YACzF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAClG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAe,EAAE,GAAW,EAAE,EAAU;IAC1D,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjF,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8BAA8B;AAE9B,MAAM,aAAa,GAAsE;IACvF,EAAE,EAAE,EAAE,2EAA2E,EAAE,IAAI,EAAE,UAAU,EAAE;IACrG,EAAE,EAAE,EAAE,iDAAiD,EAAE,IAAI,EAAE,KAAK,EAAE;IACtE,EAAE,EAAE,EAAE,iDAAiD,EAAE,IAAI,EAAE,KAAK,EAAE;IACtE,EAAE,EAAE,EAAE,8CAA8C,EAAE,IAAI,EAAE,IAAI,EAAE;IAClE,EAAE,EAAE,EAAE,iDAAiD,EAAE,IAAI,EAAE,gBAAgB,EAAE;CAClF,CAAC;AAEF,KAAK,UAAU,kBAAkB,CAC/B,OAAgB,EAChB,UAAkC,EAClC,iBAA8B;IAE9B,MAAM,OAAO,GAAG;QACd,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;QACpC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;QACpC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;KACvC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAExG,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QACzB,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QACD,2BAA2B;QAC3B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,mDAAmD,CAAC,EAAE,CAAC;YAClF,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,sCAAsC,CAAC,EAAE,CAAC;YACrE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA4B;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FileSet } from "../file-set.js";
2
+ import type { AnalyzerResult } from "../types.js";
3
+ export declare function analyzeSpring(fileSet: FileSet): Promise<AnalyzerResult>;
4
+ //# sourceMappingURL=spring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spring.d.ts","sourceRoot":"","sources":["../../../../src/lib/api-surface/analyzers/spring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,aAAa,CAAC;AAarB,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC7E"}