UNPKG

3.12 kBJavaScriptView Raw
1"use strict";
2
3var Registry = require('npm-registry');
4var npm = new Registry({
5 registry: 'http://registry.npmjs.org',
6 retries: 4
7});
8var inArray = require('in-array');
9
10var utils = require('./utils');
11var errorHandler = require('./errorHandler');
12
13var NPM_CARTRIDGE_TASK_KEYWORD = 'cartridge-task';
14var NPM_CARTRIDGE_DEFAULT_KEYWORD = 'cartridge-module-default';
15
16var _log;
17
18var promptModuleOptionsApi = {};
19
20/**
21 * Setup function. Assigns internal log instance
22 * @param {Object} options Command line options (silent, verbose)
23 */
24promptModuleOptionsApi.setup = function(options) {
25 _log = utils.getLogInstance(options);
26}
27
28/**
29 * Get cartridge module data, formatted for inquirer
30 * @return {Promise}
31 */
32promptModuleOptionsApi.getOptions = function() {
33
34 _log.debug('Getting prompt module data');
35
36 return Promise.all([getCartridgeTaskModulesFromNpm(), getCartridgeDefaultModulesFromNpm()])
37 .then(parseDefaultModuleData)
38 .then(formatModuleData)
39 .catch(function(err) {
40 errorHandler(err);
41 })
42}
43
44/**
45 * Get name, description of all cartridge modules with the task keyword
46 */
47function getCartridgeTaskModulesFromNpm() {
48
49 return new Promise(function(resolve, reject) {
50
51 npm.packages.keyword(NPM_CARTRIDGE_TASK_KEYWORD, function(err, data) {
52 if(err) errorHandler(err);
53
54 resolve(data);
55 });
56
57 })
58}
59
60/**
61 * Get name, description of all cartridge modules using the default keyword
62 */
63function getCartridgeDefaultModulesFromNpm() {
64
65 return new Promise(function(resolve, reject) {
66
67 npm.packages.keyword(NPM_CARTRIDGE_DEFAULT_KEYWORD, function(err, data) {
68 if(err) errorHandler(err);
69
70 resolve(data);
71 });
72
73 })
74}
75
76/**
77 * Compare task and default modules
78 * Set `checked` as true if a module is in both sets of data
79 * @param {Array} data Data for both module keyword sets
80 */
81function parseDefaultModuleData(data) {
82 return new Promise(function(resolve, reject) {
83
84 var moduleList = data[0];
85 var defaultModuleList = data[1];
86 var moduleAlreadyChecked = [];
87
88 for (var i = 0; i < defaultModuleList.length; i++) {
89 for (var j = 0; j < moduleList.length; j++) {
90 var defaultModuleName = defaultModuleList[i].name;
91 var moduleName = moduleList[j].name;
92 var isDefault = defaultModuleName === moduleName;
93
94 if(!inArray(moduleAlreadyChecked, moduleName) && defaultModuleName === moduleName) {
95 moduleList[j].checked = true;
96 moduleAlreadyChecked.push(moduleName);
97 }
98 }
99 }
100
101 resolve(moduleList);
102 })
103}
104
105/**
106 * Go through all modules and combine the name and description into one key.
107 * Map `checked` value
108 * @param {Array} moduleData Module data from npm registry
109 * @return {Array} Formatted module data
110 */
111function formatModuleData(moduleData) {
112
113 var formattedData = moduleData.map(function(module) {
114 var formattedModule = {};
115
116 formattedModule.name = ' ' + module.name + ((module.description) ? ' - ' + module.description : '') ;
117 formattedModule.checked = module.checked || false;
118
119 return formattedModule;
120 })
121
122 return Promise.resolve(formattedData)
123}
124
125module.exports = promptModuleOptionsApi;