bumpcheck 0.0.0-stage → 0.1.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/LICENSE +15 -0
- package/README.md +199 -2
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +95 -0
- package/dist/cli.js.map +1 -0
- package/dist/git.d.ts +16 -0
- package/dist/git.js +70 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/npm/analyze.d.ts +18 -0
- package/dist/npm/analyze.js +190 -0
- package/dist/npm/analyze.js.map +1 -0
- package/dist/npm/diagnostics.d.ts +21 -0
- package/dist/npm/diagnostics.js +269 -0
- package/dist/npm/diagnostics.js.map +1 -0
- package/dist/npm/exports.d.ts +22 -0
- package/dist/npm/exports.js +101 -0
- package/dist/npm/exports.js.map +1 -0
- package/dist/npm/imports.d.ts +29 -0
- package/dist/npm/imports.js +215 -0
- package/dist/npm/imports.js.map +1 -0
- package/dist/npm/program.d.ts +32 -0
- package/dist/npm/program.js +187 -0
- package/dist/npm/program.js.map +1 -0
- package/dist/registry/provider.d.ts +50 -0
- package/dist/registry/provider.js +164 -0
- package/dist/registry/provider.js.map +1 -0
- package/dist/report/render.d.ts +5 -0
- package/dist/report/render.js +227 -0
- package/dist/report/render.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -4
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdir, readFile, readdir, rm, stat, cp } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
function defaultCacheDir() {
|
|
6
|
+
const xdg = process.env['XDG_CACHE_HOME'];
|
|
7
|
+
const base = xdg && xdg.length > 0 ? xdg : path.join(homedir(), '.cache');
|
|
8
|
+
return path.join(base, 'bumpcheck', 'npm');
|
|
9
|
+
}
|
|
10
|
+
function safeSegment(s) {
|
|
11
|
+
return s.replace(/[@/]/g, '_');
|
|
12
|
+
}
|
|
13
|
+
async function exists(p) {
|
|
14
|
+
try {
|
|
15
|
+
await stat(p);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function run(bin, args, cwd) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const child = spawn(bin, args, { cwd, stdio: ['ignore', 'ignore', 'pipe'] });
|
|
25
|
+
let stderr = '';
|
|
26
|
+
child.stderr.on('data', (d) => (stderr += d.toString()));
|
|
27
|
+
child.on('error', reject);
|
|
28
|
+
child.on('close', (code) => {
|
|
29
|
+
if (code === 0)
|
|
30
|
+
resolve();
|
|
31
|
+
else
|
|
32
|
+
reject(new Error(`${bin} ${args.join(' ')} failed (${code}):\n${stderr.trim()}`));
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Installs the exact version with npm into a per-version overlay and caches it.
|
|
38
|
+
* Scripts never run. Peer dependencies are installed so declaration files
|
|
39
|
+
* that import them still resolve.
|
|
40
|
+
*/
|
|
41
|
+
export class NpmProvider {
|
|
42
|
+
cacheDir;
|
|
43
|
+
registry;
|
|
44
|
+
npm;
|
|
45
|
+
inflight = new Map();
|
|
46
|
+
constructor(opts = {}) {
|
|
47
|
+
this.cacheDir = opts.cacheDir ?? defaultCacheDir();
|
|
48
|
+
this.registry = opts.registry ?? process.env['BUMPCHECK_REGISTRY'];
|
|
49
|
+
this.npm = opts.npmBinary ?? 'npm';
|
|
50
|
+
}
|
|
51
|
+
ensure(pkg, version) {
|
|
52
|
+
const key = `${pkg}@${version}`;
|
|
53
|
+
let p = this.inflight.get(key);
|
|
54
|
+
if (!p) {
|
|
55
|
+
p = this.install(pkg, version);
|
|
56
|
+
this.inflight.set(key, p);
|
|
57
|
+
}
|
|
58
|
+
return p;
|
|
59
|
+
}
|
|
60
|
+
async install(pkg, version) {
|
|
61
|
+
const overlay = path.join(this.cacheDir, `${safeSegment(pkg)}@${safeSegment(version)}`);
|
|
62
|
+
const marker = path.join(overlay, '.bumpcheck-ok');
|
|
63
|
+
if (await exists(marker))
|
|
64
|
+
return overlay;
|
|
65
|
+
await rm(overlay, { recursive: true, force: true });
|
|
66
|
+
await mkdir(overlay, { recursive: true });
|
|
67
|
+
await writeJson(path.join(overlay, 'package.json'), { name: 'bumpcheck-overlay', private: true });
|
|
68
|
+
const args = [
|
|
69
|
+
'install',
|
|
70
|
+
`${pkg}@${version}`,
|
|
71
|
+
'--ignore-scripts',
|
|
72
|
+
'--no-package-lock',
|
|
73
|
+
'--no-audit',
|
|
74
|
+
'--no-fund',
|
|
75
|
+
'--no-bin-links',
|
|
76
|
+
'--loglevel=error',
|
|
77
|
+
'--save-exact',
|
|
78
|
+
];
|
|
79
|
+
if (this.registry)
|
|
80
|
+
args.push(`--registry=${this.registry}`);
|
|
81
|
+
await run(this.npm, args, overlay);
|
|
82
|
+
const pkgDir = path.join(overlay, 'node_modules', pkg);
|
|
83
|
+
const manifest = JSON.parse(await readFile(path.join(pkgDir, 'package.json'), 'utf8'));
|
|
84
|
+
if (manifest.version !== version) {
|
|
85
|
+
throw new Error(`Expected ${pkg}@${version}, npm installed ${manifest.version ?? 'unknown'}`);
|
|
86
|
+
}
|
|
87
|
+
// Packages without their own declarations usually have a DefinitelyTyped
|
|
88
|
+
// package. Install the one matching this major, best effort, so the
|
|
89
|
+
// overlay resolves the way the consumer's node_modules would.
|
|
90
|
+
let types;
|
|
91
|
+
if (!(await shipsTypes(pkgDir, manifest))) {
|
|
92
|
+
const typesName = definitelyTypedName(pkg);
|
|
93
|
+
const major = version.split('.')[0];
|
|
94
|
+
for (const spec of [`${typesName}@${major}`, typesName]) {
|
|
95
|
+
try {
|
|
96
|
+
await run(this.npm, [...args.slice(0, 1), spec, ...args.slice(2)], overlay);
|
|
97
|
+
types = spec;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// No matching @types package; the report will say so.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
await writeJson(marker, { pkg, version, types, at: new Date().toISOString() });
|
|
106
|
+
return overlay;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function shipsTypes(pkgDir, manifest) {
|
|
110
|
+
if (manifest.types || manifest.typings)
|
|
111
|
+
return true;
|
|
112
|
+
if (manifest.exports && JSON.stringify(manifest.exports).includes('"types"'))
|
|
113
|
+
return true;
|
|
114
|
+
const entries = await readdir(pkgDir).catch(() => []);
|
|
115
|
+
return entries.some((e) => e.endsWith('.d.ts') || e.endsWith('.d.mts') || e.endsWith('.d.cts'));
|
|
116
|
+
}
|
|
117
|
+
/** `@scope/name` becomes `@types/scope__name`, as DefinitelyTyped does. */
|
|
118
|
+
export function definitelyTypedName(pkg) {
|
|
119
|
+
if (pkg.startsWith('@')) {
|
|
120
|
+
const [scope, name] = pkg.slice(1).split('/');
|
|
121
|
+
return `@types/${scope}__${name}`;
|
|
122
|
+
}
|
|
123
|
+
return `@types/${pkg}`;
|
|
124
|
+
}
|
|
125
|
+
export class LocalProvider {
|
|
126
|
+
sources;
|
|
127
|
+
workDir;
|
|
128
|
+
inflight = new Map();
|
|
129
|
+
constructor(sources, workDir) {
|
|
130
|
+
this.sources = sources;
|
|
131
|
+
this.workDir = workDir;
|
|
132
|
+
}
|
|
133
|
+
ensure(pkg, version) {
|
|
134
|
+
const key = `${pkg}@${version}`;
|
|
135
|
+
let p = this.inflight.get(key);
|
|
136
|
+
if (!p) {
|
|
137
|
+
p = this.materialize(pkg, key);
|
|
138
|
+
this.inflight.set(key, p);
|
|
139
|
+
}
|
|
140
|
+
return p;
|
|
141
|
+
}
|
|
142
|
+
async materialize(pkg, key) {
|
|
143
|
+
const raw = this.sources[key];
|
|
144
|
+
if (!raw)
|
|
145
|
+
throw new Error(`LocalProvider has no source for ${key}`);
|
|
146
|
+
const src = typeof raw === 'string' ? { dir: raw } : raw;
|
|
147
|
+
const overlay = path.join(this.workDir, safeSegment(key));
|
|
148
|
+
const dest = path.join(overlay, 'node_modules', pkg);
|
|
149
|
+
await rm(overlay, { recursive: true, force: true });
|
|
150
|
+
await mkdir(path.dirname(dest), { recursive: true });
|
|
151
|
+
await cp(src.dir, dest, { recursive: true });
|
|
152
|
+
for (const [name, dir] of Object.entries(src.deps ?? {})) {
|
|
153
|
+
const depDest = path.join(overlay, 'node_modules', name);
|
|
154
|
+
await mkdir(path.dirname(depDest), { recursive: true });
|
|
155
|
+
await cp(dir, depDest, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
return overlay;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async function writeJson(file, value) {
|
|
161
|
+
const { writeFile } = await import('node:fs/promises');
|
|
162
|
+
await writeFile(file, JSON.stringify(value, null, 2) + '\n');
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/registry/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Report } from '../types.js';
|
|
2
|
+
/** Plain text for terminals. No color codes, so it pastes cleanly anywhere. */
|
|
3
|
+
export declare function renderText(r: Report): string;
|
|
4
|
+
/** GitHub-flavored markdown for a pull request comment. */
|
|
5
|
+
export declare function renderMarkdown(r: Report): string;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
const MAX_SIG = 160;
|
|
2
|
+
function loc(l) {
|
|
3
|
+
return `${l.file}:${l.line}:${l.column}`;
|
|
4
|
+
}
|
|
5
|
+
function clip(s) {
|
|
6
|
+
if (!s)
|
|
7
|
+
return '';
|
|
8
|
+
const one = s.replace(/\n/g, ' ⏎ ');
|
|
9
|
+
return one.length > MAX_SIG ? one.slice(0, MAX_SIG - 1) + '…' : one;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Before/after excerpts centered on the first difference, so a change deep
|
|
13
|
+
* inside a long declaration is visible instead of two identical prefixes.
|
|
14
|
+
*/
|
|
15
|
+
function diffClips(before, after) {
|
|
16
|
+
const a = (before ?? '').replace(/\n/g, ' ⏎ ');
|
|
17
|
+
const b = (after ?? '').replace(/\n/g, ' ⏎ ');
|
|
18
|
+
let i = 0;
|
|
19
|
+
while (i < a.length && i < b.length && a[i] === b[i])
|
|
20
|
+
i++;
|
|
21
|
+
const start = Math.max(0, i - Math.floor(MAX_SIG / 3));
|
|
22
|
+
const cut = (s) => {
|
|
23
|
+
const slice = s.slice(start, start + MAX_SIG);
|
|
24
|
+
return (start > 0 ? '…' : '') + slice + (start + MAX_SIG < s.length ? '…' : '');
|
|
25
|
+
};
|
|
26
|
+
return { before: cut(a), after: cut(b) };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* One line per distinct cause. 79 "Property 'errors' does not exist" lines
|
|
30
|
+
* are one fact with 79 sites; the JSON report keeps every site.
|
|
31
|
+
*/
|
|
32
|
+
function groupBreaks(breaks) {
|
|
33
|
+
const groups = new Map();
|
|
34
|
+
for (const b of breaks) {
|
|
35
|
+
const message = generalize(b.message);
|
|
36
|
+
const key = `${b.symbol ?? ''}\u0000${b.code}\u0000${message}`;
|
|
37
|
+
const g = groups.get(key);
|
|
38
|
+
if (g)
|
|
39
|
+
g.sites.push(b.location);
|
|
40
|
+
else
|
|
41
|
+
groups.set(key, { symbol: b.symbol, message, kind: b.kind, code: b.code, sites: [b.location] });
|
|
42
|
+
}
|
|
43
|
+
return [...groups.values()].sort((x, y) => y.sites.length - x.sites.length);
|
|
44
|
+
}
|
|
45
|
+
/** Drops the per-site type arguments so identical causes share a line. */
|
|
46
|
+
function generalize(message) {
|
|
47
|
+
return message
|
|
48
|
+
.replace(/<[^<>]*(?:<[^<>]*>[^<>]*)*>/g, '<…>')
|
|
49
|
+
.replace(/'\{[^']*\}'/g, "'{…}'")
|
|
50
|
+
.replace(/\s+/g, ' ')
|
|
51
|
+
.trim();
|
|
52
|
+
}
|
|
53
|
+
function headline(r) {
|
|
54
|
+
const n = r.summary.importedSymbols;
|
|
55
|
+
const what = n === 1 ? '1 symbol' : `${n} symbols`;
|
|
56
|
+
if (r.meta.untyped) {
|
|
57
|
+
return `You import ${what} from ${r.package}. ${r.to} ships no type declarations, so nothing could be checked.`;
|
|
58
|
+
}
|
|
59
|
+
if (n === 0) {
|
|
60
|
+
return `Nothing in this repo imports ${r.package}.`;
|
|
61
|
+
}
|
|
62
|
+
const s = r.summary;
|
|
63
|
+
const parts = [];
|
|
64
|
+
if (s.breaks > 0) {
|
|
65
|
+
const affected = s.removed + s.breaking;
|
|
66
|
+
const where = affected > 0 ? ` in ${affected} symbol${affected === 1 ? '' : 's'}` : '';
|
|
67
|
+
parts.push(`${s.breaks} break${s.breaks === 1 ? '' : 's'}${where}`);
|
|
68
|
+
}
|
|
69
|
+
if (s.changed > 0)
|
|
70
|
+
parts.push(`${s.changed} changed but still typecheck${s.changed === 1 ? 's' : ''}`);
|
|
71
|
+
if (s.unknown > 0)
|
|
72
|
+
parts.push(`${s.unknown} could not be checked`);
|
|
73
|
+
const tail = parts.length === 0 ? 'None changed.' : parts.join(', ') + '.';
|
|
74
|
+
return `You import ${what} from ${r.package}. ${tail} Behavior not checked.`;
|
|
75
|
+
}
|
|
76
|
+
function groupLines(g, maxSites) {
|
|
77
|
+
const sym = g.symbol ? `${g.symbol} ` : '';
|
|
78
|
+
const count = g.sites.length === 1 ? '' : ` (${g.sites.length} sites)`;
|
|
79
|
+
const lines = [` ${sym}${g.message} TS${g.code}${count}`];
|
|
80
|
+
for (const l of g.sites.slice(0, maxSites))
|
|
81
|
+
lines.push(` ${loc(l)}`);
|
|
82
|
+
if (g.sites.length > maxSites)
|
|
83
|
+
lines.push(` … ${g.sites.length - maxSites} more, see --format json`);
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
function section(title, items, out) {
|
|
87
|
+
if (items.length === 0)
|
|
88
|
+
return;
|
|
89
|
+
out.push(title);
|
|
90
|
+
for (const s of items)
|
|
91
|
+
out.push(symbolLine(s));
|
|
92
|
+
out.push('');
|
|
93
|
+
}
|
|
94
|
+
function symbolLine(s) {
|
|
95
|
+
const d = diffClips(s.change?.before, s.change?.after);
|
|
96
|
+
const sig = s.status === 'changed' || s.status === 'breaking'
|
|
97
|
+
? `\n before: ${d.before}\n after: ${d.after}`
|
|
98
|
+
: s.status === 'removed'
|
|
99
|
+
? `\n was: ${clip(s.change?.before)}`
|
|
100
|
+
: '';
|
|
101
|
+
const locs = s.locations.map((l) => ` ${loc(l)}`).join('\n');
|
|
102
|
+
return ` ${s.name} [${s.specifier}]${sig}\n${locs}`;
|
|
103
|
+
}
|
|
104
|
+
/** Plain text for terminals. No color codes, so it pastes cleanly anywhere. */
|
|
105
|
+
export function renderText(r) {
|
|
106
|
+
const out = [];
|
|
107
|
+
out.push(`${r.package} ${r.from} -> ${r.to}`);
|
|
108
|
+
out.push(headline(r));
|
|
109
|
+
out.push('');
|
|
110
|
+
if (r.breaks.length > 0) {
|
|
111
|
+
out.push('BREAKS');
|
|
112
|
+
for (const g of groupBreaks(r.breaks))
|
|
113
|
+
out.push(...groupLines(g, 5));
|
|
114
|
+
out.push('');
|
|
115
|
+
}
|
|
116
|
+
section('REMOVED', r.imports.filter((i) => i.status === 'removed'), out);
|
|
117
|
+
section('CHANGED, BREAKS ABOVE', r.imports.filter((i) => i.status === 'breaking'), out);
|
|
118
|
+
section('CHANGED, STILL TYPECHECKS', r.imports.filter((i) => i.status === 'changed'), out);
|
|
119
|
+
section('COULD NOT BE CHECKED', r.imports.filter((i) => i.status === 'unknown'), out);
|
|
120
|
+
if (r.unanalyzed.length > 0) {
|
|
121
|
+
out.push('NOT ANALYZED');
|
|
122
|
+
for (const u of r.unanalyzed) {
|
|
123
|
+
out.push(` ${u.reason}`);
|
|
124
|
+
for (const l of u.locations)
|
|
125
|
+
out.push(` ${loc(l)}`);
|
|
126
|
+
}
|
|
127
|
+
out.push('');
|
|
128
|
+
}
|
|
129
|
+
const unchanged = r.imports.filter((i) => i.status === 'unchanged');
|
|
130
|
+
if (unchanged.length > 0) {
|
|
131
|
+
out.push(`UNCHANGED (${unchanged.length})`);
|
|
132
|
+
out.push(' ' + unchanged.map((s) => s.name).join(', '));
|
|
133
|
+
out.push('');
|
|
134
|
+
}
|
|
135
|
+
out.push(`Checked ${r.files.length} file${r.files.length === 1 ? '' : 's'} with TypeScript ${r.meta.typescript} in ${r.meta.durationMs} ms.`);
|
|
136
|
+
return out.join('\n');
|
|
137
|
+
}
|
|
138
|
+
/** GitHub-flavored markdown for a pull request comment. */
|
|
139
|
+
export function renderMarkdown(r) {
|
|
140
|
+
const out = [];
|
|
141
|
+
out.push(`### \`${r.package}\` ${r.from} → ${r.to}`);
|
|
142
|
+
out.push('');
|
|
143
|
+
out.push(headline(r));
|
|
144
|
+
out.push('');
|
|
145
|
+
if (r.breaks.length > 0) {
|
|
146
|
+
out.push('**Breaks**');
|
|
147
|
+
out.push('');
|
|
148
|
+
for (const g of groupBreaks(r.breaks)) {
|
|
149
|
+
const sym = g.symbol ? `\`${g.symbol}\` ` : '';
|
|
150
|
+
if (g.sites.length === 1) {
|
|
151
|
+
out.push(`- ${sym}${g.message} `);
|
|
152
|
+
out.push(` \`${loc(g.sites[0])}\` (TS${g.code})`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
out.push(`- ${sym}${g.message} (TS${g.code}) `);
|
|
156
|
+
out.push(` <details><summary>${g.sites.length} sites</summary>`);
|
|
157
|
+
out.push('');
|
|
158
|
+
for (const l of g.sites)
|
|
159
|
+
out.push(` - \`${loc(l)}\``);
|
|
160
|
+
out.push('');
|
|
161
|
+
out.push(' </details>');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
out.push('');
|
|
165
|
+
}
|
|
166
|
+
const removed = r.imports.filter((i) => i.status === 'removed');
|
|
167
|
+
if (removed.length > 0) {
|
|
168
|
+
out.push('**Removed**');
|
|
169
|
+
out.push('');
|
|
170
|
+
for (const s of removed) {
|
|
171
|
+
out.push(`- \`${s.name}\` from \`${s.specifier}\``);
|
|
172
|
+
for (const l of s.locations)
|
|
173
|
+
out.push(` - \`${loc(l)}\``);
|
|
174
|
+
}
|
|
175
|
+
out.push('');
|
|
176
|
+
}
|
|
177
|
+
const breaking = r.imports.filter((i) => i.status === 'breaking');
|
|
178
|
+
if (breaking.length > 0) {
|
|
179
|
+
out.push('**Changed, see breaks above**');
|
|
180
|
+
out.push('');
|
|
181
|
+
for (const s of breaking) {
|
|
182
|
+
const d = diffClips(s.change?.before, s.change?.after);
|
|
183
|
+
out.push(`- \`${s.name}\` from \`${s.specifier}\``);
|
|
184
|
+
out.push(` - before: \`${d.before}\``);
|
|
185
|
+
out.push(` - after: \`${d.after}\``);
|
|
186
|
+
}
|
|
187
|
+
out.push('');
|
|
188
|
+
}
|
|
189
|
+
const changed = r.imports.filter((i) => i.status === 'changed');
|
|
190
|
+
if (changed.length > 0) {
|
|
191
|
+
out.push('<details><summary><b>Changed, still typechecks</b> (' + changed.length + ')</summary>');
|
|
192
|
+
out.push('');
|
|
193
|
+
for (const s of changed) {
|
|
194
|
+
const d = diffClips(s.change?.before, s.change?.after);
|
|
195
|
+
out.push(`- \`${s.name}\` from \`${s.specifier}\``);
|
|
196
|
+
out.push(` - before: \`${d.before}\``);
|
|
197
|
+
out.push(` - after: \`${d.after}\``);
|
|
198
|
+
for (const l of s.locations)
|
|
199
|
+
out.push(` - \`${loc(l)}\``);
|
|
200
|
+
}
|
|
201
|
+
out.push('');
|
|
202
|
+
out.push('</details>');
|
|
203
|
+
out.push('');
|
|
204
|
+
}
|
|
205
|
+
const unknown = r.imports.filter((i) => i.status === 'unknown');
|
|
206
|
+
if (unknown.length > 0 || r.unanalyzed.length > 0) {
|
|
207
|
+
out.push('<details><summary><b>Could not be checked</b></summary>');
|
|
208
|
+
out.push('');
|
|
209
|
+
for (const s of unknown) {
|
|
210
|
+
out.push(`- \`${s.name}\` from \`${s.specifier}\``);
|
|
211
|
+
for (const l of s.locations)
|
|
212
|
+
out.push(` - \`${loc(l)}\``);
|
|
213
|
+
}
|
|
214
|
+
for (const u of r.unanalyzed) {
|
|
215
|
+
out.push(`- ${u.reason}`);
|
|
216
|
+
for (const l of u.locations)
|
|
217
|
+
out.push(` - \`${loc(l)}\``);
|
|
218
|
+
}
|
|
219
|
+
out.push('');
|
|
220
|
+
out.push('</details>');
|
|
221
|
+
out.push('');
|
|
222
|
+
}
|
|
223
|
+
out.push(`<sub>Checked ${r.files.length} file${r.files.length === 1 ? '' : 's'} with TypeScript ${r.meta.typescript}. ` +
|
|
224
|
+
`Facts only: declarations of both versions against this repo's source. Runtime behavior is not checked.</sub>`);
|
|
225
|
+
return out.join('\n');
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The report is the product. Every surface (CLI, PR comment, JSON) renders
|
|
3
|
+
* from this structure. Keep it small and keep every field a verifiable fact.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SCHEMA_VERSION: 1;
|
|
6
|
+
export interface Location {
|
|
7
|
+
/** Path relative to the repo root, POSIX separators. */
|
|
8
|
+
file: string;
|
|
9
|
+
/** 1-based line. */
|
|
10
|
+
line: number;
|
|
11
|
+
/** 1-based column. */
|
|
12
|
+
column: number;
|
|
13
|
+
}
|
|
14
|
+
export type SymbolStatus =
|
|
15
|
+
/** Declaration text is identical between versions. */
|
|
16
|
+
'unchanged'
|
|
17
|
+
/** Declaration changed, but every use still typechecks. */
|
|
18
|
+
| 'changed'
|
|
19
|
+
/** Declaration changed and at least one use no longer typechecks. */
|
|
20
|
+
| 'breaking'
|
|
21
|
+
/** Symbol no longer exported by the new version. */
|
|
22
|
+
| 'removed'
|
|
23
|
+
/** Could not be resolved in one or both versions (untyped, `any`, missing types). */
|
|
24
|
+
| 'unknown';
|
|
25
|
+
export interface ImportedSymbol {
|
|
26
|
+
/** Exported name as seen by the consumer. `default` for default imports. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Module specifier as written, e.g. `axios` or `axios/lib/adapters`. */
|
|
29
|
+
specifier: string;
|
|
30
|
+
status: SymbolStatus;
|
|
31
|
+
/** Every place the symbol is imported or accessed. */
|
|
32
|
+
locations: Location[];
|
|
33
|
+
/** Present when status is `changed` or `removed`. */
|
|
34
|
+
change?: SymbolChange;
|
|
35
|
+
}
|
|
36
|
+
export interface SymbolChange {
|
|
37
|
+
/** Normalized declaration text in the old version, if any. */
|
|
38
|
+
before?: string;
|
|
39
|
+
/** Normalized declaration text in the new version, if any. */
|
|
40
|
+
after?: string;
|
|
41
|
+
}
|
|
42
|
+
export type BreakKind =
|
|
43
|
+
/** Import of a name the new version no longer exports. */
|
|
44
|
+
'removed-export'
|
|
45
|
+
/** Subpath or entry the new version no longer resolves. */
|
|
46
|
+
| 'missing-module'
|
|
47
|
+
/** Call passes the wrong number of arguments for the new signature. */
|
|
48
|
+
| 'arity'
|
|
49
|
+
/** Argument, assignment, or return no longer matches the new types. */
|
|
50
|
+
| 'type-mismatch'
|
|
51
|
+
/** Property or member access that the new types do not have. */
|
|
52
|
+
| 'missing-member'
|
|
53
|
+
/** A TypeScript error attributable to the bump that fits no bucket above. */
|
|
54
|
+
| 'other';
|
|
55
|
+
export interface Break {
|
|
56
|
+
kind: BreakKind;
|
|
57
|
+
location: Location;
|
|
58
|
+
/** TypeScript's own message, flattened to one line. */
|
|
59
|
+
message: string;
|
|
60
|
+
/** TypeScript diagnostic code, so a reader can look it up. */
|
|
61
|
+
code: number;
|
|
62
|
+
/** The imported symbol this error involves, when it can be determined. */
|
|
63
|
+
symbol?: string;
|
|
64
|
+
/** How it was determined: the error names it, the statement uses it, or a type declared under it is involved. */
|
|
65
|
+
attribution?: 'message' | 'binding' | 'type';
|
|
66
|
+
}
|
|
67
|
+
export interface Unanalyzed {
|
|
68
|
+
reason: string;
|
|
69
|
+
locations: Location[];
|
|
70
|
+
}
|
|
71
|
+
export interface Summary {
|
|
72
|
+
importedSymbols: number;
|
|
73
|
+
unchanged: number;
|
|
74
|
+
changed: number;
|
|
75
|
+
breaking: number;
|
|
76
|
+
removed: number;
|
|
77
|
+
unknown: number;
|
|
78
|
+
breaks: number;
|
|
79
|
+
unanalyzed: number;
|
|
80
|
+
}
|
|
81
|
+
export interface Report {
|
|
82
|
+
schemaVersion: typeof SCHEMA_VERSION;
|
|
83
|
+
ecosystem: 'npm';
|
|
84
|
+
package: string;
|
|
85
|
+
from: string;
|
|
86
|
+
to: string;
|
|
87
|
+
/** Files in the repo that import the package, relative paths. */
|
|
88
|
+
files: string[];
|
|
89
|
+
imports: ImportedSymbol[];
|
|
90
|
+
breaks: Break[];
|
|
91
|
+
unanalyzed: Unanalyzed[];
|
|
92
|
+
summary: Summary;
|
|
93
|
+
meta: {
|
|
94
|
+
typescript: string;
|
|
95
|
+
durationMs: number;
|
|
96
|
+
/** True when the new version ships no type declarations; nothing could be proven. */
|
|
97
|
+
untyped: boolean;
|
|
98
|
+
};
|
|
99
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bumpcheck",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Prove whether a dependency bump breaks the code that imports it. Facts with line numbers, nothing else.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"bumpcheck": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=20"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.build.json",
|
|
28
|
+
"dev": "tsx src/cli.ts",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:watch": "vitest",
|
|
31
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
32
|
+
"lint": "eslint src test",
|
|
33
|
+
"prepublishOnly": "npm run typecheck && npm test && npm run build"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"dependencies",
|
|
37
|
+
"dependabot",
|
|
38
|
+
"renovate",
|
|
39
|
+
"breaking-changes",
|
|
40
|
+
"typescript",
|
|
41
|
+
"upgrade"
|
|
42
|
+
],
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"semver": "^7.8.5",
|
|
45
|
+
"typescript": "^5.6.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^22.0.0",
|
|
49
|
+
"@types/semver": "^7.8.0",
|
|
50
|
+
"tsx": "^4.19.0",
|
|
51
|
+
"vitest": "^2.1.0"
|
|
52
|
+
}
|
|
53
|
+
}
|