@cplieger/deadset-ts 7.2.0-dev.4 → 8.0.0-dev.10

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 (288) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/mapper-connection.js +2 -1
  3. package/dist/bin/node-host.js +24 -5
  4. package/dist/src/analysis.js +245 -309
  5. package/dist/src/augmentations.js +124 -18
  6. package/dist/src/automatic-types.js +170 -0
  7. package/dist/src/build-scripts.js +425 -0
  8. package/dist/src/component-layer.js +4 -2
  9. package/dist/src/components.js +9 -9
  10. package/dist/src/config.js +6 -81
  11. package/dist/src/configuration-files.js +78 -188
  12. package/dist/src/configured-declarations.js +15 -20
  13. package/dist/src/conformance-record.js +2 -2
  14. package/dist/src/consumers.js +3 -30
  15. package/dist/src/contextual-uses.js +56 -9
  16. package/dist/src/contract/config.generated.js +558 -0
  17. package/dist/src/contract/contract.generated.js +1244 -0
  18. package/dist/src/contract/report.generated.js +862 -0
  19. package/dist/src/convention-rows.js +146 -1
  20. package/dist/src/conventions.js +136 -70
  21. package/dist/src/decorator.js +21 -18
  22. package/dist/src/dependencies.js +280 -62
  23. package/dist/src/edges.js +38 -122
  24. package/dist/src/element-access.js +4 -6
  25. package/dist/src/entry-point-gaps.js +9 -18
  26. package/dist/src/entry-points.js +106 -21
  27. package/dist/src/enum-group.js +3 -10
  28. package/dist/src/erased-stores.js +4 -6
  29. package/dist/src/exempt-classes.js +1 -63
  30. package/dist/src/exempt.js +21 -40
  31. package/dist/src/failure.js +36 -0
  32. package/dist/src/file-facts.js +2 -25
  33. package/dist/src/findings/completion.js +225 -63
  34. package/dist/src/findings/dependencies-and-module-machinery.js +72 -27
  35. package/dist/src/findings/emitters.js +6 -6
  36. package/dist/src/findings/interfaces.js +4 -5
  37. package/dist/src/findings/intra-function.js +53 -19
  38. package/dist/src/findings/non-code-artifacts.js +71 -39
  39. package/dist/src/findings/reads-and-writes.js +16 -13
  40. package/dist/src/findings/self-check.js +10 -12
  41. package/dist/src/findings/unused-declarations.js +57 -28
  42. package/dist/src/findings/visibility-narrowing.js +40 -18
  43. package/dist/src/findings-pass.js +8 -15
  44. package/dist/src/framework-lifecycle.js +7 -7
  45. package/dist/src/fs/document.js +52 -0
  46. package/dist/src/fs/manifest.js +72 -0
  47. package/dist/src/fs/tree.js +88 -0
  48. package/dist/src/generated-file.js +18 -4
  49. package/dist/src/git-ignore.js +99 -0
  50. package/dist/src/graph.js +9 -4
  51. package/dist/src/html-entries.js +6 -33
  52. package/dist/src/import-bindings.js +97 -0
  53. package/dist/src/in-operands.js +2 -1
  54. package/dist/src/index.js +1 -1
  55. package/dist/src/indexed-access.js +130 -28
  56. package/dist/src/injection-container.js +1 -1
  57. package/dist/src/interface-satisfaction.js +30 -12
  58. package/dist/src/intra-function-parts.js +341 -69
  59. package/dist/src/inventory.js +54 -29
  60. package/dist/src/javascript-file.js +33 -0
  61. package/dist/src/json-document.js +198 -67
  62. package/dist/src/keyof-comparisons.js +4 -6
  63. package/dist/src/kinds.js +3 -366
  64. package/dist/src/load/classify.js +270 -0
  65. package/dist/src/load/diagnostics.js +80 -0
  66. package/dist/src/load/discover.js +277 -0
  67. package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
  68. package/dist/src/load/expected-module.js +136 -0
  69. package/dist/src/load/load.js +27 -0
  70. package/dist/src/load/module-lookup.js +37 -0
  71. package/dist/src/load/plan.js +313 -0
  72. package/dist/src/load/specifiers.js +115 -0
  73. package/dist/src/load/synthesize.js +140 -0
  74. package/dist/src/load/test-globals.js +207 -0
  75. package/dist/src/load/test-joins.js +82 -0
  76. package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
  77. package/dist/src/{workspace-programs.js → load/workspace-programs.js} +88 -61
  78. package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +60 -59
  79. package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
  80. package/dist/src/{workspace.js → load/workspace.js} +62 -124
  81. package/dist/src/manifest.js +49 -54
  82. package/dist/src/matrix.js +94 -13
  83. package/dist/src/mdx-entries.js +174 -0
  84. package/dist/src/module-declarations.js +9 -13
  85. package/dist/src/outside-tests.js +1 -1
  86. package/dist/src/overrides.js +41 -10
  87. package/dist/src/partial.js +2 -1
  88. package/dist/src/paths.js +26 -15
  89. package/dist/src/position.js +2 -1
  90. package/dist/src/print.js +11 -78
  91. package/dist/src/product.js +13 -0
  92. package/dist/src/query.js +1 -0
  93. package/dist/src/ref.js +11 -0
  94. package/dist/src/references.js +52 -31
  95. package/dist/src/report-schema.js +51 -0
  96. package/dist/src/report.js +59 -41
  97. package/dist/src/reporters/annotations.js +15 -8
  98. package/dist/src/reporters/sarif.js +16 -10
  99. package/dist/src/reporters/template.js +4 -19
  100. package/dist/src/resolve.js +245 -727
  101. package/dist/src/roots.js +374 -116
  102. package/dist/src/run.js +66 -77
  103. package/dist/src/schema.js +320 -342
  104. package/dist/src/scope.js +38 -115
  105. package/dist/src/serialization-contract.js +649 -29
  106. package/dist/src/session.js +41 -29
  107. package/dist/src/source-files.js +40 -15
  108. package/dist/src/suppress-file.js +34 -29
  109. package/dist/src/suppress-inline.js +21 -4
  110. package/dist/src/suppress.js +40 -56
  111. package/dist/src/sweep.js +32 -17
  112. package/dist/src/symbol-keys.js +105 -6
  113. package/dist/src/template-field.js +9 -19
  114. package/dist/src/test-support.js +119 -18
  115. package/dist/src/text/compare.js +26 -0
  116. package/dist/src/text/glob.js +194 -0
  117. package/dist/src/text/named-files.js +54 -0
  118. package/dist/src/text/shell.js +159 -0
  119. package/dist/src/text/yaml.js +393 -0
  120. package/dist/src/type-errors.js +27 -221
  121. package/dist/src/type-parameter-reads.js +172 -0
  122. package/dist/src/unseen-loads.js +100 -0
  123. package/dist/src/unwrap.js +23 -0
  124. package/dist/src/usage.js +10 -0
  125. package/dist/src/verbs/analyze.js +181 -125
  126. package/dist/src/verbs/describe.js +9 -16
  127. package/dist/src/verbs/explain.js +14 -9
  128. package/dist/src/verbs/print-config.js +2 -1
  129. package/dist/src/verbs/print-projects.js +6 -4
  130. package/dist/src/verbs/print-retained.js +4 -2
  131. package/dist/src/verbs/print-roots.js +4 -2
  132. package/dist/src/verbs/verb.js +1 -5
  133. package/dist/src/verbs/version.js +14 -3
  134. package/dist/src/workflow-steps.js +128 -33
  135. package/jsr.json +1 -1
  136. package/package.json +5 -4
  137. package/src/analysis.ts +333 -457
  138. package/src/augmentations.ts +152 -23
  139. package/src/automatic-types.ts +228 -0
  140. package/src/build-scripts.ts +543 -0
  141. package/src/component-layer.ts +4 -2
  142. package/src/components.ts +9 -10
  143. package/src/config.ts +31 -299
  144. package/src/configuration-files.ts +100 -191
  145. package/src/configured-declarations.ts +18 -23
  146. package/src/conformance-record.ts +2 -2
  147. package/src/consumers.ts +6 -57
  148. package/src/contextual-uses.ts +64 -12
  149. package/src/contract/config.generated.ts +818 -0
  150. package/src/contract/contract.generated.ts +1308 -0
  151. package/src/contract/report.generated.ts +1237 -0
  152. package/src/convention-rows.ts +186 -1
  153. package/src/conventions.ts +166 -90
  154. package/src/decorator.ts +28 -18
  155. package/src/dependencies.ts +356 -78
  156. package/src/edges.ts +41 -140
  157. package/src/element-access.ts +4 -7
  158. package/src/entry-point-gaps.ts +11 -20
  159. package/src/entry-points.ts +124 -28
  160. package/src/enum-group.ts +2 -11
  161. package/src/erased-stores.ts +3 -7
  162. package/src/exempt-classes.ts +1 -75
  163. package/src/exempt.ts +36 -50
  164. package/src/failure.ts +63 -0
  165. package/src/file-facts.ts +9 -24
  166. package/src/finding.ts +24 -9
  167. package/src/findings/boundary.ts +2 -0
  168. package/src/findings/completion.ts +297 -77
  169. package/src/findings/dependencies-and-module-machinery.ts +90 -31
  170. package/src/findings/emitter.ts +8 -9
  171. package/src/findings/emitters.ts +8 -8
  172. package/src/findings/interfaces.ts +4 -6
  173. package/src/findings/intra-function.ts +64 -20
  174. package/src/findings/non-code-artifacts.ts +88 -50
  175. package/src/findings/reads-and-writes.ts +20 -16
  176. package/src/findings/self-check.ts +11 -17
  177. package/src/findings/unused-declarations.ts +65 -28
  178. package/src/findings/visibility-narrowing.ts +51 -19
  179. package/src/findings-pass.ts +10 -19
  180. package/src/framework-lifecycle.ts +7 -7
  181. package/src/fs/document.ts +70 -0
  182. package/src/fs/manifest.ts +92 -0
  183. package/src/fs/tree.ts +110 -0
  184. package/src/generated-file.ts +23 -4
  185. package/src/git-ignore.ts +122 -0
  186. package/src/graph.ts +11 -3
  187. package/src/host.ts +17 -14
  188. package/src/html-entries.ts +6 -33
  189. package/src/import-bindings.ts +128 -0
  190. package/src/in-operands.ts +2 -1
  191. package/src/index.ts +1 -1
  192. package/src/indexed-access.ts +152 -30
  193. package/src/injection-container.ts +1 -1
  194. package/src/interface-satisfaction.ts +33 -13
  195. package/src/intra-function-parts.ts +449 -85
  196. package/src/inventory.ts +73 -27
  197. package/src/javascript-file.ts +37 -0
  198. package/src/json-document.ts +241 -76
  199. package/src/keyof-comparisons.ts +3 -7
  200. package/src/kinds.ts +5 -413
  201. package/src/load/classify.ts +397 -0
  202. package/src/load/diagnostics.ts +144 -0
  203. package/src/load/discover.ts +455 -0
  204. package/src/{emit-map.ts → load/emit-map.ts} +1 -1
  205. package/src/load/expected-module.ts +188 -0
  206. package/src/load/load.ts +73 -0
  207. package/src/load/module-lookup.ts +50 -0
  208. package/src/load/plan.ts +504 -0
  209. package/src/load/specifiers.ts +168 -0
  210. package/src/load/synthesize.ts +211 -0
  211. package/src/load/test-globals.ts +251 -0
  212. package/src/load/test-joins.ts +98 -0
  213. package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
  214. package/src/{workspace-programs.ts → load/workspace-programs.ts} +127 -80
  215. package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +73 -64
  216. package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
  217. package/src/{workspace.ts → load/workspace.ts} +90 -134
  218. package/src/manifest.ts +81 -75
  219. package/src/matrix.ts +154 -18
  220. package/src/mdx-entries.ts +218 -0
  221. package/src/module-declarations.ts +11 -13
  222. package/src/outside-tests.ts +1 -1
  223. package/src/overrides.ts +51 -12
  224. package/src/partial.ts +3 -2
  225. package/src/paths.ts +27 -15
  226. package/src/position.ts +2 -1
  227. package/src/print.ts +12 -91
  228. package/src/product.ts +18 -0
  229. package/src/query.ts +11 -0
  230. package/src/ref.ts +13 -0
  231. package/src/references.ts +62 -32
  232. package/src/report-schema.ts +68 -0
  233. package/src/report.ts +105 -215
  234. package/src/reporters/annotations.ts +22 -11
  235. package/src/reporters/json.ts +1 -1
  236. package/src/reporters/reporter.ts +2 -4
  237. package/src/reporters/reporters.ts +1 -1
  238. package/src/reporters/sarif.ts +29 -16
  239. package/src/reporters/template.ts +4 -20
  240. package/src/reporters/text.ts +3 -3
  241. package/src/resolve.ts +283 -1111
  242. package/src/roots.ts +490 -137
  243. package/src/run.ts +75 -91
  244. package/src/schema.ts +391 -387
  245. package/src/scope.ts +46 -138
  246. package/src/serialization-contract.ts +818 -26
  247. package/src/session.ts +77 -54
  248. package/src/source-files.ts +67 -17
  249. package/src/suppress-file.ts +36 -34
  250. package/src/suppress-inline.ts +20 -3
  251. package/src/suppress.ts +52 -63
  252. package/src/sweep.ts +53 -18
  253. package/src/symbol-keys.ts +131 -7
  254. package/src/template-field.ts +15 -25
  255. package/src/test-support.ts +155 -18
  256. package/src/text/compare.ts +27 -0
  257. package/src/text/glob.ts +210 -0
  258. package/src/text/named-files.inputs.json +1522 -0
  259. package/src/text/named-files.ts +68 -0
  260. package/src/text/shell.ts +161 -0
  261. package/src/text/yaml.ts +423 -0
  262. package/src/type-errors.ts +35 -273
  263. package/src/type-parameter-reads.ts +227 -0
  264. package/src/unseen-loads.ts +134 -0
  265. package/src/unwrap.ts +34 -0
  266. package/src/usage.ts +10 -0
  267. package/src/verbs/analyze.ts +245 -161
  268. package/src/verbs/describe.ts +14 -15
  269. package/src/verbs/explain.ts +15 -13
  270. package/src/verbs/print-config.ts +2 -1
  271. package/src/verbs/print-projects.ts +6 -4
  272. package/src/verbs/print-retained.ts +4 -2
  273. package/src/verbs/print-roots.ts +4 -2
  274. package/src/verbs/verb.ts +2 -8
  275. package/src/verbs/version.ts +15 -3
  276. package/src/workflow-steps.ts +149 -34
  277. package/dist/src/discover.js +0 -347
  278. package/dist/src/glob.js +0 -65
  279. package/dist/src/pnpm-workspace.js +0 -120
  280. package/dist/src/setup-failure.js +0 -23
  281. package/dist/src/test-joins.js +0 -101
  282. package/dist/src/version.js +0 -7
  283. package/src/discover.ts +0 -510
  284. package/src/glob.ts +0 -67
  285. package/src/pnpm-workspace.ts +0 -135
  286. package/src/setup-failure.ts +0 -39
  287. package/src/test-joins.ts +0 -120
  288. package/src/version.ts +0 -7
