Typed semantic versioner & semantic diff tool
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);
Full API documentation for this package can be found here