Server IP : 127.0.0.2 / Your IP : 18.217.0.242 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/npm/node_modules/npm-registry-client/lib/ |
Upload File : |
module.exports = unpublish // fetch the data // modify to remove the version in question // If no versions remaining, then DELETE // else, PUT the modified data // delete the tarball var semver = require('semver') var url = require('url') var chain = require('slide').chain var assert = require('assert') function unpublish (uri, params, cb) { assert(typeof uri === 'string', 'must pass registry URI to unpublish') assert(params && typeof params === 'object', 'must pass params to unpublish') assert(typeof cb === 'function', 'must pass callback to unpublish') var ver = params.version var auth = params.auth assert(auth && typeof auth === 'object', 'must pass auth to unpublish') var options = { timeout: -1, follow: false, auth: auth } this.get(uri + '?write=true', options, function (er, data) { if (er) { this.log.info('unpublish', uri + ' not published') return cb() } // remove all if no version specified if (!ver) { this.log.info('unpublish', 'No version specified, removing all') return this.request(uri + '/-rev/' + data._rev, { method: 'DELETE', auth: auth }, cb) } var versions = data.versions || {} var versionPublic = versions.hasOwnProperty(ver) var dist if (!versionPublic) { this.log.info('unpublish', uri + '@' + ver + ' not published') } else { dist = versions[ver].dist this.log.verbose('unpublish', 'removing attachments', dist) } delete versions[ver] // if it was the only version, then delete the whole package. if (!Object.keys(versions).length) { this.log.info('unpublish', 'No versions remain, removing entire package') return this.request(uri + '/-rev/' + data._rev, { method: 'DELETE', auth: auth }, cb) } if (!versionPublic) return cb() var latestVer = data['dist-tags'].latest for (var tag in data['dist-tags']) { if (data['dist-tags'][tag] === ver) delete data['dist-tags'][tag] } if (latestVer === ver) { data['dist-tags'].latest = Object.getOwnPropertyNames(versions).sort(semver.compareLoose).pop() } var rev = data._rev delete data._revisions delete data._attachments var cb_ = detacher.call(this, uri, data, dist, auth, cb) this.request(uri + '/-rev/' + rev, { method: 'PUT', body: data, auth: auth }, function (er) { if (er) { this.log.error('unpublish', 'Failed to update data') } cb_(er) }.bind(this)) }.bind(this)) } function detacher (uri, data, dist, credentials, cb) { return function (er) { if (er) return cb(er) this.get(escape(uri, data.name), { auth: credentials }, function (er, data) { if (er) return cb(er) var tb = url.parse(dist.tarball) detach.call(this, uri, data, tb.pathname, data._rev, credentials, function (er) { if (er || !dist.bin) return cb(er) chain(Object.keys(dist.bin).map(function (bt) { return function (cb) { var d = dist.bin[bt] detach.call(this, uri, data, url.parse(d.tarball).pathname, null, credentials, cb) }.bind(this) }, this), cb) }.bind(this)) }.bind(this)) }.bind(this) } function detach (uri, data, path, rev, credentials, cb) { if (rev) { path += '/-rev/' + rev this.log.info('detach', path) return this.request(url.resolve(uri, path), { method: 'DELETE', auth: credentials }, cb) } this.get(escape(uri, data.name), { auth: credentials }, function (er, data) { rev = data._rev if (!rev) return cb(new Error('No _rev found in ' + data._id)) detach.call(this, data, path, rev, cb) }.bind(this)) } function escape (base, name) { var escaped = name.replace(/\//, '%2f') return url.resolve(base, escaped) }