UNPKG

cli-engine

Version:
105 lines (78 loc) 3 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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); var _cliUx = require('cli-ux'); 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(config) { this.config = config; let cache = new _cache2.default(config); this.userPlugins = new _user2.default({ config, cache }); this.linkedPlugins = new _linked2.default({ config, cache }); this.cli = new _cliUx.CLI({ mock: config.mock }); this.lock = new _lock2.default(config); } 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.cli.action.start(`Migrating ${this.config.bin} 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.cli.action.stop(); } async _readPluginsJSON() { try { let pljsonPath = _path2.default.join(this.userPlugins.userPluginsDir, 'plugins.json'); return _fsExtra2.default.readJSONSync(pljsonPath); } catch (err) { 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.cli.warn(err); } } async _reinstallViaSymlink(name) { debug(`Installing via symlink: ${name}`); let pluginPath = _fsExtra2.default.realpathSync(this.userPlugins.userPluginPath(name)); await this.linkedPlugins.add(pluginPath); } };