Comparing version
{ | ||
"name": "auto-vers", | ||
"version": "0.1.0", | ||
"version": "0.3.0", | ||
"description": "", | ||
@@ -15,2 +15,3 @@ "main": "./dist/index.js", | ||
"beta": "npm run build && ./bin/auto-vers -i prerelease", | ||
"tip": "./bin/auto-vers -t", | ||
"test": "./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha && ./node_modules/.bin/codecov" | ||
@@ -39,2 +40,3 @@ }, | ||
"codecov": "^3.1.0", | ||
"inquirer-test": "^2.0.1", | ||
"istanbul": "^0.4.5", | ||
@@ -41,0 +43,0 @@ "mocha": "^5.2.0" |
@@ -39,3 +39,3 @@ # auto-vers | ||
bash | ||
bash | ||
``` | ||
@@ -57,6 +57,14 @@ ./bin/auto-vers -i | ||
``` | ||
-i --increment [<level>] | ||
auto-vers 0.2.0 | ||
Auto update version for your application | ||
Usage: auto-vers [options] <version> [[...]] | ||
Options | ||
-v --version <version> | ||
Can change version directly. | ||
-i --inc --increment [<level>] | ||
Increment a version by the specified level. Level can | ||
be one of: major, minor, patch or prerelease. | ||
Default level is 'patch'. | ||
be one of: major, minor, patch, premajor, preminor | ||
, prepatch or prerelease. Default level is 'patch'. | ||
Only one version may be specified. | ||
@@ -66,4 +74,7 @@ -e --extra [<value>] | ||
Such as 'beta','alpha' | ||
-c --confirm | ||
Do not update the version directly, you can confirm. | ||
This is a safe mode. | ||
-t --tip | ||
Do not update the version directly, you can confirm. | ||
Provide choice to you. | ||
``` | ||
@@ -105,2 +116,3 @@ | ||
{ | ||
version?: <version>, | ||
type: major | minor | patch | prerelease, | ||
@@ -124,2 +136,6 @@ url?: package.json's url, | ||
open the tip(-t --tip), this is a safe way to update. | ||
 | ||
# License | ||
@@ -126,0 +142,0 @@ |
const semver = require('semver'); | ||
const colors = require('colors'); | ||
const { prompt } = require('enquirer'); | ||
const { prompt, Select } = require('enquirer'); | ||
const global = require('./global'); | ||
const {pkgRead, pkgUpdate} = require('./pkg'); | ||
function autoVersion({type, extra, url, confirm}) { | ||
const {version, text} = updateVersion({type, extra, url}); | ||
function autoVersion({version, type, extra, url, confirm, tip}) { | ||
if(version) { | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version})); | ||
return version; | ||
} | ||
if(tip) { | ||
const [list, preList] = tipToUpdate({extra, url}); | ||
const prompt = new Select({ | ||
name: 'version', | ||
message: 'Update to version', | ||
choices: list | ||
}); | ||
prompt.run() | ||
.then(answer => { | ||
if(answer === 'prerelease') { | ||
const prerPompt = new Select({ | ||
name: 'pre-version', | ||
message: 'Update to pre-version', | ||
choices: preList | ||
}) | ||
prerPompt.run() | ||
.then(res => { | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version: res})); | ||
}) | ||
.catch(console.error); | ||
} else { | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version: answer})); | ||
} | ||
}) | ||
.catch(console.error); | ||
return; | ||
} | ||
const {oldVer, newVer} = updateVersion({type, extra, url}); | ||
const text = `version will update ${oldVer} -> ${newVer}`.red; | ||
if(confirm) { | ||
@@ -19,3 +53,3 @@ const question = { | ||
if(answer.progress) { | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version})); | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version: newVer})); | ||
} else { | ||
@@ -28,11 +62,58 @@ console.log('cancel'); | ||
console.log(text); | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version})); | ||
pkgUpdate(url, Object.assign(pkgRead(url), {version: newVer})); | ||
} | ||
return version; | ||
return newVer; | ||
} | ||
function tipType(type, oldVer, newVer) { | ||
let text = ''; | ||
switch (type) { | ||
case 'major': | ||
case 'minor': | ||
case 'patch': | ||
case 'premajor': | ||
case 'preminor': | ||
case 'prepatch': | ||
case 'prerelease': | ||
text = `[${type}] ${global[type.toUpperCase()]}`; | ||
break; | ||
default: | ||
return 'prerelease'; | ||
} | ||
return `${text}(${oldVer} -> ${newVer})` | ||
} | ||
function tipToUpdate({extra, url}) { | ||
const oldVer = getCurrentVersion(url); | ||
const list = []; | ||
const preList = []; | ||
const major = getNewVersion(oldVer, 'major', extra); | ||
const minor = getNewVersion(oldVer, 'minor', extra); | ||
const patch = getNewVersion(oldVer, 'patch', extra); | ||
const arr = [['patch', patch], ['minor', minor], ['major', major], ['preRelease', 'prerelease']].map(item => { | ||
return { | ||
message: tipType(item[0], oldVer, item[1]), | ||
value: item[1] | ||
} | ||
}); | ||
list.push(...arr); | ||
const premajor = getNewVersion(oldVer, 'premajor', extra); | ||
const preminor = getNewVersion(oldVer, 'preminor', extra); | ||
const prepatch = getNewVersion(oldVer, 'prepatch', extra); | ||
const prerelease = getNewVersion(oldVer, 'prerelease', extra); | ||
const preArr = [['premajor', premajor], ['preminor', preminor], ['prepatch', prepatch], ['prerelease', prerelease]].map(item => { | ||
return { | ||
message: tipType(item[0], oldVer, item[1]), | ||
value: item[1] | ||
} | ||
}); | ||
preList.push(...preArr); | ||
return [list, preList]; | ||
} | ||
function updateVersion({type, extra, url, version}) { | ||
const oldVer = getCurrentVersion(url); | ||
let newVer = version ? version : getNewVersion(oldVer, type, extra); | ||
return {version: newVer, text: `version will update ${oldVer} -> ${newVer}`.red}; | ||
return {oldVer, newVer}; | ||
} | ||
@@ -52,2 +133,6 @@ | ||
newVersion = semver.inc(oldVersion, type); | ||
break; | ||
case 'premajor': | ||
case 'preminor': | ||
case 'prepatch': | ||
case 'prerelease': | ||
@@ -57,4 +142,4 @@ if(extra) { | ||
} else { | ||
if(!semver.prerelease(oldVersion)) { | ||
extra = 'bata'; | ||
if(!semver.prerelease(oldVersion) || type !== 'prerelease') { | ||
extra = 'bata' | ||
newVersion = semver.inc(oldVersion, type, extra); | ||
@@ -72,2 +157,7 @@ } else { | ||
module.exports = autoVersion; | ||
module.exports = { | ||
autoVersion, | ||
getNewVersion, | ||
getCurrentVersion, | ||
tipToUpdate | ||
}; |
@@ -1,3 +0,3 @@ | ||
const autoVers = require('./auto-vers'); | ||
const {autoVersion} = require('./auto-vers'); | ||
module.exports = autoVers; | ||
module.exports = autoVersion; |
const path = require('path'); | ||
const assert = require('chai').assert; | ||
const autoVersion = require('../src/auto-vers'); | ||
const {autoVersion, tipToUpdate} = require('../src/auto-vers'); | ||
const global = require('../src/global'); | ||
const {pkgUpdate, pkgRead} = require('../src/pkg'); | ||
@@ -83,2 +84,11 @@ | ||
}) | ||
it('tip type text', () => { | ||
const curPath = path.join(__dirname, './package.json'); | ||
const result = tipToUpdate({url: curPath}); | ||
const expect = `[[{"message":"[patch] ${global.PATCH}(1.0.0 -> 1.0.1)","value":"1.0.1"},{"message":"[minor] ${global.MINOR}(1.0.0 -> 1.1.0)","value":"1.1.0"},{"message":"[major] ${global.MAJOR}(1.0.0 -> 2.0.0)","value":"2.0.0"},{"message":"prerelease","value":"prerelease"}],[{"message":"[premajor] ${global.PREMAJOR}(1.0.0 -> 2.0.0-bata.0)","value":"2.0.0-bata.0"},{"message":"[preminor] ${global.PREMINOR}(1.0.0 -> 1.1.0-bata.0)","value":"1.1.0-bata.0"},{"message":"[prepatch] ${global.PREPATCH}(1.0.0 -> 1.0.1-bata.0)","value":"1.0.1-bata.0"},{"message":"[prerelease] ${global.PRERELEASE}(1.0.0 -> 1.0.1-bata.0)","value":"1.0.1-bata.0"}]]`; | ||
assert.equal(JSON.stringify(result), expect); | ||
}) | ||
}) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
21806
48.43%15
15.38%305
84.85%140
12.9%7
16.67%