@sdd-method/sdd-cli 0.31.3 → 0.34.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 (40) hide show
  1. package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
  2. package/dist/lib/catalogue/aggregate.js +124 -0
  3. package/dist/lib/catalogue/aggregate.js.map +1 -1
  4. package/dist/lib/catalogue/build.d.ts.map +1 -1
  5. package/dist/lib/catalogue/build.js +30 -2
  6. package/dist/lib/catalogue/build.js.map +1 -1
  7. package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
  8. package/dist/lib/catalogue/builders/capabilities.js +47 -2
  9. package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
  10. package/dist/lib/catalogue/builders/data-store-mapping.d.ts +29 -0
  11. package/dist/lib/catalogue/builders/data-store-mapping.d.ts.map +1 -0
  12. package/dist/lib/catalogue/builders/data-store-mapping.js +113 -0
  13. package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -0
  14. package/dist/lib/catalogue/builders/entity-persistence.d.ts +22 -0
  15. package/dist/lib/catalogue/builders/entity-persistence.d.ts.map +1 -0
  16. package/dist/lib/catalogue/builders/entity-persistence.js +102 -0
  17. package/dist/lib/catalogue/builders/entity-persistence.js.map +1 -0
  18. package/dist/lib/catalogue/builders/glossary.d.ts +17 -0
  19. package/dist/lib/catalogue/builders/glossary.d.ts.map +1 -1
  20. package/dist/lib/catalogue/builders/glossary.js +54 -0
  21. package/dist/lib/catalogue/builders/glossary.js.map +1 -1
  22. package/dist/lib/catalogue/builders/index.d.ts +3 -1
  23. package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
  24. package/dist/lib/catalogue/builders/index.js +2 -1
  25. package/dist/lib/catalogue/builders/index.js.map +1 -1
  26. package/dist/lib/catalogue/builders/repositories.d.ts.map +1 -1
  27. package/dist/lib/catalogue/builders/repositories.js +56 -6
  28. package/dist/lib/catalogue/builders/repositories.js.map +1 -1
  29. package/dist/lib/catalogue/builders/service-entity-tables.d.ts.map +1 -1
  30. package/dist/lib/catalogue/builders/service-entity-tables.js +1 -26
  31. package/dist/lib/catalogue/builders/service-entity-tables.js.map +1 -1
  32. package/dist/lib/catalogue/builders/services.d.ts +9 -1
  33. package/dist/lib/catalogue/builders/services.d.ts.map +1 -1
  34. package/dist/lib/catalogue/builders/services.js +62 -7
  35. package/dist/lib/catalogue/builders/services.js.map +1 -1
  36. package/dist/lib/catalogue/service-architecture-parser.d.ts +20 -0
  37. package/dist/lib/catalogue/service-architecture-parser.d.ts.map +1 -0
  38. package/dist/lib/catalogue/service-architecture-parser.js +193 -0
  39. package/dist/lib/catalogue/service-architecture-parser.js.map +1 -0
  40. package/package.json +2 -2
@@ -23,7 +23,7 @@ import { readFile } from "node:fs/promises";
23
23
  import { join } from "node:path";
24
24
  import { parse as parseYaml } from "yaml";
25
25
  import { entitySlug } from "./entity-slug.js";
26
- const RE_DATA_STORE_HEADING = /^##\s+Data Store\s+(Mapping|Inventory)\s*$/i;
26
+ import { RE_DATA_STORE_HEADING, collectTableLines, splitRow, } from "./data-store-mapping.js";
27
27
  const ALIAS_REL_PATH = join("docs", "platform", "reference", "service-name-aliases.yaml");
