UNPKG

12.3 kBJavaScriptView Raw
1"use strict";
2var Rx = require("rx");
3var reporter_resolve_1 = require("./reporter.resolve");
4var task_resolve_1 = require("./task.resolve");
5var Immutable = require("immutable");
6var seq = require("./task.sequence");
7var command_run_interactive_1 = require("./command.run.interactive");
8var command_run_execute_1 = require("./command.run.execute");
9var command_run_execute_2 = require("./command.run.execute");
10var task_utils_1 = require("./task.utils");
11var debug = require("debug")("cb:command.run");
12var _ = require("../lodash.custom");
13var TriggerTypes;
14(function (TriggerTypes) {
15 TriggerTypes[TriggerTypes["command"] = "command"] = "command";
16 TriggerTypes[TriggerTypes["watcher"] = "watcher"] = "watcher";
17})(TriggerTypes = exports.TriggerTypes || (exports.TriggerTypes = {}));
18function getRunCommandSetup(trigger) {
19 var cliInput = trigger.cli.input.slice(1);
20 /**
21 * Task Tracker for external observers
22 * @type {Subject<T>}
23 */
24 trigger.tracker = new Rx.Subject();
25 trigger.tracker$ = trigger.tracker.share();
26 /**
27 * First Resolve the task names given in input.
28 */
29 var tasks = task_resolve_1.resolveTasks(cliInput, trigger);
30 var topLevelParallel = tasks.all.some(function (task) {
31 return task.runMode === task_resolve_1.TaskRunModes.parallel;
32 });
33 /**
34 * If only 1 task is being run, check if any sub-tasks
35 * are trying to be run in parallel mode and if so, set the runMode
36 * This is done to ensure if a child errors, it doesn't affect children.
37 * (as it's only a single task via the cli, it wouldn't be expected)
38 */
39 if (cliInput.length === 1 && topLevelParallel) {
40 trigger.config.runMode = task_resolve_1.TaskRunModes.parallel;
41 }
42 /**
43 * All this point, all given task names have been resolved
44 * to either modules on disk, or @adaptor tasks, so we can
45 * go ahead and create a flattened run-sequence
46 */
47 var sequence = seq.createFlattenedSequence(tasks.valid, trigger);
48 /**
49 * With the flattened sequence, we can create nested collections
50 * of Rx Observables
51 */
52 var runner = seq.createRunner(sequence, trigger);
53 /**
54 * Check if the user intends to handle running the tasks themselves,
55 * if thats the case we give them the resolved tasks along with
56 * the sequence and the primed runner
57 */
58 return { tasks: tasks, sequence: sequence, runner: runner };
59}
60exports.getRunCommandSetup = getRunCommandSetup;
61function handleIncomingRunCommand(cli, input, config, reporter) {
62 /**
63 * Array of top-level task names that are available
64 */
65 var topLevelTasks = Object.keys(input.tasks);
66 /**
67 * The shared Map that tasks can read/write to
68 */
69 var sharedMap = new Rx.BehaviorSubject(Immutable.Map({}));
70 var type = TriggerTypes.command;
71 debug("top level tasks available", topLevelTasks);
72 /**
73 * If the interactive flag was given (-i), always try
74 * that first.
75 */
76 if (config.interactive) {
77 return enterInteractive();
78 }
79 /**
80 * If the user never provided a task then we either look
81 * for a `default` task or enter interactive mode if possible
82 * eg:
83 * $ crossbow run
84 */
85 if (cli.input.length === 1) {
86 /**
87 * First look if there's a 'default' task defined
88 */
89 if (hasDefaultTask()) {
90 var cliMerged = _.merge({}, cli, { input: ["run", "default"] });
91 return Rx.Observable.just(command_run_execute_1.default({
92 shared: sharedMap,
93 cli: cliMerged,
94 input: input,
95 config: config,
96 reporter: reporter,
97 type: TriggerTypes.command
98 }));
99 }
100 /**
101 * If no default task was found above, enter interactive mode
102 */
103 return enterInteractive();
104 }
105 /**
106 * Finally check if tasks were provided on the CLI, but were parents
107 */
108 var maybes = cli.input.slice(1);
109 var maybeParents = maybes.filter(function (x) { return task_utils_1.isParentRef(x, topLevelTasks.filter(task_utils_1.isParentGroupName)); });
110 /**
111 * If any parent task names were given, go into interactive mode
112 */
113 if (maybeParents.length) {
114 return enterInteractive();
115 }
116 /**
117 * Check if the provided input contains either
118 * 'default' or 'default@p' etc
119 */
120 function hasDefaultTask() {
121 if (task_resolve_1.maybeTaskNames(input.tasks, "default").length) {
122 return true;
123 }
124 if (input.tasks["default"] !== undefined) {
125 return true;
126 }
127 }
128 /**
129 * If no task given, or if user has selected interactive mode,
130 * show the UI for task selection
131 */
132 function enterInteractive() {
133 /**
134 * No top level tasks, so exit with the correct error
135 */
136 if (!topLevelTasks.length) {
137 reporter({ type: reporter_resolve_1.ReportTypes.NoTasksAvailable });
138 return Rx.Observable.just({
139 setup: {
140 sequence: [],
141 tasks: { all: [], valid: [], invalid: [] },
142 errors: [{ type: command_run_execute_2.RunCommandReportTypes.NoTasks }]
143 },
144 update$: Rx.Observable.empty()
145 });
146 }
147 /**
148 * Log that no tasks were provided
149 */
150 reporter({ type: reporter_resolve_1.ReportTypes.NoTasksProvided });
151 /**
152 * Now prompt for input
153 */
154 return command_run_interactive_1.default(cli, input, config, reporter)
155 .flatMap(function (answers) {
156 var cliMerged = _.assign({}, cli, { input: ["run"].concat(answers.tasks) });
157 var configMerged = _.merge({}, config, { runMode: task_resolve_1.TaskRunModes.parallel });
158 return Rx.Observable.just(command_run_execute_1.default({
159 shared: sharedMap,
160 cli: cliMerged,
161 input: input,
162 reporter: reporter,
163 config: configMerged,
164 type: type
165 }));
166 });
167 }
168 /**
169 * If we reach here we're dealing with the default case
170 * where we are simply executing the command as normal
171 * eg:
172 * $ crossbow run task1 task2@p etc ...
173 */
174 return Rx.Observable.just(command_run_execute_1.default({
175 shared: sharedMap,
176 cli: cli,
177 input: input,
178 config: config,
179 reporter: reporter,
180 type: type
181 }));
182}
183Object.defineProperty(exports, "__esModule", { value: true });
184exports.default = handleIncomingRunCommand;
185//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5ydW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29tbWFuZC5ydW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUEwQjtBQUcxQix1REFBK0M7QUFDL0MsK0NBQTBFO0FBSzFFLHFDQUF3QztBQUN4QyxxQ0FBdUM7QUFDdkMscUVBQTREO0FBQzVELDZEQUFzRDtBQUN0RCw2REFBNEQ7QUFFNUQsMkNBQTREO0FBSTVELElBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pELElBQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBcUJ0QyxJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIsdUNBQWUsU0FBUyxhQUFBLENBQUE7SUFDeEIsdUNBQWUsU0FBUyxhQUFBLENBQUE7QUFDNUIsQ0FBQyxFQUhXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBR3ZCO0FBRUQsNEJBQW1DLE9BQXVCO0lBQ3RELElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1Qzs7O09BR0c7SUFDSCxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUUzQzs7T0FFRztJQUNILElBQU0sS0FBSyxHQUFHLDJCQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLElBQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJO1FBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLDJCQUFZLENBQUMsUUFBUSxDQUFDO0lBQ2xELENBQUMsQ0FB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
\No newline at end of file