checkly 9.1.0 → 9.2.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/dist/ai-context/skills-command/references/configure-playwright-checks.md +2 -2
- package/dist/constructs/playwright-check.d.ts +1 -1
- package/dist/constructs/playwright-check.js +3 -2
- package/dist/constructs/playwright-check.js.map +1 -1
- package/dist/services/check-parser/lockfile-pruner.d.ts +11 -0
- package/dist/services/check-parser/lockfile-pruner.js +300 -83
- package/dist/services/check-parser/lockfile-pruner.js.map +1 -1
- package/dist/services/check-parser/package-files/package-manager.d.ts +34 -2
- package/dist/services/check-parser/package-files/package-manager.js +82 -5
- package/dist/services/check-parser/package-files/package-manager.js.map +1 -1
- package/dist/services/engine-detector.d.ts +11 -1
- package/dist/services/engine-detector.js +94 -22
- package/dist/services/engine-detector.js.map +1 -1
- package/dist/testing/capture-stderr.d.ts +6 -0
- package/dist/testing/capture-stderr.js +21 -0
- package/dist/testing/capture-stderr.js.map +1 -0
- package/oclif.manifest.json +445 -445
- package/package.json +1 -1
|
@@ -2,6 +2,8 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import semver from 'semver';
|
|
4
4
|
import { Engine } from '../constructs/engine.js';
|
|
5
|
+
import { JsonSourceFile } from './check-parser/package-files/json-source-file.js';
|
|
6
|
+
import { lineage } from './check-parser/package-files/walk.js';
|
|
5
7
|
import { resolveEngineVersion } from './engine-resolver.js';
|
|
6
8
|
async function readFileIfExists(filePath) {
|
|
7
9
|
try {
|
|
@@ -11,6 +13,12 @@ async function readFileIfExists(filePath) {
|
|
|
11
13
|
return undefined;
|
|
12
14
|
}
|
|
13
15
|
}
|
|
16
|
+
// Untyped read: the `volta` field is not part of the package.json schema the
|
|
17
|
+
// bundler uses. Missing or malformed files resolve to undefined and are skipped.
|
|
18
|
+
async function readJsonIfExists(filePath) {
|
|
19
|
+
const file = await JsonSourceFile.loadFromFilePath(filePath);
|
|
20
|
+
return file?.data;
|
|
21
|
+
}
|
|
14
22
|
function resolveNodeMajor(raw) {
|
|
15
23
|
const stripped = raw.trim().replace(/^v/, '');
|
|
16
24
|
const major = stripped.split('.')[0];
|
|
@@ -50,14 +58,66 @@ function parseToolVersions(content) {
|
|
|
50
58
|
}
|
|
51
59
|
return { nodeVersion, bunVersion };
|
|
52
60
|
}
|
|
61
|
+
// semver.minVersion throws on values that are not a range at all (for
|
|
62
|
+
// example "lts"); such values are skipped so that detection falls through to
|
|
63
|
+
// the next source.
|
|
64
|
+
function minVersionOfRange(range) {
|
|
65
|
+
try {
|
|
66
|
+
return semver.minVersion(range) ?? undefined;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
53
72
|
function resolveEngineFromSemverRange(range) {
|
|
54
|
-
const min =
|
|
73
|
+
const min = minVersionOfRange(range);
|
|
55
74
|
return min ? String(min.major) : undefined;
|
|
56
75
|
}
|
|
57
76
|
function resolveBunFromSemverRange(range) {
|
|
58
|
-
const min =
|
|
77
|
+
const min = minVersionOfRange(range);
|
|
59
78
|
return min ? `${min.major}.${min.minor}` : undefined;
|
|
60
79
|
}
|
|
80
|
+
// Volta manifests can delegate to another JSON file through `volta.extends`,
|
|
81
|
+
// which is resolved relative to the manifest that declares it. The chain is
|
|
82
|
+
// depth-bounded, which also terminates cyclic `extends` references.
|
|
83
|
+
const MAX_VOLTA_EXTENDS_DEPTH = 10;
|
|
84
|
+
/**
|
|
85
|
+
* Returns the raw `volta.node` value of an already-parsed Volta manifest,
|
|
86
|
+
* following its `volta.extends` chain when the manifest itself carries no
|
|
87
|
+
* `node` pin. Any JSON file can be extended, not only a package.json.
|
|
88
|
+
*/
|
|
89
|
+
async function resolveVoltaNode(manifest, manifestPath, depth = 0) {
|
|
90
|
+
const volta = manifest?.volta;
|
|
91
|
+
if (!volta || typeof volta !== 'object')
|
|
92
|
+
return undefined;
|
|
93
|
+
if (typeof volta.node === 'string')
|
|
94
|
+
return volta.node;
|
|
95
|
+
if (typeof volta.extends === 'string' && depth < MAX_VOLTA_EXTENDS_DEPTH) {
|
|
96
|
+
const extendedPath = path.resolve(path.dirname(manifestPath), volta.extends);
|
|
97
|
+
return resolveVoltaNode(await readJsonIfExists(extendedPath), extendedPath, depth + 1);
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Mirrors how Volta itself locates a pin: walk up from the config's package
|
|
103
|
+
* directory and use the nearest package.json that carries a `volta` key. That
|
|
104
|
+
* manifest is authoritative (including its `extends` chain), so the walk stops
|
|
105
|
+
* there even when it yields no Node version. The walk never leaves
|
|
106
|
+
* `projectRoot`; a start path outside it falls back to `projectRoot` alone.
|
|
107
|
+
*/
|
|
108
|
+
async function detectVoltaNode(projectRoot, startPath) {
|
|
109
|
+
const root = path.resolve(projectRoot);
|
|
110
|
+
const start = path.resolve(startPath);
|
|
111
|
+
const contained = start === root || start.startsWith(root + path.sep);
|
|
112
|
+
for (const dir of lineage(contained ? start : root, { root })) {
|
|
113
|
+
const manifestPath = path.join(dir, 'package.json');
|
|
114
|
+
const manifest = await readJsonIfExists(manifestPath);
|
|
115
|
+
if (manifest?.volta && typeof manifest.volta === 'object') {
|
|
116
|
+
return resolveVoltaNode(manifest, manifestPath);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
61
121
|
async function resolveNode(rawVersion) {
|
|
62
122
|
const major = resolveNodeMajor(rawVersion);
|
|
63
123
|
if (!major)
|
|
@@ -72,7 +132,17 @@ async function resolveBun(rawVersion) {
|
|
|
72
132
|
const res = await resolveEngineVersion(ver, 'bun');
|
|
73
133
|
return { version: res.version, notices: res.notices, denied: res.denied };
|
|
74
134
|
}
|
|
75
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Detects the engine from the project's version files.
|
|
137
|
+
*
|
|
138
|
+
* @param projectRoot Directory holding the version files (the workspace root
|
|
139
|
+
* when the project is part of one).
|
|
140
|
+
* @param contextPath Directory of the package that contains the Checkly
|
|
141
|
+
* config. Only the Volta source uses it: mirroring Volta's own lookup, the
|
|
142
|
+
* pin is searched from here upwards to `projectRoot`. All other sources are
|
|
143
|
+
* read from `projectRoot` only.
|
|
144
|
+
*/
|
|
145
|
+
export async function detectEngine(projectRoot, contextPath = projectRoot) {
|
|
76
146
|
let nodeResult;
|
|
77
147
|
let bunResult;
|
|
78
148
|
// 1. .node-version
|
|
@@ -105,26 +175,28 @@ export async function detectEngine(projectRoot) {
|
|
|
105
175
|
bunResult = await resolveBun(bunVersionFile);
|
|
106
176
|
}
|
|
107
177
|
}
|
|
108
|
-
// 5. package.json
|
|
178
|
+
// 5. package.json volta.node (Volta pin; Volta does not manage Bun)
|
|
179
|
+
if (!nodeResult) {
|
|
180
|
+
const voltaNode = await detectVoltaNode(projectRoot, contextPath);
|
|
181
|
+
if (voltaNode) {
|
|
182
|
+
// Pins are normally exact versions, but Volta also accepts ranges.
|
|
183
|
+
const extracted = resolveEngineFromSemverRange(voltaNode);
|
|
184
|
+
if (extracted)
|
|
185
|
+
nodeResult = await resolveNode(extracted);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// 6. package.json engines
|
|
109
189
|
if (!nodeResult || !bunResult) {
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const extracted = resolveBunFromSemverRange(pkg.engines.bun);
|
|
121
|
-
if (extracted)
|
|
122
|
-
bunResult = await resolveBun(extracted);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
// malformed package.json, skip
|
|
127
|
-
}
|
|
190
|
+
const pkg = await readJsonIfExists(path.join(projectRoot, 'package.json'));
|
|
191
|
+
if (!nodeResult && typeof pkg?.engines?.node === 'string') {
|
|
192
|
+
const extracted = resolveEngineFromSemverRange(pkg.engines.node);
|
|
193
|
+
if (extracted)
|
|
194
|
+
nodeResult = await resolveNode(extracted);
|
|
195
|
+
}
|
|
196
|
+
if (!bunResult && typeof pkg?.engines?.bun === 'string') {
|
|
197
|
+
const extracted = resolveBunFromSemverRange(pkg.engines.bun);
|
|
198
|
+
if (extracted)
|
|
199
|
+
bunResult = await resolveBun(extracted);
|
|
128
200
|
}
|
|
129
201
|
}
|
|
130
202
|
const selected = nodeResult ?? bunResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-detector.js","sourceRoot":"","sources":["../../src/services/engine-detector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"engine-detector.js","sourceRoot":"","sources":["../../src/services/engine-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs `fn` with `process.stderr.write` swapped for a collector and returns
|
|
3
|
+
* every chunk written meanwhile. Used to observe output that only goes to
|
|
4
|
+
* stderr, such as the `debug` channel, without a TTY.
|
|
5
|
+
*/
|
|
6
|
+
export declare function captureStderr(fn: () => Promise<void>): Promise<string[]>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs `fn` with `process.stderr.write` swapped for a collector and returns
|
|
3
|
+
* every chunk written meanwhile. Used to observe output that only goes to
|
|
4
|
+
* stderr, such as the `debug` channel, without a TTY.
|
|
5
|
+
*/
|
|
6
|
+
export async function captureStderr(fn) {
|
|
7
|
+
const written = [];
|
|
8
|
+
const original = process.stderr.write.bind(process.stderr);
|
|
9
|
+
process.stderr.write = ((chunk) => {
|
|
10
|
+
written.push(String(chunk));
|
|
11
|
+
return true;
|
|
12
|
+
});
|
|
13
|
+
try {
|
|
14
|
+
await fn();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
process.stderr.write = original;
|
|
18
|
+
}
|
|
19
|
+
return written;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=capture-stderr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-stderr.js","sourceRoot":"","sources":["../../src/testing/capture-stderr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,EAAuB;IAC1D,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE;QACxC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC,CAAU,CAAA;IACX,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAA;IACZ,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAA;IACjC,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|