@ifc-lite/cli 0.33.1 → 0.36.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.
Files changed (151) hide show
  1. package/README.md +9 -2
  2. package/dist/commands/anonymize.d.ts.map +1 -1
  3. package/dist/commands/anonymize.js +1 -0
  4. package/dist/commands/anonymize.js.map +1 -1
  5. package/dist/commands/check.d.ts +2 -0
  6. package/dist/commands/check.d.ts.map +1 -0
  7. package/dist/commands/check.js +119 -0
  8. package/dist/commands/check.js.map +1 -0
  9. package/dist/commands/convert.d.ts.map +1 -1
  10. package/dist/commands/convert.js +28 -8
  11. package/dist/commands/convert.js.map +1 -1
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +6 -0
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/delivery-checks-rules.d.ts +37 -0
  16. package/dist/commands/delivery-checks-rules.d.ts.map +1 -0
  17. package/dist/commands/delivery-checks-rules.js +76 -0
  18. package/dist/commands/delivery-checks-rules.js.map +1 -0
  19. package/dist/commands/delivery-checks.d.ts +12 -0
  20. package/dist/commands/delivery-checks.d.ts.map +1 -1
  21. package/dist/commands/delivery-checks.js +16 -5
  22. package/dist/commands/delivery-checks.js.map +1 -1
  23. package/dist/commands/delivery-recipe.d.ts +13 -2
  24. package/dist/commands/delivery-recipe.d.ts.map +1 -1
  25. package/dist/commands/delivery-recipe.js +29 -17
  26. package/dist/commands/delivery-recipe.js.map +1 -1
  27. package/dist/commands/delivery-report.d.ts +2 -2
  28. package/dist/commands/delivery-report.d.ts.map +1 -1
  29. package/dist/commands/delivery-report.js +14 -4
  30. package/dist/commands/delivery-report.js.map +1 -1
  31. package/dist/commands/delivery.d.ts.map +1 -1
  32. package/dist/commands/delivery.js +17 -5
  33. package/dist/commands/delivery.js.map +1 -1
  34. package/dist/commands/diff-content-io.d.ts +50 -0
  35. package/dist/commands/diff-content-io.d.ts.map +1 -0
  36. package/dist/commands/diff-content-io.js +104 -0
  37. package/dist/commands/diff-content-io.js.map +1 -0
  38. package/dist/commands/diff-content-report.d.ts +23 -0
  39. package/dist/commands/diff-content-report.d.ts.map +1 -0
  40. package/dist/commands/diff-content-report.js +67 -0
  41. package/dist/commands/diff-content-report.js.map +1 -0
  42. package/dist/commands/diff-content.d.ts +19 -0
  43. package/dist/commands/diff-content.d.ts.map +1 -1
  44. package/dist/commands/diff-content.js +120 -129
  45. package/dist/commands/diff-content.js.map +1 -1
  46. package/dist/commands/diff-engine.d.ts +32 -1
  47. package/dist/commands/diff-engine.d.ts.map +1 -1
  48. package/dist/commands/diff-engine.js +76 -15
  49. package/dist/commands/diff-engine.js.map +1 -1
  50. package/dist/commands/diff-geometry.d.ts +107 -0
  51. package/dist/commands/diff-geometry.d.ts.map +1 -0
  52. package/dist/commands/diff-geometry.js +262 -0
  53. package/dist/commands/diff-geometry.js.map +1 -0
  54. package/dist/commands/diff-lineage-io.d.ts +23 -0
  55. package/dist/commands/diff-lineage-io.d.ts.map +1 -0
  56. package/dist/commands/diff-lineage-io.js +119 -0
  57. package/dist/commands/diff-lineage-io.js.map +1 -0
  58. package/dist/commands/diff-scope.d.ts.map +1 -1
  59. package/dist/commands/diff-scope.js +2 -0
  60. package/dist/commands/diff-scope.js.map +1 -1
  61. package/dist/commands/diff.d.ts.map +1 -1
  62. package/dist/commands/diff.js +36 -3
  63. package/dist/commands/diff.js.map +1 -1
  64. package/dist/commands/export.d.ts.map +1 -1
  65. package/dist/commands/export.js +13 -0
  66. package/dist/commands/export.js.map +1 -1
  67. package/dist/commands/ext.js +26 -10
  68. package/dist/commands/ext.js.map +1 -1
  69. package/dist/commands/extract-entities.d.ts.map +1 -1
  70. package/dist/commands/extract-entities.js +26 -8
  71. package/dist/commands/extract-entities.js.map +1 -1
  72. package/dist/commands/flow-tracking.d.ts +20 -0
  73. package/dist/commands/flow-tracking.d.ts.map +1 -0
  74. package/dist/commands/flow-tracking.js +86 -0
  75. package/dist/commands/flow-tracking.js.map +1 -0
  76. package/dist/commands/flow.d.ts +2 -0
  77. package/dist/commands/flow.d.ts.map +1 -0
  78. package/dist/commands/flow.js +229 -0
  79. package/dist/commands/flow.js.map +1 -0
  80. package/dist/commands/gym/channels.d.ts.map +1 -1
  81. package/dist/commands/gym/channels.js +10 -2
  82. package/dist/commands/gym/channels.js.map +1 -1
  83. package/dist/commands/gym.d.ts.map +1 -1
  84. package/dist/commands/gym.js +5 -1
  85. package/dist/commands/gym.js.map +1 -1
  86. package/dist/commands/ids.d.ts.map +1 -1
  87. package/dist/commands/ids.js +36 -3
  88. package/dist/commands/ids.js.map +1 -1
  89. package/dist/commands/info.d.ts.map +1 -1
  90. package/dist/commands/info.js +20 -5
  91. package/dist/commands/info.js.map +1 -1
  92. package/dist/commands/layer-publish.d.ts.map +1 -1
  93. package/dist/commands/layer-publish.js +6 -0
  94. package/dist/commands/layer-publish.js.map +1 -1
  95. package/dist/commands/lod.d.ts.map +1 -1
  96. package/dist/commands/lod.js +4 -1
  97. package/dist/commands/lod.js.map +1 -1
  98. package/dist/commands/mutate-step-record.d.ts +25 -1
  99. package/dist/commands/mutate-step-record.d.ts.map +1 -1
  100. package/dist/commands/mutate-step-record.js +17 -22
  101. package/dist/commands/mutate-step-record.js.map +1 -1
  102. package/dist/commands/mutate.d.ts +2 -1
  103. package/dist/commands/mutate.d.ts.map +1 -1
  104. package/dist/commands/mutate.js +27 -2
  105. package/dist/commands/mutate.js.map +1 -1
  106. package/dist/commands/rekey.d.ts +27 -0
  107. package/dist/commands/rekey.d.ts.map +1 -0
  108. package/dist/commands/rekey.js +213 -0
  109. package/dist/commands/rekey.js.map +1 -0
  110. package/dist/commands/simplify.d.ts.map +1 -1
  111. package/dist/commands/simplify.js +4 -1
  112. package/dist/commands/simplify.js.map +1 -1
  113. package/dist/commands/validate.d.ts +5 -14
  114. package/dist/commands/validate.d.ts.map +1 -1
  115. package/dist/commands/validate.js +13 -15
  116. package/dist/commands/validate.js.map +1 -1
  117. package/dist/headless-backend-store-authoring.d.ts +28 -0
  118. package/dist/headless-backend-store-authoring.d.ts.map +1 -0
  119. package/dist/headless-backend-store-authoring.js +34 -0
  120. package/dist/headless-backend-store-authoring.js.map +1 -0
  121. package/dist/headless-backend.d.ts +7 -0
  122. package/dist/headless-backend.d.ts.map +1 -1
  123. package/dist/headless-backend.js +78 -66
  124. package/dist/headless-backend.js.map +1 -1
  125. package/dist/help.d.ts +22 -0
  126. package/dist/help.d.ts.map +1 -0
  127. package/dist/help.js +260 -0
  128. package/dist/help.js.map +1 -0
  129. package/dist/index.js +45 -183
  130. package/dist/index.js.map +1 -1
  131. package/dist/loader.d.ts +2 -0
  132. package/dist/loader.d.ts.map +1 -1
  133. package/dist/loader.js +30 -1
  134. package/dist/loader.js.map +1 -1
  135. package/dist/out-flag-commands.d.ts +12 -0
  136. package/dist/out-flag-commands.d.ts.map +1 -0
  137. package/dist/out-flag-commands.js +19 -0
  138. package/dist/out-flag-commands.js.map +1 -0
  139. package/dist/query-overlay-relations.d.ts +8 -28
  140. package/dist/query-overlay-relations.d.ts.map +1 -1
  141. package/dist/query-overlay-relations.js +68 -78
  142. package/dist/query-overlay-relations.js.map +1 -1
  143. package/dist/query-overlay.d.ts +5 -3
  144. package/dist/query-overlay.d.ts.map +1 -1
  145. package/dist/query-overlay.js +57 -16
  146. package/dist/query-overlay.js.map +1 -1
  147. package/package.json +26 -22
  148. package/dist/version.d.ts +0 -14
  149. package/dist/version.d.ts.map +0 -1
  150. package/dist/version.js +0 -38
  151. package/dist/version.js.map +0 -1
