registry-sync
Advanced tools
Comparing version 2.2.1 to 2.3.0
{ | ||
"name": "registry-sync", | ||
"version": "2.2.1", | ||
"version": "2.3.0", | ||
"description": "synchronize a remote npm registry for private use", | ||
@@ -12,3 +12,3 @@ "repository": "https://github.com/heikkipora/registry-sync", | ||
"eslint": "eslint --fix src/* bin/*", | ||
"test": "mocha --require babel-register --require babel-polyfill --timeout 120000 test/*.js" | ||
"test": "mocha --require @babel/register --require @babel/polyfill --timeout 120000 test/*.js" | ||
}, | ||
@@ -18,11 +18,11 @@ "author": "Heikki Pora", | ||
"dependencies": { | ||
"@babel/runtime": "7.1.2", | ||
"axios": "0.18.0", | ||
"babel-runtime": "6.26.0", | ||
"bluebird": "3.5.1", | ||
"commander": "2.17.1", | ||
"lodash": "4.17.10", | ||
"bluebird": "3.5.2", | ||
"commander": "2.18.0", | ||
"lodash": "4.17.11", | ||
"mkdirp": "0.5.1", | ||
"rimraf": "2.6.2", | ||
"semver": "5.5.0", | ||
"ssri": "6.0.0", | ||
"semver": "5.5.1", | ||
"ssri": "6.0.1", | ||
"streamifier": "0.1.1", | ||
@@ -32,13 +32,13 @@ "tar-fs": "1.16.3" | ||
"devDependencies": { | ||
"babel-cli": "6.26.0", | ||
"babel-core": "6.26.3", | ||
"babel-eslint": "8.2.6", | ||
"babel-plugin-transform-object-rest-spread": "6.26.0", | ||
"babel-plugin-transform-runtime": "6.23.0", | ||
"babel-polyfill": "6.26.0", | ||
"babel-preset-env": "1.7.0", | ||
"babel-register": "6.26.0", | ||
"chai": "4.1.2", | ||
"eslint": "5.3.0", | ||
"eslint-plugin-mocha": "5.1.0", | ||
"@babel/cli": "7.1.2", | ||
"@babel/core": "7.1.2", | ||
"@babel/plugin-proposal-object-rest-spread": "7.0.0", | ||
"@babel/plugin-transform-runtime": "7.1.0", | ||
"@babel/polyfill": "7.0.0", | ||
"@babel/preset-env": "7.1.0", | ||
"@babel/register": "7.0.0", | ||
"babel-eslint": "10.0.1", | ||
"chai": "4.2.0", | ||
"eslint": "5.6.1", | ||
"eslint-plugin-mocha": "5.2.0", | ||
"express": "4.16.3", | ||
@@ -55,4 +55,4 @@ "mocha": "5.2.0" | ||
"engines": { | ||
"node": ">=5.0.0" | ||
"node": ">=6.0.0" | ||
} | ||
} |
@@ -13,3 +13,3 @@ # registry-sync | ||
- Node.js v5.0.0 or newer | ||
- Node.js v6.0.0 or newer | ||
@@ -16,0 +16,0 @@ ## Installation |
@@ -1,97 +0,55 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.fetchUrl = undefined; | ||
exports.fetchUrl = fetchUrl; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _axios = _interopRequireDefault(require("axios")); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _https = _interopRequireDefault(require("https")); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
const metadataCache = {}; | ||
var fetchUrl = exports.fetchUrl = function () { | ||
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(url) { | ||
var isBinary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
if (!isBinary) { | ||
_context.next = 2; | ||
break; | ||
} | ||
const client = _axios.default.create({ | ||
httpsAgent: new _https.default.Agent({ | ||
keepAlive: true | ||
}), | ||
timeout: 10 * 1000 | ||
}); | ||
return _context.abrupt('return', fetch(url, 'arraybuffer')); | ||
function fetchUrl(_x) { | ||
return _fetchUrl.apply(this, arguments); | ||
} | ||
case 2: | ||
if (metadataCache[url]) { | ||
_context.next = 6; | ||
break; | ||
} | ||
function _fetchUrl() { | ||
_fetchUrl = (0, _asyncToGenerator2.default)(function* (url, isBinary = false) { | ||
if (isBinary) { | ||
return fetch(url, 'arraybuffer'); | ||
} | ||
_context.next = 5; | ||
return fetch(url, 'json'); | ||
if (!metadataCache[url]) { | ||
metadataCache[url] = yield fetch(url, 'json'); | ||
} | ||
case 5: | ||
metadataCache[url] = _context.sent; | ||
return metadataCache[url]; | ||
}); | ||
return _fetchUrl.apply(this, arguments); | ||
} | ||
case 6: | ||
return _context.abrupt('return', metadataCache[url]); | ||
function fetch(_x2, _x3) { | ||
return _fetch.apply(this, arguments); | ||
} | ||
case 7: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
return function fetchUrl(_x2) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
var fetch = function () { | ||
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(url, responseType) { | ||
return _regenerator2.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.next = 2; | ||
return client.get(url, { responseType: responseType }); | ||
case 2: | ||
return _context2.abrupt('return', _context2.sent.data); | ||
case 3: | ||
case 'end': | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
return function fetch(_x3, _x4) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
}(); | ||
var _axios = require('axios'); | ||
var _axios2 = _interopRequireDefault(_axios); | ||
var _https = require('https'); | ||
var _https2 = _interopRequireDefault(_https); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var metadataCache = {}; | ||
var client = _axios2.default.create({ | ||
httpsAgent: new _https2.default.Agent({ keepAlive: true }), | ||
timeout: 10 * 1000 | ||
}); | ||
function _fetch() { | ||
_fetch = (0, _asyncToGenerator2.default)(function* (url, responseType) { | ||
return (yield client.get(url, { | ||
responseType | ||
})).data; | ||
}); | ||
return _fetch.apply(this, arguments); | ||
} |
@@ -1,318 +0,176 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.downloadAll = downloadAll; | ||
var _stringify = require('babel-runtime/core-js/json/stringify'); | ||
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); | ||
var _stringify2 = _interopRequireDefault(_stringify); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _extends2 = require('babel-runtime/helpers/extends'); | ||
var _lodash = _interopRequireDefault(require("lodash")); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _client = require("./client"); | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
var _mkdirp = _interopRequireDefault(require("mkdirp")); | ||
var _keys2 = _interopRequireDefault(_keys); | ||
var _path = _interopRequireDefault(require("path")); | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _bluebird = _interopRequireDefault(require("bluebird")); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _semver = _interopRequireDefault(require("semver")); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _url = _interopRequireDefault(require("url")); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
var _integrity = require("./integrity"); | ||
var download = function () { | ||
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(registryUrl, localUrl, rootFolder, prebuiltBinaryProperties, _ref2) { | ||
var name = _ref2.name, | ||
version = _ref2.version; | ||
var registryMetadata, versionMetadata, localFolder, data, localPregypFolder; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return fetchMetadata(name, registryUrl); | ||
var _pregyp = require("./pregyp"); | ||
case 2: | ||
registryMetadata = _context.sent; | ||
versionMetadata = _lodash2.default.cloneDeep(registryMetadata.versions[version]); | ||
var _metadata = require("./metadata"); | ||
if (versionMetadata) { | ||
_context.next = 6; | ||
break; | ||
} | ||
const fs = _bluebird.default.promisifyAll(require('fs')); | ||
throw new Error('Unknown package version ' + name + '@' + version); | ||
const mkdirpAsync = _bluebird.default.promisify(_mkdirp.default); | ||
case 6: | ||
_context.next = 8; | ||
return ensureLocalFolderExists(name, rootFolder); | ||
function downloadAll(packages, { | ||
localUrl, | ||
prebuiltBinaryProperties, | ||
registryUrl, | ||
rootFolder | ||
}) { | ||
const downloadFromRegistry = download.bind(null, registryUrl, localUrl, rootFolder, prebuiltBinaryProperties); | ||
return _bluebird.default.mapSeries(packages, downloadFromRegistry); | ||
} | ||
case 8: | ||
localFolder = _context.sent; | ||
_context.next = 11; | ||
return downloadTarball(versionMetadata); | ||
function download(_x, _x2, _x3, _x4, _x5) { | ||
return _download.apply(this, arguments); | ||
} | ||
case 11: | ||
data = _context.sent; | ||
function _download() { | ||
_download = (0, _asyncToGenerator2.default)(function* (registryUrl, localUrl, rootFolder, prebuiltBinaryProperties, { | ||
name, | ||
version | ||
}) { | ||
const registryMetadata = yield fetchMetadata(name, registryUrl); | ||
if (!(0, _pregyp.hasPrebuiltBinaries)(versionMetadata)) { | ||
_context.next = 21; | ||
break; | ||
} | ||
const versionMetadata = _lodash.default.cloneDeep(registryMetadata.versions[version]); | ||
_context.next = 15; | ||
return ensureLocalFolderExists(version, localFolder); | ||
if (!versionMetadata) { | ||
throw new Error(`Unknown package version ${name}@${version}`); | ||
} | ||
case 15: | ||
localPregypFolder = _context.sent; | ||
_context.next = 18; | ||
return (0, _pregyp.downloadPrebuiltBinaries)(versionMetadata, localPregypFolder, prebuiltBinaryProperties); | ||
const localFolder = yield ensureLocalFolderExists(name, rootFolder); | ||
let data = yield downloadTarball(versionMetadata); | ||
case 18: | ||
_context.next = 20; | ||
return (0, _metadata.rewriteMetadataInTarball)(data, versionMetadata, localUrl, localFolder); | ||
if ((0, _pregyp.hasPrebuiltBinaries)(versionMetadata)) { | ||
const localPregypFolder = yield ensureLocalFolderExists(version, localFolder); | ||
yield (0, _pregyp.downloadPrebuiltBinaries)(versionMetadata, localPregypFolder, prebuiltBinaryProperties); | ||
data = yield (0, _metadata.rewriteMetadataInTarball)(data, versionMetadata, localUrl, localFolder); | ||
} | ||
case 20: | ||
data = _context.sent; | ||
yield saveTarball(versionMetadata, data, localFolder); | ||
(0, _metadata.rewriteVersionMetadata)(versionMetadata, data, localUrl); | ||
yield updateMetadata(versionMetadata, registryMetadata, registryUrl, localFolder); | ||
}); | ||
return _download.apply(this, arguments); | ||
} | ||
case 21: | ||
_context.next = 23; | ||
return saveTarball(versionMetadata, data, localFolder); | ||
function downloadTarball(_x6) { | ||
return _downloadTarball.apply(this, arguments); | ||
} | ||
case 23: | ||
function _downloadTarball() { | ||
_downloadTarball = (0, _asyncToGenerator2.default)(function* ({ | ||
_id: id, | ||
dist | ||
}) { | ||
const data = yield fetchTarball(dist.tarball); | ||
(0, _integrity.verifyIntegrity)(data, id, dist); | ||
return data; | ||
}); | ||
return _downloadTarball.apply(this, arguments); | ||
} | ||
(0, _metadata.rewriteVersionMetadata)(versionMetadata, data, localUrl); | ||
_context.next = 26; | ||
return updateMetadata(versionMetadata, registryMetadata, registryUrl, localFolder); | ||
function saveTarball({ | ||
name, | ||
version | ||
}, data, localFolder) { | ||
return fs.writeFileAsync(tarballPath(name, version, localFolder), data); | ||
} | ||
case 26: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function updateMetadata(_x7, _x8, _x9, _x10) { | ||
return _updateMetadata.apply(this, arguments); | ||
} | ||
return function download(_x, _x2, _x3, _x4, _x5) { | ||
return _ref3.apply(this, arguments); | ||
}; | ||
}(); | ||
function _updateMetadata() { | ||
_updateMetadata = (0, _asyncToGenerator2.default)(function* (versionMetadata, defaultMetadata, registryUrl, localFolder) { | ||
const name = versionMetadata.name, | ||
version = versionMetadata.version; | ||
const localMetadataPath = metadataPath(name, localFolder); | ||
const localMetadata = yield loadMetadata(localMetadataPath, defaultMetadata); | ||
localMetadata.versions[version] = versionMetadata; | ||
localMetadata.time[version] = defaultMetadata.time[version]; | ||
localMetadata['dist-tags'].latest = Object.keys(localMetadata.versions).sort(_semver.default.compare).pop(); | ||
yield saveMetadata(localMetadataPath, localMetadata); | ||
}); | ||
return _updateMetadata.apply(this, arguments); | ||
} | ||
var downloadTarball = function () { | ||
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(_ref4) { | ||
var id = _ref4._id, | ||
dist = _ref4.dist; | ||
var data; | ||
return _regenerator2.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.next = 2; | ||
return fetchTarball(dist.tarball); | ||
function loadMetadata(_x11, _x12) { | ||
return _loadMetadata.apply(this, arguments); | ||
} | ||
case 2: | ||
data = _context2.sent; | ||
function _loadMetadata() { | ||
_loadMetadata = (0, _asyncToGenerator2.default)(function* (path, defaultMetadata) { | ||
try { | ||
const json = yield fs.readFileAsync(path, 'utf8'); | ||
return JSON.parse(json); | ||
} catch (fileNotFound) { | ||
return (0, _objectSpread2.default)({}, defaultMetadata, { | ||
'dist-tags': {}, | ||
time: {}, | ||
versions: {} | ||
}); | ||
} | ||
}); | ||
return _loadMetadata.apply(this, arguments); | ||
} | ||
(0, _integrity.verifyIntegrity)(data, id, dist); | ||
return _context2.abrupt('return', data); | ||
case 5: | ||
case 'end': | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
return function downloadTarball(_x6) { | ||
return _ref5.apply(this, arguments); | ||
}; | ||
}(); | ||
var updateMetadata = function () { | ||
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(versionMetadata, defaultMetadata, registryUrl, localFolder) { | ||
var name, version, localMetadataPath, localMetadata; | ||
return _regenerator2.default.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
name = versionMetadata.name, version = versionMetadata.version; | ||
localMetadataPath = metadataPath(name, localFolder); | ||
_context3.next = 4; | ||
return loadMetadata(localMetadataPath, defaultMetadata); | ||
case 4: | ||
localMetadata = _context3.sent; | ||
localMetadata.versions[version] = versionMetadata; | ||
localMetadata.time[version] = defaultMetadata.time[version]; | ||
localMetadata['dist-tags'].latest = (0, _keys2.default)(localMetadata.versions).sort(_semver2.default.compare).pop(); | ||
_context3.next = 10; | ||
return saveMetadata(localMetadataPath, localMetadata); | ||
case 10: | ||
case 'end': | ||
return _context3.stop(); | ||
} | ||
} | ||
}, _callee3, this); | ||
})); | ||
return function updateMetadata(_x7, _x8, _x9, _x10) { | ||
return _ref7.apply(this, arguments); | ||
}; | ||
}(); | ||
var loadMetadata = function () { | ||
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(path, defaultMetadata) { | ||
var json; | ||
return _regenerator2.default.wrap(function _callee4$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
_context4.prev = 0; | ||
_context4.next = 3; | ||
return fs.readFileAsync(path, 'utf8'); | ||
case 3: | ||
json = _context4.sent; | ||
return _context4.abrupt('return', JSON.parse(json)); | ||
case 7: | ||
_context4.prev = 7; | ||
_context4.t0 = _context4['catch'](0); | ||
return _context4.abrupt('return', (0, _extends3.default)({}, defaultMetadata, { 'dist-tags': {}, time: {}, versions: {} })); | ||
case 10: | ||
case 'end': | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _callee4, this, [[0, 7]]); | ||
})); | ||
return function loadMetadata(_x11, _x12) { | ||
return _ref8.apply(this, arguments); | ||
}; | ||
}(); | ||
var saveMetadata = function () { | ||
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(path, metadata) { | ||
var json; | ||
return _regenerator2.default.wrap(function _callee5$(_context5) { | ||
while (1) { | ||
switch (_context5.prev = _context5.next) { | ||
case 0: | ||
json = (0, _stringify2.default)(metadata, null, 2); | ||
_context5.next = 3; | ||
return fs.writeFileAsync(path, json, 'utf8'); | ||
case 3: | ||
case 'end': | ||
return _context5.stop(); | ||
} | ||
} | ||
}, _callee5, this); | ||
})); | ||
return function saveMetadata(_x13, _x14) { | ||
return _ref9.apply(this, arguments); | ||
}; | ||
}(); | ||
var ensureLocalFolderExists = function () { | ||
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(name, rootFolder) { | ||
var localFolder; | ||
return _regenerator2.default.wrap(function _callee6$(_context6) { | ||
while (1) { | ||
switch (_context6.prev = _context6.next) { | ||
case 0: | ||
localFolder = _path2.default.resolve(rootFolder, name); | ||
_context6.next = 3; | ||
return mkdirpAsync(localFolder); | ||
case 3: | ||
return _context6.abrupt('return', localFolder); | ||
case 4: | ||
case 'end': | ||
return _context6.stop(); | ||
} | ||
} | ||
}, _callee6, this); | ||
})); | ||
return function ensureLocalFolderExists(_x15, _x16) { | ||
return _ref10.apply(this, arguments); | ||
}; | ||
}(); | ||
exports.downloadAll = downloadAll; | ||
var _lodash = require('lodash'); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
var _client = require('./client'); | ||
var _mkdirp = require('mkdirp'); | ||
var _mkdirp2 = _interopRequireDefault(_mkdirp); | ||
var _path = require('path'); | ||
var _path2 = _interopRequireDefault(_path); | ||
var _bluebird = require('bluebird'); | ||
var _bluebird2 = _interopRequireDefault(_bluebird); | ||
var _semver = require('semver'); | ||
var _semver2 = _interopRequireDefault(_semver); | ||
var _url = require('url'); | ||
var _url2 = _interopRequireDefault(_url); | ||
var _integrity = require('./integrity'); | ||
var _pregyp = require('./pregyp'); | ||
var _metadata = require('./metadata'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var fs = _bluebird2.default.promisifyAll(require('fs')); | ||
var mkdirpAsync = _bluebird2.default.promisify(_mkdirp2.default); | ||
function downloadAll(packages, _ref) { | ||
var localUrl = _ref.localUrl, | ||
prebuiltBinaryProperties = _ref.prebuiltBinaryProperties, | ||
registryUrl = _ref.registryUrl, | ||
rootFolder = _ref.rootFolder; | ||
var downloadFromRegistry = download.bind(null, registryUrl, localUrl, rootFolder, prebuiltBinaryProperties); | ||
return _bluebird2.default.mapSeries(packages, downloadFromRegistry); | ||
function saveMetadata(_x13, _x14) { | ||
return _saveMetadata.apply(this, arguments); | ||
} | ||
function saveTarball(_ref6, data, localFolder) { | ||
var name = _ref6.name, | ||
version = _ref6.version; | ||
return fs.writeFileAsync(tarballPath(name, version, localFolder), data); | ||
function _saveMetadata() { | ||
_saveMetadata = (0, _asyncToGenerator2.default)(function* (path, metadata) { | ||
const json = JSON.stringify(metadata, null, 2); | ||
yield fs.writeFileAsync(path, json, 'utf8'); | ||
}); | ||
return _saveMetadata.apply(this, arguments); | ||
} | ||
function metadataPath(name, localFolder) { | ||
return _path2.default.join(localFolder, 'index.json'); | ||
return _path.default.join(localFolder, 'index.json'); | ||
} | ||
function tarballPath(name, version, localFolder) { | ||
return _path2.default.join(localFolder, (0, _metadata.tarballFilename)(name, version)); | ||
return _path.default.join(localFolder, (0, _metadata.tarballFilename)(name, version)); | ||
} | ||
function ensureLocalFolderExists(_x15, _x16) { | ||
return _ensureLocalFolderExists.apply(this, arguments); | ||
} | ||
function _ensureLocalFolderExists() { | ||
_ensureLocalFolderExists = (0, _asyncToGenerator2.default)(function* (name, rootFolder) { | ||
const localFolder = _path.default.resolve(rootFolder, name); | ||
yield mkdirpAsync(localFolder); | ||
return localFolder; | ||
}); | ||
return _ensureLocalFolderExists.apply(this, arguments); | ||
} | ||
function fetchTarball(tarballUrl) { | ||
@@ -323,4 +181,4 @@ return (0, _client.fetchUrl)(tarballUrl, true); | ||
function fetchMetadata(name, registryUrl) { | ||
var urlSafeName = name.replace(/\//g, '%2f'); | ||
return (0, _client.fetchUrl)(_url2.default.resolve(registryUrl, urlSafeName)); | ||
const urlSafeName = name.replace(/\//g, '%2f'); | ||
return (0, _client.fetchUrl)(_url.default.resolve(registryUrl, urlSafeName)); | ||
} |
@@ -1,43 +0,37 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _lodash = require('lodash'); | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
var _lodash = _interopRequireDefault(require("lodash")); | ||
var _commander = require('commander'); | ||
var _commander = _interopRequireDefault(require("commander")); | ||
var _commander2 = _interopRequireDefault(_commander); | ||
var _sync = require("./sync"); | ||
var _sync = require('./sync'); | ||
_commander.default.version(require(`${__dirname}/../package.json`).version).option('--root <path>', 'Path to save NPM package tarballs and metadata to').option('--manifest <file>', 'Path to a package-lock.json file to use as catalog for mirrored NPM packages.').option('--localUrl <url>', 'URL to use as root in stored package metadata (i.e. where folder defined as --root will be exposed at)').option('--binaryAbi <list>', 'Comma-separated list of node C++ ABI numbers to download pre-built binaries for. See NODE_MODULE_VERSION column in https://nodejs.org/en/download/releases/').option('--binaryArch <list>', 'Comma-separated list of CPU architectures to download pre-built binaries for. Valid values: arm, ia32, and x64').option('--binaryPlatform <list>', 'Comma-separated list of OS platforms to download pre-built binaries for. Valid values: linux, darwin, win32, sunos, freebsd, openbsd, and aix').option('--registryUrl [url]', 'Optional URL to use as NPM registry when fetching packages. Default value is https://registry.npmjs.org').parse(process.argv); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
_commander2.default.version(require(__dirname + '/../package.json').version).option('--root <path>', 'Path to save NPM package tarballs and metadata to').option('--manifest <file>', 'Path to a package-lock.json file to use as catalog for mirrored NPM packages.').option('--localUrl <url>', 'URL to use as root in stored package metadata (i.e. where folder defined as --root will be exposed at)').option('--binaryAbi <list>', 'Comma-separated list of node C++ ABI numbers to download pre-built binaries for. See NODE_MODULE_VERSION column in https://nodejs.org/en/download/releases/').option('--binaryArch <list>', 'Comma-separated list of CPU architectures to download pre-built binaries for. Valid values: arm, ia32, and x64').option('--binaryPlatform <list>', 'Comma-separated list of OS platforms to download pre-built binaries for. Valid values: linux, darwin, win32, sunos, freebsd, openbsd, and aix').option('--registryUrl [url]', 'Optional URL to use as NPM registry when fetching packages. Default value is https://registry.npmjs.org').parse(process.argv); | ||
if (!_commander2.default.root || !_commander2.default.localUrl || !_commander2.default.manifest || !_commander2.default.binaryAbi || !_commander2.default.binaryArch || !_commander2.default.binaryPlatform) { | ||
console.error(_commander2.default.help()); | ||
if (!_commander.default.root || !_commander.default.localUrl || !_commander.default.manifest || !_commander.default.binaryAbi || !_commander.default.binaryArch || !_commander.default.binaryPlatform) { | ||
console.error(_commander.default.help()); | ||
process.exit(1); | ||
} | ||
var abis = _commander2.default.binaryAbi.split(','); | ||
var architectures = _commander2.default.binaryArch.split(','); | ||
var platforms = _commander2.default.binaryPlatform.split(','); | ||
var prebuiltBinaryProperties = _lodash2.default.flattenDeep(abis.map(function (abi) { | ||
return architectures.map(function (arch) { | ||
return platforms.map(function (platform) { | ||
return { abi: abi, arch: arch, platform: platform }; | ||
}); | ||
}); | ||
})); | ||
const abis = _commander.default.binaryAbi.split(','); | ||
var options = { | ||
localUrl: _commander2.default.localUrl, | ||
manifest: _commander2.default.manifest, | ||
prebuiltBinaryProperties: prebuiltBinaryProperties, | ||
registryUrl: _commander2.default.registryUrl || 'https://registry.npmjs.org', | ||
rootFolder: _commander2.default.root | ||
const architectures = _commander.default.binaryArch.split(','); | ||
const platforms = _commander.default.binaryPlatform.split(','); | ||
const prebuiltBinaryProperties = _lodash.default.flattenDeep(abis.map(abi => architectures.map(arch => platforms.map(platform => ({ | ||
abi, | ||
arch, | ||
platform | ||
}))))); | ||
const options = { | ||
localUrl: _commander.default.localUrl, | ||
manifest: _commander.default.manifest, | ||
prebuiltBinaryProperties, | ||
registryUrl: _commander.default.registryUrl || 'https://registry.npmjs.org', | ||
rootFolder: _commander.default.root | ||
}; | ||
(0, _sync.synchronize)(options).then(function (newPackages) { | ||
return console.log('Downloaded ' + newPackages.length + ' packages'); | ||
}); | ||
(0, _sync.synchronize)(options).then(newPackages => console.log(`Downloaded ${newPackages.length} packages`)); |
@@ -1,11 +0,8 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); | ||
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); | ||
exports.verifyIntegrity = verifyIntegrity; | ||
@@ -15,14 +12,12 @@ exports.sha1 = sha1; | ||
var _ssri = require('ssri'); | ||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); | ||
var _ssri2 = _interopRequireDefault(_ssri); | ||
var _ssri = _interopRequireDefault(require("ssri")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function verifyIntegrity(data, id, _ref) { | ||
var integrity = _ref.integrity, | ||
shasum = _ref.shasum; | ||
function verifyIntegrity(data, id, { | ||
integrity, | ||
shasum | ||
}) { | ||
if (!integrity && !shasum) { | ||
throw new Error('Integrity values not present in metadata for ' + id); | ||
throw new Error(`Integrity values not present in metadata for ${id}`); | ||
} | ||
@@ -32,6 +27,6 @@ | ||
if (sha512(data) != integrity) { | ||
throw new Error('Integrity check with SHA512 failed for ' + id); | ||
throw new Error(`Integrity check with SHA512 failed for ${id}`); | ||
} | ||
} else if (sha1(data) != shasum) { | ||
throw new Error('Integrity check with SHA1 failed for failed for ' + id); | ||
throw new Error(`Integrity check with SHA1 failed for failed for ${id}`); | ||
} | ||
@@ -41,4 +36,6 @@ } | ||
function sha1(data) { | ||
var _ssri$fromData$sha = (0, _slicedToArray3.default)(_ssri2.default.fromData(data, { algorithms: ['sha1'] }).sha1, 1), | ||
integrity = _ssri$fromData$sha[0]; | ||
const _ssri$fromData$sha = (0, _slicedToArray2.default)(_ssri.default.fromData(data, { | ||
algorithms: ['sha1'] | ||
}).sha1, 1), | ||
integrity = _ssri$fromData$sha[0]; | ||
@@ -49,6 +46,8 @@ return integrity.hexDigest(); | ||
function sha512(data) { | ||
var _ssri$fromData$sha2 = (0, _slicedToArray3.default)(_ssri2.default.fromData(data, { algorithms: ['sha512'] }).sha512, 1), | ||
integrity = _ssri$fromData$sha2[0]; | ||
const _ssri$fromData$sha2 = (0, _slicedToArray2.default)(_ssri.default.fromData(data, { | ||
algorithms: ['sha512'] | ||
}).sha512, 1), | ||
integrity = _ssri$fromData$sha2[0]; | ||
return integrity.toString(); | ||
} |
@@ -1,119 +0,40 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.rewriteMetadataInTarball = undefined; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _stringify = require('babel-runtime/core-js/json/stringify'); | ||
var _stringify2 = _interopRequireDefault(_stringify); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
var rewriteMetadataInTarball = exports.rewriteMetadataInTarball = function () { | ||
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(data, versionMetadata, localUrl, localFolder) { | ||
var tmpFolder, manifestPath, json, metadata, updatedData; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
tmpFolder = _path2.default.join(localFolder, '.tmp'); | ||
_context.next = 3; | ||
return mkdirpAsync(tmpFolder); | ||
case 3: | ||
_context.next = 5; | ||
return extractTgz(data, tmpFolder); | ||
case 5: | ||
manifestPath = _path2.default.join(tmpFolder, 'package', 'package.json'); | ||
_context.next = 8; | ||
return fs.readFileAsync(manifestPath, 'utf8'); | ||
case 8: | ||
json = _context.sent; | ||
metadata = JSON.parse(json); | ||
metadata.binary.host = localUrl; | ||
metadata.binary.remote_path = '/' + versionMetadata.name + '/' + versionMetadata.version + '/'; | ||
_context.next = 14; | ||
return fs.writeFileAsync(manifestPath, (0, _stringify2.default)(metadata, null, 2)); | ||
case 14: | ||
_context.next = 16; | ||
return compressTgz(tmpFolder); | ||
case 16: | ||
updatedData = _context.sent; | ||
_context.next = 19; | ||
return rimrafAsync(tmpFolder); | ||
case 19: | ||
return _context.abrupt('return', updatedData); | ||
case 20: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
return function rewriteMetadataInTarball(_x, _x2, _x3, _x4) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
exports.rewriteVersionMetadata = rewriteVersionMetadata; | ||
exports.rewriteMetadataInTarball = rewriteMetadataInTarball; | ||
exports.tarballFilename = tarballFilename; | ||
var _pregyp = require('./pregyp'); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _mkdirp = require('mkdirp'); | ||
var _pregyp = require("./pregyp"); | ||
var _mkdirp2 = _interopRequireDefault(_mkdirp); | ||
var _mkdirp = _interopRequireDefault(require("mkdirp")); | ||
var _path = require('path'); | ||
var _path = _interopRequireDefault(require("path")); | ||
var _path2 = _interopRequireDefault(_path); | ||
var _bluebird = _interopRequireDefault(require("bluebird")); | ||
var _bluebird = require('bluebird'); | ||
var _rimraf = _interopRequireDefault(require("rimraf")); | ||
var _bluebird2 = _interopRequireDefault(_bluebird); | ||
var _streamifier = _interopRequireDefault(require("streamifier")); | ||
var _rimraf = require('rimraf'); | ||
var _tarFs = _interopRequireDefault(require("tar-fs")); | ||
var _rimraf2 = _interopRequireDefault(_rimraf); | ||
var _url = _interopRequireDefault(require("url")); | ||
var _streamifier = require('streamifier'); | ||
var _zlib = _interopRequireDefault(require("zlib")); | ||
var _streamifier2 = _interopRequireDefault(_streamifier); | ||
var _integrity = require("./integrity"); | ||
var _tarFs = require('tar-fs'); | ||
const fs = _bluebird.default.promisifyAll(require('fs')); | ||
var _tarFs2 = _interopRequireDefault(_tarFs); | ||
const mkdirpAsync = _bluebird.default.promisify(_mkdirp.default); | ||
var _url = require('url'); | ||
const rimrafAsync = _bluebird.default.promisify(_rimraf.default); | ||
var _url2 = _interopRequireDefault(_url); | ||
var _zlib = require('zlib'); | ||
var _zlib2 = _interopRequireDefault(_zlib); | ||
var _integrity = require('./integrity'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var fs = _bluebird2.default.promisifyAll(require('fs')); | ||
var mkdirpAsync = _bluebird2.default.promisify(_mkdirp2.default); | ||
var rimrafAsync = _bluebird2.default.promisify(_rimraf2.default); | ||
function rewriteVersionMetadata(versionMetadata, data, localUrl) { | ||
@@ -124,3 +45,3 @@ versionMetadata.dist.tarball = localTarballUrl(versionMetadata, localUrl); | ||
versionMetadata.binary.host = localUrl; | ||
versionMetadata.binary.remote_path = '/' + versionMetadata.name + '/' + versionMetadata.version + '/'; | ||
versionMetadata.binary.remote_path = `/${versionMetadata.name}/${versionMetadata.version}/`; | ||
versionMetadata.dist.integrity = (0, _integrity.sha512)(data); | ||
@@ -131,5 +52,30 @@ versionMetadata.dist.shasum = (0, _integrity.sha1)(data); | ||
function rewriteMetadataInTarball(_x, _x2, _x3, _x4) { | ||
return _rewriteMetadataInTarball.apply(this, arguments); | ||
} | ||
function _rewriteMetadataInTarball() { | ||
_rewriteMetadataInTarball = (0, _asyncToGenerator2.default)(function* (data, versionMetadata, localUrl, localFolder) { | ||
const tmpFolder = _path.default.join(localFolder, '.tmp'); | ||
yield mkdirpAsync(tmpFolder); | ||
yield extractTgz(data, tmpFolder); | ||
const manifestPath = _path.default.join(tmpFolder, 'package', 'package.json'); | ||
const json = yield fs.readFileAsync(manifestPath, 'utf8'); | ||
const metadata = JSON.parse(json); | ||
metadata.binary.host = localUrl; | ||
metadata.binary.remote_path = `/${versionMetadata.name}/${versionMetadata.version}/`; | ||
yield fs.writeFileAsync(manifestPath, JSON.stringify(metadata, null, 2)); | ||
const updatedData = yield compressTgz(tmpFolder); | ||
yield rimrafAsync(tmpFolder); | ||
return updatedData; | ||
}); | ||
return _rewriteMetadataInTarball.apply(this, arguments); | ||
} | ||
function extractTgz(data, folder) { | ||
return new _bluebird2.default(function (resolve, reject) { | ||
var tgz = _streamifier2.default.createReadStream(data).pipe(_zlib2.default.createGunzip()).pipe(_tarFs2.default.extract(folder)); | ||
return new _bluebird.default((resolve, reject) => { | ||
const tgz = _streamifier.default.createReadStream(data).pipe(_zlib.default.createGunzip()).pipe(_tarFs.default.extract(folder)); | ||
@@ -142,11 +88,9 @@ tgz.on('finish', resolve); | ||
function compressTgz(folder) { | ||
return new _bluebird2.default(function (resolve, reject) { | ||
var chunks = []; | ||
var tgz = _tarFs2.default.pack(folder).pipe(_zlib2.default.createGzip()); | ||
tgz.on('data', function (chunk) { | ||
return chunks.push(chunk); | ||
}); | ||
tgz.on('end', function () { | ||
return resolve(Buffer.concat(chunks)); | ||
}); | ||
return new _bluebird.default((resolve, reject) => { | ||
const chunks = []; | ||
const tgz = _tarFs.default.pack(folder).pipe(_zlib.default.createGzip()); | ||
tgz.on('data', chunk => chunks.push(chunk)); | ||
tgz.on('end', () => resolve(Buffer.concat(chunks))); | ||
tgz.on('error', reject); | ||
@@ -156,12 +100,12 @@ }); | ||
function localTarballUrl(_ref2, localUrl) { | ||
var name = _ref2.name, | ||
version = _ref2.version; | ||
return _url2.default.resolve(localUrl, name + '/' + tarballFilename(name, version)); | ||
function localTarballUrl({ | ||
name, | ||
version | ||
}, localUrl) { | ||
return _url.default.resolve(localUrl, `${name}/${tarballFilename(name, version)}`); | ||
} | ||
function tarballFilename(name, version) { | ||
var normalized = name.replace(/\//g, '-'); | ||
return normalized + '-' + version + '.tgz'; | ||
const normalized = name.replace(/\//g, '-'); | ||
return `${normalized}-${version}.tgz`; | ||
} |
@@ -1,151 +0,80 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.downloadPrebuiltBinaries = undefined; | ||
exports.hasPrebuiltBinaries = hasPrebuiltBinaries; | ||
exports.downloadPrebuiltBinaries = downloadPrebuiltBinaries; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _client = require("./client"); | ||
var _getIterator2 = require('babel-runtime/core-js/get-iterator'); | ||
var _path = _interopRequireDefault(require("path")); | ||
var _getIterator3 = _interopRequireDefault(_getIterator2); | ||
var _bluebird = _interopRequireDefault(require("bluebird")); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _semver = _interopRequireDefault(require("semver")); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
var _url = _interopRequireDefault(require("url")); | ||
var downloadPrebuiltBinaries = exports.downloadPrebuiltBinaries = function () { | ||
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(versionMetadata, localFolder, prebuiltBinaryProperties) { | ||
var binary, name, version, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _ref3, abi, arch, platform, data; | ||
const fs = _bluebird.default.promisifyAll(require('fs')); | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
binary = versionMetadata.binary, name = versionMetadata.name, version = versionMetadata.version; | ||
_iteratorNormalCompletion = true; | ||
_didIteratorError = false; | ||
_iteratorError = undefined; | ||
_context.prev = 4; | ||
_iterator = (0, _getIterator3.default)(prebuiltBinaryProperties); | ||
function hasPrebuiltBinaries({ | ||
binary | ||
}) { | ||
return binary && binary.module_name; | ||
} | ||
case 6: | ||
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { | ||
_context.next = 26; | ||
break; | ||
} | ||
function downloadPrebuiltBinaries(_x, _x2, _x3) { | ||
return _downloadPrebuiltBinaries.apply(this, arguments); | ||
} | ||
_ref3 = _step.value; | ||
abi = _ref3.abi, arch = _ref3.arch, platform = _ref3.platform; | ||
_context.prev = 9; | ||
_context.next = 12; | ||
return fetchPrebuiltBinary(name, version, binary, abi, platform, arch); | ||
function _downloadPrebuiltBinaries() { | ||
_downloadPrebuiltBinaries = (0, _asyncToGenerator2.default)(function* (versionMetadata, localFolder, prebuiltBinaryProperties) { | ||
const binary = versionMetadata.binary, | ||
name = versionMetadata.name, | ||
version = versionMetadata.version; | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
case 12: | ||
data = _context.sent; | ||
_context.next = 15; | ||
return fs.writeFileAsync(prebuiltBinaryFilePath(name, version, binary, abi, platform, arch, localFolder), data); | ||
try { | ||
for (var _iterator = prebuiltBinaryProperties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
const _ref = _step.value; | ||
const abi = _ref.abi, | ||
arch = _ref.arch, | ||
platform = _ref.platform; | ||
case 15: | ||
_context.next = 23; | ||
break; | ||
try { | ||
const data = yield fetchPrebuiltBinary(name, version, binary, abi, platform, arch); | ||
yield fs.writeFileAsync(prebuiltBinaryFilePath(name, version, binary, abi, platform, arch, localFolder), data); | ||
} catch (err) { | ||
// pre-built binaries are commonly not available on all platforms (and S3 will commonly respond with 403 for a non-existent file) | ||
const fileNotFoundError = err.response && (err.response.status == 403 || err.response.status == 404); | ||
case 17: | ||
_context.prev = 17; | ||
_context.t0 = _context['catch'](9); | ||
if (!(_context.t0.response && (_context.t0.response.status == 403 || _context.t0.response.status == 404))) { | ||
_context.next = 21; | ||
break; | ||
} | ||
return _context.abrupt('return'); | ||
case 21: | ||
console.error('Unexpected error fetching prebuilt binary for ' + name + ' and ABI v' + abi + ' on ' + arch + '-' + platform); | ||
throw _context.t0; | ||
case 23: | ||
_iteratorNormalCompletion = true; | ||
_context.next = 6; | ||
break; | ||
case 26: | ||
_context.next = 32; | ||
break; | ||
case 28: | ||
_context.prev = 28; | ||
_context.t1 = _context['catch'](4); | ||
_didIteratorError = true; | ||
_iteratorError = _context.t1; | ||
case 32: | ||
_context.prev = 32; | ||
_context.prev = 33; | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
case 35: | ||
_context.prev = 35; | ||
if (!_didIteratorError) { | ||
_context.next = 38; | ||
break; | ||
} | ||
throw _iteratorError; | ||
case 38: | ||
return _context.finish(35); | ||
case 39: | ||
return _context.finish(32); | ||
case 40: | ||
case 'end': | ||
return _context.stop(); | ||
if (!fileNotFoundError) { | ||
console.error(`Unexpected error fetching prebuilt binary for ${name} and ABI v${abi} on ${arch}-${platform}`); | ||
throw err; | ||
} | ||
} | ||
} | ||
}, _callee, this, [[4, 28, 32, 40], [9, 17], [33,, 35, 39]]); | ||
})); | ||
return function downloadPrebuiltBinaries(_x, _x2, _x3) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
}(); | ||
exports.hasPrebuiltBinaries = hasPrebuiltBinaries; | ||
var _client = require('./client'); | ||
var _path = require('path'); | ||
var _path2 = _interopRequireDefault(_path); | ||
var _bluebird = require('bluebird'); | ||
var _bluebird2 = _interopRequireDefault(_bluebird); | ||
var _semver = require('semver'); | ||
var _semver2 = _interopRequireDefault(_semver); | ||
var _url = require('url'); | ||
var _url2 = _interopRequireDefault(_url); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var fs = _bluebird2.default.promisifyAll(require('fs')); | ||
function hasPrebuiltBinaries(_ref) { | ||
var binary = _ref.binary; | ||
return binary && binary.module_name; | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return != null) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
}); | ||
return _downloadPrebuiltBinaries.apply(this, arguments); | ||
} | ||
@@ -158,9 +87,9 @@ | ||
function prebuiltBinaryFilePath(name, version, binary, abi, platform, arch, localFolder) { | ||
return _path2.default.join(localFolder, prebuiltBinaryFileName(name, version, binary, abi, platform, arch)); | ||
return _path.default.join(localFolder, prebuiltBinaryFileName(name, version, binary, abi, platform, arch)); | ||
} | ||
function prebuiltBinaryUrl(name, version, binary, abi, platform, arch) { | ||
var remotePath = prebuiltBinaryRemotePath(name, version, binary, abi, platform, arch); | ||
var fileName = prebuiltBinaryFileName(name, version, binary, abi, platform, arch); | ||
return _url2.default.resolve(binary.host, remotePath + fileName); | ||
const remotePath = prebuiltBinaryRemotePath(name, version, binary, abi, platform, arch).replace(/\/$/, ''); | ||
const fileName = prebuiltBinaryFileName(name, version, binary, abi, platform, arch); | ||
return _url.default.resolve(binary.host, `${remotePath}/${fileName}`); | ||
} | ||
@@ -174,11 +103,15 @@ | ||
return formatPrebuilt(binary.package_name, name, version, binary.module_name, abi, platform, arch); | ||
} | ||
} // see node-pre-gyp: /lib/util/versioning.js for documentation of possible values | ||
// see node-pre-gyp: /lib/util/versioning.js for documentation of possible values | ||
function formatPrebuilt(formatString, name, version, moduleName, abi, platform, arch) { | ||
var moduleVersion = _semver2.default.parse(version); | ||
var prerelease = (moduleVersion.prerelease || []).join('.'); | ||
var build = (moduleVersion.build || []).join('.'); | ||
const moduleVersion = _semver.default.parse(version); | ||
return formatString.replace('{name}', name).replace('{version}', version).replace('{major}', moduleVersion.major).replace('{minor}', moduleVersion.minor).replace('{patch}', moduleVersion.patch).replace('{prerelease}', prerelease).replace('{build}', build).replace('{module_name}', moduleName).replace('{node_abi}', 'node-v' + abi).replace('{platform}', platform).replace('{arch}', arch).replace('{configuration}', 'Release').replace('{toolset}', '').replace(/[\/]+/g, '/'); | ||
const prerelease = (moduleVersion.prerelease || []).join('.'); | ||
const build = (moduleVersion.build || []).join('.'); | ||
return formatString.replace('{name}', name).replace('{version}', version).replace('{major}', moduleVersion.major).replace('{minor}', moduleVersion.minor).replace('{patch}', moduleVersion.patch).replace('{prerelease}', prerelease).replace('{build}', build).replace('{module_name}', moduleName).replace('{node_abi}', `node-v${abi}`).replace('{platform}', platform).replace('{arch}', arch).replace('{libc}', libc(platform)).replace('{configuration}', 'Release').replace('{toolset}', '').replace(/[\/]+/g, '/'); | ||
} | ||
function libc(platform) { | ||
return platform === 'linux' ? 'glibc' : 'unknown'; | ||
} |
@@ -1,162 +0,117 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.dependenciesFromPackageLock = exports.loadCache = exports.dependenciesNotInCache = exports.updateDependenciesCache = undefined; | ||
exports.updateDependenciesCache = updateDependenciesCache; | ||
exports.dependenciesNotInCache = dependenciesNotInCache; | ||
exports.dependenciesFromPackageLock = dependenciesFromPackageLock; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _lodash = _interopRequireDefault(require("lodash")); | ||
var _stringify = require('babel-runtime/core-js/json/stringify'); | ||
var _bluebird = _interopRequireDefault(require("bluebird")); | ||
var _stringify2 = _interopRequireDefault(_stringify); | ||
const fs = _bluebird.default.promisifyAll(require('fs')); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
function updateDependenciesCache(_x, _x2, _x3) { | ||
return _updateDependenciesCache.apply(this, arguments); | ||
} | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
function _updateDependenciesCache() { | ||
_updateDependenciesCache = (0, _asyncToGenerator2.default)(function* (newDependencies, cacheFilePath, prebuiltBinaryProperties) { | ||
const _ref = yield loadCache(cacheFilePath), | ||
cachedDependencies = _ref.dependencies; | ||
var updateDependenciesCache = exports.updateDependenciesCache = function () { | ||
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(newDependencies, cacheFilePath) { | ||
var cachedDependencies, allDependencies; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return loadCache(cacheFilePath); | ||
const dependencies = (0, _lodash.default)(cachedDependencies).concat(newDependencies).sortBy('id').sortedUniqBy('id').value(); | ||
const data = { | ||
dependencies, | ||
prebuiltBinaryProperties | ||
}; | ||
return fs.writeFileAsync(cacheFilePath, JSON.stringify(data), 'utf8'); | ||
}); | ||
return _updateDependenciesCache.apply(this, arguments); | ||
} | ||
case 2: | ||
cachedDependencies = _context.sent; | ||
allDependencies = (0, _lodash2.default)(cachedDependencies).concat(newDependencies).sortBy('id').sortedUniqBy('id').value(); | ||
return _context.abrupt('return', fs.writeFileAsync(cacheFilePath, (0, _stringify2.default)(allDependencies), 'utf8')); | ||
function dependenciesNotInCache(_x4, _x5, _x6) { | ||
return _dependenciesNotInCache.apply(this, arguments); | ||
} | ||
case 5: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function _dependenciesNotInCache() { | ||
_dependenciesNotInCache = (0, _asyncToGenerator2.default)(function* (dependencies, cacheFilePath, prebuiltBinaryProperties) { | ||
const _ref2 = yield loadCache(cacheFilePath), | ||
cachedDependencies = _ref2.dependencies, | ||
cachedPrebuiltBinaryProperties = _ref2.prebuiltBinaryProperties; | ||
return function updateDependenciesCache(_x, _x2) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
if (cachedDependencies.length > 0 && !_lodash.default.isEqual(prebuiltBinaryProperties, cachedPrebuiltBinaryProperties)) { | ||
console.log(`Pre-built binary properties changed, re-evaluating all packages`); | ||
return dependencies; | ||
} | ||
var dependenciesNotInCache = exports.dependenciesNotInCache = function () { | ||
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(dependencies, cacheFilePath) { | ||
var cachedDependencies; | ||
return _regenerator2.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.next = 2; | ||
return loadCache(cacheFilePath); | ||
return _lodash.default.differenceBy(dependencies, cachedDependencies, 'id'); | ||
}); | ||
return _dependenciesNotInCache.apply(this, arguments); | ||
} | ||
case 2: | ||
cachedDependencies = _context2.sent; | ||
return _context2.abrupt('return', _lodash2.default.differenceBy(dependencies, cachedDependencies, 'id')); | ||
function loadCache(_x7) { | ||
return _loadCache.apply(this, arguments); | ||
} | ||
case 4: | ||
case 'end': | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
function _loadCache() { | ||
_loadCache = (0, _asyncToGenerator2.default)(function* (cacheFilePath) { | ||
try { | ||
const json = yield fs.readFileAsync(cacheFilePath, 'utf8'); | ||
const data = JSON.parse(json); | ||
return function dependenciesNotInCache(_x3, _x4) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
}(); | ||
var loadCache = exports.loadCache = function () { | ||
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(cacheFilePath) { | ||
var json; | ||
return _regenerator2.default.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
_context3.prev = 0; | ||
_context3.next = 3; | ||
return fs.readFileAsync(cacheFilePath, 'utf8'); | ||
case 3: | ||
json = _context3.sent; | ||
return _context3.abrupt('return', JSON.parse(json)); | ||
case 7: | ||
_context3.prev = 7; | ||
_context3.t0 = _context3['catch'](0); | ||
return _context3.abrupt('return', []); | ||
case 10: | ||
case 'end': | ||
return _context3.stop(); | ||
} | ||
if (Array.isArray(data)) { | ||
return { | ||
dependencies: data, | ||
prebuiltBinaryProperties: [] | ||
}; | ||
} | ||
}, _callee3, this, [[0, 7]]); | ||
})); | ||
return function loadCache(_x5) { | ||
return _ref3.apply(this, arguments); | ||
}; | ||
}(); | ||
return data; | ||
} catch (fileNotFound) { | ||
return { | ||
dependencies: [], | ||
prebuiltBinaryProperties: [] | ||
}; | ||
} | ||
}); | ||
return _loadCache.apply(this, arguments); | ||
} | ||
var dependenciesFromPackageLock = exports.dependenciesFromPackageLock = function () { | ||
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(path) { | ||
var json, dependencyTree; | ||
return _regenerator2.default.wrap(function _callee4$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
_context4.next = 2; | ||
return fs.readFileAsync(path, 'utf8'); | ||
function dependenciesFromPackageLock(_x8) { | ||
return _dependenciesFromPackageLock.apply(this, arguments); | ||
} | ||
case 2: | ||
json = _context4.sent; | ||
dependencyTree = dependenciesRecursive(JSON.parse(json)); | ||
return _context4.abrupt('return', (0, _lodash2.default)(dependencyTree).flattenDeep().map(function (_ref5) { | ||
var name = _ref5.name, | ||
version = _ref5.version; | ||
return { id: name + '@' + version, name: name, version: version }; | ||
}).sortBy('id').sortedUniqBy('id').value()); | ||
function _dependenciesFromPackageLock() { | ||
_dependenciesFromPackageLock = (0, _asyncToGenerator2.default)(function* (path) { | ||
const json = yield fs.readFileAsync(path, 'utf8'); | ||
const dependencyTree = dependenciesRecursive(JSON.parse(json)); | ||
return (0, _lodash.default)(dependencyTree).flattenDeep().map(({ | ||
name, | ||
version | ||
}) => ({ | ||
id: `${name}@${version}`, | ||
name, | ||
version | ||
})).sortBy('id').sortedUniqBy('id').value(); | ||
}); | ||
return _dependenciesFromPackageLock.apply(this, arguments); | ||
} | ||
case 5: | ||
case 'end': | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _callee4, this); | ||
})); | ||
return function dependenciesFromPackageLock(_x6) { | ||
return _ref4.apply(this, arguments); | ||
}; | ||
}(); | ||
var _lodash = require('lodash'); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
var _bluebird = require('bluebird'); | ||
var _bluebird2 = _interopRequireDefault(_bluebird); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var fs = _bluebird2.default.promisifyAll(require('fs')); | ||
function dependenciesRecursive(_ref6) { | ||
var dependencies = _ref6.dependencies; | ||
return (0, _lodash2.default)(dependencies).omitBy(function (_ref7) { | ||
var bundled = _ref7.bundled, | ||
dev = _ref7.dev; | ||
return bundled || dev; | ||
}).mapValues(function (props, name) { | ||
return [{ name: name, version: props.version }].concat(dependenciesRecursive(props)); | ||
}).values().value(); | ||
function dependenciesRecursive({ | ||
dependencies | ||
}) { | ||
return (0, _lodash.default)(dependencies).omitBy(({ | ||
bundled, | ||
dev | ||
}) => bundled || dev).mapValues((props, name) => [{ | ||
name, | ||
version: props.version | ||
}].concat(dependenciesRecursive(props))).values().value(); | ||
} |
@@ -1,61 +0,30 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.synchronize = undefined; | ||
exports.synchronize = synchronize; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _download = require("../src/download"); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _resolve = require("../src/resolve"); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
function synchronize(_x) { | ||
return _synchronize.apply(this, arguments); | ||
} | ||
var synchronize = exports.synchronize = function () { | ||
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(options) { | ||
var cacheFilePath, packages, newPackages; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
cacheFilePath = options.rootFolder + '/.registry-sync-cache.json'; | ||
_context.next = 3; | ||
return (0, _resolve.dependenciesFromPackageLock)(options.manifest); | ||
case 3: | ||
packages = _context.sent; | ||
_context.next = 6; | ||
return (0, _resolve.dependenciesNotInCache)(packages, cacheFilePath); | ||
case 6: | ||
newPackages = _context.sent; | ||
_context.next = 9; | ||
return (0, _download.downloadAll)(newPackages, options); | ||
case 9: | ||
_context.next = 11; | ||
return (0, _resolve.updateDependenciesCache)(newPackages, cacheFilePath); | ||
case 11: | ||
return _context.abrupt('return', newPackages); | ||
case 12: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
return function synchronize(_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
var _download = require('../src/download'); | ||
var _resolve = require('../src/resolve'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _synchronize() { | ||
_synchronize = (0, _asyncToGenerator2.default)(function* (options) { | ||
const cacheFilePath = `${options.rootFolder}/.registry-sync-cache.json`; | ||
const packages = yield (0, _resolve.dependenciesFromPackageLock)(options.manifest); | ||
const newPackages = yield (0, _resolve.dependenciesNotInCache)(packages, cacheFilePath, options.prebuiltBinaryProperties); | ||
yield (0, _download.downloadAll)(newPackages, options); | ||
yield (0, _resolve.updateDependenciesCache)(newPackages, cacheFilePath, options.prebuiltBinaryProperties); | ||
return newPackages; | ||
}); | ||
return _synchronize.apply(this, arguments); | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
30131
534
4
+ Added@babel/runtime@7.1.2
+ Added@babel/runtime@7.1.2(transitive)
+ Addedbluebird@3.5.2(transitive)
+ Addedcommander@2.18.0(transitive)
+ Addedfiggy-pudding@3.5.2(transitive)
+ Addedlodash@4.17.11(transitive)
+ Addedregenerator-runtime@0.12.1(transitive)
+ Addedsemver@5.5.1(transitive)
+ Addedssri@6.0.1(transitive)
- Removedbabel-runtime@6.26.0
- Removedbabel-runtime@6.26.0(transitive)
- Removedbluebird@3.5.1(transitive)
- Removedcommander@2.17.1(transitive)
- Removedcore-js@2.6.12(transitive)
- Removedlodash@4.17.10(transitive)
- Removedregenerator-runtime@0.11.1(transitive)
- Removedsemver@5.5.0(transitive)
- Removedssri@6.0.0(transitive)
Updatedbluebird@3.5.2
Updatedcommander@2.18.0
Updatedlodash@4.17.11
Updatedsemver@5.5.1
Updatedssri@6.0.1