Nonviolent Pigeon Manifestation

    ajv-semver
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.5 • Public • Published

    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 }

    Install

    npm i ajv-semver

    DownloadsWeekly Downloads

    165

    Version

    1.0.5

    License

    ISC

    Unpacked Size

    45.4 kB

    Total Files

    10

    Last publish

    Collaborators

    • jdthorpe