UNPKG

@dependabot/yarn-lib

Version:

📦🐈 Fast, reliable, and secure dependency management.

240 lines (192 loc) 7.42 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.run = undefined; var _asyncToGenerator2; function _load_asyncToGenerator() { return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator')); } let publish = (() => { var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, pkg, flags, dir) { let access = flags.access; // if no access level is provided, check package.json for `publishConfig.access` // see: https://docs.npmjs.com/files/package.json#publishconfig if (!access && pkg && pkg.publishConfig && pkg.publishConfig.access) { access = pkg.publishConfig.access; } // validate access argument if (access && access !== 'public' && access !== 'restricted') { throw new (_errors || _load_errors()).MessageError(config.reporter.lang('invalidAccess')); } // TODO this might modify package.json, do we need to reload it? yield config.executeLifecycleScript('prepublish'); yield config.executeLifecycleScript('prepare'); yield config.executeLifecycleScript('prepublishOnly'); yield config.executeLifecycleScript('prepack'); // get tarball stream const stat = yield (_fs || _load_fs()).lstat(dir); let stream; if (stat.isDirectory()) { stream = yield (0, (_pack || _load_pack()).pack)(config); } else if (stat.isFile()) { stream = fs2.createReadStream(dir); } else { throw new Error("Don't know how to handle this file type"); } const buffer = yield new Promise(function (resolve, reject) { const data = []; invariant(stream, 'expected stream'); stream.on('data', data.push.bind(data)).on('end', function () { return resolve(Buffer.concat(data)); }).on('error', reject); }); yield config.executeLifecycleScript('postpack'); // copy normalized package and remove internal keys as they may be sensitive or yarn specific pkg = Object.assign({}, pkg); for (const key in pkg) { if (key[0] === '_') { delete pkg[key]; } } const tag = flags.tag || 'latest'; const tbName = `${pkg.name}-${pkg.version}.tgz`; const tbURI = `${pkg.name}/-/${tbName}`; // create body const root = { _id: pkg.name, access, name: pkg.name, description: pkg.description, 'dist-tags': { [tag]: pkg.version }, versions: { [pkg.version]: pkg }, readme: pkg.readme || '', _attachments: { [tbName]: { content_type: 'application/octet-stream', data: buffer.toString('base64'), length: buffer.length } } }; pkg._id = `${pkg.name}@${pkg.version}`; pkg.dist = pkg.dist || {}; pkg.dist.shasum = crypto.createHash('sha1').update(buffer).digest('hex'); pkg.dist.integrity = ssri.fromData(buffer).toString(); const registry = String(config.getOption('registry')); pkg.dist.tarball = url.resolve(registry, tbURI).replace(/^https:\/\//, 'http://'); // publish package try { yield config.registries.npm.request((_npmRegistry || _load_npmRegistry()).default.escapeName(pkg.name), { registry: pkg && pkg.publishConfig && pkg.publishConfig.registry, method: 'PUT', body: root }); } catch (error) { throw new (_errors || _load_errors()).MessageError(config.reporter.lang('publishFail', error.message)); } yield config.executeLifecycleScript('publish'); yield config.executeLifecycleScript('postpublish'); }); return function publish(_x, _x2, _x3, _x4) { return _ref.apply(this, arguments); }; })(); let run = exports.run = (() => { var _ref2 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, reporter, flags, args) { // validate arguments const dir = args[0] ? (_path || _load_path()).default.resolve(config.cwd, args[0]) : config.cwd; if (args.length > 1) { throw new (_errors || _load_errors()).MessageError(reporter.lang('tooManyArguments', 1)); } if (!(yield (_fs || _load_fs()).exists(dir))) { throw new (_errors || _load_errors()).MessageError(reporter.lang('unknownFolderOrTarball')); } const stat = yield (_fs || _load_fs()).lstat(dir); let publishPath = dir; if (stat.isDirectory()) { config.cwd = (_path || _load_path()).default.resolve(dir); publishPath = config.cwd; } // validate package fields that are required for publishing // $FlowFixMe const pkg = yield config.readRootManifest(); if (pkg.private) { throw new (_errors || _load_errors()).MessageError(reporter.lang('publishPrivate')); } if (!pkg.name) { throw new (_errors || _load_errors()).MessageError(reporter.lang('noName')); } let registry = ''; if (pkg && pkg.publishConfig && pkg.publishConfig.registry) { registry = pkg.publishConfig.registry; } reporter.step(1, 4, reporter.lang('bumpingVersion')); const commitVersion = yield (0, (_version || _load_version()).setVersion)(config, reporter, flags, [], false); // reporter.step(2, 4, reporter.lang('loggingIn')); const revoke = yield (0, (_login || _load_login()).getToken)(config, reporter, pkg.name, flags, registry); // reporter.step(3, 4, reporter.lang('publishing')); yield publish(config, pkg, flags, publishPath); yield commitVersion(); reporter.success(reporter.lang('published')); // reporter.step(4, 4, reporter.lang('revokingToken')); yield revoke(); }); return function run(_x5, _x6, _x7, _x8) { return _ref2.apply(this, arguments); }; })(); exports.setFlags = setFlags; exports.hasWrapper = hasWrapper; var _npmRegistry; function _load_npmRegistry() { return _npmRegistry = _interopRequireDefault(require('../../registries/npm-registry.js')); } var _errors; function _load_errors() { return _errors = require('../../errors.js'); } var _version; function _load_version() { return _version = require('./version.js'); } var _fs; function _load_fs() { return _fs = _interopRequireWildcard(require('../../util/fs.js')); } var _pack; function _load_pack() { return _pack = require('./pack.js'); } var _login; function _load_login() { return _login = require('./login.js'); } var _path; function _load_path() { return _path = _interopRequireDefault(require('path')); } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const invariant = require('invariant'); const crypto = require('crypto'); const url = require('url'); const fs2 = require('fs'); const ssri = require('ssri'); function setFlags(commander) { (0, (_version || _load_version()).setFlags)(commander); commander.description('Publishes a package to the npm registry.'); commander.usage('publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]'); commander.option('--access [access]', 'access'); commander.option('--tag [tag]', 'tag'); } function hasWrapper(commander, args) { return true; }