brackets-npm-registry
Version:
Install your extensions into Brackets using npm
117 lines (101 loc) • 4.74 kB
JavaScript
/*eslint strict:0, no-console:0*/
;
// https://nodejs.org/api/modules.html#modules_accessing_the_main_module
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
var Promise = require('bluebird');
var exec = require('child_process').exec;
var runDirectly = require.main === module;
var npm = require('npm');
var _require = require('bluebird');
var all = _require.all;
var fromNode = _require.fromNode;
var promisify = _require.promisify;
var fs = require('fs-extra');
var path = require('path');
var rimraf = promisify(require('rimraf'));
var defaultLogger = {
output: function output() {
return console.log.apply(console, arguments);
},
progress: function progress() {
return console.error.apply(console, arguments);
}
};
function execCmd(cmd) {
return new Promise(function (resolve) {
exec(cmd, function (err, stdout, stderr) {
if (err || stderr) {
return resolve('err: ' + (err || stderr));
}
return resolve(stdout.trim());
});
});
}
function install(targetPath, npmPackageName, loggers) {
if (runDirectly) {
loggers = null;
}
var npmInstallFolder = path.resolve(targetPath, 'node_modules', npmPackageName);
var finalInstallFolder = path.resolve(targetPath, npmPackageName);
var logOutput = loggers ? loggers.output : defaultLogger.output;
var logProgress = loggers ? loggers.progress : defaultLogger.progress;
logProgress('using node ' + process.version + ', npm ' + npm.version);
return Promise.all([execCmd('node --version'), execCmd('npm --version')]).then(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2);
var nodeVersion = _ref2[0];
var npmVersion = _ref2[1];
logProgress('node in path version ' + nodeVersion + ', npm in path version ' + npmVersion);
logProgress('loading npm');
return fromNode(npm.load.bind(npm));
}).then(function () {
// npm is loaded, we can start the installation
logProgress('executing npm install ' + targetPath + ' ' + npmPackageName);
return fromNode(npm.commands.install.bind(npm.commands, targetPath, npmPackageName));
}).then(function () {
logProgress('installation successful into directory:\n', npmInstallFolder);
logProgress('ensuring the target directory exists:\n', finalInstallFolder);
return fromNode(fs.ensureDir.bind(fs, finalInstallFolder));
}).then(function () {
// final directory is there, read its contents
return fromNode(fs.readdir.bind(fs, finalInstallFolder));
}).then(function (dirContents) {
logProgress('clearing the directory:\n', finalInstallFolder);
return all(dirContents.map(function (entry) {
if (entry === '.git') {
return null;
}
return rimraf(path.resolve(finalInstallFolder, entry));
}).filter(function (x) {
return !!x;
}));
}).then(function () {
// read contents of installed directory
return fromNode(fs.readdir.bind(fs, npmInstallFolder));
}).then(function (dirContents) {
logProgress('moving files from:\n', npmInstallFolder, '\ninto:\n', finalInstallFolder);
return all(dirContents.map(function (entry) {
return fromNode(fs.move.bind(fs, path.resolve(npmInstallFolder, entry), path.resolve(finalInstallFolder, entry)));
}));
}).then(function () {
var msg = 'successfully installed ' + npmPackageName;
if (runDirectly) {
logOutput(msg);
}
return msg;
})['catch'](function (err) {
if (runDirectly) {
logProgress(err);
}
throw err;
})['finally'](function () {
// all done, now just remove the node_modules temp directory
return rimraf(path.resolve(targetPath, 'node_modules'));
});
}
if (runDirectly) {
install.apply(undefined, _toConsumableArray(process.argv.slice(2)));
} else {
exports.install = install;
}
//# sourceMappingURL=C:\Users\Zaggi\AppData\Roaming\Brackets-Electron\extensions\user\brackets-npm-registry\dist//node/extension-installer.js.map