@beehexa/hexasync-template-report-render 2608.7.4 → 2608.15.1
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/flowChart.d.ts +32 -1
- package/dist/flowChart.d.ts.map +1 -1
- package/dist/flowChart.js +118 -313
- package/dist/flowChart.js.map +1 -1
- package/dist/renderValidation.d.ts.map +1 -1
- package/dist/renderValidation.js +54 -3
- package/dist/renderValidation.js.map +1 -1
- package/dist/renderValidationHtml.d.ts.map +1 -1
- package/dist/renderValidationHtml.js +42 -3
- package/dist/renderValidationHtml.js.map +1 -1
- package/package.json +6 -4
package/dist/flowChart.d.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { ComponentFlow, FlowStep } from '@beehexa/hexasync-template-report-model';
|
|
2
|
+
/**
|
|
3
|
+
* Build a Mermaid `flowchart LR` for a puller/pusher's step phases, mirroring the
|
|
4
|
+
* conventions dashboard-v2 uses in its Sync Logs → Flow tab:
|
|
5
|
+
* - one subgraph per non-empty phase (`beforePullSteps`, `pullSteps`, …),
|
|
6
|
+
* - one rectangle node per step (label = step `name` falling back to `key`),
|
|
7
|
+
* - edges driven by each step's `next` (string key, `{if,then,else}` object, or
|
|
8
|
+
* a Scriban expression referencing quoted step keys),
|
|
9
|
+
* - phases chained entry-to-entry so the overall order reads left-to-right.
|
|
10
|
+
* Pure string formatting — no I/O.
|
|
11
|
+
*/
|
|
2
12
|
/** Step keys quoted inside a Scriban/expression string (e.g. `"SAVE_ORDER"`). */
|
|
3
13
|
/**
|
|
4
14
|
* The step keys a routing EXPRESSION can name — every quoted identifier in it.
|
|
@@ -46,6 +56,27 @@ export interface FlowEdge {
|
|
|
46
56
|
* * an empty or absent route is the end of the flow, and yields no edge.
|
|
47
57
|
*/
|
|
48
58
|
export declare function flowEdges(steps: readonly FlowStep[]): readonly FlowEdge[];
|
|
49
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* The report's chart, drawn by the SHARED flow models (Story 4.6, AC-1).
|
|
61
|
+
*
|
|
62
|
+
* ⛔ This file used to draw it — `buildPhase`, `buildCreationMermaid`, `mermaidId`, `escapeLabel`, the phase-chaining
|
|
63
|
+
* loop, ~310 lines. That was the third of three implementations answering *"what is this component's flow?"*, and this
|
|
64
|
+
* epic exists because the three disagreed. The editor swapped in Story 4.5; this is the report.
|
|
65
|
+
*
|
|
66
|
+
* The evidence that it mattered is this file's own history: `escapeLabel` had to be fixed for `<` and `&` in Story 4.4's
|
|
67
|
+
* review **separately** from the identical fix in the flow packages, because the golden suite — the one named "holds the
|
|
68
|
+
* consumers to one answer" — renders through those packages and could not see this emitter. One emitter cannot drift
|
|
69
|
+
* from itself.
|
|
70
|
+
*
|
|
71
|
+
* Direction is preserved PER RUNTIME, exactly as shipped: `LR` for a puller/pusher, the shared default `TD` for a
|
|
72
|
+
* creation workflow. The retired emitter drew them that way — its own docblock said *"a `flowchart TD`"* of
|
|
73
|
+
* `creationSteps` — and the report's stylesheet gives the puller/pusher chart a horizontally scrolling box that a
|
|
74
|
+
* creation workflow's tall branch tree does not want. Direction is a presentation choice the renderer already takes as
|
|
75
|
+
* an argument, which is what separates a styling option from a second geometry; unifying the two would have been a
|
|
76
|
+
* visible change to the shipped report that no AC asks for.
|
|
77
|
+
*
|
|
78
|
+
* A flow with no `source` renders the empty node rather than a legacy chart: there is no second emitter left to fall
|
|
79
|
+
* back to, and drawing a diagram from the `phases` projection is exactly what this change removes.
|
|
80
|
+
*/
|
|
50
81
|
export declare function buildMermaid(flow: ComponentFlow): string;
|
|
51
82
|
//# sourceMappingURL=flowChart.d.ts.map
|
package/dist/flowChart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowChart.d.ts","sourceRoot":"","sources":["../src/flowChart.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,QAAQ,EACT,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"flowChart.d.ts","sourceRoot":"","sources":["../src/flowChart.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,QAAQ,EACT,MAAM,yCAAyC,CAAC;AAWjD;;;;;;;;;GASG;AAEH,iFAAiF;AACjF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjD;AAED;mBACmB;AACnB,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;GAOG;AACH,wCAAwC;AACxC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,QAAQ,EAAE,CAqGzE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CA6DxD"}
|
package/dist/flowChart.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { workerFlow, renderMermaid as renderWorkerMermaid, } from '@beehexa/hexasync-template-worker-flow';
|
|
2
|
+
import { frontendFlow, renderMermaid as renderFrontendMermaid, } from '@beehexa/hexasync-template-frontend-flow';
|
|
1
3
|
/**
|
|
2
4
|
* Build a Mermaid `flowchart LR` for a puller/pusher's step phases, mirroring the
|
|
3
5
|
* conventions dashboard-v2 uses in its Sync Logs → Flow tab:
|
|
@@ -8,22 +10,6 @@
|
|
|
8
10
|
* - phases chained entry-to-entry so the overall order reads left-to-right.
|
|
9
11
|
* Pure string formatting — no I/O.
|
|
10
12
|
*/
|
|
11
|
-
/** Sanitize a value into a Mermaid-safe node/subgraph id. */
|
|
12
|
-
function mermaidId(value) {
|
|
13
|
-
return value.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
14
|
-
}
|
|
15
|
-
/** Escape a value for use inside a quoted Mermaid label. Only `"` (which would close
|
|
16
|
-
* the quoted label) and newlines need escaping — braces/pipes render fine inside a
|
|
17
|
-
* quoted label, whereas HTML numeric entities (`{`) are mangled by Mermaid. This
|
|
18
|
-
* matters for raw Scriban expression labels, which contain `{{ … | … }}`. */
|
|
19
|
-
function escapeLabel(value) {
|
|
20
|
-
return String(value ?? '')
|
|
21
|
-
.replace(/"/g, '"')
|
|
22
|
-
.replace(/\r?\n/g, ' ');
|
|
23
|
-
}
|
|
24
|
-
function nodeId(phaseKey, stepKey) {
|
|
25
|
-
return `${mermaidId(phaseKey)}_${mermaidId(stepKey)}`;
|
|
26
|
-
}
|
|
27
13
|
/** Step keys quoted inside a Scriban/expression string (e.g. `"SAVE_ORDER"`). */
|
|
28
14
|
/**
|
|
29
15
|
* The step keys a routing EXPRESSION can name — every quoted identifier in it.
|
|
@@ -45,166 +31,6 @@ export function quotedKeys(expr) {
|
|
|
45
31
|
export function looksLikeExpression(s) {
|
|
46
32
|
return s.includes('{{') || s.includes('}}') || /"[A-Za-z0-9_]+"/.test(s);
|
|
47
33
|
}
|
|
48
|
-
function buildPhase(phaseKey, steps,
|
|
49
|
-
/**
|
|
50
|
-
* Kept in the signature, unused since the IF/SWITCH-via-`data` routing was ungated (2026-08-06).
|
|
51
|
-
*
|
|
52
|
-
* The callers pass it and the flag still means something to the model, so removing it from the signature
|
|
53
|
-
* would be a wider change than the fix; naming it `_newKind` records that nothing here reads it any more.
|
|
54
|
-
*/
|
|
55
|
-
_newKind = false) {
|
|
56
|
-
const nodeLines = [];
|
|
57
|
-
const edgeLines = [];
|
|
58
|
-
const seenEdges = new Set();
|
|
59
|
-
const byKey = new Map(steps.map((s) => [s.key, s]));
|
|
60
|
-
let diamondSeq = 0;
|
|
61
|
-
const pushEdge = (line) => {
|
|
62
|
-
if (!seenEdges.has(line)) {
|
|
63
|
-
seenEdges.add(line);
|
|
64
|
-
edgeLines.push(line);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
for (const step of steps) {
|
|
68
|
-
nodeLines.push(` ${nodeId(phaseKey, step.key)}["${escapeLabel(step.label)}"]`);
|
|
69
|
-
}
|
|
70
|
-
/** Resolve a target key to a node id, synthesizing a stadium for an unknown target
|
|
71
|
-
* (e.g. a cross-phase onError / fromStep reference). New-kind only. */
|
|
72
|
-
const targetNode = (k) => {
|
|
73
|
-
if (byKey.has(k))
|
|
74
|
-
return nodeId(phaseKey, k);
|
|
75
|
-
const uId = `${mermaidId(phaseKey)}_UNK_${mermaidId(k)}`;
|
|
76
|
-
const decl = ` ${uId}(["${escapeLabel(k)}"])`;
|
|
77
|
-
if (!nodeLines.includes(decl))
|
|
78
|
-
nodeLines.push(decl);
|
|
79
|
-
return uId;
|
|
80
|
-
};
|
|
81
|
-
/** Draw a labeled edge from a node to a (possibly synthesized) target. New-kind only. */
|
|
82
|
-
const linkLabeled = (fromId, next, label) => {
|
|
83
|
-
if (next == null || next === '')
|
|
84
|
-
return;
|
|
85
|
-
if (typeof next === 'object') {
|
|
86
|
-
linkFrom(fromId, next);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
pushEdge(` ${fromId} -->|"${escapeLabel(label)}"| ${targetNode(String(next))}`);
|
|
90
|
-
};
|
|
91
|
-
const linkFrom = (fromId, next) => {
|
|
92
|
-
if (next == null || next === '')
|
|
93
|
-
return;
|
|
94
|
-
// Hierarchical conditional: { if, then, else } → diamond with YES/NO branches.
|
|
95
|
-
if (typeof next === 'object') {
|
|
96
|
-
const cond = next;
|
|
97
|
-
const dId = `${mermaidId(phaseKey)}_D_${++diamondSeq}`;
|
|
98
|
-
nodeLines.push(` ${dId}{"${escapeLabel(cond.if ?? '?')}"}`);
|
|
99
|
-
pushEdge(` ${fromId} --> ${dId}`);
|
|
100
|
-
if (typeof cond.then === 'string' && byKey.has(cond.then)) {
|
|
101
|
-
pushEdge(` ${dId} -->|"YES"| ${nodeId(phaseKey, cond.then)}`);
|
|
102
|
-
}
|
|
103
|
-
else if (cond.then && typeof cond.then === 'object') {
|
|
104
|
-
linkFrom(dId, cond.then);
|
|
105
|
-
}
|
|
106
|
-
if (typeof cond.else === 'string' && byKey.has(cond.else)) {
|
|
107
|
-
pushEdge(` ${dId} -->|"NO"| ${nodeId(phaseKey, cond.else)}`);
|
|
108
|
-
}
|
|
109
|
-
else if (cond.else && typeof cond.else === 'object') {
|
|
110
|
-
linkFrom(dId, cond.else);
|
|
111
|
-
}
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const s = String(next);
|
|
115
|
-
// Direct step key.
|
|
116
|
-
if (byKey.has(s)) {
|
|
117
|
-
pushEdge(` ${fromId} --> ${nodeId(phaseKey, s)}`);
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
// Scriban/expression: diamond → each quoted key that names a real step.
|
|
121
|
-
if (looksLikeExpression(s)) {
|
|
122
|
-
const targets = quotedKeys(s).filter((k) => byKey.has(k));
|
|
123
|
-
if (targets.length > 0) {
|
|
124
|
-
const dId = `${mermaidId(phaseKey)}_EXPR_${++diamondSeq}`;
|
|
125
|
-
nodeLines.push(` ${dId}{"${escapeLabel(s)}"}`);
|
|
126
|
-
pushEdge(` ${fromId} --> ${dId}`);
|
|
127
|
-
for (const t of targets) {
|
|
128
|
-
pushEdge(` ${dId} --> ${nodeId(phaseKey, t)}`);
|
|
129
|
-
}
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// Unknown terminal target → stadium node.
|
|
134
|
-
const uId = `${mermaidId(phaseKey)}_UNK_${mermaidId(s)}`;
|
|
135
|
-
nodeLines.push(` ${uId}(["${escapeLabel(s)}"])`);
|
|
136
|
-
pushEdge(` ${fromId} --> ${uId}`);
|
|
137
|
-
};
|
|
138
|
-
for (const step of steps) {
|
|
139
|
-
const fromId = nodeId(phaseKey, step.key);
|
|
140
|
-
/**
|
|
141
|
-
* IF / SWITCH routing via `data` — for EVERY kind, not new-kind only (reported 2026-08-06).
|
|
142
|
-
*
|
|
143
|
-
* This block was gated on `newKind`, and `toFlowStep`'s own comment recorded the assumption behind it:
|
|
144
|
-
* *"New-kind fields; harmless for old-kind steps (all undefined)."* A shipped OLD-kind pusher disproves
|
|
145
|
-
* it — `001-projects/nla-extensions/nla-backorder/.../Backorder_BackOrderItemEstimatedDate_Pusher.yaml`
|
|
146
|
-
* has three `displayType: IF` steps whose branches are in `data.then` / `data.else`. Gated out, they fell
|
|
147
|
-
* through to `step.next`, which an IF step does not have, so six of its seven nodes were drawn with no
|
|
148
|
-
* edges at all — the reported chart.
|
|
149
|
-
*
|
|
150
|
-
* The runtime settles which is right: `IfStepExecutor.ExecuteAsync` passes the step's own `StepData` into
|
|
151
|
-
* `NextStepBuilder`, so `data: { if, then, else }` IS that step's next, whatever kind of flow it sits in.
|
|
152
|
-
*
|
|
153
|
-
* Safe to ungate: every clause is guarded by the presence of the field it reads, so an old-kind step
|
|
154
|
-
* with no `stepType`, no `data`, no `onError` and no `fromStep` takes exactly the path it took before.
|
|
155
|
-
*/
|
|
156
|
-
const st = String(step.stepType ?? '').toUpperCase();
|
|
157
|
-
const d = step.data && typeof step.data === 'object'
|
|
158
|
-
? step.data
|
|
159
|
-
: undefined;
|
|
160
|
-
if (st === 'IF' && d) {
|
|
161
|
-
if (d.then != null)
|
|
162
|
-
linkLabeled(fromId, d.then, 'YES');
|
|
163
|
-
if (d.else != null)
|
|
164
|
-
linkLabeled(fromId, d.else, 'NO');
|
|
165
|
-
// A conditional in `data` does not preclude a plain `next`; draw it when it is there.
|
|
166
|
-
if (d.then == null && d.else == null)
|
|
167
|
-
linkFrom(fromId, step.next);
|
|
168
|
-
}
|
|
169
|
-
else if (st === 'SWITCH' && d && !Array.isArray(d)) {
|
|
170
|
-
for (const branchKey of Object.keys(d))
|
|
171
|
-
linkLabeled(fromId, branchKey, branchKey);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
linkFrom(fromId, step.next);
|
|
175
|
-
}
|
|
176
|
-
if (step.onError)
|
|
177
|
-
linkLabeled(fromId, step.onError, 'onError');
|
|
178
|
-
// Exception back-reference: fromStep → this step. New-kind in practice, inert without `fromStep`.
|
|
179
|
-
if (step.fromStep)
|
|
180
|
-
pushEdge(` ${targetNode(step.fromStep)} -->|"Exception"| ${fromId}`);
|
|
181
|
-
}
|
|
182
|
-
// Entry nodes: rootStep steps, or the first step if none is flagged.
|
|
183
|
-
const roots = steps.filter((s) => s.rootStep);
|
|
184
|
-
const entrySteps = roots.length > 0 ? roots : steps.slice(0, 1);
|
|
185
|
-
const entryIds = entrySteps.map((s) => nodeId(phaseKey, s.key));
|
|
186
|
-
// Tails = every terminal step (no successor `next`), so each end-point chains to
|
|
187
|
-
// the next phase — not merely the last-declared step (which may still branch on).
|
|
188
|
-
// Falls back to the last step in document order when nothing is terminal.
|
|
189
|
-
/**
|
|
190
|
-
* A step is TERMINAL when nothing routes out of it — `next` and a `data` conditional alike.
|
|
191
|
-
*
|
|
192
|
-
* Reading `next` alone made every `data`-branching IF step look terminal, so each was chained to the next
|
|
193
|
-
* phase's entry: an edge the flow does not have, drawn beside the branches it was missing.
|
|
194
|
-
*/
|
|
195
|
-
const isTerminal = (s) => {
|
|
196
|
-
const branch = s.data && typeof s.data === 'object'
|
|
197
|
-
? s.data
|
|
198
|
-
: undefined;
|
|
199
|
-
if (branch && (branch.then != null || branch.else != null))
|
|
200
|
-
return false;
|
|
201
|
-
return s.next == null || s.next === '';
|
|
202
|
-
};
|
|
203
|
-
const terminals = steps.filter(isTerminal);
|
|
204
|
-
const tailSteps = terminals.length > 0 ? terminals : [steps[steps.length - 1]];
|
|
205
|
-
const tailIds = tailSteps.map((s) => nodeId(phaseKey, s.key));
|
|
206
|
-
return { key: phaseKey, entryIds, tailIds, nodeLines, edgeLines };
|
|
207
|
-
}
|
|
208
34
|
/**
|
|
209
35
|
* Every route out of every step, as DATA — the same resolution the mermaid builder draws.
|
|
210
36
|
*
|
|
@@ -226,6 +52,29 @@ export function flowEdges(steps) {
|
|
|
226
52
|
const out = [];
|
|
227
53
|
/** Walk one route value, iteratively — `then`/`else` nest without bound. */
|
|
228
54
|
const routes = (from, value, label) => {
|
|
55
|
+
/**
|
|
56
|
+
* Branch objects already entered on THIS step's walk — the cycle guard.
|
|
57
|
+
*
|
|
58
|
+
* ⛔ Added at the Epic 4 close (2026-08-12). `routeGraph.ts` and the frontend twin both carry this guard, with the
|
|
59
|
+
* reason recorded: a cyclic branch does not loop, it **kills the process** with an uncatchable V8 fatal, and this
|
|
60
|
+
* code is bundled into the VS Code extension host. This walker never received it, and it is the one the
|
|
61
|
+
* extension's fallback SVG still consumes on every preview — so the guarded packages closed the hole on the new
|
|
62
|
+
* path and left it open on the shipped one.
|
|
63
|
+
*
|
|
64
|
+
* Measured: `const a = {}; a.then = a;` walked through here under `--max-old-space-size=200` gives
|
|
65
|
+
* `FATAL ERROR: … heap out of memory`, process aborted. A `try/catch` around the preview does not help.
|
|
66
|
+
*
|
|
67
|
+
* REACHABLE FROM YAML with the parser the CLI already uses — a recursive anchor is all it takes:
|
|
68
|
+
*
|
|
69
|
+
* ```yaml
|
|
70
|
+
* next: &loop
|
|
71
|
+
* if: "x"
|
|
72
|
+
* then: *loop
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* Identity, not path: the same object reached twice is the cycle, however long the path to it.
|
|
76
|
+
*/
|
|
77
|
+
const entered = new WeakSet();
|
|
229
78
|
const stack = [
|
|
230
79
|
{ value, ...(label ? { label } : {}) },
|
|
231
80
|
];
|
|
@@ -235,6 +84,9 @@ export function flowEdges(steps) {
|
|
|
235
84
|
if (node == null || node === '')
|
|
236
85
|
continue;
|
|
237
86
|
if (typeof node === 'object' && !Array.isArray(node)) {
|
|
87
|
+
if (entered.has(node))
|
|
88
|
+
continue;
|
|
89
|
+
entered.add(node);
|
|
238
90
|
const cond = node;
|
|
239
91
|
stack.push({ value: cond.else, label: 'NO' });
|
|
240
92
|
stack.push({ value: cond.then, label: 'YES' });
|
|
@@ -302,144 +154,97 @@ export function flowEdges(steps) {
|
|
|
302
154
|
}
|
|
303
155
|
return out;
|
|
304
156
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
const pushEdge = (line) => {
|
|
329
|
-
if (!seenEdges.has(line)) {
|
|
330
|
-
seenEdges.add(line);
|
|
331
|
-
edgeLines.push(line);
|
|
332
|
-
}
|
|
333
|
-
};
|
|
334
|
-
/** Resolve a target key to a node id, synthesizing a stadium for unknown targets. */
|
|
335
|
-
const target = (k) => {
|
|
336
|
-
if (byKey.has(k))
|
|
337
|
-
return nid(k);
|
|
338
|
-
const uid = `${mermaidId(wf)}_UNK_${mermaidId(k)}`;
|
|
339
|
-
if (!extraNodes.has(uid))
|
|
340
|
-
extraNodes.set(uid, ` ${uid}(["${escapeLabel(k)}"])`);
|
|
341
|
-
return uid;
|
|
342
|
-
};
|
|
343
|
-
const edge = (from, to, label) => pushEdge(label
|
|
344
|
-
? ` ${from} -->|"${escapeLabel(label)}"| ${to}`
|
|
345
|
-
: ` ${from} --> ${to}`);
|
|
346
|
-
for (const s of steps) {
|
|
347
|
-
const from = nid(s.key);
|
|
348
|
-
const md = s.metadata && typeof s.metadata === 'object' ? s.metadata : {};
|
|
349
|
-
const before = edgeLines.length;
|
|
350
|
-
let isDecisionStep = false;
|
|
351
|
-
if (s.stepType === 'IF') {
|
|
352
|
-
isDecisionStep = true;
|
|
353
|
-
if (md.then != null)
|
|
354
|
-
edge(from, target(String(md.then)), 'YES');
|
|
355
|
-
if (md.else != null)
|
|
356
|
-
edge(from, target(String(md.else)), 'NO');
|
|
357
|
-
}
|
|
358
|
-
else if (s.stepType === 'SWITCH') {
|
|
359
|
-
isDecisionStep = true;
|
|
360
|
-
const cases = md.cases && typeof md.cases === 'object' ? md.cases : {};
|
|
361
|
-
for (const [caseVal, tgt] of Object.entries(cases)) {
|
|
362
|
-
edge(from, target(String(tgt)), caseVal);
|
|
363
|
-
}
|
|
364
|
-
if (md.default != null)
|
|
365
|
-
edge(from, target(String(md.default)), 'default');
|
|
366
|
-
}
|
|
367
|
-
else if (s.next && typeof s.next === 'object') {
|
|
368
|
-
isDecisionStep = true;
|
|
369
|
-
const nb = s.next;
|
|
370
|
-
const thenT = nb.then ?? nb.success;
|
|
371
|
-
const elseT = nb.else ?? nb.failed;
|
|
372
|
-
if (typeof thenT === 'string')
|
|
373
|
-
edge(from, target(thenT), 'YES');
|
|
374
|
-
if (typeof elseT === 'string')
|
|
375
|
-
edge(from, target(elseT), 'NO');
|
|
376
|
-
}
|
|
377
|
-
else if (typeof s.next === 'string' && s.next.trim() !== '') {
|
|
378
|
-
edge(from, target(s.next));
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
endUsed = true;
|
|
382
|
-
edge(from, endId);
|
|
383
|
-
}
|
|
384
|
-
if (s.onCancelled)
|
|
385
|
-
edge(from, target(s.onCancelled), 'Cancel');
|
|
386
|
-
// A decision step that produced NO edge at all (empty metadata, and no
|
|
387
|
-
// onCancelled) would otherwise dangle; link it to END so the chart stays
|
|
388
|
-
// connected. Checked after onCancelled so a cancel-only decision isn't also
|
|
389
|
-
// given a spurious normal-completion END edge.
|
|
390
|
-
if (isDecisionStep && edgeLines.length === before) {
|
|
391
|
-
endUsed = true;
|
|
392
|
-
edge(from, endId);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
const roots = steps.filter((s) => s.rootStep);
|
|
396
|
-
const entries = (roots.length > 0 ? roots : steps.slice(0, 1)).map((s) => nid(s.key));
|
|
397
|
-
const lines = ['flowchart TD'];
|
|
398
|
-
lines.push(` ${startId}(["Profile Creation"])`);
|
|
399
|
-
lines.push(...nodeLines);
|
|
400
|
-
for (const decl of extraNodes.values())
|
|
401
|
-
lines.push(decl);
|
|
402
|
-
if (endUsed)
|
|
403
|
-
lines.push(` ${endId}(["END"])`);
|
|
404
|
-
for (const entry of entries)
|
|
405
|
-
pushEdge(` ${startId} --> ${entry}`);
|
|
406
|
-
lines.push(...edgeLines);
|
|
407
|
-
return lines.join('\n');
|
|
408
|
-
}
|
|
409
|
-
/** Render a component flow as a Mermaid definition string. */
|
|
157
|
+
/**
|
|
158
|
+
* The report's chart, drawn by the SHARED flow models (Story 4.6, AC-1).
|
|
159
|
+
*
|
|
160
|
+
* ⛔ This file used to draw it — `buildPhase`, `buildCreationMermaid`, `mermaidId`, `escapeLabel`, the phase-chaining
|
|
161
|
+
* loop, ~310 lines. That was the third of three implementations answering *"what is this component's flow?"*, and this
|
|
162
|
+
* epic exists because the three disagreed. The editor swapped in Story 4.5; this is the report.
|
|
163
|
+
*
|
|
164
|
+
* The evidence that it mattered is this file's own history: `escapeLabel` had to be fixed for `<` and `&` in Story 4.4's
|
|
165
|
+
* review **separately** from the identical fix in the flow packages, because the golden suite — the one named "holds the
|
|
166
|
+
* consumers to one answer" — renders through those packages and could not see this emitter. One emitter cannot drift
|
|
167
|
+
* from itself.
|
|
168
|
+
*
|
|
169
|
+
* Direction is preserved PER RUNTIME, exactly as shipped: `LR` for a puller/pusher, the shared default `TD` for a
|
|
170
|
+
* creation workflow. The retired emitter drew them that way — its own docblock said *"a `flowchart TD`"* of
|
|
171
|
+
* `creationSteps` — and the report's stylesheet gives the puller/pusher chart a horizontally scrolling box that a
|
|
172
|
+
* creation workflow's tall branch tree does not want. Direction is a presentation choice the renderer already takes as
|
|
173
|
+
* an argument, which is what separates a styling option from a second geometry; unifying the two would have been a
|
|
174
|
+
* visible change to the shipped report that no AC asks for.
|
|
175
|
+
*
|
|
176
|
+
* A flow with no `source` renders the empty node rather than a legacy chart: there is no second emitter left to fall
|
|
177
|
+
* back to, and drawing a diagram from the `phases` projection is exactly what this change removes.
|
|
178
|
+
*/
|
|
410
179
|
export function buildMermaid(flow) {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
if (
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
}
|
|
180
|
+
const source = flow.source;
|
|
181
|
+
if (!source)
|
|
182
|
+
return EMPTY_CHART;
|
|
183
|
+
if (source.runtime === 'frontend') {
|
|
184
|
+
/**
|
|
185
|
+
* The FRONTEND model, because AD-21 keeps the two vocabularies apart for real reasons: `then`/`success` aliases,
|
|
186
|
+
* `metadata` rather than `data`, `onCancelled` rather than `onError`. Handing a `creationSteps` document to the
|
|
187
|
+
* worker model would silently drop half the edges of a real connector document.
|
|
188
|
+
*/
|
|
189
|
+
const drawn = frontendFlow({
|
|
190
|
+
document: source.component,
|
|
191
|
+
documentId: source.componentId,
|
|
192
|
+
collection: source.collection,
|
|
193
|
+
}).workflows;
|
|
194
|
+
/**
|
|
195
|
+
* ONE chart: the workflow this row is about, not every workflow the document happens to declare.
|
|
196
|
+
*
|
|
197
|
+
* `source.component` is the composed OUTPUT ROOT — `creationSteps` sits there rather than inside a collection — and
|
|
198
|
+
* `frontendFlow` scans all six frontend workflow keys off whatever document it is given. So a root that also
|
|
199
|
+
* declared `setupSteps` would have had it charted into a row whose caption counts `creationSteps` alone.
|
|
200
|
+
*
|
|
201
|
+
* ⛔ The first version rendered every workflow and `join('\n')`ed them, with a comment claiming that a document
|
|
202
|
+
* growing a second workflow *"must not silently lose it"*. Each element is a COMPLETE `flowchart TD …` document, so
|
|
203
|
+
* two of them concatenated inside one ```mermaid fence is a parse error — the branch written to avoid losing a
|
|
204
|
+
* chart lost both (Story 4.6 review, M3). A row shows its own workflow; a second row would show a second one.
|
|
205
|
+
*/
|
|
206
|
+
const workflow = drawn.find((one) => one.workflow === CREATION_WORKFLOW && one.nodes.length > 0);
|
|
207
|
+
return workflow === undefined
|
|
208
|
+
? EMPTY_CHART
|
|
209
|
+
: renderFrontendMermaid(workflow);
|
|
442
210
|
}
|
|
443
|
-
|
|
211
|
+
// A worker flow always names its collection; `WORKER_STAGES` has no stage list for anything else, and guessing one
|
|
212
|
+
// would draw a chart of a component the model cannot describe.
|
|
213
|
+
if (source.collection !== 'pullers' && source.collection !== 'pushers')
|
|
214
|
+
return EMPTY_CHART;
|
|
215
|
+
const drawn = workerFlow({
|
|
216
|
+
collection: source.collection,
|
|
217
|
+
component: source.component,
|
|
218
|
+
componentId: source.componentId,
|
|
219
|
+
});
|
|
220
|
+
/**
|
|
221
|
+
* `multiStage: true` — EVERY stage is boxed and labelled, including a lone one.
|
|
222
|
+
*
|
|
223
|
+
* ⛔ Omitting it was a measured regression (Story 4.6 review, H1): the shared renderer defaults the option to
|
|
224
|
+
* `groups.length > 1`, and **1,293 of the corpus's 2,065 composed pullers/pushers declare exactly one non-empty
|
|
225
|
+
* stage**, so 63% of the report's charts lost their box AND the stage's name — under a caption that says
|
|
226
|
+
* "1 phase(s)" without ever saying which. The retired emitter boxed unconditionally (`for (const b of builds) {
|
|
227
|
+
* lines.push(' subgraph sg_…') }`, no length test), and the deleted assertion
|
|
228
|
+
* `toContain('subgraph sg_pushSteps["pushSteps"]')` on a single-phase fixture proves it.
|
|
229
|
+
*
|
|
230
|
+
* The replacement assertion had justified the loss by quoting *"one stage is not worth a box around it"* as the
|
|
231
|
+
* retired emitter's own rule. It is not: that is `frontend-flow`'s rule about a frontend WORKFLOW. Story 4.5 declined
|
|
232
|
+
* `multiStage: true` for the EDITOR on the same evidence read correctly — the editor's retired renderer did not box a
|
|
233
|
+
* lone stage. Two surfaces, two baselines, and the golden suite renders with `multiStage: true` because a report
|
|
234
|
+
* groups a component's stages whether or not there are two.
|
|
235
|
+
*/
|
|
236
|
+
return drawn.nodes.length === 0
|
|
237
|
+
? EMPTY_CHART
|
|
238
|
+
: renderWorkerMermaid(drawn, { direction: 'LR', multiStage: true });
|
|
444
239
|
}
|
|
240
|
+
/** The workflow key this report charts. A `creationSteps` row is about that workflow and no other. */
|
|
241
|
+
const CREATION_WORKFLOW = 'creationSteps';
|
|
242
|
+
/**
|
|
243
|
+
* What an empty flow says here — wording kept verbatim from the retired emitter.
|
|
244
|
+
*
|
|
245
|
+
* `LR` on both paths, deliberately: a placeholder is one node with no edges, so it has no geometry to preserve, and one
|
|
246
|
+
* spelling of "there is nothing here" is easier to grep for than two. The retired code said `TD` on the creation path
|
|
247
|
+
* (Story 4.6 review, L3) — a difference no reader can see.
|
|
248
|
+
*/
|
|
249
|
+
const EMPTY_CHART = 'flowchart LR\n empty["No steps"]';
|
|
445
250
|
//# sourceMappingURL=flowChart.js.map
|
package/dist/flowChart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowChart.js","sourceRoot":"","sources":["../src/flowChart.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flowChart.js","sourceRoot":"","sources":["../src/flowChart.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderValidation.d.ts","sourceRoot":"","sources":["../src/renderValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"renderValidation.d.ts","sourceRoot":"","sources":["../src/renderValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,yCAAyC,CAAC;AAmDjD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAyC3E"}
|
package/dist/renderValidation.js
CHANGED
|
@@ -7,6 +7,7 @@ const SEV_LABEL = {
|
|
|
7
7
|
major: 'MAJOR',
|
|
8
8
|
medium: 'MEDIUM',
|
|
9
9
|
low: 'LOW',
|
|
10
|
+
'very-low': 'VERY LOW',
|
|
10
11
|
};
|
|
11
12
|
/** Prose-safe text for Markdown: HTML-escape (escHtml handles & < > " | $), collapse
|
|
12
13
|
* newlines to spaces, and escape Markdown structural chars so an interpolated message,
|
|
@@ -60,23 +61,73 @@ export function renderValidationReport(model) {
|
|
|
60
61
|
lines.push(`## Summary — ${summary}`);
|
|
61
62
|
lines.push('');
|
|
62
63
|
for (const g of model.issuesByComponent) {
|
|
64
|
+
const real = g.issues.filter(isRealIssue);
|
|
65
|
+
if (real.length === 0)
|
|
66
|
+
continue;
|
|
63
67
|
const label = g.sourceLink
|
|
64
68
|
? `[${mdText(g.idOrKey)}](${mdUrl(g.sourceLink)})`
|
|
65
69
|
: `\`${mdText(g.idOrKey)}\``;
|
|
66
70
|
lines.push(`### ${mdText(g.parentKey)} — ${label}`);
|
|
67
71
|
lines.push('');
|
|
68
|
-
for (const i of
|
|
72
|
+
for (const i of real)
|
|
69
73
|
lines.push(...renderIssueMd(i));
|
|
70
74
|
}
|
|
71
|
-
|
|
75
|
+
const crossCutting = model.crossCutting.filter(isRealIssue);
|
|
76
|
+
if (crossCutting.length > 0) {
|
|
72
77
|
lines.push('## Project-wide');
|
|
73
78
|
lines.push('');
|
|
74
|
-
for (const i of
|
|
79
|
+
for (const i of crossCutting)
|
|
75
80
|
lines.push(...renderIssueMd(i));
|
|
76
81
|
}
|
|
82
|
+
lines.push(...renderNoticesMd(model));
|
|
77
83
|
lines.push(...renderAppendixMd(model));
|
|
78
84
|
return lines.join('\n');
|
|
79
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* A finding about the profile's CONFIGURATION, as opposed to a migration notice.
|
|
88
|
+
*
|
|
89
|
+
* The split is `very-low` (reported by Jazz, 2026-08-11): a deprecation, a retired component type, a legacy-but-working
|
|
90
|
+
* shape. *"It doesn't break the profile runtime. Just focus on real configuration issues."* Interleaved, a project with
|
|
91
|
+
* many legacy pullers pushed the findings that DO break something off the top of the report.
|
|
92
|
+
*/
|
|
93
|
+
const isRealIssue = (issue) => issue.severity !== 'very-low';
|
|
94
|
+
/**
|
|
95
|
+
* The trailing notices section — everything `very-low`, after the real findings and before the appendix.
|
|
96
|
+
*
|
|
97
|
+
* Gathered rather than merely sorted last. Severity ordering alone would still have put a legacy puller's notice
|
|
98
|
+
* INSIDE that puller's own `###` block, so a reader scanning component by component kept meeting them; and a component
|
|
99
|
+
* whose only finding is a notice got a heading that promised a problem. Here the body above contains configuration
|
|
100
|
+
* issues only, and the notices are one list a reader can act on when migrating rather than while debugging.
|
|
101
|
+
*
|
|
102
|
+
* Component identity travels in the line, since these are no longer under a component heading — a notice that cannot
|
|
103
|
+
* say WHICH puller is legacy is not actionable.
|
|
104
|
+
*/
|
|
105
|
+
function renderNoticesMd(model) {
|
|
106
|
+
const notices = [];
|
|
107
|
+
for (const g of model.issuesByComponent)
|
|
108
|
+
for (const i of g.issues)
|
|
109
|
+
if (!isRealIssue(i))
|
|
110
|
+
notices.push({ issue: i, where: `${g.parentKey} — ${g.idOrKey}` });
|
|
111
|
+
for (const i of model.crossCutting)
|
|
112
|
+
if (!isRealIssue(i))
|
|
113
|
+
notices.push({ issue: i });
|
|
114
|
+
if (notices.length === 0)
|
|
115
|
+
return [];
|
|
116
|
+
const out = [];
|
|
117
|
+
out.push('## Deprecations & legacy notices');
|
|
118
|
+
out.push('');
|
|
119
|
+
out.push('_None of these breaks the profile at runtime._ They are here so a template can be migrated before the ' +
|
|
120
|
+
'platform stops carrying the shape — act on them when you next touch the component, not while debugging a run.');
|
|
121
|
+
out.push('');
|
|
122
|
+
for (const { issue, where } of notices) {
|
|
123
|
+
const rendered = renderIssueMd(issue);
|
|
124
|
+
// The component, appended to the finding's own first line — these sit under no `###` heading of their own.
|
|
125
|
+
if (where !== undefined && rendered.length > 0)
|
|
126
|
+
rendered[0] = `${rendered[0]} — in \`${mdText(where)}\``;
|
|
127
|
+
out.push(...rendered);
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
80
131
|
/** Appendix: explain every rule that appears in this report — what it checks and what
|
|
81
132
|
* breaks if ignored — so a reader can act on a rule id without leaving the document. */
|
|
82
133
|
function renderAppendixMd(model) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderValidation.js","sourceRoot":"","sources":["../src/renderValidation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,SAAS,GAAuC;IACpD,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"renderValidation.js","sourceRoot":"","sources":["../src/renderValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderValidationHtml.d.ts","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"renderValidationHtml.d.ts","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,yCAAyC,CAAC;AA2EjD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAqCR"}
|
|
@@ -7,6 +7,7 @@ const SEV_LABEL = {
|
|
|
7
7
|
major: 'MAJOR',
|
|
8
8
|
medium: 'MEDIUM',
|
|
9
9
|
low: 'LOW',
|
|
10
|
+
'very-low': 'VERY LOW',
|
|
10
11
|
};
|
|
11
12
|
const STYLE = `
|
|
12
13
|
:root { color-scheme: light dark; }
|
|
@@ -26,6 +27,8 @@ code { background: #eff1f3; padding: .1rem .3rem; border-radius: 4px; font-size:
|
|
|
26
27
|
.sev-major { background: #fff8c5; color: #7d4e00; }
|
|
27
28
|
.sev-medium { background: #ddf4ff; color: #0969da; }
|
|
28
29
|
.sev-low { background: #eaeef2; color: #57606a; }
|
|
30
|
+
/* Quieter than LOW on purpose: a deprecation notice should read as a note, not as a problem. */
|
|
31
|
+
.sev-very-low { background: #f6f8fa; color: #6e7781; }
|
|
29
32
|
.ok { background: #dafbe1; color: #116329; padding: .6rem .8rem; border-radius: 6px; display: inline-block; }
|
|
30
33
|
pre { background: #f6f8fa; padding: .6rem .8rem; border-radius: 6px; overflow-x: auto; }
|
|
31
34
|
.appendix { margin-top: 2rem; }
|
|
@@ -77,21 +80,57 @@ export function renderValidationReportHtml(model) {
|
|
|
77
80
|
body.push(`<h2>Summary</h2>`);
|
|
78
81
|
body.push(`<p>${summary}</p>`);
|
|
79
82
|
for (const g of model.issuesByComponent) {
|
|
83
|
+
const real = g.issues.filter(isRealIssue);
|
|
84
|
+
if (real.length === 0)
|
|
85
|
+
continue;
|
|
80
86
|
const label = g.sourceLink
|
|
81
87
|
? `<a href="${esc(g.sourceLink)}">${esc(g.idOrKey)}</a>`
|
|
82
88
|
: `<code>${esc(g.idOrKey)}</code>`;
|
|
83
89
|
body.push(`<h3>${esc(g.parentKey)} — ${label}</h3>`);
|
|
84
|
-
for (const i of
|
|
90
|
+
for (const i of real)
|
|
85
91
|
body.push(renderIssueHtml(i));
|
|
86
92
|
}
|
|
87
|
-
|
|
93
|
+
const crossCutting = model.crossCutting.filter(isRealIssue);
|
|
94
|
+
if (crossCutting.length > 0) {
|
|
88
95
|
body.push(`<h2>Project-wide</h2>`);
|
|
89
|
-
for (const i of
|
|
96
|
+
for (const i of crossCutting)
|
|
90
97
|
body.push(renderIssueHtml(i));
|
|
91
98
|
}
|
|
99
|
+
body.push(...renderNoticesHtml(model));
|
|
92
100
|
body.push(...renderAppendixHtml(model));
|
|
93
101
|
return page(model.projectTitle, body.join('\n'));
|
|
94
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* A finding about CONFIGURATION, as opposed to a migration notice — the same split the Markdown twin makes, and it
|
|
105
|
+
* must stay the same split: two renderers of one report disagreeing about which section a finding belongs in is the
|
|
106
|
+
* class of defect this repo keeps paying for.
|
|
107
|
+
*/
|
|
108
|
+
const isRealIssue = (issue) => issue.severity !== 'very-low';
|
|
109
|
+
/** The trailing notices section. See the Markdown twin's `renderNoticesMd` for why these are gathered, not just sorted last. */
|
|
110
|
+
function renderNoticesHtml(model) {
|
|
111
|
+
const out = [];
|
|
112
|
+
const notices = [];
|
|
113
|
+
for (const g of model.issuesByComponent)
|
|
114
|
+
for (const i of g.issues)
|
|
115
|
+
if (!isRealIssue(i))
|
|
116
|
+
notices.push({ issue: i, where: `${g.parentKey} — ${g.idOrKey}` });
|
|
117
|
+
for (const i of model.crossCutting)
|
|
118
|
+
if (!isRealIssue(i))
|
|
119
|
+
notices.push({ issue: i });
|
|
120
|
+
if (notices.length === 0)
|
|
121
|
+
return out;
|
|
122
|
+
out.push(`<h2>Deprecations & legacy notices</h2>`);
|
|
123
|
+
out.push(`<p class="notice-intro"><em>None of these breaks the profile at runtime.</em> They are here so a template can ` +
|
|
124
|
+
`be migrated before the platform stops carrying the shape — act on them when you next touch the component, ` +
|
|
125
|
+
`not while debugging a run.</p>`);
|
|
126
|
+
for (const { issue, where } of notices) {
|
|
127
|
+
const rendered = renderIssueHtml(issue);
|
|
128
|
+
out.push(where === undefined
|
|
129
|
+
? rendered
|
|
130
|
+
: `${rendered}<p class="notice-where">in <code>${esc(where)}</code></p>`);
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
95
134
|
/** Appendix: explain every rule that appears in this report. */
|
|
96
135
|
function renderAppendixHtml(model) {
|
|
97
136
|
const ids = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderValidationHtml.js","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,SAAS,GAAuC;IACpD,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"renderValidationHtml.js","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beehexa/hexasync-template-report-render",
|
|
3
|
-
"version": "2608.
|
|
3
|
+
"version": "2608.15.1",
|
|
4
4
|
"description": "Markdown and HTML renderers for the report models.",
|
|
5
5
|
"license": "SEE LICENSE IN ../../LICENSE",
|
|
6
6
|
"type": "module",
|
|
@@ -20,9 +20,11 @@
|
|
|
20
20
|
"build": "tsc -p tsconfig.build.json"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@beehexa/hexasync-template-compose": "2608.
|
|
24
|
-
"@beehexa/hexasync-template-
|
|
25
|
-
"@beehexa/hexasync-template-
|
|
23
|
+
"@beehexa/hexasync-template-compose": "2608.15.1",
|
|
24
|
+
"@beehexa/hexasync-template-frontend-flow": "2608.15.1",
|
|
25
|
+
"@beehexa/hexasync-template-report-model": "2608.15.1",
|
|
26
|
+
"@beehexa/hexasync-template-validate": "2608.15.1",
|
|
27
|
+
"@beehexa/hexasync-template-worker-flow": "2608.15.1"
|
|
26
28
|
},
|
|
27
29
|
"hexasync": {
|
|
28
30
|
"layer": "adapter"
|