@@ -8,10 +8,13 @@
8
8
  * - `pass` — the check ran and found nothing to report.
9
9
  * - `fail` — the check ran and found a violation.
10
10
  * - `error` — the check could NOT be run (unreadable model, unreadable or
11
- * unparsable IDS file, an IDS document declaring zero
12
- * specifications). An unevaluable check must never be folded
13
- * into `pass`: a delivery report that silently skips a rule
14
- * and still reads as clean is worse than no report.
11
+ * unparsable IDS/rules file, an IDS document declaring zero
12
+ * specifications, or — for `rules` — a `.rules.json` rule
13
+ * the `@ifc-lite/rules` engine itself could not evaluate,
14
+ * `SpecificationResult.error` set). An unevaluable check must
15
+ * never be folded into `pass`: a delivery report that
16
+ * silently skips a rule and still reads as clean is worse
17
+ * than no report.
15
18
  *
16
19
  * `loadModelForDelivery` deliberately does NOT reuse `loader.ts`'s
17
20
  * `loadIfcFile`/`loadIfcBytes`: those call `process.exit(1)` directly on an
@@ -25,9 +28,11 @@
25
28
  */
26
29
  import { readFile } from 'node:fs/promises';
27
30
  import { createHash } from 'node:crypto';
31
+ import { basename } from 'node:path';
28
32
  import { IfcParser, unwrapIfcZipView } from '@ifc-lite/parser';
