@mitre/hdf-diff 3.1.0 → 3.3.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 +1 -1
- package/dist/index.d.ts +93 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +906 -45
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -104,7 +104,7 @@ hdf diff --mode baseline golden.json current.json
|
|
|
104
104
|
The diff engine is also available as a Go module:
|
|
105
105
|
|
|
106
106
|
```go
|
|
107
|
-
import diff "github.com/mitre/hdf-libs/hdf-diff/go"
|
|
107
|
+
import diff "github.com/mitre/hdf-libs/hdf-diff/go/v3"
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
See the [hdf-diff/go](https://github.com/mitre/hdf-libs/tree/main/hdf-diff/go) directory for the Go API.
|
package/dist/index.d.ts
CHANGED
|
@@ -81,12 +81,26 @@ type RequirementState = 'new' | 'absent' | 'unchanged' | 'updated' | 'fixed' | '
|
|
|
81
81
|
interface FieldChange {
|
|
82
82
|
/** The operation type: add, remove, or replace */
|
|
83
83
|
op: 'add' | 'remove' | 'replace';
|
|
84
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Dot-notation path to the changed field. For CVE-ecosystem types the path
|
|
86
|
+
* uses bracket notation to identify matched entries by their natural key,
|
|
87
|
+
* e.g.:
|
|
88
|
+
* - `cvss[CVE-2024-1234].baseScore`
|
|
89
|
+
* - `cvss[CVE-2024-1234].baseVector.AV`
|
|
90
|
+
* - `affectedPackages[openssl@1.1.1].fixedInVersion`
|
|
91
|
+
* - `cwe`, `epss`, `epss.score`, `kev`, `kev.inKev`
|
|
92
|
+
*/
|
|
85
93
|
path: string;
|
|
86
94
|
/** Value in the old evaluation (undefined for 'add' operations) */
|
|
87
95
|
oldValue?: unknown;
|
|
88
96
|
/** Value in the new evaluation (undefined for 'remove' operations) */
|
|
89
97
|
newValue?: unknown;
|
|
98
|
+
/**
|
|
99
|
+
* Optional human-readable annotation for changes that need extra context
|
|
100
|
+
* beyond raw old/new values (e.g., "Newly added to CISA KEV catalog as
|
|
101
|
+
* of 2024-01-20"). Renderers should surface this prominently when present.
|
|
102
|
+
*/
|
|
103
|
+
message?: string;
|
|
90
104
|
}
|
|
91
105
|
/**
|
|
92
106
|
* The diff for a single requirement across two evaluations.
|
|
@@ -204,7 +218,7 @@ interface Annotation {
|
|
|
204
218
|
/**
|
|
205
219
|
* The top-level comparison result comparing two or more HDF evaluations.
|
|
206
220
|
*/
|
|
207
|
-
interface
|
|
221
|
+
interface HDFComparison {
|
|
208
222
|
/** Schema version for the comparison format */
|
|
209
223
|
formatVersion: '1.0.0';
|
|
210
224
|
/** The mode of comparison */
|
|
@@ -247,8 +261,10 @@ interface MatchingConfig {
|
|
|
247
261
|
type DiffStatus = RequirementState;
|
|
248
262
|
/** @deprecated Use ComparisonSummary instead */
|
|
249
263
|
type DiffSummary = ComparisonSummary;
|
|
250
|
-
/** @deprecated Use
|
|
251
|
-
type
|
|
264
|
+
/** @deprecated Use HDFComparison instead */
|
|
265
|
+
type HdfComparison = HDFComparison;
|
|
266
|
+
/** @deprecated Use HDFComparison instead */
|
|
267
|
+
type HdfDiff = HDFComparison;
|
|
252
268
|
//#endregion
|
|
253
269
|
//#region src/diff.d.ts
|
|
254
270
|
/**
|
|
@@ -279,7 +295,7 @@ interface DiffOptions {
|
|
|
279
295
|
* For fleet mode, `newResults` can be an array of documents, each compared
|
|
280
296
|
* pairwise against `oldResults` (the reference).
|
|
281
297
|
*/
|
|
282
|
-
declare function diffHdf(oldResults: Record<string, unknown>, newResults: Record<string, unknown> | Record<string, unknown>[], options?: DiffOptions):
|
|
298
|
+
declare function diffHdf(oldResults: Record<string, unknown>, newResults: Record<string, unknown> | Record<string, unknown>[], options?: DiffOptions): HDFComparison;
|
|
283
299
|
/**
|
|
284
300
|
* Compare two HDF baseline documents and produce a structured comparison
|
|
285
301
|
* showing requirement changes between baseline versions.
|
|
@@ -288,7 +304,7 @@ declare function diffHdf(oldResults: Record<string, unknown>, newResults: Record
|
|
|
288
304
|
* definitions — requirements without results. There is no status-based classification
|
|
289
305
|
* (fixed/regressed); only metadata changes (title, impact, descriptions, tags) are tracked.
|
|
290
306
|
*/
|
|
291
|
-
declare function diffBaselines(oldBaseline: Record<string, unknown>, newBaseline: Record<string, unknown>, options?: DiffOptions):
|
|
307
|
+
declare function diffBaselines(oldBaseline: Record<string, unknown>, newBaseline: Record<string, unknown>, options?: DiffOptions): HDFComparison;
|
|
292
308
|
/**
|
|
293
309
|
* Compare two HDF system documents and produce a structured comparison
|
|
294
310
|
* showing component-level changes between system versions.
|
|
@@ -297,7 +313,7 @@ declare function diffBaselines(oldBaseline: Record<string, unknown>, newBaseline
|
|
|
297
313
|
* to exact name matching. Top-level system fields, data flows, and embedded
|
|
298
314
|
* SBOMs are also compared.
|
|
299
315
|
*/
|
|
300
|
-
declare function diffSystems(oldSystem: Record<string, unknown>, newSystem: Record<string, unknown>, options?: DiffOptions):
|
|
316
|
+
declare function diffSystems(oldSystem: Record<string, unknown>, newSystem: Record<string, unknown>, options?: DiffOptions): HDFComparison;
|
|
301
317
|
//#endregion
|
|
302
318
|
//#region src/status.d.ts
|
|
303
319
|
/**
|
|
@@ -377,6 +393,8 @@ interface MatchPair {
|
|
|
377
393
|
strategy: string;
|
|
378
394
|
/** Confidence score for the match (0.0 - 1.0) */
|
|
379
395
|
confidence: number;
|
|
396
|
+
/** Relationship type for delta matching: 'primary' (code source) or 'related' (informational) */
|
|
397
|
+
relationship?: 'primary' | 'related';
|
|
380
398
|
}
|
|
381
399
|
/**
|
|
382
400
|
* A pluggable strategy for matching requirements between evaluations.
|
|
@@ -420,7 +438,11 @@ declare function createMappedIdStrategy(mapping: Record<string, string>): MatchS
|
|
|
420
438
|
* by multiple old or multiple new requirements) are skipped, and those
|
|
421
439
|
* requirements are left unmatched.
|
|
422
440
|
*
|
|
423
|
-
*
|
|
441
|
+
* As a fallback, also pairs unambiguous CWE matches (preferring the
|
|
442
|
+
* structured `req.cwe[]` field over the legacy `tags.cwe`). This catches
|
|
443
|
+
* CVE-ecosystem findings where CCI is absent but CWE is present.
|
|
444
|
+
*
|
|
445
|
+
* Confidence is 0.8 for CCI matches and 0.6 for CWE-fallback matches.
|
|
424
446
|
*/
|
|
425
447
|
declare function createCciMatchStrategy(): MatchStrategy;
|
|
426
448
|
//#endregion
|
|
@@ -450,6 +472,58 @@ declare function jaccardSimilarity(a: Set<string>, b: Set<string>): number;
|
|
|
450
472
|
*/
|
|
451
473
|
declare function createFuzzyTitleStrategy(minConfidence?: number): MatchStrategy;
|
|
452
474
|
//#endregion
|
|
475
|
+
//#region src/matching/srg-deterministic.d.ts
|
|
476
|
+
/**
|
|
477
|
+
* Create a deterministic SRG matching strategy (Tier 1 of the delta pipeline).
|
|
478
|
+
*
|
|
479
|
+
* Matches requirements by exact `tags.gtitle` (SRG-OS requirement ID).
|
|
480
|
+
*
|
|
481
|
+
* For each gtitle shared between old and new:
|
|
482
|
+
* - 1 old + 1 new → single MatchPair (confidence 1.0, relationship "primary")
|
|
483
|
+
* - 1 new + N old → N MatchPairs (first old "primary", rest "related")
|
|
484
|
+
* - N new + 1 old → N MatchPairs (first new "primary", rest "related")
|
|
485
|
+
* - N:M (both > 1) → skip, leave for fallback strategies
|
|
486
|
+
*
|
|
487
|
+
* Requirements without a gtitle pass through as unmatched.
|
|
488
|
+
*/
|
|
489
|
+
declare function createSrgDeterministicStrategy(): MatchStrategy;
|
|
490
|
+
//#endregion
|
|
491
|
+
//#region src/matching/srg-cci-tiebreak.d.ts
|
|
492
|
+
/**
|
|
493
|
+
* Create an SRG CCI Tiebreak matching strategy (Tier 2 of the delta pipeline).
|
|
494
|
+
*
|
|
495
|
+
* Handles ambiguous SRG matches where multiple old or new requirements share
|
|
496
|
+
* the same tags.gtitle. Uses a composite score of CCI Jaccard (70%) and
|
|
497
|
+
* token Jaccard on titles (30%) to pick the best match.
|
|
498
|
+
*
|
|
499
|
+
* Only activates for gtitle groups with multiple candidates (>1 old or >1 new).
|
|
500
|
+
* 1:1 matches are left for srgDeterministic (Tier 1).
|
|
501
|
+
*/
|
|
502
|
+
declare function createSrgCciTiebreakStrategy(): MatchStrategy;
|
|
503
|
+
//#endregion
|
|
504
|
+
//#region src/matching/vendor-fuzzy-title.d.ts
|
|
505
|
+
/**
|
|
506
|
+
* Compute the Levenshtein edit distance between two strings.
|
|
507
|
+
*/
|
|
508
|
+
declare function levenshteinDistance(a: string, b: string): number;
|
|
509
|
+
/**
|
|
510
|
+
* Normalized Levenshtein distance (0.0 = identical, 1.0 = completely different).
|
|
511
|
+
*/
|
|
512
|
+
declare function normalizedLevenshtein(a: string, b: string): number;
|
|
513
|
+
/**
|
|
514
|
+
* Create a vendor fuzzy title matching strategy (Tier 3 of the delta pipeline).
|
|
515
|
+
*
|
|
516
|
+
* Cross-vendor matching with auto-detected vendor prefix stripping.
|
|
517
|
+
* Uses normalized Levenshtein distance to compare titles after removing
|
|
518
|
+
* the dominant vendor prefix (e.g., "RHEL 9" or "Amazon Linux 2023").
|
|
519
|
+
*
|
|
520
|
+
* Accepts matches below threshold 0.45 (confidence = 1.0 - distance).
|
|
521
|
+
* Greedy best-match.
|
|
522
|
+
*
|
|
523
|
+
* @param acceptThreshold Max normalized Levenshtein distance to accept (default: 0.45)
|
|
524
|
+
*/
|
|
525
|
+
declare function createVendorFuzzyTitleStrategy(acceptThreshold?: number): MatchStrategy;
|
|
526
|
+
//#endregion
|
|
453
527
|
//#region src/matching/index.d.ts
|
|
454
528
|
/**
|
|
455
529
|
* Options for configuring requirement matching.
|
|
@@ -559,7 +633,7 @@ interface RenderOptions {
|
|
|
559
633
|
//#endregion
|
|
560
634
|
//#region src/renderers/json.d.ts
|
|
561
635
|
/**
|
|
562
|
-
* Render an
|
|
636
|
+
* Render an HDFComparison as a JSON string.
|
|
563
637
|
*
|
|
564
638
|
* - `detail: 'summary'` -- only `{ formatVersion, comparisonMode, summary }`
|
|
565
639
|
* - `detail: 'control'` -- full document but `before`/`after` stripped from requirementDiffs
|
|
@@ -567,11 +641,11 @@ interface RenderOptions {
|
|
|
567
641
|
*
|
|
568
642
|
* Default detail level: `'control'`.
|
|
569
643
|
*/
|
|
570
|
-
declare function renderJson(comparison:
|
|
644
|
+
declare function renderJson(comparison: HDFComparison, options?: RenderOptions): string;
|
|
571
645
|
//#endregion
|
|
572
646
|
//#region src/renderers/markdown.d.ts
|
|
573
647
|
/**
|
|
574
|
-
* Render an
|
|
648
|
+
* Render an HDFComparison as a Markdown string.
|
|
575
649
|
*
|
|
576
650
|
* - `detail: 'summary'` -- summary table only
|
|
577
651
|
* - `detail: 'control'` -- summary + per-requirement tables by state
|
|
@@ -579,11 +653,11 @@ declare function renderJson(comparison: HdfComparison, options?: RenderOptions):
|
|
|
579
653
|
*
|
|
580
654
|
* Default detail level: `'control'`.
|
|
581
655
|
*/
|
|
582
|
-
declare function renderMarkdown(comparison:
|
|
656
|
+
declare function renderMarkdown(comparison: HDFComparison, options?: RenderOptions): string;
|
|
583
657
|
//#endregion
|
|
584
658
|
//#region src/renderers/terminal.d.ts
|
|
585
659
|
/**
|
|
586
|
-
* Render an
|
|
660
|
+
* Render an HDFComparison for terminal display with optional ANSI colors.
|
|
587
661
|
*
|
|
588
662
|
* - `detail: 'summary'` -- just the summary line
|
|
589
663
|
* - `detail: 'control'` -- requirement list + summary (excludes unchanged)
|
|
@@ -592,11 +666,11 @@ declare function renderMarkdown(comparison: HdfComparison, options?: RenderOptio
|
|
|
592
666
|
* When `color: false`, no ANSI escape codes are emitted.
|
|
593
667
|
* Default detail level: `'control'`. Default color: `true`.
|
|
594
668
|
*/
|
|
595
|
-
declare function renderTerminal(comparison:
|
|
669
|
+
declare function renderTerminal(comparison: HDFComparison, options?: RenderOptions): string;
|
|
596
670
|
//#endregion
|
|
597
671
|
//#region src/renderers/csv.d.ts
|
|
598
672
|
/**
|
|
599
|
-
* Render an
|
|
673
|
+
* Render an HDFComparison as a CSV string.
|
|
600
674
|
*
|
|
601
675
|
* One row per requirement. Columns:
|
|
602
676
|
* - ID, Title, State, Old Status, New Status, Impact (Old), Impact (New), Change Reasons
|
|
@@ -606,18 +680,18 @@ declare function renderTerminal(comparison: HdfComparison, options?: RenderOptio
|
|
|
606
680
|
* Header row is always included. Standard CSV escaping (RFC 4180).
|
|
607
681
|
* Default detail level: `'control'`.
|
|
608
682
|
*/
|
|
609
|
-
declare function renderCsv(comparison:
|
|
683
|
+
declare function renderCsv(comparison: HDFComparison, options?: RenderOptions): string;
|
|
610
684
|
//#endregion
|
|
611
685
|
//#region src/renderers/index.d.ts
|
|
612
686
|
/**
|
|
613
687
|
* Convenience function to render a comparison in any supported format.
|
|
614
688
|
*
|
|
615
|
-
* @param comparison - The
|
|
689
|
+
* @param comparison - The HDFComparison document to render
|
|
616
690
|
* @param format - Output format: 'json', 'markdown', 'terminal', or 'csv'
|
|
617
691
|
* @param options - Rendering options (detail level, filters, color)
|
|
618
692
|
* @returns The rendered string
|
|
619
693
|
*/
|
|
620
|
-
declare function render(comparison:
|
|
694
|
+
declare function render(comparison: HDFComparison, format: 'json' | 'markdown' | 'terminal' | 'csv', options?: RenderOptions): string;
|
|
621
695
|
//#endregion
|
|
622
|
-
export { type Annotation, type BaselineDiff, type ChangeReason, type ComparisonSummary, type ComponentDiff, type DetailLevel, type DiffOptions, type DiffStatus, type DiffSummary, EXIT_DETAILED_BASELINE_CHANGED, EXIT_DETAILED_DRIFT_ONLY, EXIT_DETAILED_ERROR, EXIT_DETAILED_FIXES_ONLY, EXIT_DETAILED_IDENTICAL, EXIT_DETAILED_MIXED, EXIT_DETAILED_REGRESSIONS_ONLY, EXIT_DIFFERENCES, EXIT_ERROR, EXIT_IDENTICAL, type FieldChange, type HdfComparison, type HdfDiff, type MatchOptions, type MatchPair, type MatchResult, type MatchStrategy, type MatchingConfig, type PackageDiff, type RenderOptions, type RequirementDiff, type RequirementState, type SbomDiffResult, type Source, type ValidationResult, classifyChangeReasons, classifyDiffStatus, computeDetailedExitCode, computeEffectiveStatus, computeExitCode, computeSummary, createCciMatchStrategy, createExactIdStrategy, createFuzzyTitleStrategy, createMappedIdStrategy, diffBaselines, diffHdf, diffSboms, diffSystems, isV1Format, jaccardSimilarity, matchRequirements, normalizeToV2, render, renderCsv, renderJson, renderMarkdown, renderTerminal, tokenize, validateComparison };
|
|
696
|
+
export { type Annotation, type BaselineDiff, type ChangeReason, type ComparisonSummary, type ComponentDiff, type DetailLevel, type DiffOptions, type DiffStatus, type DiffSummary, EXIT_DETAILED_BASELINE_CHANGED, EXIT_DETAILED_DRIFT_ONLY, EXIT_DETAILED_ERROR, EXIT_DETAILED_FIXES_ONLY, EXIT_DETAILED_IDENTICAL, EXIT_DETAILED_MIXED, EXIT_DETAILED_REGRESSIONS_ONLY, EXIT_DIFFERENCES, EXIT_ERROR, EXIT_IDENTICAL, type FieldChange, type HDFComparison, type HdfComparison, type HdfDiff, type MatchOptions, type MatchPair, type MatchResult, type MatchStrategy, type MatchingConfig, type PackageDiff, type RenderOptions, type RequirementDiff, type RequirementState, type SbomDiffResult, type Source, type ValidationResult, classifyChangeReasons, classifyDiffStatus, computeDetailedExitCode, computeEffectiveStatus, computeExitCode, computeSummary, createCciMatchStrategy, createExactIdStrategy, createFuzzyTitleStrategy, createMappedIdStrategy, createSrgCciTiebreakStrategy, createSrgDeterministicStrategy, createVendorFuzzyTitleStrategy, diffBaselines, diffHdf, diffSboms, diffSystems, isV1Format, jaccardSimilarity, levenshteinDistance, matchRequirements, normalizeToV2, normalizedLevenshtein, render, renderCsv, renderJson, renderMarkdown, renderTerminal, tokenize, validateComparison };
|
|
623
697
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/sbom.ts","../src/types.ts","../src/diff.ts","../src/status.ts","../src/summary.ts","../src/normalize.ts","../src/matching/types.ts","../src/matching/exact-id.ts","../src/matching/mapped-id.ts","../src/matching/cci-match.ts","../src/matching/fuzzy-match.ts","../src/matching/index.ts","../src/validate.ts","../src/exit-codes.ts","../src/renderers/types.ts","../src/renderers/json.ts","../src/renderers/markdown.ts","../src/renderers/terminal.ts","../src/renderers/csv.ts","../src/renderers/index.ts"],"mappings":";;AAcA
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/sbom.ts","../src/types.ts","../src/diff.ts","../src/status.ts","../src/summary.ts","../src/normalize.ts","../src/matching/types.ts","../src/matching/exact-id.ts","../src/matching/mapped-id.ts","../src/matching/cci-match.ts","../src/matching/fuzzy-match.ts","../src/matching/srg-deterministic.ts","../src/matching/srg-cci-tiebreak.ts","../src/matching/vendor-fuzzy-title.ts","../src/matching/index.ts","../src/validate.ts","../src/exit-codes.ts","../src/renderers/types.ts","../src/renderers/json.ts","../src/renderers/markdown.ts","../src/renderers/terminal.ts","../src/renderers/csv.ts","../src/renderers/index.ts"],"mappings":"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"}
|