@cplieger/deadset-ts 7.2.0-dev.4 → 8.0.0-dev.10

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 (288) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/mapper-connection.js +2 -1
  3. package/dist/bin/node-host.js +24 -5
  4. package/dist/src/analysis.js +245 -309
  5. package/dist/src/augmentations.js +124 -18
  6. package/dist/src/automatic-types.js +170 -0
  7. package/dist/src/build-scripts.js +425 -0
  8. package/dist/src/component-layer.js +4 -2
  9. package/dist/src/components.js +9 -9
  10. package/dist/src/config.js +6 -81
  11. package/dist/src/configuration-files.js +78 -188
  12. package/dist/src/configured-declarations.js +15 -20
  13. package/dist/src/conformance-record.js +2 -2
  14. package/dist/src/consumers.js +3 -30
  15. package/dist/src/contextual-uses.js +56 -9
  16. package/dist/src/contract/config.generated.js +558 -0
  17. package/dist/src/contract/contract.generated.js +1244 -0
  18. package/dist/src/contract/report.generated.js +862 -0
  19. package/dist/src/convention-rows.js +146 -1
  20. package/dist/src/conventions.js +136 -70
  21. package/dist/src/decorator.js +21 -18
  22. package/dist/src/dependencies.js +280 -62
  23. package/dist/src/edges.js +38 -122
  24. package/dist/src/element-access.js +4 -6
  25. package/dist/src/entry-point-gaps.js +9 -18
  26. package/dist/src/entry-points.js +106 -21
  27. package/dist/src/enum-group.js +3 -10
  28. package/dist/src/erased-stores.js +4 -6
  29. package/dist/src/exempt-classes.js +1 -63
  30. package/dist/src/exempt.js +21 -40
  31. package/dist/src/failure.js +36 -0
  32. package/dist/src/file-facts.js +2 -25
  33. package/dist/src/findings/completion.js +225 -63
  34. package/dist/src/findings/dependencies-and-module-machinery.js +72 -27
  35. package/dist/src/findings/emitters.js +6 -6
  36. package/dist/src/findings/interfaces.js +4 -5
  37. package/dist/src/findings/intra-function.js +53 -19
  38. package/dist/src/findings/non-code-artifacts.js +71 -39
  39. package/dist/src/findings/reads-and-writes.js +16 -13
  40. package/dist/src/findings/self-check.js +10 -12
  41. package/dist/src/findings/unused-declarations.js +57 -28
  42. package/dist/src/findings/visibility-narrowing.js +40 -18
  43. package/dist/src/findings-pass.js +8 -15
  44. package/dist/src/framework-lifecycle.js +7 -7
  45. package/dist/src/fs/document.js +52 -0
  46. package/dist/src/fs/manifest.js +72 -0
  47. package/dist/src/fs/tree.js +88 -0
  48. package/dist/src/generated-file.js +18 -4
  49. package/dist/src/git-ignore.js +99 -0
  50. package/dist/src/graph.js +9 -4
  51. package/dist/src/html-entries.js +6 -33
  52. package/dist/src/import-bindings.js +97 -0
  53. package/dist/src/in-operands.js +2 -1
  54. package/dist/src/index.js +1 -1
  55. package/dist/src/indexed-access.js +130 -28
  56. package/dist/src/injection-container.js +1 -1
  57. package/dist/src/interface-satisfaction.js +30 -12
  58. package/dist/src/intra-function-parts.js +341 -69
  59. package/dist/src/inventory.js +54 -29
  60. package/dist/src/javascript-file.js +33 -0
  61. package/dist/src/json-document.js +198 -67
  62. package/dist/src/keyof-comparisons.js +4 -6
  63. package/dist/src/kinds.js +3 -366
  64. package/dist/src/load/classify.js +270 -0
  65. package/dist/src/load/diagnostics.js +80 -0
  66. package/dist/src/load/discover.js +277 -0
  67. package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
  68. package/dist/src/load/expected-module.js +136 -0
  69. package/dist/src/load/load.js +27 -0
  70. package/dist/src/load/module-lookup.js +37 -0
  71. package/dist/src/load/plan.js +313 -0
  72. package/dist/src/load/specifiers.js +115 -0
  73. package/dist/src/load/synthesize.js +140 -0
  74. package/dist/src/load/test-globals.js +207 -0
  75. package/dist/src/load/test-joins.js +82 -0
  76. package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
  77. package/dist/src/{workspace-programs.js → load/workspace-programs.js} +88 -61
  78. package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +60 -59
  79. package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
  80. package/dist/src/{workspace.js → load/workspace.js} +62 -124
  81. package/dist/src/manifest.js +49 -54
  82. package/dist/src/matrix.js +94 -13
  83. package/dist/src/mdx-entries.js +174 -0
  84. package/dist/src/module-declarations.js +9 -13
  85. package/dist/src/outside-tests.js +1 -1
  86. package/dist/src/overrides.js +41 -10
  87. package/dist/src/partial.js +2 -1
  88. package/dist/src/paths.js +26 -15
  89. package/dist/src/position.js +2 -1
  90. package/dist/src/print.js +11 -78
  91. package/dist/src/product.js +13 -0
  92. package/dist/src/query.js +1 -0
  93. package/dist/src/ref.js +11 -0
  94. package/dist/src/references.js +52 -31
  95. package/dist/src/report-schema.js +51 -0
  96. package/dist/src/report.js +59 -41
  97. package/dist/src/reporters/annotations.js +15 -8
  98. package/dist/src/reporters/sarif.js +16 -10
  99. package/dist/src/reporters/template.js +4 -19
  100. package/dist/src/resolve.js +245 -727
  101. package/dist/src/roots.js +374 -116
  102. package/dist/src/run.js +66 -77
  103. package/dist/src/schema.js +320 -342
  104. package/dist/src/scope.js +38 -115
  105. package/dist/src/serialization-contract.js +649 -29
  106. package/dist/src/session.js +41 -29
  107. package/dist/src/source-files.js +40 -15
  108. package/dist/src/suppress-file.js +34 -29
  109. package/dist/src/suppress-inline.js +21 -4
  110. package/dist/src/suppress.js +40 -56
  111. package/dist/src/sweep.js +32 -17
  112. package/dist/src/symbol-keys.js +105 -6
  113. package/dist/src/template-field.js +9 -19
  114. package/dist/src/test-support.js +119 -18
  115. package/dist/src/text/compare.js +26 -0
  116. package/dist/src/text/glob.js +194 -0
  117. package/dist/src/text/named-files.js +54 -0
  118. package/dist/src/text/shell.js +159 -0
  119. package/dist/src/text/yaml.js +393 -0
  120. package/dist/src/type-errors.js +27 -221
  121. package/dist/src/type-parameter-reads.js +172 -0
  122. package/dist/src/unseen-loads.js +100 -0
  123. package/dist/src/unwrap.js +23 -0
  124. package/dist/src/usage.js +10 -0
  125. package/dist/src/verbs/analyze.js +181 -125
  126. package/dist/src/verbs/describe.js +9 -16
  127. package/dist/src/verbs/explain.js +14 -9
  128. package/dist/src/verbs/print-config.js +2 -1
  129. package/dist/src/verbs/print-projects.js +6 -4
  130. package/dist/src/verbs/print-retained.js +4 -2
  131. package/dist/src/verbs/print-roots.js +4 -2
  132. package/dist/src/verbs/verb.js +1 -5
  133. package/dist/src/verbs/version.js +14 -3
  134. package/dist/src/workflow-steps.js +128 -33
  135. package/jsr.json +1 -1
  136. package/package.json +5 -4
  137. package/src/analysis.ts +333 -457
  138. package/src/augmentations.ts +152 -23
  139. package/src/automatic-types.ts +228 -0
  140. package/src/build-scripts.ts +543 -0
  141. package/src/component-layer.ts +4 -2
  142. package/src/components.ts +9 -10
  143. package/src/config.ts +31 -299
  144. package/src/configuration-files.ts +100 -191
  145. package/src/configured-declarations.ts +18 -23
  146. package/src/conformance-record.ts +2 -2
  147. package/src/consumers.ts +6 -57
  148. package/src/contextual-uses.ts +64 -12
  149. package/src/contract/config.generated.ts +818 -0
  150. package/src/contract/contract.generated.ts +1308 -0
  151. package/src/contract/report.generated.ts +1237 -0
  152. package/src/convention-rows.ts +186 -1
  153. package/src/conventions.ts +166 -90
  154. package/src/decorator.ts +28 -18
  155. package/src/dependencies.ts +356 -78
  156. package/src/edges.ts +41 -140
  157. package/src/element-access.ts +4 -7
  158. package/src/entry-point-gaps.ts +11 -20
  159. package/src/entry-points.ts +124 -28
  160. package/src/enum-group.ts +2 -11
  161. package/src/erased-stores.ts +3 -7
  162. package/src/exempt-classes.ts +1 -75
  163. package/src/exempt.ts +36 -50
  164. package/src/failure.ts +63 -0
  165. package/src/file-facts.ts +9 -24
  166. package/src/finding.ts +24 -9
  167. package/src/findings/boundary.ts +2 -0
  168. package/src/findings/completion.ts +297 -77
  169. package/src/findings/dependencies-and-module-machinery.ts +90 -31
  170. package/src/findings/emitter.ts +8 -9
  171. package/src/findings/emitters.ts +8 -8
  172. package/src/findings/interfaces.ts +4 -6
  173. package/src/findings/intra-function.ts +64 -20
  174. package/src/findings/non-code-artifacts.ts +88 -50
  175. package/src/findings/reads-and-writes.ts +20 -16
  176. package/src/findings/self-check.ts +11 -17
  177. package/src/findings/unused-declarations.ts +65 -28
  178. package/src/findings/visibility-narrowing.ts +51 -19
  179. package/src/findings-pass.ts +10 -19
  180. package/src/framework-lifecycle.ts +7 -7
  181. package/src/fs/document.ts +70 -0
  182. package/src/fs/manifest.ts +92 -0
  183. package/src/fs/tree.ts +110 -0
  184. package/src/generated-file.ts +23 -4
  185. package/src/git-ignore.ts +122 -0
  186. package/src/graph.ts +11 -3
  187. package/src/host.ts +17 -14
  188. package/src/html-entries.ts +6 -33
  189. package/src/import-bindings.ts +128 -0
  190. package/src/in-operands.ts +2 -1
  191. package/src/index.ts +1 -1
  192. package/src/indexed-access.ts +152 -30
  193. package/src/injection-container.ts +1 -1
  194. package/src/interface-satisfaction.ts +33 -13
  195. package/src/intra-function-parts.ts +449 -85
  196. package/src/inventory.ts +73 -27
  197. package/src/javascript-file.ts +37 -0
  198. package/src/json-document.ts +241 -76
  199. package/src/keyof-comparisons.ts +3 -7
  200. package/src/kinds.ts +5 -413
  201. package/src/load/classify.ts +397 -0
  202. package/src/load/diagnostics.ts +144 -0
  203. package/src/load/discover.ts +455 -0
  204. package/src/{emit-map.ts → load/emit-map.ts} +1 -1
  205. package/src/load/expected-module.ts +188 -0
  206. package/src/load/load.ts +73 -0
  207. package/src/load/module-lookup.ts +50 -0
  208. package/src/load/plan.ts +504 -0
  209. package/src/load/specifiers.ts +168 -0
  210. package/src/load/synthesize.ts +211 -0
  211. package/src/load/test-globals.ts +251 -0
  212. package/src/load/test-joins.ts +98 -0
  213. package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
  214. package/src/{workspace-programs.ts → load/workspace-programs.ts} +127 -80
  215. package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +73 -64
  216. package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
  217. package/src/{workspace.ts → load/workspace.ts} +90 -134
  218. package/src/manifest.ts +81 -75
  219. package/src/matrix.ts +154 -18
  220. package/src/mdx-entries.ts +218 -0
  221. package/src/module-declarations.ts +11 -13
  222. package/src/outside-tests.ts +1 -1
  223. package/src/overrides.ts +51 -12
  224. package/src/partial.ts +3 -2
  225. package/src/paths.ts +27 -15
  226. package/src/position.ts +2 -1
  227. package/src/print.ts +12 -91
  228. package/src/product.ts +18 -0
  229. package/src/query.ts +11 -0
  230. package/src/ref.ts +13 -0
  231. package/src/references.ts +62 -32
  232. package/src/report-schema.ts +68 -0
  233. package/src/report.ts +105 -215
  234. package/src/reporters/annotations.ts +22 -11
  235. package/src/reporters/json.ts +1 -1
  236. package/src/reporters/reporter.ts +2 -4
  237. package/src/reporters/reporters.ts +1 -1
  238. package/src/reporters/sarif.ts +29 -16
  239. package/src/reporters/template.ts +4 -20
  240. package/src/reporters/text.ts +3 -3
  241. package/src/resolve.ts +283 -1111
  242. package/src/roots.ts +490 -137
  243. package/src/run.ts +75 -91
  244. package/src/schema.ts +391 -387
  245. package/src/scope.ts +46 -138
  246. package/src/serialization-contract.ts +818 -26
  247. package/src/session.ts +77 -54
  248. package/src/source-files.ts +67 -17
  249. package/src/suppress-file.ts +36 -34
  250. package/src/suppress-inline.ts +20 -3
  251. package/src/suppress.ts +52 -63
  252. package/src/sweep.ts +53 -18
  253. package/src/symbol-keys.ts +131 -7
  254. package/src/template-field.ts +15 -25
  255. package/src/test-support.ts +155 -18
  256. package/src/text/compare.ts +27 -0
  257. package/src/text/glob.ts +210 -0
  258. package/src/text/named-files.inputs.json +1522 -0
  259. package/src/text/named-files.ts +68 -0
  260. package/src/text/shell.ts +161 -0
  261. package/src/text/yaml.ts +423 -0
  262. package/src/type-errors.ts +35 -273
  263. package/src/type-parameter-reads.ts +227 -0
  264. package/src/unseen-loads.ts +134 -0
  265. package/src/unwrap.ts +34 -0
  266. package/src/usage.ts +10 -0
  267. package/src/verbs/analyze.ts +245 -161
  268. package/src/verbs/describe.ts +14 -15
  269. package/src/verbs/explain.ts +15 -13
  270. package/src/verbs/print-config.ts +2 -1
  271. package/src/verbs/print-projects.ts +6 -4
  272. package/src/verbs/print-retained.ts +4 -2
  273. package/src/verbs/print-roots.ts +4 -2
  274. package/src/verbs/verb.ts +2 -8
  275. package/src/verbs/version.ts +15 -3
  276. package/src/workflow-steps.ts +149 -34
  277. package/dist/src/discover.js +0 -347
  278. package/dist/src/glob.js +0 -65
  279. package/dist/src/pnpm-workspace.js +0 -120
  280. package/dist/src/setup-failure.js +0 -23
  281. package/dist/src/test-joins.js +0 -101
  282. package/dist/src/version.js +0 -7
  283. package/src/discover.ts +0 -510
  284. package/src/glob.ts +0 -67
  285. package/src/pnpm-workspace.ts +0 -135
  286. package/src/setup-failure.ts +0 -39
  287. package/src/test-joins.ts +0 -120
  288. package/src/version.ts +0 -7
