1 | ;
|
2 | var Rx = require("rx");
|
3 | var reporter_resolve_1 = require("./reporter.resolve");
|
4 | var task_resolve_1 = require("./task.resolve");
|
5 | var Immutable = require("immutable");
|
6 | var seq = require("./task.sequence");
|
7 | var command_run_interactive_1 = require("./command.run.interactive");
|
8 | var command_run_execute_1 = require("./command.run.execute");
|
9 | var command_run_execute_2 = require("./command.run.execute");
|
10 | var task_utils_1 = require("./task.utils");
|
11 | var debug = require("debug")("cb:command.run");
|
12 | var _ = require("../lodash.custom");
|
13 | var TriggerTypes;
|
14 | (function (TriggerTypes) {
|
15 | TriggerTypes[TriggerTypes["command"] = "command"] = "command";
|
16 | TriggerTypes[TriggerTypes["watcher"] = "watcher"] = "watcher";
|
17 | })(TriggerTypes = exports.TriggerTypes || (exports.TriggerTypes = {}));
|
18 | function 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 | }
|
60 | exports.getRunCommandSetup = getRunCommandSetup;
|
61 | function 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 | }
|
183 | Object.defineProperty(exports, "__esModule", { value: true });
|
184 | exports.default = handleIncomingRunCommand;
|
185 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5ydW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29tbWFuZC5ydW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUEwQjtBQUcxQix1REFBK0M7QUFDL0MsK0NBQTBFO0FBSzFFLHFDQUF3QztBQUN4QyxxQ0FBdUM7QUFDdkMscUVBQTREO0FBQzVELDZEQUFzRDtBQUN0RCw2REFBNEQ7QUFFNUQsMkNBQTREO0FBSTVELElBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pELElBQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBcUJ0QyxJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIsdUNBQWUsU0FBUyxhQUFBLENBQUE7SUFDeEIsdUNBQWUsU0FBUyxhQUFBLENBQUE7QUFDNUIsQ0FBQyxFQUhXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBR3ZCO0FBRUQsNEJBQW1DLE9BQXVCO0lBQ3RELElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1Qzs7O09BR0c7SUFDSCxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUUzQzs7T0FFRztJQUNILElBQU0sS0FBSyxHQUFHLDJCQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLElBQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJO1FBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLDJCQUFZLENBQUMsUUFBUSxDQUFDO0lBQ2xELENBQUMsQ0FB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 |
\ | No newline at end of file |