Skip to content

Commit

Permalink
feat(filter): filter out prerelease tags, close #98
Browse files Browse the repository at this point in the history
  • Loading branch information
bahmutov committed Jun 25, 2017
1 parent 3d0a109 commit 82d4779
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 3 deletions.
22 changes: 22 additions & 0 deletions __snapshots__/filter-allowed-spec.js.snap-shot
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,25 @@ exports['can custom filter 1'] = {
]
}

exports['detects prerelease 1'] = {
"name": "isPrerelease",
"behavior": [
{
"given": "3.0.0-alpha",
"expect": true
},
{
"given": "3.0.0",
"expect": false
},
{
"given": "0.1.0",
"expect": false
},
{
"given": "10.0.0-beta.2",
"expect": true
}
]
}

10 changes: 9 additions & 1 deletion src/filter-allowed-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,28 @@ const la = require('lazy-ass')
const snapShot = require('snap-shot')
const filter = require('./filter-allowed-updates')
const {clone, equals} = require('ramda')
const {isPrerelease} = require('./utils')

/* global describe, it, afterEach */
describe('filter allowed', () => {
const current = {
q: { name: 'q', version: '1.1.1', type: 'dev' }
}
const available = [ { name: 'q', versions: [ '1.3.0', '2.0.2', '3.0.0' ] } ]
const available = [ { name: 'q',
versions: [ '1.3.0', '2.0.2', '3.0.0', '3.0.0-alpha', '3.0.0-rc0' ] } ]
const copy = clone(available)

afterEach(() => {
// sanity check to make sure we are not
// mutating the input objects
la(equals(available, copy),
'original available list is unchanged', available, copy)
})

it('detects prerelease', () => {
snapShot(isPrerelease, '3.0.0-alpha', '3.0.0', '0.1.0', '10.0.0-beta.2')
})

it('allows major', () => {
const options = {
allowed: 'major'
Expand Down
8 changes: 7 additions & 1 deletion src/filter-allowed-updates.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var semver = require('semver')
var _ = require('lodash')
const R = require('ramda')
const debug = require('debug')('next-update')
const {isPrerelease} = require('./utils')

la(check.fn(semver.diff), 'semver missing diff method', semver)

Expand Down Expand Up @@ -105,7 +106,12 @@ function filterAllowedUpdates (current, available, options) {
var versions = availableUpdate.versions
la(check.array(versions), 'missing versions in update', availableUpdate)

var filteredVersions = versions.filter(_.partial(filterVersions, fromVersion))
const filterByUpgradeType = _.partial(filterVersions, fromVersion)
const notPrerelease = R.complement(isPrerelease)

var filteredVersions = versions
.filter(notPrerelease)
.filter(filterByUpgradeType)
availableUpdate.versions = filteredVersions
return availableUpdate.versions.length > 0
}
Expand Down
13 changes: 12 additions & 1 deletion src/utils.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const la = require('lazy-ass')
const is = require('check-more-types')
const R = require('ramda')
const semver = require('semver')
const debug = require('debug')('next-update')

const name = 'next-update'

Expand Down Expand Up @@ -44,11 +46,20 @@ const stringify = (x) => JSON.stringify(x, null, 2)

const errorObject = (x) => (new Error(stringify(x)))

function isPrerelease (version) {
la(is.unemptyString(version), 'expected version string', version)
// https://github.com/npm/node-semver#functions
const prereleaseComponents = semver.prerelease(version)
debug('version %s prerelease components %j', version, prereleaseComponents)
return is.array(prereleaseComponents) && is.not.empty(prereleaseComponents)
}

module.exports = {
name,
getConfig,
getSkippedModules,
getTestCommand,
stringify,
errorObject
errorObject,
isPrerelease
}

0 comments on commit 82d4779

Please sign in to comment.