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

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 (402) 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 +2 -7
  6. package/dist/src/amd.js +81 -0
  7. package/dist/src/analysis.js +269 -432
  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/calls.js +279 -43
  12. package/dist/src/commands/held.js +499 -0
  13. package/dist/src/commands/read.js +161 -0
  14. package/dist/src/commands/shell.js +169 -0
  15. package/dist/src/commands/tools.js +1847 -0
  16. package/dist/src/component-files.js +3 -2
  17. package/dist/src/component-layer.js +4 -2
  18. package/dist/src/config.js +6 -82
  19. package/dist/src/conformance-record.js +1 -1
  20. package/dist/src/consumers.js +10 -38
  21. package/dist/src/contextual-uses.js +57 -26
  22. package/dist/src/contract/config.generated.js +561 -0
  23. package/dist/src/contract/contract.generated.js +1369 -0
  24. package/dist/src/contract/report.generated.js +866 -0
  25. package/dist/src/dependencies.js +164 -121
  26. package/dist/src/destructuring.js +1 -19
  27. package/dist/src/edges.js +38 -122
  28. package/dist/src/element-access.js +181 -168
  29. package/dist/src/entries/build-scripts.js +222 -0
  30. package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
  31. package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
  32. package/dist/src/entries/conventions.js +740 -0
  33. package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
  34. package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
  35. package/dist/src/entries/run-directories.js +77 -0
  36. package/dist/src/entries/sources.js +144 -0
  37. package/dist/src/entries/static-module.js +670 -0
  38. package/dist/src/entries/test-runners.js +650 -0
  39. package/dist/src/entries/workflow-steps.js +345 -0
  40. package/dist/src/enum-group.js +3 -10
  41. package/dist/src/erased-stores.js +4 -6
  42. package/dist/src/exempt-classes.js +1 -63
  43. package/dist/src/exempt.js +21 -66
  44. package/dist/src/exposure.js +400 -0
  45. package/dist/src/extensions.js +37 -0
  46. package/dist/src/facts.js +38 -0
  47. package/dist/src/failure.js +36 -0
  48. package/dist/src/file-facts.js +3 -26
  49. package/dist/src/findings/completion.js +109 -56
  50. package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
  51. package/dist/src/findings/emitters.js +27 -41
  52. package/dist/src/{implementations.js → findings/implementations.js} +3 -3
  53. package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
  54. package/dist/src/findings/interfaces.js +4 -5
  55. package/dist/src/findings/intra-function.js +16 -13
  56. package/dist/src/findings/non-code-artifacts.js +17 -12
  57. package/dist/src/findings/reads-and-writes.js +86 -27
  58. package/dist/src/findings/self-check.js +44 -30
  59. package/dist/src/findings/unused-declarations.js +29 -45
  60. package/dist/src/findings/visibility-narrowing.js +23 -31
  61. package/dist/src/findings-pass.js +13 -21
  62. package/dist/src/framework-lifecycle.js +46 -19
  63. package/dist/src/fs/document.js +52 -0
  64. package/dist/src/fs/manifest.js +67 -0
  65. package/dist/src/fs/tree.js +88 -0
  66. package/dist/src/generated-file.js +174 -28
  67. package/dist/src/git-ignore.js +39 -26
  68. package/dist/src/import-bindings.js +73 -28
  69. package/dist/src/index/sites.js +557 -0
  70. package/dist/src/index.js +2 -2
  71. package/dist/src/indexed-access.js +523 -478
  72. package/dist/src/injection-container.js +2 -2
  73. package/dist/src/interface-satisfaction.js +1 -1
  74. package/dist/src/intra-function-parts.js +63 -43
  75. package/dist/src/inventory/commonjs.js +507 -0
  76. package/dist/src/inventory/enumerate.js +167 -0
  77. package/dist/src/inventory/syntax.js +236 -0
  78. package/dist/src/inventory.js +323 -724
  79. package/dist/src/javascript-file.js +48 -0
  80. package/dist/src/json-document.js +198 -67
  81. package/dist/src/keyof-comparisons.js +126 -107
  82. package/dist/src/kinds.js +3 -366
  83. package/dist/src/{components.js → liveness/components.js} +2 -3
  84. package/dist/src/{graph.js → liveness/graph.js} +52 -28
  85. package/dist/src/liveness/matrix.js +99 -0
  86. package/dist/src/liveness/sweep.js +558 -0
  87. package/dist/src/load/classify.js +289 -0
  88. package/dist/src/load/diagnostics.js +87 -0
  89. package/dist/src/load/discover.js +285 -0
  90. package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
  91. package/dist/src/load/expected-module.js +136 -0
  92. package/dist/src/load/load.js +27 -0
  93. package/dist/src/load/module-lookup.js +37 -0
  94. package/dist/src/load/package-scope.js +56 -0
  95. package/dist/src/load/plan.js +313 -0
  96. package/dist/src/load/specifiers.js +113 -0
  97. package/dist/src/load/synthesize.js +152 -0
  98. package/dist/src/load/test-globals.js +207 -0
  99. package/dist/src/load/test-joins.js +82 -0
  100. package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
  101. package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
  102. package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
  103. package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
  104. package/dist/src/{workspace.js → load/workspace.js} +62 -124
  105. package/dist/src/module-declarations.js +70 -85
  106. package/dist/src/overrides.js +134 -112
  107. package/dist/src/partial.js +2 -1
  108. package/dist/src/paths.js +82 -16
  109. package/dist/src/platform-calls.js +78 -0
  110. package/dist/src/platform-symbols.js +134 -0
  111. package/dist/src/position.js +43 -1
  112. package/dist/src/print.js +11 -79
  113. package/dist/src/product.js +13 -0
  114. package/dist/src/query.js +47 -0
  115. package/dist/src/ref.js +12 -20
  116. package/dist/src/references/read-rule.js +1 -0
  117. package/dist/src/references/read-rules.js +48 -0
  118. package/dist/src/references/sink.js +237 -0
  119. package/dist/src/references/sources.js +450 -0
  120. package/dist/src/references.js +117 -1074
  121. package/dist/src/report-schema.js +51 -0
  122. package/dist/src/report.js +57 -41
  123. package/dist/src/reporters/annotations.js +15 -8
  124. package/dist/src/reporters/sarif.js +16 -10
  125. package/dist/src/reporters/template.js +4 -19
  126. package/dist/src/resolve.js +246 -730
  127. package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
  128. package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
  129. package/dist/src/roots/manifest.js +216 -0
  130. package/dist/src/roots/published-reach.js +412 -0
  131. package/dist/src/roots/root-set.js +487 -0
  132. package/dist/src/roots/unseen-loads.js +236 -0
  133. package/dist/src/run.js +66 -77
  134. package/dist/src/schema.js +320 -343
  135. package/dist/src/scope.js +38 -115
  136. package/dist/src/serialization-contract.js +601 -22
  137. package/dist/src/session.js +37 -29
  138. package/dist/src/source-files.js +6 -10
  139. package/dist/src/stores.js +4 -2
  140. package/dist/src/suppress-file.js +25 -28
  141. package/dist/src/suppress-inline.js +36 -83
  142. package/dist/src/suppress.js +50 -71
  143. package/dist/src/symbol-keys.js +92 -88
  144. package/dist/src/template-field.js +9 -19
  145. package/dist/src/tests/file-class.js +76 -0
  146. package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
  147. package/dist/src/{test-support.js → tests/support.js} +5 -12
  148. package/dist/src/text/compare.js +26 -0
  149. package/dist/src/text/glob.js +194 -0
  150. package/dist/src/text/named-files.js +298 -0
  151. package/dist/src/text/yaml.js +684 -0
  152. package/dist/src/type-errors.js +11 -232
  153. package/dist/src/type-parameter-reads.js +178 -139
  154. package/dist/src/unimplemented-callees.js +262 -242
  155. package/dist/src/unwrap.js +23 -0
  156. package/dist/src/usage.js +10 -0
  157. package/dist/src/vendor/unbash/ansi-c.js +132 -0
  158. package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
  159. package/dist/src/vendor/unbash/arithmetic.js +591 -0
  160. package/dist/src/vendor/unbash/assignment.js +131 -0
  161. package/dist/src/vendor/unbash/chars.js +48 -0
  162. package/dist/src/vendor/unbash/command.js +41 -0
  163. package/dist/src/vendor/unbash/expansion.js +80 -0
  164. package/dist/src/vendor/unbash/glob.js +268 -0
  165. package/dist/src/vendor/unbash/heredoc.js +27 -0
  166. package/dist/src/vendor/unbash/internal-types.js +1 -0
  167. package/dist/src/vendor/unbash/lexer.js +4274 -0
  168. package/dist/src/vendor/unbash/limits.js +3 -0
  169. package/dist/src/vendor/unbash/parser.js +1366 -0
  170. package/dist/src/vendor/unbash/parts.js +57 -0
  171. package/dist/src/vendor/unbash/substitution-context.js +8 -0
  172. package/dist/src/vendor/unbash/traversal.js +212 -0
  173. package/dist/src/vendor/unbash/types.js +1 -0
  174. package/dist/src/vendor/unbash/word-value.js +61 -0
  175. package/dist/src/vendor/unbash/word.js +40 -0
  176. package/dist/src/verbs/analyze.js +194 -127
  177. package/dist/src/verbs/describe.js +13 -18
  178. package/dist/src/verbs/explain.js +85 -139
  179. package/dist/src/verbs/print-config.js +2 -1
  180. package/dist/src/verbs/print-projects.js +6 -4
  181. package/dist/src/verbs/print-retained.js +7 -5
  182. package/dist/src/verbs/print-roots.js +4 -2
  183. package/dist/src/verbs/verb.js +1 -5
  184. package/dist/src/verbs/version.js +14 -3
  185. package/jsr.json +2 -1
  186. package/package.json +14 -8
  187. package/src/alias-chain.ts +2 -9
  188. package/src/amd.ts +130 -0
  189. package/src/analysis.ts +424 -650
  190. package/src/augmentations.ts +93 -4
  191. package/src/automatic-types.ts +12 -30
  192. package/src/bindings.ts +460 -0
  193. package/src/calls.ts +338 -46
  194. package/src/commands/held.ts +632 -0
  195. package/src/commands/read.ts +242 -0
  196. package/src/commands/shell.ts +228 -0
  197. package/src/commands/tools.ts +2382 -0
  198. package/src/component-files.ts +4 -2
  199. package/src/component-layer.ts +4 -2
  200. package/src/config.ts +31 -302
  201. package/src/conformance-record.ts +1 -1
  202. package/src/consumers.ts +16 -66
  203. package/src/contextual-uses.ts +66 -34
  204. package/src/contract/config.generated.ts +821 -0
  205. package/src/contract/contract.generated.ts +1452 -0
  206. package/src/contract/report.generated.ts +1241 -0
  207. package/src/dependencies.ts +222 -127
  208. package/src/destructuring.ts +1 -31
  209. package/src/edges.ts +41 -140
  210. package/src/element-access.ts +190 -187
  211. package/src/entries/build-scripts.ts +292 -0
  212. package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
  213. package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
  214. package/src/{conventions.ts → entries/conventions.ts} +367 -583
  215. package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
  216. package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
  217. package/src/entries/run-directories.ts +108 -0
  218. package/src/entries/sources.ts +266 -0
  219. package/src/entries/static-module.ts +858 -0
  220. package/src/entries/test-runners.ts +835 -0
  221. package/src/entries/workflow-steps.ts +432 -0
  222. package/src/enum-group.ts +2 -11
  223. package/src/erased-stores.ts +3 -7
  224. package/src/exempt-classes.ts +1 -75
  225. package/src/exempt.ts +70 -98
  226. package/src/exposure.ts +492 -0
  227. package/src/extensions.ts +45 -0
  228. package/src/facts.ts +46 -0
  229. package/src/failure.ts +63 -0
  230. package/src/file-facts.ts +15 -25
  231. package/src/finding.ts +10 -10
  232. package/src/findings/boundary.ts +11 -0
  233. package/src/findings/completion.ts +133 -64
  234. package/src/findings/dependencies-and-module-machinery.ts +4 -7
  235. package/src/findings/emitter.ts +9 -10
  236. package/src/findings/emitters.ts +38 -52
  237. package/src/{implementations.ts → findings/implementations.ts} +4 -4
  238. package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
  239. package/src/findings/interfaces.ts +7 -9
  240. package/src/findings/intra-function.ts +16 -14
  241. package/src/findings/non-code-artifacts.ts +24 -15
  242. package/src/findings/reads-and-writes.ts +118 -41
  243. package/src/findings/self-check.ts +51 -38
  244. package/src/findings/unused-declarations.ts +31 -49
  245. package/src/findings/visibility-narrowing.ts +36 -40
  246. package/src/findings-pass.ts +15 -31
  247. package/src/framework-lifecycle.ts +47 -19
  248. package/src/fs/document.ts +70 -0
  249. package/src/fs/manifest.ts +96 -0
  250. package/src/fs/tree.ts +110 -0
  251. package/src/generated-file.ts +242 -35
  252. package/src/git-ignore.ts +50 -26
  253. package/src/host.ts +12 -5
  254. package/src/import-bindings.ts +98 -29
  255. package/src/index/sites.ts +781 -0
  256. package/src/index.ts +2 -2
  257. package/src/indexed-access.ts +570 -527
  258. package/src/injection-container.ts +2 -2
  259. package/src/interface-satisfaction.ts +2 -2
  260. package/src/intra-function-parts.ts +73 -44
  261. package/src/inventory/commonjs.ts +696 -0
  262. package/src/inventory/enumerate.ts +203 -0
  263. package/src/inventory/syntax.ts +311 -0
  264. package/src/inventory.ts +442 -895
  265. package/src/javascript-file.ts +54 -0
  266. package/src/json-document.ts +241 -76
  267. package/src/keyof-comparisons.ts +133 -122
  268. package/src/kinds.ts +5 -413
  269. package/src/{components.ts → liveness/components.ts} +4 -6
  270. package/src/{graph.ts → liveness/graph.ts} +100 -35
  271. package/src/liveness/matrix.ts +162 -0
  272. package/src/liveness/sweep.ts +855 -0
  273. package/src/load/classify.ts +433 -0
  274. package/src/load/diagnostics.ts +154 -0
  275. package/src/load/discover.ts +471 -0
  276. package/src/{emit-map.ts → load/emit-map.ts} +1 -1
  277. package/src/load/expected-module.ts +194 -0
  278. package/src/load/load.ts +73 -0
  279. package/src/load/module-lookup.ts +50 -0
  280. package/src/load/package-scope.ts +74 -0
  281. package/src/load/plan.ts +513 -0
  282. package/src/load/specifiers.ts +171 -0
  283. package/src/load/synthesize.ts +230 -0
  284. package/src/load/test-globals.ts +251 -0
  285. package/src/load/test-joins.ts +98 -0
  286. package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
  287. package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
  288. package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
  289. package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
  290. package/src/{workspace.ts → load/workspace.ts} +90 -134
  291. package/src/module-declarations.ts +74 -98
  292. package/src/overrides.ts +162 -134
  293. package/src/partial.ts +3 -2
  294. package/src/paths.ts +92 -16
  295. package/src/platform-calls.ts +119 -0
  296. package/src/platform-symbols.ts +189 -0
  297. package/src/position.ts +44 -1
  298. package/src/print.ts +12 -92
  299. package/src/product.ts +18 -0
  300. package/src/query.ts +92 -0
  301. package/src/ref.ts +12 -20
  302. package/src/references/read-rule.ts +60 -0
  303. package/src/references/read-rules.ts +55 -0
  304. package/src/references/sink.ts +314 -0
  305. package/src/references/sources.ts +632 -0
  306. package/src/references.ts +187 -1450
  307. package/src/report-schema.ts +68 -0
  308. package/src/report.ts +103 -226
  309. package/src/reporters/annotations.ts +22 -11
  310. package/src/reporters/json.ts +1 -1
  311. package/src/reporters/reporter.ts +2 -4
  312. package/src/reporters/reporters.ts +1 -1
  313. package/src/reporters/sarif.ts +29 -16
  314. package/src/reporters/template.ts +4 -20
  315. package/src/reporters/text.ts +3 -3
  316. package/src/resolve.ts +284 -1115
  317. package/src/{configured-declarations.ts → roots/configured-declarations.ts} +27 -29
  318. package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
  319. package/src/roots/manifest.ts +303 -0
  320. package/src/roots/published-reach.ts +486 -0
  321. package/src/{roots.ts → roots/root-set.ts} +286 -469
  322. package/src/roots/unseen-loads.ts +345 -0
  323. package/src/run.ts +75 -91
  324. package/src/schema.ts +391 -388
  325. package/src/scope.ts +46 -138
  326. package/src/serialization-contract.ts +769 -23
  327. package/src/session.ts +87 -55
  328. package/src/source-files.ts +6 -11
  329. package/src/stores.ts +15 -3
  330. package/src/suppress-file.ts +24 -33
  331. package/src/suppress-inline.ts +55 -91
  332. package/src/suppress.ts +78 -79
  333. package/src/symbol-keys.ts +104 -107
  334. package/src/template-field.ts +15 -25
  335. package/src/tests/file-class.ts +135 -0
  336. package/src/{outside-tests.ts → tests/outside.ts} +16 -10
  337. package/src/{test-support.ts → tests/support.ts} +15 -21
  338. package/src/text/compare.ts +27 -0
  339. package/src/text/glob.ts +210 -0
  340. package/src/text/named-files.ts +388 -0
  341. package/src/text/yaml.ts +747 -0
  342. package/src/type-errors.ts +18 -288
  343. package/src/type-parameter-reads.ts +187 -158
  344. package/src/unimplemented-callees.ts +297 -280
  345. package/src/unwrap.ts +34 -0
  346. package/src/usage.ts +10 -0
  347. package/src/vendor/unbash/LICENSE +15 -0
  348. package/src/vendor/unbash/VENDORED.md +16 -0
  349. package/src/vendor/unbash/ansi-c.ts +132 -0
  350. package/src/vendor/unbash/arithmetic-parts.ts +53 -0
  351. package/src/vendor/unbash/arithmetic.ts +641 -0
  352. package/src/vendor/unbash/assignment.ts +163 -0
  353. package/src/vendor/unbash/chars.ts +48 -0
  354. package/src/vendor/unbash/command.ts +47 -0
  355. package/src/vendor/unbash/expansion.ts +144 -0
  356. package/src/vendor/unbash/glob.ts +284 -0
  357. package/src/vendor/unbash/heredoc.ts +34 -0
  358. package/src/vendor/unbash/internal-types.ts +94 -0
  359. package/src/vendor/unbash/lexer.ts +4352 -0
  360. package/src/vendor/unbash/limits.ts +3 -0
  361. package/src/vendor/unbash/parser.ts +1612 -0
  362. package/src/vendor/unbash/parts.ts +96 -0
  363. package/src/vendor/unbash/substitution-context.ts +20 -0
  364. package/src/vendor/unbash/traversal.ts +182 -0
  365. package/src/vendor/unbash/types.ts +660 -0
  366. package/src/vendor/unbash/word-value.ts +64 -0
  367. package/src/vendor/unbash/word.ts +50 -0
  368. package/src/verbs/analyze.ts +255 -164
  369. package/src/verbs/describe.ts +19 -17
  370. package/src/verbs/explain.ts +93 -169
  371. package/src/verbs/print-config.ts +2 -1
  372. package/src/verbs/print-projects.ts +6 -4
  373. package/src/verbs/print-retained.ts +7 -5
  374. package/src/verbs/print-roots.ts +4 -2
  375. package/src/verbs/verb.ts +2 -8
  376. package/src/verbs/version.ts +15 -3
  377. package/dist/src/base-url.js +0 -18
  378. package/dist/src/conventions.js +0 -937
  379. package/dist/src/discover.js +0 -468
  380. package/dist/src/entry-points.js +0 -529
  381. package/dist/src/glob.js +0 -65
  382. package/dist/src/manifest.js +0 -165
  383. package/dist/src/matrix.js +0 -246
  384. package/dist/src/pnpm-workspace.js +0 -120
  385. package/dist/src/roots.js +0 -672
  386. package/dist/src/setup-failure.js +0 -23
  387. package/dist/src/sweep.js +0 -224
  388. package/dist/src/test-joins.js +0 -101
  389. package/dist/src/version.js +0 -7
  390. package/dist/src/workflow-steps.js +0 -185
  391. package/src/base-url.ts +0 -24
  392. package/src/discover.ts +0 -653
  393. package/src/entry-points.ts +0 -687
  394. package/src/glob.ts +0 -67
  395. package/src/manifest.ts +0 -234
  396. package/src/matrix.ts +0 -423
  397. package/src/pnpm-workspace.ts +0 -135
  398. package/src/setup-failure.ts +0 -39
  399. package/src/sweep.ts +0 -347
  400. package/src/test-joins.ts +0 -120
  401. package/src/version.ts +0 -7
  402. package/src/workflow-steps.ts +0 -216
