summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
blob: 5ff3a8891f5e2d7aefa256f56ac61a5ddccb23da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
module.exports = deprecate

var assert = require('assert')
var semver = require('semver')

function deprecate (uri, params, cb) {
  assert(typeof uri === 'string', 'must pass registry URI to deprecate')
  assert(params && typeof params === 'object', 'must pass params to deprecate')
  assert(typeof cb === 'function', 'must pass callback to deprecate')

  assert(typeof params.version === 'string', 'must pass version to deprecate')
  assert(typeof params.message === 'string', 'must pass message to deprecate')
  assert(
    params.auth && typeof params.auth === 'object',
    'must pass auth to deprecate'
  )

  var version = params.version
  var message = params.message
  var auth = params.auth

  if (semver.validRange(version) === null) {
    return cb(new Error('invalid version range: ' + version))
  }

  this.get(uri + '?write=true', { auth: auth }, function (er, data) {
    if (er) return cb(er)
    // filter all the versions that match
    Object.keys(data.versions).filter(function (v) {
      return semver.satisfies(v, version)
    }).forEach(function (v) {
      data.versions[v].deprecated = message
    })
    // now update the doc on the registry
    var options = {
      method: 'PUT',
      body: data,
      auth: auth
    }
    this.request(uri, options, cb)
  }.bind(this))
}