28
28
  export async function buildServiceEntityFromTables(inputs) {
29
29
  const aliasMap = await loadAliasMap(inputs.sddPath, inputs.findings);
@@ -184,29 +184,4 @@ function resolveService(display, alias, serviceIdBySlugName, serviceIdByTrailSeg
184
184
  return byTrail;
185
185
  return undefined;
186
186
  }
187
- function splitRow(line) {
188
- // Strip leading/trailing `|`, split on `|`, trim cells.
189
- const trimmed = line.trim();
190
- const parts = trimmed.split("|");
191
- // Drop the empty cells from leading/trailing `|`.
192
- return parts.slice(1, parts.length - 1).map((c) => c.trim());
193
- }
194
- function collectTableLines(lines, startIdx) {
195
- let i = startIdx;
196
- while (i < lines.length) {
197
- const l = lines[i] ?? "";
198
- if (l.startsWith("## "))
199
- return null;
200
- if (l.trimStart().startsWith("|")) {
201
- const out = [];
202
- while (i < lines.length && lines[i].trimStart().startsWith("|")) {
203
- out.push(lines[i]);
204
- i++;
205
- }
206
- return out;
207
- }
208
- i++;
209
- }
210
- return null;
211
- }
212
187
  //# sourceMappingURL=service-entity-tables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-entity-tables.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/service-entity-tables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-entity-tables.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/service-entity-tables.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,14 @@ export interface ServicesBuildInputs {
10
10
  readonly repositories: readonly CatalogueRow[];
11
11
  /** Product id for the SDD itself. */
12
12
  readonly productId: string;
13
+ /** SDD repo root — used to read per-service service-architecture.md. */
14
+ readonly sddPath: string;
15
+ /**
16
+ * Forward-method `description` source: repo slug → repo-config
17
+ * `description:`. Wins over the reverse `## Purpose` when both present
18
+ * (ADR 0163 P1). Optional — reverse-method SDDs pass nothing.
19
+ */
20
+ readonly repoDescriptions?: ReadonlyMap<string, string>;
13
21
  }
14
- export declare function buildServices(inputs: ServicesBuildInputs): CatalogueRow[];
22
+ export declare function buildServices(inputs: ServicesBuildInputs): Promise<CatalogueRow[]>;
15
23
  //# sourceMappingURL=services.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/C,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,YAAY,EAAE,CAwBzE"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/C,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC,CAyCzB"}
@@ -7,11 +7,41 @@
7
7
  // `emits_service_row: true`.
8
8
  //
9
9
  // This is a derived catalogue: services are 1:1 with their primary
10
- // repository for the contextua adoption pattern. Adopters whose
10
+ // repository for the contextual adoption pattern. Adopters whose
11
11
  // services span multiple repos may extend this builder later.
12
+ //
13
+ // Per-service metadata (runtime_type, language, status, confidence,
14
+ // description) is read — faithfully, not inferred — from each service's
15
+ // `repos/<id>/docs/service-architecture.md` via the shared
16
+ // service-architecture-parser module.
17
+ //
18
+ // The `description` column has two authoring sources, honoured per the
19
+ // forward/reverse parity principle (ADR 0157, extended to node columns by
20
+ // ADR 0163):
21
+ // - forward: `orchestration/repo-config/<repo>.yaml` `description:` —
22
+ // the deliberate spec, authored by forward-method adopters.
23
+ // - reverse: the arch doc's `## Purpose` lead paragraph.
24
+ // When both are present for the same service the forward repo-config
25
+ // description wins (matching the ADR 0156 / 0162 merge convention) and a
26
+ // `divergence` finding records the conflict. In practice an adopter has
27
+ // only one of the two, so this is usually a plain coalesce.
28
+ //
29
+ // The four reverse-only columns (runtime_type, language, status,
30
+ // confidence) have no forward authoring source; forward-method adopters
31
+ // legitimately leave them empty (they declare service_type + dependencies
32
+ // instead). See catalogue-metamodel.md §Service.
12
33
  import { runtimeServiceTypes, } from "../schema-loader.js";
