epd
Version:
Enhanced peer dependency resolution for npm, yarn, and pnpm
35 lines • 1.42 kB
JavaScript
import { fetchPackageVersions } from './registry.js';
export async function smartResolve(conflicts, strategy = 'smart') {
const resolutions = [];
for (const [pkg, versions] of Object.entries(conflicts)) {
const available = await fetchPackageVersions(pkg);
let resolved;
let resolutionStrategy;
if (strategy === 'stable') {
resolved = versions.find(v => !v.includes('beta') && !v.includes('alpha')) || versions[0];
resolutionStrategy = 'stability';
}
else {
// Smart: prefer latest stable that satisfies most requirements
resolved = available.find(v => versions.some(req => satisfiesRange(v, req))) || versions[0];
resolutionStrategy = 'compatibility';
}
resolutions.push({
package: pkg,
resolvedVersion: resolved,
strategy: resolutionStrategy,
confidence: calculateConfidence(versions, resolved)
});
}
return resolutions;
}
function satisfiesRange(version, range) {
// Simplified semver check
const cleanVersion = version.replace(/[^\d\.]/g, '');
const cleanRange = range.replace(/[^\d\.]/g, '');
return cleanVersion.startsWith(cleanRange.split('.')[0]);
}
function calculateConfidence(versions, resolved) {
return versions.includes(resolved) ? 0.9 : 0.6;
}
//# sourceMappingURL=smart-resolver.js.map