UNPKG

cli-engine

Version:
106 lines (78 loc) 3.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _output = require('cli-engine-command/lib/output'); var _output2 = _interopRequireDefault(_output); var _user = require('./user'); var _user2 = _interopRequireDefault(_user); var _linked = require('./linked'); var _linked2 = _interopRequireDefault(_linked); var _cache = require('./cache'); var _cache2 = _interopRequireDefault(_cache); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _lock = require('../lock'); var _lock2 = _interopRequireDefault(_lock); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const debug = require('debug')('cli-engine:migrator'); const SALESFORCE_BUILTINS = ['salesforcedx', 'salesforce-alm', 'force-language-services', 'salesforce-lightning-cli']; exports.default = class { constructor(out) { let cache = new _cache2.default(out); this.userPlugins = new _user2.default({ out, config: out.config, cache }); this.linkedPlugins = new _linked2.default({ out, config: out.config, cache }); this.out = out; this.lock = new _lock2.default(this.out); } async run() { // short circuit quickly without having to aquire the writer lock if (_fsExtra2.default.existsSync(this.userPlugins.userPluginsPJSONPath)) return; if (!_fsExtra2.default.existsSync(_path2.default.join(this.userPlugins.userPluginsDir, 'plugins.json'))) return; let pljson = await this._readPluginsJSON(); if (!pljson) return false; let downgrade = await this.lock.upgrade(); await this._run(pljson); await downgrade(); } async _run(pljson) { // prevent two parallel migrations from happening in case of a race if (_fsExtra2.default.existsSync(this.userPlugins.userPluginsPJSONPath)) return; debug('has existing plugins'); this.out.action.start('Migrating Heroku CLI v5 plugins'); debug('removing existing node_modules'); for (let p of pljson) { if (SALESFORCE_BUILTINS.includes(p.name)) continue; debug(`installing ${p.name}`); await this._installPlugin(p.name, p.tag); } this.out.action.stop(); } async _readPluginsJSON() { try { let pljsonPath = _path2.default.join(this.userPlugins.userPluginsDir, 'plugins.json'); return _fsExtra2.default.readJSONSync(pljsonPath); } catch (err) { this.out.debug(err.message); } } async _installPlugin(name, tag) { try { if (tag === 'symlink') { await this._reinstallViaSymlink(name); } else { if (tag === '') tag = 'latest'; await this.userPlugins.install(name); } } catch (err) { this.out.warn(err); } } async _reinstallViaSymlink(name) { debug(`Installing via symlink: ${name}`); let pluginPath = _fsExtra2.default.realpathSync(this.userPlugins.userPluginPath(name)); await this.linkedPlugins.add(pluginPath); } };