mirror of
https://github.com/openstf/stf
synced 2025-10-03 17:59:28 +02:00
72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
var util = require('util')
|
|
|
|
var Promise = require('bluebird')
|
|
var semver = require('semver')
|
|
var minimatch = require('minimatch')
|
|
|
|
var wire = require('../wire')
|
|
|
|
function RequirementMismatchError(name) {
|
|
Error.call(this)
|
|
this.name = 'RequirementMismatchError'
|
|
this.message = util.format('Requirement mismatch for "%s"', name)
|
|
Error.captureStackTrace(this, RequirementMismatchError)
|
|
}
|
|
|
|
util.inherits(RequirementMismatchError, Error)
|
|
|
|
module.exports.RequirementMismatchError = RequirementMismatchError
|
|
|
|
function AlreadyGroupedError() {
|
|
Error.call(this)
|
|
this.name = 'AlreadyGroupedError'
|
|
this.message = 'Already a member of another group'
|
|
Error.captureStackTrace(this, AlreadyGroupedError)
|
|
}
|
|
|
|
util.inherits(AlreadyGroupedError, Error)
|
|
|
|
module.exports.AlreadyGroupedError = AlreadyGroupedError
|
|
|
|
function NoGroupError() {
|
|
Error.call(this)
|
|
this.name = 'NoGroupError'
|
|
this.message = 'Not a member of any group'
|
|
Error.captureStackTrace(this, NoGroupError)
|
|
}
|
|
|
|
util.inherits(NoGroupError, Error)
|
|
|
|
module.exports.NoGroupError = NoGroupError
|
|
|
|
module.exports.match = Promise.method(function(capabilities, requirements) {
|
|
return requirements.every(function(req) {
|
|
var capability = capabilities[req.name]
|
|
|
|
if (!capability) {
|
|
throw new RequirementMismatchError(req.name)
|
|
}
|
|
|
|
switch (req.type) {
|
|
case wire.RequirementType.SEMVER:
|
|
if (!semver.satisfies(capability, req.value)) {
|
|
throw new RequirementMismatchError(req.name)
|
|
}
|
|
break
|
|
case wire.RequirementType.GLOB:
|
|
if (!minimatch(capability, req.value)) {
|
|
throw new RequirementMismatchError(req.name)
|
|
}
|
|
break
|
|
case wire.RequirementType.EXACT:
|
|
if (capability !== req.value) {
|
|
throw new RequirementMismatchError(req.name)
|
|
}
|
|
break
|
|
default:
|
|
throw new RequirementMismatchError(req.name)
|
|
}
|
|
|
|
return true
|
|
})
|
|
})
|