UNPKG

2.85 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _path = require('path');
8
9var _path2 = _interopRequireDefault(_path);
10
11var _findUp = require('find-up');
12
13var _findUp2 = _interopRequireDefault(_findUp);
14
15var _globby = require('globby');
16
17var _globby2 = _interopRequireDefault(_globby);
18
19var _resolve = require('resolve');
20
21var _resolve2 = _interopRequireDefault(_resolve);
22
23var _lodash = require('lodash.uniqby');
24
25var _lodash2 = _interopRequireDefault(_lodash);
26
27var _Tower = require('./Tower');
28
29var _Tower2 = _interopRequireDefault(_Tower);
30
31var _getTowerId = require('./utils/getTowerId');
32
33var _getTowerId2 = _interopRequireDefault(_getTowerId);
34
35function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
37const internalTowerPackageNames = ['@warriorjs/tower-baby-steps'];
38
39const officialTowerPackageJsonPattern = '@warriorjs/tower-*/package.json';
40const communityTowerPackageJsonPattern = 'warriorjs-tower-*/package.json';
41
42/**
43 * Returns the internal towers info.
44 *
45 * @returns {Object[]} The internal towers info.
46 */
47function getInternalTowersInfo() {
48 return internalTowerPackageNames.map(towerPackageName => ({
49 id: (0, _getTowerId2.default)(towerPackageName),
50 requirePath: towerPackageName
51 }));
52}
53
54/**
55 * Returns the external towers info.
56 *
57 * It searches for official and community towers installed in the nearest
58 * `node_modules` directory that is parent to @warriorjs/cli.
59 *
60 * @returns {Object[]} The external towers info.
61 */
62function getExternalTowersInfo() {
63 const cliDir = _findUp2.default.sync('@warriorjs/cli', { cwd: __dirname });
64 if (!cliDir) {
65 return [];
66 }
67
68 const cliParentDir = _path2.default.resolve(cliDir, '..');
69 const towerSearchDir = _findUp2.default.sync('node_modules', { cwd: cliParentDir });
70 const towerPackageJsonPaths = _globby2.default.sync([officialTowerPackageJsonPattern, communityTowerPackageJsonPattern], { cwd: towerSearchDir });
71 const towerPackageNames = towerPackageJsonPaths.map(_path2.default.dirname);
72 return towerPackageNames.map(towerPackageName => ({
73 id: (0, _getTowerId2.default)(towerPackageName),
74 requirePath: _resolve2.default.sync(towerPackageName, { basedir: towerSearchDir })
75 }));
76}
77
78/**
79 * Loads the installed towers.
80 *
81 * @returns {Tower[]} The loaded towers.
82 */
83function loadTowers() {
84 const internalTowersInfo = getInternalTowersInfo();
85 const externalTowersInfo = getExternalTowersInfo();
86 return (0, _lodash2.default)(internalTowersInfo.concat(externalTowersInfo), 'id').map(({ id, requirePath }) => {
87 const { name, description, levels } = require(requirePath); // eslint-disable-line global-require, import/no-dynamic-require
88 return new _Tower2.default(id, name, description, levels);
89 });
90}
91
92exports.default = loadTowers;
93module.exports = exports.default;
\No newline at end of file