@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
@@ -5,6 +5,7 @@
5
5
  * of the module is the same position of the file. A default export and the imports a `src`
6
6
  * attribute names are appended past the file's end.
7
7
  */
8
+ import { isPathRelativeURL, startsRelativePath } from "./paths.js";
8
9
  const LANGUAGES = new Map([
9
10
  ["ts", "ts"],
10
11
  ["tsx", "tsx"],
@@ -346,10 +347,10 @@ function actionOf(text) {
346
347
  /** Whether a `src` value names a file: no scheme, no root-relative path, not empty. */
347
348
  function specifierOf(value) {
348
349
  const trimmed = value.trim();
349
- if (trimmed === "" || trimmed.startsWith("/") || /^[A-Za-z][A-Za-z0-9+.-]*:/u.test(trimmed)) {
350
+ if (!isPathRelativeURL(trimmed)) {
350
351
  return undefined;
351
352
  }
352
- return trimmed.startsWith("./") || trimmed.startsWith("../") ? trimmed : `./${trimmed}`;
353
+ return startsRelativePath(trimmed) ? trimmed : `./${trimmed}`;
353
354
  }
354
355
  /** The line-start `<script` tags one block's content holds. */
355
356
  function scriptsInside(text, from, to) {
@@ -5,9 +5,11 @@
5
5
  * member wins over one it extends. The mapper resolves as a package linked into the
6
6
  * `node_modules` beside each configuration, to a directory holding only its manifest.
7
7
  */
8
+ import { INSTALLED_PACKAGES } from "./fs/manifest.js";
8
9
  import { dirnamePath, joinPath } from "./paths.js";
10
+ import { PRODUCT } from "./product.js";
9
11
  /** The name the mapper's manifest declares and every configuration's entry names. */
10
- const MAPPER_PACKAGE = "deadset-ts-component-files";
12
+ const MAPPER_PACKAGE = `${PRODUCT}-component-files`;
11
13
  /** The manifest of the mapper's package, which runs `command`. */
12
14
  export function mapperManifest(command) {
13
15
  return `${JSON.stringify({
@@ -122,7 +124,7 @@ export function componentLayer(host, configFiles, mapper, written = new Map()) {
122
124
  for (const configFile of configFiles) {
123
125
  files[configFile] = withContentMappers(written.get(configFile) ?? host.readFile(configFile), mappers);
124
126
  if (mapper !== undefined) {
125
- symlinks[joinPath(dirnamePath(configFile), "node_modules", MAPPER_PACKAGE)] = {
127
+ symlinks[joinPath(dirnamePath(configFile), INSTALLED_PACKAGES, MAPPER_PACKAGE)] = {
126
128
  target: mapper.packageDirectory,
127
129
  host: true,
128
130
  };
@@ -1,74 +1,18 @@
1
- import { CONTRACT_VERSION } from "./version.js";
1
+ import { SEVERITIES } from "./contract/contract.generated.js";
2
+ import { LANGUAGE } from "./product.js";
2
3
  /**
3
4
  * The name of the repository configuration at the target root, which is also the
4
5
  * document a finding about the configuration names where no document of the
5
6
  * target supplied the setting it is about.
6
7
  */
7
8
  export const REPOSITORY_DOCUMENT = "deadset.json";
8
- /** The kind a target kind setting gives one language's declarations. */
9
- export function kindOf(setting, language) {
10
- return typeof setting === "string" ? setting : setting[language];
9
+ /** The kind a target kind setting gives this analyzer's declarations. */
10
+ export function kindOf(kind) {
11
+ return typeof kind === "string" ? kind : kind[LANGUAGE];
11
12
  }
12
- /** The severities ranked, the strongest highest. */
13
- const SEVERITY_RANK = { allow: 0, warn: 1, deny: 2 };
14
13
  /** Whether a finding at one severity fails a run under the failing severity. */
15
14
  export function fails(severity, failOn) {
16
- return SEVERITY_RANK[severity] >= SEVERITY_RANK[failOn];
17
- }
18
- /**
19
- * The configuration every documented default states. `targetKind` is empty: the
20
- * field has no default and is never inferred.
21
- */
22
- export function defaultConfig() {
23
- return {
24
- contractVersion: CONTRACT_VERSION,
25
- targetKind: "",
26
- analysis: {
27
- languages: [],
28
- minConfidence: "probable",
29
- generatedFiles: "exclude",
30
- consumerTests: "test",
31
- configurations: [],
32
- matrixComplete: false,
33
- templateDirs: [],
34
- templateDelimiters: { left: "{{", right: "}}" },
35
- },
36
- consumersComplete: false,
37
- rootPatterns: [],
38
- severity: new Map(),
39
- exemptionsDisabled: [],
40
- reporters: {
41
- formats: ["text"],
42
- sort: "position",
43
- cascade: "roots",
44
- maxFindings: 0,
45
- failOn: "deny",
46
- },
47
- providers: {
48
- analyzers: [
49
- { shape: "installed", name: "deadset-go", languages: ["go"], command: "deadset-go" },
50
- { shape: "installed", name: "deadset-ts", languages: ["ts"], command: "deadset-ts" },
51
- ],
52
- },
53
- ts: {
54
- testFiles: [
55
- "**/*.test.{ts,tsx,mts,cts}",
56
- "**/*.test-d.{ts,tsx,mts,cts}",
57
- "**/*.spec-d.{ts,tsx,mts,cts}",
58
- "**/*.spec.*",
59
- "**/__tests__/**",
60
- "**/__mocks__/**",
61
- "**/test-d/**",
62
- ],
63
- entryFiles: [],
64
- componentExtensions: [".vue", ".svelte", ".astro"],
65
- disabledConventions: [],
66
- injectionRegistrations: [],
67
- lifecycleContracts: [],
68
- serializers: [],
69
- rootsComplete: false,
70
- },
71
- };
15
+ return SEVERITIES.indexOf(severity) >= SEVERITIES.indexOf(failOn);
72
16
  }
73
17
  /**
74
18
  * Renders the origin as the provenance value the Contract declares: `default`,
@@ -77,23 +21,3 @@ export function defaultConfig() {
77
21
  export function renderOrigin(origin) {
78
22
  return origin.source === "default" ? "default" : `${origin.source}: ${origin.label}`;
79
23
  }
80
- /**
81
- * Every refusal configuration resolution makes. Each maps to the usage exit
82
- * code, and each is thrown rather than returned: a refusal ends the run, and the
83
- * one caller that turns it into an exit code is the command line.
84
- */
85
- export class ConfigError extends Error {
86
- /** Which refusal this is. */
87
- kind;
88
- /**
89
- * The key or field the message names, spelled as the document spells it. It is
90
- * empty when the refusal names none.
91
- */
92
- key;
93
- constructor(kind, key, message) {
94
- super(message);
95
- this.name = "ConfigError";
96
- this.kind = kind;
97
- this.key = key;
98
- }
99
- }
@@ -2,9 +2,9 @@
2
2
  // Regenerate it with `UPDATE_GOLDEN=1 npx vitest --run src/conformance.corpus.test.ts`.
3
3
  export const RECORD = {
4
4
  conformance: {
5
- corpusVersion: "6.0.0",
5
+ corpusVersion: "6.1.0",
6
6
  result: "pass",
7
- digest: "sha256:d65daae4b7c95050c07896b166d0250d233cca71f97de75a6086c1d80fe76232",
7
+ digest: "sha256:352b870acbc05213d4869bc18611137d0782cc0c9a8379e7a998a3d9cea2d966",
8
8
  },
9
9
  gaps: [],
10
10
  };
@@ -1,49 +1,21 @@
1
- /**
2
- * The consumers a scope declares, loaded beside the target: each a directory on the
3
- * local filesystem whose compiler configurations open as projects of the run's one
4
- * snapshot, and whose references to the target's declarations count against them.
5
- */
6
- import { consumerProjects } from "./discover.js";
7
- import { inventory, packageScope } from "./inventory.js";
1
+ import { runDirectories } from "./entries/run-directories.js";
2
+ import { inventory } from "./inventory/enumerate.js";
8
3
  import { relativePath } from "./paths.js";
9
4
  import { references } from "./references.js";
10
5
  import { narrowedTo } from "./session.js";
11
- /** The name one module publishes itself under: the scope's, else its manifest's. */
12
- export function moduleIdentity(host, module) {
13
- return module.id === "" ? packageScope(host, module.path)("index.ts").package : module.id;
14
- }
15
- /**
16
- * Every consumer the scope declares, in its order, with the projects it opens as. A
17
- * configuration that is also one of the target's projects, or an earlier consumer's, is
18
- * that project's alone. A consumer whose directory is absent, is no directory or holds
19
- * no configuration ends the run naming it, before any project opens.
20
- */
21
- export function consumerLoads(engine, host, scope, targetConfigFiles) {
22
- const opened = new Set(targetConfigFiles);
23
- return scope.consumers.map((module) => {
24
- const configFiles = consumerProjects(engine, host, module.path).filter((configFile) => {
25
- const fresh = !opened.has(configFile);
26
- opened.add(configFile);
27
- return fresh;
28
- });
29
- return { consumer: { id: moduleIdentity(host, module), path: module.path }, configFiles };
30
- });
31
- }
6
+ import { patternTestFile } from "./tests/file-class.js";
32
7
  /**
33
8
  * Every reference one consumer project's own files make to a declaration of the target.
34
9
  * The target's declarations are enumerated over the target's files the consumer's
35
10
  * program holds, against the target root, so each carries the identifier the target's
36
- * own projects give it. A reference from a consumer's test file is a test reference
37
- * unless the configuration counts it as a production one.
11
+ * own projects give it. A reference from a consumer's test file is a test reference;
12
+ * whether the run counts it as a production one is the sweep's mode.
38
13
  */
39
- export function consumerReferences(project, host, targetRoot, consumer, config) {
14
+ export function consumerReferences(project, host, targetRoot, consumer, config, parse) {
40
15
  const held = inventory(narrowedTo(project, (file) => relativePath(targetRoot, file.fileName) !== undefined), host, targetRoot);
41
- const found = references(project, held, targetRoot, {
42
- testFiles: config.ts.testFiles,
16
+ return references(project, held, targetRoot, {
17
+ testFile: patternTestFile(config.ts.test_files, consumer.root),
43
18
  consumer,
44
- }).references;
45
- if (config.analysis.consumerTests !== "production") {
46
- return found;
47
- }
48
- return found.map((reference) => (reference.test ? { ...reference, test: false } : reference));
19
+ directories: runDirectories(host, consumer.root, parse),
20
+ });
49
21
  }
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * The uses contextual types make of the target's members, which no name node resolves to.
3
3
  * An object-literal property writes the member of its name on each constituent of the
4
- * literal's contextual type that declares one. A value reaching a position typed by another
5
- * object type reads each of its members that type declares, through array elements and
6
- * the parameters and results of functions and constructors too; a class instance there is
7
- * the interface-satisfaction class's evidence instead.
4
+ * literal's contextual type that declares one, and so does a property of a literal whose
5
+ * type is inferred, where a value of that type reaches such a position. A value reaching a
6
+ * position typed by another object type reads each of its members that type declares,
7
+ * through array elements and the parameters and results of functions and constructors
8
+ * too; a class instance there is the interface-satisfaction class's evidence instead.
8
9
  */
9
10
  import { isClassDeclaration, isClassExpression, isComputedPropertyName, isGetAccessorDeclaration, isIdentifier, isMethodDeclaration, isMethodSignatureDeclaration, isNoSubstitutionTemplateLiteral, isNumericLiteral, isObjectLiteralExpression, isPropertyAssignment, isSetAccessorDeclaration, isShorthandPropertyAssignment, isSpreadAssignment, isStringLiteral, } from "@typescript/native/ast";
10
11
  import { SignatureKind } from "@typescript/native/sync";
@@ -62,9 +63,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
62
63
  const privateNames = new Set(held.symbols
63
64
  .filter((symbol) => symbol.visibility === "private-name")
64
65
  .map((symbol) => symbol.id));
65
- let batches = 0;
66
- let lookups = 0;
67
- const batchesOf = (count) => Math.ceil(count / cap);
68
66
  const parts = new Map();
69
67
  /** The object types one type is: itself, or its constituents at any depth. */
70
68
  const partsOf = (type) => {
@@ -74,7 +72,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
74
72
  }
75
73
  let found = [];
76
74
  if (type.isUnionType() || type.isIntersectionType()) {
77
- lookups += 1;
78
75
  const constituents = queries.constituents(type);
79
76
  found = isAnswered(constituents) ? constituents.flatMap(partsOf) : [];
80
77
  }
@@ -93,7 +90,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
93
90
  }
94
91
  const table = new Map();
95
92
  const read = properties.of(type);
96
- lookups += read.asked ? 1 : 0;
97
93
  for (const property of isAnswered(read.properties) ? read.properties : []) {
98
94
  table.set(property.name, {
99
95
  ids: chains
@@ -111,7 +107,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
111
107
  return table;
112
108
  };
113
109
  const writes = [];
114
- batches += batchesOf(literals.length);
115
110
  const contexts = queries.contextualTypes(literals.map((one) => one.literal), cap);
116
111
  // A computed name that is not literal text names the property the literal declares
117
112
  // under the checker's own key, which is how a type declares a member a unique symbol
@@ -122,7 +117,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
122
117
  const name = propertyName(property);
123
118
  return name !== undefined && name.text === undefined ? [name.node] : [];
124
119
  }));
125
- batches += batchesOf(computed.length);
126
120
  const keys = new Map();
127
121
  (computed.length === 0
128
122
  ? []
@@ -151,7 +145,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
151
145
  }
152
146
  });
153
147
  const carried = flows.filter((flow) => !isObjectLiteralExpression(flow.value));
154
- batches += batchesOf(carried.length);
155
148
  const types = queries.typesAt(carried.map((flow) => flow.value), cap);
156
149
  /** The members a position may read structurally: those of object types, not of classes. */
157
150
  const readable = (member) => [
@@ -164,17 +157,42 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
164
157
  const members = [...membersOf(part).values()];
165
158
  return members.length > 0 && members.every((member) => !member.own);
166
159
  };
160
+ const literalTypes = new Map();
161
+ /**
162
+ * Whether an object type is an object literal's own, inferred where no contextual type
163
+ * names it: every member a property an object literal of the target writes.
164
+ */
165
+ const literalTyped = (part) => {
166
+ let known = literalTypes.get(part.id);
167
+ if (known === undefined) {
168
+ const members = [...membersOf(part).values()];
169
+ known =
170
+ members.length > 0 &&
171
+ members.every((member) => member.ids.length === 0 &&
172
+ member.declarations.length > 0 &&
173
+ member.declarations.every((handle) => literalProperty(handle) !== undefined));
174
+ literalTypes.set(part.id, known);
175
+ }
176
+ return known;
177
+ };
178
+ /** The name node of the object literal property one declaration handle names, if it is one. */
179
+ const literalProperty = (handle) => {
180
+ const node = project.declarationAt(handle)?.node;
181
+ return node !== undefined &&
182
+ (isPropertyAssignment(node) || isShorthandPropertyAssignment(node)) &&
183
+ isObjectLiteralExpression(node.parent)
184
+ ? node.name
185
+ : undefined;
186
+ };
167
187
  const elements = new Map();
168
188
  /** The element type of an array type, read once per type. */
169
189
  const elementOf = (type) => {
170
190
  if (elements.has(type.id)) {
171
191
  return elements.get(type.id);
172
192
  }
173
- lookups += 1;
174
193
  const isArray = queries.isArray(type);
175
194
  let element;
176
195
  if (isAnswered(isArray) && isArray) {
177
- lookups += 1;
178
196
  const held = queries.typeArguments(type);
179
197
  element = isAnswered(held) ? held[0] : undefined;
180
198
  }
@@ -188,7 +206,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
188
206
  if (known !== undefined) {
189
207
  return known;
190
208
  }
191
- lookups += type.isTypeReference() ? 1 : 0;
192
209
  const held = queries.typeArguments(type);
193
210
  const found = isAnswered(held) ? held : [];
194
211
  argumentsOf.set(type.id, found);
@@ -204,18 +221,15 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
204
221
  if (known !== undefined) {
205
222
  return known;
206
223
  }
207
- lookups += 1;
208
224
  let kind = SignatureKind.Call;
209
225
  let signatures = queries.signaturesOf(type, kind);
210
226
  if (isAnswered(signatures) && signatures.length === 0) {
211
- lookups += 1;
212
227
  kind = SignatureKind.Construct;
213
228
  signatures = queries.signaturesOf(type, kind);
214
229
  }
215
230
  const called = (isAnswered(signatures) ? signatures : []).map((signature) => {
216
231
  const parameters = signature.parameters.map((_parameter, index) => queries.parameterType(signature, index));
217
232
  const result = queries.returnTypeOf(signature);
218
- lookups += parameters.length + 1;
219
233
  return {
220
234
  kind,
221
235
  parameters: parameters.map((one) => (isAnswered(one) ? one : undefined)),
@@ -246,10 +260,13 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
246
260
  const sources = partsOf(source).filter((one) => !targets.some((part) => part.id === one.id));
247
261
  for (const one of sources) {
248
262
  if (carries(one)) {
249
- into.push({ source: one, targets, outside: false });
263
+ into.push({ source: one, targets, sourceKind: "members" });
250
264
  }
251
265
  else if (outside(one)) {
252
- into.push({ source: one, targets, outside: true });
266
+ into.push({ source: one, targets, sourceKind: "outside" });
267
+ }
268
+ else if (literalTyped(one)) {
269
+ into.push({ source: one, targets, sourceKind: "literal" });
253
270
  }
254
271
  const element = elementOf(one);
255
272
  const called = element === undefined ? callsOf(one) : [];
@@ -290,7 +307,7 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
290
307
  }
291
308
  seen.add(type.id);
292
309
  return partsOf(type).some((part) => {
293
- if (carries(part) || outside(part)) {
310
+ if (carries(part) || outside(part) || literalTyped(part)) {
294
311
  return true;
295
312
  }
296
313
  const element = elementOf(part);
@@ -304,9 +321,10 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
304
321
  const type = types[index];
305
322
  return type === undefined || !isAnswered(type) || !mayCarry(type) ? [] : [{ flow, type }];
306
323
  });
307
- batches += batchesOf(sourced.length);
308
324
  const positions = queries.contextualTypes(sourced.map((one) => one.flow.value), cap);
309
325
  const reads = [];
326
+ // A literal property writes a position's members once, however many values carry it there.
327
+ const carriedWrites = new Set();
310
328
  sourced.forEach(({ flow, type }, index) => {
311
329
  const position = positions[index];
312
330
  if (position === undefined || !isAnswered(position)) {
@@ -315,10 +333,24 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
315
333
  const checked = [];
316
334
  compared(type, position, checked, new Set());
317
335
  const ids = new Set();
318
- for (const { source, targets, outside: held } of checked) {
336
+ for (const { source, targets, sourceKind } of checked) {
319
337
  const tables = targets.map(membersOf);
320
338
  const sourceMembers = membersOf(source);
321
- if (held) {
339
+ if (sourceKind === "literal") {
340
+ for (const [name, member] of sourceMembers) {
341
+ const written = [...new Set(tables.flatMap((table) => table.get(name)?.ids ?? []))];
342
+ for (const at of written.length === 0 ? [] : member.declarations) {
343
+ const node = literalProperty(at);
344
+ const key = `${at.path}#${String(at.index)}>${written.join(",")}`;
345
+ if (node !== undefined && !carriedWrites.has(key)) {
346
+ carriedWrites.add(key);
347
+ writes.push({ at: node, from: flow.from, ids: written });
348
+ }
349
+ }
350
+ }
351
+ continue;
352
+ }
353
+ if (sourceKind === "outside") {
322
354
  for (const table of tables) {
323
355
  for (const [name, member] of table) {
324
356
  if (sourceMembers.has(name)) {
@@ -361,7 +393,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
361
393
  return known;
362
394
  };
363
395
  const spreads = literals.flatMap(({ literal, from }) => literal.properties.flatMap((property) => isSpreadAssignment(property) ? [{ value: property.expression, from }] : []));
364
- batches += batchesOf(spreads.length);
365
396
  const spreadTypes = queries.typesAt(spreads.map((one) => one.value), cap);
366
397
  spreads.forEach(({ value, from }, index) => {
367
398
  const type = spreadTypes[index];
@@ -379,5 +410,5 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
379
410
  reads.push({ at: value, from, ids });
380
411
  }
381
412
  });
382
- return { writes, reads, batches, lookups };
413
+ return { writes, reads };
383
414
  }