@sentropic/track 0.85.11 → 0.85.14
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/cli/index.js +24 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/read/commands.d.ts +13 -1
- package/dist/read/commands.d.ts.map +1 -1
- package/dist/read/commands.js +31 -1
- package/dist/read/commands.js.map +1 -1
- package/dist/read/contract.d.ts +2 -2
- package/dist/read/contract.js +1 -1
- package/dist/read/contract.js.map +1 -1
- package/dist/report/build.d.ts +27 -0
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +103 -5
- package/dist/report/build.js.map +1 -1
- package/dist/report/directive.d.ts +37 -11
- package/dist/report/directive.d.ts.map +1 -1
- package/dist/report/directive.js +61 -11
- package/dist/report/directive.js.map +1 -1
- package/dist/report/format.d.ts +27 -2
- package/dist/report/format.d.ts.map +1 -1
- package/dist/report/format.js +130 -25
- package/dist/report/format.js.map +1 -1
- package/dist/report/friendly.d.ts +93 -0
- package/dist/report/friendly.d.ts.map +1 -0
- package/dist/report/friendly.js +197 -0
- package/dist/report/friendly.js.map +1 -0
- package/dist/report/html.d.ts +9 -0
- package/dist/report/html.d.ts.map +1 -0
- package/dist/report/html.js +76 -0
- package/dist/report/html.js.map +1 -0
- package/dist/report/present.d.ts +28 -0
- package/dist/report/present.d.ts.map +1 -0
- package/dist/report/present.js +32 -0
- package/dist/report/present.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// report-revamp §C — the DS-compatible HTML FRAGMENT renderer for the conductor report. Implements the
|
|
2
|
+
// shared `DsFragmentPresenter` contract (present.ts) — the SAME presenter path as focus's `renderHtml`, not
|
|
3
|
+
// a second engine: a self-contained `<article>` with namespaced classes + `data-*` variants, every
|
|
4
|
+
// interpolation escaped (§A4), the whole fragment run through the host `sanitizeHtml` hook. It consumes the
|
|
5
|
+
// SAME `ReportView` the JSON path exposes (tables + directives + keystone), so the HTML and the table render
|
|
6
|
+
// share one derived model. The design system supplies the CSS/tokens and embeds the fragment.
|
|
7
|
+
import { buildWpConductorView, directivePhrase } from './format.js';
|
|
8
|
+
import { escapeHtml, IDENTITY_HOOKS } from './present.js';
|
|
9
|
+
/** One conductor table → a `<section>` with a `<table class="report-table">`; cells escaped (§A4). */
|
|
10
|
+
function renderTable(t) {
|
|
11
|
+
const head = t.columns.map((c) => `<th>${escapeHtml(c.label)}</th>`).join('');
|
|
12
|
+
const body = t.rows
|
|
13
|
+
.map((row) => `<tr>${t.columns.map((c) => `<td>${escapeHtml(row[c.id] ?? '')}</td>`).join('')}</tr>`)
|
|
14
|
+
.join('');
|
|
15
|
+
return (`<section class="report-section" data-section="${escapeHtml(t.id)}">` +
|
|
16
|
+
`<h2>${escapeHtml(t.title)}</h2>` +
|
|
17
|
+
`<table class="report-table"><thead><tr>${head}</tr></thead><tbody>${body}</tbody></table>` +
|
|
18
|
+
`</section>`);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The machine-attributed directive list — the DS-consumable variant surface (mirrors focus's
|
|
22
|
+
* `data-annotation`/`data-modality` convention): each `<li>` carries `data-mode`, `data-advice-kind`,
|
|
23
|
+
* `data-rank`, `data-step`, and (when present) `data-gate`/`data-blocked-by`/`data-fan-in`, so the design
|
|
24
|
+
* system styles chips WITHOUT parsing the phrase. The rendered phrase reuses `directivePhrase` (same bytes
|
|
25
|
+
* as the table). Every interpolated title/ref is escaped.
|
|
26
|
+
*/
|
|
27
|
+
function renderDirectives(dirs) {
|
|
28
|
+
if (dirs.length === 0)
|
|
29
|
+
return '';
|
|
30
|
+
const items = dirs
|
|
31
|
+
.map((d) => {
|
|
32
|
+
const g = d.gate;
|
|
33
|
+
const attrs = [
|
|
34
|
+
`data-mode="${escapeHtml(d.mode)}"`,
|
|
35
|
+
`data-advice-kind="${escapeHtml(d.adviceKind)}"`,
|
|
36
|
+
`data-rank="${escapeHtml(d.rank)}"`,
|
|
37
|
+
`data-step="${escapeHtml(d.step.code)}"`,
|
|
38
|
+
...(g?.code !== undefined ? [`data-gate="${escapeHtml(g.code)}"`] : []),
|
|
39
|
+
...(g?.blockedBy !== undefined ? [`data-blocked-by="${escapeHtml(g.blockedBy)}"`] : []),
|
|
40
|
+
...(d.facts.fanIn !== undefined ? [`data-fan-in="${escapeHtml(String(d.facts.fanIn))}"`] : []),
|
|
41
|
+
].join(' ');
|
|
42
|
+
const subject = escapeHtml(d.target.title ?? d.target.id);
|
|
43
|
+
const blocker = g?.blockedByTitle !== undefined
|
|
44
|
+
? ` <span class="report-directive-blocker">bloqué par « ${escapeHtml(g.blockedByTitle)} »</span>`
|
|
45
|
+
: '';
|
|
46
|
+
return (`<li class="report-directive" ${attrs}>` +
|
|
47
|
+
`<strong class="report-directive-subject">${subject}</strong> — ` +
|
|
48
|
+
`<span class="report-directive-phrase">${escapeHtml(directivePhrase(d))}</span>${blocker}</li>`);
|
|
49
|
+
})
|
|
50
|
+
.join('');
|
|
51
|
+
return `<section class="report-section" data-section="directives"><h2>Directives</h2><ul class="report-directives">${items}</ul></section>`;
|
|
52
|
+
}
|
|
53
|
+
function renderHeader(view) {
|
|
54
|
+
const k = view.keystone;
|
|
55
|
+
const keystone = k !== undefined
|
|
56
|
+
? ` · <span class="report-keystone" data-keystone-id="${escapeHtml(k.id)}" data-blocks="${escapeHtml(String(k.blocks))}">goulot: ${escapeHtml(k.title)} (bloque ${escapeHtml(String(k.blocks))})</span>`
|
|
57
|
+
: '';
|
|
58
|
+
return (`<header class="report-header"><h1>Report — conducteur</h1>` +
|
|
59
|
+
`<p class="report-meta">vue: <code>${escapeHtml(view.kind)}</code> · locale: ${escapeHtml(view.locale)}${keystone}</p></header>`);
|
|
60
|
+
}
|
|
61
|
+
/** Render a `ReportView` to a sanitized, DS-styled `<article>` fragment (the shared presenter, §C). */
|
|
62
|
+
export const renderReportHtml = (view, hooks = IDENTITY_HOOKS) => {
|
|
63
|
+
const html = `<article class="report-document" data-kind="${escapeHtml(view.kind)}" data-locale="${escapeHtml(view.locale)}">` +
|
|
64
|
+
renderHeader(view) +
|
|
65
|
+
view.tables.map(renderTable).join('') +
|
|
66
|
+
renderDirectives(view.directives) +
|
|
67
|
+
`<section class="report-section" data-section="recommandation"><h2>Recommandation</h2>` +
|
|
68
|
+
`<p class="report-recommendation">${escapeHtml(view.generalRecommendation)}</p></section>` +
|
|
69
|
+
`</article>`;
|
|
70
|
+
return hooks.sanitizeHtml(html);
|
|
71
|
+
};
|
|
72
|
+
/** Build the conductor view from the forest and render its DS fragment (the CLI `--format html` path). */
|
|
73
|
+
export function formatWpConductorHtml(tree, decisions = [], hooks = IDENTITY_HOOKS) {
|
|
74
|
+
return renderReportHtml(buildWpConductorView(tree, decisions), hooks);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Convert markdown source to an HTML string. Host-supplied (e.g. `marked`) — only prose models need it. */
|
|
2
|
+
export type RenderMarkdown = (markdown: string) => string;
|
|
3
|
+
/** Sanitize an HTML string before emission. Host-supplied (e.g. DOMPurify / sanitize-html). */
|
|
4
|
+
export type SanitizeHtml = (html: string) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Hooks a DS fragment renderer needs from the host. A SUPERSET of focus's `HtmlRenderHooks`:
|
|
7
|
+
* `sanitizeHtml` is always required (the fragment is run through it before emission); `renderMarkdown` is
|
|
8
|
+
* OPTIONAL and only consulted by prose-bearing models (the dossier), so the report renderer never needs it.
|
|
9
|
+
*/
|
|
10
|
+
export interface DsFragmentHooks {
|
|
11
|
+
readonly sanitizeHtml: SanitizeHtml;
|
|
12
|
+
readonly renderMarkdown?: RenderMarkdown;
|
|
13
|
+
}
|
|
14
|
+
/** The shared presenter signature: a model → a sanitized, DS-styled `<article>` fragment string. */
|
|
15
|
+
export type DsFragmentPresenter<Model> = (model: Model, hooks: DsFragmentHooks) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Minimal HTML text escaping for attribute/text content the renderer itself emits (§A4 — every interpolated
|
|
18
|
+
* user title/ref MUST pass through this before landing in the fragment, so a forged title cannot inject
|
|
19
|
+
* markup). Byte-for-byte the same escape focus's renderer uses, so the two fragments are consistent.
|
|
20
|
+
*/
|
|
21
|
+
export declare const escapeHtml: (value: string) => string;
|
|
22
|
+
/**
|
|
23
|
+
* The trusted-local-CLI hooks (identity sanitize): track's `--format html` is a local surface, not untrusted
|
|
24
|
+
* network output — the renderer already escapes every interpolation, so identity sanitize is safe here. An
|
|
25
|
+
* L4/web host (the Svelte app) supplies a REAL DOMPurify/sanitize-html hook instead.
|
|
26
|
+
*/
|
|
27
|
+
export declare const IDENTITY_HOOKS: DsFragmentHooks;
|
|
28
|
+
//# sourceMappingURL=present.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"present.d.ts","sourceRoot":"","sources":["../../src/report/present.ts"],"names":[],"mappings":"AAeA,4GAA4G;AAC5G,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;AAEzD,+FAA+F;AAC/F,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;AAEnD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;CACzC;AAED,oGAAoG;AACpG,MAAM,MAAM,mBAAmB,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,KAAK,MAAM,CAAA;AAEzF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAMhB,CAAA;AAE3B;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,eAA4D,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// report-revamp §C — the SHARED design-system fragment contract (the "embeddable-view contract" of
|
|
2
|
+
// M5-decision-presentation-DESIGN §3.3). The report and the focus dossier are the SAME presenter: both emit
|
|
3
|
+
// a self-contained, DS-styled `<article>` FRAGMENT (structure + namespaced classes + `data-*` variants, NO
|
|
4
|
+
// inline styling, NO tokens embedded), with markdown/sanitization INJECTED by the host. The design system
|
|
5
|
+
// supplies the CSS (`--st-*` tokens) and wrapping; a fragment is embeddable in the Svelte app OR any host.
|
|
6
|
+
//
|
|
7
|
+
// This module defines the contract ONCE. Two implementations conform to it:
|
|
8
|
+
// • focus — `@sentropic/focus` `renderHtml(DecisionDossierDocument, HtmlRenderHooks)` (the dossier side),
|
|
9
|
+
// already vendored in `../focus-vendor/render/html.js`;
|
|
10
|
+
// • report — `renderReportHtml(ReportView, DsFragmentHooks)` (this repo, `./html.ts`).
|
|
11
|
+
// Both take `(model, hooks) => sanitizedFragment` and share the SAME hooks shape (a superset of focus's
|
|
12
|
+
// `HtmlRenderHooks`: `renderMarkdown` is OPTIONAL because a report carries no prose). The full Svelte app
|
|
13
|
+
// (design-system-svelte, focus L-D) consumes this contract — it is the cross-repo DS piece, out of scope
|
|
14
|
+
// here; this repo ships the DS-compatible FRAGMENT that app embeds.
|
|
15
|
+
/**
|
|
16
|
+
* Minimal HTML text escaping for attribute/text content the renderer itself emits (§A4 — every interpolated
|
|
17
|
+
* user title/ref MUST pass through this before landing in the fragment, so a forged title cannot inject
|
|
18
|
+
* markup). Byte-for-byte the same escape focus's renderer uses, so the two fragments are consistent.
|
|
19
|
+
*/
|
|
20
|
+
export const escapeHtml = (value) => value
|
|
21
|
+
.replace(/&/g, '&')
|
|
22
|
+
.replace(/</g, '<')
|
|
23
|
+
.replace(/>/g, '>')
|
|
24
|
+
.replace(/"/g, '"')
|
|
25
|
+
.replace(/'/g, ''');
|
|
26
|
+
/**
|
|
27
|
+
* The trusted-local-CLI hooks (identity sanitize): track's `--format html` is a local surface, not untrusted
|
|
28
|
+
* network output — the renderer already escapes every interpolation, so identity sanitize is safe here. An
|
|
29
|
+
* L4/web host (the Svelte app) supplies a REAL DOMPurify/sanitize-html hook instead.
|
|
30
|
+
*/
|
|
31
|
+
export const IDENTITY_HOOKS = { sanitizeHtml: (h) => h };
|
|
32
|
+
//# sourceMappingURL=present.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"present.js","sourceRoot":"","sources":["../../src/report/present.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,4GAA4G;AAC5G,2GAA2G;AAC3G,0GAA0G;AAC1G,2GAA2G;AAC3G,EAAE;AACF,4EAA4E;AAC5E,6GAA6G;AAC7G,qEAAqE;AACrE,yFAAyF;AACzF,wGAAwG;AACxG,0GAA0G;AAC1G,yGAAyG;AACzG,oEAAoE;AAqBpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAClD,KAAK;KACF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;KACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;KACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;KACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;KACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB,EAAE,YAAY,EAAE,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentropic/track",
|
|
3
|
-
"version": "0.85.
|
|
3
|
+
"version": "0.85.14",
|
|
4
4
|
"description": "Typed product-backlog and spec/plan/UAT system of record for the sentropic ecosystem (record-only MVP).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Fabien Antoine",
|
|
@@ -37,7 +37,11 @@
|
|
|
37
37
|
".": "./dist/index.js",
|
|
38
38
|
"./read": "./dist/read/index.js",
|
|
39
39
|
"./ingest": "./dist/ingest/index.js",
|
|
40
|
-
"./seam": "./dist/ingest/seam-schema.js"
|
|
40
|
+
"./seam": "./dist/ingest/seam-schema.js",
|
|
41
|
+
"./report/friendly": {
|
|
42
|
+
"types": "./dist/report/friendly.d.ts",
|
|
43
|
+
"import": "./dist/report/friendly.js"
|
|
44
|
+
}
|
|
41
45
|
},
|
|
42
46
|
"files": [
|
|
43
47
|
"dist",
|