@descent-vtt/spec-guard 0.2.0 → 0.4.0
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.
- package/CHANGELOG.md +150 -0
- package/README.md +262 -36
- package/dist/cli.d.ts +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +27 -3
- package/dist/cli.js.map +1 -1
- package/dist/comments.d.ts +78 -0
- package/dist/comments.d.ts.map +1 -0
- package/dist/comments.js +241 -0
- package/dist/comments.js.map +1 -0
- package/dist/engine.d.ts +62 -40
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +236 -186
- package/dist/engine.js.map +1 -1
- package/dist/glob.d.ts +34 -6
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +50 -28
- package/dist/glob.js.map +1 -1
- package/dist/imports.d.ts +94 -0
- package/dist/imports.d.ts.map +1 -0
- package/dist/imports.js +492 -0
- package/dist/imports.js.map +1 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +24 -2
- package/dist/parser.js.map +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +67 -2
- package/dist/reporter.js.map +1 -1
- package/dist/runner.d.ts +23 -3
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +274 -73
- package/dist/runner.js.map +1 -1
- package/dist/scope.d.ts +108 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +115 -0
- package/dist/scope.js.map +1 -0
- package/dist/types.d.ts +47 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
package/dist/runner.js
CHANGED
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
* number, an unknown boolean or a path escaping the root is an error, never a
|
|
6
6
|
* silently-passing assertion. A spec that lies is worse than no spec at all.
|
|
7
7
|
*/
|
|
8
|
-
import { promises as fs } from
|
|
9
|
-
import path from
|
|
10
|
-
import { createCachedEngine, resolveEngine, runSearches, } from
|
|
11
|
-
import { expandSpecPatterns, toPosix } from
|
|
12
|
-
import {
|
|
8
|
+
import { promises as fs } from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { createCachedEngine, enumerateCandidates, resolveEngine, runSearches, } from "./engine.js";
|
|
11
|
+
import { createExcludeMatcher, expandSpecPatterns, toPosix } from "./glob.js";
|
|
12
|
+
import { ANALYSABLE_EXTENSIONS, createImportIndex, resolveSpecifier, } from "./imports.js";
|
|
13
|
+
import { parseDirectives } from "./parser.js";
|
|
14
|
+
import { createScope, DEFAULT_SCOPE, EMPTY_LEDGER, UNCERTAIN_REASONS, } from "./scope.js";
|
|
13
15
|
export const DEFAULT_MAX_SNIPPETS = 5;
|
|
14
16
|
export const DEFAULT_CONCURRENCY = 8;
|
|
15
|
-
const TRUE_VALUES = new Set([
|
|
16
|
-
const FALSE_VALUES = new Set([
|
|
17
|
+
const TRUE_VALUES = new Set(["true", "1", "yes", "on"]);
|
|
18
|
+
const FALSE_VALUES = new Set(["false", "0", "no", "off"]);
|
|
17
19
|
function parseBoolean(value, attribute) {
|
|
18
20
|
if (value === undefined)
|
|
19
21
|
return false;
|
|
@@ -31,11 +33,19 @@ function parseCount(value, attribute) {
|
|
|
31
33
|
}
|
|
32
34
|
return Number.parseInt(normalized, 10);
|
|
33
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Splits a list attribute on commas or whitespace.
|
|
38
|
+
*
|
|
39
|
+
* Both because both read naturally for different lists:
|
|
40
|
+
* `target="src, lib"` and `exclude="src/config/** tests/**"`. The cost is that
|
|
41
|
+
* a path containing a space cannot be expressed; that is documented, and no
|
|
42
|
+
* separator choice avoids it without quoting rules this syntax does not have.
|
|
43
|
+
*/
|
|
34
44
|
function splitList(value) {
|
|
35
45
|
if (value === undefined)
|
|
36
46
|
return [];
|
|
37
47
|
return value
|
|
38
|
-
.split(
|
|
48
|
+
.split(/[,\s]+/)
|
|
39
49
|
.map((item) => item.trim())
|
|
40
50
|
.filter((item) => item.length > 0);
|
|
41
51
|
}
|
|
@@ -46,39 +56,63 @@ function normalizeTarget(target, root, attribute) {
|
|
|
46
56
|
}
|
|
47
57
|
const absolute = path.resolve(root, target);
|
|
48
58
|
const relative = path.relative(root, absolute);
|
|
49
|
-
if (relative.startsWith(
|
|
59
|
+
if (relative.startsWith("..")) {
|
|
50
60
|
throw new Error(`Attribute "${attribute}" escapes the root directory: "${target}".`);
|
|
51
61
|
}
|
|
52
|
-
return toPosix(relative) ||
|
|
62
|
+
return toPosix(relative) || ".";
|
|
53
63
|
}
|
|
54
64
|
function plural(count) {
|
|
55
|
-
return count === 1 ?
|
|
65
|
+
return count === 1 ? "" : "es";
|
|
56
66
|
}
|
|
57
67
|
function describeBounds(bounds) {
|
|
58
68
|
const { min, max } = bounds;
|
|
59
69
|
if (min !== undefined && max !== undefined) {
|
|
60
|
-
return min === max
|
|
70
|
+
return min === max
|
|
71
|
+
? `exactly ${min} match${plural(min)}`
|
|
72
|
+
: `between ${min} and ${max} matches`;
|
|
61
73
|
}
|
|
62
74
|
if (min !== undefined)
|
|
63
75
|
return `at least ${min} match${plural(min)}`;
|
|
64
76
|
if (max !== undefined)
|
|
65
|
-
return max === 0 ?
|
|
77
|
+
return max === 0 ? "no matches" : `at most ${max} match${plural(max)}`;
|
|
66
78
|
/* c8 ignore next */
|
|
67
|
-
return
|
|
79
|
+
return "any number of matches";
|
|
68
80
|
}
|
|
69
81
|
/** Prose form used in the assertion description ("must appear at most 3 times"). */
|
|
70
82
|
function describeExpectation(bounds) {
|
|
71
83
|
const { min, max } = bounds;
|
|
72
|
-
const times = (value) => `${value} time${value === 1 ?
|
|
84
|
+
const times = (value) => `${value} time${value === 1 ? "" : "s"}`;
|
|
73
85
|
if (min !== undefined && max !== undefined) {
|
|
74
|
-
return min === max
|
|
86
|
+
return min === max
|
|
87
|
+
? `must appear exactly ${times(min)}`
|
|
88
|
+
: `must appear between ${min} and ${max} times`;
|
|
75
89
|
}
|
|
76
90
|
if (min !== undefined)
|
|
77
91
|
return `must appear at least ${times(min)}`;
|
|
78
92
|
if (max === 0)
|
|
79
|
-
return
|
|
93
|
+
return "must not appear";
|
|
80
94
|
/* c8 ignore next */
|
|
81
|
-
return max === undefined
|
|
95
|
+
return max === undefined
|
|
96
|
+
? "may appear any number of times"
|
|
97
|
+
: `must appear at most ${times(max)}`;
|
|
98
|
+
}
|
|
99
|
+
/** Prose for an import claim: "must not import", "must import at least 2 files". */
|
|
100
|
+
function describeImportExpectation(bounds) {
|
|
101
|
+
const { min, max } = bounds;
|
|
102
|
+
const files = (value) => `${value} file${value === 1 ? "" : "s"}`;
|
|
103
|
+
if (max === 0 && min === undefined)
|
|
104
|
+
return "must not import";
|
|
105
|
+
if (min !== undefined && max !== undefined) {
|
|
106
|
+
return min === max
|
|
107
|
+
? `must import from exactly ${files(min)}`
|
|
108
|
+
: `must import from between ${min} and ${max} files`;
|
|
109
|
+
}
|
|
110
|
+
if (min !== undefined)
|
|
111
|
+
return `must import from at least ${files(min)}`;
|
|
112
|
+
/* c8 ignore next */
|
|
113
|
+
return max === undefined
|
|
114
|
+
? "may import"
|
|
115
|
+
: `must import from at most ${files(max)}`;
|
|
82
116
|
}
|
|
83
117
|
function satisfies(count, bounds) {
|
|
84
118
|
if (bounds.min !== undefined && count < bounds.min)
|
|
@@ -94,9 +128,9 @@ export function resolveDirective(directive, context) {
|
|
|
94
128
|
error: { location, raw: directive.raw, message },
|
|
95
129
|
});
|
|
96
130
|
try {
|
|
97
|
-
const reason = attributes[
|
|
98
|
-
if (kind ===
|
|
99
|
-
const files = splitList(attributes[
|
|
131
|
+
const reason = attributes["reason"];
|
|
132
|
+
if (kind === "assert-present") {
|
|
133
|
+
const files = splitList(attributes["file"]).map((file) => normalizeTarget(file, context.root, "file"));
|
|
100
134
|
if (files.length === 0) {
|
|
101
135
|
return fail('@assert-present requires a file="..." attribute.');
|
|
102
136
|
}
|
|
@@ -104,7 +138,7 @@ export function resolveDirective(directive, context) {
|
|
|
104
138
|
assertion: {
|
|
105
139
|
kind,
|
|
106
140
|
location,
|
|
107
|
-
description: `${files.join(
|
|
141
|
+
description: `${files.join(", ")} must exist`,
|
|
108
142
|
reason,
|
|
109
143
|
targets: [],
|
|
110
144
|
files,
|
|
@@ -113,48 +147,103 @@ export function resolveDirective(directive, context) {
|
|
|
113
147
|
},
|
|
114
148
|
};
|
|
115
149
|
}
|
|
116
|
-
const
|
|
150
|
+
const isImportKind = kind === "assert-import-absence" || kind === "assert-import-count";
|
|
151
|
+
const subject = isImportKind ? "module" : "symbol";
|
|
152
|
+
const symbol = attributes[subject];
|
|
117
153
|
if (symbol === undefined || symbol.length === 0) {
|
|
118
|
-
return fail(`@${kind} requires a non-empty
|
|
154
|
+
return fail(`@${kind} requires a non-empty ${subject}="..." attribute.`);
|
|
155
|
+
}
|
|
156
|
+
const comments = (attributes["comments"] ?? "ignore").trim().toLowerCase();
|
|
157
|
+
if (comments !== "ignore" && comments !== "include") {
|
|
158
|
+
return fail(`Attribute "comments" must be ignore or include, got "${attributes["comments"]}".`);
|
|
119
159
|
}
|
|
120
|
-
const rawTargets = splitList(attributes[
|
|
121
|
-
const targets = (rawTargets.length > 0 ? rawTargets : [
|
|
160
|
+
const rawTargets = splitList(attributes["target"]);
|
|
161
|
+
const targets = (rawTargets.length > 0 ? rawTargets : ["."]).map((target) => normalizeTarget(target, context.root, "target"));
|
|
122
162
|
const bounds = {};
|
|
123
|
-
if (kind ===
|
|
124
|
-
if (attributes[
|
|
125
|
-
|
|
163
|
+
if (kind === "assert-absence" || kind === "assert-import-absence") {
|
|
164
|
+
if (attributes["expected"] !== undefined &&
|
|
165
|
+
attributes["max"] !== undefined) {
|
|
166
|
+
return fail(`@${kind} accepts either expected="..." or max="...", not both.`);
|
|
126
167
|
}
|
|
127
|
-
const limit = attributes[
|
|
128
|
-
bounds.max =
|
|
168
|
+
const limit = attributes["expected"] ?? attributes["max"];
|
|
169
|
+
bounds.max =
|
|
170
|
+
limit === undefined
|
|
171
|
+
? 0
|
|
172
|
+
: parseCount(limit, attributes["expected"] !== undefined ? "expected" : "max");
|
|
129
173
|
}
|
|
130
174
|
else {
|
|
131
|
-
const expected = attributes[
|
|
175
|
+
const expected = attributes["expected"];
|
|
132
176
|
if (expected !== undefined) {
|
|
133
|
-
if (attributes[
|
|
134
|
-
|
|
177
|
+
if (attributes["min"] !== undefined ||
|
|
178
|
+
attributes["max"] !== undefined) {
|
|
179
|
+
return fail(`@${kind} accepts either expected="..." or min/max, not both.`);
|
|
135
180
|
}
|
|
136
|
-
const value = parseCount(expected,
|
|
181
|
+
const value = parseCount(expected, "expected");
|
|
137
182
|
bounds.min = value;
|
|
138
183
|
bounds.max = value;
|
|
139
184
|
}
|
|
140
185
|
else {
|
|
141
|
-
if (attributes[
|
|
142
|
-
|
|
186
|
+
if (attributes["min"] === undefined &&
|
|
187
|
+
attributes["max"] === undefined) {
|
|
188
|
+
return fail(`@${kind} requires expected="...", min="..." or max="...".`);
|
|
143
189
|
}
|
|
144
|
-
if (attributes[
|
|
145
|
-
bounds.min = parseCount(attributes[
|
|
146
|
-
if (attributes[
|
|
147
|
-
bounds.max = parseCount(attributes[
|
|
148
|
-
if (bounds.min !== undefined &&
|
|
190
|
+
if (attributes["min"] !== undefined)
|
|
191
|
+
bounds.min = parseCount(attributes["min"], "min");
|
|
192
|
+
if (attributes["max"] !== undefined)
|
|
193
|
+
bounds.max = parseCount(attributes["max"], "max");
|
|
194
|
+
if (bounds.min !== undefined &&
|
|
195
|
+
bounds.max !== undefined &&
|
|
196
|
+
bounds.min > bounds.max) {
|
|
149
197
|
return fail(`min="${bounds.min}" is greater than max="${bounds.max}".`);
|
|
150
198
|
}
|
|
151
199
|
}
|
|
152
200
|
}
|
|
201
|
+
if (isImportKind) {
|
|
202
|
+
const scope = targets.join(", ");
|
|
203
|
+
const excludeGlobs = splitList(attributes["exclude"]);
|
|
204
|
+
const except = excludeGlobs.length > 0
|
|
205
|
+
? ` (excluding ${excludeGlobs.join(", ")})`
|
|
206
|
+
: "";
|
|
207
|
+
const includeTypes = (attributes["types"] ?? "include").trim().toLowerCase() !== "ignore";
|
|
208
|
+
if (!["include", "ignore"].includes((attributes["types"] ?? "include").trim().toLowerCase())) {
|
|
209
|
+
return fail(`Attribute "types" must be include or ignore, got "${attributes["types"]}".`);
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
assertion: {
|
|
213
|
+
kind,
|
|
214
|
+
location,
|
|
215
|
+
description: `${scope} ${describeImportExpectation(bounds)} "${symbol}"${except}`,
|
|
216
|
+
reason,
|
|
217
|
+
symbol,
|
|
218
|
+
targets,
|
|
219
|
+
files: [],
|
|
220
|
+
bounds,
|
|
221
|
+
search: {
|
|
222
|
+
regex: false,
|
|
223
|
+
word: false,
|
|
224
|
+
ignoreCase: false,
|
|
225
|
+
globs: [],
|
|
226
|
+
excludeGlobs,
|
|
227
|
+
// Inert here - these options only reach enumerateCandidates, never a
|
|
228
|
+
// text search. It is set true because it is true: the tokenizer
|
|
229
|
+
// reads imports, so a module named in a comment was never a match.
|
|
230
|
+
ignoreComments: true,
|
|
231
|
+
scope: context.scope ?? DEFAULT_SCOPE,
|
|
232
|
+
excludeFiles: context.excludeFiles,
|
|
233
|
+
},
|
|
234
|
+
imports: { modules: splitList(symbol), includeTypes },
|
|
235
|
+
missingTargets: [],
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
153
239
|
const search = {
|
|
154
|
-
regex: parseBoolean(attributes[
|
|
155
|
-
word: parseBoolean(attributes[
|
|
156
|
-
ignoreCase: parseBoolean(attributes[
|
|
157
|
-
globs: splitList(attributes[
|
|
240
|
+
regex: parseBoolean(attributes["regex"], "regex"),
|
|
241
|
+
word: parseBoolean(attributes["word"], "word"),
|
|
242
|
+
ignoreCase: parseBoolean(attributes["ignore-case"], "ignore-case"),
|
|
243
|
+
globs: splitList(attributes["glob"]),
|
|
244
|
+
excludeGlobs: splitList(attributes["exclude"]),
|
|
245
|
+
ignoreComments: comments !== "include",
|
|
246
|
+
scope: context.scope ?? DEFAULT_SCOPE,
|
|
158
247
|
excludeFiles: context.excludeFiles,
|
|
159
248
|
};
|
|
160
249
|
if (search.regex) {
|
|
@@ -165,12 +254,15 @@ export function resolveDirective(directive, context) {
|
|
|
165
254
|
return fail(`Invalid regular expression: ${error instanceof Error ? error.message : String(error)}`);
|
|
166
255
|
}
|
|
167
256
|
}
|
|
168
|
-
const scope = targets.join(
|
|
257
|
+
const scope = targets.join(", ");
|
|
258
|
+
const except = search.excludeGlobs.length > 0
|
|
259
|
+
? ` (excluding ${search.excludeGlobs.join(", ")})`
|
|
260
|
+
: "";
|
|
169
261
|
return {
|
|
170
262
|
assertion: {
|
|
171
263
|
kind,
|
|
172
264
|
location,
|
|
173
|
-
description: `"${symbol}" ${describeExpectation(bounds)} in ${scope}`,
|
|
265
|
+
description: `"${symbol}" ${describeExpectation(bounds)} in ${scope}${except}`,
|
|
174
266
|
reason,
|
|
175
267
|
symbol,
|
|
176
268
|
targets,
|
|
@@ -205,8 +297,11 @@ async function prepareAssertion(assertion, options) {
|
|
|
205
297
|
files: assertion.files,
|
|
206
298
|
bounds: assertion.bounds,
|
|
207
299
|
warnings,
|
|
300
|
+
commentMatches: 0,
|
|
301
|
+
unclassifiedFiles: 0,
|
|
302
|
+
scope: EMPTY_LEDGER,
|
|
208
303
|
};
|
|
209
|
-
if (assertion.kind ===
|
|
304
|
+
if (assertion.kind === "assert-present") {
|
|
210
305
|
const missing = [];
|
|
211
306
|
for (const file of assertion.files) {
|
|
212
307
|
if (!(await pathExists(path.resolve(options.root, file))))
|
|
@@ -218,12 +313,15 @@ async function prepareAssertion(assertion, options) {
|
|
|
218
313
|
ok: missing.length === 0,
|
|
219
314
|
actual,
|
|
220
315
|
message: missing.length === 0
|
|
221
|
-
? `all ${assertion.files.length} referenced ${assertion.files.length === 1 ?
|
|
222
|
-
: `missing: ${missing.join(
|
|
316
|
+
? `all ${assertion.files.length} referenced ${assertion.files.length === 1 ? "path exists" : "paths exist"}`
|
|
317
|
+
: `missing: ${missing.join(", ")}`,
|
|
223
318
|
matches: [],
|
|
224
319
|
durationMs: performance.now() - startedAt,
|
|
225
320
|
};
|
|
226
321
|
}
|
|
322
|
+
if (assertion.imports) {
|
|
323
|
+
return executeImportAssertion(assertion, options, base, warnings, startedAt);
|
|
324
|
+
}
|
|
227
325
|
const existingTargets = [];
|
|
228
326
|
for (const target of assertion.targets) {
|
|
229
327
|
if (await pathExists(path.resolve(options.root, target)))
|
|
@@ -232,14 +330,14 @@ async function prepareAssertion(assertion, options) {
|
|
|
232
330
|
assertion.missingTargets.push(target);
|
|
233
331
|
}
|
|
234
332
|
if (assertion.missingTargets.length > 0) {
|
|
235
|
-
warnings.push(`target path${assertion.missingTargets.length === 1 ?
|
|
333
|
+
warnings.push(`target path${assertion.missingTargets.length === 1 ? "" : "s"} not found: ${assertion.missingTargets.join(", ")}`);
|
|
236
334
|
}
|
|
237
|
-
if (options.
|
|
335
|
+
if (!options.allowMissingTargets && assertion.missingTargets.length > 0) {
|
|
238
336
|
return {
|
|
239
337
|
...base,
|
|
240
338
|
ok: false,
|
|
241
339
|
actual: 0,
|
|
242
|
-
message: `target path${assertion.missingTargets.length === 1 ?
|
|
340
|
+
message: `target path${assertion.missingTargets.length === 1 ? " does" : "s do"} not exist: ${assertion.missingTargets.join(", ")}`,
|
|
243
341
|
matches: [],
|
|
244
342
|
durationMs: performance.now() - startedAt,
|
|
245
343
|
};
|
|
@@ -251,21 +349,109 @@ async function prepareAssertion(assertion, options) {
|
|
|
251
349
|
targets: existingTargets,
|
|
252
350
|
options: assertion.search,
|
|
253
351
|
},
|
|
254
|
-
finish: (search) =>
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
352
|
+
finish: (search) => {
|
|
353
|
+
// A file that could not be read, or whose bytes are not text but did
|
|
354
|
+
// contain the symbol, is a hole in the answer rather than a detail of it.
|
|
355
|
+
// The count is still reported, because it is still true of everything
|
|
356
|
+
// that was read; --strict is for runs where "true of what we read" is not
|
|
357
|
+
// good enough.
|
|
358
|
+
const gaps = search.scope.skipped.filter((entry) => UNCERTAIN_REASONS.has(entry.reason));
|
|
359
|
+
const strictFailure = options.strictTargets && gaps.length > 0;
|
|
360
|
+
return {
|
|
361
|
+
...base,
|
|
362
|
+
ok: satisfies(search.count, assertion.bounds) && !strictFailure,
|
|
363
|
+
actual: search.count,
|
|
364
|
+
message: strictFailure
|
|
365
|
+
? `expected ${describeBounds(assertion.bounds)}, found ${search.count}, and ${gaps.length} file${gaps.length === 1 ? "" : "s"} could not be inspected`
|
|
366
|
+
: `expected ${describeBounds(assertion.bounds)}, found ${search.count}`,
|
|
367
|
+
matches: search.matches.slice(0, options.maxSnippets),
|
|
368
|
+
// Carried as numbers, not prose, so the reporter can total them across a
|
|
369
|
+
// run and JSON consumers can act on them.
|
|
370
|
+
commentMatches: search.commentMatches,
|
|
371
|
+
unclassifiedFiles: search.unclassifiedFiles,
|
|
372
|
+
scope: search.scope,
|
|
373
|
+
engine: search.engine,
|
|
374
|
+
durationMs: performance.now() - startedAt,
|
|
375
|
+
};
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Counts the files in scope that depend on the requested module.
|
|
381
|
+
*
|
|
382
|
+
* The unit is files, not references: "two files import the database" is the
|
|
383
|
+
* useful statement, and it does not change when someone splits one import
|
|
384
|
+
* statement into two.
|
|
385
|
+
*/
|
|
386
|
+
async function executeImportAssertion(assertion, options, base, warnings, startedAt) {
|
|
387
|
+
const query = assertion.imports;
|
|
388
|
+
const existingTargets = [];
|
|
389
|
+
for (const target of assertion.targets) {
|
|
390
|
+
if (await pathExists(path.resolve(options.root, target)))
|
|
391
|
+
existingTargets.push(target);
|
|
392
|
+
else
|
|
393
|
+
assertion.missingTargets.push(target);
|
|
394
|
+
}
|
|
395
|
+
if (assertion.missingTargets.length > 0) {
|
|
396
|
+
warnings.push(`target path${assertion.missingTargets.length === 1 ? "" : "s"} not found: ${assertion.missingTargets.join(", ")}`);
|
|
397
|
+
}
|
|
398
|
+
const enumeration = await enumerateCandidates({
|
|
399
|
+
root: options.root,
|
|
400
|
+
symbol: "",
|
|
401
|
+
targets: existingTargets,
|
|
402
|
+
options: assertion.search,
|
|
403
|
+
});
|
|
404
|
+
const analysable = enumeration.files.filter((file) => ANALYSABLE_EXTENSIONS.has(path.posix.extname(file.relativePath)));
|
|
405
|
+
const skipped = enumeration.files.length - analysable.length;
|
|
406
|
+
if (skipped > 0) {
|
|
407
|
+
warnings.push(`analysed ${analysable.length} of ${enumeration.files.length} files; ${skipped} are not JavaScript or TypeScript`);
|
|
408
|
+
}
|
|
409
|
+
const matchesModule = createExcludeMatcher(query.modules);
|
|
410
|
+
const matches = [];
|
|
411
|
+
const unresolved = [];
|
|
412
|
+
for (const file of analysable) {
|
|
413
|
+
const analysis = await options.imports.analyze(file.absolutePath, file.relativePath);
|
|
414
|
+
for (const note of analysis.notes) {
|
|
415
|
+
unresolved.push(`${note.file}:${note.line} ${note.detail}`);
|
|
416
|
+
}
|
|
417
|
+
const hit = analysis.references.find((reference) => {
|
|
418
|
+
if (reference.typeOnly && !query.includeTypes)
|
|
419
|
+
return false;
|
|
420
|
+
return matchesModule(resolveSpecifier(reference.specifier, file.relativePath));
|
|
421
|
+
});
|
|
422
|
+
if (hit) {
|
|
423
|
+
matches.push({
|
|
424
|
+
file: file.relativePath,
|
|
425
|
+
line: hit.line,
|
|
426
|
+
column: hit.column,
|
|
427
|
+
text: `${hit.kind === "export" ? "export" : "import"} ${hit.specifier}`,
|
|
428
|
+
count: 1,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (unresolved.length > 0) {
|
|
433
|
+
warnings.push(`${unresolved.length} module reference${unresolved.length === 1 ? "" : "s"} could not be resolved statically`, ...unresolved.slice(0, options.maxSnippets).map((entry) => ` ${entry}`));
|
|
434
|
+
}
|
|
435
|
+
const missingFailure = !options.allowMissingTargets && assertion.missingTargets.length > 0;
|
|
436
|
+
const strictFailure = missingFailure || (options.strictTargets && unresolved.length > 0);
|
|
437
|
+
const ok = satisfies(matches.length, assertion.bounds) && !strictFailure;
|
|
438
|
+
return {
|
|
439
|
+
...base,
|
|
440
|
+
ok,
|
|
441
|
+
actual: matches.length,
|
|
442
|
+
message: missingFailure
|
|
443
|
+
? `target path${assertion.missingTargets.length === 1 ? " does" : "s do"} not exist: ${assertion.missingTargets.join(", ")}`
|
|
444
|
+
: strictFailure
|
|
445
|
+
? `expected ${describeBounds(assertion.bounds)}, found ${matches.length}, and ${unresolved.length} reference(s) could not be resolved`
|
|
446
|
+
: `expected ${describeBounds(assertion.bounds)}, found ${matches.length}`,
|
|
447
|
+
matches: matches.slice(0, options.maxSnippets),
|
|
448
|
+
durationMs: performance.now() - startedAt,
|
|
263
449
|
};
|
|
264
450
|
}
|
|
265
451
|
/** Executes a single resolved assertion. */
|
|
266
452
|
export async function executeAssertion(assertion, options) {
|
|
267
453
|
const prepared = await prepareAssertion(assertion, options);
|
|
268
|
-
if (!(
|
|
454
|
+
if (!("request" in prepared))
|
|
269
455
|
return prepared;
|
|
270
456
|
return prepared.finish(await options.engine.search(prepared.request));
|
|
271
457
|
}
|
|
@@ -276,7 +462,13 @@ export async function executeAssertion(assertion, options) {
|
|
|
276
462
|
*/
|
|
277
463
|
function groupKey(request) {
|
|
278
464
|
const { options } = request;
|
|
279
|
-
return JSON.stringify([
|
|
465
|
+
return JSON.stringify([
|
|
466
|
+
request.targets,
|
|
467
|
+
options.regex,
|
|
468
|
+
options.word,
|
|
469
|
+
options.ignoreCase,
|
|
470
|
+
options.globs,
|
|
471
|
+
]);
|
|
280
472
|
}
|
|
281
473
|
/** Reads, parses and executes every directive found in the given spec files. */
|
|
282
474
|
export async function runSpecGuard(options) {
|
|
@@ -284,16 +476,18 @@ export async function runSpecGuard(options) {
|
|
|
284
476
|
const root = path.resolve(options.root ?? process.cwd());
|
|
285
477
|
const maxSnippets = options.maxSnippets ?? DEFAULT_MAX_SNIPPETS;
|
|
286
478
|
const strictTargets = options.strictTargets ?? false;
|
|
479
|
+
const allowMissingTargets = options.allowMissingTargets ?? false;
|
|
480
|
+
const scope = createScope(options.defaultSkips ?? true);
|
|
287
481
|
const specFiles = await expandSpecPatterns(options.patterns, root);
|
|
288
482
|
const excludeFiles = new Set(options.includeSpecs ? [] : specFiles.map((file) => path.resolve(file)));
|
|
289
483
|
const directives = [];
|
|
290
484
|
const errors = [];
|
|
291
485
|
for (const file of specFiles) {
|
|
292
486
|
const relativeFile = toPosix(path.relative(root, file)) || toPosix(file);
|
|
293
|
-
const source = await fs.readFile(file,
|
|
487
|
+
const source = await fs.readFile(file, "utf8").catch((error) => {
|
|
294
488
|
errors.push({
|
|
295
489
|
location: { file, relativeFile, line: 1, column: 1 },
|
|
296
|
-
raw:
|
|
490
|
+
raw: "",
|
|
297
491
|
message: `Unable to read spec file: ${error instanceof Error ? error.message : String(error)}`,
|
|
298
492
|
});
|
|
299
493
|
return null;
|
|
@@ -306,14 +500,21 @@ export async function runSpecGuard(options) {
|
|
|
306
500
|
}
|
|
307
501
|
const assertions = [];
|
|
308
502
|
for (const directive of directives) {
|
|
309
|
-
const resolved = resolveDirective(directive, { root, excludeFiles });
|
|
310
|
-
if (
|
|
503
|
+
const resolved = resolveDirective(directive, { root, excludeFiles, scope });
|
|
504
|
+
if ("error" in resolved)
|
|
311
505
|
errors.push(resolved.error);
|
|
312
506
|
else
|
|
313
507
|
assertions.push(resolved.assertion);
|
|
314
508
|
}
|
|
315
|
-
const engine = createCachedEngine(await resolveEngine(options.engine ??
|
|
316
|
-
const executeOptions = {
|
|
509
|
+
const engine = createCachedEngine(await resolveEngine(options.engine ?? "auto"));
|
|
510
|
+
const executeOptions = {
|
|
511
|
+
root,
|
|
512
|
+
engine,
|
|
513
|
+
allowMissingTargets,
|
|
514
|
+
strictTargets,
|
|
515
|
+
maxSnippets,
|
|
516
|
+
imports: createImportIndex(),
|
|
517
|
+
};
|
|
317
518
|
const results = new Array(assertions.length);
|
|
318
519
|
if (options.failFast) {
|
|
319
520
|
// Fail-fast trades throughput for an early exit, so it runs unbatched.
|
|
@@ -330,7 +531,7 @@ export async function runSpecGuard(options) {
|
|
|
330
531
|
const prepared = await Promise.all(assertions.map((assertion) => prepareAssertion(assertion, executeOptions)));
|
|
331
532
|
const groups = new Map();
|
|
332
533
|
prepared.forEach((entry, index) => {
|
|
333
|
-
if (!(
|
|
534
|
+
if (!("request" in entry)) {
|
|
334
535
|
results[index] = entry;
|
|
335
536
|
return;
|
|
336
537
|
}
|
|
@@ -369,7 +570,7 @@ export async function runSpecGuard(options) {
|
|
|
369
570
|
return {
|
|
370
571
|
ok: failed === 0 && errors.length === 0,
|
|
371
572
|
root,
|
|
372
|
-
engine: warnings.length > 0 ?
|
|
573
|
+
engine: warnings.length > 0 ? "javascript" : engine.name,
|
|
373
574
|
durationMs: performance.now() - startedAt,
|
|
374
575
|
summary: {
|
|
375
576
|
specs: specFiles.length,
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|