deprecopilot
Version:
Automated dependency management with AI-powered codemods
58 lines (57 loc) • 1.94 kB
JavaScript
import { existsSync } from 'fs';
import { readFile } from 'fs/promises';
export function detectPackageManager() {
if (existsSync('pnpm-lock.yaml'))
return 'pnpm';
if (existsSync('yarn.lock'))
return 'yarn';
if (existsSync('package-lock.json'))
return 'npm';
return 'npm';
}
export async function getPackageJson() {
const pkgRaw = await readFile('package.json', 'utf-8');
return JSON.parse(pkgRaw);
}
export async function getCurrentVersion(pkgName) {
const pkg = await getPackageJson();
for (const depType of ['dependencies', 'devDependencies', 'peerDependencies']) {
if (pkg[depType] && pkg[depType][pkgName])
return pkg[depType][pkgName].replace(/^[^\d]*/, '');
}
return null;
}
export function stubDetectBreaking(pkgName, from, to) {
if (!from || !to)
return [];
const parse = (v) => {
const m = v.match(/(\d+)\.(\d+)\.(\d+)/);
if (!m)
return { major: 0, minor: 0, patch: 0 };
return { major: +m[1], minor: +m[2], patch: +m[3] };
};
const a = parse(from);
const b = parse(to);
if (a.major !== b.major)
return [`Detected major upgrade for ${pkgName}: ${from} → ${to}`];
return [];
}
export async function findSourceFilesUsing(pkgName) {
// Simple stub: return all .js/.ts files in src/ (real impl: AST scan for imports)
const { readdir, stat } = await import('fs/promises');
async function walk(dir) {
let files = [];
for (const entry of await readdir(dir)) {
const full = dir + '/' + entry;
const s = await stat(full);
if (s.isDirectory())
files = files.concat(await walk(full));
else if (full.endsWith('.js') || full.endsWith('.ts'))
files.push(full);
}
return files;
}
if (!existsSync('src'))
return [];
return walk('src');
}