29
33
  import { createDataAccessor } from '@ifc-lite/ids/bridge';
30
34
  import { IDSNamespace } from '@ifc-lite/sdk';
35
+ import { sourceModelIdentity } from '@ifc-lite/cache';
31
36
  import { computeValidationIssues } from './validate.js';
32
37
  /** Load one model file for delivery checking, never throwing and never exiting the process. */
33
38
  export async function loadModelForDelivery(path) {
@@ -52,6 +57,7 @@ export async function loadModelForDelivery(path) {
52
57
  return { path, error: 'is not a valid IFC/STEP file' };
53
58
  }
54
59
  const sha256 = createHash('sha256').update(bytes).digest('hex');
60
+ const sourceFingerprint = sourceModelIdentity(basename(path), bytes);
55
61
  const parser = new IfcParser();
56
62
  const origLog = console.log;
57
63
  const origWarn = console.warn;
@@ -61,7 +67,7 @@ export async function loadModelForDelivery(path) {
61
67
  const arrayBuffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
62
68
  const store = await parser.parseColumnar(arrayBuffer, {});
63
69
  store.fileSize = bytes.byteLength;
64
- return { path, sha256, store };
70
+ return { path, sha256, sourceFingerprint, store };
65
71
  }
66
72
  catch (err) {
67
73
  return { path, error: `could not be parsed: ${err.message}` };
@@ -219,4 +225,9 @@ export async function runIdsCheck(modelPath, store, idsPath) {
219
225
  ...(status === 'error' ? { error: 'every specification was not-applicable — nothing was evaluated' } : {}),
220
226
  };
221
227
  }
228
+ // `RulesCheckResult` / `runRulesCheck` (the `.rules.json` check, #5138 PR
229
+ // 7b) live in `delivery-checks-rules.ts` — split out to stay under the
230
+ // module-size cap; re-exported here so existing `from './delivery-checks.js'`
231
+ // imports keep working.
232
+ export { runRulesCheck } from './delivery-checks-rules.js';
222
233
  //# sourceMappingURL=delivery-checks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-checks.js","sourceRoot":"","sources":["../../src/commands/delivery-checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-checks.js","sourceRoot":"","sources":["../../src/commands/delivery-checks.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,26 @@ export interface DeliveryRecipe {
3
3
  models: string[];
4
4
  structural: boolean;
5
5
  ids: string[];
6
+ /**
7
+ * Optional, and not only because a recipe file may omit it: making it
8
+ * required would break every existing consumer constructing a
9
+ * `DeliveryRecipe` literal (review on #5171). The loader defaults it to
10
+ * `[]`, so `ResolvedDeliveryRecipe` below still carries a total value.
11
+ */
12
+ rules?: string[];
6
13
  }
