as

ajv-semver

Validate Semver strings with AJV

Showing:

Popularity

Downloads/wk

149

GitHub Stars

1

Maintenance

Last Commit

2yrs ago

Contributors

0

Package

Dependencies

3

License

ISC

Type Definitions

Tree-Shakeable

No?

Categories

Readme

Semver string validation with AJV

Getting started

Create an Ajv Instance and extend it with the ajv-semver plugin

var Ajv = require("ajv");
var ajv = new Ajv();
require("ajv-semver")(ajv);

and then use it to validate semantic version ("semver") strings:

ajv.validate({"type":"string","format":"semver"},
             "1.2.3")
ajv.validate({"type":"string","semver":true},
             "1.2.3")
ajv.validate({"type":"string","semver":{"valid":true}},
             "1.2.3")
ajv.validate({"type":"string","semver":{"valid":true,"loose":true}},
             "=1.2.3")

or validate version ranges:

ajv.validate({"type":"string","semver":{"validRange":true}},
             ">=1.2.0 <1.3.0||>=2.0.0 <3.0.0")
ajv.validate({"type":"string","semver":{"validRange":true,"loose":true}},
             "~1.2.3beta")

or use one of the comparison operators (gt, gte, lt, lte):

ajv.validate({"type":"string","semver":{"gt":"1.2.3-r100"}},
             "1.2.3-R2")
ajv.validate({"type":"string","semver":{"gte":"1.2.3"}},
             "2.0.0")
ajv.validate({"type":"string","semver":{"lt":"=4.1.1","loose":true}},
             "2.0.0")
ajv.validate({"type":"string","semver":{"lte":"3.2.3","loose":true}},
             "=2.0.0")

or use one of the range comparison operators (gtr, ltr):

ajv.validate({"type":"string","semver":{"gtr":"1.0.0 - 2.0.0"}},
             "2.0.1-R2")
ajv.validate({"type":"string","semver":{"ltr":"1.0.0 - 2.0.0"}},
             "0.6.3-beta")

or you can validate object attributes and relations between them:

var validator = ajv.compile({
    "type":"object",
    "properties":{
        "version":{
            "type":"string",
            "semver":{"clean":true}
        },
        // the `previousVersion` should be less than the current version
        "previousVersion":{
            "type":"string",
            "semver":{"lt":{"$data":"1/version"}}
        }
    },
    "required":["version"]
}) 

validator({"version":"1.2.3","previousVersion":"0.7.12"}) // true

// fails validation: `previousVersion` is not less than `version`
validator({"version":"1.2.3","previousVersion":"1.7.12"}) // false

// fails validation: invalid version string
validator({"version":"1.2.3","previousVersion":"a.b.c"}) // false
validator({"version":"a.b.c","previousVersion":"1.7.12"}) // false

or clean your version strings and calculate major, minor, and patch -- handy for indexing or querying with MongoDB and friends:

var Ajv = require("ajv");
var ajv = new Ajv({
        // required to create a new attribute
        "useDefaults":true
    });
require("./index.js")(ajv);

var validator = ajv.compile({
    "type":"object",
    "properties":{
        "version":{
            "type":"string",
            "semver":true
        },
        // calculate the major minor and patch
        "Major":{
            "default": null, // required to create a new attribute
            "semver":{"major":{"$data":"1/version"},"loose":true}
        },                                                
        "Minor":{                                           
            "default": null, // required to create a new attribute
            "semver":{"minor":{"$data":"1/version"},"loose":true}
        },                                                
        "Patch":{                                           
            "default": null, // required to create a new attribute
            "semver":{"patch":{"$data":"1/version"},"loose":true}
        }
    },
    "required":["version"]
}) 

var obj = {"version":"=2.2.3"}
validator(obj) // true
obj // { version: '2.2.3', Major: 2, Minor: 2, Patch: 3 }

var obj = {"version":"=a.b.c"}
validator(obj) // false
obj // { version: null, Major: null, Minor: null, Patch: null }

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100
No reviews found
Be the first to rate

Alternatives

No alternatives found

Tutorials

No tutorials found
Add a tutorial