@@ -1,12 +1,19 @@
1
- import type { Confidence, Severity } from "../config.ts";
2
1
  import { jsonChunks } from "../json-chunks.ts";
3
- import { KINDS, type KindRow } from "../kinds.ts";
2
+ import type { KindRow, Confidence, Severity } from "../contract/contract.generated.ts";
3
+ import { KINDS } from "../kinds.ts";
4
4
  import { declarationKey } from "../ref.ts";
5
- import type { Report, WireFinding, WireStaleSuppression } from "../report.ts";
5
+ import type {
6
+ ComponentsEntry,
7
+ Finding,
8
+ Report,
9
+ StaleSuppressionsEntry,
10
+ } from "../contract/report.generated.ts";
6
11
  import { lineHashes, symbolFingerprint } from "./fingerprint.ts";
7
12
  import { RenderError, type RenderOptions } from "./reporter.ts";
8
13
  import { utf8Bytes } from "./sha256.ts";
9
14
  import { withheldLine } from "./text.ts";
15
+ import { bytewise } from "../text/compare.ts";
16
+ import { message } from "../product.ts";
10
17
 
11
18
  const SCHEMA =
12
19
  "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json";
@@ -128,9 +135,7 @@ function lineHashCache(read: (path: string) => string): (at: Located) => string
128
135
  try {
129
136
  text = read(at.path);
130
137
  } catch (error: unknown) {
131
- throw new RenderError(
132
- `read ${at.path} for its line fingerprint: ${error instanceof Error ? error.message : String(error)}`,
133
- );
138
+ throw new RenderError(`read ${at.path} for its line fingerprint: ${message(error)}`);
134
139
  }