7
- /** A recipe with every `models`/`ids` path resolved to an absolute path. */
8
- export interface ResolvedDeliveryRecipe extends DeliveryRecipe {
14
+ /** A recipe with every `models`/`ids`/`rules` path resolved to an absolute path. */
15
+ export interface ResolvedDeliveryRecipe extends Omit<DeliveryRecipe, 'rules'> {
16
+ /** Declared `rules`, defaulted to `[]` when the recipe omitted the field. */
17
+ rules: string[];
9
18
  /** Absolute path to the recipe file itself. */
10
19
  recipePath: string;
11
20
  /** `models`, resolved to absolute paths, in declared order. */
12
21
  resolvedModels: string[];
13
22
  /** `ids`, resolved to absolute paths, in declared order. */
14
23
  resolvedIds: string[];
24
+ /** `rules`, resolved to absolute paths, in declared order. */
25
+ resolvedRules: string[];
15
26
  }
16
27
  /**
17
28
  * Load and validate a delivery recipe, resolving every declared path
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-recipe.d.ts","sourceRoot":"","sources":["../../src/commands/delivery-recipe.ts"],"names":[],"mappings":"AAuCA,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAQD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAiEtF"}
1
+ {"version":3,"file":"delivery-recipe.d.ts","sourceRoot":"","sources":["../../src/commands/delivery-recipe.ts"],"names":[],"mappings":"AA0CA,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,oFAAoF;AACpF,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC3E,6EAA6E;IAC7E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAQD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA2EtF"}
@@ -6,35 +6,38 @@
6
6
  *
7
7
  * A recipe is a plain JSON file naming one or more model files and the
8
8
  * checks to run against every one of them — `structural` (the same rules
9
- * `ifc-lite validate` runs) and/or one or more `ids` rule files (the same
10
- * validator `ifc-lite ids` runs). It exists so a delivery check is a single,
11
- * versioned, reviewable artifact a team commits and re-runs, rather than a
12
- * remembered shell invocation.
9
+ * `ifc-lite validate` runs), zero or more `ids` rule files (the same
10
+ * validator `ifc-lite ids` runs), and zero or more `rules` (`.rules.json`)
11
+ * information-validation rule sets (the same engine `ifc-lite check` runs,
12
+ * #5138 PR 7b). It exists so a delivery check is a single, versioned,
13
+ * reviewable artifact a team commits and re-runs, rather than a remembered
14
+ * shell invocation.
13
15
  *
14
16
  * ```json
15
17
  * {
16
18
  * "models": ["model.ifc"],
17
19
  * "structural": true,
18
- * "ids": ["door-rules.ids"]
20
+ * "ids": ["door-rules.ids"],
21
+ * "rules": ["fire-rating.rules.json"]
19
22
  * }
20
23
  * ```
21
24
  *
22
- * Every `models`/`ids` path is resolved relative to the DIRECTORY CONTAINING
23
- * THE RECIPE FILE, not the process's current working directory — a recipe
24
- * committed alongside its fixtures stays runnable from anywhere.
25
+ * Every `models`/`ids`/`rules` path is resolved relative to the DIRECTORY
26
+ * CONTAINING THE RECIPE FILE, not the process's current working directory —
27
+ * a recipe committed alongside its fixtures stays runnable from anywhere.
25
28
  *
26
29
  * A malformed recipe is a `fatal(...)`, matching every other saved-definition
27
30
  * loader in this CLI (`schedule-spec.ts`): not valid JSON, not a JSON object,
28
31
  * an unrecognised field, a field of the wrong type, an empty/missing
29
- * `models` list, or declaring NEITHER `structural: true` NOR a non-empty
30
- * `ids` list (a recipe with zero applicable checks can never produce a
31
- * meaningful delivery verdict, so it is rejected up front rather than
32
- * silently reporting an empty "pass").
32
+ * `models` list, or declaring NONE of `structural: true`, a non-empty `ids`
33
+ * list, or a non-empty `rules` list (a recipe with zero applicable checks
34
+ * can never produce a meaningful delivery verdict, so it is rejected up
35
+ * front rather than silently reporting an empty "pass").
33
36
  */
34
37
  import { readFile } from 'node:fs/promises';
35
38
  import { dirname, resolve } from 'node:path';
36
39
  import { fatal } from '../output.js';
37
- const RECIPE_FIELDS = ['models', 'structural', 'ids'];
40
+ const RECIPE_FIELDS = ['models', 'structural', 'ids', 'rules'];
38
41
  function isStringArray(value) {
39
42
  return Array.isArray(value) && value.every(v => typeof v === 'string');
40
43
  }
@@ -79,10 +82,14 @@ export async function loadDeliveryRecipe(path) {
79
82
  fatal(`Recipe "${path}": "ids" must be an array of file paths.`);
80
83
  }
81
84
  const ids = obj.ids ?? [];
82
- if (!structural && ids.length === 0) {
83
- fatal(`Recipe "${path}" declares no applicable checks: set "structural": true and/or a non-empty "ids" list. A zero-check recipe can never produce a delivery verdict.`);
85
+ if ('rules' in obj && !isStringArray(obj.rules)) {
86
+ fatal(`Recipe "${path}": "rules" must be an array of file paths.`);
84
87
  }
85
- // Duplicate model/ids entries are rejected rather than silently
88
+ const rules = obj.rules ?? [];
89
+ if (!structural && ids.length === 0 && rules.length === 0) {
90
+ fatal(`Recipe "${path}" declares no applicable checks: set "structural": true and/or a non-empty "ids"/"rules" list. A zero-check recipe can never produce a delivery verdict.`);
91
+ }
92
+ // Duplicate model/ids/rules entries are rejected rather than silently
86
93
  // deduplicated or run twice under one collapsed key: a repeated path is
87
94
  // almost certainly a copy-paste mistake in the recipe, and either
88
95
  // response (silent dedup, or a doubled report entry) would misrepresent
@@ -95,10 +102,15 @@ export async function loadDeliveryRecipe(path) {
95
102
  if (dupIds.length > 0) {
96
103
  fatal(`Recipe "${path}": "ids" lists the same path more than once: ${[...new Set(dupIds)].join(', ')}.`);
97
104
  }
105
+ const dupRules = rules.filter((m, i) => rules.indexOf(m) !== i);
106
+ if (dupRules.length > 0) {
107
+ fatal(`Recipe "${path}": "rules" lists the same path more than once: ${[...new Set(dupRules)].join(', ')}.`);
108
+ }
98
109
  const recipePath = resolve(path);
99
110
  const baseDir = dirname(recipePath);
100
111
  const resolvedModels = models.map(m => resolve(baseDir, m));
101
112
  const resolvedIds = ids.map(i => resolve(baseDir, i));
102
- return { recipePath, models, structural, ids, resolvedModels, resolvedIds };
113
+ const resolvedRules = rules.map(r => resolve(baseDir, r));
114
+ return { recipePath, models, structural, ids, rules, resolvedModels, resolvedIds, resolvedRules };
103
115
  }
104
116
  //# sourceMappingURL=delivery-recipe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-recipe.js","sourceRoot":"","sources":["../../src/commands/delivery-recipe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-recipe.js","sourceRoot":"","sources":["../../src/commands/delivery-recipe.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,9 @@
16
16
  * differ between two runs, and neither depends on wall-clock time or
17
17
  * iteration order).
18
18
  */
19
- import type { StructuralCheckResult, IdsCheckResult } from './delivery-checks.js';
19
+ import type { StructuralCheckResult, IdsCheckResult, RulesCheckResult } from './delivery-checks.js';
20
20
  import type { ResolvedDeliveryRecipe } from './delivery-recipe.js';
21
- export type DeliveryCheckResult = StructuralCheckResult | IdsCheckResult;
21
+ export type DeliveryCheckResult = StructuralCheckResult | IdsCheckResult | RulesCheckResult;
22
22
  export interface DeliveryModelEntry {
23
23
  /** Path exactly as declared in the recipe (relative, for a readable report). */
24
24
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-report.d.ts","sourceRoot":"","sources":["../../src/commands/delivery-report.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG,cAAc,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,iHAAiH;AACjH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAAE,EAC5B,MAAM,EAAE,mBAAmB,EAAE,GAC5B,cAAc,CAchB;AA+BD,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAoEjE"}
1
+ {"version":3,"file":"delivery-report.d.ts","sourceRoot":"","sources":["../../src/commands/delivery-report.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AACjH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE5F,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,iHAAiH;AACjH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAAE,EAC5B,MAAM,EAAE,mBAAmB,EAAE,GAC5B,cAAc,CAchB;AAwCD,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAoEjE"}
@@ -33,11 +33,21 @@ function describeCheck(check) {
33
33
  return `${check.errorCount} error(s), ${check.warningCount} warning(s), ${check.infoCount} info`;
34
34
  }
35
35
  const parts = [];
36
- if (check.totalSpecifications !== undefined) {
37
- parts.push(`${check.passedSpecifications ?? 0}/${check.totalSpecifications} specification(s) passed`);
36
+ if (check.type === 'ids') {
37
+ if (check.totalSpecifications !== undefined) {
38
+ parts.push(`${check.passedSpecifications ?? 0}/${check.totalSpecifications} specification(s) passed`);
39
+ }
40
+ if (check.failedEntities !== undefined && check.totalEntities !== undefined) {
41
+ parts.push(`${check.failedEntities}/${check.totalEntities} entities failed`);
42
+ }
38
43
  }
39
- if (check.failedEntities !== undefined && check.totalEntities !== undefined) {
40
- parts.push(`${check.failedEntities}/${check.totalEntities} entities failed`);
44
+ else {
45
+ if (check.totalRules !== undefined) {
46
+ parts.push(`${check.passedRules ?? 0}/${check.totalRules} rule(s) passed`);
47
+ }
48
+ if (check.erroredRules) {
49
+ parts.push(`${check.erroredRules} rule(s) unevaluable`);
50
+ }
41
51
  }
42
52
  if (check.error)
43
53
  parts.push(check.error);
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-report.js","sourceRoot":"","sources":["../../src/commands/delivery-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-report.js","sourceRoot":"","sources":["../../src/commands/delivery-report.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/commands/delivery.ts"],"names":[],"mappings":"AAyCA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EnE"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/commands/delivery.ts"],"names":[],"mappings":"AA2CA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFnE"}
@@ -6,8 +6,10 @@
6
6
  *
7
7
  * Run a repeatable, reviewable model-delivery check from a saved recipe
8
8
  * (see `delivery-recipe.ts`): structural validation (the same rules
9
- * `ifc-lite validate` runs) and/or IDS validation (the same validator
10
- * `ifc-lite ids` runs), against one or more model files, in one invocation.
9
+ * `ifc-lite validate` runs), IDS validation (the same validator `ifc-lite
10
+ * ids` runs), and/or `.rules.json` information-validation rule sets (the
11
+ * same engine `ifc-lite check` runs, #5138 PR 7b) — any combination,
12
+ * against one or more model files, in one invocation.
11
13
  *
12
14
  * Every check reports one of `pass` / `fail` / `error` — never folded
13
15
  * together (see `delivery-checks.ts`). The overall verdict is `pass` only
@@ -27,14 +29,14 @@
27
29
  * contract documented in `delivery-report.ts`).
28
30
  */
29
31
  import { getFlag, hasFlag, fatal, printJson, writeOutput } from '../output.js';
30
- import { readCliVersion } from '../version.js';
32
+ import { readPackageVersion } from '@ifc-lite/data';
31
33
  import { fileURLToPath } from 'node:url';
32
34
  import { dirname, join, relative } from 'node:path';
33
35
  import { loadDeliveryRecipe } from './delivery-recipe.js';
34
- import { loadModelForDelivery, runStructuralCheck, runIdsCheck } from './delivery-checks.js';
36
+ import { loadModelForDelivery, runStructuralCheck, runIdsCheck, runRulesCheck } from './delivery-checks.js';
35
37
  import { buildDeliveryReport, renderDeliveryHtml } from './delivery-report.js';
36
38
  const __dirname = dirname(fileURLToPath(import.meta.url));
37
- const CLI_VERSION = readCliVersion(join(__dirname, '..', '..', 'package.json'));
39
+ const CLI_VERSION = readPackageVersion(join(__dirname, '..', '..', 'package.json'));
38
40
  export async function deliveryCommand(args) {
39
41
  const recipePath = args.find(a => !a.startsWith('-'));
40
42
  if (!recipePath) {
@@ -73,6 +75,12 @@ export async function deliveryCommand(args) {
73
75
  error: `model ${loaded.error}`,
74
76
  });
75
77
  }
78
+ for (const rulesDeclared of recipe.rules) {
79
+ checks.push({
80
+ type: 'rules', model: declaredPath, source: rulesDeclared, status: 'error',
81
+ error: `model ${loaded.error}`,
82
+ });
83
+ }
76
84
  continue;
77
85
  }
78
86
  models.push({ path: declaredPath, sha256: loaded.sha256 });
@@ -83,6 +91,10 @@ export async function deliveryCommand(args) {
83
91
  const result = await runIdsCheck(declaredPath, loaded.store, recipe.resolvedIds[j]);
84
92
  checks.push({ ...result, source: recipe.ids[j] });
85
93
  }
94
+ for (let j = 0; j < recipe.resolvedRules.length; j++) {
95
+ const result = await runRulesCheck(declaredPath, loaded.store, recipe.resolvedRules[j], loaded.sourceFingerprint);
96
+ checks.push({ ...result, source: recipe.rules[j] });
97
+ }
86
98
  }
