UNPKG

@warriorjs/cli

Version:

WarriorJS command line

93 lines (70 loc) 2.85 kB
'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;