@sdd-method/sdd-cli 0.58.0 → 0.60.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 (92) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +4 -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 +24 -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 +128 -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/canonical-schema.yaml +21 -1
  64. package/dist/lib/catalogue/feature-grounding-aliases-loader.d.ts +2 -2
  65. package/dist/lib/catalogue/feature-grounding-aliases-loader.js +2 -2
  66. package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +6 -6
  67. package/dist/lib/catalogue/service-contract-aliases-loader.js +6 -6
  68. package/dist/lib/conformance/binding.d.ts +23 -0
  69. package/dist/lib/conformance/binding.d.ts.map +1 -0
  70. package/dist/lib/conformance/binding.js +34 -0
  71. package/dist/lib/conformance/binding.js.map +1 -0
  72. package/dist/lib/conformance/finding.d.ts +5 -0
  73. package/dist/lib/conformance/finding.d.ts.map +1 -0
  74. package/dist/lib/conformance/finding.js +59 -0
  75. package/dist/lib/conformance/finding.js.map +1 -0
  76. package/dist/lib/conformance/index.d.ts +64 -0
  77. package/dist/lib/conformance/index.d.ts.map +1 -0
  78. package/dist/lib/conformance/index.js +306 -0
  79. package/dist/lib/conformance/index.js.map +1 -0
  80. package/dist/lib/mcp/tools/cascade-impact.d.ts +1 -1
  81. package/dist/lib/pack/builder.js +1 -1
  82. package/dist/lib/pack/builder.js.map +1 -1
  83. package/dist/lib/sync/config.d.ts +1 -1
  84. package/dist/verbs/api-surface.d.ts +3 -0
  85. package/dist/verbs/api-surface.d.ts.map +1 -0
  86. package/dist/verbs/api-surface.js +71 -0
  87. package/dist/verbs/api-surface.js.map +1 -0
  88. package/dist/verbs/conformance.d.ts +3 -0
  89. package/dist/verbs/conformance.d.ts.map +1 -0
  90. package/dist/verbs/conformance.js +33 -0
  91. package/dist/verbs/conformance.js.map +1 -0
  92. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,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,6 +1,8 @@
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";
5
+ import { registerConformance } from "./verbs/conformance.js";
4
6
  import { registerGenerateBriefing } from "./verbs/generate-briefing.js";
5
7
  import { registerInit } from "./verbs/init.js";
6
8
  import { registerList } from "./verbs/list.js";
@@ -48,6 +50,8 @@ function buildProgram() {
48
50
  registerGenerateBriefing(program);
49
51
  registerMcp(program);
50
52
  registerCatalogue(program);
53
+ registerConformance(program);
54
+ registerApiSurface(program);
51
55
  registerPack(program);
52
56
  registerRender(program);
53
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":"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"}
@@ -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"}