87
99
  const report = buildDeliveryReport(recipe, CLI_VERSION, models, checks);
88
100
  if (htmlPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/commands/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/commands/delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Refuse to run at all if `--identity-out` names one of the two input models.
3
+ *
4
+ * The sidecar is a JSON document. Writing it over an IFC file destroys the
5
+ * user's model, and a mistyped or shell-completed path is all it takes — the
6
+ * two arguments right before it are IFC paths. So this is checked first, and
7
+ * the command exits without reading, comparing, or writing anything.
8
+ *
9
+ * Two independent tests, because a path string is not a file:
10
+ *
11
+ * 1. Resolved paths are equal. Catches `./v1.ifc` vs `v1.ifc` vs `sub/../v1.ifc`
12
+ * with no filesystem access, and is the whole answer on a platform where
13
+ * `stat` reports no usable inode.
14
+ * 2. The output already exists AND is the same file as an input, by device +
15
+ * inode. This is the exhaustive test: it catches a symlink, a hard link, a
16
+ * bind mount, and `V1.IFC` on a case-insensitive filesystem — every way two
17
+ * different strings can name one file. It is also sufficient on its own for
18
+ * the destructive case, because a path that does not resolve to an existing
19
+ * file cannot be overwriting an input: the inputs must exist to be read.
20
+ *
21
+ * `--identity-in` and `--identity-out` naming the SAME sidecar is not checked
22
+ * here, because that is the carry-forward workflow this feature is built around
23
+ * (read the accepted claims, write back the ones that still held).
24
+ */
25
+ export declare function refuseOverwritingAnInput(options: {
26
+ basePath: string;
27
+ headPath: string;
28
+ identityOut?: string;
29
+ lineageOut?: string;
30
+ }): Promise<void>;
31
+ /**
32
+ * Read one of the two input models, reporting a missing or unreadable path the
33
+ * way the rest of the command reports problems rather than throwing a raw
34
+ * `ENOENT` stack at the user — the same treatment `readVerifiedSidecar` gives
35
+ * the sidecar.
36
+ */
37
+ export declare function readModel(path: string): Promise<Uint8Array>;
38
+ /**
39
+ * Unwrap a possible `.ifcZIP` container into its STEP bytes, reporting a
40
+ * corrupt zip the way the rest of the command reports problems (see
41
+ * {@link readModel}) rather than throwing a raw error. Ordinary `.ifc` bytes
42
+ * pass through unchanged (cheap magic-byte check — `unwrapIfcZipView`).
43
+ *
44
+ * Called once per file and the result reused by both the parser and (when
45
+ * `--geometry` runs) the wasm mesh pass — passing the ORIGINAL, possibly
46
+ * zipped bytes to the mesh pass would feed it a zip container instead of STEP
47
+ * text (issue #4956 review).
48
+ */
49
+ export declare function unwrapModel(bytes: Uint8Array, label: string): Promise<Uint8Array>;
50
+ //# sourceMappingURL=diff-content-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-content-io.d.ts","sourceRoot":"","sources":["../../src/commands/diff-content-io.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB;AAgBD;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAMjE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAMvF"}
@@ -0,0 +1,104 @@
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
+ * File-level I/O for `ifc-lite diff --by-content`: reading the two input
6
+ * models (and unwrapping a possible `.ifcZIP` container), and refusing to run
7
+ * at all when an output path would overwrite one of them. Split out of
8
+ * `diff-content.ts` for size.
9
+ */
10
+ import { readFile, stat } from 'node:fs/promises';
11
+ import { resolve } from 'node:path';
12
+ import { unwrapIfcZipView } from '@ifc-lite/parser';
13
+ import { fatal } from '../output.js';
14
+ /**
15
+ * Refuse to run at all if `--identity-out` names one of the two input models.
16
+ *
17
+ * The sidecar is a JSON document. Writing it over an IFC file destroys the
18
+ * user's model, and a mistyped or shell-completed path is all it takes — the
19
+ * two arguments right before it are IFC paths. So this is checked first, and
20
+ * the command exits without reading, comparing, or writing anything.
21
+ *
22
+ * Two independent tests, because a path string is not a file:
23
+ *
24
+ * 1. Resolved paths are equal. Catches `./v1.ifc` vs `v1.ifc` vs `sub/../v1.ifc`
25
+ * with no filesystem access, and is the whole answer on a platform where
26
+ * `stat` reports no usable inode.
27
+ * 2. The output already exists AND is the same file as an input, by device +
28
+ * inode. This is the exhaustive test: it catches a symlink, a hard link, a
29
+ * bind mount, and `V1.IFC` on a case-insensitive filesystem — every way two
30
+ * different strings can name one file. It is also sufficient on its own for
31
+ * the destructive case, because a path that does not resolve to an existing
32
+ * file cannot be overwriting an input: the inputs must exist to be read.
33
+ *
34
+ * `--identity-in` and `--identity-out` naming the SAME sidecar is not checked
35
+ * here, because that is the carry-forward workflow this feature is built around
36
+ * (read the accepted claims, write back the ones that still held).
37
+ */
38
+ export async function refuseOverwritingAnInput(options) {
39
+ for (const [flag, target] of [
40
+ ['--identity-out', options.identityOut],
41
+ ['--lineage-out', options.lineageOut],
42
+ ]) {
43
+ if (target === undefined)
44
+ continue;
45
+ const out = resolve(target);
46
+ const outStat = await statOrUndefined(target);
47
+ for (const [label, input] of [
48
+ ['base model', options.basePath],
49
+ ['head model', options.headPath],
50
+ ]) {
51
+ if (resolve(input) !== out && !isSameFile(outStat, await statOrUndefined(input)))
52
+ continue;
53
+ fatal(`${flag} ${target} is the ${label} (${input}). ` +
54
+ 'Writing there would overwrite the input file.');
55
+ }
56
+ }
57
+ }
58
+ async function statOrUndefined(path) {
59
+ // A missing or unreadable path cannot be an input file being overwritten;
60
+ // reading the models is what reports it, with its own message.
61
+ try {
62
+ return await stat(path);
63
+ }
64
+ catch {
65
+ return undefined;
66
+ }
67
+ }
68
+ function isSameFile(a, b) {
69
+ return a !== undefined && b !== undefined && a.dev === b.dev && a.ino === b.ino;
70
+ }
71
+ /**
72
+ * Read one of the two input models, reporting a missing or unreadable path the
73
+ * way the rest of the command reports problems rather than throwing a raw
74
+ * `ENOENT` stack at the user — the same treatment `readVerifiedSidecar` gives
75
+ * the sidecar.
76
+ */
77
+ export async function readModel(path) {
78
+ try {
79
+ return await readFile(path);
80
+ }
81
+ catch (error) {
82
+ return fatal(`Cannot read ${path}: ${error.message}`);
83
+ }
84
+ }
85
+ /**
86
+ * Unwrap a possible `.ifcZIP` container into its STEP bytes, reporting a
87
+ * corrupt zip the way the rest of the command reports problems (see
88
+ * {@link readModel}) rather than throwing a raw error. Ordinary `.ifc` bytes
89
+ * pass through unchanged (cheap magic-byte check — `unwrapIfcZipView`).
90
+ *
91
+ * Called once per file and the result reused by both the parser and (when
92
+ * `--geometry` runs) the wasm mesh pass — passing the ORIGINAL, possibly
93
+ * zipped bytes to the mesh pass would feed it a zip container instead of STEP
94
+ * text (issue #4956 review).
95
+ */
96
+ export async function unwrapModel(bytes, label) {
97
+ try {
98
+ return new Uint8Array(await unwrapIfcZipView(bytes));
99
+ }
100
+ catch (error) {
101
+ return fatal(`Cannot read ${label}: ${error.message}`);
102
+ }
103
+ }
104
+ //# sourceMappingURL=diff-content-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-content-io.js","sourceRoot":"","sources":["../../src/commands/diff-content-io.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAK9C;IACC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI;QAC3B,CAAC,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;QACvC,CAAC,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC;KAC7B,EAAE,CAAC;QACX,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;YAC3B,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;YAChC,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;SACxB,EAAE,CAAC;YACX,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;gBAAE,SAAS;YAC3F,KAAK,CACH,GAAG,IAAI,IAAI,MAAM,WAAW,KAAK,KAAK,KAAK,KAAK;gBAC9C,+CAA+C,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,0EAA0E;IAC1E,+DAA+D;IAC/D,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAoB,EAAE,CAAoB;IAC5D,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;AAClF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,eAAe,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAiB,EAAE,KAAa;IAChE,IAAI,CAAC;QACH,OAAO,IAAI,UAAU,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,eAAe,KAAK,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** The human-readable report of `ifc-lite diff --by-content`; the JSON form
2
+ * lives with the command in `diff-content.ts`. Split out for size. */
3
+ import type { IdentityMapEntry, LineageEntry, ModelDiff } from '@ifc-lite/diff';
4
+ import type { DiffRef } from './diff-engine.js';
5
+ export declare function printReport(report: {
6
+ basePath: string;
7
+ headPath: string;
8
+ diff: ModelDiff<DiffRef>;
9
+ appliedCount: number;
10
+ ignoredCount: number;
11
+ identityIn?: string;
12
+ written?: {
13
+ path: string;
14
+ entries: IdentityMapEntry[];
15
+ };
16
+ lineageIn?: string;
17
+ lineageWritten?: {
18
+ path: string;
19
+ entries: LineageEntry[];
20
+ };
21
+ keyProperty?: string;
22
+ }): void;
23
+ //# sourceMappingURL=diff-content-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-content-report.d.ts","sourceRoot":"","sources":["../../src/commands/diff-content-report.ts"],"names":[],"mappings":"AAIA;uEACuE;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CAsEP"}