__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
'use strict'
const BB = require('bluebird')
const cacache = require('cacache')
const createReadStream = require('graceful-fs').createReadStream
const getPublishConfig = require('./utils/get-publish-config.js')
const lifecycle = BB.promisify(require('./utils/lifecycle.js'))
const log = require('npmlog')
const mapToRegistry = require('./utils/map-to-registry.js')
const npa = require('npm-package-arg')
const npm = require('./npm.js')
const output = require('./utils/output.js')
const pack = require('./pack')
const pacote = require('pacote')
const pacoteOpts = require('./config/pacote')
const path = require('path')
const readJson = BB.promisify(require('read-package-json'))
const semver = require('semver')
const statAsync = BB.promisify(require('graceful-fs').stat)
const readUserInfo = require('./utils/read-user-info.js')
publish.usage = 'npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]' +
"\n\nPublishes '.' if no argument supplied" +
'\n\nSets tag `latest` if no --tag specified'
publish.completion = function (opts, cb) {
// publish can complete to a folder with a package.json
// or a tarball, or a tarball url.
// for now, not yet implemented.
return cb()
}
module.exports = publish
function publish (args, isRetry, cb) {
if (typeof cb !== 'function') {
cb = isRetry
isRetry = false
}
if (args.length === 0) args = ['.']
if (args.length !== 1) return cb(publish.usage)
log.verbose('publish', args)
const t = npm.config.get('tag').trim()
if (semver.validRange(t)) {
return cb(new Error('Tag name must not be a valid SemVer range: ' + t))
}
publish_(args[0]).then((pkg) => {
output(`+ ${pkg._id}`)
cb()
}, cb)
}
function publish_ (arg) {
return statAsync(arg).then((stat) => {
if (stat.isDirectory()) {
return stat
} else {
const err = new Error('not a directory')
err.code = 'ENOTDIR'
throw err
}
}).then(() => {
return publishFromDirectory(arg)
}, (err) => {
if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {
throw err
} else {
return publishFromPackage(arg)
}
})
}
function publishFromDirectory (arg) {
// All this readJson is because any of the given scripts might modify the
// package.json in question, so we need to refresh after every step.
return pack.prepareDirectory(arg).then(() => {
return readJson(path.join(arg, 'package.json'))
}).then((pkg) => {
return lifecycle(pkg, 'prepublishOnly', arg)
}).then(() => {
return readJson(path.join(arg, 'package.json'))
}).then((pkg) => {
return cacache.tmp.withTmp(npm.tmp, {tmpPrefix: 'fromDir'}, (tmpDir) => {
const target = path.join(tmpDir, 'package.tgz')
return pack.packDirectory(pkg, arg, target).then(() => {
return upload(arg, pkg, false, target)
})
})
}).then(() => {
return readJson(path.join(arg, 'package.json'))
}).tap((pkg) => {
return lifecycle(pkg, 'publish', arg)
}).tap((pkg) => {
return lifecycle(pkg, 'postpublish', arg)
})
}
function publishFromPackage (arg) {
return cacache.tmp.withTmp(npm.tmp, {tmpPrefix: 'fromPackage'}, (tmp) => {
const extracted = path.join(tmp, 'package')
const target = path.join(tmp, 'package.json')
const opts = pacoteOpts()
return pacote.tarball.toFile(arg, target, opts)
.then(() => pacote.extract(arg, extracted, opts))
.then(() => readJson(path.join(extracted, 'package.json')))
.tap((pkg) => upload(arg, pkg, false, target))
})
}
function upload (arg, pkg, isRetry, cached) {
if (!pkg) {
return BB.reject(new Error('no package.json file found'))
}
if (pkg.private) {
return BB.reject(new Error(
'This package has been marked as private\n' +
"Remove the 'private' field from the package.json to publish it."
))
}
const mappedConfig = getPublishConfig(
pkg.publishConfig,
npm.config,
npm.registry
)
const config = mappedConfig.config
const registry = mappedConfig.client
pkg._npmVersion = npm.version
pkg._nodeVersion = process.versions.node
delete pkg.modules
return BB.fromNode((cb) => {
mapToRegistry(pkg.name, config, (err, registryURI, auth, registryBase) => {
if (err) { return cb(err) }
cb(null, [registryURI, auth, registryBase])
})
}).spread((registryURI, auth, registryBase) => {
// we just want the base registry URL in this case
log.verbose('publish', 'registryBase', registryBase)
log.silly('publish', 'uploading', cached)
pkg._npmUser = {
name: auth.username,
email: auth.email
}
const params = {
metadata: pkg,
body: createReadStream(cached),
auth: auth
}
// registry-frontdoor cares about the access level, which is only
// configurable for scoped packages
if (config.get('access')) {
if (!npa(pkg.name).scope && config.get('access') === 'restricted') {
throw new Error("Can't restrict access to unscoped packages.")
}
params.access = config.get('access')
}
log.showProgress('publish:' + pkg._id)
return BB.fromNode((cb) => {
registry.publish(registryBase, params, cb)
}).catch((err) => {
if (
err.code === 'EPUBLISHCONFLICT' &&
npm.config.get('force') &&
!isRetry
) {
log.warn('publish', 'Forced publish over ' + pkg._id)
return BB.fromNode((cb) => {
npm.commands.unpublish([pkg._id], cb)
}).finally(() => {
// ignore errors. Use the force. Reach out with your feelings.
return upload(arg, pkg, true, cached).catch(() => {
// but if it fails again, then report the first error.
throw err
})
})
} else {
throw err
}
})
}).catch((err) => {
if (err.code !== 'EOTP' && !(err.code === 'E401' && /one-time pass/.test(err.message))) throw err
// we prompt on stdout and read answers from stdin, so they need to be ttys.
if (!process.stdin.isTTY || !process.stdout.isTTY) throw err
return readUserInfo.otp('Enter OTP: ').then((otp) => {
npm.config.set('otp', otp)
return upload(arg, pkg, isRetry, cached)
})
})
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| auth | Folder | 0755 |
|
|
| config | Folder | 0755 |
|
|
| doctor | Folder | 0755 |
|
|
| install | Folder | 0755 |
|
|
| search | Folder | 0755 |
|
|
| utils | Folder | 0755 |
|
|
| access.js | File | 3.23 KB | 0644 |
|
| adduser.js | File | 1.28 KB | 0644 |
|
| bin.js | File | 515 B | 0644 |
|
| bugs.js | File | 879 B | 0644 |
|
| build.js | File | 4.45 KB | 0644 |
|
| cache.js | File | 4.43 KB | 0644 |
|
| completion.js | File | 7.06 KB | 0644 |
|
| config.js | File | 7.22 KB | 0644 |
|
| dedupe.js | File | 4.83 KB | 0644 |
|
| deprecate.js | File | 1.41 KB | 0644 |
|
| dist-tag.js | File | 3.67 KB | 0644 |
|
| docs.js | File | 1.05 KB | 0644 |
|
| doctor.js | File | 3.97 KB | 0644 |
|
| edit.js | File | 985 B | 0644 |
|
| explore.js | File | 1.63 KB | 0644 |
|
| fetch-package-metadata.js | File | 3.8 KB | 0644 |
|
| fetch-package-metadata.md | File | 1.77 KB | 0644 |
|
| get.js | File | 235 B | 0644 |
|
| help-search.js | File | 5.65 KB | 0644 |
|
| help.js | File | 6.32 KB | 0644 |
|
| init.js | File | 1.26 KB | 0644 |
|
| install-test.js | File | 507 B | 0644 |
|
| install.js | File | 32.16 KB | 0644 |
|
| link.js | File | 5.56 KB | 0644 |
|
| logout.js | File | 1.1 KB | 0644 |
|
| ls.js | File | 15.83 KB | 0644 |
|
| npm.js | File | 13.3 KB | 0644 |
|
| outdated.js | File | 12.15 KB | 0644 |
|
| owner.js | File | 7.55 KB | 0644 |
|
| pack.js | File | 7.21 KB | 0644 |
|
| ping.js | File | 688 B | 0644 |
|
| prefix.js | File | 330 B | 0644 |
|
| profile.js | File | 10.61 KB | 0644 |
|
| prune.js | File | 2.14 KB | 0644 |
|
| publish.js | File | 6.1 KB | 0644 |
|
| rebuild.js | File | 2.09 KB | 0644 |
|
| repo.js | File | 1.45 KB | 0644 |
|
| restart.js | File | 64 B | 0644 |
|
| root.js | File | 316 B | 0644 |
|
| run-script.js | File | 5.18 KB | 0644 |
|
| search.js | File | 3.15 KB | 0644 |
|
| set.js | File | 276 B | 0644 |
|
| shrinkwrap.js | File | 7.76 KB | 0644 |
|
| star.js | File | 1.17 KB | 0644 |
|
| stars.js | File | 1.1 KB | 0644 |
|
| start.js | File | 62 B | 0644 |
|
| stop.js | File | 61 B | 0644 |
|
| substack.js | File | 509 B | 0644 |
|
| team.js | File | 1.41 KB | 0644 |
|
| test.js | File | 324 B | 0644 |
|
| token.js | File | 6.2 KB | 0644 |
|
| unbuild.js | File | 4.11 KB | 0644 |
|
| uninstall.js | File | 2.22 KB | 0644 |
|
| unpublish.js | File | 3.55 KB | 0644 |
|
| update.js | File | 2.18 KB | 0644 |
|
| version.js | File | 9.1 KB | 0644 |
|
| view.js | File | 9.26 KB | 0644 |
|
| visnup.js | File | 4.01 KB | 0644 |
|
| whoami.js | File | 1.42 KB | 0644 |
|
| xmas.js | File | 1.57 KB | 0644 |
|