@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.21

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 (431) hide show
  1. package/README.md +3 -1
  2. package/THIRD_PARTY_NOTICES.md +27 -0
  3. package/dist/bin/mapper-connection.js +2 -1
  4. package/dist/bin/node-host.js +24 -5
  5. package/dist/src/alias-chain.js +35 -9
  6. package/dist/src/amd.js +81 -0
  7. package/dist/src/analysis.js +274 -496
  8. package/dist/src/augmentations.js +64 -3
  9. package/dist/src/automatic-types.js +10 -29
  10. package/dist/src/bindings.js +382 -0
  11. package/dist/src/commands/held.js +499 -0
  12. package/dist/src/commands/read.js +161 -0
  13. package/dist/src/commands/shell.js +169 -0
  14. package/dist/src/commands/tools.js +1847 -0
  15. package/dist/src/component-files.js +3 -2
  16. package/dist/src/component-layer.js +4 -2
  17. package/dist/src/config.js +6 -82
  18. package/dist/src/conformance-record.js +2 -2
  19. package/dist/src/consumers.js +10 -38
  20. package/dist/src/contextual-uses.js +57 -26
  21. package/dist/src/contract/config.generated.js +561 -0
  22. package/dist/src/contract/contract.generated.js +1370 -0
  23. package/dist/src/contract/report.generated.js +866 -0
  24. package/dist/src/dependencies.js +165 -122
  25. package/dist/src/destructuring.js +1 -19
  26. package/dist/src/edges.js +38 -122
  27. package/dist/src/element-access.js +181 -168
  28. package/dist/src/entries/build-scripts.js +222 -0
  29. package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
  30. package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
  31. package/dist/src/entries/conventions.js +740 -0
  32. package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
  33. package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
  34. package/dist/src/entries/run-directories.js +77 -0
  35. package/dist/src/entries/sources.js +144 -0
  36. package/dist/src/entries/static-module.js +670 -0
  37. package/dist/src/entries/test-runners.js +650 -0
  38. package/dist/src/entries/workflow-steps.js +345 -0
  39. package/dist/src/exemptions/argument-places.js +131 -0
  40. package/dist/src/exemptions/calls.js +338 -0
  41. package/dist/src/exemptions/classes.js +13 -0
  42. package/dist/src/{decorator.js → exemptions/decorator.js} +19 -30
  43. package/dist/src/exemptions/detectors.js +48 -0
  44. package/dist/src/{enum-group.js → exemptions/enum-group.js} +9 -16
  45. package/dist/src/{erased-stores.js → exemptions/erased-stores.js} +7 -11
  46. package/dist/src/{framework-lifecycle.js → exemptions/framework-lifecycle.js} +76 -54
  47. package/dist/src/exemptions/generated-file.js +241 -0
  48. package/dist/src/{injection-container.js → exemptions/injection-container.js} +20 -26
  49. package/dist/src/exemptions/installed-globals.js +173 -0
  50. package/dist/src/{interface-satisfaction.js → exemptions/interface-satisfaction.js} +52 -121
  51. package/dist/src/exemptions/lifecycle.js +150 -0
  52. package/dist/src/{reflective-lookup.js → exemptions/reflective-lookup.js} +3 -3
  53. package/dist/src/exemptions/serialization-contract.js +1276 -0
  54. package/dist/src/exemptions/sites.js +182 -0
  55. package/dist/src/{template-field.js → exemptions/template-field.js} +13 -23
  56. package/dist/src/{value-reach.js → exemptions/value-reach.js} +14 -7
  57. package/dist/src/exposure.js +400 -0
  58. package/dist/src/extensions.js +37 -0
  59. package/dist/src/facts.js +38 -0
  60. package/dist/src/failure.js +36 -0
  61. package/dist/src/file-facts.js +3 -26
  62. package/dist/src/findings/completion.js +109 -56
  63. package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
  64. package/dist/src/findings/emitters.js +27 -41
  65. package/dist/src/{implementations.js → findings/implementations.js} +3 -3
  66. package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
  67. package/dist/src/findings/interfaces.js +4 -5
  68. package/dist/src/findings/intra-function.js +16 -13
  69. package/dist/src/findings/non-code-artifacts.js +17 -12
  70. package/dist/src/findings/reads-and-writes.js +86 -27
  71. package/dist/src/findings/self-check.js +44 -30
  72. package/dist/src/findings/unused-declarations.js +29 -45
  73. package/dist/src/findings/visibility-narrowing.js +23 -31
  74. package/dist/src/findings-pass.js +13 -21
  75. package/dist/src/fs/document.js +52 -0
  76. package/dist/src/fs/manifest.js +67 -0
  77. package/dist/src/fs/tree.js +88 -0
  78. package/dist/src/git-ignore.js +39 -26
  79. package/dist/src/import-bindings.js +73 -28
  80. package/dist/src/index/sites.js +557 -0
  81. package/dist/src/index/values.js +124 -0
  82. package/dist/src/index.js +2 -2
  83. package/dist/src/indexed-access.js +523 -478
  84. package/dist/src/intra-function-parts.js +63 -43
  85. package/dist/src/inventory/commonjs.js +507 -0
  86. package/dist/src/inventory/enumerate.js +167 -0
  87. package/dist/src/inventory/syntax.js +236 -0
  88. package/dist/src/inventory.js +323 -724
  89. package/dist/src/javascript-file.js +48 -0
  90. package/dist/src/json-document.js +198 -67
  91. package/dist/src/keyof-comparisons.js +126 -107
  92. package/dist/src/kinds.js +3 -366
  93. package/dist/src/{components.js → liveness/components.js} +2 -3
  94. package/dist/src/{graph.js → liveness/graph.js} +52 -28
  95. package/dist/src/liveness/matrix.js +99 -0
  96. package/dist/src/liveness/sweep.js +558 -0
  97. package/dist/src/load/classify.js +289 -0
  98. package/dist/src/load/diagnostics.js +87 -0
  99. package/dist/src/load/discover.js +285 -0
  100. package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
  101. package/dist/src/load/expected-module.js +136 -0
  102. package/dist/src/load/load.js +27 -0
  103. package/dist/src/load/module-lookup.js +37 -0
  104. package/dist/src/load/package-scope.js +56 -0
  105. package/dist/src/load/plan.js +313 -0
  106. package/dist/src/load/specifiers.js +113 -0
  107. package/dist/src/load/synthesize.js +152 -0
  108. package/dist/src/load/test-globals.js +207 -0
  109. package/dist/src/load/test-joins.js +82 -0
  110. package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
  111. package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
  112. package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
  113. package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
  114. package/dist/src/{workspace.js → load/workspace.js} +62 -124
  115. package/dist/src/module-declarations.js +70 -85
  116. package/dist/src/overrides.js +134 -112
  117. package/dist/src/partial.js +2 -1
  118. package/dist/src/paths.js +82 -16
  119. package/dist/src/platform-calls.js +78 -0
  120. package/dist/src/platform-symbols.js +134 -0
  121. package/dist/src/position.js +43 -1
  122. package/dist/src/print.js +11 -79
  123. package/dist/src/product.js +13 -0
  124. package/dist/src/query.js +95 -0
  125. package/dist/src/ref.js +12 -20
  126. package/dist/src/references/read-rule.js +1 -0
  127. package/dist/src/references/read-rules.js +48 -0
  128. package/dist/src/references/sink.js +237 -0
  129. package/dist/src/references/sources.js +450 -0
  130. package/dist/src/references.js +117 -1074
  131. package/dist/src/report-schema.js +51 -0
  132. package/dist/src/report.js +57 -41
  133. package/dist/src/reporters/annotations.js +15 -8
  134. package/dist/src/reporters/sarif.js +16 -10
  135. package/dist/src/reporters/template.js +4 -19
  136. package/dist/src/resolve.js +246 -730
  137. package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
  138. package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
  139. package/dist/src/roots/manifest.js +216 -0
  140. package/dist/src/roots/published-reach.js +412 -0
  141. package/dist/src/roots/root-set.js +487 -0
  142. package/dist/src/roots/unseen-loads.js +236 -0
  143. package/dist/src/run.js +66 -77
  144. package/dist/src/schema.js +320 -343
  145. package/dist/src/scope.js +38 -115
  146. package/dist/src/session.js +37 -29
  147. package/dist/src/source-files.js +6 -10
  148. package/dist/src/stores.js +4 -2
  149. package/dist/src/suppress-file.js +25 -28
  150. package/dist/src/suppress-inline.js +36 -83
  151. package/dist/src/suppress.js +50 -71
  152. package/dist/src/symbol-keys.js +92 -88
  153. package/dist/src/tests/file-class.js +76 -0
  154. package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
  155. package/dist/src/{test-support.js → tests/support.js} +5 -12
  156. package/dist/src/text/compare.js +26 -0
  157. package/dist/src/text/glob.js +194 -0
  158. package/dist/src/text/named-files.js +298 -0
  159. package/dist/src/text/yaml.js +684 -0
  160. package/dist/src/type-errors.js +11 -232
  161. package/dist/src/type-parameter-reads.js +178 -139
  162. package/dist/src/unimplemented-callees.js +262 -242
  163. package/dist/src/unwrap.js +23 -0
  164. package/dist/src/usage.js +10 -0
  165. package/dist/src/vendor/unbash/ansi-c.js +132 -0
  166. package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
  167. package/dist/src/vendor/unbash/arithmetic.js +591 -0
  168. package/dist/src/vendor/unbash/assignment.js +131 -0
  169. package/dist/src/vendor/unbash/chars.js +48 -0
  170. package/dist/src/vendor/unbash/command.js +41 -0
  171. package/dist/src/vendor/unbash/expansion.js +80 -0
  172. package/dist/src/vendor/unbash/glob.js +268 -0
  173. package/dist/src/vendor/unbash/heredoc.js +27 -0
  174. package/dist/src/vendor/unbash/internal-types.js +1 -0
  175. package/dist/src/vendor/unbash/lexer.js +4274 -0
  176. package/dist/src/vendor/unbash/limits.js +3 -0
  177. package/dist/src/vendor/unbash/parser.js +1366 -0
  178. package/dist/src/vendor/unbash/parts.js +57 -0
  179. package/dist/src/vendor/unbash/substitution-context.js +8 -0
  180. package/dist/src/vendor/unbash/traversal.js +212 -0
  181. package/dist/src/vendor/unbash/types.js +1 -0
  182. package/dist/src/vendor/unbash/word-value.js +61 -0
  183. package/dist/src/vendor/unbash/word.js +40 -0
  184. package/dist/src/verbs/analyze.js +194 -127
  185. package/dist/src/verbs/describe.js +13 -18
  186. package/dist/src/verbs/explain.js +85 -139
  187. package/dist/src/verbs/print-config.js +2 -1
  188. package/dist/src/verbs/print-projects.js +6 -4
  189. package/dist/src/verbs/print-retained.js +30 -6
  190. package/dist/src/verbs/print-roots.js +4 -2
  191. package/dist/src/verbs/verb.js +1 -5
  192. package/dist/src/verbs/version.js +14 -3
  193. package/jsr.json +2 -1
  194. package/package.json +14 -8
  195. package/src/alias-chain.ts +40 -11
  196. package/src/amd.ts +130 -0
  197. package/src/analysis.ts +426 -733
  198. package/src/augmentations.ts +93 -4
  199. package/src/automatic-types.ts +12 -30
  200. package/src/bindings.ts +460 -0
  201. package/src/commands/held.ts +632 -0
  202. package/src/commands/read.ts +242 -0
  203. package/src/commands/shell.ts +228 -0
  204. package/src/commands/tools.ts +2382 -0
  205. package/src/component-files.ts +4 -2
  206. package/src/component-layer.ts +4 -2
  207. package/src/config.ts +31 -302
  208. package/src/conformance-record.ts +2 -2
  209. package/src/consumers.ts +16 -66
  210. package/src/contextual-uses.ts +66 -34
  211. package/src/contract/config.generated.ts +821 -0
  212. package/src/contract/contract.generated.ts +1453 -0
  213. package/src/contract/report.generated.ts +1241 -0
  214. package/src/dependencies.ts +223 -128
  215. package/src/destructuring.ts +1 -31
  216. package/src/edges.ts +41 -140
  217. package/src/element-access.ts +190 -187
  218. package/src/entries/build-scripts.ts +292 -0
  219. package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
  220. package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
  221. package/src/{conventions.ts → entries/conventions.ts} +367 -583
  222. package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
  223. package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
  224. package/src/entries/run-directories.ts +108 -0
  225. package/src/entries/sources.ts +266 -0
  226. package/src/entries/static-module.ts +858 -0
  227. package/src/entries/test-runners.ts +835 -0
  228. package/src/entries/workflow-steps.ts +432 -0
  229. package/src/exemptions/argument-places.ts +198 -0
  230. package/src/exemptions/calls.ts +483 -0
  231. package/src/exemptions/classes.ts +49 -0
  232. package/src/exemptions/decorator.ts +56 -0
  233. package/src/exemptions/detectors.ts +75 -0
  234. package/src/{enum-group.ts → exemptions/enum-group.ts} +10 -19
  235. package/src/{erased-stores.ts → exemptions/erased-stores.ts} +7 -14
  236. package/src/{framework-lifecycle.ts → exemptions/framework-lifecycle.ts} +85 -66
  237. package/src/exemptions/generated-file.ts +318 -0
  238. package/src/{injection-container.ts → exemptions/injection-container.ts} +29 -34
  239. package/src/exemptions/installed-globals.ts +255 -0
  240. package/src/{interface-satisfaction.ts → exemptions/interface-satisfaction.ts} +69 -160
  241. package/src/exemptions/lifecycle.ts +286 -0
  242. package/src/{reflective-lookup.ts → exemptions/reflective-lookup.ts} +5 -5
  243. package/src/exemptions/serialization-contract.ts +1729 -0
  244. package/src/exemptions/sites.ts +293 -0
  245. package/src/{template-field.ts → exemptions/template-field.ts} +22 -32
  246. package/src/{value-reach.ts → exemptions/value-reach.ts} +16 -8
  247. package/src/exposure.ts +492 -0
  248. package/src/extensions.ts +45 -0
  249. package/src/facts.ts +46 -0
  250. package/src/failure.ts +63 -0
  251. package/src/file-facts.ts +15 -25
  252. package/src/finding.ts +10 -10
  253. package/src/findings/boundary.ts +11 -0
  254. package/src/findings/completion.ts +133 -64
  255. package/src/findings/dependencies-and-module-machinery.ts +4 -7
  256. package/src/findings/emitter.ts +9 -10
  257. package/src/findings/emitters.ts +38 -52
  258. package/src/{implementations.ts → findings/implementations.ts} +4 -4
  259. package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
  260. package/src/findings/interfaces.ts +7 -9
  261. package/src/findings/intra-function.ts +16 -14
  262. package/src/findings/non-code-artifacts.ts +24 -15
  263. package/src/findings/reads-and-writes.ts +118 -41
  264. package/src/findings/self-check.ts +51 -38
  265. package/src/findings/unused-declarations.ts +31 -49
  266. package/src/findings/visibility-narrowing.ts +36 -40
  267. package/src/findings-pass.ts +15 -31
  268. package/src/fs/document.ts +70 -0
  269. package/src/fs/manifest.ts +96 -0
  270. package/src/fs/tree.ts +110 -0
  271. package/src/git-ignore.ts +50 -26
  272. package/src/host.ts +12 -5
  273. package/src/import-bindings.ts +98 -29
  274. package/src/index/sites.ts +781 -0
  275. package/src/index/values.ts +170 -0
  276. package/src/index.ts +2 -2
  277. package/src/indexed-access.ts +570 -527
  278. package/src/intra-function-parts.ts +73 -44
  279. package/src/inventory/commonjs.ts +696 -0
  280. package/src/inventory/enumerate.ts +203 -0
  281. package/src/inventory/syntax.ts +311 -0
  282. package/src/inventory.ts +442 -895
  283. package/src/javascript-file.ts +54 -0
  284. package/src/json-document.ts +241 -76
  285. package/src/keyof-comparisons.ts +133 -122
  286. package/src/kinds.ts +5 -413
  287. package/src/{components.ts → liveness/components.ts} +4 -6
  288. package/src/{graph.ts → liveness/graph.ts} +100 -35
  289. package/src/liveness/matrix.ts +162 -0
  290. package/src/liveness/sweep.ts +855 -0
  291. package/src/load/classify.ts +433 -0
  292. package/src/load/diagnostics.ts +154 -0
  293. package/src/load/discover.ts +471 -0
  294. package/src/{emit-map.ts → load/emit-map.ts} +1 -1
  295. package/src/load/expected-module.ts +194 -0
  296. package/src/load/load.ts +73 -0
  297. package/src/load/module-lookup.ts +50 -0
  298. package/src/load/package-scope.ts +74 -0
  299. package/src/load/plan.ts +513 -0
  300. package/src/load/specifiers.ts +171 -0
  301. package/src/load/synthesize.ts +230 -0
  302. package/src/load/test-globals.ts +251 -0
  303. package/src/load/test-joins.ts +98 -0
  304. package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
  305. package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
  306. package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
  307. package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
  308. package/src/{workspace.ts → load/workspace.ts} +90 -134
  309. package/src/module-declarations.ts +74 -98
  310. package/src/overrides.ts +162 -134
  311. package/src/partial.ts +3 -2
  312. package/src/paths.ts +92 -16
  313. package/src/platform-calls.ts +119 -0
  314. package/src/platform-symbols.ts +189 -0
  315. package/src/position.ts +44 -1
  316. package/src/print.ts +12 -92
  317. package/src/product.ts +18 -0
  318. package/src/query.ts +201 -10
  319. package/src/ref.ts +12 -20
  320. package/src/references/read-rule.ts +60 -0
  321. package/src/references/read-rules.ts +55 -0
  322. package/src/references/sink.ts +314 -0
  323. package/src/references/sources.ts +632 -0
  324. package/src/references.ts +187 -1450
  325. package/src/report-schema.ts +68 -0
  326. package/src/report.ts +103 -226
  327. package/src/reporters/annotations.ts +22 -11
  328. package/src/reporters/json.ts +1 -1
  329. package/src/reporters/reporter.ts +2 -4
  330. package/src/reporters/reporters.ts +1 -1
  331. package/src/reporters/sarif.ts +29 -16
  332. package/src/reporters/template.ts +4 -20
  333. package/src/reporters/text.ts +3 -3
  334. package/src/resolve.ts +284 -1115
  335. package/src/{configured-declarations.ts → roots/configured-declarations.ts} +26 -29
  336. package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
  337. package/src/roots/manifest.ts +303 -0
  338. package/src/roots/published-reach.ts +486 -0
  339. package/src/{roots.ts → roots/root-set.ts} +286 -469
  340. package/src/roots/unseen-loads.ts +345 -0
  341. package/src/run.ts +75 -91
  342. package/src/schema.ts +391 -388
  343. package/src/scope.ts +46 -138
  344. package/src/session.ts +87 -55
  345. package/src/source-files.ts +6 -11
  346. package/src/stores.ts +15 -3
  347. package/src/suppress-file.ts +24 -33
  348. package/src/suppress-inline.ts +55 -91
  349. package/src/suppress.ts +78 -79
  350. package/src/symbol-keys.ts +104 -107
  351. package/src/tests/file-class.ts +135 -0
  352. package/src/{outside-tests.ts → tests/outside.ts} +16 -10
  353. package/src/{test-support.ts → tests/support.ts} +15 -21
  354. package/src/text/compare.ts +27 -0
  355. package/src/text/glob.ts +210 -0
  356. package/src/text/named-files.ts +388 -0
  357. package/src/text/yaml.ts +747 -0
  358. package/src/type-errors.ts +18 -288
  359. package/src/type-parameter-reads.ts +187 -158
  360. package/src/unimplemented-callees.ts +297 -280
  361. package/src/unwrap.ts +34 -0
  362. package/src/usage.ts +10 -0
  363. package/src/vendor/unbash/LICENSE +15 -0
  364. package/src/vendor/unbash/VENDORED.md +16 -0
  365. package/src/vendor/unbash/ansi-c.ts +132 -0
  366. package/src/vendor/unbash/arithmetic-parts.ts +53 -0
  367. package/src/vendor/unbash/arithmetic.ts +641 -0
  368. package/src/vendor/unbash/assignment.ts +163 -0
  369. package/src/vendor/unbash/chars.ts +48 -0
  370. package/src/vendor/unbash/command.ts +47 -0
  371. package/src/vendor/unbash/expansion.ts +144 -0
  372. package/src/vendor/unbash/glob.ts +284 -0
  373. package/src/vendor/unbash/heredoc.ts +34 -0
  374. package/src/vendor/unbash/internal-types.ts +94 -0
  375. package/src/vendor/unbash/lexer.ts +4352 -0
  376. package/src/vendor/unbash/limits.ts +3 -0
  377. package/src/vendor/unbash/parser.ts +1612 -0
  378. package/src/vendor/unbash/parts.ts +96 -0
  379. package/src/vendor/unbash/substitution-context.ts +20 -0
  380. package/src/vendor/unbash/traversal.ts +182 -0
  381. package/src/vendor/unbash/types.ts +660 -0
  382. package/src/vendor/unbash/word-value.ts +64 -0
  383. package/src/vendor/unbash/word.ts +50 -0
  384. package/src/verbs/analyze.ts +255 -164
  385. package/src/verbs/describe.ts +19 -17
  386. package/src/verbs/explain.ts +93 -169
  387. package/src/verbs/print-config.ts +2 -1
  388. package/src/verbs/print-projects.ts +6 -4
  389. package/src/verbs/print-retained.ts +36 -6
  390. package/src/verbs/print-roots.ts +4 -2
  391. package/src/verbs/verb.ts +2 -8
  392. package/src/verbs/version.ts +15 -3
  393. package/dist/src/base-url.js +0 -18
  394. package/dist/src/calls.js +0 -155
  395. package/dist/src/conventions.js +0 -937
  396. package/dist/src/discover.js +0 -468
  397. package/dist/src/entry-points.js +0 -529
  398. package/dist/src/exempt-classes.js +0 -75
  399. package/dist/src/exempt.js +0 -209
  400. package/dist/src/generated-file.js +0 -95
  401. package/dist/src/glob.js +0 -65
  402. package/dist/src/manifest.js +0 -165
  403. package/dist/src/matrix.js +0 -246
  404. package/dist/src/pnpm-workspace.js +0 -120
  405. package/dist/src/roots.js +0 -672
  406. package/dist/src/serialization-contract.js +0 -611
  407. package/dist/src/setup-failure.js +0 -23
  408. package/dist/src/sweep.js +0 -224
  409. package/dist/src/test-joins.js +0 -101
  410. package/dist/src/value-flow.js +0 -74
  411. package/dist/src/version.js +0 -7
  412. package/dist/src/workflow-steps.js +0 -185
  413. package/src/base-url.ts +0 -24
  414. package/src/calls.ts +0 -225
  415. package/src/decorator.ts +0 -78
  416. package/src/discover.ts +0 -653
  417. package/src/entry-points.ts +0 -687
  418. package/src/exempt-classes.ts +0 -123
  419. package/src/exempt.ts +0 -323
  420. package/src/generated-file.ts +0 -111
  421. package/src/glob.ts +0 -67
  422. package/src/manifest.ts +0 -234
  423. package/src/matrix.ts +0 -423
  424. package/src/pnpm-workspace.ts +0 -135
  425. package/src/serialization-contract.ts +0 -849
  426. package/src/setup-failure.ts +0 -39
  427. package/src/sweep.ts +0 -347
  428. package/src/test-joins.ts +0 -120
  429. package/src/value-flow.ts +0 -104
  430. package/src/version.ts +0 -7
  431. package/src/workflow-steps.ts +0 -216