@@ -7,6 +7,17 @@
7
7
  * directory one of the row's moves resolves to.
8
8
  */
9
9
 
10
+ import { braced, MODULE_EXTENSIONS } from "../extensions.ts";
11
+ import {
12
+ AVA_6,
13
+ AVA_8,
14
+ JEST_29,
15
+ JEST_30,
16
+ MOCHA_10,
17
+ MOCHA_12,
18
+ type TestRunner,
19
+ } from "./test-runners.ts";
20
+
10
21
  /** A call whose first argument is the object a property is read from. */
11
22
  export interface OptionsCall {
12
23
  /** The module specifier the configuration file imports the callee from. */
@@ -17,7 +28,11 @@ export interface OptionsCall {
17
28
 
18
29
  /** One configuration property, and the configuration files it is read from. */
19
30
  export interface MoveReading {
20
- /** The property's path through nested object literals, its keys joined by `.`. */
31
+ /**
32
+ * The property's path through nested object literals, its keys joined by `.`; in a
33
+ * test-file property a `*` key stands for every element of an array and every member of
34
+ * an object, each read as an object of its own.
35
+ */
21
36
  readonly property: string;
22
37
  /** Globs naming the configuration files, matched in the manifest's directory alone. */
23
38
  readonly files: readonly string[];
@@ -79,6 +94,28 @@ export interface TestFileReading extends MoveReading {
79
94
  readonly roots: readonly string[];
80
95
  }
81
96
 
97
+ /**
98
+ * One configuration's test directory and test-file patterns, whose matching files the
99
+ * runner runs as tests. Each element of the projects property is read the same way, a
100
+ * member it does not write taken from the configuration's own.
101
+ */
102
+ export interface TestDirectoryReading {
103
+ /** Globs naming the configuration files, matched in the manifest's directory alone. */
104
+ readonly files: readonly string[];
105
+ /** The property naming the directory, read against the configuration file's directory. */
106
+ readonly directory: string;
107
+ /**
108
+ * The property naming the patterns, each matched as Playwright matches one: anywhere
109
+ * below the directory, so a pattern gains a leading `**` segment unless it starts with
110
+ * one, and without regard to case.
111
+ */
112
+ readonly match: string;
113
+ /** The pattern that holds where no object names one. */
114
+ readonly defaultMatch: string;
115
+ /** The property listing the projects. */
116
+ readonly projects: string;
117
+ }
118
+
82
119
  /** One member of the declaring `package.json` whose strings name the tool's entries. */
83
120
  export interface ManifestEntryKey {
84
121
  /** The member's path through nested objects, its keys joined by `.`, a `*` key standing for every member. */
@@ -129,6 +166,10 @@ export interface ConventionRow {
129
166
  readonly selections?: readonly MoveReading[];
130
167
  /** The properties whose strings name a file the test runner loads beside the tests, a test file. */
131
168
  readonly testFiles?: readonly TestFileReading[];
169
+ /** The configurations whose test directory and patterns name the test files the runner runs. */
170
+ readonly testDirectories?: readonly TestDirectoryReading[];
171
+ /** The reader of the files the row's test runner runs, from its configuration and the manifest's scripts. */
172
+ readonly testRunner?: TestRunner;
132
173
  /**
133
174
  * The members whose strings name a package the tool loads: the package itself, a
134
175
  * subpath of it, or the package followed by `:` and a name.
@@ -140,14 +181,16 @@ export interface ConventionRow {
140
181
  readonly manifestEntries?: readonly ManifestEntryKey[];
141
182
  /** The settings that make the tool's output import a runtime helper package. */
142
183
  readonly helpers?: readonly HelperReading[];
184
+ /** Whether the tool bundles the package's modules, so it resolves them as a bundler does. */
185
+ readonly bundles?: true;
143
186
  }
144
187
 
145
188
  const SCRIPT = "{js,jsx,ts,tsx}";
146
189
  const MODULE = "{js,mjs,ts,mts}";
147
- const ANY_MODULE = "{js,mjs,cjs,ts,mts,cts}";
190
+ const ANY_MODULE = braced(MODULE_EXTENSIONS);
148
191
  const VITE_CONFIG = `vite.config.${ANY_MODULE}`;
149
- /** The legacy configuration files of ESLint that hold JSON or a CommonJS module. */
150
- const ESLINTRC = [".eslintrc", ".eslintrc.json", ".eslintrc.{js,cjs}"];
192
+ /** The legacy configuration files of ESLint: JSON, YAML or a CommonJS module. */
193
+ const ESLINTRC = [".eslintrc", ".eslintrc.json", ".eslintrc.{yml,yaml}", ".eslintrc.{js,cjs}"];
151
194
 
152
195
  const SVELTEKIT_ROUTE_FILES = "+{page,layout,server,page.server,layout.server,error}";
153
196
 
@@ -193,6 +236,64 @@ const VITEST_CONFIG = `{vitest,vite}.config.${ANY_MODULE}`;
193
236
  */
194
237
  const VITEST_ROOTS = ["test.root", "root"] as const;
195
238
 
239
+ /** The members of a Vitest configuration's `test` object that name setup files. */
240
+ const VITEST_SETUP = ["setupFiles", "globalSetup"] as const;
241
+
242
+ /** Vitest's workspace files, which Vitest 4 no longer reads (https://vitest.dev/guide/workspace). */
243
+ const VITEST_WORKSPACE = `{vitest.workspace,vitest.projects}.${ANY_MODULE}`;
244
+
245
+ /**
246
+ * The Vitest row over one range: its configuration's setup files, those of each inline
247
+ * project of `test.projects`, and, where `workspace`, the workspace file with the setup
248
+ * files of each inline project it lists.
249
+ */
250
+ function vitestRow(range: string, workspace: boolean): ConventionRow {
251
+ const inline = (each: string, files: string): readonly TestFileReading[] =>
252
+ VITEST_SETUP.map((member) => ({
253
+ property: `${each}.test.${member}`,
254
+ files: [files],
255
+ roots: VITEST_ROOTS,
256
+ }));
257
+ return {
258
+ name: "vitest",
259
+ package: "vitest",
260
+ range,
261
+ entries: [
262
+ `**/{vitest,vite}.config.${ANY_MODULE}`,
263
+ `**/{vitest,vite}.config.*.${ANY_MODULE}`,
264
+ `**/{vitest,vite}.*.config.${ANY_MODULE}`,
265
+ ...(workspace ? [VITEST_WORKSPACE] : []),
266
+ ],
267
+ moves: [],
268
+ shortNames: [
269
+ {
270
+ property: "test.coverage.provider",
271
+ files: [VITEST_CONFIG],
272
+ package: "@vitest/coverage-{}",
273
+ },
274
+ ],
275
+ selections: [
276
+ { property: "test.coverage.include", files: [VITEST_CONFIG] },
277
+ { property: "test.coverage.exclude", files: [VITEST_CONFIG] },
278
+ ],
279
+ testFiles: [
280
+ ...VITEST_SETUP.map((member) => ({
281
+ property: `test.${member}`,
282
+ files: [VITEST_CONFIG],
283
+ roots: VITEST_ROOTS,
284
+ })),
285
+ ...inline("test.projects.*", VITEST_CONFIG),
286
+ ...(workspace ? inline("*", VITEST_WORKSPACE) : []),
287
+ ],
288
+ };
289
+ }
290
+
291
+ const PLAYWRIGHT_CONFIG = `playwright.config.${ANY_MODULE}`;
292
+
293
+ /** Playwright's own test-file pattern (https://playwright.dev/docs/api/class-testconfig#test-config-test-match). */
294
+ const PLAYWRIGHT_TEST_MATCH =
295
+ "**/*.{spec,test}.{js,ts,jsx,tsx,cjs,cts,cjsx,ctsx,mjs,mts,mjsx,mtsx}";
296
+
196
297
  /** The entry files of an Angular CLI project, at the workspace root or below `projects`. */
197
298
  const ANGULAR_ENTRIES = [
198
299
  "src/{main,main.server,server,polyfills,test}.ts",
@@ -209,6 +310,35 @@ const ANGULAR_PACKAGE_KEYS: readonly PackageKey[] = [
209
310
  "scripts",
210
311
  ].map((key) => ({ key, files: ["angular.json"] }));
211
312
 
313
+ /**
314
+ * The row of a code generator that writes its output below one directory its
315
+ * configuration's `property` sets, `fallback` where no configuration file sets it, so
316
+ * every file there is a generated file.
317
+ */
318
+ function outputDirectoryRow(row: {
319
+ readonly name: string;
320
+ readonly package: string;
321
+ readonly range: string;
322
+ readonly files: readonly string[];
323
+ readonly property: string;
324
+ readonly fallback: string;
325
+ }): ConventionRow {
326
+ return {
327
+ name: row.name,
328
+ package: row.package,
329
+ range: row.range,
330
+ entries: [],
331
+ generated: ["<output>"],
332
+ moves: [
333
+ {
334
+ id: "output",
335
+ defaults: [row.fallback],
336
+ readings: [{ property: row.property, files: row.files }],
337
+ },
338
+ ],
339
+ };
340
+ }
341
+
212
342
  /**
213
343
  * The test runners and the assertion, mock and runner libraries whose import is test
214
344
  * evidence beside each runner a row reads test files for. Each applies whether or not a
@@ -254,6 +384,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
254
384
  },
255
385
  {
256
386
  name: "astro",
387
+ bundles: true,
257
388
  package: "astro",
258
389
  range: ">=5.0.0 <8.0.0",
259
390
  entries: [
@@ -273,6 +404,22 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
273
404
  },
274
405
  ],
275
406
  },
407
+ {
408
+ name: "ava",
409
+ package: "ava",
410
+ range: ">=6.0.0 <8.0.0",
411
+ entries: [],
412
+ moves: [],
413
+ testRunner: AVA_6,
414
+ },
415
+ {
416
+ name: "ava",
417
+ package: "ava",
418
+ range: ">=8.0.0 <9.0.0",
419
+ entries: [],
420
+ moves: [],
421
+ testRunner: AVA_8,
422
+ },
276
423
  {
277
424
  name: "babel",
278
425
  package: "@babel/core",
@@ -299,6 +446,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
299
446
  range: ">=4.0.0 <10.0.0",
300
447
  entries: [],
301
448
  moves: [],
449
+ packageKeys: [{ key: "parser", files: ESLINTRC }],
302
450
  prefixedNames: [
303
451
  { property: "plugins", files: ESLINTRC, prefix: "eslint-plugin" },
304
452
  { property: "extends", files: ESLINTRC, prefix: "eslint-plugin", marker: "plugin:" },
@@ -322,12 +470,45 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
322
470
  {
323
471
  name: "expo-router",
324
472
  package: "expo-router",
325
- range: ">=3.0.0 <58.0.0",
473
+ range: ">=3.0.0 <59.0.0",
326
474
  entries: [`{,src/}app/**/*.${SCRIPT}`],
327
475
  moves: [],
328
476
  },
477
+ {
478
+ name: "jest",
479
+ package: "jest",
480
+ range: ">=29.0.0 <30.0.0",
481
+ entries: [],
482
+ moves: [],
483
+ testRunner: JEST_29,
484
+ },
485
+ {
486
+ name: "jest",
487
+ package: "jest",
488
+ range: ">=30.0.0 <31.0.0",
489
+ entries: [],
490
+ moves: [],
491
+ testRunner: JEST_30,
492
+ },
493
+ {
494
+ name: "mocha",
495
+ package: "mocha",
496
+ range: ">=10.0.0 <12.0.0",
497
+ entries: [],
498
+ moves: [],
499
+ testRunner: MOCHA_10,
500
+ },
501
+ {
502
+ name: "mocha",
503
+ package: "mocha",
504
+ range: ">=12.0.0 <13.0.0",
505
+ entries: [],
506
+ moves: [],
507
+ testRunner: MOCHA_12,
508
+ },
329
509
  {
330
510
  name: "next",
511
+ bundles: true,
331
512
  package: "next",
332
513
  range: ">=13.4.0 <17.0.0",
333
514
  generated: [".next"],
@@ -345,6 +526,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
345
526
  },
346
527
  {
347
528
  name: "nuxt",
529
+ bundles: true,
348
530
  package: "nuxt",
349
531
  range: ">=3.0.0 <5.0.0",
350
532
  generated: [".nuxt"],
@@ -414,8 +596,17 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
414
596
  { key: "oclif.hooks", directory: false },
415
597
  ],
416
598
  },
599
+ outputDirectoryRow({
600
+ name: "panda",
601
+ package: "@pandacss/dev",
602
+ range: ">=0.1.0 <2.0.0",
603
+ files: [`panda.config.${ANY_MODULE}`],
604
+ property: "outdir",
605
+ fallback: "styled-system",
606
+ }),
417
607
  {
418
608
  name: "parcel",
609
+ bundles: true,
419
610
  package: "parcel",
420
611
  range: ">=2.0.0 <3.0.0",
421
612
  entries: [],
@@ -425,6 +616,22 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
425
616
  { key: "targets.*.source", directory: false },
426
617
  ],
427
618
  },
619
+ {
620
+ name: "playwright",
621
+ package: "@playwright/test",
622
+ range: ">=1.0.0 <2.0.0",
623
+ entries: [PLAYWRIGHT_CONFIG],
624
+ moves: [],
625
+ testDirectories: [
626
+ {
627
+ files: [PLAYWRIGHT_CONFIG],
628
+ directory: "testDir",
629
+ match: "testMatch",
630
+ defaultMatch: PLAYWRIGHT_TEST_MATCH,
631
+ projects: "projects",
632
+ },
633
+ ],
634
+ },
428
635
  {
429
636
  name: "prettier",
430
637
  package: "prettier",
@@ -481,6 +688,13 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
481
688
  },
482
689
  ],
483
690
  },
691
+ {
692
+ name: "react-scripts",
693
+ package: "react-scripts",
694
+ range: ">=1.0.0 <6.0.0",
695
+ entries: [`src/index.${SCRIPT}`, "src/setupProxy.js", `src/setupTests.${SCRIPT}`],
696
+ moves: [],
697
+ },
484
698
  {
485
699
  name: "remix",
486
700
  package: "@remix-run/dev",
@@ -508,6 +722,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
508
722
  },
509
723
  {
510
724
  name: "rolldown",
725
+ bundles: true,
511
726
  package: "rolldown",
512
727
  range: ">=1.0.0 <2.0.0",
513
728
  entries: [],
@@ -553,6 +768,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
553
768
  },
554
769
  {
555
770
  name: "storybook",
771
+ bundles: true,
556
772
  package: "storybook",
557
773
  range: ">=7.0.0 <11.0.0",
558
774
  entries: [
@@ -586,6 +802,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
586
802
  },
587
803
  {
588
804
  name: "sveltekit",
805
+ bundles: true,
589
806
  package: "@sveltejs/kit",
590
807
  range: ">=2.0.0 <3.0.0",
591
808
  entries: [...SVELTEKIT_ENTRIES, "<params>/*.{js,ts}"],
@@ -651,6 +868,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
651
868
  },
652
869
  {
653
870
  name: "sveltekit",
871
+ bundles: true,
654
872
  package: "@sveltejs/kit",
655
873
  range: ">=3.0.0 <4.0.0",
656
874
  entries: [...SVELTEKIT_ENTRIES, "<params>.{js,ts}"],
@@ -743,6 +961,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
743
961
  },
744
962
  {
745
963
  name: "vite",
964
+ bundles: true,
746
965
  package: "vite",
747
966
  range: ">=8.0.0 <9.0.0",
748
967
  entries: [],
@@ -758,6 +977,7 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
758
977
  },
759
978
  {
760
979
  name: "vitepress",
980
+ bundles: true,
761
981
  package: "vitepress",
762
982
  range: ">=1.0.0 <2.0.0-0 || >=2.0.0-alpha.0 <3.0.0",
763
983
  entries: [
@@ -768,30 +988,6 @@ export const CONVENTION_ROWS: readonly ConventionRow[] = [
768
988
  ],
769
989
  moves: [],
770
990
  },
771
- {
772
- name: "vitest",
773
- package: "vitest",
774
- range: ">=3.2.0 <6.0.0",
775
- entries: [
776
- `**/{vitest,vite}.config.${ANY_MODULE}`,
777
- `**/{vitest,vite}.config.*.${ANY_MODULE}`,
778
- `**/{vitest,vite}.*.config.${ANY_MODULE}`,
779
- ],
780
- moves: [],
781
- shortNames: [
782
- {
783
- property: "test.coverage.provider",
784
- files: [VITEST_CONFIG],
785
- package: "@vitest/coverage-{}",
786
- },
787
- ],
788
- selections: [
789
- { property: "test.coverage.include", files: [VITEST_CONFIG] },
790
- { property: "test.coverage.exclude", files: [VITEST_CONFIG] },
791
- ],
792
- testFiles: [
793
- { property: "test.setupFiles", files: [VITEST_CONFIG], roots: VITEST_ROOTS },
794
- { property: "test.globalSetup", files: [VITEST_CONFIG], roots: VITEST_ROOTS },
795
- ],
796
- },
991
+ vitestRow(">=3.2.0 <4.0.0", true),
992
+ vitestRow(">=4.0.0 <6.0.0", false),
797
993
  ];