@ifc-lite/sdk 9.2.0 → 9.4.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/README.md +30 -0
- package/dist/review/capture-budget.d.ts +6 -0
- package/dist/review/capture-budget.d.ts.map +1 -0
- package/dist/review/capture-budget.js +47 -0
- package/dist/review/capture-budget.js.map +1 -0
- package/dist/review/capture-retention.d.ts +47 -0
- package/dist/review/capture-retention.d.ts.map +1 -0
- package/dist/review/capture-retention.js +141 -0
- package/dist/review/capture-retention.js.map +1 -0
- package/dist/review/capture-types.d.ts +57 -0
- package/dist/review/capture-types.d.ts.map +1 -0
- package/dist/review/capture-types.js +5 -0
- package/dist/review/capture-types.js.map +1 -0
- package/dist/review/clash-identity.d.ts +9 -0
- package/dist/review/clash-identity.d.ts.map +1 -0
- package/dist/review/clash-identity.js +18 -0
- package/dist/review/clash-identity.js.map +1 -0
- package/dist/review/clash.d.ts +25 -0
- package/dist/review/clash.d.ts.map +1 -0
- package/dist/review/clash.js +97 -0
- package/dist/review/clash.js.map +1 -0
- package/dist/review/native-captures.d.ts +21 -0
- package/dist/review/native-captures.d.ts.map +1 -0
- package/dist/review/native-captures.js +325 -0
- package/dist/review/native-captures.js.map +1 -0
- package/dist/review/native-snapshot.d.ts +47 -0
- package/dist/review/native-snapshot.d.ts.map +1 -0
- package/dist/review/native-snapshot.js +98 -0
- package/dist/review/native-snapshot.js.map +1 -0
- package/dist/review/portable-analysis-binding.d.ts +29 -0
- package/dist/review/portable-analysis-binding.d.ts.map +1 -0
- package/dist/review/portable-analysis-binding.js +60 -0
- package/dist/review/portable-analysis-binding.js.map +1 -0
- package/dist/review/portable-analysis.d.ts +103 -0
- package/dist/review/portable-analysis.d.ts.map +1 -0
- package/dist/review/portable-analysis.js +119 -0
- package/dist/review/portable-analysis.js.map +1 -0
- package/dist/review/portable-automation-provenance.d.ts +32 -0
- package/dist/review/portable-automation-provenance.d.ts.map +1 -0
- package/dist/review/portable-automation-provenance.js +68 -0
- package/dist/review/portable-automation-provenance.js.map +1 -0
- package/dist/review/portable-ids-report.d.ts +125 -0
- package/dist/review/portable-ids-report.d.ts.map +1 -0
- package/dist/review/portable-ids-report.js +124 -0
- package/dist/review/portable-ids-report.js.map +1 -0
- package/dist/review/portable-manual-report.d.ts +66 -0
- package/dist/review/portable-manual-report.d.ts.map +1 -0
- package/dist/review/portable-manual-report.js +121 -0
- package/dist/review/portable-manual-report.js.map +1 -0
- package/dist/review/portable-report-metadata.d.ts +42 -0
- package/dist/review/portable-report-metadata.d.ts.map +1 -0
- package/dist/review/portable-report-metadata.js +41 -0
- package/dist/review/portable-report-metadata.js.map +1 -0
- package/dist/review/portable-saved-validation.d.ts +12 -0
- package/dist/review/portable-saved-validation.d.ts.map +1 -0
- package/dist/review/portable-saved-validation.js +32 -0
- package/dist/review/portable-saved-validation.js.map +1 -0
- package/dist/review/portable-validation-evidence.d.ts +53 -0
- package/dist/review/portable-validation-evidence.d.ts.map +1 -0
- package/dist/review/portable-validation-evidence.js +52 -0
- package/dist/review/portable-validation-evidence.js.map +1 -0
- package/dist/review/saved-validation.d.ts +14 -0
- package/dist/review/saved-validation.d.ts.map +1 -0
- package/dist/review/saved-validation.js +31 -0
- package/dist/review/saved-validation.js.map +1 -0
- package/dist/review.d.ts +19 -0
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +14 -0
- package/dist/review.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-ids-report.js","sourceRoot":"","sources":["../../src/review/portable-ids-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The manual-validation report block's saved shape (#6401), kept beside
|
|
3
|
+
* `types.ts` (which composes it into `DocumentBlock`) the way the
|
|
4
|
+
* validation report block's types are.
|
|
5
|
+
*
|
|
6
|
+
* A frozen snapshot, like `ids-report`: the checklist's groups and checks,
|
|
7
|
+
* each check's verdict and comment, and the per-group counts, copied when
|
|
8
|
+
* the block is added or refreshed. It never reads the live checklist or
|
|
9
|
+
* the stored answers again, so a saved document prints the round that was
|
|
10
|
+
* recorded, and it travels with the `.ifclite-document.json` file.
|
|
11
|
+
*/
|
|
12
|
+
import { type BlockTitle } from './portable-report-metadata.js';
|
|
13
|
+
import type { PortableReportValidationError as DocumentValidationError } from './portable-report-metadata.js';
|
|
14
|
+
import { type ReportProvenance } from './portable-report-metadata.js';
|
|
15
|
+
export type ManualReportVerdict = 'pass' | 'fail' | 'warning';
|
|
16
|
+
/** The four disjoint buckets; a warning is its own bucket, never a pass. */
|
|
17
|
+
export interface ManualReportCounts {
|
|
18
|
+
total: number;
|
|
19
|
+
pass: number;
|
|
20
|
+
fail: number;
|
|
21
|
+
warning: number;
|
|
22
|
+
unanswered: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ManualReportItem {
|
|
25
|
+
id: string;
|
|
26
|
+
text: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
/** `null`: not checked when the snapshot was taken. */
|
|
29
|
+
status: ManualReportVerdict | null;
|
|
30
|
+
comment?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ManualReportGroup {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
counts: ManualReportCounts;
|
|
36
|
+
items: ManualReportItem[];
|
|
37
|
+
}
|
|
38
|
+
export interface ManualReportBlock extends ReportProvenance, BlockTitle {
|
|
39
|
+
kind: 'manual-report';
|
|
40
|
+
id: string;
|
|
41
|
+
/** The checklist's name, printed in the block's heading. */
|
|
42
|
+
checklistName: string;
|
|
43
|
+
/** Live instance used by explicit Refresh; embedded answers stay immutable. */
|
|
44
|
+
checklistId?: string;
|
|
45
|
+
/** Missing on older documents: their existing detailed layout. */
|
|
46
|
+
variant?: 'long' | 'compact';
|
|
47
|
+
/** Missing on older documents: display their existing rings and scores. */
|
|
48
|
+
benchmarks?: boolean;
|
|
49
|
+
/** Whole-block size, 0.5-2 (#6548); absent is 1. */
|
|
50
|
+
scale?: number;
|
|
51
|
+
/** The model the answers were recorded against, when there was one (display only). */
|
|
52
|
+
modelName?: string;
|
|
53
|
+
/**
|
|
54
|
+
* That model's source fingerprint, the key its answers are stored under:
|
|
55
|
+
* Refresh reads this model and no other. Absent when no model (or one
|
|
56
|
+
* without a fingerprint) was loaded; such a block follows the tab's pick.
|
|
57
|
+
*/
|
|
58
|
+
modelFingerprint?: string;
|
|
59
|
+
/** When the snapshot was taken (ISO). */
|
|
60
|
+
generatedAt: string;
|
|
61
|
+
summary: ManualReportCounts;
|
|
62
|
+
groups: ManualReportGroup[];
|
|
63
|
+
}
|
|
64
|
+
/** Structural check of a manual report block (#6401), every problem with its JSON path. */
|
|
65
|
+
export declare function validateManualReportBlock(block: Record<string, unknown>, at: string, errors: DocumentValidationError[]): void;
|
|
66
|
+
//# sourceMappingURL=portable-manual-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-manual-report.d.ts","sourceRoot":"","sources":["../../src/review/portable-manual-report.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,KAAK,EAAE,6BAA6B,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC9G,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEhG,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB,EAAE,UAAU;IACrE,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAeD,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAqD7H"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* The manual-validation report block's saved shape (#6401), kept beside
|
|
6
|
+
* `types.ts` (which composes it into `DocumentBlock`) the way the
|
|
7
|
+
* validation report block's types are.
|
|
8
|
+
*
|
|
9
|
+
* A frozen snapshot, like `ids-report`: the checklist's groups and checks,
|
|
10
|
+
* each check's verdict and comment, and the per-group counts, copied when
|
|
11
|
+
* the block is added or refreshed. It never reads the live checklist or
|
|
12
|
+
* the stored answers again, so a saved document prints the round that was
|
|
13
|
+
* recorded, and it travels with the `.ifclite-document.json` file.
|
|
14
|
+
*/
|
|
15
|
+
import { validateBlockTitle } from './portable-report-metadata.js';
|
|
16
|
+
import { validateReportProvenance } from './portable-report-metadata.js';
|
|
17
|
+
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
18
|
+
const isString = (v) => typeof v === 'string';
|
|
19
|
+
const isCount = (v) => typeof v === 'number' && Number.isInteger(v) && v >= 0;
|
|
20
|
+
const VERDICTS = ['pass', 'fail', 'warning', null];
|
|
21
|
+
/** Counts that are whole, non-negative, and whose four buckets sum to `total`. */
|
|
22
|
+
function isCounts(v) {
|
|
23
|
+
return isRecord(v) && isCount(v.total) && isCount(v.pass) && isCount(v.fail) && isCount(v.warning) && isCount(v.unanswered)
|
|
24
|
+
&& v.pass + v.fail + v.warning + v.unanswered === v.total;
|
|
25
|
+
}
|
|
26
|
+
const COUNTS_MESSAGE = 'expected { total, pass, fail, warning, unanswered: non-negative integers; the four buckets sum to total }';
|
|
27
|
+
/** Structural check of a manual report block (#6401), every problem with its JSON path. */
|
|
28
|
+
export function validateManualReportBlock(block, at, errors) {
|
|
29
|
+
validateReportProvenance(block, at, errors);
|
|
30
|
+
validateBlockTitle(block, at, errors);
|
|
31
|
+
if (!isString(block.checklistName))
|
|
32
|
+
errors.push({ path: `${at}.checklistName`, message: 'expected a string' });
|
|
33
|
+
if (block.checklistId !== undefined && !(isString(block.checklistId) && block.checklistId.trim()))
|
|
34
|
+
errors.push({ path: `${at}.checklistId`, message: 'expected a nonblank string' });
|
|
35
|
+
if (block.variant !== undefined && block.variant !== 'long' && block.variant !== 'compact')
|
|
36
|
+
errors.push({ path: `${at}.variant`, message: 'expected long or compact' });
|
|
37
|
+
if (block.benchmarks !== undefined && typeof block.benchmarks !== 'boolean')
|
|
38
|
+
errors.push({ path: `${at}.benchmarks`, message: 'expected a boolean' });
|
|
39
|
+
if (block.modelName !== undefined && !isString(block.modelName))
|
|
40
|
+
errors.push({ path: `${at}.modelName`, message: 'expected a string' });
|
|
41
|
+
if (block.modelFingerprint !== undefined && !(isString(block.modelFingerprint) && block.modelFingerprint.length > 0)) {
|
|
42
|
+
errors.push({ path: `${at}.modelFingerprint`, message: 'expected a non-empty string' });
|
|
43
|
+
}
|
|
44
|
+
if (!isString(block.generatedAt))
|
|
45
|
+
errors.push({ path: `${at}.generatedAt`, message: 'expected a string' });
|
|
46
|
+
if (!isCounts(block.summary))
|
|
47
|
+
errors.push({ path: `${at}.summary`, message: COUNTS_MESSAGE });
|
|
48
|
+
if (!Array.isArray(block.groups)) {
|
|
49
|
+
errors.push({ path: `${at}.groups`, message: 'expected an array' });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// One id space across groups and checks, as the checklist parser enforces; the preview keys rows by id.
|
|
53
|
+
const seenIds = new Set();
|
|
54
|
+
const checkId = (value, path) => {
|
|
55
|
+
if (!isString(value) || value.length === 0)
|
|
56
|
+
errors.push({ path, message: 'expected a non-empty string' });
|
|
57
|
+
else if (seenIds.has(value))
|
|
58
|
+
errors.push({ path, message: `duplicate id "${value}"` });
|
|
59
|
+
else
|
|
60
|
+
seenIds.add(value);
|
|
61
|
+
};
|
|
62
|
+
block.groups.forEach((group, i) => {
|
|
63
|
+
const groupAt = `${at}.groups[${i}]`;
|
|
64
|
+
if (!isRecord(group)) {
|
|
65
|
+
errors.push({ path: groupAt, message: 'expected an object' });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
checkId(group.id, `${groupAt}.id`);
|
|
69
|
+
if (!isString(group.name))
|
|
70
|
+
errors.push({ path: `${groupAt}.name`, message: 'expected a string' });
|
|
71
|
+
if (!isCounts(group.counts))
|
|
72
|
+
errors.push({ path: `${groupAt}.counts`, message: COUNTS_MESSAGE });
|
|
73
|
+
if (!Array.isArray(group.items)) {
|
|
74
|
+
errors.push({ path: `${groupAt}.items`, message: 'expected an array' });
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
group.items.forEach((item, j) => {
|
|
78
|
+
const itemAt = `${groupAt}.items[${j}]`;
|
|
79
|
+
if (!isRecord(item)) {
|
|
80
|
+
errors.push({ path: itemAt, message: 'expected an object' });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
checkId(item.id, `${itemAt}.id`);
|
|
84
|
+
if (!isString(item.text))
|
|
85
|
+
errors.push({ path: `${itemAt}.text`, message: 'expected a string' });
|
|
86
|
+
if (item.description !== undefined && !isString(item.description))
|
|
87
|
+
errors.push({ path: `${itemAt}.description`, message: 'expected a string' });
|
|
88
|
+
if (!VERDICTS.includes(item.status))
|
|
89
|
+
errors.push({ path: `${itemAt}.status`, message: 'expected pass | fail | warning | null' });
|
|
90
|
+
if (item.comment !== undefined && !isString(item.comment))
|
|
91
|
+
errors.push({ path: `${itemAt}.comment`, message: 'expected a string' });
|
|
92
|
+
});
|
|
93
|
+
// The ring is drawn from `counts`, so counts that disagree with the verdicts listed under
|
|
94
|
+
// them would print a chart the page contradicts; a hand-edited file is refused instead.
|
|
95
|
+
if (isCounts(group.counts) && !sameCounts(group.counts, countItems(group.items))) {
|
|
96
|
+
errors.push({ path: `${groupAt}.counts`, message: 'does not match the verdicts of its items' });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const groupCounts = block.groups.map((g) => (isRecord(g) && isCounts(g.counts) ? g.counts : null));
|
|
100
|
+
if (isCounts(block.summary) && groupCounts.every((c) => c !== null)) {
|
|
101
|
+
const sum = groupCounts.reduce((acc, c) => ({
|
|
102
|
+
total: acc.total + c.total, pass: acc.pass + c.pass, fail: acc.fail + c.fail, warning: acc.warning + c.warning, unanswered: acc.unanswered + c.unanswered,
|
|
103
|
+
}), { total: 0, pass: 0, fail: 0, warning: 0, unanswered: 0 });
|
|
104
|
+
if (!sameCounts(block.summary, sum))
|
|
105
|
+
errors.push({ path: `${at}.summary`, message: 'does not match the sum of its groups' });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function countItems(items) {
|
|
109
|
+
const counts = { total: 0, pass: 0, fail: 0, warning: 0, unanswered: 0 };
|
|
110
|
+
for (const item of items) {
|
|
111
|
+
counts.total += 1;
|
|
112
|
+
const status = isRecord(item) ? item.status : null;
|
|
113
|
+
if (status === 'pass' || status === 'fail' || status === 'warning')
|
|
114
|
+
counts[status] += 1;
|
|
115
|
+
else
|
|
116
|
+
counts.unanswered += 1;
|
|
117
|
+
}
|
|
118
|
+
return counts;
|
|
119
|
+
}
|
|
120
|
+
const sameCounts = (a, b) => a.total === b.total && a.pass === b.pass && a.fail === b.fail && a.warning === b.warning && a.unanswered === b.unanswered;
|
|
121
|
+
//# sourceMappingURL=portable-manual-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-manual-report.js","sourceRoot":"","sources":["../../src/review/portable-manual-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type AutomationReportProvenance } from './portable-automation-provenance.js';
|
|
2
|
+
export interface PortableReportValidationError {
|
|
3
|
+
path: string;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
/** Opaque sRGB document colours; named/alpha/short forms are intentionally excluded. */
|
|
7
|
+
export declare function isRgbColor(value: unknown): value is string;
|
|
8
|
+
/** Heading text size in points: absent prints the default; the bounds match the chart text size (6-24). */
|
|
9
|
+
export declare const BLOCK_TITLE_SIZE_MIN = 6;
|
|
10
|
+
export declare const BLOCK_TITLE_SIZE_MAX = 24;
|
|
11
|
+
/** How the heading looks, shared by every block kind that has one (#6632). Absent fields print as before. */
|
|
12
|
+
export interface BlockHeaderStyleFields {
|
|
13
|
+
/** Heading text size, `BLOCK_TITLE_SIZE_MIN`-`BLOCK_TITLE_SIZE_MAX` points. */
|
|
14
|
+
titleFontSize?: number;
|
|
15
|
+
/** Heading ink in `#RRGGBB`; absent is black, or black/white by contrast when a background is set. */
|
|
16
|
+
titleTextColor?: string;
|
|
17
|
+
/** Heading strip background in `#RRGGBB`; absent is transparent paper. */
|
|
18
|
+
titleBackgroundColor?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Authored presentation belongs to the document, independently of its source (#6547). */
|
|
21
|
+
export interface BlockTitle extends BlockHeaderStyleFields {
|
|
22
|
+
title?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function validateBlockTitle(block: Record<string, unknown>, at: string, errors: PortableReportValidationError[]): void;
|
|
25
|
+
/** Source identity is evidence about the original run, never a live selector. */
|
|
26
|
+
export interface ReportModelScope {
|
|
27
|
+
name: string;
|
|
28
|
+
fingerprint?: string;
|
|
29
|
+
}
|
|
30
|
+
/** The author's choice to print or omit a report's stamp rows (#6566, #6678).
|
|
31
|
+
* Absent means shown, so every document saved before the choice printed the same. */
|
|
32
|
+
export interface ReportStampChoice {
|
|
33
|
+
showStamp?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface ReportProvenance extends ReportStampChoice {
|
|
36
|
+
savedReportId?: string;
|
|
37
|
+
/** Captured workflow execution identity; travels with the evidence, never a live binding. */
|
|
38
|
+
automation?: AutomationReportProvenance;
|
|
39
|
+
reportModels?: ReportModelScope[];
|
|
40
|
+
}
|
|
41
|
+
export declare function validateReportProvenance(block: Record<string, unknown>, at: string, errors: PortableReportValidationError[]): void;
|
|
42
|
+
//# sourceMappingURL=portable-report-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-report-metadata.d.ts","sourceRoot":"","sources":["../../src/review/portable-report-metadata.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACpH,MAAM,WAAW,6BAA6B;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAEhF,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAED,2GAA2G;AAC3G,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,6GAA6G;AAC7G,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,0FAA0F;AAC1F,MAAM,WAAW,UAAW,SAAQ,sBAAsB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAS5H;AAED,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AACxE;qFACqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAalI"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { isAutomationReportProvenance } from './portable-automation-provenance.js';
|
|
5
|
+
/** Opaque sRGB document colours; named/alpha/short forms are intentionally excluded. */
|
|
6
|
+
export function isRgbColor(value) {
|
|
7
|
+
return typeof value === 'string' && /^#[0-9a-f]{6}$/i.test(value);
|
|
8
|
+
}
|
|
9
|
+
/** Heading text size in points: absent prints the default; the bounds match the chart text size (6-24). */
|
|
10
|
+
export const BLOCK_TITLE_SIZE_MIN = 6;
|
|
11
|
+
export const BLOCK_TITLE_SIZE_MAX = 24;
|
|
12
|
+
export function validateBlockTitle(block, at, errors) {
|
|
13
|
+
if (block.title !== undefined && typeof block.title !== 'string')
|
|
14
|
+
errors.push({ path: `${at}.title`, message: 'expected a string' });
|
|
15
|
+
const size = block.titleFontSize;
|
|
16
|
+
if (size !== undefined && (typeof size !== 'number' || !Number.isFinite(size) || size < BLOCK_TITLE_SIZE_MIN || size > BLOCK_TITLE_SIZE_MAX)) {
|
|
17
|
+
errors.push({ path: `${at}.titleFontSize`, message: `expected a number between ${BLOCK_TITLE_SIZE_MIN} and ${BLOCK_TITLE_SIZE_MAX}` });
|
|
18
|
+
}
|
|
19
|
+
for (const key of ['titleTextColor', 'titleBackgroundColor']) {
|
|
20
|
+
if (block[key] !== undefined && !isRgbColor(block[key]))
|
|
21
|
+
errors.push({ path: `${at}.${key}`, message: 'expected an RGB colour in #RRGGBB form' });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function validateReportProvenance(block, at, errors) {
|
|
25
|
+
if (block.showStamp !== undefined && typeof block.showStamp !== 'boolean')
|
|
26
|
+
errors.push({ path: `${at}.showStamp`, message: 'expected a boolean' });
|
|
27
|
+
if (block.automation !== undefined && !isAutomationReportProvenance(block.automation)) {
|
|
28
|
+
errors.push({ path: `${at}.automation`, message: 'expected valid workflow report provenance' });
|
|
29
|
+
}
|
|
30
|
+
if (block.savedReportId !== undefined && (typeof block.savedReportId !== 'string' || !block.savedReportId)) {
|
|
31
|
+
errors.push({ path: `${at}.savedReportId`, message: 'expected a non-empty string' });
|
|
32
|
+
}
|
|
33
|
+
if (block.reportModels !== undefined && (!Array.isArray(block.reportModels) || !block.reportModels.every((model) => {
|
|
34
|
+
if (typeof model !== 'object' || model === null || Array.isArray(model))
|
|
35
|
+
return false;
|
|
36
|
+
const m = model;
|
|
37
|
+
return typeof m.name === 'string' && m.name.trim().length > 0 && (m.fingerprint === undefined || (typeof m.fingerprint === 'string' && m.fingerprint.length > 0));
|
|
38
|
+
})))
|
|
39
|
+
errors.push({ path: `${at}.reportModels`, message: 'expected non-empty model names and optional non-empty fingerprints' });
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=portable-report-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-report-metadata.js","sourceRoot":"","sources":["../../src/review/portable-report-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AutomationReportProvenance } from './portable-automation-provenance.js';
|
|
2
|
+
import { type IdsReportBlock } from './portable-ids-report.js';
|
|
3
|
+
import { type ManualReportBlock } from './portable-manual-report.js';
|
|
4
|
+
export type ValidationReportSnapshot = IdsReportBlock | ManualReportBlock;
|
|
5
|
+
export interface SavedValidationReport {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
snapshot: ValidationReportSnapshot;
|
|
9
|
+
automation?: AutomationReportProvenance;
|
|
10
|
+
}
|
|
11
|
+
export declare function validateSavedReport(value: unknown): value is SavedValidationReport;
|
|
12
|
+
//# sourceMappingURL=portable-saved-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-saved-validation.d.ts","sourceRoot":"","sources":["../../src/review/portable-saved-validation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoD,KAAK,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACxI,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhG,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAC1E,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,wBAAwB,CAAC;IACnC,UAAU,CAAC,EAAE,0BAA0B,CAAC;CACzC;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAelF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { isAutomationReportProvenance, sameReportEvidence } from './portable-automation-provenance.js';
|
|
5
|
+
import { validateIdsReportBlock } from './portable-ids-report.js';
|
|
6
|
+
import { validateManualReportBlock } from './portable-manual-report.js';
|
|
7
|
+
export function validateSavedReport(value) {
|
|
8
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
9
|
+
return false;
|
|
10
|
+
const entry = value;
|
|
11
|
+
if (typeof entry.id !== 'string' || !entry.id || typeof entry.name !== 'string' || !entry.name.trim())
|
|
12
|
+
return false;
|
|
13
|
+
if (entry.automation !== undefined && !isAutomationReportProvenance(entry.automation))
|
|
14
|
+
return false;
|
|
15
|
+
const raw = entry.snapshot;
|
|
16
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
|
|
17
|
+
return false;
|
|
18
|
+
const block = raw;
|
|
19
|
+
if (typeof block.id !== 'string' || !block.id || typeof block.generatedAt !== 'string' || !Number.isFinite(Date.parse(block.generatedAt)))
|
|
20
|
+
return false;
|
|
21
|
+
if (entry.automation !== undefined && block.automation !== undefined && !sameReportEvidence(entry.automation, block.automation))
|
|
22
|
+
return false;
|
|
23
|
+
const errors = [];
|
|
24
|
+
if (block.kind === 'ids-report')
|
|
25
|
+
validateIdsReportBlock(block, 'snapshot', errors);
|
|
26
|
+
else if (block.kind === 'manual-report')
|
|
27
|
+
validateManualReportBlock(block, 'snapshot', errors);
|
|
28
|
+
else
|
|
29
|
+
return false;
|
|
30
|
+
return errors.length === 0;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=portable-saved-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-saved-validation.js","sourceRoot":"","sources":["../../src/review/portable-saved-validation.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAmC,MAAM,qCAAqC,CAAC;AACxI,OAAO,EAAE,sBAAsB,EAAuB,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAA0B,MAAM,6BAA6B,CAAC;AAUhG,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACpH,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACpG,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACxJ,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9I,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;SAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;QAAE,yBAAyB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;;QACzF,OAAO,KAAK,CAAC;IAClB,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** Canonical saved failure evidence wire contract shared by document import and native Review (#7372). */
|
|
2
|
+
export declare const SAVED_VALIDATION_LIMITS: {
|
|
3
|
+
readonly rows: 2000;
|
|
4
|
+
readonly sourceRows: 50000;
|
|
5
|
+
readonly rowBytes: 8192;
|
|
6
|
+
readonly totalBytes: 1048576;
|
|
7
|
+
readonly text: 1024;
|
|
8
|
+
readonly checks: 1024;
|
|
9
|
+
readonly definitionBytes: 131072;
|
|
10
|
+
};
|
|
11
|
+
export interface SavedValidationElement {
|
|
12
|
+
/** Identity within this immutable capture, independent of ephemeral express/model ids. */
|
|
13
|
+
id: string;
|
|
14
|
+
specificationId: string;
|
|
15
|
+
GlobalId: string | null;
|
|
16
|
+
modelName: string | null;
|
|
17
|
+
modelFingerprint?: string;
|
|
18
|
+
ifcType: string;
|
|
19
|
+
Name?: string;
|
|
20
|
+
title: string;
|
|
21
|
+
nativeStatus: 'failed' | 'warning';
|
|
22
|
+
detail: string[];
|
|
23
|
+
/** #7371: digest of the failed requirements and actual values, independent of message language. */
|
|
24
|
+
signature?: string;
|
|
25
|
+
}
|
|
26
|
+
/** #7371: exactly what the native run checked, as the run reconciler compares it. */
|
|
27
|
+
export interface SavedValidationDefinition {
|
|
28
|
+
/** Digest of the whole IDS document or rule-set content. */
|
|
29
|
+
source: string;
|
|
30
|
+
/** Digest of each check (specification, plus rule content for rules), by native specification id. */
|
|
31
|
+
checks: Array<{
|
|
32
|
+
id: string;
|
|
33
|
+
digest: string;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
export interface SavedValidationElements {
|
|
37
|
+
version: 1;
|
|
38
|
+
rows: SavedValidationElement[];
|
|
39
|
+
/** Failed/warning entity rows encountered before the scan cap, not a population total. */
|
|
40
|
+
observed: number;
|
|
41
|
+
/** Encountered failure rows that snapshot limits could not retain. */
|
|
42
|
+
omitted: number;
|
|
43
|
+
/** Native source coverage and snapshot-limit disclosures, never inferred resolution. */
|
|
44
|
+
gaps: string[];
|
|
45
|
+
/** Absent in snapshots saved before #7371 or when the run's content was not recorded: such rows cannot be re-examined. */
|
|
46
|
+
definition?: SavedValidationDefinition;
|
|
47
|
+
}
|
|
48
|
+
export declare function isSavedValidationElement(value: unknown): value is SavedValidationElement;
|
|
49
|
+
export declare function validateSavedValidationElements(value: unknown, at: string, errors: Array<{
|
|
50
|
+
path: string;
|
|
51
|
+
message: string;
|
|
52
|
+
}>): void;
|
|
53
|
+
//# sourceMappingURL=portable-validation-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-validation-evidence.d.ts","sourceRoot":"","sources":["../../src/review/portable-validation-evidence.ts"],"names":[],"mappings":"AAIA,0GAA0G;AAC1G,eAAO,MAAM,uBAAuB;;;;;;;;CAG1B,CAAC;AAWX,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,qFAAqF;AACrF,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AACD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0HAA0H;IAC1H,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAgBD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB,CAQxF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQlI"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/** Canonical saved failure evidence wire contract shared by document import and native Review (#7372). */
|
|
5
|
+
export const SAVED_VALIDATION_LIMITS = {
|
|
6
|
+
rows: 2_000, sourceRows: 50_000, rowBytes: 8_192, totalBytes: 1_048_576,
|
|
7
|
+
text: 1_024, checks: 1_024, definitionBytes: 131_072,
|
|
8
|
+
};
|
|
9
|
+
const SAVED_ELEMENT_LIMIT = SAVED_VALIDATION_LIMITS.rows;
|
|
10
|
+
const ROW_BYTE_LIMIT = SAVED_VALIDATION_LIMITS.rowBytes;
|
|
11
|
+
const TOTAL_BYTE_LIMIT = SAVED_VALIDATION_LIMITS.totalBytes;
|
|
12
|
+
const TEXT_LIMIT = SAVED_VALIDATION_LIMITS.text;
|
|
13
|
+
const CHECK_LIMIT = SAVED_VALIDATION_LIMITS.checks;
|
|
14
|
+
const DEFINITION_BYTE_LIMIT = SAVED_VALIDATION_LIMITS.definitionBytes;
|
|
15
|
+
const DIGEST = /^xxh64:[0-9a-f]{16}$/;
|
|
16
|
+
const EVIDENCE_FIELDS = new Set(['version', 'rows', 'observed', 'omitted', 'gaps', 'definition']);
|
|
17
|
+
const ROW_FIELDS = new Set(['id', 'specificationId', 'GlobalId', 'modelName', 'modelFingerprint', 'ifcType', 'Name', 'title', 'nativeStatus', 'detail', 'signature']);
|
|
18
|
+
const digest = (value) => typeof value === 'string' && DIGEST.test(value);
|
|
19
|
+
function validDefinition(value) {
|
|
20
|
+
if (value === undefined)
|
|
21
|
+
return true;
|
|
22
|
+
if (!record(value) || Object.keys(value).some(key => key !== 'source' && key !== 'checks') || !digest(value.source)
|
|
23
|
+
|| !Array.isArray(value.checks) || value.checks.length > CHECK_LIMIT
|
|
24
|
+
|| new TextEncoder().encode(JSON.stringify(value)).byteLength > DEFINITION_BYTE_LIMIT)
|
|
25
|
+
return false;
|
|
26
|
+
const checks = value.checks;
|
|
27
|
+
return checks.every(check => record(check) && Object.keys(check).length === 2 && text(check.id) && digest(check.digest))
|
|
28
|
+
&& new Set(checks.map(check => check.id)).size === checks.length;
|
|
29
|
+
}
|
|
30
|
+
const record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
31
|
+
const text = (value, max = TEXT_LIMIT) => typeof value === 'string' && value.length > 0 && value.length <= max;
|
|
32
|
+
const count = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
|
|
33
|
+
export function isSavedValidationElement(value) {
|
|
34
|
+
if (!record(value) || Object.keys(value).some(key => !ROW_FIELDS.has(key)) || !text(value.id, 128) || !text(value.specificationId) || (value.GlobalId !== null && !text(value.GlobalId, 200))
|
|
35
|
+
|| (value.modelName !== null && !text(value.modelName)) || (value.modelFingerprint !== undefined && !text(value.modelFingerprint, 256))
|
|
36
|
+
|| !text(value.ifcType, 200) || (value.Name !== undefined && (typeof value.Name !== 'string' || value.Name.length > TEXT_LIMIT))
|
|
37
|
+
|| typeof value.title !== 'string' || value.title.length > TEXT_LIMIT
|
|
38
|
+
|| (value.nativeStatus !== 'failed' && value.nativeStatus !== 'warning') || !Array.isArray(value.detail)
|
|
39
|
+
|| value.detail.length > 8 || !value.detail.every(line => text(line)) || (value.signature !== undefined && !digest(value.signature)))
|
|
40
|
+
return false;
|
|
41
|
+
return new TextEncoder().encode(JSON.stringify(value)).byteLength <= ROW_BYTE_LIMIT;
|
|
42
|
+
}
|
|
43
|
+
export function validateSavedValidationElements(value, at, errors) {
|
|
44
|
+
if (!record(value) || Object.keys(value).some(key => !EVIDENCE_FIELDS.has(key)) || value.version !== 1 || !Array.isArray(value.rows) || value.rows.length > SAVED_ELEMENT_LIMIT
|
|
45
|
+
|| !count(value.observed) || !count(value.omitted) || value.observed !== value.rows.length + value.omitted
|
|
46
|
+
|| !Array.isArray(value.gaps) || value.gaps.length > 16 || !value.gaps.every(gap => text(gap))
|
|
47
|
+
|| !value.rows.every(isSavedValidationElement) || !validDefinition(value.definition) || new Set(value.rows.map(row => row.id)).size !== value.rows.length
|
|
48
|
+
|| new TextEncoder().encode(JSON.stringify(value)).byteLength > TOTAL_BYTE_LIMIT) {
|
|
49
|
+
errors.push({ path: at, message: 'expected bounded version-1 saved validation element evidence' });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=portable-validation-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-validation-evidence.js","sourceRoot":"","sources":["../../src/review/portable-validation-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SavedValidationReport } from './portable-saved-validation.js';
|
|
2
|
+
import type { SavedValidationElement } from './portable-validation-evidence.js';
|
|
3
|
+
import type { FindingLifecycle, FindingSourceResult, ReviewMessage, RunGap } from './types.js';
|
|
4
|
+
/** One projection of the actual saved failure rows. Re-examination and human
|
|
5
|
+
* decisions remain with the native caller; importing alone supplies neither.
|
|
6
|
+
*/
|
|
7
|
+
export declare function savedValidationFacts<Message extends ReviewMessage = ReviewMessage>(saved: SavedValidationReport, options?: {
|
|
8
|
+
incomplete?: RunGap<Message>[];
|
|
9
|
+
outcome?: (row: SavedValidationElement) => {
|
|
10
|
+
lifecycle: FindingLifecycle;
|
|
11
|
+
notes?: Message[];
|
|
12
|
+
} | undefined;
|
|
13
|
+
}): FindingSourceResult<Message>;
|
|
14
|
+
//# sourceMappingURL=saved-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saved-validation.d.ts","sourceRoot":"","sources":["../../src/review/saved-validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAc,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG3G;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,EAAE,KAAK,EAAE,qBAAqB,EAC9G,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK;QAAE,SAAS,EAAE,gBAAgB,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,SAAS,CAAA;CAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAyBlJ"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { typeDisciplines } from './disciplines.js';
|
|
2
|
+
/** One projection of the actual saved failure rows. Re-examination and human
|
|
3
|
+
* decisions remain with the native caller; importing alone supplies neither.
|
|
4
|
+
*/
|
|
5
|
+
export function savedValidationFacts(saved, options = {}) {
|
|
6
|
+
const snapshot = saved.snapshot;
|
|
7
|
+
if (snapshot.kind !== 'ids-report')
|
|
8
|
+
return { runs: [], findings: [] };
|
|
9
|
+
const captured = snapshot.elementEvidence;
|
|
10
|
+
const run = { id: JSON.stringify(['saved-validation', saved.id]), source: 'validation', temporal: 'historical',
|
|
11
|
+
label: snapshot.sourceName, capturedAt: snapshot.generatedAt, complete: false,
|
|
12
|
+
models: snapshot.reportModels?.map(model => model.name) ?? [],
|
|
13
|
+
incomplete: [...(options.incomplete ?? [{ code: 'partial-source', detail: 'Imported history is not independent native execution.' }]),
|
|
14
|
+
...(captured?.gaps.map(detail => ({ code: 'partial-source', detail })) ?? [])] };
|
|
15
|
+
return { runs: [run], findings: (captured?.rows ?? []).map(row => {
|
|
16
|
+
const outcome = options.outcome?.(row);
|
|
17
|
+
const identityAvailable = !!row.GlobalId && !!row.modelName;
|
|
18
|
+
return { id: JSON.stringify([run.id, row.id]),
|
|
19
|
+
lineage: JSON.stringify(['saved-validation', snapshot.sourceName, row.specificationId, row.modelName, row.GlobalId, row.id]),
|
|
20
|
+
source: 'validation', run, elements: row.GlobalId ? [{ globalId: row.GlobalId, modelId: null, modelName: row.modelName,
|
|
21
|
+
ifcType: row.ifcType, ...(row.Name !== undefined ? { name: row.Name } : {}),
|
|
22
|
+
...(!identityAvailable ? { nativeUnresolved: 'unmatched' } : {}) }] : [],
|
|
23
|
+
nativeStatus: row.nativeStatus, title: row.title, detail: [...row.detail,
|
|
24
|
+
...(row.modelFingerprint ? [`source fingerprint ${row.modelFingerprint}`] : []),
|
|
25
|
+
...(!identityAvailable ? ['Saved durable identity unavailable'] : [])],
|
|
26
|
+
...(outcome?.notes ? { notes: outcome.notes } : {}),
|
|
27
|
+
lifecycle: outcome?.lifecycle ?? 'not-evaluated', disciplines: typeDisciplines(row.ifcType), storeys: [],
|
|
28
|
+
evidence: { kind: 'saved-validation', reportId: saved.id, rowId: row.id }, };
|
|
29
|
+
}) };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=saved-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saved-validation.js","sourceRoot":"","sources":["../../src/review/saved-validation.ts"],"names":[],"mappings":"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"}
|
package/dist/review.d.ts
CHANGED
|
@@ -8,4 +8,23 @@ export { validationFindings } from './review/validation.js';
|
|
|
8
8
|
export { bcfFindings } from './review/bcf.js';
|
|
9
9
|
export { typeDisciplines } from './review/disciplines.js';
|
|
10
10
|
export { snapshotFrom, type ReviewSnapshot } from './review/snapshot.js';
|
|
11
|
+
export { NativeReviewCaptures } from './review/native-captures.js';
|
|
12
|
+
export type { NativeReviewModel, ReviewCaptureToken } from './review/capture-types.js';
|
|
13
|
+
export { readNativeReview } from './review/native-snapshot.js';
|
|
14
|
+
export { decodeSavedAnalysisRun } from './review/portable-analysis.js';
|
|
15
|
+
export type { SavedAnalysisRun, SavedClashRef, SavedDistance, SavedRunClash, SavedRunModel, SavedRunValidationReport } from './review/portable-analysis.js';
|
|
16
|
+
export { SAVED_VALIDATION_LIMITS, isSavedValidationElement, validateSavedValidationElements } from './review/portable-validation-evidence.js';
|
|
17
|
+
export type { SavedValidationElement, SavedValidationDefinition, SavedValidationElements } from './review/portable-validation-evidence.js';
|
|
18
|
+
export { bindSavedAnalysisModels } from './review/portable-analysis-binding.js';
|
|
19
|
+
export type { BindRefusalCode, BindRefusal } from './review/portable-analysis-binding.js';
|
|
20
|
+
export * from './review/portable-automation-provenance.js';
|
|
21
|
+
export * from './review/portable-report-metadata.js';
|
|
22
|
+
export { reportBlockSourceKind, validateIdsReportBlock } from './review/portable-ids-report.js';
|
|
23
|
+
export type { IdsReportCheckSummary, IdsReportRuleSummary, IdsReportCardinality, IdsReportVariant, IdsReportBlock } from './review/portable-ids-report.js';
|
|
24
|
+
export { validateManualReportBlock } from './review/portable-manual-report.js';
|
|
25
|
+
export type { ManualReportVerdict, ManualReportCounts, ManualReportItem, ManualReportBlock } from './review/portable-manual-report.js';
|
|
26
|
+
export * from './review/portable-saved-validation.js';
|
|
27
|
+
export { clashFindings, clashGlobalId } from './review/clash.js';
|
|
28
|
+
export { clashDisciplineCandidates, clashOccurrenceKey } from './review/clash-identity.js';
|
|
29
|
+
export { savedValidationFacts } from './review/saved-validation.js';
|
|
11
30
|
//# sourceMappingURL=review.d.ts.map
|
package/dist/review.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAC9F,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAC9F,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAE5J,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAC9I,YAAY,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAE3I,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAE1F,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAChG,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC3J,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvI,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|