13
- export function buildServices(inputs) {
34
+ import { EMPTY_METADATA, indexServiceArchitectures, readServiceMetadata, } from "../service-architecture-parser.js";
35
+ export async function buildServices(inputs) {
14
36
  const runtime = runtimeServiceTypes(inputs.schema);
37
+ // Index every service-architecture.md under repos/ by its repo slug (the
38
+ // directory above docs/). The layout is either repos/<repo>/docs/... or
39
+ // repos/<group>/<repo>/docs/..., so a recursive walk is required.
40
+ // Services whose architecture doc lives in a federated member SDD (rather
41
+ // than this SDD's own repos/) resolve to no entry here — their metadata is
42
+ // an aggregation-time concern (ADR 0163 P2), not a local build gap.
43
+ const archIndex = await indexServiceArchitectures(inputs.sddPath);
44
+ const repoDescriptions = inputs.repoDescriptions ?? new Map();
15
45
  const rows = [];
16
46
  for (const repo of inputs.repositories) {
17
47
  const componentType = String(repo["component_type"] ?? "");
@@ -20,21 +50,46 @@ export function buildServices(inputs) {
20
50
  const repoId = String(repo["id"] ?? "");
21
51
  if (repoId === "")
22
52
  continue;
53
+ const archPath = archIndex.get(repoId);
54
+ const meta = archPath
55
+ ? await readServiceMetadata(archPath)
56
+ : EMPTY_METADATA;
23
57
  rows.push({
24
58
  id: repoId,
25
59
  name: repoId,
26
60
  product_id: inputs.productId,
27
61
  domain_id: String(repo["domain_id"] ?? ""),
28
62
  primary_repo_id: repoId,
29
- runtime_type: "",
30
- language: "",
63
+ runtime_type: meta.runtime_type,
64
+ language: meta.language,
31
65
  component_type: componentType,
32
- status: "",
33
- confidence: "",
34
- description: "",
66
+ status: meta.status,
67
+ confidence: meta.confidence,
68
+ description: coalesceDescription(repoId, repoDescriptions.get(repoId) ?? "", meta.description, inputs.findings),
35
69
  source_sdd_id: "",
36
70
  });
37
71
  }
38
72
  return rows;
39
73
  }
74
+ /**
75
+ * Coalesce the forward (repo-config) and reverse (## Purpose) description
76
+ * sources. Forward wins when both are present; a `divergence` finding
77
+ * records the conflict so authors can reconcile. Whitespace-only values
78
+ * are treated as empty. Single-quotes/newlines normalised away for the
79
+ * comparison so cosmetic reformatting doesn't trip the finding.
80
+ */
81
+ function coalesceDescription(serviceId, forward, reverse, findings) {
82
+ const f = forward.trim();
83
+ const r = reverse.trim();
84
+ if (f === "")
85
+ return r;
86
+ if (r !== "" && normalise(f) !== normalise(r)) {
87
+ findings.add("divergence", `services: "${serviceId}" description differs between repo-config (forward) ` +
88
+ `and service-architecture.md ## Purpose (reverse) — repo-config kept`);
89
+ }
90
+ return f;
91
+ }
92
+ function normalise(s) {
93
+ return s.replace(/\s+/g, " ").trim().toLowerCase();
94
+ }
40
95
  //# sourceMappingURL=services.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,wDAAwD;AACxD,EAAE;AACF,oDAAoD;AACpD,mEAAmE;AACnE,oDAAoD;AACpD,6BAA6B;AAC7B,EAAE;AACF,mEAAmE;AACnE,gEAAgE;AAChE,8DAA8D;AAK9D,OAAO,EAEL,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAAE,SAAS;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,EAAE;YAAE,SAAS;QAC5B,IAAI,CAAC,IAAI,CAAC;YACR,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC1C,eAAe,EAAE,MAAM;YACvB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,aAAa;YAC7B,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,EAAE;SAClB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ServiceMetadata {
2
+ readonly runtime_type: string;
3
+ readonly language: string;
4
+ readonly status: string;
5
+ readonly confidence: string;
6
+ readonly description: string;
7
+ }
8
+ export declare const EMPTY_METADATA: ServiceMetadata;
9
+ /**
10
+ * Walk `<sddPath>/repos/` and index every service-architecture.md by its
11
+ * repo slug — the directory name immediately above `docs/`. Handles both
12
+ * the flat (`repos/<repo>/docs/`) and grouped (`repos/<group>/<repo>/docs/`)
13
+ * layouts. First match wins (deterministic via readdir + walk order).
14
+ */
15
+ export declare function indexServiceArchitectures(sddPath: string): Promise<Map<string, string>>;
16
+ /** Read and parse a service-architecture.md from disk. */
17
+ export declare function readServiceMetadata(archPath: string): Promise<ServiceMetadata>;
18
+ /** Parse the three metadata blocks out of service-architecture.md text. */
19
+ export declare function parseServiceArchitecture(text: string): ServiceMetadata;
20
+ //# sourceMappingURL=service-architecture-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-architecture-parser.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/service-architecture-parser.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,cAAc,EAAE,eAM5B,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6B9B;AAED,0DAA0D;AAC1D,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAatE"}
@@ -0,0 +1,193 @@
1
+ // Shared parser for per-service `repos/<id>/docs/service-architecture.md`.
2
+ //
3
+ // Extracted from builders/services.ts so two callers can share it:
4
+ // - the per-SDD services builder (buildServices), and
5
+ // - the aggregator's federated reverse-metadata enrichment pass
6
+ // (ADR 0163 P2), which reaches member SDDs' arch docs that the
7
+ // platform-root's own build never sees.
8
+ //
9
+ // The metadata is read faithfully — not inferred — from three blocks:
10
+ // - `## Runtime / Build Shape` table `Primary runtime` → runtime_type
11
+ // (+ a derived language token).
12
+ // - `## Operational Status` table `Classification` → status,
13
+ // `Confidence` → confidence (emitted out-of-band by an adopter's
14
+ // derive-operational-evidence script).
15
+ // - `## Purpose` lead paragraph → description.
16
+ import { readdir, readFile } from "node:fs/promises";
17
+ import { join } from "node:path";
18
+ const REPOS_DIR_REL = "repos";
19
+ const SERVICE_ARCHITECTURE_REL = join("docs", "service-architecture.md");
20
+ export const EMPTY_METADATA = {
21
+ runtime_type: "",
22
+ language: "",
23
+ status: "",
24
+ confidence: "",
25
+ description: "",
26
+ };
27
+ /**
28
+ * Walk `<sddPath>/repos/` and index every service-architecture.md by its
29
+ * repo slug — the directory name immediately above `docs/`. Handles both
30
+ * the flat (`repos/<repo>/docs/`) and grouped (`repos/<group>/<repo>/docs/`)
31
+ * layouts. First match wins (deterministic via readdir + walk order).
32
+ */
33
+ export async function indexServiceArchitectures(sddPath) {
34
+ const index = new Map();
35
+ const reposDir = join(sddPath, REPOS_DIR_REL);
36
+ async function walk(dir) {
37
+ let entries;
38
+ try {
39
+ entries = await readdir(dir, { withFileTypes: true });
40
+ }
41
+ catch {
42
+ return;
43
+ }
44
+ for (const entry of entries) {
45
+ if (!entry.isDirectory())
46
+ continue;
47
+ const child = join(dir, entry.name);
48
+ const archPath = join(child, SERVICE_ARCHITECTURE_REL);
49
+ try {
50
+ const docs = await readdir(join(child, "docs"));
51
+ if (docs.includes("service-architecture.md")) {
52
+ if (!index.has(entry.name))
53
+ index.set(entry.name, archPath);
54
+ }
55
+ }
56
+ catch {
57
+ // no docs/ here — keep descending for the grouped layout.
58
+ }
59
+ await walk(child);
60
+ }
61
+ }
62
+ await walk(reposDir);
63
+ return index;
64
+ }
65
+ /** Read and parse a service-architecture.md from disk. */
66
+ export async function readServiceMetadata(archPath) {
67
+ let text;
68
+ try {
69
+ text = await readFile(archPath, "utf-8");
70
+ }
71
+ catch (err) {
72
+ if (err.code === "ENOENT")
73
+ return EMPTY_METADATA;
74
+ throw err;
75
+ }
76
+ return parseServiceArchitecture(text);
77
+ }
78
+ /** Parse the three metadata blocks out of service-architecture.md text. */
79
+ export function parseServiceArchitecture(text) {
80
+ const buildShape = parseKeyValueTable(text, /^##\s+Runtime\s*\/\s*Build Shape\b/i);
81
+ const opsStatus = parseKeyValueTable(text, /^##\s+Operational Status\b/i);
82
+ const primaryRuntime = buildShape.get("primary runtime") ?? "";
83
+ return {
84
+ runtime_type: primaryRuntime,
85
+ language: deriveLanguage(primaryRuntime),
86
+ // Strip markdown bold from the classification cell (e.g. **library**).
87
+ status: stripEmphasis(opsStatus.get("classification") ?? ""),
88
+ confidence: stripEmphasis(opsStatus.get("confidence") ?? ""),
89
+ description: parseLeadParagraph(text, /^##\s+Purpose\b/i),
90
+ };
91
+ }
92
+ /**
93
+ * Parse a two-column markdown table (`| key | value |`) that follows the
94
+ * first heading matching `headingRe`, returning a lowercased-key → value
95
+ * map. Header and separator rows are skipped. Stops at the next heading or
96
+ * the end of the table block.
97
+ */
98
+ function parseKeyValueTable(text, headingRe) {
99
+ const out = new Map();
100
+ const lines = text.split(/\r?\n/);
101
+ let inSection = false;
102
+ let seenTable = false;
103
+ for (const line of lines) {
104
+ const t = line.trim();
105
+ if (!inSection) {
106
+ if (headingRe.test(t))
107
+ inSection = true;
108
+ continue;
109
+ }
110
+ if (t.startsWith("#"))
111
+ break; // next heading ends the section
112
+ const isRow = t.startsWith("|") && t.endsWith("|");
113
+ if (!isRow) {
114
+ if (seenTable)
115
+ break; // table block ended
116
+ continue;
117
+ }
118
+ seenTable = true;
119
+ const cells = t
120
+ .slice(1, -1)
121
+ .split("|")
122
+ .map((c) => c.trim());
123
+ if (cells.length < 2)
124
+ continue;
125
+ const key = cells[0].toLowerCase();
126
+ // Skip header row ("aspect"/"field") and separator row (---).
127
+ if (key === "" || /^:?-+:?$/.test(key) || key === "aspect" || key === "field") {
128
+ continue;
129
+ }
130
+ out.set(key, cells[1]);
131
+ }
132
+ return out;
133
+ }
134
+ /**
135
+ * First non-empty paragraph block after the heading matching `headingRe`,
136
+ * lines joined with single spaces. "" when the heading is absent.
137
+ */
138
+ function parseLeadParagraph(text, headingRe) {
139
+ const lines = text.split(/\r?\n/);
140
+ let inSection = false;
141
+ const paragraph = [];
142
+ for (const line of lines) {
143
+ const t = line.trim();
144
+ if (!inSection) {
145
+ if (headingRe.test(t))
146
+ inSection = true;
147
+ continue;
148
+ }
149
+ if (t.startsWith("#"))
150
+ break;
151
+ if (t === "") {
152
+ if (paragraph.length > 0)
153
+ break;
154
+ continue;
155
+ }
156
+ paragraph.push(t);
157
+ }
158
+ return paragraph.join(" ");
159
+ }
160
+ function stripEmphasis(s) {
161
+ return s.replace(/\*\*/g, "").replace(/^_+|_+$/g, "").trim();
162
+ }
163
+ /**
164
+ * Derive a language token from a "Primary runtime" value such as
165
+ * "Java 8", "Node.js 18 / AWS Lambda", "Terraform ~> 1.3",
166
+ * "Vue 3 / TypeScript". Returns "" when nothing recognisable matches.
167
+ */
168
+ function deriveLanguage(primaryRuntime) {
169
+ const s = primaryRuntime.toLowerCase();
170
+ if (s === "")
171
+ return "";
172
+ // Order matters: more specific signals first.
173
+ if (/\btypescript\b/.test(s))
174
+ return "TypeScript";
175
+ if (/\bvue\b/.test(s))
176
+ return "TypeScript";
177
+ if (/\bnode(\.js)?\b/.test(s))
178
+ return "JavaScript";
179
+ if (/\bjava\b/.test(s))
180
+ return "Java";
181
+ if (/\bkotlin\b/.test(s))
182
+ return "Kotlin";
183
+ if (/\bterraform\b/.test(s))
184
+ return "HCL";
185
+ if (/\bpython\b|\bsynapse\b/.test(s))
186
+ return "Python";
187
+ if (/\bgo(lang)?\b/.test(s))
188
+ return "Go";
189
+ if (/\.net\b|\bc#\b|\bdotnet\b/.test(s))
190
+ return "C#";
191
+ return "";
192
+ }
193
+ //# sourceMappingURL=service-architecture-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-architecture-parser.js","sourceRoot":"","sources":["../../../src/lib/catalogue/service-architecture-parser.ts"],"names":[],"mappings":"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"}