@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.
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +124 -0
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +30 -2
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +47 -2
- package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
- package/dist/lib/catalogue/builders/data-store-mapping.d.ts +29 -0
- package/dist/lib/catalogue/builders/data-store-mapping.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/data-store-mapping.js +113 -0
- package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -0
- package/dist/lib/catalogue/builders/entity-persistence.d.ts +22 -0
- package/dist/lib/catalogue/builders/entity-persistence.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/entity-persistence.js +102 -0
- package/dist/lib/catalogue/builders/entity-persistence.js.map +1 -0
- package/dist/lib/catalogue/builders/glossary.d.ts +17 -0
- package/dist/lib/catalogue/builders/glossary.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/glossary.js +54 -0
- package/dist/lib/catalogue/builders/glossary.js.map +1 -1
- package/dist/lib/catalogue/builders/index.d.ts +3 -1
- package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/index.js +2 -1
- package/dist/lib/catalogue/builders/index.js.map +1 -1
- package/dist/lib/catalogue/builders/repositories.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/repositories.js +56 -6
- package/dist/lib/catalogue/builders/repositories.js.map +1 -1
- package/dist/lib/catalogue/builders/service-entity-tables.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/service-entity-tables.js +1 -26
- package/dist/lib/catalogue/builders/service-entity-tables.js.map +1 -1
- package/dist/lib/catalogue/builders/services.d.ts +9 -1
- package/dist/lib/catalogue/builders/services.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/services.js +62 -7
- package/dist/lib/catalogue/builders/services.js.map +1 -1
- package/dist/lib/catalogue/service-architecture-parser.d.ts +20 -0
- package/dist/lib/catalogue/service-architecture-parser.d.ts.map +1 -0
- package/dist/lib/catalogue/service-architecture-parser.js +193 -0
- package/dist/lib/catalogue/service-architecture-parser.js.map +1 -0
- 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
|
-
|
|
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":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,oEAAoE;AACpE,EAAE;AACF,oGAAoG;AACpG,gFAAgF;AAChF,4EAA4E;AAC5E,6CAA6C;AAC7C,8EAA8E;AAC9E,gFAAgF;AAChF,6DAA6D;AAC7D,2EAA2E;AAC3E,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,EAAE;AACF,iDAAiD;AACjD,mEAAmE;AACnE,+DAA+D;AAC/D,+DAA+D;AAC/D,uCAAuC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAI1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
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":"
|
|
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
|
|
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
|
-
|
|
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,
|
|
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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"}
|