@sdd-method/sdd-cli 2.5.0 → 4.0.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/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/behaviour-store/archive.d.ts +12 -0
- package/dist/lib/behaviour-store/archive.d.ts.map +1 -1
- package/dist/lib/behaviour-store/archive.js +13 -0
- package/dist/lib/behaviour-store/archive.js.map +1 -1
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +64 -0
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts +3 -1
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +45 -2
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/adr-governs.d.ts +4 -0
- package/dist/lib/catalogue/builders/adr-governs.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/adr-governs.js +39 -0
- package/dist/lib/catalogue/builders/adr-governs.js.map +1 -0
- package/dist/lib/catalogue/builders/adrs.d.ts +2 -0
- package/dist/lib/catalogue/builders/adrs.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/adrs.js +11 -0
- package/dist/lib/catalogue/builders/adrs.js.map +1 -1
- package/dist/lib/catalogue/builders/capability-spec.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/capability-spec.js +1 -0
- package/dist/lib/catalogue/builders/capability-spec.js.map +1 -1
- package/dist/lib/catalogue/builders/contract-revisions.d.ts +12 -0
- package/dist/lib/catalogue/builders/contract-revisions.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/contract-revisions.js +126 -0
- package/dist/lib/catalogue/builders/contract-revisions.js.map +1 -0
- package/dist/lib/catalogue/builders/data-model.d.ts +73 -0
- package/dist/lib/catalogue/builders/data-model.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/data-model.js +316 -0
- package/dist/lib/catalogue/builders/data-model.js.map +1 -0
- package/dist/lib/catalogue/builders/entities-mermaid.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/entities-mermaid.js +18 -85
- package/dist/lib/catalogue/builders/entities-mermaid.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-grounding.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/feature-grounding.js +1 -0
- package/dist/lib/catalogue/builders/feature-grounding.js.map +1 -1
- package/dist/lib/catalogue/builders/features.d.ts +12 -0
- package/dist/lib/catalogue/builders/features.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/features.js +23 -2
- package/dist/lib/catalogue/builders/features.js.map +1 -1
- package/dist/lib/catalogue/builders/integration-components.js +49 -5
- package/dist/lib/catalogue/builders/integration-components.js.map +1 -1
- package/dist/lib/catalogue/builders/journey-requirement.d.ts +22 -0
- package/dist/lib/catalogue/builders/journey-requirement.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/journey-requirement.js +144 -0
- package/dist/lib/catalogue/builders/journey-requirement.js.map +1 -0
- package/dist/lib/catalogue/builders/quality-scores.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/quality-scores.js +17 -0
- package/dist/lib/catalogue/builders/quality-scores.js.map +1 -1
- package/dist/lib/catalogue/builders/requirements.d.ts +15 -3
- package/dist/lib/catalogue/builders/requirements.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/requirements.js +168 -32
- package/dist/lib/catalogue/builders/requirements.js.map +1 -1
- package/dist/lib/catalogue/canonical-schema.yaml +845 -28
- package/dist/lib/catalogue/manifest-loader.d.ts +5 -0
- package/dist/lib/catalogue/manifest-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/manifest-loader.js +13 -0
- package/dist/lib/catalogue/manifest-loader.js.map +1 -1
- package/dist/lib/catalogue/retired-catalogues.d.ts +6 -0
- package/dist/lib/catalogue/retired-catalogues.d.ts.map +1 -0
- package/dist/lib/catalogue/retired-catalogues.js +25 -0
- package/dist/lib/catalogue/retired-catalogues.js.map +1 -0
- package/dist/lib/catalogue/rubric-coverage-map.yaml +108 -2
- package/dist/lib/catalogue/schema-compat.d.ts +1 -1
- package/dist/lib/catalogue/schema-compat.js +1 -1
- package/dist/lib/catalogue/schema-loader.d.ts +6 -0
- package/dist/lib/catalogue/schema-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/schema-loader.js +3 -0
- package/dist/lib/catalogue/schema-loader.js.map +1 -1
- package/dist/lib/catalogue/staleness-verdicts.d.ts.map +1 -1
- package/dist/lib/catalogue/staleness-verdicts.js +75 -6
- package/dist/lib/catalogue/staleness-verdicts.js.map +1 -1
- package/dist/lib/intents/migrate.d.ts.map +1 -1
- package/dist/lib/intents/migrate.js +35 -9
- package/dist/lib/intents/migrate.js.map +1 -1
- package/dist/lib/metamodel/roundtrip-gate.d.ts.map +1 -1
- package/dist/lib/metamodel/roundtrip-gate.js +11 -2
- package/dist/lib/metamodel/roundtrip-gate.js.map +1 -1
- package/dist/lib/metamodel/schema-projection.d.ts +6 -0
- package/dist/lib/metamodel/schema-projection.d.ts.map +1 -1
- package/dist/lib/metamodel/schema-projection.js +40 -1
- package/dist/lib/metamodel/schema-projection.js.map +1 -1
- package/dist/lib/metamodel/tql-subset-parser.d.ts +6 -0
- package/dist/lib/metamodel/tql-subset-parser.d.ts.map +1 -1
- package/dist/lib/metamodel/tql-subset-parser.js +35 -2
- package/dist/lib/metamodel/tql-subset-parser.js.map +1 -1
- package/dist/lib/structure/apply.d.ts +8 -0
- package/dist/lib/structure/apply.d.ts.map +1 -0
- package/dist/lib/structure/apply.js +71 -0
- package/dist/lib/structure/apply.js.map +1 -0
- package/dist/lib/structure/archive.d.ts +21 -0
- package/dist/lib/structure/archive.d.ts.map +1 -0
- package/dist/lib/structure/archive.js +318 -0
- package/dist/lib/structure/archive.js.map +1 -0
- package/dist/lib/structure/catalogue.d.ts +33 -0
- package/dist/lib/structure/catalogue.d.ts.map +1 -0
- package/dist/lib/structure/catalogue.js +183 -0
- package/dist/lib/structure/catalogue.js.map +1 -0
- package/dist/lib/structure/compose.d.ts +30 -0
- package/dist/lib/structure/compose.d.ts.map +1 -0
- package/dist/lib/structure/compose.js +174 -0
- package/dist/lib/structure/compose.js.map +1 -0
- package/dist/lib/structure/effects.d.ts +16 -0
- package/dist/lib/structure/effects.d.ts.map +1 -0
- package/dist/lib/structure/effects.js +36 -0
- package/dist/lib/structure/effects.js.map +1 -0
- package/dist/lib/structure/extract.d.ts +19 -0
- package/dist/lib/structure/extract.d.ts.map +1 -0
- package/dist/lib/structure/extract.js +123 -0
- package/dist/lib/structure/extract.js.map +1 -0
- package/dist/lib/structure/model.d.ts +57 -0
- package/dist/lib/structure/model.d.ts.map +1 -0
- package/dist/lib/structure/model.js +212 -0
- package/dist/lib/structure/model.js.map +1 -0
- package/dist/lib/structure/render.d.ts +11 -0
- package/dist/lib/structure/render.d.ts.map +1 -0
- package/dist/lib/structure/render.js +242 -0
- package/dist/lib/structure/render.js.map +1 -0
- package/dist/lib/structure/view.d.ts +36 -0
- package/dist/lib/structure/view.d.ts.map +1 -0
- package/dist/lib/structure/view.js +301 -0
- package/dist/lib/structure/view.js.map +1 -0
- package/dist/lib/validate/agreement-evidence.d.ts +58 -0
- package/dist/lib/validate/agreement-evidence.d.ts.map +1 -0
- package/dist/lib/validate/agreement-evidence.js +216 -0
- package/dist/lib/validate/agreement-evidence.js.map +1 -0
- package/dist/lib/validate/behaviour-store.d.ts +22 -1
- package/dist/lib/validate/behaviour-store.d.ts.map +1 -1
- package/dist/lib/validate/behaviour-store.js +516 -28
- package/dist/lib/validate/behaviour-store.js.map +1 -1
- package/dist/lib/validate/dispatch.d.ts.map +1 -1
- package/dist/lib/validate/dispatch.js +21 -0
- package/dist/lib/validate/dispatch.js.map +1 -1
- package/dist/lib/validate/feature-spec-pointers.d.ts +12 -0
- package/dist/lib/validate/feature-spec-pointers.d.ts.map +1 -0
- package/dist/lib/validate/feature-spec-pointers.js +175 -0
- package/dist/lib/validate/feature-spec-pointers.js.map +1 -0
- package/dist/lib/validate/journey-impact.d.ts +10 -0
- package/dist/lib/validate/journey-impact.d.ts.map +1 -0
- package/dist/lib/validate/journey-impact.js +193 -0
- package/dist/lib/validate/journey-impact.js.map +1 -0
- package/dist/lib/validate/structural-model.d.ts +11 -0
- package/dist/lib/validate/structural-model.d.ts.map +1 -0
- package/dist/lib/validate/structural-model.js +265 -0
- package/dist/lib/validate/structural-model.js.map +1 -0
- package/dist/maintain-version.json +2 -2
- package/dist/verbs/change.d.ts +3 -0
- package/dist/verbs/change.d.ts.map +1 -0
- package/dist/verbs/change.js +15 -0
- package/dist/verbs/change.js.map +1 -0
- package/dist/verbs/structure.d.ts +10 -0
- package/dist/verbs/structure.d.ts.map +1 -0
- package/dist/verbs/structure.js +124 -0
- package/dist/verbs/structure.js.map +1 -0
- package/dist/verify-version.json +2 -2
- package/package.json +1 -1
- package/scripts/author-version.json +2 -2
- package/scripts/build-persona-package.mjs +5 -0
- package/scripts/maintain-version.json +2 -2
- package/scripts/verify-version.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-revisions.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/contract-revisions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { CatalogueRow } from "../csv-writer.js";
|
|
2
|
+
import type { FindingsLog } from "../findings.js";
|
|
3
|
+
export type EndCardinality = "exactly-one" | "zero-or-one" | "one-or-more" | "zero-or-more";
|
|
4
|
+
export interface ParsedAttribute {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly type: string;
|
|
7
|
+
readonly primaryKey: boolean;
|
|
8
|
+
readonly unique: boolean;
|
|
9
|
+
readonly foreignKey: boolean;
|
|
10
|
+
/** true, false, or undefined where the model does not say. */
|
|
11
|
+
readonly nullable: boolean | undefined;
|
|
12
|
+
readonly description: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ParsedEntity {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly attributes: readonly ParsedAttribute[];
|
|
17
|
+
/** Lines of the entity's block that are not blank or comments: the catalogue's `columns=N`. */
|
|
18
|
+
readonly columnCount: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ParsedRelationship {
|
|
21
|
+
/** The entities as the model names them. */
|
|
22
|
+
readonly from: string;
|
|
23
|
+
readonly to: string;
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly fromCardinality: EndCardinality;
|
|
26
|
+
readonly toCardinality: EndCardinality;
|
|
27
|
+
readonly fromRole: string;
|
|
28
|
+
readonly toRole: string;
|
|
29
|
+
/** A role's @card, stated as a cardinality invariant on the relationship (TypeQL only). */
|
|
30
|
+
readonly roleCards: readonly string[];
|
|
31
|
+
}
|
|
32
|
+
export interface ParsedDataModel {
|
|
33
|
+
readonly entities: readonly ParsedEntity[];
|
|
34
|
+
readonly relationships: readonly ParsedRelationship[];
|
|
35
|
+
/** What the parser read and could not hold, each located. */
|
|
36
|
+
readonly unread: readonly string[];
|
|
37
|
+
/** An entity block left open at the end of the file. */
|
|
38
|
+
readonly unclosed: string | null;
|
|
39
|
+
}
|
|
40
|
+
/** Parse every erDiagram fence of a Mermaid data-model file. `where` locates what is reported. */
|
|
41
|
+
export declare function parseMermaidDataModel(text: string, where: string): ParsedDataModel;
|
|
42
|
+
/** Parse a TypeQL data model in the documented subset. A file outside the subset is refused whole, located. */
|
|
43
|
+
export declare function parseTypeqlDataModel(text: string, where: string): ParsedDataModel | {
|
|
44
|
+
readonly refused: string;
|
|
45
|
+
};
|
|
46
|
+
export interface DataModelSource {
|
|
47
|
+
/** The domain_models row's id. */
|
|
48
|
+
readonly id: string;
|
|
49
|
+
readonly domainId: string;
|
|
50
|
+
readonly docPath: string;
|
|
51
|
+
readonly parsed: ParsedDataModel;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read and parse each domain model a domain_models row names. A missing file contributes nothing (the domain-models
|
|
55
|
+
* builder reports it); a TypeQL file outside the subset contributes nothing (the entities builder reports it).
|
|
56
|
+
*/
|
|
57
|
+
export declare function readDataModelSources(sddPath: string, models: ReadonlyArray<{
|
|
58
|
+
readonly id: string;
|
|
59
|
+
readonly domainId: string;
|
|
60
|
+
readonly docPath: string;
|
|
61
|
+
}>): Promise<DataModelSource[]>;
|
|
62
|
+
export interface DataModelElements {
|
|
63
|
+
readonly entityAttributes: CatalogueRow[];
|
|
64
|
+
readonly entityRelationships: CatalogueRow[];
|
|
65
|
+
readonly domainInvariants: CatalogueRow[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The attribute, relationship and invariant rows of every parsed model, against the entities catalogue as built. An
|
|
69
|
+
* entity this build did not catalogue contributes nothing; a relationship names an entity of its own domain, else the
|
|
70
|
+
* one entity of that name in another, else it is reported.
|
|
71
|
+
*/
|
|
72
|
+
export declare function buildDataModelElements(sources: readonly DataModelSource[], entities: readonly CatalogueRow[], findings: FindingsLog): DataModelElements;
|
|
73
|
+
//# sourceMappingURL=data-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-model.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/data-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
// A domain model's content, parsed whole (M-ADR 0230 §4.3, §4.11 proof 7, Proposed; schema 6.0.0). One parser per
|
|
2
|
+
// notation, shared by every reader of the file: the entities builder takes its entities from here, and this module
|
|
3
|
+
// builds entity_attributes, entity_relationships and domain_invariants from the same parse.
|
|
4
|
+
//
|
|
5
|
+
// Mermaid ER (`data-model.mermaid.md`, every ```mermaid fence opening with erDiagram):
|
|
6
|
+
// ENTITY { an entity block; ENTITY { type a; type b } on one line is one too
|
|
7
|
+
// type name [PK|FK|UK|PK_FK[, ...]] ["comment"]
|
|
8
|
+
// }
|
|
9
|
+
// A <end>--<end> B : label a relationship; each end marker || |o o| }| |{ }o o{ is one of four cardinalities;
|
|
10
|
+
// `..` (non-identifying) is read as `--`, and reported
|
|
11
|
+
// TypeQL, in the documented subset (M-ADR 0210 §4.2, `data-model.tql`), through the fail-closed parseTypes:
|
|
12
|
+
// an entity's owned attributes (@key, @card), and each binary relation as a relationship between its two roles'
|
|
13
|
+
// players, roles kept. The subset admits no participation cardinality, so both ends are zero-or-more, and a role's
|
|
14
|
+
// own @card is a cardinality invariant on the relationship.
|
|
15
|
+
// The keys become invariants: a primary key (PK, @key) is one unique invariant over its attributes, which are not
|
|
16
|
+
// nullable; a UK is a unique invariant over its attribute. What a parser reads and cannot hold is an `extraction`
|
|
17
|
+
// finding, never a silent skip.
|
|
18
|
+
import { readFile } from "node:fs/promises";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import { ParseError, parseTypes } from "../../metamodel/tql-subset-parser.js";
|
|
21
|
+
import { entitySlug } from "./entity-slug.js";
|
|
22
|
+
const RE_MERMAID_OPEN = /^```\s*mermaid\s*$/i;
|
|
23
|
+
const RE_FENCE_CLOSE = /^```\s*$/;
|
|
24
|
+
const RE_COMMENT = /^\s*%%/;
|
|
25
|
+
const RE_ENTITY_OPEN = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s*\{\s*$/;
|
|
26
|
+
const RE_ENTITY_INLINE = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s*\{(.*)\}\s*$/;
|
|
27
|
+
const RE_ATTRIBUTE = /^\s*([A-Za-z_][\w[\]~(),.<>-]*)\s+([A-Za-z_*][\w.-]*)\s*((?:PK_FK|PK|FK|UK)(?:\s*,\s*(?:PK_FK|PK|FK|UK))*)?\s*(?:"([^"]*)")?\s*$/;
|
|
28
|
+
const RE_RELATIONSHIP = /^\s*([A-Za-z_][\w-]*)\s+(\|\||\|o|o\||\}\||\}o)(--|\.\.)(\|\||o\||\|o|\|\{|o\{)\s+([A-Za-z_][\w-]*)\s*:\s*(.+?)\s*$/;
|
|
29
|
+
const RE_BARE_ENTITY = /^\s*[A-Za-z_][\w-]*\s*$/;
|
|
30
|
+
const MERMAID_KEYWORDS = new Set(["erdiagram", "subgraph", "classdef", "style", "class"]);
|
|
31
|
+
const END = {
|
|
32
|
+
"||": "exactly-one",
|
|
33
|
+
"|o": "zero-or-one",
|
|
34
|
+
"o|": "zero-or-one",
|
|
35
|
+
"}|": "one-or-more",
|
|
36
|
+
"|{": "one-or-more",
|
|
37
|
+
"}o": "zero-or-more",
|
|
38
|
+
"o{": "zero-or-more",
|
|
39
|
+
};
|
|
40
|
+
function mermaidAttribute(text) {
|
|
41
|
+
const m = RE_ATTRIBUTE.exec(text);
|
|
42
|
+
if (!m)
|
|
43
|
+
return null;
|
|
44
|
+
const keys = new Set((m[3] ?? "").split(",").map((k) => k.trim()).flatMap((k) => (k === "PK_FK" ? ["PK", "FK"] : k === "" ? [] : [k])));
|
|
45
|
+
const description = m[4] ?? "";
|
|
46
|
+
const primaryKey = keys.has("PK");
|
|
47
|
+
const nullable = primaryKey ? false : /^nullable\b/i.test(description.trim()) ? true : undefined;
|
|
48
|
+
return { name: m[2].replace(/^\*/, ""), type: m[1], primaryKey, unique: keys.has("UK"), foreignKey: keys.has("FK"), nullable, description };
|
|
49
|
+
}
|
|
50
|
+
/** Parse every erDiagram fence of a Mermaid data-model file. `where` locates what is reported. */
|
|
51
|
+
export function parseMermaidDataModel(text, where) {
|
|
52
|
+
const lines = text.split(/\r?\n/);
|
|
53
|
+
const entities = [];
|
|
54
|
+
const relationships = [];
|
|
55
|
+
const unread = [];
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
let inMermaid = false;
|
|
58
|
+
let isEr = false;
|
|
59
|
+
let firstKeywordSeen = false;
|
|
60
|
+
let open = null;
|
|
61
|
+
const close = (e) => {
|
|
62
|
+
const slug = entitySlug(e.name);
|
|
63
|
+
if (seen.has(slug))
|
|
64
|
+
return; // a later block naming the entity again: the first declaration stands
|
|
65
|
+
seen.add(slug);
|
|
66
|
+
entities.push(e);
|
|
67
|
+
};
|
|
68
|
+
for (let i = 0; i < lines.length; i++) {
|
|
69
|
+
const raw = lines[i] ?? "";
|
|
70
|
+
const at = `${where}:${i + 1}`;
|
|
71
|
+
if (!inMermaid) {
|
|
72
|
+
if (RE_MERMAID_OPEN.test(raw)) {
|
|
73
|
+
inMermaid = true;
|
|
74
|
+
isEr = false;
|
|
75
|
+
firstKeywordSeen = false;
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (RE_FENCE_CLOSE.test(raw)) {
|
|
80
|
+
inMermaid = false;
|
|
81
|
+
open = null; // a block the fence cut off is dropped, as the entities builder always has
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const stripped = raw.trim();
|
|
85
|
+
if (!firstKeywordSeen && stripped !== "" && !RE_COMMENT.test(raw)) {
|
|
86
|
+
firstKeywordSeen = true;
|
|
87
|
+
isEr = stripped.toLowerCase().startsWith("erdiagram");
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (!isEr || stripped === "" || RE_COMMENT.test(raw))
|
|
91
|
+
continue;
|
|
92
|
+
if (open) {
|
|
93
|
+
if (stripped.startsWith("}")) {
|
|
94
|
+
close(open);
|
|
95
|
+
open = null;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
open.columnCount++;
|
|
99
|
+
const a = mermaidAttribute(raw);
|
|
100
|
+
if (a)
|
|
101
|
+
open.attributes.push(a);
|
|
102
|
+
else
|
|
103
|
+
unread.push(`${at}: an attribute line of ${open.name} not understood: ${JSON.stringify(stripped)}`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const rel = RE_RELATIONSHIP.exec(raw);
|
|
107
|
+
if (rel) {
|
|
108
|
+
if (rel[3] === "..")
|
|
109
|
+
unread.push(`${at}: a non-identifying relationship (..), read as identifying: ${JSON.stringify(stripped)}`);
|
|
110
|
+
relationships.push({
|
|
111
|
+
from: rel[1],
|
|
112
|
+
to: rel[5],
|
|
113
|
+
name: rel[6].replace(/^"(.*)"$/, "$1").trim(),
|
|
114
|
+
fromCardinality: END[rel[2]],
|
|
115
|
+
toCardinality: END[rel[4]],
|
|
116
|
+
fromRole: "",
|
|
117
|
+
toRole: "",
|
|
118
|
+
roleCards: [],
|
|
119
|
+
});
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const inline = RE_ENTITY_INLINE.exec(raw);
|
|
123
|
+
if (inline && !MERMAID_KEYWORDS.has(inline[1].toLowerCase())) {
|
|
124
|
+
const parts = inline[2].split(";").map((p) => p.trim()).filter((p) => p !== "");
|
|
125
|
+
const attributes = [];
|
|
126
|
+
for (const p of parts) {
|
|
127
|
+
const a = mermaidAttribute(p);
|
|
128
|
+
if (a)
|
|
129
|
+
attributes.push(a);
|
|
130
|
+
else
|
|
131
|
+
unread.push(`${at}: an attribute of ${inline[1]} not understood: ${JSON.stringify(p)}`);
|
|
132
|
+
}
|
|
133
|
+
close({ name: inline[1], attributes, columnCount: parts.length });
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const m = RE_ENTITY_OPEN.exec(raw);
|
|
137
|
+
if (m && !MERMAID_KEYWORDS.has(m[1].toLowerCase())) {
|
|
138
|
+
open = { name: m[1], attributes: [], columnCount: 0 };
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (RE_BARE_ENTITY.test(raw) && !MERMAID_KEYWORDS.has(stripped.toLowerCase())) {
|
|
142
|
+
unread.push(`${at}: an entity named without a block (${stripped}); it is catalogued only where a block declares it`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
unread.push(`${at}: a line not understood: ${JSON.stringify(stripped)}`);
|
|
146
|
+
}
|
|
147
|
+
return { entities, relationships, unread, unclosed: open?.name ?? null };
|
|
148
|
+
}
|
|
149
|
+
/** Parse a TypeQL data model in the documented subset. A file outside the subset is refused whole, located. */
|
|
150
|
+
export function parseTypeqlDataModel(text, where) {
|
|
151
|
+
let t;
|
|
152
|
+
try {
|
|
153
|
+
t = parseTypes(text, where, { singlePlayer: false });
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
if (e instanceof ParseError)
|
|
157
|
+
return { refused: e.message };
|
|
158
|
+
throw e;
|
|
159
|
+
}
|
|
160
|
+
const unread = [];
|
|
161
|
+
const entities = [];
|
|
162
|
+
for (const [label, d] of t.entities) {
|
|
163
|
+
const attributes = [];
|
|
164
|
+
for (const [attr, ann] of d.owns) {
|
|
165
|
+
if (ann.multi)
|
|
166
|
+
unread.push(`${where}: ${label} owns ${attr} @card(0..), a multi-valued attribute; the model holds one value per attribute`);
|
|
167
|
+
attributes.push({
|
|
168
|
+
name: attr,
|
|
169
|
+
type: t.attrs.get(attr) ?? "",
|
|
170
|
+
primaryKey: ann.key,
|
|
171
|
+
unique: false,
|
|
172
|
+
foreignKey: false,
|
|
173
|
+
// TypeDB's default for an ownership is @card(0..1)
|
|
174
|
+
nullable: ann.key || ann.required ? false : true,
|
|
175
|
+
description: "",
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
entities.push({ name: label, attributes, columnCount: attributes.length });
|
|
179
|
+
}
|
|
180
|
+
const relationships = [];
|
|
181
|
+
for (const [label, d] of t.relations) {
|
|
182
|
+
const roles = [...d.relates.keys()];
|
|
183
|
+
if (d.owns.size > 0)
|
|
184
|
+
unread.push(`${where}: relation ${label} owns attributes (${[...d.owns.keys()].join(", ")}); the model holds no attributes on a relationship`);
|
|
185
|
+
if (roles.length !== 2) {
|
|
186
|
+
unread.push(`${where}: relation ${label} relates ${roles.length} role(s); the model holds binary relationships only`);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const [a, b] = roles;
|
|
190
|
+
const playersOf = (role) => (t.playersAll.get(`${label}:${role}`) ?? []).filter((p) => {
|
|
191
|
+
if (t.entities.has(p))
|
|
192
|
+
return true;
|
|
193
|
+
unread.push(`${where}: relation ${p} plays ${label}:${role}; the model relates entities only`);
|
|
194
|
+
return false;
|
|
195
|
+
});
|
|
196
|
+
const cards = [...d.relates].flatMap(([role, ann]) => ann.required ? [`each ${label} relates exactly one ${role}`] : ann.optional ? [`each ${label} relates at most one ${role}`] : []);
|
|
197
|
+
for (const from of playersOf(a)) {
|
|
198
|
+
for (const to of playersOf(b)) {
|
|
199
|
+
relationships.push({ from, to, name: label, fromCardinality: "zero-or-more", toCardinality: "zero-or-more", fromRole: a, toRole: b, roleCards: cards });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return { entities, relationships, unread, unclosed: null };
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Read and parse each domain model a domain_models row names. A missing file contributes nothing (the domain-models
|
|
207
|
+
* builder reports it); a TypeQL file outside the subset contributes nothing (the entities builder reports it).
|
|
208
|
+
*/
|
|
209
|
+
export async function readDataModelSources(sddPath, models) {
|
|
210
|
+
const out = [];
|
|
211
|
+
for (const m of models) {
|
|
212
|
+
const tql = m.docPath.endsWith(".tql");
|
|
213
|
+
if (!tql && !m.docPath.endsWith(".mermaid.md"))
|
|
214
|
+
continue;
|
|
215
|
+
const text = await readFile(m.docPath.startsWith("/") ? m.docPath : join(sddPath, m.docPath), "utf8").catch(() => null);
|
|
216
|
+
if (text === null)
|
|
217
|
+
continue;
|
|
218
|
+
const parsed = tql ? parseTypeqlDataModel(text, m.docPath) : parseMermaidDataModel(text, m.docPath);
|
|
219
|
+
if ("refused" in parsed)
|
|
220
|
+
continue; // the entities builder reports the refusal
|
|
221
|
+
out.push({ ...m, parsed });
|
|
222
|
+
}
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* The attribute, relationship and invariant rows of every parsed model, against the entities catalogue as built. An
|
|
227
|
+
* entity this build did not catalogue contributes nothing; a relationship names an entity of its own domain, else the
|
|
228
|
+
* one entity of that name in another, else it is reported.
|
|
229
|
+
*/
|
|
230
|
+
export function buildDataModelElements(sources, entities, findings) {
|
|
231
|
+
const attributes = [];
|
|
232
|
+
const relationships = [];
|
|
233
|
+
const invariants = [];
|
|
234
|
+
const entityIds = new Set(entities.map((e) => String(e["id"])));
|
|
235
|
+
const bySlug = new Map();
|
|
236
|
+
for (const e of entities) {
|
|
237
|
+
const id = String(e["id"]);
|
|
238
|
+
const domain = String(e["domain_id"] ?? "");
|
|
239
|
+
if (domain === "" || !id.startsWith(`${domain}-`))
|
|
240
|
+
continue;
|
|
241
|
+
const slug = id.slice(domain.length + 1);
|
|
242
|
+
bySlug.set(slug, [...(bySlug.get(slug) ?? []), id]);
|
|
243
|
+
}
|
|
244
|
+
const resolve = (domainId, name) => {
|
|
245
|
+
const own = `${domainId}-${entitySlug(name)}`;
|
|
246
|
+
if (entityIds.has(own))
|
|
247
|
+
return own;
|
|
248
|
+
const elsewhere = bySlug.get(entitySlug(name)) ?? [];
|
|
249
|
+
return elsewhere.length === 1 ? elsewhere[0] : null;
|
|
250
|
+
};
|
|
251
|
+
const seenAttr = new Set();
|
|
252
|
+
const seenRel = new Set();
|
|
253
|
+
for (const s of sources) {
|
|
254
|
+
for (const u of s.parsed.unread)
|
|
255
|
+
findings.add("extraction", u, "warn", s.docPath);
|
|
256
|
+
for (const e of s.parsed.entities) {
|
|
257
|
+
const entityId = `${s.domainId}-${entitySlug(e.name)}`;
|
|
258
|
+
if (!entityIds.has(entityId))
|
|
259
|
+
continue;
|
|
260
|
+
const pk = [];
|
|
261
|
+
for (const a of e.attributes) {
|
|
262
|
+
const id = `${entityId}__${entitySlug(a.name) || a.name.toLowerCase()}`;
|
|
263
|
+
if (seenAttr.has(id)) {
|
|
264
|
+
findings.add("extraction", `${s.docPath}: ${e.name}.${a.name} is stated twice; the first stands`, "warn", s.docPath);
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
seenAttr.add(id);
|
|
268
|
+
attributes.push({
|
|
269
|
+
id,
|
|
270
|
+
entity_id: entityId,
|
|
271
|
+
name: a.name,
|
|
272
|
+
type: a.type,
|
|
273
|
+
nullable: a.nullable,
|
|
274
|
+
foreign_key: a.foreignKey ? true : undefined,
|
|
275
|
+
description: a.description,
|
|
276
|
+
});
|
|
277
|
+
if (a.primaryKey)
|
|
278
|
+
pk.push(id);
|
|
279
|
+
if (a.unique)
|
|
280
|
+
invariants.push({ id: `${id}__unique`, entity_id: entityId, kind: "unique", attribute_ids: id, statement: `${a.name} is unique among ${e.name} (UK)` });
|
|
281
|
+
}
|
|
282
|
+
if (pk.length > 0) {
|
|
283
|
+
const names = e.attributes.filter((a) => a.primaryKey).map((a) => a.name);
|
|
284
|
+
invariants.push({ id: `${entityId}__primary-key`, entity_id: entityId, kind: "unique", attribute_ids: pk.join(";"), statement: `${names.join(" and ")} identif${names.length === 1 ? "ies" : "y"} each ${e.name} (primary key)` });
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
for (const r of s.parsed.relationships) {
|
|
288
|
+
const from = resolve(s.domainId, r.from);
|
|
289
|
+
const to = resolve(s.domainId, r.to);
|
|
290
|
+
if (from === null || to === null) {
|
|
291
|
+
const missing = [from === null ? r.from : null, to === null ? r.to : null].filter((x) => x !== null).join(" and ");
|
|
292
|
+
findings.add("extraction", `${s.docPath}: the relationship ${r.from} ${r.name} ${r.to} names ${missing}, which no catalogued entity matches (in its domain, or once elsewhere); not catalogued`, "warn", s.docPath);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
const id = `${from}__${entitySlug(r.name) || "related"}__${to}`;
|
|
296
|
+
if (seenRel.has(id)) {
|
|
297
|
+
findings.add("extraction", `${s.docPath}: the relationship ${r.from} ${r.name} ${r.to} is stated twice; the first stands`, "warn", s.docPath);
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
seenRel.add(id);
|
|
301
|
+
relationships.push({
|
|
302
|
+
id,
|
|
303
|
+
from_entity_id: from,
|
|
304
|
+
to_entity_id: to,
|
|
305
|
+
name: r.name,
|
|
306
|
+
from_cardinality: r.fromCardinality,
|
|
307
|
+
to_cardinality: r.toCardinality,
|
|
308
|
+
from_role: r.fromRole,
|
|
309
|
+
to_role: r.toRole,
|
|
310
|
+
});
|
|
311
|
+
r.roleCards.forEach((statement, i) => invariants.push({ id: `${id}__cardinality-${i + 1}`, entity_id: from, kind: "cardinality", relationship_id: id, statement }));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return { entityAttributes: attributes, entityRelationships: relationships, domainInvariants: invariants };
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=data-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-model.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/data-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities-mermaid.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/entities-mermaid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entities-mermaid.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/entities-mermaid.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnD,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChD;AASD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC,CAwDzB"}
|
|
@@ -14,20 +14,19 @@
|
|
|
14
14
|
// - Files may mix `erDiagram` with other Mermaid diagram types (flowchart,
|
|
15
15
|
// sequenceDiagram). Each fenced block is independently checked for the
|
|
16
16
|
// erDiagram opener; non-ER blocks are skipped.
|
|
17
|
+
// The file is read by the data-model parser (data-model.ts, schema 6.0.0), the
|
|
18
|
+
// one parser every reader of a domain model shares; an entity on one line
|
|
19
|
+
// (`NAME { type a; type b }`) is an entity too, and a `data-model.tql` in the
|
|
20
|
+
// documented TypeQL subset gives its entities the same way.
|
|
17
21
|
import { readFile } from "node:fs/promises";
|
|
22
|
+
import { parseMermaidDataModel, parseTypeqlDataModel } from "./data-model.js";
|
|
18
23
|
import { entitySlug } from "./entity-slug.js";
|
|
19
24
|
import { extractFileEvidenceClass } from "./evidence-class.js";
|
|
20
|
-
const RE_MERMAID_OPEN = /^```\s*mermaid\s*$/i;
|
|
21
|
-
const RE_FENCE_CLOSE = /^```\s*$/;
|
|
22
|
-
const RE_COMMENT = /^\s*%%/;
|
|
23
|
-
const RE_ENTITY_OPEN = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s*\{\s*$/;
|
|
24
|
-
const RE_REL_LINE = /^\s*[A-Za-z_][A-Za-z0-9_]*\s+\|?\|?[o|\-]+\{?\s+[A-Za-z]/;
|
|
25
|
-
const MERMAID_KEYWORDS = new Set(["erdiagram", "subgraph", "classdef", "style", "class"]);
|
|
26
25
|
export async function buildEntitiesFromMermaid(inputs) {
|
|
27
26
|
const rows = [];
|
|
28
27
|
const seenAcrossFiles = new Map(); // id → originating doc_path
|
|
29
28
|
for (const dm of inputs.domainModels) {
|
|
30
|
-
if (!dm.doc_path.endsWith(".mermaid.md"))
|
|
29
|
+
if (!dm.doc_path.endsWith(".mermaid.md") && !dm.doc_path.endsWith(".tql"))
|
|
31
30
|
continue;
|
|
32
31
|
const docPath = dm.doc_path.startsWith("/")
|
|
33
32
|
? dm.doc_path
|
|
@@ -74,87 +73,21 @@ export async function buildEntitiesFromMermaid(inputs) {
|
|
|
74
73
|
return rows;
|
|
75
74
|
}
|
|
76
75
|
function parseFile(text, dm, findings) {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
let isEr = false;
|
|
82
|
-
let firstKeywordSeen = false;
|
|
83
|
-
let inEntity = false;
|
|
84
|
-
let entityName = null;
|
|
85
|
-
let entityColumns = 0;
|
|
86
|
-
for (let i = 0; i < lines.length; i++) {
|
|
87
|
-
const raw = lines[i] ?? "";
|
|
88
|
-
if (!inMermaid) {
|
|
89
|
-
if (RE_MERMAID_OPEN.test(raw)) {
|
|
90
|
-
inMermaid = true;
|
|
91
|
-
isEr = false;
|
|
92
|
-
firstKeywordSeen = false;
|
|
93
|
-
}
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
// in_mermaid == true
|
|
97
|
-
if (RE_FENCE_CLOSE.test(raw)) {
|
|
98
|
-
inMermaid = false;
|
|
99
|
-
isEr = false;
|
|
100
|
-
firstKeywordSeen = false;
|
|
101
|
-
// If we exit mid-entity, drop it silently — malformed block.
|
|
102
|
-
inEntity = false;
|
|
103
|
-
entityName = null;
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
const stripped = raw.trim();
|
|
107
|
-
if (!firstKeywordSeen && stripped !== "" && !RE_COMMENT.test(raw)) {
|
|
108
|
-
firstKeywordSeen = true;
|
|
109
|
-
isEr = stripped.toLowerCase().startsWith("erdiagram");
|
|
110
|
-
}
|
|
111
|
-
if (!isEr)
|
|
112
|
-
continue;
|
|
113
|
-
if (inEntity) {
|
|
114
|
-
if (stripped.startsWith("}")) {
|
|
115
|
-
if (entityName !== null) {
|
|
116
|
-
const slug = entitySlug(entityName);
|
|
117
|
-
if (!seenInFile.has(slug)) {
|
|
118
|
-
seenInFile.add(slug);
|
|
119
|
-
out.push({
|
|
120
|
-
name: entityName,
|
|
121
|
-
domainId: dm.domain_id,
|
|
122
|
-
sourceDomainModelId: dm.id,
|
|
123
|
-
columnCount: entityColumns,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
inEntity = false;
|
|
128
|
-
entityName = null;
|
|
129
|
-
entityColumns = 0;
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
if (RE_COMMENT.test(raw))
|
|
133
|
-
continue;
|
|
134
|
-
if (stripped)
|
|
135
|
-
entityColumns++;
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
// Not in an entity block — look for an opener.
|
|
139
|
-
if (RE_COMMENT.test(raw))
|
|
140
|
-
continue;
|
|
141
|
-
if (RE_REL_LINE.test(raw))
|
|
142
|
-
continue;
|
|
143
|
-
const m = RE_ENTITY_OPEN.exec(raw);
|
|
144
|
-
if (m) {
|
|
145
|
-
const ident = m[1] ?? "";
|
|
146
|
-
if (MERMAID_KEYWORDS.has(ident.toLowerCase()))
|
|
147
|
-
continue;
|
|
148
|
-
entityName = ident;
|
|
149
|
-
inEntity = true;
|
|
150
|
-
entityColumns = 0;
|
|
151
|
-
}
|
|
76
|
+
const parsed = dm.doc_path.endsWith(".tql") ? parseTypeqlDataModel(text, dm.doc_path) : parseMermaidDataModel(text, dm.doc_path);
|
|
77
|
+
if ("refused" in parsed) {
|
|
78
|
+
findings.add("extraction", `entities: ${dm.doc_path} is outside the documented TypeQL subset, so none of its entities is catalogued: ${parsed.refused}`, "warn", dm.doc_path);
|
|
79
|
+
return [];
|
|
152
80
|
}
|
|
153
81
|
// Defensive: if a block ended without closing an entity, log it once.
|
|
154
|
-
if (
|
|
155
|
-
findings.add("convention", `entities-mermaid: ${dm.doc_path}: unclosed entity block for "${
|
|
82
|
+
if (parsed.unclosed !== null) {
|
|
83
|
+
findings.add("convention", `entities-mermaid: ${dm.doc_path}: unclosed entity block for "${parsed.unclosed}" — discarded`);
|
|
156
84
|
}
|
|
157
|
-
return
|
|
85
|
+
return parsed.entities.map((e) => ({
|
|
86
|
+
name: e.name,
|
|
87
|
+
domainId: dm.domain_id,
|
|
88
|
+
sourceDomainModelId: dm.id,
|
|
89
|
+
columnCount: e.columnCount,
|
|
90
|
+
}));
|
|
158
91
|
}
|
|
159
92
|
function resolveGlossaryTermBySlug(entityName, domainId, knownGlossaryIds) {
|
|
160
93
|
const slug = entitySlug(entityName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities-mermaid.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/entities-mermaid.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0FAA0F;AAC1F,mEAAmE;AACnE,EAAE;AACF,kEAAkE;AAClE,+EAA+E;AAC/E,sEAAsE;AACtE,4EAA4E;AAC5E,2EAA2E;AAC3E,2DAA2D;AAC3D,6EAA6E;AAC7E,6EAA6E;AAC7E,oEAAoE;AACpE,2EAA2E;AAC3E,yEAAyE;AACzE,iDAAiD;
|
|
1
|
+
{"version":3,"file":"entities-mermaid.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/entities-mermaid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/feature-grounding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAsB5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,gFAAgF;IAChF,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC;IAChD,2FAA2F;IAC3F,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;IACrC,QAAQ,CAAC,qBAAqB,EAAE,YAAY,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,YAAY,EAAE,CAAC;IAC5C,4FAA4F;IAC5F,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,4BAA4B,EAAE,MAAM,EAAE,CAAC;CACjD;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"feature-grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/feature-grounding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAsB5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,gFAAgF;IAChF,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC;IAChD,2FAA2F;IAC3F,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;IACrC,QAAQ,CAAC,qBAAqB,EAAE,YAAY,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,YAAY,EAAE,CAAC;IAC5C,4FAA4F;IAC5F,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,4BAA4B,EAAE,MAAM,EAAE,CAAC;CACjD;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAyMjC"}
|