@sdd-method/sdd-cli 0.37.0 → 0.39.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/archetype/maps/android.yaml +66 -0
- package/dist/lib/catalogue/archetype/maps/swiftui.yaml +58 -0
- package/dist/lib/catalogue/archetype/maps/uikit.yaml +48 -0
- package/dist/lib/catalogue/archetype/maps/web-generic.yaml +86 -0
- package/dist/lib/catalogue/archetype/openui-archetype-vocabulary.yaml +46 -0
- package/dist/lib/catalogue/archetype/resolver.d.ts +27 -0
- package/dist/lib/catalogue/archetype/resolver.d.ts.map +1 -0
- package/dist/lib/catalogue/archetype/resolver.js +87 -0
- package/dist/lib/catalogue/archetype/resolver.js.map +1 -0
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +12 -1
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/screen-tree.d.ts +27 -0
- package/dist/lib/catalogue/builders/screen-tree.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/screen-tree.js +126 -0
- package/dist/lib/catalogue/builders/screen-tree.js.map +1 -0
- package/dist/lib/catalogue/builders/screens.d.ts +18 -0
- package/dist/lib/catalogue/builders/screens.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/screens.js +64 -2
- package/dist/lib/catalogue/builders/screens.js.map +1 -1
- package/dist/lib/catalogue/findings.d.ts +12 -2
- package/dist/lib/catalogue/findings.d.ts.map +1 -1
- package/dist/lib/catalogue/findings.js +10 -4
- package/dist/lib/catalogue/findings.js.map +1 -1
- package/dist/lib/catalogue/screen-validation-loader.d.ts +45 -0
- package/dist/lib/catalogue/screen-validation-loader.d.ts.map +1 -0
- package/dist/lib/catalogue/screen-validation-loader.js +81 -0
- package/dist/lib/catalogue/screen-validation-loader.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// Screen composition-tree analysis for openui-lang blocks (per ADR 0168).
|
|
2
|
+
//
|
|
3
|
+
// The screens builder (screens.ts) lowers a ```openui-lang block into catalogue
|
|
4
|
+
// rows by flat token-scanning. ADR 0168 adds a *fidelity floor*: the block must
|
|
5
|
+
// be a faithful tree, not a flat / empty / mis-rooted "widget bag". That needs
|
|
6
|
+
// the structural shape the flat scan throws away — so this module parses the
|
|
7
|
+
// block into a tree and computes the metrics the depth findings reason about.
|
|
8
|
+
//
|
|
9
|
+
// Pure functions, no I/O. The metrics reason about TREE SHAPE only — never about
|
|
10
|
+
// any component vocabulary (adopter-agnostic by construction, ADR 0168 §4.5).
|
|
11
|
+
//
|
|
12
|
+
// Grammar recap (ADR 0166 / openui-lang-grammar-reference.md): one
|
|
13
|
+
// `identifier = Expression` statement per line; the first statement is `root`;
|
|
14
|
+
// composition is by identifier reference inside list literals. A component is a
|
|
15
|
+
// Capitalised call head (`Name(`); local references are lowercase ids that are
|
|
16
|
+
// themselves defined as statements.
|
|
17
|
+
/** First Capitalised call head in an expression (the component invoked). */
|
|
18
|
+
const CALL_HEAD_RE = /\b([A-Z][A-Za-z0-9]*)\s*\(/;
|
|
19
|
+
/** All Capitalised call heads (for componentCount). */
|
|
20
|
+
const CALL_HEAD_RE_G = /\b([A-Z][A-Za-z0-9]*)\s*\(/g;
|
|
21
|
+
/** `identifier = Expression`, one per line. */
|
|
22
|
+
const STATEMENT_RE = /^\s*([A-Za-z_][\w-]*)\s*=\s*(.+?)\s*$/;
|
|
23
|
+
/** Quoted string literals (single or double) — stripped before ref detection. */
|
|
24
|
+
const STRING_RE = /"[^"]*"|'[^']*'/g;
|
|
25
|
+
/** Any identifier token. */
|
|
26
|
+
const IDENT_RE = /\b([A-Za-z_][\w-]*)\b/g;
|
|
27
|
+
/**
|
|
28
|
+
* Strip openui-lang inline comments: from the first *unquoted* `#` to
|
|
29
|
+
* end-of-line, per line (ADR 0168 §4.4, defect g). A `Capitalised(` token inside
|
|
30
|
+
* a comment must not be lexed as a component. `#` inside a string literal is
|
|
31
|
+
* preserved.
|
|
32
|
+
*/
|
|
33
|
+
export function stripBlockComments(block) {
|
|
34
|
+
return block
|
|
35
|
+
.split(/\r?\n/)
|
|
36
|
+
.map(stripLineComment)
|
|
37
|
+
.join("\n");
|
|
38
|
+
}
|
|
39
|
+
function stripLineComment(line) {
|
|
40
|
+
let quote = null;
|
|
41
|
+
for (let i = 0; i < line.length; i++) {
|
|
42
|
+
const c = line[i];
|
|
43
|
+
if (quote) {
|
|
44
|
+
if (c === quote)
|
|
45
|
+
quote = null;
|
|
46
|
+
}
|
|
47
|
+
else if (c === '"' || c === "'") {
|
|
48
|
+
quote = c;
|
|
49
|
+
}
|
|
50
|
+
else if (c === "#") {
|
|
51
|
+
return line.slice(0, i);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return line;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Parse a (comment-stripped) openui-lang block into a composition tree and
|
|
58
|
+
* compute its structural metrics. Cycle-safe.
|
|
59
|
+
*/
|
|
60
|
+
export function analyzeComposition(cleanBlock) {
|
|
61
|
+
const statements = new Map();
|
|
62
|
+
const order = [];
|
|
63
|
+
for (const raw of cleanBlock.split(/\r?\n/)) {
|
|
64
|
+
const m = STATEMENT_RE.exec(raw);
|
|
65
|
+
if (!m)
|
|
66
|
+
continue;
|
|
67
|
+
const id = m[1];
|
|
68
|
+
const rhs = m[2];
|
|
69
|
+
if (!statements.has(id))
|
|
70
|
+
order.push(id);
|
|
71
|
+
// Last assignment wins (re-declaration is unusual; keep it deterministic).
|
|
72
|
+
statements.set(id, { id, rhs, head: CALL_HEAD_RE.exec(rhs)?.[1] ?? "", childIds: [] });
|
|
73
|
+
}
|
|
74
|
+
const definedIds = new Set(statements.keys());
|
|
75
|
+
const containers = new Set();
|
|
76
|
+
// Resolve child references: a defined id (other than self) appearing in the
|
|
77
|
+
// expression, after stripping string literals so quoted text can't match.
|
|
78
|
+
for (const st of statements.values()) {
|
|
79
|
+
const noStrings = st.rhs.replace(STRING_RE, "");
|
|
80
|
+
const refs = new Set();
|
|
81
|
+
for (const tok of noStrings.matchAll(IDENT_RE)) {
|
|
82
|
+
const name = tok[1];
|
|
83
|
+
if (name !== st.id && definedIds.has(name))
|
|
84
|
+
refs.add(name);
|
|
85
|
+
}
|
|
86
|
+
st.childIds = [...refs];
|
|
87
|
+
if (st.head && st.childIds.length > 0)
|
|
88
|
+
containers.add(st.head);
|
|
89
|
+
}
|
|
90
|
+
// componentCount: distinct Capitalised call heads across the block (strings
|
|
91
|
+
// stripped so a `"Foo("` inside a literal is not counted).
|
|
92
|
+
const heads = new Set();
|
|
93
|
+
for (const tok of cleanBlock.replace(STRING_RE, "").matchAll(CALL_HEAD_RE_G)) {
|
|
94
|
+
heads.add(tok[1]);
|
|
95
|
+
}
|
|
96
|
+
const componentCount = heads.size;
|
|
97
|
+
const rootId = order[0];
|
|
98
|
+
if (rootId === undefined) {
|
|
99
|
+
return { maxDepth: 0, maxBreadth: 0, rootChildCount: 0, componentCount, rootComponent: "", containers };
|
|
100
|
+
}
|
|
101
|
+
const rootStmt = statements.get(rootId);
|
|
102
|
+
let maxDepth = 0;
|
|
103
|
+
let maxBreadth = 0;
|
|
104
|
+
const walk = (id, depth, seen) => {
|
|
105
|
+
const st = statements.get(id);
|
|
106
|
+
maxDepth = Math.max(maxDepth, depth);
|
|
107
|
+
if (st === undefined)
|
|
108
|
+
return; // reference to an undefined id → leaf
|
|
109
|
+
maxBreadth = Math.max(maxBreadth, st.childIds.length);
|
|
110
|
+
if (seen.has(id))
|
|
111
|
+
return; // cycle guard
|
|
112
|
+
const next = new Set(seen).add(id);
|
|
113
|
+
for (const child of st.childIds)
|
|
114
|
+
walk(child, depth + 1, next);
|
|
115
|
+
};
|
|
116
|
+
walk(rootId, 0, new Set());
|
|
117
|
+
return {
|
|
118
|
+
maxDepth,
|
|
119
|
+
maxBreadth,
|
|
120
|
+
rootChildCount: rootStmt.childIds.length,
|
|
121
|
+
componentCount,
|
|
122
|
+
rootComponent: rootStmt.head,
|
|
123
|
+
containers,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=screen-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-tree.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/screen-tree.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,EAAE;AACF,mEAAmE;AACnE,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,oCAAoC;AAEpC,4EAA4E;AAC5E,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,uDAAuD;AACvD,MAAM,cAAc,GAAG,6BAA6B,CAAC;AACrD,+CAA+C;AAC/C,MAAM,YAAY,GAAG,uCAAuC,CAAC;AAC7D,iFAAiF;AACjF,MAAM,SAAS,GAAG,kBAAkB,CAAC;AACrC,4BAA4B;AAC5B,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAwB1C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK;SACT,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,gBAAgB,CAAC;SACrB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAClC,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;QAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,2EAA2E;QAC3E,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,4EAA4E;IAC5E,0EAA0E;IAC1E,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;YAC9B,IAAI,IAAI,KAAK,EAAE,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,4EAA4E;IAC5E,2DAA2D;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7E,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAW,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC;IAElC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;IAC1G,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAc,CAAC;IAErD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,IAAyB,EAAQ,EAAE;QAC1E,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,CAAC,sCAAsC;QACpE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,cAAc;QACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAE3B,OAAO;QACL,QAAQ;QACR,UAAU;QACV,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;QACxC,cAAc;QACd,aAAa,EAAE,QAAQ,CAAC,IAAI;QAC5B,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CatalogueRow } from "../csv-writer.js";
|
|
2
2
|
import type { FindingsLog } from "../findings.js";
|
|
3
3
|
import type { Profile } from "../manifest-loader.js";
|
|
4
|
+
import { type ArchetypeOverlay } from "../archetype/resolver.js";
|
|
4
5
|
export interface ScreensBuildInputs {
|
|
5
6
|
readonly sddPath: string;
|
|
6
7
|
readonly findings: FindingsLog;
|
|
@@ -12,6 +13,23 @@ export interface ScreensBuildInputs {
|
|
|
12
13
|
/** Persona id resolution for `persona_access:` -> persona_screen. */
|
|
13
14
|
readonly personaIdBySlug: ReadonlyMap<string, string>;
|
|
14
15
|
readonly personaIdByName: ReadonlyMap<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Flat-composition threshold N (ADR 0168 §4.2): a composition is "flat" when
|
|
18
|
+
* `maxDepth <= 1` and `rootChildCount >= N`. Adopter-tunable with a method
|
|
19
|
+
* default; defaults to 6 when unset.
|
|
20
|
+
*/
|
|
21
|
+
readonly flatThreshold?: number | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Adopter-flagged decorative primitive component names (ADR 0168 §4.2). When
|
|
24
|
+
* a screen composes one of these, `screen-styling-primitive-as-structure`
|
|
25
|
+
* fires. Absent / empty → that check no-ops.
|
|
26
|
+
*/
|
|
27
|
+
readonly decorativePrimitives?: ReadonlySet<string> | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Per-platform archetype overlay (ADR 0169 §4.3), keyed by the screen's
|
|
30
|
+
* `platform:`. Refines the resolver behind `screen-root-is-leaf`.
|
|
31
|
+
*/
|
|
32
|
+
readonly archetypeOverlays?: ReadonlyMap<string, ArchetypeOverlay> | undefined;
|
|
15
33
|
}
|
|
16
34
|
export interface ScreensBuildResult {
|
|
17
35
|
readonly screens: CatalogueRow[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/screens.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,qEAAqE;IACrE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/screens.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,qEAAqE;IACrE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAChE;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC;CAChF;AAOD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;CACvC;AAOD,wBAAsB,YAAY,CAChC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAmI7B"}
|
|
@@ -35,6 +35,12 @@
|
|
|
35
35
|
import { readdir, readFile } from "node:fs/promises";
|
|
36
36
|
import { basename, join } from "node:path";
|
|
37
37
|
import { parse as parseYaml } from "yaml";
|
|
38
|
+
import { analyzeComposition, stripBlockComments } from "./screen-tree.js";
|
|
39
|
+
import { isContainerArchetype } from "../archetype/resolver.js";
|
|
40
|
+
/** Method default for the flat-composition threshold (ADR 0168 §4.2). */
|
|
41
|
+
const DEFAULT_FLAT_THRESHOLD = 6;
|
|
42
|
+
/** The only maturity value that asserts a faithful, complete composition (ADR 0168 §4.3). */
|
|
43
|
+
const COMPLETENESS_STATUS = "working";
|
|
38
44
|
const SCREENS_DIR_REL = "screens";
|
|
39
45
|
// Recognised standard maturity vocabulary (ADR 0165); other values pass through.
|
|
40
46
|
const STANDARD_MATURITY = new Set(["working", "provisional", "unknown", "absent"]);
|
|
@@ -45,6 +51,7 @@ export async function buildScreens(inputs) {
|
|
|
45
51
|
const screenFeature = new Map();
|
|
46
52
|
const personaScreen = new Map();
|
|
47
53
|
const screenAction = new Map();
|
|
54
|
+
const flatThreshold = inputs.flatThreshold ?? DEFAULT_FLAT_THRESHOLD;
|
|
48
55
|
const dir = join(inputs.sddPath, SCREENS_DIR_REL);
|
|
49
56
|
let entries;
|
|
50
57
|
try {
|
|
@@ -86,9 +93,13 @@ export async function buildScreens(inputs) {
|
|
|
86
93
|
inputs.findings.add("coverage", `screens: ${filename} has no \`\`\`openui-lang block — screen emitted, no components`);
|
|
87
94
|
}
|
|
88
95
|
else {
|
|
96
|
+
// Strip inline `#` comments before any scan so a `Capitalised(` token in a
|
|
97
|
+
// comment can't emit a phantom component (ADR 0168 §4.4, defect g).
|
|
98
|
+
const clean = stripBlockComments(block);
|
|
89
99
|
// Component invocations: Capitalised call heads (e.g. Stack(, StatCard().
|
|
90
100
|
// Local id references (lowercase, no parens) and list literals are skipped.
|
|
91
|
-
|
|
101
|
+
const componentNames = new Set(matchAll(clean, /\b([A-Z][A-Za-z0-9]*)\s*\(/g));
|
|
102
|
+
for (const comp of componentNames) {
|
|
92
103
|
const cid = `${inputs.productId}-${screenSlug(comp)}`;
|
|
93
104
|
if (!uiById.has(cid)) {
|
|
94
105
|
uiById.set(cid, {
|
|
@@ -102,7 +113,7 @@ export async function buildScreens(inputs) {
|
|
|
102
113
|
}
|
|
103
114
|
}
|
|
104
115
|
// Action declarations: action="..." (single or double quoted).
|
|
105
|
-
for (const action of new Set(matchAll(
|
|
116
|
+
for (const action of new Set(matchAll(clean, /\baction\s*=\s*["']([^"']+)["']/g))) {
|
|
106
117
|
const aKey = `${screenId}__${screenSlug(action)}`;
|
|
107
118
|
if (!screenAction.has(aKey)) {
|
|
108
119
|
// event_id left empty: external-capable, resolved against the event
|
|
@@ -110,6 +121,19 @@ export async function buildScreens(inputs) {
|
|
|
110
121
|
screenAction.set(aKey, { id: aKey, screen_id: screenId, action, event_id: "", source_sdd_id: "" });
|
|
111
122
|
}
|
|
112
123
|
}
|
|
124
|
+
// Composition-depth validation (ADR 0168): structural fidelity floor +
|
|
125
|
+
// status gate + the archetype-aware root check (ADR 0169). The vocabulary-
|
|
126
|
+
// free checks reason about tree shape + status only; root-is-leaf consults
|
|
127
|
+
// the archetype map when the screen declares a `platform:`.
|
|
128
|
+
const platform = typeof fm.platform === "string" ? fm.platform : undefined;
|
|
129
|
+
const overlay = platform !== undefined ? inputs.archetypeOverlays?.get(platform) : undefined;
|
|
130
|
+
emitDepthFindings(inputs.findings, screenId, status, analyzeComposition(clean), {
|
|
131
|
+
flatThreshold,
|
|
132
|
+
platform,
|
|
133
|
+
overlay,
|
|
134
|
+
componentNames,
|
|
135
|
+
decorativePrimitives: inputs.decorativePrimitives,
|
|
136
|
+
});
|
|
113
137
|
}
|
|
114
138
|
// realises: -> screen_feature
|
|
115
139
|
for (const fref of toList(fm.realises)) {
|
|
@@ -143,6 +167,44 @@ export async function buildScreens(inputs) {
|
|
|
143
167
|
screenAction: [...screenAction.values()],
|
|
144
168
|
};
|
|
145
169
|
}
|
|
170
|
+
function emitDepthFindings(findings, screenId, status, m, ctx) {
|
|
171
|
+
const { flatThreshold, platform, overlay, componentNames, decorativePrimitives } = ctx;
|
|
172
|
+
const empty = m.componentCount <= 1;
|
|
173
|
+
const flat = !empty && m.maxDepth <= 1 && m.rootChildCount >= flatThreshold;
|
|
174
|
+
if (empty) {
|
|
175
|
+
findings.add("coverage", `screen ${screenId}: composition is empty — root has no children (screen-empty-composition)`);
|
|
176
|
+
}
|
|
177
|
+
else if (flat) {
|
|
178
|
+
findings.add("coverage", `screen ${screenId}: composition is flat — root has ${m.rootChildCount} children at depth ${m.maxDepth} (screen-flat-composition)`);
|
|
179
|
+
}
|
|
180
|
+
// Status gate (keystone): `working` is the only maturity that asserts a
|
|
181
|
+
// faithful, complete composition (ADR 0168 §4.3). provisional/unknown/absent
|
|
182
|
+
// make no completeness claim and are not gated.
|
|
183
|
+
if (status === COMPLETENESS_STATUS && (empty || flat)) {
|
|
184
|
+
findings.add("convention", `screen ${screenId}: status "${COMPLETENESS_STATUS}" exceeds composition depth — block is ${empty ? "empty" : "flat"} (screen-status-exceeds-depth)`, "error");
|
|
185
|
+
}
|
|
186
|
+
// Mis-rooted (ADR 0168 §4.2 screen-root-is-leaf, archetype-aware per ADR 0169):
|
|
187
|
+
// root is a leaf/control rather than a screen container. isContainer combines
|
|
188
|
+
// the appears-with-children heuristic (containers) with the archetype map.
|
|
189
|
+
// Only fires when the screen declares a known `platform:` — without a map the
|
|
190
|
+
// heuristic alone can't distinguish an empty container root (Stack([])) from a
|
|
191
|
+
// genuine leaf root (Button([])), so the check no-ops (ADR 0168 §4.5).
|
|
192
|
+
if (m.rootComponent !== "" && m.rootChildCount === 0) {
|
|
193
|
+
const byMap = isContainerArchetype(m.rootComponent, platform, overlay);
|
|
194
|
+
if (byMap === false && !m.containers.has(m.rootComponent)) {
|
|
195
|
+
findings.add("convention", `screen ${screenId}: root component "${m.rootComponent}" is a leaf, not a container (screen-root-is-leaf)`, "error");
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Styling-primitive leakage (ADR 0168 §4.2 screen-styling-primitive-as-structure):
|
|
199
|
+
// an adopter-flagged decorative primitive composed as a structural component.
|
|
200
|
+
// No-ops when the adopter declares no decorative set.
|
|
201
|
+
if (decorativePrimitives !== undefined && decorativePrimitives.size > 0) {
|
|
202
|
+
const leaked = [...componentNames].filter((c) => decorativePrimitives.has(c)).sort();
|
|
203
|
+
if (leaked.length > 0) {
|
|
204
|
+
findings.add("convention", `screen ${screenId}: decorative primitive${leaked.length > 1 ? "s" : ""} ${leaked.map((c) => `"${c}"`).join(", ")} used as structure (screen-styling-primitive-as-structure)`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
146
208
|
function emptyResult() {
|
|
147
209
|
return { screens: [], uiComponents: [], screenComponent: [], screenFeature: [], personaScreen: [], screenAction: [] };
|
|
148
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screens.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/screens.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"screens.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/screens.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,18 +10,28 @@
|
|
|
10
10
|
* categories may be passed as freeform strings if they emerge.
|
|
11
11
|
*/
|
|
12
12
|
export type FindingCategory = "divergence" | "coverage" | "orphan" | "convention" | "inferred" | "external";
|
|
13
|
+
/**
|
|
14
|
+
* Severity governs the build exit code. `warn` (the default) is advisory only;
|
|
15
|
+
* `error` fails the build by default, the same as an internal FK failure
|
|
16
|
+
* (per ADR 0168 — e.g. the screen-spec status gate). Most findings are `warn`;
|
|
17
|
+
* the `--strict` flag escalates every finding to a failure regardless.
|
|
18
|
+
*/
|
|
19
|
+
export type FindingSeverity = "warn" | "error";
|
|
13
20
|
export interface Finding {
|
|
14
21
|
readonly category: FindingCategory | string;
|
|
15
22
|
readonly summary: string;
|
|
23
|
+
readonly severity: FindingSeverity;
|
|
16
24
|
}
|
|
17
25
|
export declare class FindingsLog {
|
|
18
26
|
private readonly findings;
|
|
19
|
-
add(category: FindingCategory | string, summary: string): void;
|
|
27
|
+
add(category: FindingCategory | string, summary: string, severity?: FindingSeverity): void;
|
|
20
28
|
/** Returns a copy of recorded findings, in insertion order. */
|
|
21
29
|
all(): readonly Finding[];
|
|
22
30
|
/** Count findings, optionally filtered to a single category. */
|
|
23
31
|
count(category?: FindingCategory | string): number;
|
|
24
|
-
/**
|
|
32
|
+
/** Count error-severity findings (these fail the build by default). */
|
|
33
|
+
errorCount(): number;
|
|
34
|
+
/** Render every finding as a stdout line. Error-severity findings are marked. */
|
|
25
35
|
render(): string;
|
|
26
36
|
}
|
|
27
37
|
//# sourceMappingURL=findings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,GAAG,CACD,QAAQ,EAAE,eAAe,GAAG,MAAM,EAClC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,eAAwB,GACjC,IAAI;IAIP,+DAA+D;IAC/D,GAAG,IAAI,SAAS,OAAO,EAAE;IAIzB,gEAAgE;IAChE,KAAK,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM;IAKlD,uEAAuE;IACvE,UAAU,IAAI,MAAM;IAIpB,iFAAiF;IACjF,MAAM,IAAI,MAAM;CASjB"}
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export class FindingsLog {
|
|
13
13
|
findings = [];
|
|
14
|
-
add(category, summary) {
|
|
15
|
-
this.findings.push({ category, summary });
|
|
14
|
+
add(category, summary, severity = "warn") {
|
|
15
|
+
this.findings.push({ category, summary, severity });
|
|
16
16
|
}
|
|
17
17
|
/** Returns a copy of recorded findings, in insertion order. */
|
|
18
18
|
all() {
|
|
@@ -24,10 +24,16 @@ export class FindingsLog {
|
|
|
24
24
|
return this.findings.length;
|
|
25
25
|
return this.findings.filter((f) => f.category === category).length;
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/** Count error-severity findings (these fail the build by default). */
|
|
28
|
+
errorCount() {
|
|
29
|
+
return this.findings.filter((f) => f.severity === "error").length;
|
|
30
|
+
}
|
|
31
|
+
/** Render every finding as a stdout line. Error-severity findings are marked. */
|
|
28
32
|
render() {
|
|
29
33
|
return this.findings
|
|
30
|
-
.map((f) =>
|
|
34
|
+
.map((f) => f.severity === "error"
|
|
35
|
+
? `[finding] ${f.category} [error]: ${f.summary}`
|
|
36
|
+
: `[finding] ${f.category}: ${f.summary}`)
|
|
31
37
|
.join("\n");
|
|
32
38
|
}
|
|
33
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwBH,MAAM,OAAO,WAAW;IACL,QAAQ,GAAc,EAAE,CAAC;IAE1C,GAAG,CACD,QAAkC,EAClC,OAAe,EACf,WAA4B,MAAM;QAElC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,+DAA+D;IAC/D,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,QAAmC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,uEAAuE;IACvE,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;IAED,iFAAiF;IACjF,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC,CAAC,QAAQ,KAAK,OAAO;YACpB,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,aAAa,CAAC,CAAC,OAAO,EAAE;YACjD,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAC5C;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader for the optional `.sdd/screen-validation.yaml` config — the
|
|
3
|
+
* adopter-tunable parameters for screen-spec composition-depth validation
|
|
4
|
+
* (ADR 0168 §4.5) and the archetype overlay (ADR 0169 §4.3).
|
|
5
|
+
*
|
|
6
|
+
* Every field is optional and carries a method default; an absent file means
|
|
7
|
+
* "method defaults only" (the vocabulary-free checks all still run). Follows
|
|
8
|
+
* the same shape convention as the `.sdd/*-aliases.yaml` loaders.
|
|
9
|
+
*
|
|
10
|
+
* File shape:
|
|
11
|
+
*
|
|
12
|
+
* flat_threshold: 6 # screen-flat-composition N (default 6)
|
|
13
|
+
* decorative_primitives: # unlocks screen-styling-primitive-as-structure
|
|
14
|
+
* - Spacer
|
|
15
|
+
* - Divider
|
|
16
|
+
* archetype_overlays: # per-platform overlay (ADR 0169 §4.3)
|
|
17
|
+
* web-generic:
|
|
18
|
+
* overrides:
|
|
19
|
+
* VBespokeGrid: grid
|
|
20
|
+
* swiftui:
|
|
21
|
+
* overrides:
|
|
22
|
+
* BrandCard: card
|
|
23
|
+
*
|
|
24
|
+
* The decorative set + the overlays are adopter-owned (vendor-standard defaults
|
|
25
|
+
* ship in the method; bespoke names live here). The checks themselves stay
|
|
26
|
+
* vocabulary-free — they consume these parameters, they don't hardcode them.
|
|
27
|
+
*/
|
|
28
|
+
import type { ArchetypeOverlay } from "./archetype/resolver.js";
|
|
29
|
+
export declare const SCREEN_VALIDATION_REL_PATH: string;
|
|
30
|
+
export interface ScreenValidationConfig {
|
|
31
|
+
/** screen-flat-composition threshold N; undefined → method default (6). */
|
|
32
|
+
readonly flatThreshold?: number | undefined;
|
|
33
|
+
/** Component names the adopter flags as decorative (Spacer, Divider, …). */
|
|
34
|
+
readonly decorativePrimitives: ReadonlySet<string>;
|
|
35
|
+
/** Per-platform archetype overlay (platform → overlay), for the resolver. */
|
|
36
|
+
readonly archetypeOverlays: ReadonlyMap<string, ArchetypeOverlay>;
|
|
37
|
+
/** Path the config was loaded from (relative to SDD root). */
|
|
38
|
+
readonly relPath: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Load the optional screen-validation config. Returns `null` when the file is
|
|
42
|
+
* absent — callers apply method defaults. Throws on malformed YAML.
|
|
43
|
+
*/
|
|
44
|
+
export declare function loadScreenValidationConfig(sddPath: string): Promise<ScreenValidationConfig | null>;
|
|
45
|
+
//# sourceMappingURL=screen-validation-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-validation-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/screen-validation-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,0BAA0B,QAAyC,CAAC;AAEjF,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,4EAA4E;IAC5E,QAAQ,CAAC,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,6EAA6E;IAC7E,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAClE,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAQD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAoCxC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader for the optional `.sdd/screen-validation.yaml` config — the
|
|
3
|
+
* adopter-tunable parameters for screen-spec composition-depth validation
|
|
4
|
+
* (ADR 0168 §4.5) and the archetype overlay (ADR 0169 §4.3).
|
|
5
|
+
*
|
|
6
|
+
* Every field is optional and carries a method default; an absent file means
|
|
7
|
+
* "method defaults only" (the vocabulary-free checks all still run). Follows
|
|
8
|
+
* the same shape convention as the `.sdd/*-aliases.yaml` loaders.
|
|
9
|
+
*
|
|
10
|
+
* File shape:
|
|
11
|
+
*
|
|
12
|
+
* flat_threshold: 6 # screen-flat-composition N (default 6)
|
|
13
|
+
* decorative_primitives: # unlocks screen-styling-primitive-as-structure
|
|
14
|
+
* - Spacer
|
|
15
|
+
* - Divider
|
|
16
|
+
* archetype_overlays: # per-platform overlay (ADR 0169 §4.3)
|
|
17
|
+
* web-generic:
|
|
18
|
+
* overrides:
|
|
19
|
+
* VBespokeGrid: grid
|
|
20
|
+
* swiftui:
|
|
21
|
+
* overrides:
|
|
22
|
+
* BrandCard: card
|
|
23
|
+
*
|
|
24
|
+
* The decorative set + the overlays are adopter-owned (vendor-standard defaults
|
|
25
|
+
* ship in the method; bespoke names live here). The checks themselves stay
|
|
26
|
+
* vocabulary-free — they consume these parameters, they don't hardcode them.
|
|
27
|
+
*/
|
|
28
|
+
import { readFile } from "node:fs/promises";
|
|
29
|
+
import { join } from "node:path";
|
|
30
|
+
import { parse as parseYaml } from "yaml";
|
|
31
|
+
export const SCREEN_VALIDATION_REL_PATH = join(".sdd", "screen-validation.yaml");
|
|
32
|
+
/**
|
|
33
|
+
* Load the optional screen-validation config. Returns `null` when the file is
|
|
34
|
+
* absent — callers apply method defaults. Throws on malformed YAML.
|
|
35
|
+
*/
|
|
36
|
+
export async function loadScreenValidationConfig(sddPath) {
|
|
37
|
+
const full = join(sddPath, SCREEN_VALIDATION_REL_PATH);
|
|
38
|
+
let text;
|
|
39
|
+
try {
|
|
40
|
+
text = await readFile(full, "utf-8");
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err.code === "ENOENT")
|
|
44
|
+
return null;
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
const raw = parseYaml(text);
|
|
48
|
+
if (raw === null || typeof raw !== "object") {
|
|
49
|
+
throw new Error(`${SCREEN_VALIDATION_REL_PATH}: expected a mapping at the document root`);
|
|
50
|
+
}
|
|
51
|
+
const flatThreshold = typeof raw.flat_threshold === "number" && Number.isFinite(raw.flat_threshold) && raw.flat_threshold > 0
|
|
52
|
+
? raw.flat_threshold
|
|
53
|
+
: undefined;
|
|
54
|
+
const decorativePrimitives = new Set();
|
|
55
|
+
if (Array.isArray(raw.decorative_primitives)) {
|
|
56
|
+
for (const v of raw.decorative_primitives) {
|
|
57
|
+
if (typeof v === "string" && v !== "")
|
|
58
|
+
decorativePrimitives.add(v);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const archetypeOverlays = new Map();
|
|
62
|
+
if (raw.archetype_overlays !== null && typeof raw.archetype_overlays === "object" && !Array.isArray(raw.archetype_overlays)) {
|
|
63
|
+
for (const [platform, body] of Object.entries(raw.archetype_overlays)) {
|
|
64
|
+
const overrides = toStringMap(body?.overrides);
|
|
65
|
+
if (Object.keys(overrides).length > 0)
|
|
66
|
+
archetypeOverlays.set(platform, { overrides });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { flatThreshold, decorativePrimitives, archetypeOverlays, relPath: SCREEN_VALIDATION_REL_PATH };
|
|
70
|
+
}
|
|
71
|
+
function toStringMap(raw) {
|
|
72
|
+
const out = {};
|
|
73
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
74
|
+
return out;
|
|
75
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
76
|
+
if (typeof v === "string" && v !== "")
|
|
77
|
+
out[k] = v;
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=screen-validation-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-validation-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/screen-validation-loader.ts"],"names":[],"mappings":"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"}
|