@@ -1,13 +1,14 @@
1
1
  /**
2
- * One project's declarations, the references between them and the roots that seed
3
- * reachability, indexed for the sweep. The graph reads no file and asks the compiler
4
- * nothing, so a sweep over it is a function of the values it was built from, and the
5
- * inventory's order is the order every set a sweep answers reads in.
2
+ * The run's declarations, the references every configuration makes between them and the
3
+ * roots that seed reachability, indexed for the sweep. The graph reads no file and asks the
4
+ * compiler nothing, so a sweep over it is a function of the values it was built from, and
5
+ * the inventory's order is the order every set a sweep answers reads in.
6
6
  */
7
7
 
8
- import type { InventorySymbol, SymbolKind } from "./inventory.ts";
9
- import type { Reference } from "./references.ts";
10
- import type { Root, RootKind } from "./roots.ts";
8
+ import type { InventorySymbol, SymbolKind } from "../inventory.ts";
9
+ import type { Reference } from "../references.ts";
10
+ import { madeByTestCode } from "../tests/file-class.ts";
11
+ import type { Root, RootKind } from "../roots/root-set.ts";
11
12
 
12
13
  /** The position of a declaration the inventory does not hold. */
13
14
  export const OUTSIDE = -1;
@@ -39,11 +40,11 @@ const SWEPT: Readonly<Record<SymbolKind, boolean>> = {
39
40
 
40
41
  /**
41
42
  * Whether a root of each kind names a caller, which holds it live under both relations: a
42
- * tool reads what it loads and what its strings name, a runtime runs a test, setup or
43
- * worker file, a page's module script, a command, a script or a workflow step, the manifest
44
- * names what enters the package, an alias global stands for its export, and an entry file,
45
- * a configured root and a pattern assert a caller. A library's published API only supposes
46
- * an unseen consumer, so it is live under reachability alone.
43
+ * tool reads what it loads and what its strings name, a runtime runs a test or setup
44
+ * file, a page's module script, a command, a script or a workflow step, the manifest
45
+ * names what enters the package, an alias global stands for its export, an outside
46
+ * declaration names a global interface merging into it, and an entry file, a configured root
47
+ * and a pattern assert a caller. A published API supposes a consumer: reachability alone.
47
48
  */
48
49
  const NAMES_A_CALLER: Readonly<Record<RootKind, boolean>> = {
49
50
  "entry-file": true,
@@ -56,14 +57,13 @@ const NAMES_A_CALLER: Readonly<Record<RootKind, boolean>> = {
56
57
  pattern: true,
57
58
  "type-error": true,
58
59
  "type-query-alias": true,
60
+ "global-augmentation": true,
59
61
  "configuration-file": true,
60
62
  "configuration-string": true,
63
+ "bundler-entry": true,
61
64
  "test-runner": true,
62
- "browser-tests": true,
63
- worker: true,
64
65
  "html-entry": true,
65
66
  "workflow-step": true,
66
- "computed-import": true,
67
67
  "document-import": true,
68
68
  };
69
69
 
@@ -80,24 +80,40 @@ export function namesACaller(kind: RootKind): boolean {
80
80
  /** One reference as the sweep reads it: the declaration named, and whether a test file made it. */
81
81
  export interface Edge {
82
82
  readonly to: number;
83
+ /** The reference's place in {@link Graph.references}. */
84
+ readonly reference: number;
83
85
  readonly test: boolean;
86
+ /** Whether only the name answered, which counts at the sweep's guessed tier alone. */
87
+ readonly guessed: boolean;
84
88
  /**
85
89
  * Whether the reference evaluates the module whose file it names, which reaches the
86
90
  * module's top level and none of what it exports.
87
91
  */
88
92
  readonly evaluation: boolean;
93
+ /**
94
+ * Whether a loaded consumer made it, whose test references a mode may class as
95
+ * production. Only a consumed edge can be one.
96
+ */
97
+ readonly consumer: boolean;
89
98
  }
90
99
 
91
- /** How many references one declaration carries, split by the classification of the file that made each. */
92
- interface Counts {
100
+ /**
101
+ * How many references one declaration carries, split by the classification of the file that
102
+ * made each; `consumerTest` counts the test references a loaded consumer's test files made,
103
+ * which a mode may class as production (`sweep.ts` `countedRefs`).
104
+ */
105
+ export interface Counts {
93
106
  readonly production: number;
94
107
  readonly test: number;
108
+ readonly consumerTest: number;
95
109
  }
96
110
 
97
111
  /** One root the inventory holds, at the position of the declaration it names. */
98
- interface Rooted {
112
+ export interface Rooted {
99
113
  readonly at: number;
100
114
  readonly kind: RootKind;
115
+ /** What names the root, as the root set spells it. */
116
+ readonly source: string;
101
117
  }
102
118
 
103
119
  /** The index the sweep and the component pass read. */
@@ -108,6 +124,12 @@ export interface Graph {
108
124
  readonly out: readonly (readonly Edge[])[];
109
125
  /** Per declaration, the references made to it, whoever made them. */
110
126
  readonly made: readonly Counts[];
127
+ /** Per declaration, those of {@link Graph.made} only a name answered. */
128
+ readonly guessedMade: readonly Counts[];
129
+ /** The references the graph was built from, in the order given. */
130
+ readonly references: readonly Reference[];
131
+ /** Per reference, the configurations that make it, in the run's order. */
132
+ readonly configurations: readonly (readonly string[])[];
111
133
  /** Per declaration, the position of its container, or {@link OUTSIDE} for a file. */
112
134
  readonly parent: readonly number[];
113
135
  /** Per declaration, whether a test file holds it. */
@@ -127,17 +149,44 @@ export interface Graph {
127
149
  /** Every root naming a declaration the inventory holds, in the order the root set gives them. */
128
150
  readonly rooted: readonly Rooted[];
129
151
  /**
130
- * Every reference a loaded consumer or an unheld file makes to a declaration the
131
- * inventory holds, in the order given. Such a file is a caller the analysis read, so the
132
- * sweep holds what it names live under both relations and reaches on from there.
152
+ * Every reference a loaded consumer, an unheld file or a declaration no configuration
153
+ * judges makes to a declaration the inventory holds, in the order given. Such code is a
154
+ * caller the analysis read, so the sweep holds what it names live under both relations
155
+ * and reaches on from there.
133
156
  */
134
157
  readonly consumed: readonly Edge[];
135
158
  /** The position of the declaration one identifier names, or {@link OUTSIDE}. */
136
159
  at(id: string): number;
137
160
  }
138
161
 
162
+ /** What the run says of a graph's references beyond the references themselves. */
163
+ interface Sources {
164
+ /**
165
+ * The declarations a configuration holds only for their references, judged by none: each
166
+ * reference one makes enters as a consumer's does, since deleting what it names breaks
167
+ * that configuration's compile (matrix.5).
168
+ */
169
+ readonly unjudged?: ReadonlySet<string>;
170
+ /** Per reference, in the order given, the configurations that make it. */
171
+ readonly configurations?: readonly (readonly string[])[];
172
+ }
173
+
174
+ /** Adds one reference's count to the counts of the declaration it names. */
175
+ function count(
176
+ counts: { production: number; test: number; consumerTest: number },
177
+ test: boolean,
178
+ consumer: boolean,
179
+ ): void {
180
+ if (test) {
181
+ counts.test += 1;
182
+ counts.consumerTest += consumer ? 1 : 0;
183
+ } else {
184
+ counts.production += 1;
185
+ }
186
+ }
187
+
139
188
  /**
140
- * Indexes one project's inventory, references and roots. `testFiles` are the paths the
189
+ * Indexes the run's inventory, references and roots. `testFiles` are the paths the
141
190
  * reference pass classified as test files, so a declaration one holds is a test
142
191
  * declaration. A reference to a declaration the inventory does not hold is dropped; one
143
192
  * from such a declaration still counts toward its target, because reference counting
@@ -150,35 +199,48 @@ export function graphOf(
150
199
  testFiles: readonly string[],
151
200
  supportFiles: readonly string[] = [],
152
201
  ambient: ReadonlySet<string> = new Set(),
202
+ sources: Sources = {},
153
203
  ): Graph {
154
204
  const supports = new Set(supportFiles);
155
205
  const index = new Map(symbols.map((symbol, at) => [symbol.id, at]));
156
206
  const at = (id: string): number => index.get(id) ?? OUTSIDE;
157
207
  const tests = new Set(testFiles);
208
+ const unjudged = sources.unjudged ?? new Set<string>();
158
209
 
159
210
  const out: Edge[][] = symbols.map(() => []);
160
- const made = symbols.map(() => ({ production: 0, test: 0 }));
211
+ const made = symbols.map(() => ({ production: 0, test: 0, consumerTest: 0 }));
212
+ const guessedMade = symbols.map(() => ({ production: 0, test: 0, consumerTest: 0 }));
161
213
  const consumed: Edge[] = [];
162
- for (const reference of references) {
214
+ references.forEach((reference, place) => {
163
215
  const to = at(reference.to);
164
216
  if (to === OUTSIDE) {
165
- continue;
217
+ return;
166
218
  }
219
+ const test = madeByTestCode(reference, supports);
220
+ const consumer = reference.consumer !== undefined;
221
+ const guessed = reference.guessed === true;
167
222
  const counts = made[to];
168
223
  if (counts !== undefined) {
169
- if (reference.test) {
170
- counts.test += 1;
171
- } else {
172
- counts.production += 1;
173
- }
224
+ count(counts, test, consumer);
174
225
  }
175
- const edge = { to, test: reference.test, evaluation: reference.use === "evaluation" };
176
- if (reference.consumer !== undefined || reference.unheld === true) {
226
+ const guesses = guessedMade[to];
227
+ if (guessed && guesses !== undefined) {
228
+ count(guesses, test, consumer);
229
+ }
230
+ const edge = {
231
+ to,
232
+ reference: place,
233
+ test,
234
+ guessed,
235
+ evaluation: reference.use === "evaluation",
236
+ consumer,
237
+ };
238
+ if (consumer || reference.unheld === true || unjudged.has(reference.from)) {
177
239
  consumed.push(edge);
178
- continue;
240
+ return;
179
241
  }
180
242
  out[at(reference.from)]?.push(edge);
181
- }
243
+ });
182
244
 
183
245
  const parent = symbols.map((symbol) => at(symbol.parent));
184
246
  const exportsOf: number[][] = symbols.map(() => []);
@@ -193,7 +255,7 @@ export function graphOf(
193
255
  for (const root of roots) {
194
256
  const position = at(root.id);
195
257
  if (position !== OUTSIDE) {
196
- rooted.push({ at: position, kind: root.kind });
258
+ rooted.push({ at: position, kind: root.kind, source: root.source });
197
259
  }
198
260
  }
199
261
 
@@ -201,6 +263,9 @@ export function graphOf(
201
263
  symbols,
202
264
  out,
203
265
  made,
266
+ guessedMade,
267
+ references,
268
+ configurations: sources.configurations ?? references.map(() => []),
204
269
  parent,
205
270
  test: symbols.map((symbol) => tests.has(symbol.position.path)),
206
271
  support: symbols.map((symbol) => supports.has(symbol.position.path)),
@@ -0,0 +1,162 @@
1
+ /**
2
+ * One run's projects as one matrix: every declaration any project judges, keyed by its
3
+ * position and carrying the configurations that hold it, and one graph over every
4
+ * configuration's references and roots, which the sweep judges once (matrix.4, matrix.5).
5
+ */
6
+
7
+ import { graphOf, swept, type Graph } from "./graph.ts";
8
+ import type { InventorySymbol } from "../inventory.ts";
9
+ import { byPosition } from "../position.ts";
10
+ import type { Reference } from "../references.ts";
11
+ import type { Root } from "../roots/root-set.ts";
12
+
13
+ /** What the passes answered for one configuration of the run. */
14
+ export interface Configured {
15
+ /** The name discovery gives the configuration's project. */
16
+ readonly configuration: string;
17
+ readonly symbols: readonly InventorySymbol[];
18
+ readonly references: readonly Reference[];
19
+ readonly roots: readonly Root[];
20
+ /** The paths the reference pass classified as test files. */
21
+ readonly testFiles: readonly string[];
22
+ /** The paths of the test-support files, which only test code imports. */
23
+ readonly supportFiles?: readonly string[] | undefined;
24
+ /** The paths of the files only tests reach that are no test-support file. */
25
+ readonly testUsedFiles?: readonly string[] | undefined;
26
+ /** The ids of the ambient declarations, which describe code the target does not implement. */
27
+ readonly ambient?: ReadonlySet<string> | undefined;
28
+ /**
29
+ * The paths of the workspace-package files the configuration holds but does not
30
+ * compile itself. Their declarations count in its graph and its verdict on them is no
31
+ * finding.
32
+ */
33
+ readonly referenceOnly?: readonly string[] | undefined;
34
+ /** Each declaration's dependents, by id, as the configuration's inventory states them. */
35
+ readonly dependents?: ReadonlyMap<string, readonly string[]> | undefined;
36
+ }
37
+
38
+ /** The run's configurations, indexed for the sweep. */
39
+ export interface Matrix {
40
+ /** The configurations, in the run's order. */
41
+ readonly configurations: readonly string[];
42
+ /**
43
+ * The graph over every configuration at once: every declaration a configuration
44
+ * holds in a file it does not hold only for its references, once per position and in
45
+ * site order, and every reference any configuration makes, a reference several
46
+ * configurations make at one position counted once and tagged with each of them.
47
+ */
48
+ readonly union: Graph;
49
+ /**
50
+ * Per declaration of {@link Matrix.union}, at its position there, the configurations
51
+ * whose project holds it, in the run's order.
52
+ */
53
+ readonly heldIn: readonly (readonly string[])[];
54
+ /**
55
+ * Per declaration of {@link Matrix.union}, whether a file only tests reach that is no
56
+ * test-support file holds it in some configuration: production code only tests use.
57
+ */
58
+ readonly testUsed: readonly boolean[];
59
+ /** Each declaration's dependents, by id, as the first configuration holding it states them. */
60
+ readonly dependents: ReadonlyMap<string, readonly string[]>;
61
+ }
62
+
63
+ /**
64
+ * What makes one reference one reference, whichever configuration made it. A consumer's
65
+ * position is rendered against its own root, so the consumer is part of what it names.
66
+ */
67
+ export function referenceKey(reference: Reference): string {
68
+ const { path, line, column } = reference.position;
69
+ return [
70
+ reference.consumer ?? "",
71
+ reference.from,
72
+ reference.to,
73
+ path,
74
+ String(line),
75
+ String(column),
76
+ reference.use,
77
+ ].join("\u0000");
78
+ }
79
+
80
+ /**
81
+ * Indexes what the passes answered for each configuration of one run, in the run's order.
82
+ * A declaration is keyed by its rendered position, with the fields of the first
83
+ * configuration that judges it; one in a file every holder holds only for its references
84
+ * is judged by none and is not in the union, and a reference it makes enters the union as a
85
+ * consumer's does. One reference at one position of a file several configurations compile
86
+ * is one reference; two one configuration makes are two.
87
+ */
88
+ export function matrixOf(per: readonly Configured[]): Matrix {
89
+ const symbols: InventorySymbol[] = [];
90
+ const holders = new Map<string, string[]>();
91
+ const references: Reference[] = [];
92
+ const makers: string[][] = [];
93
+ const firstSeen = new Map<string, { readonly index: number; readonly places: number[] }>();
94
+ const judged = new Set<string>();
95
+ const unjudged = new Set<string>();
96
+ const dependents = new Map<string, readonly string[]>();
97
+ per.forEach((one, index) => {
98
+ for (const [id, after] of one.dependents ?? []) {
99
+ if (!dependents.has(id)) {
100
+ dependents.set(id, after);
101
+ }
102
+ }
103
+ const referenceOnly = new Set(one.referenceOnly);
104
+ for (const symbol of one.symbols) {
105
+ const held = holders.get(symbol.id);
106
+ if (held === undefined) {
107
+ holders.set(symbol.id, [one.configuration]);
108
+ } else if (!held.includes(one.configuration)) {
109
+ held.push(one.configuration);
110
+ }
111
+ if (referenceOnly.has(symbol.position.path)) {
112
+ if (swept(symbol.kind)) {
113
+ unjudged.add(symbol.id);
114
+ }
115
+ } else if (!judged.has(symbol.id)) {
116
+ judged.add(symbol.id);
117
+ symbols.push(symbol);
118
+ }
119
+ }
120
+ for (const reference of one.references) {
121
+ const key = referenceKey(reference);
122
+ const seen = firstSeen.get(key);
123
+ if (seen !== undefined && seen.index !== index) {
124
+ for (const place of seen.places) {
125
+ const making = makers[place];
126
+ if (making !== undefined && !making.includes(one.configuration)) {
127
+ making.push(one.configuration);
128
+ }
129
+ }
130
+ continue;
131
+ }
132
+ const places = seen?.places ?? [];
133
+ if (seen === undefined) {
134
+ firstSeen.set(key, { index, places });
135
+ }
136
+ places.push(references.length);
137
+ references.push(reference);
138
+ makers.push([one.configuration]);
139
+ }
140
+ });
141
+ for (const id of judged) {
142
+ unjudged.delete(id);
143
+ }
144
+ symbols.sort((a, b) => byPosition(a.position, b.position));
145
+ const testUsed = new Set(per.flatMap((one) => one.testUsedFiles ?? []));
146
+
147
+ return {
148
+ configurations: per.map((one) => one.configuration),
149
+ union: graphOf(
150
+ symbols,
151
+ references,
152
+ per.flatMap((one) => one.roots),
153
+ [...new Set(per.flatMap((one) => one.testFiles))],
154
+ [...new Set(per.flatMap((one) => one.supportFiles ?? []))],
155
+ new Set(per.flatMap((one) => [...(one.ambient ?? [])])),
156
+ { unjudged, configurations: makers },
157
+ ),
158
+ heldIn: symbols.map((symbol) => holders.get(symbol.id) ?? []),
159
+ testUsed: symbols.map((symbol) => testUsed.has(symbol.position.path)),
160
+ dependents,
161
+ };
162
+ }