doc-detective 4.41.5 → 4.42.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/README.md +18 -19
- package/bin/doc-detective-lsp.js +2 -0
- package/dist/agents/adapters/claude-code.js +1 -1
- package/dist/agents/adapters/claude-code.js.map +1 -1
- package/dist/agents/adapters/copilot-cli.js +2 -2
- package/dist/agents/adapters/copilot-cli.js.map +1 -1
- package/dist/agents/adapters/gemini-cli.js +1 -1
- package/dist/agents/adapters/gemini-cli.js.map +1 -1
- package/dist/agents/adapters/qwen-code.js +1 -1
- package/dist/agents/adapters/qwen-code.js.map +1 -1
- package/dist/cli.js +27 -6
- package/dist/cli.js.map +1 -1
- package/dist/common/src/schemas/schemas.json +2 -2
- package/dist/common/src/schemas/schemasReferenced.json +448 -294
- package/dist/common/src/schemas/validators.cjs +140 -124
- package/dist/common/src/schemas/validatorsCheck.cjs +1 -1
- package/dist/common/src/types/generated/annotate_v3.d.ts +12 -12
- package/dist/common/src/types/generated/annotate_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/annotation_v3.d.ts +6 -6
- package/dist/common/src/types/generated/annotation_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/checkLink_v3.d.ts +4 -0
- package/dist/common/src/types/generated/checkLink_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/click_v3.d.ts +2 -2
- package/dist/common/src/types/generated/click_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/config_v3.d.ts +260 -108
- package/dist/common/src/types/generated/config_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/context_v3.d.ts +10 -2
- package/dist/common/src/types/generated/context_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/dragAndDrop_v3.d.ts +2 -2
- package/dist/common/src/types/generated/dragAndDrop_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/find_v3.d.ts +6 -6
- package/dist/common/src/types/generated/find_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/goTo_v3.d.ts +1 -1
- package/dist/common/src/types/generated/goTo_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/httpRequest_v3.d.ts +2 -2
- package/dist/common/src/types/generated/httpRequest_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/record_v3.d.ts +5 -5
- package/dist/common/src/types/generated/record_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/report_v3.d.ts +529 -207
- package/dist/common/src/types/generated/report_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/resolvedTests_v3.d.ts +754 -314
- package/dist/common/src/types/generated/resolvedTests_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/runCode_v3.d.ts +11 -2
- package/dist/common/src/types/generated/runCode_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/runShell_v3.d.ts +11 -2
- package/dist/common/src/types/generated/runShell_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/screenshot_v3.d.ts +12 -12
- package/dist/common/src/types/generated/screenshot_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/spec_v3.d.ts +494 -206
- package/dist/common/src/types/generated/spec_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/startSurface_v3.d.ts +24 -6
- package/dist/common/src/types/generated/startSurface_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/step_v3.d.ts +223 -100
- package/dist/common/src/types/generated/step_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/test_v3.d.ts +482 -202
- package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/type_v3.d.ts +3 -3
- package/dist/common/src/types/generated/type_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/waitUntil_v3.d.ts +2 -2
- package/dist/common/src/types/generated/waitUntil_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/wait_v3.d.ts +2 -3
- package/dist/common/src/types/generated/wait_v3.d.ts.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +6 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/files.d.ts +18 -3
- package/dist/core/files.d.ts.map +1 -1
- package/dist/core/files.js +58 -18
- package/dist/core/files.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/integrations/index.d.ts +2 -1
- package/dist/core/integrations/index.d.ts.map +1 -1
- package/dist/core/integrations/index.js +15 -5
- package/dist/core/integrations/index.js.map +1 -1
- package/dist/core/openapi.d.ts.map +1 -1
- package/dist/core/openapi.js +122 -6
- package/dist/core/openapi.js.map +1 -1
- package/dist/core/ptyWatchdog.d.ts.map +1 -1
- package/dist/core/ptyWatchdog.js +6 -3
- package/dist/core/ptyWatchdog.js.map +1 -1
- package/dist/core/resolveTests.d.ts.map +1 -1
- package/dist/core/resolveTests.js +5 -3
- package/dist/core/resolveTests.js.map +1 -1
- package/dist/core/telem.d.ts.map +1 -1
- package/dist/core/telem.js +5 -7
- package/dist/core/telem.js.map +1 -1
- package/dist/core/tests/checkLink.d.ts.map +1 -1
- package/dist/core/tests/checkLink.js +12 -7
- package/dist/core/tests/checkLink.js.map +1 -1
- package/dist/core/tests/click.d.ts.map +1 -1
- package/dist/core/tests/click.js +7 -0
- package/dist/core/tests/click.js.map +1 -1
- package/dist/core/tests/findElement.d.ts.map +1 -1
- package/dist/core/tests/findElement.js +3 -2
- package/dist/core/tests/findElement.js.map +1 -1
- package/dist/core/tests/goTo.d.ts.map +1 -1
- package/dist/core/tests/goTo.js +2 -1
- package/dist/core/tests/goTo.js.map +1 -1
- package/dist/core/tests/httpRequest.d.ts.map +1 -1
- package/dist/core/tests/httpRequest.js +4 -5
- package/dist/core/tests/httpRequest.js.map +1 -1
- package/dist/core/tests/processSurface.d.ts +4 -1
- package/dist/core/tests/processSurface.d.ts.map +1 -1
- package/dist/core/tests/processSurface.js +3 -0
- package/dist/core/tests/processSurface.js.map +1 -1
- package/dist/core/tests/saveScreenshot.d.ts.map +1 -1
- package/dist/core/tests/saveScreenshot.js +8 -3
- package/dist/core/tests/saveScreenshot.js.map +1 -1
- package/dist/core/tests/startRecording.d.ts.map +1 -1
- package/dist/core/tests/startRecording.js +2 -1
- package/dist/core/tests/startRecording.js.map +1 -1
- package/dist/core/tests/stopRecording.d.ts.map +1 -1
- package/dist/core/tests/stopRecording.js +2 -1
- package/dist/core/tests/stopRecording.js.map +1 -1
- package/dist/core/tests/timing.d.ts +4 -0
- package/dist/core/tests/timing.d.ts.map +1 -0
- package/dist/core/tests/timing.js +8 -0
- package/dist/core/tests/timing.js.map +1 -0
- package/dist/core/tests.d.ts +15 -0
- package/dist/core/tests.d.ts.map +1 -1
- package/dist/core/tests.js +77 -30
- package/dist/core/tests.js.map +1 -1
- package/dist/core/utils.d.ts +42 -2
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +281 -89
- package/dist/core/utils.js.map +1 -1
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +8 -36
- package/dist/debug/index.js.map +1 -1
- package/dist/hints/hints.js +14 -14
- package/dist/hints/hints.js.map +1 -1
- package/dist/index.cjs +684 -235
- package/dist/reporters/htmlReporter.js +1 -1
- package/dist/runtime/cacheDir.d.ts.map +1 -1
- package/dist/runtime/cacheDir.js +6 -11
- package/dist/runtime/cacheDir.js.map +1 -1
- package/dist/runtime/heavyDeps.d.ts +12 -0
- package/dist/runtime/heavyDeps.d.ts.map +1 -1
- package/dist/runtime/heavyDeps.js +31 -7
- package/dist/runtime/heavyDeps.js.map +1 -1
- package/dist/runtime/selfUpdate.d.ts +3 -3
- package/dist/runtime/selfUpdate.d.ts.map +1 -1
- package/dist/runtime/selfUpdate.js +34 -5
- package/dist/runtime/selfUpdate.js.map +1 -1
- package/dist/upgradeNotice.d.ts +41 -0
- package/dist/upgradeNotice.d.ts.map +1 -0
- package/dist/upgradeNotice.js +356 -0
- package/dist/upgradeNotice.js.map +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +17 -8
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
- package/scripts/postinstall.js +1 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
// Warnings on 4.x about what 5.0 changes or removes (ADR 01147). They go to
|
|
2
|
+
// stderr, so stdout stays clean for --dry-run JSON and LSP traffic. Keep this
|
|
3
|
+
// module free of heavy imports: the bare bins load it too.
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
const UPGRADE_GUIDE_URL = "https://docs.doc-detective.com/docs/ci/upgrade-to-v5";
|
|
7
|
+
const REMOVED_BINS = {
|
|
8
|
+
"doc-detective-lsp": "Use `doc-detective lsp --stdio`, which works today.",
|
|
9
|
+
};
|
|
10
|
+
// Each exact message prints once per process. Spec rows name their file, so a
|
|
11
|
+
// later `runTests` call in the same process still warns about a new file, but
|
|
12
|
+
// not about the same issue in a file it already warned about. Every caller
|
|
13
|
+
// shares this set, including programmatic `runTests` calls.
|
|
14
|
+
const warned = new Set();
|
|
15
|
+
// The Action's legacy path runs v4 on purpose and has its own notice.
|
|
16
|
+
function isAction() {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(process.env.DOC_DETECTIVE_META || "{}").dist_interface === "github-actions";
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function warnUpgrade(messages, logLevel) {
|
|
25
|
+
if (logLevel === "silent" || isAction())
|
|
26
|
+
return;
|
|
27
|
+
for (const message of messages) {
|
|
28
|
+
if (warned.has(message))
|
|
29
|
+
continue;
|
|
30
|
+
warned.add(message);
|
|
31
|
+
console.error(`Warning: ${message} See ${UPGRADE_GUIDE_URL}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function warnRemovedBin(bin) {
|
|
35
|
+
warnUpgrade([`\`${bin}\` is removed in Doc Detective 5.0. ${REMOVED_BINS[bin]}`]);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Warnings for a command line. `commands` is yargs' parsed `_`; `rawArgs` is the
|
|
39
|
+
* unparsed argv, because yargs fills in both `-a` and `--agent` and can't tell
|
|
40
|
+
* which one the user typed.
|
|
41
|
+
*/
|
|
42
|
+
export function commandWarnings(commands, rawArgs) {
|
|
43
|
+
const messages = [];
|
|
44
|
+
const installAgents = commands[0] === "install-agents";
|
|
45
|
+
if (installAgents) {
|
|
46
|
+
messages.push("`install-agents` is removed in Doc Detective 5.0. Use `install agents`, which works today.");
|
|
47
|
+
}
|
|
48
|
+
if ((installAgents || (commands[0] === "install" && commands[1] === "agents")) &&
|
|
49
|
+
rawArgs.some((arg) => /^-[^-]*[as]/.test(arg))) {
|
|
50
|
+
messages.push("`-a` and `-s` are removed in Doc Detective 5.0. Use `--agent` and `--scope`, which work today.");
|
|
51
|
+
}
|
|
52
|
+
if (commands[0] === "install" && rawArgs.some((arg) => arg === "--silent" || arg.startsWith("--silent="))) {
|
|
53
|
+
messages.push("`install --silent` is removed in Doc Detective 5.0. Use `--quiet`, which works today.");
|
|
54
|
+
}
|
|
55
|
+
return messages;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether an `output` setting names a folder. 4.x treats any path without a
|
|
59
|
+
* file extension as a folder and creates it. `raw` is the value as written,
|
|
60
|
+
* since resolving it strips a trailing slash. Unset means the default, which
|
|
61
|
+
* the user didn't choose.
|
|
62
|
+
*/
|
|
63
|
+
export function namesFolder(raw, resolved) {
|
|
64
|
+
if (typeof raw !== "string" || raw.length === 0)
|
|
65
|
+
return false;
|
|
66
|
+
if (/[\\/]$/.test(raw) || !path.extname(resolved))
|
|
67
|
+
return true;
|
|
68
|
+
try {
|
|
69
|
+
return fs.statSync(resolved).isDirectory();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function outputWarnings(raw, resolved) {
|
|
76
|
+
return namesFolder(raw, resolved)
|
|
77
|
+
? [
|
|
78
|
+
`In Doc Detective 5.0, \`--output\` and \`output\` name the results file. Use \`--output-dir\` for a folder when you upgrade. Your output path ('${raw}') names a folder, and 4.x treats a path without a file extension as a folder.`,
|
|
79
|
+
]
|
|
80
|
+
: [];
|
|
81
|
+
}
|
|
82
|
+
export function concurrentRunnersWarnings(value) {
|
|
83
|
+
return value === ""
|
|
84
|
+
? [
|
|
85
|
+
"`--concurrent-runners` with no value is removed in Doc Detective 5.0. Use `--concurrent-runners true`, which works today.",
|
|
86
|
+
]
|
|
87
|
+
: [];
|
|
88
|
+
}
|
|
89
|
+
/** `-r` with several values, and repeated `-t` or `-s`, from yargs' parsed args. */
|
|
90
|
+
export function flagWarnings(args) {
|
|
91
|
+
const messages = [];
|
|
92
|
+
// `reporters` is declared with `array: true` in buildYargs (src/utils.ts), so
|
|
93
|
+
// both `-r a b` and `-r a -r b` arrive as an array of several values.
|
|
94
|
+
if (Array.isArray(args.reporters) && args.reporters.length > 1) {
|
|
95
|
+
// 4.x reads `-r terminal,html` as one unknown reporter, so that form has to wait.
|
|
96
|
+
messages.push("`--reporters` takes one comma-separated value in Doc Detective 5.0, like `-r terminal,html`, which 4.x doesn't read. Switch when you upgrade, or set `reporters` in your config file, which works on both.");
|
|
97
|
+
}
|
|
98
|
+
for (const flag of ["test", "spec"]) {
|
|
99
|
+
const values = args[flag];
|
|
100
|
+
// Relies on yargs collecting a repeated `type: "string"` option (`-t a -t b`) into an
|
|
101
|
+
// array; the "setup rows prints them from the CLI" test guards that.
|
|
102
|
+
if (Array.isArray(values) && values.length > 1) {
|
|
103
|
+
messages.push(`\`--${flag}\` is given more than once, so 4.x ignores it and Doc Detective 5.0 exits with a usage error. Give one comma-separated value, \`--${flag} ${values.join(",")}\`, which works today.`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return messages;
|
|
107
|
+
}
|
|
108
|
+
// How 4.x reads each boolean env var. 5.0 reads them all as on for
|
|
109
|
+
// 1/true/yes/on and off for 0/false/no/off. `on` and `off` are the settings
|
|
110
|
+
// that mean the same on both.
|
|
111
|
+
const BOOLEAN_ENV = {
|
|
112
|
+
DOC_DETECTIVE_DEBUG: { v4: (v) => /^(1|true|yes)$/i.test(v.trim()) },
|
|
113
|
+
DOC_DETECTIVE_SKIP_AUTO_UPDATE: { v4: Boolean },
|
|
114
|
+
DOC_DETECTIVE_SKIP_AGENT_PROMPT: { v4: Boolean },
|
|
115
|
+
DOC_DETECTIVE_RUNTIME_DEBUG: { v4: (v) => v === "1" },
|
|
116
|
+
DOC_DETECTIVE_NO_ANDROID_AUTOINSTALL: { v4: (v) => v === "1" },
|
|
117
|
+
DOC_DETECTIVE_REUSE_APPIUM: { v4: (v) => v === "true" || v === "1" },
|
|
118
|
+
DOC_DETECTIVE_ALLOW_LOCAL_URLS: { v4: (v) => v === "true", on: "true" },
|
|
119
|
+
DOC_DETECTIVE_AUTOINSTALL: {
|
|
120
|
+
v4: (v) => !["0", "false", "no", "off"].includes(v.trim().toLowerCase()),
|
|
121
|
+
off: "`0`",
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
function readsAs5(value) {
|
|
125
|
+
const v = value.trim().toLowerCase();
|
|
126
|
+
if (["1", "true", "yes", "on"].includes(v))
|
|
127
|
+
return true;
|
|
128
|
+
if (["", "0", "false", "no", "off"].includes(v))
|
|
129
|
+
return false;
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
/** The legacy `DOC_DETECTIVE` env var as an object, or `{}` when it's unset or not JSON. */
|
|
133
|
+
export function legacyEnv(env) {
|
|
134
|
+
try {
|
|
135
|
+
const parsed = JSON.parse(env.DOC_DETECTIVE || "{}");
|
|
136
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return {};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** The legacy `DOC_DETECTIVE` env var, and boolean env vars 5.0 reads differently. */
|
|
143
|
+
export function envWarnings(env, config) {
|
|
144
|
+
const messages = [];
|
|
145
|
+
const legacy = legacyEnv(env);
|
|
146
|
+
if (legacy.config && typeof legacy.config === "object") {
|
|
147
|
+
messages.push("`DOC_DETECTIVE` is deprecated in Doc Detective 5.0, and its `config` object merges below `DOC_DETECTIVE_CONFIG` and flags instead of above them. Move it to `DOC_DETECTIVE_CONFIG`, which works today.");
|
|
148
|
+
}
|
|
149
|
+
// The official images set this value themselves, and their 5.0 builds allow
|
|
150
|
+
// unsafe steps in config, so only other images need to act.
|
|
151
|
+
const officialImage = /^docdetective\/docdetective:/.test(String(legacy.container));
|
|
152
|
+
// Deliberately strict: an explicit `false` has already opted out, so it needs no migration.
|
|
153
|
+
if (legacy.container && !officialImage && config.allowUnsafeSteps === undefined) {
|
|
154
|
+
messages.push("`DOC_DETECTIVE` has a `container` key, which allows unsafe steps today but not in Doc Detective 5.0. To keep running them, set `allowUnsafeSteps: true` in your config, which works today.");
|
|
155
|
+
}
|
|
156
|
+
for (const [name, { v4, on = "1", off = "unset it" }] of Object.entries(BOOLEAN_ENV)) {
|
|
157
|
+
const value = env[name];
|
|
158
|
+
// An empty value still counts: DOC_DETECTIVE_AUTOINSTALL reads it as on today.
|
|
159
|
+
if (value === undefined)
|
|
160
|
+
continue;
|
|
161
|
+
const today = v4(value);
|
|
162
|
+
const next = readsAs5(value);
|
|
163
|
+
if (next === today)
|
|
164
|
+
continue;
|
|
165
|
+
const reads = next === undefined
|
|
166
|
+
? "Doc Detective 5.0 doesn't accept"
|
|
167
|
+
: `turns it ${today ? "on" : "off"} today and ${next ? "on" : "off"} in Doc Detective 5.0`;
|
|
168
|
+
messages.push(`\`${name}\` is '${value}', which ${reads}. Set it to \`${on}\` for on, or ${off} for off, which works today.`);
|
|
169
|
+
}
|
|
170
|
+
return messages;
|
|
171
|
+
}
|
|
172
|
+
/** Browsers loading from a legacy `browser-snapshots` folder, which 5.0 ignores. */
|
|
173
|
+
export function browsersDirWarnings(dir) {
|
|
174
|
+
return path.basename(dir) === "browser-snapshots"
|
|
175
|
+
? [
|
|
176
|
+
`Doc Detective uses browsers from '${dir}'. Doc Detective 5.0 ignores \`browser-snapshots\` folders and installs browsers into \`<cacheDir>/browsers\`. To switch now, delete the folder or set \`cacheDir\`.`,
|
|
177
|
+
]
|
|
178
|
+
: [];
|
|
179
|
+
}
|
|
180
|
+
const REPORTERS = ["terminal", "json", "html", "runFolder", "junit", "markdown"];
|
|
181
|
+
/** Config values 5.0 validates more strictly. */
|
|
182
|
+
export function configWarnings(config) {
|
|
183
|
+
const messages = [];
|
|
184
|
+
// `-r terminal,html` arrives comma-joined, and 5.0 splits it.
|
|
185
|
+
const names = (Array.isArray(config.reporters) ? config.reporters : [])
|
|
186
|
+
.flatMap((name) => (typeof name === "string" ? name.split(",").map((part) => part.trim()) : []))
|
|
187
|
+
.filter(Boolean);
|
|
188
|
+
for (const name of names) {
|
|
189
|
+
if (!REPORTERS.includes(name)) {
|
|
190
|
+
messages.push(`\`reporters\` has '${name}'. Doc Detective 5.0 exits 2 unless each name is exactly \`terminal\`, \`json\`, \`html\`, \`runFolder\`, \`junit\`, or \`markdown\`, which work today.`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return messages;
|
|
194
|
+
}
|
|
195
|
+
const ROUTING = ["onPass", "onFail", "onWarning", "onSkip"];
|
|
196
|
+
const LOCATORS = ["selector", "elementText", "elementId", "elementTestId", "elementClass", "elementAttribute", "elementAria"];
|
|
197
|
+
const REJECTS = "Doc Detective 5.0 rejects with exit 2";
|
|
198
|
+
const EXIT_2 = `which ${REJECTS}`;
|
|
199
|
+
function routes(owner) {
|
|
200
|
+
return ROUTING.flatMap((key) => (Array.isArray(owner[key]) ? owner[key] : []));
|
|
201
|
+
}
|
|
202
|
+
function testWarnings(test, where) {
|
|
203
|
+
return routes(test).flatMap((route) => [
|
|
204
|
+
...(route.stop === "run"
|
|
205
|
+
? [`A test in ${where} has \`stop: "run"\` in its routing, ${EXIT_2}. Use \`stop: "spec"\`, which is what 4.x does.`]
|
|
206
|
+
: []),
|
|
207
|
+
...["retry", "goToStep"]
|
|
208
|
+
.filter((key) => key in route)
|
|
209
|
+
.map((key) => `A test in ${where} has \`${key}\` in its routing, which 4.x ignores and ${REJECTS}. Remove it, or move it to a step.`),
|
|
210
|
+
]);
|
|
211
|
+
}
|
|
212
|
+
// Subtrees that hold the user's own data, where a `timeout` key isn't one of ours.
|
|
213
|
+
// Keep this in sync with the schemas' free-form boundaries.
|
|
214
|
+
const FREE_FORM = new Set([
|
|
215
|
+
"request",
|
|
216
|
+
"response",
|
|
217
|
+
"headers",
|
|
218
|
+
"body",
|
|
219
|
+
"params",
|
|
220
|
+
"parameters",
|
|
221
|
+
"elementAttribute",
|
|
222
|
+
"variables",
|
|
223
|
+
"outputs",
|
|
224
|
+
"env",
|
|
225
|
+
"driverOptions",
|
|
226
|
+
"openApi",
|
|
227
|
+
]);
|
|
228
|
+
// Negative `wait`, `*timeout`, `*duration`, and `*delay` numbers in a step,
|
|
229
|
+
// which 5.0 rejects anywhere. It walks authored steps: shallow, parsed JSON/YAML
|
|
230
|
+
// with no cycles, so the recursion needs no depth limit or cycle guard.
|
|
231
|
+
function negatives(value, found = new Set()) {
|
|
232
|
+
if (value && typeof value === "object") {
|
|
233
|
+
for (const [key, child] of Object.entries(value)) {
|
|
234
|
+
if (FREE_FORM.has(key))
|
|
235
|
+
continue;
|
|
236
|
+
if (typeof child === "number" && child < 0 && (key === "wait" || /(timeout|duration|delay)$/i.test(key)))
|
|
237
|
+
found.add(key);
|
|
238
|
+
negatives(child, found);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return found;
|
|
242
|
+
}
|
|
243
|
+
function offend(offenders, row, value, message) {
|
|
244
|
+
if (!offenders.has(row))
|
|
245
|
+
offenders.set(row, { values: new Set(), message });
|
|
246
|
+
offenders.get(row).values.add(value);
|
|
247
|
+
}
|
|
248
|
+
function stepWarnings(step, where, offenders) {
|
|
249
|
+
const messages = [];
|
|
250
|
+
for (const route of routes(step)) {
|
|
251
|
+
if (route.stop === "spec" || route.stop === "run") {
|
|
252
|
+
messages.push(`A step in ${where} has \`stop: "${route.stop}"\` in its routing, ${EXIT_2}. Use \`stop: "test"\` on the step and \`stop: "spec"\` on the test, which works today.`);
|
|
253
|
+
}
|
|
254
|
+
if ("goToTest" in route) {
|
|
255
|
+
messages.push(`A step in ${where} has \`goToTest\` in its routing, which 4.x ignores and ${REJECTS}. Move it to the test's routing, which works today.`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (typeof step.click === "boolean") {
|
|
259
|
+
messages.push(`A \`click\` step in ${where} is \`${step.click}\`, which 4.x reads as text to click and ${REJECTS}. To click an element whose text is '${step.click}', quote it as \`"click": "${step.click}"\`, which works today. If you don't want a click, remove the step.`);
|
|
260
|
+
}
|
|
261
|
+
const objects = (value) => [value].flat().filter((s) => s && typeof s === "object");
|
|
262
|
+
if (objects(step.startSurface).concat(objects(step.closeSurface)).some((s) => s.browser === "edge")) {
|
|
263
|
+
messages.push(`A surface in ${where} uses \`browser: "edge"\`, which Doc Detective 5.0 removes. Use another \`browser\`, such as \`chrome\`, which works today.`);
|
|
264
|
+
}
|
|
265
|
+
const starts = objects(step.startSurface);
|
|
266
|
+
for (const surface of starts) {
|
|
267
|
+
// A string device names a device, so only an object can hold these keys.
|
|
268
|
+
const device = surface.device && typeof surface.device === "object" ? surface.device : {};
|
|
269
|
+
const removed = ["orientation", "udid", "provider"].filter((key) => key in device);
|
|
270
|
+
if (removed.length) {
|
|
271
|
+
messages.push(`A \`startSurface\` device in ${where} sets ${removed.map((key) => `\`${key}\``).join(", ")}, which Doc Detective 5.0 removes. Remove ${removed.length > 1 ? "them" : "it"}, which works today.`);
|
|
272
|
+
}
|
|
273
|
+
if (surface.app != null && surface.workingDirectory === ".") {
|
|
274
|
+
messages.push(`An app in ${where} sets \`workingDirectory: "."\`, which 4.x tolerates and Doc Detective 5.0 fails. Remove it, which works today.`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const zeroTimeouts = [
|
|
278
|
+
...["runShell", "runCode", "goTo", "httpRequest"].filter((action) => step[action]?.timeout === 0),
|
|
279
|
+
...(starts.some((s) => s.timeout === 0) ? ["startSurface"] : []),
|
|
280
|
+
];
|
|
281
|
+
for (const action of zeroTimeouts) {
|
|
282
|
+
messages.push(`A \`${action}\` step in ${where} sets \`timeout: 0\`, ${EXIT_2} on \`runShell\`, \`runCode\`, \`goTo\`, \`httpRequest\`, and \`startSurface\` processes and apps. Remove \`timeout\` for the default, or set it to 1 or more, which works today. Locator and wait timeouts can still be 0.`);
|
|
283
|
+
}
|
|
284
|
+
for (const key of negatives(step)) {
|
|
285
|
+
messages.push(`A step in ${where} has a negative \`${key}\`, ${EXIT_2}. Use a positive value, which works today.`);
|
|
286
|
+
}
|
|
287
|
+
if (step.screenshot === false) {
|
|
288
|
+
messages.push(`A \`screenshot: false\` step in ${where} takes a screenshot today, and Doc Detective 5.0 skips it. To keep the screenshot, use \`screenshot: true\`, which works today.`);
|
|
289
|
+
}
|
|
290
|
+
const find = step.find && typeof step.find === "object" ? step.find : {};
|
|
291
|
+
const click = find.click;
|
|
292
|
+
if ((typeof click === "string" && !["left", "right", "middle"].includes(click)) ||
|
|
293
|
+
(click && typeof click === "object" && Object.keys(click).some((key) => key !== "button" && key !== "duration"))) {
|
|
294
|
+
messages.push(`A \`find.click\` in ${where} isn't \`true\`, \`false\`, a button, or \`{button, duration}\`, ${EXIT_2}. Use \`click: true\` to click the found element, or a separate \`click\` step, which works today.`);
|
|
295
|
+
}
|
|
296
|
+
if (find.type && typeof find.type === "object" && LOCATORS.some((key) => key in find.type)) {
|
|
297
|
+
messages.push(`A \`find.type\` in ${where} sets its own locator, ${EXIT_2}. Move it to a separate \`type\` step, which works today.`);
|
|
298
|
+
}
|
|
299
|
+
for (const action of ["goTo", "httpRequest"]) {
|
|
300
|
+
const url = typeof step[action] === "string" ? step[action] : step[action]?.url;
|
|
301
|
+
if (typeof url === "string" && !/^(https?:\/\/|\/)/.test(url) && !/^\$[A-Za-z0-9_]+$/.test(url)) {
|
|
302
|
+
offend(offenders, `${action} URL`, url, (first) => `A \`${action}\` URL in ${where} (${first}) doesn't start with \`http://\`, \`https://\`, or \`/\`, and isn't a whole \`$VAR\`, ${EXIT_2}. Put the whole URL in one variable, which works today.`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
for (const action of ["saveCookie", "loadCookie"]) {
|
|
306
|
+
const value = step[action];
|
|
307
|
+
if (typeof value === "string" && value.includes("/") && !value.endsWith(".txt")) {
|
|
308
|
+
offend(offenders, action, value, (first) => `A \`${action}\` in ${where} (${first}) has a \`/\` but doesn't end in \`.txt\`, ${EXIT_2}. End a file path in \`.txt\`, which works today.`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return messages;
|
|
312
|
+
}
|
|
313
|
+
/** Spec content 5.0 rejects or reads differently, from resolved tests. */
|
|
314
|
+
export function specWarnings(resolvedTests) {
|
|
315
|
+
const messages = [];
|
|
316
|
+
for (const spec of resolvedTests?.specs ?? []) {
|
|
317
|
+
const file = spec.contentPath;
|
|
318
|
+
const where = typeof file === "string" ? `'${path.isAbsolute(file) ? path.relative(process.cwd(), file) : file}'` : "a spec";
|
|
319
|
+
const offenders = new Map();
|
|
320
|
+
for (const test of spec.tests ?? []) {
|
|
321
|
+
messages.push(...testWarnings(test, where));
|
|
322
|
+
for (const context of test.contexts ?? []) {
|
|
323
|
+
for (const step of context.steps ?? [])
|
|
324
|
+
messages.push(...stepWarnings(step, where, offenders));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
for (const { values, message } of offenders.values()) {
|
|
328
|
+
const [first] = values;
|
|
329
|
+
messages.push(message(values.size > 1 ? `\`${first}\` and ${values.size - 1} more` : `\`${first}\``));
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return [...new Set(messages)];
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Warnings for a finished run. `exitOnFail` is the raw config value: undefined
|
|
336
|
+
* means the user didn't choose, and false is already the 5.0 way to keep exit 0.
|
|
337
|
+
*/
|
|
338
|
+
export function runResultWarnings(exitOnFail, failed, results) {
|
|
339
|
+
if (exitOnFail === false)
|
|
340
|
+
return [];
|
|
341
|
+
const specs = results?.summary?.specs;
|
|
342
|
+
const testedNothing = !results || (!!specs && [specs.pass, specs.fail, specs.warning, specs.skipped].every((n) => !n));
|
|
343
|
+
if (testedNothing) {
|
|
344
|
+
const fix = exitOnFail === true
|
|
345
|
+
? "Make sure your inputs always find tests."
|
|
346
|
+
: "To allow empty runs, set `--no-exit-on-fail`, which also stops failed tests from failing the run. Otherwise, make sure your inputs always find tests.";
|
|
347
|
+
return [`This run tested nothing. Doc Detective 5.0 will exit 2 instead of 0. ${fix}`];
|
|
348
|
+
}
|
|
349
|
+
if (failed && exitOnFail === undefined) {
|
|
350
|
+
return [
|
|
351
|
+
"This run has failed specs. Doc Detective 5.0 will exit 1 instead of 0. To keep exit 0, set `--no-exit-on-fail`.",
|
|
352
|
+
];
|
|
353
|
+
}
|
|
354
|
+
return [];
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=upgradeNotice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeNotice.js","sourceRoot":"","sources":["../src/upgradeNotice.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,GAAG,EACH,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,CAAC;AASF,iBAAS,gBAAgB,IAAI,OAAO,CAKnC;AAQD,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAQ,GAAG,OAAO,CAMjE;AAED,iBAAS,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,GAAE,MAAe,EAAE,MAAM,GAAE,GAAQ,QASlE;AAMD,iBAAS,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CA4GlC;AAGD,iBAAS,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAG/B;AAGD,iBAAe,uBAAuB,CAAC,MAAM,GAAE,GAAQ;;;UAyEtD;AA8CD,iBAAe,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,gBA0O7E;AAuCD,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CA2mBzG,CAAC;AAGF,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAM5D;AAED,iBAAe,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,iBA4DpF;AAED,iBAAe,aAAa,CAAC,MAAM,EAAE,GAAG,YAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ,kBA8E9F;AAGD,iBAAe,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE;;;;GAwCvD;AAED,iBAAS,OAAO,SAsBf;AAGD,iBAAS,cAAc,QA8GtB"}
|
package/dist/utils.js
CHANGED
|
@@ -3,12 +3,13 @@ import { hideBin } from "yargs/helpers";
|
|
|
3
3
|
import { validate } from "./common/src/validate.js";
|
|
4
4
|
import { resolvePaths, readFile } from "./core/index.js";
|
|
5
5
|
import { getRunOutputDir, loadAxios } from "./core/utils.js";
|
|
6
|
+
import { browsersDirWarnings, concurrentRunnersWarnings, configWarnings, envWarnings, flagWarnings, outputWarnings, warnUpgrade, } from "./upgradeNotice.js";
|
|
7
|
+
import { getBrowsersDir } from "./runtime/cacheDir.js";
|
|
6
8
|
import path from "node:path";
|
|
7
9
|
import fs from "node:fs";
|
|
8
10
|
import { spawn } from "node:child_process";
|
|
9
11
|
import os from "node:os";
|
|
10
|
-
import {
|
|
11
|
-
const require = createRequire(import.meta.url);
|
|
12
|
+
import { ownVersion, readShimPackageJson } from "./runtime/heavyDeps.js";
|
|
12
13
|
export { buildYargs, setArgs, setConfig, outputResults, spawnCommand, setMeta, getVersionData, log, logLevelEnabled, getResolvedTestsFromEnv, reportResults, reporters, registerReporter, isDebugRequested, };
|
|
13
14
|
// True when `DOC_DETECTIVE_DEBUG` env var is set to a truthy value.
|
|
14
15
|
// Used by `runTestsHandler` in cli.ts to decide whether to catch
|
|
@@ -123,7 +124,7 @@ function buildYargs(args) {
|
|
|
123
124
|
type: "string",
|
|
124
125
|
})
|
|
125
126
|
.option("concurrent-runners", {
|
|
126
|
-
description: "Number of test contexts to run concurrently (default 1). Pass a number (for example, --concurrent-runners 4), or pass
|
|
127
|
+
description: "Number of test contexts to run concurrently (default 1). Pass a number (for example, --concurrent-runners 4), or pass true to use the CPU core count (capped at 4). With more than 1 runner, log lines from different contexts interleave and cross-context variable dependencies are unsupported.",
|
|
127
128
|
type: "string",
|
|
128
129
|
})
|
|
129
130
|
.option("browser-fallback", {
|
|
@@ -139,7 +140,7 @@ function buildYargs(args) {
|
|
|
139
140
|
description: "Exit with a non-zero code (1) when any spec's result is FAIL, so a documentation-testing job fails the build like a broken unit test. Off by default: the CLI otherwise exits 0 on test failures (non-zero only on a crash or invalid config). WARNING results are non-fatal. Use --no-exit-on-fail to override a config file that enables it.",
|
|
140
141
|
type: "boolean",
|
|
141
142
|
})
|
|
142
|
-
.version(
|
|
143
|
+
.version(ownVersion() ?? "unknown")
|
|
143
144
|
.help()
|
|
144
145
|
.alias("help", "h");
|
|
145
146
|
}
|
|
@@ -264,6 +265,8 @@ async function setConfig({ configPath, args }) {
|
|
|
264
265
|
// Merge with file config, preferring environment variable config (use raw envConfig, not validated with defaults)
|
|
265
266
|
config = { ...config, ...envConfig };
|
|
266
267
|
}
|
|
268
|
+
// Read before validation fills in the default, which the user didn't choose.
|
|
269
|
+
const outputSetting = args.output || config.output;
|
|
267
270
|
// Validate config
|
|
268
271
|
const validation = validate({
|
|
269
272
|
schemaKey: "config_v3",
|
|
@@ -431,6 +434,14 @@ async function setConfig({ configPath, args }) {
|
|
|
431
434
|
nested: false,
|
|
432
435
|
objectType: "config",
|
|
433
436
|
});
|
|
437
|
+
warnUpgrade([
|
|
438
|
+
...outputWarnings(outputSetting, String(config.output)),
|
|
439
|
+
...concurrentRunnersWarnings(args.concurrentRunners),
|
|
440
|
+
...flagWarnings(args),
|
|
441
|
+
...envWarnings(process.env, config),
|
|
442
|
+
...configWarnings(config),
|
|
443
|
+
...browsersDirWarnings(getBrowsersDir({ cacheDir: config.cacheDir })),
|
|
444
|
+
], config.logLevel);
|
|
434
445
|
return config;
|
|
435
446
|
}
|
|
436
447
|
// Resolve the directory the runFolder reporter's `.doc-detective/` archive
|
|
@@ -1159,9 +1170,8 @@ function setMeta() {
|
|
|
1159
1170
|
const meta = process.env["DOC_DETECTIVE_META"] !== undefined
|
|
1160
1171
|
? JSON.parse(process.env["DOC_DETECTIVE_META"])
|
|
1161
1172
|
: {};
|
|
1162
|
-
const pkg = require("../package.json");
|
|
1163
1173
|
meta.distribution = "doc-detective";
|
|
1164
|
-
meta.dist_version =
|
|
1174
|
+
meta.dist_version = ownVersion();
|
|
1165
1175
|
meta.dist_platform = platformMap[os.platform()] || os.platform();
|
|
1166
1176
|
meta.dist_platform_version = os.release();
|
|
1167
1177
|
meta.dist_platform_arch = os.arch();
|
|
@@ -1174,8 +1184,7 @@ function setMeta() {
|
|
|
1174
1184
|
// Get version data programmatically (no console output)
|
|
1175
1185
|
function getVersionData() {
|
|
1176
1186
|
try {
|
|
1177
|
-
|
|
1178
|
-
const mainPackage = require("../package.json");
|
|
1187
|
+
const mainPackage = readShimPackageJson();
|
|
1179
1188
|
const versionData = {
|
|
1180
1189
|
main: {
|
|
1181
1190
|
"doc-detective": {
|