Typed semantic versioner & diff module
npm install smv[//]: # (Readme partial used by an default readme page)
Typed semantic versioner & diff module
[//]: # (Readme partial used by an default readme page)




!npm version

!Types: TypeScript

[//]: # (Readme partial used by an default readme page)
* tiny & easy to use: 1 powerful merge method, rest is plain old semver
* returns descriptive merge conflict details
* 1 dependency (for dist)
* Typescript types included
* exposes esm/cjs modules
* always 100% test coverage
* Installation
* Basic usage
* Advanced usage
* API documentation
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);
[//]: # (Readme partial used by an markdown readme page)
Full API documentation for this package can be found here