Typed semantic versioner & diff module
npm install --save smv
or
yarn add smv
or
pnpm --save smv
SMV is a typed replacement for semver package as it proxies all semver-like methods to the semver. Full list of supported methods can be found on the semver github page.
const SMV = require('smv@1.0.0').SMV;
const smv = new SMV();
const major = smv.major('1.2.3');
console.log('major', major);
const equal = smv.eq('1.2.3', '2.3.4');
console.log('equal?', equal);
const greater = smv.gt('1.2.3', '2.3.4');
console.log('greater?', greater);
const lower = smv.ltr('1.2.3', '^1.3.4');
console.log('lower than range?', lower);
With SMV you can resolve dependencies from multiple sources.
Imagine how you would programmatically merge devDependencies from few package.json files?
const SMV = require('smv@1.0.0').SMV;
const smv = new SMV();
const sourceA = {
packageA: '1.2.3',
packageB: '1.2.3',
packageC: '0.0.1',
}
const sourceB = {
packageA: '1.2.3',
packageB: '1.2.3'
}
const digest = smv.merge({sourceA, sourceB});
console.log('Has conflicts?', digest.hasConflicts);
console.log('Final result', digest.result);
console.log('Conflicts', digest.conflicts);
console.log('Resolved digest', digest.resolved);
Un-conflicting dependencies are easy - you can deal with them using basic JS techniques.
How about conflicting dependencies?
const SMV = require('smv@1.0.0').SMV;
const smv = new SMV();
const sourceA = {
packageA: '1.2.3',
packageB: '^1.2.3',
packageC: '0.0.1',
}
const sourceB = {
packageA: '1.2.3',
packageB: '1.0.3'
}
const digest = smv.merge({sourceA, sourceB});
console.log('Has conflicts?', digest.hasConflicts);
console.log('Final result', digest.result);
console.log('Conflicts', digest.conflicts);
console.log('Resolved digest', digest.resolved);
There are situations when you don't want to waste time resolving conflicts. SMV allows you to enforce recommended versions (from resolved digest) as a final result.
const SMV = require('smv@1.0.0').SMV;
const smv = new SMV();
const sourceA = {
packageA: '1.2.3',
packageB: '^1.2.3',
packageC: '0.0.1',
}
const sourceB = {
packageA: '1.2.3',
packageB: '1.0.3'
}
// notice 2nd param passed to the merge method - thats forceRecommended flag
const digest = smv.merge({sourceA, sourceB}, true);
console.log('Has conflicts?', digest.hasConflicts);
console.log('Final result', digest.result);
console.log('Conflicts', digest.conflicts);
console.log('Resolved digest', digest.resolved);
Please use top search bar or right-side list of links to explore full API.
Archival API documentation: