@dependabot/yarn-lib
Version:
📦🐈 Fast, reliable, and secure dependency management.
218 lines (170 loc) • 7.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.run = exports.pack = exports.packTarball = undefined;
var _asyncToGenerator2;
function _load_asyncToGenerator() {
return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator'));
}
let packTarball = exports.packTarball = (() => {
var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, { mapHeader } = {}) {
const pkg = yield config.readRootManifest();
const bundledDependencies = pkg.bundledDependencies,
main = pkg.main,
onlyFiles = pkg.files;
// include required files
let filters = NEVER_IGNORE.slice();
// include default filters unless `files` is used
if (!onlyFiles) {
filters = filters.concat(DEFAULT_IGNORE);
}
if (main) {
filters = filters.concat((0, (_filter || _load_filter()).ignoreLinesToRegex)(['!/' + main]));
}
// include bundledDependencies
if (bundledDependencies) {
const folder = config.getFolder(pkg);
filters = (0, (_filter || _load_filter()).ignoreLinesToRegex)(bundledDependencies.map(function (name) {
return `!${folder}/${name}`;
}), '.');
}
// `files` field
if (onlyFiles) {
let lines = ['*'];
lines = lines.concat(onlyFiles.map(function (filename) {
return `!${filename}`;
}), onlyFiles.map(function (filename) {
return `!${path.join(filename, '**')}`;
}));
const regexes = (0, (_filter || _load_filter()).ignoreLinesToRegex)(lines, '.');
filters = filters.concat(regexes);
}
const files = yield (_fs || _load_fs()).walk(config.cwd, null, new Set(FOLDERS_IGNORE));
const dotIgnoreFiles = (0, (_filter || _load_filter()).filterOverridenGitignores)(files);
// create ignores
for (var _iterator = dotIgnoreFiles, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref2;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref2 = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref2 = _i.value;
}
const file = _ref2;
const raw = yield (_fs || _load_fs()).readFile(file.absolute);
const lines = raw.split('\n');
const regexes = (0, (_filter || _load_filter()).ignoreLinesToRegex)(lines, path.dirname(file.relative));
filters = filters.concat(regexes);
}
// files to definitely keep, takes precedence over ignore filter
const keepFiles = new Set();
// files to definitely ignore
const ignoredFiles = new Set();
// list of files that didn't match any of our patterns, if a directory in the chain above was matched
// then we should inherit it
const possibleKeepFiles = new Set();
// apply filters
(0, (_filter || _load_filter()).sortFilter)(files, filters, keepFiles, possibleKeepFiles, ignoredFiles);
const packer = tar.pack(config.cwd, {
ignore: function ignore(name) {
const relative = path.relative(config.cwd, name);
// Don't ignore directories, since we need to recurse inside them to check for unignored files.
if (fs2.lstatSync(name).isDirectory()) {
const isParentOfKeptFile = Array.from(keepFiles).some(function (name) {
return !path.relative(relative, name).startsWith('..');
});
return !isParentOfKeptFile;
}
// Otherwise, ignore a file if we're not supposed to keep it.
return !keepFiles.has(relative);
},
map: function map(header) {
const suffix = header.name === '.' ? '' : `/${header.name}`;
header.name = `package${suffix}`;
delete header.uid;
delete header.gid;
return mapHeader ? mapHeader(header) : header;
}
});
return packer;
});
return function packTarball(_x) {
return _ref.apply(this, arguments);
};
})();
let pack = exports.pack = (() => {
var _ref3 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, dir) {
const packer = yield packTarball(config);
const compressor = packer.pipe(new zlib.Gzip());
return compressor;
});
return function pack(_x2, _x3) {
return _ref3.apply(this, arguments);
};
})();
let run = exports.run = (() => {
var _ref4 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, reporter, flags, args) {
const pkg = yield config.readRootManifest();
if (!pkg.name) {
throw new (_errors || _load_errors()).MessageError(reporter.lang('noName'));
}
if (!pkg.version) {
throw new (_errors || _load_errors()).MessageError(reporter.lang('noVersion'));
}
const normaliseScope = function normaliseScope(name) {
return name[0] === '@' ? name.substr(1).replace('/', '-') : name;
};
const filename = flags.filename || path.join(config.cwd, `${normaliseScope(pkg.name)}-v${pkg.version}.tgz`);
yield config.executeLifecycleScript('prepack');
const stream = yield pack(config, config.cwd);
yield new Promise(function (resolve, reject) {
stream.pipe(fs2.createWriteStream(filename));
stream.on('error', reject);
stream.on('close', resolve);
});
yield config.executeLifecycleScript('postpack');
reporter.success(reporter.lang('packWroteTarball', filename));
});
return function run(_x4, _x5, _x6, _x7) {
return _ref4.apply(this, arguments);
};
})();
exports.setFlags = setFlags;
exports.hasWrapper = hasWrapper;
var _fs;
function _load_fs() {
return _fs = _interopRequireWildcard(require('../../util/fs.js'));
}
var _filter;
function _load_filter() {
return _filter = require('../../util/filter.js');
}
var _errors;
function _load_errors() {
return _errors = require('../../errors.js');
}
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 zlib = require('zlib');
const path = require('path');
const tar = require('tar-fs');
const fs2 = require('fs');
const FOLDERS_IGNORE = [
// never allow version control folders
'.git', 'CVS', '.svn', '.hg', 'node_modules'];
const DEFAULT_IGNORE = (0, (_filter || _load_filter()).ignoreLinesToRegex)([...FOLDERS_IGNORE,
// ignore cruft
'yarn.lock', '.lock-wscript', '.wafpickle-{0..9}', '*.swp', '._*', 'npm-debug.log', 'yarn-error.log', '.npmrc', '.yarnrc', '.npmignore', '.gitignore', '.DS_Store']);
const NEVER_IGNORE = (0, (_filter || _load_filter()).ignoreLinesToRegex)([
// never ignore these files
'!/package.json', '!/readme*', '!/+(license|licence)*', '!/+(changes|changelog|history)*']);
function setFlags(commander) {
commander.description('Creates a compressed gzip archive of package dependencies.');
commander.option('-f, --filename <filename>', 'filename');
}
function hasWrapper(commander, args) {
return true;
}