@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
@@ -18,7 +18,6 @@ import {
18
18
  isIdentifier,
19
19
  isMethodDeclaration,
20
20
  isNoSubstitutionTemplateLiteral,
21
- isParenthesizedExpression,
22
21
  isParenthesizedTypeNode,
23
22
  isPropertyAccessExpression,
24
23
  isReturnStatement,
@@ -28,18 +27,19 @@ import {
28
27
  type Node,
29
28
  type SourceFile,
30
29
  } from "@typescript/native/ast";
30
+ import { parenthesesRemoved } from "../unwrap.ts";
31
31
  import { TypeFlags, type Type } from "@typescript/native/sync";
32
- import { aliasChains } from "./alias-chain.ts";
33
- import type { DetectorInput, Evidence } from "./exempt.ts";
34
- import { nodeKey } from "./inventory.ts";
35
- import { renderPosition } from "./position.ts";
36
- import { isAnswered, UNANSWERED, type Answer } from "./query.ts";
37
- import type { ProjectView } from "./session.ts";
32
+ import { aliasChains } from "../alias-chain.ts";
33
+ import type { DetectorInput, Evidence } from "./lifecycle.ts";
34
+ import { nodeKey } from "../inventory.ts";
35
+ import { renderPosition } from "../position.ts";
36
+ import { isAnswered, UNANSWERED, type Answer } from "../query.ts";
37
+ import type { ProjectView } from "../session.ts";
38
+ import { ERASED } from "./value-reach.ts";
38
39
 
39
40
  /** The operand types a conversion produces an enum value from. */
40
41
  const NUMBER = TypeFlags.NumberLike;
41
42
  const STRING = TypeFlags.StringLike;
42
- const DECODED = TypeFlags.Any | TypeFlags.Unknown;
43
43
 
44
44
  /** How one site produces a value of the type it names. */
45
45
  type Form = "assertion" | "lookup" | "annotation";
@@ -55,15 +55,6 @@ interface Site {
55
55
  readonly at: Node;
56
56
  }
57
57
 
58
- /** The expression one node is, through however many parentheses are written around it. */
59
- function unparenthesized(node: Node): Node {
60
- let held = node;
61
- while (isParenthesizedExpression(held)) {
62
- held = held.expression;
63
- }
64
- return held;
65
- }
66
-
67
58
  /**
68
59
  * The name node a type node names its declaration by: the identifier of a type
69
60
  * reference, the right side of a qualified one, through parentheses. A type that is no
@@ -86,7 +77,7 @@ function typeName(type: Node | undefined): Node | undefined {
86
77
 
87
78
  /** The name node an expression names an object by: an identifier, or a property access's name. */
88
79
  function objectName(expression: Node): Node | undefined {
89
- const held = unparenthesized(expression);
80
+ const held = parenthesesRemoved(expression);
90
81
  if (isIdentifier(held)) {
91
82
  return held;
92
83
  }
@@ -185,7 +176,7 @@ function detailOf<Brand>(
185
176
  if (parts.some((part) => (part.flags & STRING) !== 0)) {
186
177
  return site.form === "assertion" ? "converted from string" : undefined;
187
178
  }
188
- if (parts.some((part) => (part.flags & DECODED) !== 0)) {
179
+ if (parts.some((part) => (part.flags & ERASED) !== 0)) {
189
180
  return `decoded as ${enumName}`;
190
181
  }
191
182
  return undefined;
@@ -16,7 +16,6 @@ import {
16
16
  isNoSubstitutionTemplateLiteral,
17
17
  isNumericLiteral,
18
18
  isObjectLiteralExpression,
19
- isParenthesizedExpression,
20
19
  isPropertyAccessExpression,
21
20
  isPropertyAssignment,
22
21
  isShorthandPropertyAssignment,
@@ -27,13 +26,11 @@ import {
27
26
  type Expression,
28
27
  type Node,
29
28
  } from "@typescript/native/ast";
30
- import { SymbolFlags, TypeFlags, type Type } from "@typescript/native/sync";
31
- import { must } from "./query.ts";
32
- import type { ProjectView } from "./session.ts";
33
- import { checkedTypes } from "./value-reach.ts";
34
-
35
- /** The types that keep nothing of the value they are given. */
36
- const ERASED = TypeFlags.Any | TypeFlags.Unknown;
29
+ import { SymbolFlags, type Type } from "@typescript/native/sync";
30
+ import { must } from "../query.ts";
31
+ import type { ProjectView } from "../session.ts";
32
+ import { checkedTypes, ERASED } from "./value-reach.ts";
33
+ import { parenthesesRemoved } from "../unwrap.ts";
37
34
 
38
35
  /** The array methods whose arguments become elements of the array they are called on. */
39
36
  const ELEMENT_STORES: ReadonlySet<string> = new Set(["push", "unshift"]);
@@ -81,10 +78,6 @@ function literalKey(node: Expression): string | undefined {
81
78
  : undefined;
82
79
  }
83
80
 
84
- function unwrapped(node: Expression): Expression {
85
- return isParenthesizedExpression(node) ? unwrapped(node.expression) : node;
86
- }
87
-
88
81
  /**
89
82
  * Whether a variable declaration's type can differ from what is stored in it: it carries an
90
83
  * annotation, or it has neither an annotation nor an initializer, so its type evolves.
@@ -150,8 +143,8 @@ function propertyAt(source: Expression, name: string): Expression | undefined {
150
143
  * here, and a default value is stored in its target too.
151
144
  */
152
145
  function patternTargets(pattern: Expression, from: Stored, out: Target[]): void {
153
- const target = unwrapped(pattern);
154
- const source = from.path.length === 0 ? unwrapped(from.value) : from.value;
146
+ const target = parenthesesRemoved(pattern);
147
+ const source = from.path.length === 0 ? parenthesesRemoved(from.value) : from.value;
155
148
  const into = (element: Expression, step: Step, literal: Expression | undefined): void => {
156
149
  patternTargets(
157
150
  element,
@@ -1,24 +1,24 @@
1
1
  /**
2
- * The framework-lifecycle class: a member a `ts.lifecycle_contracts` entry lists is held
3
- * back on each class that is the entry's component, being a class a decorator or a call
4
- * the entry's `components` name is attached to or passes, or one extending, directly or
5
- * through a chain, a class its `bases` name. A component's members are its type's, so a
6
- * member a base class declares answers for every subclass.
2
+ * The framework-lifecycle class: a member a lifecycle contract lists is held back on each
3
+ * class that is the contract's component, being a class a decorator or a call the
4
+ * contract's `components` name is attached to or passes, or one extending, directly or
5
+ * through a chain, a class its `bases` name. The contracts are the platform's custom
6
+ * elements and each `ts.lifecycle_contracts` entry. A component's members are its type's,
7
+ * so a member a base class declares answers for every subclass.
7
8
  */
8
9
 
9
10
  import {
10
- isClassDeclaration,
11
- isClassExpression,
12
11
  isHeritageClause,
13
12
  SyntaxKind,
14
13
  type CallExpression,
15
14
  type Node,
16
15
  } from "@typescript/native/ast";
17
16
  import type { Type } from "@typescript/native/sync";
18
- import { aliasChains, type AliasChains } from "./alias-chain.ts";
19
- import { calleeName, callsOf, classesPassed, decoratedClasses, decoratorCallee } from "./calls.ts";
20
- import { classMembers, memberComponent, typesAt, type ClassSide } from "./class-members.ts";
21
- import type { DeclarationEntry, LifecycleContract } from "./config.ts";
17
+ import { aliasChains, type AliasChains } from "../alias-chain.ts";
18
+ import { nameOf } from "../index/values.ts";
19
+ import { classesPassed, decoratorCallee, decoratorsOf } from "./calls.ts";
20
+ import { classMembers, memberComponent, typesAt, type ClassSide } from "../class-members.ts";
21
+ import type { DeclarationEntry, LifecycleContract } from "../config.ts";
22
22
  import {
23
23
  entriesAt,
24
24
  names,
@@ -26,12 +26,37 @@ import {
26
26
  resolveEntries,
27
27
  spelledEntry,
28
28
  type ResolvedEntry,
29
- } from "./configured-declarations.ts";
30
- import type { DetectorInput, Evidence } from "./exempt.ts";
31
- import { nodeKey, type Inventory } from "./inventory.ts";
32
- import { renderPosition } from "./position.ts";
33
- import { must } from "./query.ts";
34
- import type { ProjectView } from "./session.ts";
29
+ } from "../roots/configured-declarations.ts";
30
+ import type { DetectorInput, Evidence } from "./lifecycle.ts";
31
+ import type { Inventory } from "../inventory.ts";
32
+ import { renderPosition } from "../position.ts";
33
+ import { must } from "../query.ts";
34
+ import type { ProjectView } from "../session.ts";
35
+ import type { ProjectSites } from "./sites.ts";
36
+
37
+ /**
38
+ * The platform's own contract (references-ts.38): `CustomElementRegistry.define` reads
39
+ * these members off the class it registers, its constructor's and its prototype's
40
+ * (https://html.spec.whatwg.org/multipage/custom-elements.html#dom-customelementregistry-define),
41
+ * and calls each callback as a custom element reaction.
42
+ */
43
+ const CUSTOM_ELEMENTS: LifecycleContract = {
44
+ components: [{ global: "CustomElementRegistry.define" }],
45
+ members: [
46
+ "observedAttributes:static",
47
+ "disabledFeatures:static",
48
+ "formAssociated:static",
49
+ "connectedCallback",
50
+ "disconnectedCallback",
51
+ "connectedMoveCallback",
52
+ "adoptedCallback",
53
+ "attributeChangedCallback",
54
+ "formAssociatedCallback",
55
+ "formResetCallback",
56
+ "formDisabledCallback",
57
+ "formStateRestoreCallback",
58
+ ],
59
+ };
35
60
 
36
61
  /** One class that is a component of one contract, and what says it is. */
37
62
  interface Component {
@@ -55,8 +80,8 @@ function resolveContracts<Brand>(
55
80
  contracts: readonly LifecycleContract[],
56
81
  ): readonly ResolvedContract[] {
57
82
  const entries: DeclarationEntry[] = contracts.flatMap((contract) => [
58
- ...contract.components,
59
- ...contract.bases,
83
+ ...(contract.components ?? []),
84
+ ...(contract.bases ?? []),
60
85
  ]);
61
86
  const resolved = resolveEntries(project, held, entries);
62
87
  let next = 0;
@@ -67,8 +92,8 @@ function resolveContracts<Brand>(
67
92
  };
68
93
  return contracts.map((contract) => ({
69
94
  contract,
70
- components: take(contract.components.length),
71
- bases: take(contract.bases.length),
95
+ components: take(contract.components?.length ?? 0),
96
+ bases: take(contract.bases?.length ?? 0),
72
97
  }));
73
98
  }
74
99
 
@@ -76,6 +101,7 @@ function resolveContracts<Brand>(
76
101
  function byComponents<Brand>(
77
102
  project: ProjectView<Brand>,
78
103
  held: Inventory,
104
+ sites: ProjectSites,
79
105
  chains: AliasChains,
80
106
  contracts: readonly ResolvedContract[],
81
107
  ): readonly Component[] {
@@ -86,13 +112,18 @@ function byComponents<Brand>(
86
112
  const contractOf = new Map(
87
113
  routed.flatMap((one) => one.components.map((entry) => [entry, one.contract] as const)),
88
114
  );
89
- const calls = callsOf(project);
90
- const decorated = decoratedClasses(project, held);
115
+ const calls = sites.calls.map((one) => one.call);
116
+ const invoked = (call: CallExpression): Node | undefined =>
117
+ nameOf(sites.invocations.of(call).callee);
118
+ const decorated = sites.classes.flatMap(({ id, node }) => {
119
+ const decorators = decoratorsOf(node);
120
+ return decorators.length === 0 ? [] : [{ id, decorators }];
121
+ });
91
122
  const named = entriesAt(
92
123
  project,
93
124
  chains,
94
125
  [
95
- ...calls.flatMap((call) => calleeName(call.expression) ?? []),
126
+ ...calls.flatMap((call) => invoked(call) ?? []),
96
127
  ...decorated.flatMap((one) =>
97
128
  one.decorators.flatMap((decorator) => decoratorCallee(decorator) ?? []),
98
129
  ),
@@ -115,12 +146,12 @@ function byComponents<Brand>(
115
146
  }
116
147
  const matched = new Map<CallExpression, { contract: LifecycleContract; detail: string }[]>();
117
148
  for (const call of calls) {
118
- const routes = naming(calleeName(call.expression));
149
+ const routes = naming(invoked(call));
119
150
  if (routes.length > 0) {
120
151
  matched.set(call, routes);
121
152
  }
122
153
  }
123
- for (const [call, uses] of classesPassed(project, held, chains, [...matched.keys()])) {
154
+ for (const [call, uses] of classesPassed(project, held, chains, sites, [...matched.keys()])) {
124
155
  for (const route of matched.get(call) ?? []) {
125
156
  for (const use of uses) {
126
157
  found.push({
@@ -135,43 +166,28 @@ function byComponents<Brand>(
135
166
  return found;
136
167
  }
137
168
 
138
- /** Each class declaration of the target, with its name and the class its `extends` names. */
139
- interface Declared {
169
+ /** Each named class of the target that extends another, with its name and the class its `extends` names. */
170
+ function extendingClasses(sites: ProjectSites): readonly {
140
171
  readonly id: string;
141
172
  readonly name: Node;
142
173
  readonly extended: Node;
143
- }
144
-
145
- /** The class declarations of the target that extend another class. */
146
- function extendingClasses<Brand>(
147
- project: ProjectView<Brand>,
148
- held: Inventory,
149
- ): readonly Declared[] {
150
- const found: Declared[] = [];
151
- for (const file of project.ownSourceFiles()) {
152
- const visit = (node: Node): void => {
153
- if ((isClassDeclaration(node) || isClassExpression(node)) && node.name !== undefined) {
154
- const id = held.declarations.get(nodeKey(file, node));
155
- const clause = (node.heritageClauses ?? []).find(
156
- (one) => isHeritageClause(one) && one.token === SyntaxKind.ExtendsKeyword,
157
- );
158
- const extended =
159
- clause !== undefined && isHeritageClause(clause) ? clause.types[0] : undefined;
160
- if (id !== undefined && extended !== undefined) {
161
- found.push({ id, name: node.name, extended });
162
- }
163
- }
164
- node.forEachChild(visit);
165
- };
166
- file.forEachChild(visit);
167
- }
168
- return found;
174
+ }[] {
175
+ return sites.classes.flatMap(({ id, node }) => {
176
+ const clause = (node.heritageClauses ?? []).find(
177
+ (one) => isHeritageClause(one) && one.token === SyntaxKind.ExtendsKeyword,
178
+ );
179
+ const extended = clause !== undefined && isHeritageClause(clause) ? clause.types[0] : undefined;
180
+ return node.name === undefined || extended === undefined
181
+ ? []
182
+ : [{ id, name: node.name, extended }];
183
+ });
169
184
  }
170
185
 
171
186
  /** The classes that extend, directly or through a chain, a class the contracts' bases name. */
172
187
  function byBases<Brand>(
173
188
  project: ProjectView<Brand>,
174
189
  held: Inventory,
190
+ sites: ProjectSites,
175
191
  chains: AliasChains,
176
192
  contracts: readonly ResolvedContract[],
177
193
  ): readonly Component[] {
@@ -179,7 +195,7 @@ function byBases<Brand>(
179
195
  if (based.length === 0) {
180
196
  return [];
181
197
  }
182
- const classes = extendingClasses(project, held);
198
+ const classes = extendingClasses(sites);
183
199
  if (classes.length === 0) {
184
200
  return [];
185
201
  }
@@ -238,25 +254,26 @@ function byBases<Brand>(
238
254
 
239
255
  /**
240
256
  * The framework-lifecycle detector: each member a contract lists, on each class that
241
- * is a component of that contract's framework, recorded where the class was found to
242
- * be one.
257
+ * is a component of that contract's framework, recorded once per place where the class
258
+ * was found to be one.
243
259
  */
244
260
  export function frameworkLifecycle<Brand>(input: DetectorInput<Brand>): readonly Evidence[] {
245
261
  const { project, held, targetRoot } = input;
246
- if (input.ts.lifecycleContracts.length === 0) {
262
+ const declared = [CUSTOM_ELEMENTS, ...input.ts.lifecycle_contracts];
263
+ const contracts = resolveContracts(project, held, declared);
264
+ if (contracts.every((one) => one.components.length === 0 && one.bases.length === 0)) {
247
265
  return [];
248
266
  }
249
267
  const chains = aliasChains(project, held);
250
- const contracts = resolveContracts(project, held, input.ts.lifecycleContracts);
251
268
  const components = [
252
- ...byComponents(project, held, chains, contracts),
253
- ...byBases(project, held, chains, contracts),
269
+ ...byComponents(project, held, input.sites, chains, contracts),
270
+ ...byBases(project, held, input.sites, chains, contracts),
254
271
  ];
255
272
  if (components.length === 0) {
256
273
  return [];
257
274
  }
258
275
  const ids = new Set(components.map((one) => one.id));
259
- const sides: readonly ClassSide[] = input.ts.lifecycleContracts.some((contract) =>
276
+ const sides: readonly ClassSide[] = declared.some((contract) =>
260
277
  contract.members.some((name) => name.endsWith(":static")),
261
278
  )
262
279
  ? ["instance", "static"]
@@ -264,7 +281,7 @@ export function frameworkLifecycle<Brand>(input: DetectorInput<Brand>): readonly
264
281
  const members = sides.map((side) => classMembers(project, held, ids, side));
265
282
  const byId = new Map(held.symbols.map((symbol) => [symbol.id, symbol]));
266
283
 
267
- const found: Evidence[] = [];
284
+ const found = new Map<string, Evidence>();
268
285
  for (const component of components) {
269
286
  const listed = new Set(component.contract.members);
270
287
  const site = renderPosition(
@@ -275,10 +292,12 @@ export function frameworkLifecycle<Brand>(input: DetectorInput<Brand>): readonly
275
292
  for (const member of members.flatMap((side) => side.get(component.id) ?? [])) {
276
293
  const symbol = byId.get(member.id);
277
294
  const spelled = symbol === undefined ? undefined : memberComponent(symbol, byId);
278
- if (spelled !== undefined && listed.has(spelled)) {
279
- found.push({ id: member.id, detail: component.detail, site });
295
+ // A configured contract may name the platform's registry too; one record answers both.
296
+ const key = `${member.id}\0${component.detail}\0${site.path}:${String(site.line)}:${String(site.column)}`;
297
+ if (spelled !== undefined && listed.has(spelled) && !found.has(key)) {
298
+ found.set(key, { id: member.id, detail: component.detail, site });
280
299
  }
281
300
  }
282
301
  }
283
- return found;
302
+ return [...found.values()];
284
303
  }