six-widget-buildsupport
Version:
SIX Widgets buildsupport
74 lines (62 loc) • 1.95 kB
JavaScript
/*
This script will check if a project is in pre-release or
release stage.
If a project is in release stage it will try to check if
any dependencies (excluding dev dependencies) can resolve
to a pre-release version.
*/
const path = require('path');
const packageDir = path.resolve('.')
const json = require(path.join(packageDir,'package.json'))
const semver = require('semver')
let stage = "DEVELOPMENT"
let errors = []
let isReleaseVersion = function isReleaseVersion(r1){
let version = r1.trim().replace(/^[=v~^]+/, '')
let prerelease = semver.parse(version).prerelease
return prerelease === undefined || prerelease.length == 0
}
let isRelease = function isRelease(name,depMap,errors){
let versionRange = depMap[name]
getVersionRangeList(versionRange).forEach(function(version){
if(!isReleaseVersion(version)){
errors.push("Can resolve to non-release version " + name + " " + versionRange)
}
})
}
let getVersionRangeList = function getVersionRangeList(versionRange){
let versions = []
// Splits versions separated on space and ||
semver.validRange(versionRange).split(/\s*\|\|\s*| /).forEach(function(v){
let version = semver.parse(v.trim().replace(/^[=~^<>]+/,''))
if(version){
versions.push(version.raw)
}
})
return versions
}
// Export for testing
module.exports.isRelease = isRelease
// If run as script
if (!module.parent) {
if(isReleaseVersion(json.version)){
stage = "RELEASE"
if(json.dependencies){
Object.keys(json.dependencies).forEach(function(name){
isRelease(name,json.dependencies,errors)
})
}
if(json.peerDependencies){
Object.keys(json.peerDependencies).forEach(function(name){
isRelease(name,json.peerDependencies,errors)
})
}
}
if(errors.length == 0){
console.log(stage)
}
errors.forEach(function(e) { console.error(e) })
process.exit(errors.length == 0 ? 0 : 1)
}
;