semver-select

Select an attribute of an object based on semver versioning

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
semver-select
121.1.09 years ago9 years agoMinified + gzip package size for semver-select in KB

Readme

semver-select.js
Select an attribute of an object based on semver versioning

Current status

NPM version Build Status Dependency Status Dev dependency Status Coverage Status
API is stable. All features tested and working.

What's it for

A few useful tools for when you need to select a function or other variable based on a semver version.
For example, if you are writing an app which interacts with an API which needs a different calling signature depending on it's version, you can use this to choose a function that implements the right interface for that API version.

Usage

semverSelect(version, choices)

Takes a list of choices as an object with semver match strings as the object's attributes.
Loops through choice's attributes and returns the first matching result. Returns undefined if no match found.
var semverSelect = require('semver-select');

var fns = {
    '^1.0.0': function(in) { return 'v1' },
    '^2.0.0': function(in) { return 'v2' },
    '*': function(in) { return 'other' }
};

semverSelect('1.0.2', fns)(); // returns 'v1'
semverSelect('2.3.8', fns)(); // returns 'v2'
semverSelect('4.0.0', fns)(); // returns 'other'

semverSelect.object(version, choicesObject)

Takes an object and maps the values of attributes to the semver-chosen choice.
semverSelect('2.3.8', {
	monkey: {
		'^1.0.0': 'v1',
        '1.0.0 - 2.x.x': 'v2',
        '*': 'other'
	},
	dinosaur: {
		'^1.0.0': 'ver1',
		'^2.0.0': 'ver2'
	}
}); // returns { monkey: 'v2', dinosaur: 'ver2' }

Tests

Use npm test to run the tests. Use npm run cover to check coverage.

Changelog

See changelog.md

Issues

If you discover a bug, please raise an issue on Github. https://github.com/overlookmotel/semver-select/issues

Contribution

Pull requests are very welcome. Please:
  • ensure all tests pass before submitting PR
  • add an entry to changelog
  • add tests for new features
  • document new functionality/API additions in README