@warriorjs/cli
Version:
WarriorJS command line
93 lines (70 loc) • 2.85 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _findUp = require('find-up');
var _findUp2 = _interopRequireDefault(_findUp);
var _globby = require('globby');
var _globby2 = _interopRequireDefault(_globby);
var _resolve = require('resolve');
var _resolve2 = _interopRequireDefault(_resolve);
var _lodash = require('lodash.uniqby');
var _lodash2 = _interopRequireDefault(_lodash);
var _Tower = require('./Tower');
var _Tower2 = _interopRequireDefault(_Tower);
var _getTowerId = require('./utils/getTowerId');
var _getTowerId2 = _interopRequireDefault(_getTowerId);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const internalTowerPackageNames = ['@warriorjs/tower-baby-steps'];
const officialTowerPackageJsonPattern = '@warriorjs/tower-*/package.json';
const communityTowerPackageJsonPattern = 'warriorjs-tower-*/package.json';
/**
* Returns the internal towers info.
*
* @returns {Object[]} The internal towers info.
*/
function getInternalTowersInfo() {
return internalTowerPackageNames.map(towerPackageName => ({
id: (0, _getTowerId2.default)(towerPackageName),
requirePath: towerPackageName
}));
}
/**
* Returns the external towers info.
*
* It searches for official and community towers installed in the nearest
* `node_modules` directory that is parent to @warriorjs/cli.
*
* @returns {Object[]} The external towers info.
*/
function getExternalTowersInfo() {
const cliDir = _findUp2.default.sync('@warriorjs/cli', { cwd: __dirname });
if (!cliDir) {
return [];
}
const cliParentDir = _path2.default.resolve(cliDir, '..');
const towerSearchDir = _findUp2.default.sync('node_modules', { cwd: cliParentDir });
const towerPackageJsonPaths = _globby2.default.sync([officialTowerPackageJsonPattern, communityTowerPackageJsonPattern], { cwd: towerSearchDir });
const towerPackageNames = towerPackageJsonPaths.map(_path2.default.dirname);
return towerPackageNames.map(towerPackageName => ({
id: (0, _getTowerId2.default)(towerPackageName),
requirePath: _resolve2.default.sync(towerPackageName, { basedir: towerSearchDir })
}));
}
/**
* Loads the installed towers.
*
* @returns {Tower[]} The loaded towers.
*/
function loadTowers() {
const internalTowersInfo = getInternalTowersInfo();
const externalTowersInfo = getExternalTowersInfo();
return (0, _lodash2.default)(internalTowersInfo.concat(externalTowersInfo), 'id').map(({ id, requirePath }) => {
const { name, description, levels } = require(requirePath); // eslint-disable-line global-require, import/no-dynamic-require
return new _Tower2.default(id, name, description, levels);
});
}
exports.default = loadTowers;
module.exports = exports.default;