UNPKG

1.58 kBJavaScriptView Raw
1'use strict';
2
3var compose = require('./compose');
4var utils = require('./utils');
5
6/**
7 * Run generators, calling `.config.process` first if it exists.
8 *
9 * @param {String|Array} `name` generator to run
10 * @param {Array|String} `tasks` tasks to run
11 * @param {Object} `app` Application instance
12 * @param {Object} `generator` generator instance
13 * @param {Function} next
14 */
15
16module.exports = function(app, queued, options, next) {
17 var generator = queued.generator;
18 var tasks = queued.tasks;
19
20 compose(app, generator);
21
22 if (tasks.length === 1 && !generator.tasks.hasOwnProperty(tasks[0])) {
23 if (tasks[0] === 'default') {
24 next();
25 return;
26 }
27 var suffix = queued.name !== 'this' ? ('" in generator: "' + queued.name + '"') : '';
28 console.error('Cannot find task: "' + tasks[0] + suffix);
29 next();
30 return;
31 }
32
33 utils.merge(generator.options, options);
34
35 var alias = generator.env ? generator.env.alias : generator._name;
36 app.emit('generate', alias, queued.tasks, generator);
37 if (app._lookup) {
38 app.options.lookup = app._lookup;
39 }
40
41 // if `base-config` is registered call `.process` first, then run tasks
42 if (typeof generator.config !== 'undefined') {
43 var config = app.get('cache.config') || {};
44 generator.config.process(config, build);
45 } else {
46 build();
47 }
48
49 function build(err) {
50 if (err) return done(err);
51 generator.build(tasks, done);
52 }
53
54 function done(err) {
55 if (err) {
56 err.queue = queued;
57 utils.handleError(app, queued.name, next)(err);
58 } else {
59 next();
60 }
61 }
62};