@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,44 +5,17 @@
5
5
  */
6
6
  import { isExportDeclaration, isImportDeclaration, isStringLiteral, } from "@typescript/native/ast";
7
7
  import { resolveRelativeSpecifier } from "./configuration-files.js";
8
- import { dirnamePath, joinPath, relativePath, resolvePath } from "./paths.js";
9
- /** The directory no HTML file is read below. */
10
- const SKIPPED = "node_modules";
8
+ import { ancestors, dirnamePath, hasURLScheme, isAbsolutePath, isExplicitPath, joinPath, resolvePath, } from "../paths.js";
9
+ import { filesBelow } from "../fs/tree.js";
10
+ import { holdsManifest } from "../fs/manifest.js";
11
11
  /** A `<script` start tag, its attribute text captured. */
12
12
  const SCRIPT_TAG = /<script(?=[\s>/])([^>]*)>/giu;
13
13
  /** The end tag an inline module script's content runs to. */
14
14
  const SCRIPT_END = /<\/script\s*>/iu;
15
15
  /** One attribute: a name, then a double-quoted, single-quoted or unquoted value. */
16
16
  const ATTRIBUTE = /([^\s"'=<>/]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/gu;
17
- /** A value that names a resource on another origin, or by another scheme. */
18
- const ELSEWHERE = /^(?:\/\/|[A-Za-z][A-Za-z\d+.-]*:)/u;
19
17
  /** The `type` values a classic script carries, compared in lowercase. */
20
18
  const CLASSIC_TYPES = new Set(["text/javascript", "application/javascript"]);
21
- /** The prefixes an inline script's specifier names a file of the target with. */
22
- const FILE_PREFIXES = ["/", "./", "../"];
23
- /** Every HTML file below `dir`, outside every `node_modules` directory, by absolute path. */
24
- function htmlFiles(host, dir) {
25
- let entries;
26
- try {
27
- entries = host.readDirectory(dir);
28
- }
29
- catch {
30
- return [];
31
- }
32
- const found = [];
33
- for (const entry of entries) {
34
- const path = joinPath(dir, entry.name);
35
- if (entry.directory) {
36
- if (entry.name !== SKIPPED) {
37
- found.push(...htmlFiles(host, path));
38
- }
39
- }
40
- else if (entry.name.endsWith(".html")) {
41
- found.push(path);
42
- }
43
- }
44
- return found.sort();
45
- }
46
19
  /** Each attribute of one start tag's attribute text, by its lowercase name. */
47
20
  function attributes(text) {
48
21
  const found = new Map();
@@ -92,18 +65,13 @@ function scriptValues(parse, path, text) {
92
65
  const rest = text.slice(start);
93
66
  const end = rest.search(SCRIPT_END);
94
67
  const content = end === -1 ? rest : rest.slice(0, end);
95
- values.push(...specifiersOf(parse, `${path}.${String(start)}.ts`, content).filter((specifier) => FILE_PREFIXES.some((prefix) => specifier.startsWith(prefix))));
68
+ values.push(...specifiersOf(parse, `${path}.${String(start)}.ts`, content).filter(isExplicitPath));
96
69
  }
97
70
  return values;
98
71
  }
99
72
  /** The directory of the nearest `package.json` at or above `dir`, inside `root`, else `root`. */
100
73
  function manifestDirectory(host, root, dir) {
101
- for (let at = dir; relativePath(root, at) !== undefined; at = dirnamePath(at)) {
102
- if (host.kindOf(joinPath(at, "package.json")) === "file") {
103
- return at;
104
- }
105
- }
106
- return root;
74
+ return ancestors(dir, root).find((at) => holdsManifest(host, at)) ?? root;
107
75
  }
108
76
  /**
109
77
  * The own files the scripts of every HTML file below the target root load. A value
@@ -115,7 +83,8 @@ function manifestDirectory(host, root, dir) {
115
83
  export function htmlEntries(host, targetRoot, files, parse) {
116
84
  const root = resolvePath(host.workingDirectory(), targetRoot);
117
85
  const found = [];
118
- for (const path of htmlFiles(host, root)) {
86
+ for (const below of filesBelow(host, root, (name) => name.endsWith(".html"))) {
87
+ const path = joinPath(root, below);
119
88
  let text;
120
89
  try {
121
90
  text = host.readFile(path);
@@ -125,18 +94,19 @@ export function htmlEntries(host, targetRoot, files, parse) {
125
94
  }
126
95
  const dir = dirnamePath(path);
127
96
  for (const value of scriptValues(parse, path, text)) {
128
- if (ELSEWHERE.test(value)) {
97
+ // A value with a scheme, or one starting `//`, names a resource on another origin.
98
+ if (value.startsWith("//") || hasURLScheme(value)) {
129
99
  continue;
130
100
  }
131
- const base = value.startsWith("/") ? manifestDirectory(host, root, dir) : dir;
132
- const relative = value.startsWith("/") ? `.${value}` : value;
101
+ const base = isAbsolutePath(value) ? manifestDirectory(host, root, dir) : dir;
102
+ const relative = isAbsolutePath(value) ? `.${value}` : value;
133
103
  const reached = resolveRelativeSpecifier(host, base, relative);
134
104
  const file = reached === undefined ? undefined : files.byName.get(reached);
135
105
  if (file !== undefined) {
136
106
  found.push({ file, source: value });
137
107
  continue;
138
108
  }
139
- const served = value.startsWith("/")
109
+ const served = isAbsolutePath(value)
140
110
  ? files.outputDirs.filter((outDir) => outDir === dir)
141
111
  : [];
142
112
  const emitting = [base, ...served].flatMap((against) => files.named(resolvePath(against, relative)));
@@ -4,9 +4,8 @@
4
4
  * is an import declaration, which an MDX compiler hoists into the module it builds.
5
5
  */
6
6
  import { resolveRelativeSpecifier } from "./configuration-files.js";
7
- import { dirnamePath, joinPath, resolvePath } from "./paths.js";
8
- /** The directories no document is read below. */
9
- const SKIPPED = new Set(["node_modules", ".git"]);
7
+ import { dirnamePath, joinPath, resolvePath, startsRelativePath } from "../paths.js";
8
+ import { filesBelow } from "../fs/tree.js";
10
9
  /** The extensions of a document whose imports an MDX compiler reads. */
11
10
  const DOCUMENT = /\.mdx?$/u;
12
11
  /** A fence line, its marker run and what follows it captured. */
@@ -100,29 +99,6 @@ function clauseNames(clause) {
100
99
  }
101
100
  return names;
102
101
  }
103
- /** Every document below `dir`, outside every skipped directory, by absolute path. */
104
- function documents(host, dir) {
105
- let entries;
106
- try {
107
- entries = host.readDirectory(dir);
108
- }
109
- catch {
110
- return [];
111
- }
112
- const found = [];
113
- for (const entry of entries) {
114
- const path = joinPath(dir, entry.name);
115
- if (entry.directory) {
116
- if (!SKIPPED.has(entry.name)) {
117
- found.push(...documents(host, path));
118
- }
119
- }
120
- else if (DOCUMENT.test(entry.name)) {
121
- found.push(path);
122
- }
123
- }
124
- return found.sort();
125
- }
126
102
  /** The relative specifiers one document's import lines name, its fenced code blocks skipped. */
127
103
  function importedBy(text) {
128
104
  const found = [];
@@ -146,7 +122,7 @@ function importedBy(text) {
146
122
  }
147
123
  const matched = open === undefined ? IMPORT_LINE.exec(line) : null;
148
124
  const specifier = matched?.[2];
149
- if (specifier?.startsWith("./") === true || specifier?.startsWith("../") === true) {
125
+ if (specifier !== undefined && startsRelativePath(specifier)) {
150
126
  found.push({ specifier, names: clauseNames(matched?.[1] ?? "") });
151
127
  }
152
128
  }
@@ -165,7 +141,8 @@ function documentImports(host, root) {
165
141
  if (known !== undefined) {
166
142
  return known;
167
143
  }
168
- const found = documents(host, root).flatMap((path) => {
144
+ const found = filesBelow(host, root, (name) => DOCUMENT.test(name)).flatMap((below) => {
145
+ const path = joinPath(root, below);
169
146
  try {
170
147
  return [{ path, imports: importedBy(host.readFile(path)) }];
171
148
  }
@@ -0,0 +1,77 @@
1
+ import { membersNamed, staticModule, textsOf } from "./static-module.js";
2
+ import { holdsManifest } from "../fs/manifest.js";
3
+ import { ancestors, dirnamePath, joinPath, resolvePath } from "../paths.js";
4
+ /** The configuration file names the bundler and its test runner read their root from. */
5
+ const BUNDLER_CONFIGS = ["vite.config", "vitest.config"].flatMap((stem) => ["js", "mjs", "cjs", "ts", "mts", "cts"].map((extension) => `${stem}.${extension}`));
6
+ /**
7
+ * The root the configurations of one directory state: the directory where none writes a
8
+ * `root`, the one literal they all write, or undefined where one cannot be read, writes a
9
+ * value that is not a literal, or two disagree.
10
+ */
11
+ function statedRoot(host, parse, dir, configs) {
12
+ const roots = new Set();
13
+ for (const name of configs) {
14
+ const path = joinPath(dir, name);
15
+ let text;
16
+ try {
17
+ text = host.readFile(path);
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ const objects = staticModule(parse(path, text)).defaultExport;
23
+ if (objects.length === 0) {
24
+ return undefined;
25
+ }
26
+ for (const object of objects) {
27
+ const values = object.kind === "object" ? membersNamed(object, "root") : undefined;
28
+ if (values === undefined) {
29
+ return undefined;
30
+ }
31
+ for (const value of values) {
32
+ const [root] = textsOf(value, false) ?? [];
33
+ if (root === undefined) {
34
+ return undefined;
35
+ }
36
+ roots.add(resolvePath(dir, root));
37
+ }
38
+ }
39
+ }
40
+ if (roots.size > 1) {
41
+ return undefined;
42
+ }
43
+ return [...roots][0] ?? dir;
44
+ }
45
+ /** The directories of one run below `top`, each read once per directory. */
46
+ export function runDirectories(host, top, parse) {
47
+ const working = new Map();
48
+ const bundler = new Map();
49
+ const workingDirectoryOf = (fileName) => {
50
+ const dir = dirnamePath(fileName);
51
+ let found = working.get(dir);
52
+ if (found === undefined) {
53
+ found = ancestors(dir, top).find((at) => holdsManifest(host, at)) ?? top;
54
+ working.set(dir, found);
55
+ }
56
+ return found;
57
+ };
58
+ return {
59
+ workingDirectoryOf,
60
+ bundlerRootOf: (fileName) => {
61
+ const dir = dirnamePath(fileName);
62
+ if (bundler.has(dir)) {
63
+ return bundler.get(dir);
64
+ }
65
+ let found = workingDirectoryOf(fileName);
66
+ for (const at of ancestors(dir, top)) {
67
+ const configs = BUNDLER_CONFIGS.filter((name) => host.kindOf(joinPath(at, name)) === "file");
68
+ if (configs.length > 0) {
69
+ found = statedRoot(host, parse, at, configs);
70
+ break;
71
+ }
72
+ }
73
+ bundler.set(dir, found);
74
+ return found;
75
+ },
76
+ };
77
+ }
@@ -0,0 +1,144 @@
1
+ /**
2
+ * The sources that enter a project's files with no import naming them, read once per
3
+ * project into one record every stage reads: the roots stage reads the files they enter,
4
+ * the dependency stage the configuration files' strings, and the reference pass the test
5
+ * files. A value a source does not find written out names nothing.
6
+ */
7
+ import { buildScriptEntries } from "./build-scripts.js";
8
+ import { configurationFiles, filesNamedBy, moduleStrings, } from "./configuration-files.js";
9
+ import { conventionEntries, conventionTestFiles, generatedFiles, } from "./conventions.js";
10
+ import { htmlEntries } from "./html-entries.js";
11
+ import { documentEntries } from "./mdx-entries.js";
12
+ import { dirnamePath } from "../paths.js";
13
+ import { globExpression } from "../text/glob.js";
14
+ import { workflowEntries } from "./workflow-steps.js";
15
+ /**
16
+ * Each configuration module, with what it exports, and each own file a relative string of
17
+ * a configuration module or a JSON configuration file names, read against that file's
18
+ * directory. A string at a selection key of an applied convention row, or naming a test
19
+ * file, names no file here.
20
+ */
21
+ const configurationSource = ({ files, configuration, conventions }) => {
22
+ const selected = conventions?.selected ?? new Map();
23
+ const found = [];
24
+ const unselected = (file) => {
25
+ const starts = selected.get(file.fileName)?.starts;
26
+ return moduleStrings(file)
27
+ .filter((one) => starts?.has(one.node.getStart()) !== true)
28
+ .map((one) => one.text);
29
+ };
30
+ const unselectedIn = (path, texts) => {
31
+ const left = [...(selected.get(path)?.texts ?? [])];
32
+ return texts.filter((text) => {
33
+ const at = left.indexOf(text);
34
+ if (at < 0) {
35
+ return true;
36
+ }
37
+ left.splice(at, 1);
38
+ return false;
39
+ });
40
+ };
41
+ const strings = (dir, texts) => {
42
+ for (const text of texts) {
43
+ for (const file of filesNamedBy(files, dir, text)) {
44
+ found.push({ file, rule: "configuration-string", source: text, exports: true });
45
+ }
46
+ }
47
+ };
48
+ for (const { file, form } of configuration.modules) {
49
+ found.push({ file, rule: "configuration-file", source: form, exports: true });
50
+ strings(dirnamePath(file.fileName), unselected(file));
51
+ }
52
+ for (const document of configuration.documents) {
53
+ strings(dirnamePath(document.path), unselectedIn(document.path, document.strings));
54
+ }
55
+ for (const { file } of configuration.outside) {
56
+ strings(dirnamePath(file.fileName), unselected(file));
57
+ }
58
+ return found;
59
+ };
60
+ const testSource = ({ tests }) => tests.map(({ file, source }) => ({ file, rule: "test-runner", source, exports: false }));
61
+ const conventionSource = ({ files, conventions }) => conventions === undefined
62
+ ? []
63
+ : conventionEntries(conventions, files).map(({ file, row }) => ({
64
+ file,
65
+ rule: "convention",
66
+ source: row,
67
+ exports: true,
68
+ }));
69
+ const htmlSource = ({ host, targetRoot, files, parse }) => htmlEntries(host, targetRoot, files, parse).map(({ file, source }) => ({
70
+ file,
71
+ rule: "html-entry",
72
+ source,
73
+ exports: true,
74
+ }));
75
+ const documentSource = ({ host, targetRoot, files }) => documentEntries(host, targetRoot, files).map(({ file, source, names }) => ({
76
+ file,
77
+ rule: "document-import",
78
+ source,
79
+ exports: true,
80
+ ...(names === undefined ? {} : { names }),
81
+ }));
82
+ const buildScriptSource = ({ host, targetRoot, files, parse }) => buildScriptEntries(host, targetRoot, files, parse).map(({ file, source }) => ({
83
+ file,
84
+ rule: "bundler-entry",
85
+ source,
86
+ exports: true,
87
+ }));
88
+ const workflowSource = ({ workflows, files }) => workflowEntries(workflows, files).map(({ file, source }) => ({
89
+ file,
90
+ rule: "workflow-step",
91
+ source,
92
+ exports: true,
93
+ }));
94
+ /** Every source, each read once per project. */
95
+ const ENTRY_SOURCES = [
96
+ configurationSource,
97
+ conventionSource,
98
+ testSource,
99
+ htmlSource,
100
+ documentSource,
101
+ buildScriptSource,
102
+ workflowSource,
103
+ ];
104
+ /**
105
+ * The files a test runner loads in one project: each `ts.test_files` pattern's matches
106
+ * below the target root, then each file an applied row names, once per pattern or row
107
+ * string that names it.
108
+ */
109
+ function testFilesOf(context) {
110
+ const found = [];
111
+ for (const pattern of context.testFiles) {
112
+ const expression = globExpression(pattern);
113
+ for (const [path, file] of context.files.byPath) {
114
+ if (expression.test(path)) {
115
+ found.push({ file, source: pattern });
116
+ }
117
+ }
118
+ }
119
+ const named = context.conventions === undefined
120
+ ? []
121
+ : conventionTestFiles(context.conventions, context.files);
122
+ for (const [name, source] of named) {
123
+ const file = context.files.byName.get(name);
124
+ if (file !== undefined) {
125
+ found.push({ file, source });
126
+ }
127
+ }
128
+ return found;
129
+ }
130
+ /** Reads every source of one project once. */
131
+ export function readSources(context) {
132
+ const configuration = configurationFiles(context.host, context.targetRoot, context.files, context.parse);
133
+ const tests = testFilesOf(context);
134
+ const input = { ...context, configuration, tests };
135
+ return {
136
+ entered: ENTRY_SOURCES.flatMap((source) => source(input)),
137
+ testFiles: new Set(tests.map(({ file }) => file.fileName)),
138
+ generated: context.conventions === undefined
139
+ ? new Map()
140
+ : generatedFiles(context.conventions, context.files),
141
+ configuration,
142
+ workflows: context.workflows,
143
+ };
144
+ }