135
140
  hashes = lineHashes(text);
136
141
  held.set(at.path, hashes);
@@ -151,8 +156,11 @@ interface Related {
151
156
  readonly endLine: number;
152
157
  }
153
158
 
159
+ /** The members the report lists for one component, none where it lists none. */
160
+ type MembersOf = (id: string) => ComponentsEntry["members"];
161
+
154
162
  /** Every position a finding names beyond its own, in the mapping's order, the first hundred. */
155
- function relatedOf(found: WireFinding): readonly Related[] {
163
+ function relatedOf(found: Finding, members: MembersOf): readonly Related[] {
156
164
  const related: Related[] = [];
157
165
  for (const one of found.details.implementations ?? []) {
158
166
  related.push({ label: "implementation", at: one.position, endLine: one.position.end_line });
@@ -164,7 +172,7 @@ function relatedOf(found: WireFinding): readonly Related[] {
164
172
  const at = found.details.name_literal;
165
173
  related.push({ label: "name", at, endLine: at.end_line });
166
174
  }
167
- for (const one of found.component.members ?? []) {
175
+ for (const one of members(found.component.id)) {
168
176
  if (
169
177
  declarationKey(one.ref, one.position.path) !==
170
178
  declarationKey(found.symbol.ref, found.position.path)
@@ -188,7 +196,9 @@ function messageWithLinks(message: string, related: readonly Related[]): string
188
196
  }
189
197
 
190
198
  /** Every member of the finding the mapping places nowhere else, under its schema name. */
191
- function propertiesOf(found: WireFinding): Record<string, unknown> {
199
+ /** A result's member bag, its component holding the members the report lists for it once. */
200
+ function propertiesOf(found: Finding, members: MembersOf): Record<string, unknown> {
201
+ const listed = members(found.component.id);
192
202
  return {
193
203
  language: found.language,
194
204
  symbol: found.symbol,
@@ -199,7 +209,7 @@ function propertiesOf(found: WireFinding): Record<string, unknown> {
199
209
  : { liveness_relation: found.liveness_relation }),
200
210
  test_only: found.test_only,
201
211
  generated: found.generated,
202
- component: found.component,
212
+ component: listed.length === 0 ? found.component : { ...found.component, members: listed },
203
213
  retained_by: found.retained_by,
204
214
  configurations: found.configurations,
205
215
  consumers_loaded: found.consumers_loaded,
@@ -217,11 +227,12 @@ function ruleIndex(index: ReadonlyMap<string, number>, code: string): number {
217
227
  }
218
228
 
219
229
  function findingResult(
220
- found: WireFinding,
230
+ found: Finding,
221
231
  index: ReadonlyMap<string, number>,
222
232
  hashOf: (at: Located) => string,
233
+ members: MembersOf,
223
234
  ): Record<string, unknown> {
224
- const related = relatedOf(found);
235
+ const related = relatedOf(found, members);
225
236
  return {
226
237
  ruleId: found.code,
227
238
  ruleIndex: ruleIndex(index, found.code),
@@ -241,13 +252,13 @@ function findingResult(
241
252
  primaryLocationLineHash: hashOf(found.position),
242
253
  "deadsetSymbolRef/v1": symbolFingerprint(found.code, found.symbol.ref),
243
254
  },
244
- properties: propertiesOf(found),
255
+ properties: propertiesOf(found, members),
245
256
  };
246
257
  }
247
258
 
248
259
  /** A stale suppression at the failing level, at its own site; it is no finding, so it carries no member bag. */
249
260
  function staleResult(
250
- stale: WireStaleSuppression,
261
+ stale: StaleSuppressionsEntry,
251
262
  index: ReadonlyMap<string, number>,
252
263
  hashOf: (at: Located) => string,
253
264
  ): Record<string, unknown> {
@@ -275,11 +286,13 @@ export function sarif(report: Report, options: RenderOptions): Iterable<string>
275
286
  const ruleList = rules(kinds);
276
287
  const index = new Map(kinds.map((kind, at) => [kind.code, at]));
277
288
  const hashOf = lineHashCache(options.readSource);
289
+ const listed = new Map((report.components ?? []).map((one) => [one.id, one.members]));
290
+ const members: MembersOf = (id) => listed.get(id) ?? [];
278
291
  const results = [
279
- ...report.findings.map((found) => findingResult(found, index, hashOf)),
292
+ ...report.findings.map((found) => findingResult(found, index, hashOf, members)),
280
293
  ...report.stale_suppressions.map((stale) => staleResult(stale, index, hashOf)),
281
294
  ];
282
- const languages = [...report.analyzer.languages].sort().join("+");
295
+ const languages = [...report.analyzer.languages].sort(bytewise).join("+");
283
296
  const withheld = withheldLine(report.totals);
284
297
  const log = {
285
298
  $schema: SCHEMA,
@@ -10,6 +10,7 @@
10
10
  import { CHUNK_LENGTH } from "../json-chunks.ts";
11
11
  import { RenderError } from "./reporter.ts";
12
12
  import { utf8Bytes } from "./sha256.ts";
13
+ import { bytewise } from "../text/compare.ts";
13
14
 
14
15
  /** A template that does not parse, which refuses the invocation before any analysis. */
15
16
  export class TemplateError extends Error {
@@ -618,7 +619,7 @@ function formatted(value: Value, nested: boolean): string {
618
619
  }
619
620
  const object: ValueObject = value;
620
621
  const entries = Object.keys(object)
621
- .sort()
622
+ .sort(bytewise)
622
623
  .map((key) => `${key}:${formatted(object[key] ?? null, true)}`);
623
624
  return `map[${entries.join(" ")}]`;
624
625
  }
@@ -647,28 +648,11 @@ function compareBasic(name: string, a: Value, b: Value): number {
647
648
  return Number.NaN;
648
649
  }
649
650
  if (kind === "string") {
650
- return byCodePoints(a as string, b as string);
651
+ return bytewise(a as string, b as string);
651
652
  }
652
653
  return (a as number) < (b as number) ? -1 : 1;
653
654
  }
654
655
 
655
- /**
656
- * Two strings ordered by the bytes of their UTF-8 encodings, which is the order of their
657
- * code points: the order of their UTF-16 code units differs above U+FFFF.
658
- */
659
- function byCodePoints(a: string, b: string): number {
660
- let at = 0;
661
- while (at < a.length && at < b.length) {
662
- const x = a.codePointAt(at) ?? 0;
663
- const y = b.codePointAt(at) ?? 0;
664
- if (x !== y) {
665
- return x < y ? -1 : 1;
666
- }
667
- at += x > 0xffff ? 2 : 1;
668
- }
669
- return a.length - b.length;
670
- }
671
-
672
656
  /** The escapes `%q` writes for the control characters that have one of their own. */
673
657
  const QUOTED_ESCAPES: Readonly<Record<string, string>> = {
674
658
  '"': '\\"',
@@ -1022,7 +1006,7 @@ class Execution {
1022
1006
  entries = value.map((one, i) => [i, one]);
1023
1007
  } else if (isObject(value)) {
1024
1008
  entries = Object.keys(value)
1025
- .sort()
1009
+ .sort(bytewise)
1026
1010
  .map((key) => [key, value[key] ?? null]);
1027
1011
  } else {
1028
1012
  throw new RenderError(`range cannot iterate over a ${kindOf(value)}`);
@@ -1,5 +1,5 @@
1
1
  import { coalesced } from "../json-chunks.ts";
2
- import type { Report, WireTotals } from "../report.ts";
2
+ import type { Report, Totals } from "../contract/report.generated.ts";
3
3
 
4
4
  /** The kind token and the confidence a stale suppression is rendered with, both fixed. */
5
5
  const STALE_KIND = "suppression";
@@ -11,7 +11,7 @@ function counted(n: number, one: string, many: string): string {
11
11
  }
12
12
 
13
13
  /** The report's totals in one line, in the order the report declares them. */
14
- function summary(totals: WireTotals): string {
14
+ function summary(totals: Totals): string {
15
15
  const { allow, warn, deny } = totals.by_severity;
16
16
  return [
17
17
  `summary: ${counted(totals.findings, "finding", "findings")} (${String(allow)} allow, ${String(warn)} warn, ${String(deny)} deny)`,
@@ -31,7 +31,7 @@ const WITHHELD_ORDER = ["probable", "possible"] as const;
31
31
  * The line naming what the minimum confidence withheld and the setting that shows it all,
32
32
  * or undefined where it withheld nothing.
33
33
  */
34
- export function withheldLine(totals: WireTotals): string | undefined {
34
+ export function withheldLine(totals: Totals): string | undefined {
35
35
  const named = WITHHELD_ORDER.filter((confidence) => totals.withheld[confidence] > 0);
36
36
  const lowest = named.at(-1);
37
37
  if (lowest === undefined) {