@@ -1,135 +0,0 @@
1
- /**
2
- * The `packages` list of a `pnpm-workspace.yaml`. The document is read as far as that
3
- * one key needs and no further: a top-level `packages` key holding a block sequence or
4
- * a one-line flow sequence of plain or quoted strings. Any other value of the key is
5
- * refused rather than guessed at, because a list read wrong names the wrong packages.
6
- */
7
-
8
- /** What the document says about `packages`. */
9
- type PnpmPackages =
10
- | { readonly kind: "listed"; readonly patterns: readonly string[] }
11
- /** The document declares no `packages` key. */
12
- | { readonly kind: "absent" }
13
- /** The key holds something this reader does not read, with what it holds. */
14
- | { readonly kind: "refused"; readonly reason: string };
15
-
16
- /** The characters a plain scalar may not start with. */
17
- const INDICATORS = new Set(["[", "]", "{", "}", ",", "&", "*", "!", "|", ">", "%", "@", "`", "#"]);
18
-
19
- /** One line with its comment removed, a `#` inside quotes kept. */
20
- function uncommented(line: string): string {
21
- let quote: string | undefined;
22
- for (let at = 0; at < line.length; at += 1) {
23
- const character = line[at];
24
- if (quote !== undefined) {
25
- if (character === quote) {
26
- quote = undefined;
27
- }
28
- continue;
29
- }
30
- if (character === "'" || character === '"') {
31
- quote = character;
32
- } else if (character === "#" && (at === 0 || /\s/u.test(line[at - 1] ?? ""))) {
33
- return line.slice(0, at).trimEnd();
34
- }
35
- }
36
- return line.trimEnd();
37
- }
38
-
39
- /** One scalar as written, or `undefined` where it is not a string this reader reads. */
40
- function scalarOf(text: string): string | undefined {
41
- const value = text.trim();
42
- if (value.length >= 2 && value.startsWith("'") && value.endsWith("'")) {
43
- const inner = value.slice(1, -1);
44
- return /'(?!')/u.test(inner.replaceAll("''", "")) ? undefined : inner.replaceAll("''", "'");
45
- }
46
- if (value.length >= 2 && value.startsWith('"') && value.endsWith('"')) {
47
- const inner = value.slice(1, -1);
48
- return inner.includes("\\") || inner.includes('"') ? undefined : inner;
49
- }
50
- if (
51
- value === "" ||
52
- INDICATORS.has(value[0] ?? "") ||
53
- value.startsWith("'") ||
54
- value.startsWith('"')
55
- ) {
56
- return undefined;
57
- }
58
- if (value.startsWith("- ") || value.startsWith("? ") || /:(?:\s|$)/u.test(value)) {
59
- return undefined;
60
- }
61
- return value;
62
- }
63
-
64
- /** The entries of a one-line flow sequence, or `undefined` where one does not read. */
65
- function flowOf(text: string): readonly string[] | undefined {
66
- const inner = text.slice(1, -1).trim();
67
- if (inner === "") {
68
- return [];
69
- }
70
- const entries = inner.split(",");
71
- if (entries.length > 1 && entries.at(-1)?.trim() === "") {
72
- entries.pop();
73
- }
74
- const found: string[] = [];
75
- for (const entry of entries) {
76
- const value = scalarOf(entry);
77
- if (value === undefined) {
78
- return undefined;
79
- }
80
- found.push(value);
81
- }
82
- return found;
83
- }
84
-
85
- const KEY = /^(?:packages|'packages'|"packages")\s*:(?:\s(.*))?$/u;
86
-
87
- /** The `packages` list one `pnpm-workspace.yaml` text declares. */
88
- export function pnpmPackages(text: string): PnpmPackages {
89
- const lines = text.split(/\r?\n/u).map(uncommented);
90
- const keys = lines.flatMap((line, at) => (KEY.test(line) ? [at] : []));
91
- const [at] = keys;
92
- if (at === undefined) {
93
- return { kind: "absent" };
94
- }
95
- if (keys.length > 1) {
96
- return { kind: "refused", reason: "the packages key is declared more than once" };
97
- }
98
- const rest = (KEY.exec(lines[at] ?? "")?.[1] ?? "").trim();
99
- if (rest !== "") {
100
- const listed = rest.startsWith("[") && rest.endsWith("]") ? flowOf(rest) : undefined;
101
- return listed === undefined
102
- ? {
103
- kind: "refused",
104
- reason: `packages holds ${JSON.stringify(rest)}, not a sequence of strings`,
105
- }
106
- : { kind: "listed", patterns: listed };
107
- }
108
- const patterns: string[] = [];
109
- for (const line of lines.slice(at + 1)) {
110
- if (line.trim() === "") {
111
- continue;
112
- }
113
- const item = /^(\s*)-(?:\s+(.*))?$/u.exec(line);
114
- if (item === null) {
115
- if (/^\s/u.test(line)) {
116
- return {
117
- kind: "refused",
118
- reason: `packages holds ${JSON.stringify(line.trim())}, not a sequence item`,
119
- };
120
- }
121
- break;
122
- }
123
- const value = scalarOf(item[2] ?? "");
124
- if (value === undefined) {
125
- return {
126
- kind: "refused",
127
- reason: `the packages item ${JSON.stringify(line.trim())} is not a plain or quoted string`,
128
- };
129
- }
130
- patterns.push(value);
131
- }
132
- return patterns.length === 0
133
- ? { kind: "refused", reason: "packages holds no sequence" }
134
- : { kind: "listed", patterns };
135
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * A setup failure: a file or a component the analysis needs and the project does not
3
- * provide. Each one names what is missing and the fix, on one line of the error stream
4
- * that starts with its class.
5
- */
6
-
7
- /** The classes of setup failure this analyzer meets. */
8
- type SetupClass =
9
- | "missing-module"
10
- | "missing-consumer"
11
- | "workspace-member-without-source"
12
- | "convention-not-literal";
13
-
14
- export interface SetupFailure {
15
- readonly setupClass: SetupClass;
16
- /** What is missing and the fix, on one line. */
17
- readonly detail: string;
18
- }
19
-
20
- /** The failure as the one line of the error stream that names it. */
21
- export function setupLine(failure: SetupFailure): string {
22
- return `setup failure: ${failure.setupClass}: ${failure.detail}`;
23
- }
24
-
25
- /**
26
- * A run that met a setup failure where none may be dropped: in a configuration the
27
- * configuration document or the scope declares, in a declared consumer, or in every
28
- * configuration discovery derived. It ends the run with the failure code and no finding
29
- * list.
30
- */
31
- export class SetupError extends Error {
32
- readonly failures: readonly SetupFailure[];
33
-
34
- constructor(failures: readonly SetupFailure[]) {
35
- super(failures.map(setupLine).join("\n"));
36
- this.name = "SetupError";
37
- this.failures = failures;
38
- }
39
- }
package/src/test-joins.ts DELETED
@@ -1,120 +0,0 @@
1
- /**
2
- * The test files a derived matrix holds although no configuration's file list names them.
3
- * The test runner compiles such a file with the options of the nearest compiler
4
- * configuration at or above it, so the file joins that configuration's program as a file
5
- * its list names, unless a `package.json` below that configuration's directory makes the
6
- * file another package's, which its own test runner compiles.
7
- */
8
-
9
- import { sourcePaths } from "./file-facts.ts";
10
- import type { Host } from "./host.ts";
11
- import { dirnamePath, joinPath, relativePath } from "./paths.ts";
12
- import type { Engine } from "./session.ts";
13
- import { writtenPath, type WorkspaceProgram } from "./workspace-programs.ts";
14
-
15
- const PREFERRED = "/tsconfig.json";
16
-
17
- /** The configurations of one directory in the order a file joins them: `tsconfig.json` first. */
18
- function byPreference(a: string, b: string): number {
19
- const first = a.endsWith(PREFERRED) ? 0 : 1;
20
- const second = b.endsWith(PREFERRED) ? 0 : 1;
21
- return first - second || (a < b ? -1 : a > b ? 1 : 0);
22
- }
23
-
24
- /**
25
- * Per configuration of `configFiles`, the absolute paths of the test files that join it:
26
- * each file below `root` a pattern of `patterns` names, that no configuration's file list
27
- * holds, joins the configuration nearest at or above its directory when no `package.json`
28
- * sits between them. A configuration the compiler cannot read lists nothing and is joined
29
- * by nothing.
30
- */
31
- export function joinedTestFiles(
32
- engine: Engine,
33
- host: Host,
34
- root: string,
35
- configFiles: readonly string[],
36
- patterns: readonly RegExp[],
37
- ): ReadonlyMap<string, readonly string[]> {
38
- const listed = new Set<string>();
39
- const byDir = new Map<string, string[]>();
40
- for (const configFile of configFiles) {
41
- let fileNames: readonly string[];
42
- try {
43
- fileNames = engine.parseConfigFile(configFile).fileNames;
44
- } catch {
45
- continue;
46
- }
47
- fileNames.forEach((name) => listed.add(name));
48
- const dir = dirnamePath(configFile);
49
- byDir.set(dir, [...(byDir.get(dir) ?? []), configFile].sort(byPreference));
50
- }
51
- const joins = new Map<string, string[]>();
52
- for (const path of sourcePaths(host, root)) {
53
- const file = joinPath(root, path);
54
- if (listed.has(file) || !patterns.some((pattern) => pattern.test(path))) {
55
- continue;
56
- }
57
- for (let dir = dirnamePath(file); ; dir = dirnamePath(dir)) {
58
- const [nearest] = byDir.get(dir) ?? [];
59
- if (nearest !== undefined) {
60
- joins.set(nearest, [...(joins.get(nearest) ?? []), file]);
61
- break;
62
- }
63
- if (
64
- host.kindOf(joinPath(dir, "package.json")) === "file" ||
65
- dir === root ||
66
- relativePath(root, dir) === undefined
67
- ) {
68
- break;
69
- }
70
- }
71
- }
72
- return joins;
73
- }
74
-
75
- /**
76
- * How the snapshot reads each configuration a test file joins: the program `programs`
77
- * describes with the files added to its root files, or a configuration only the snapshot
78
- * holds that extends the one `programs` writes, or the configuration itself, and lists
79
- * every file the configuration lists and the joined ones.
80
- */
81
- export function withJoinedTests(
82
- engine: Engine,
83
- host: Host,
84
- programs: ReadonlyMap<string, WorkspaceProgram>,
85
- joins: ReadonlyMap<string, readonly string[]>,
86
- ): ReadonlyMap<string, WorkspaceProgram> {
87
- const found = new Map(programs);
88
- for (const [configFile, files] of joins) {
89
- const program = programs.get(configFile);
90
- if (program?.kind === "program") {
91
- found.set(configFile, {
92
- kind: "program",
93
- params: {
94
- ...program.params,
95
- rootFiles: [...(program.params.rootFiles ?? []), ...files],
96
- },
97
- });
98
- continue;
99
- }
100
- let listed: readonly string[];
101
- try {
102
- listed =
103
- program?.kind === "configuration"
104
- ? engine.parseConfigJson(JSON.parse(program.text), program.file).fileNames
105
- : engine.parseConfigFile(configFile).fileNames;
106
- } catch {
107
- continue;
108
- }
109
- const value =
110
- program?.kind === "configuration"
111
- ? { ...(JSON.parse(program.text) as Record<string, unknown>), files: [...listed, ...files] }
112
- : { extends: configFile, files: [...listed, ...files] };
113
- found.set(configFile, {
114
- kind: "configuration",
115
- file: program?.kind === "configuration" ? program.file : writtenPath(host, configFile),
116
- text: `${JSON.stringify({ ...value, include: [] }, null, 2)}\n`,
117
- });
118
- }
119
- return found;
120
- }
package/src/version.ts DELETED
@@ -1,7 +0,0 @@
1
- /**
2
- * The Contract version this analyzer implements. It is the resolved value of
3
- * `contract_version` when no configuration source supplies one, and it moves
4
- * independently of the analyzer's own version, which is the one the host answers
5
- * from the package the analyzer was installed from.
6
- */
7
- export const CONTRACT_VERSION = "7.2.0";