UNPKG

12.4 kBJavaScriptView Raw
1"use strict";
2var task_utils_1 = require("./task.utils");
3var watch_preprocess_1 = require("./watch.preprocess");
4var watch_errors_1 = require("./watch.errors");
5var blacklist = ["options", "bs-config", "before", "id"];
6var _ = require("../lodash.custom");
7exports.defaultWatchOptions = {
8 ignoreInitial: true,
9 block: false,
10 throttle: 0,
11 delay: 0,
12 debounce: 0
13};
14/**
15 * Create a single watch task item consisting of
16 * - patterns
17 * - tasks
18 * - options
19 */
20function createOne(name, index, item, itemOptions, globalOptions) {
21 if (task_utils_1.isPlainObject(item)) {
22 if (item.patterns && item.tasks) {
23 return {
24 patterns: [].concat(item.patterns).reduce(function (a, x) { return a.concat(x.split(":")); }, []),
25 tasks: [].concat(item.tasks),
26 options: _.merge({}, exports.defaultWatchOptions, globalOptions, itemOptions),
27 watcherUID: name + "-" + index
28 };
29 }
30 }
31 return item;
32}
33/**
34 * @param watchTaskParent
35 * @param globalOptions
36 * @returns {*}
37 */
38function getFormattedTask(name, watchTaskParent, globalOptions) {
39 /**
40 * Simple mode is when patterns + tasks given as top-level
41 * keys. This means we automatically just into simple mode
42 * eg:
43 * default: {
44 * patterns: ['*.json']
45 * tasks: ['*.json']
46 * }
47 *
48 */
49 if (watchTaskParent.patterns && watchTaskParent.tasks) {
50 return [createOne(name, 0, watchTaskParent, watchTaskParent.options, globalOptions)];
51 }
52 /**
53 * Look at each key provided to decide if it can
54 * be transformed into a watcher obj
55 */
56 return Object.keys(watchTaskParent)
57 .filter(function (x) { return blacklist.indexOf(x) === -1; })
58 .reduce(function (all, item, index) {
59 /**
60 * Here we assume the long-hand version is being
61 * used where the watchers property is provided.
62 * If it is, that means we can create a watcher
63 * object for each item in the 'watchers' array
64 * eg:
65 *
66 * default:
67 * options:
68 * exclude: '*.html'
69 * before: ['bs']
70 * watchers:
71 * - patterns: ['test/fixtures']
72 * tasks: ['1', '2']
73 * - patterns: ['*.css']
74 * tasks: '3'
75 */
76 if (item === "watchers") {
77 /**
78 * If the `watcher` property is an Array, it must
79 * be an Array of Objects, so process each one individually.
80 * eg:
81 * default:
82 * watchers: [
83 * {
84 * patterns: ["scss/**", "css/*.scss"],
85 * tasks: ["$npm node-sass"],
86 * }
87 * ]
88 */
89 if (Array.isArray(watchTaskParent.watchers)) {
90 return all.concat(watchTaskParent.watchers.map(function (watcher, i) {
91 return createOne(name, i, watcher, watchTaskParent.options, globalOptions);
92 }));
93 }
94 /**
95 * If the `watchers` property is a plain object,
96 * use it's keys as watch patterns and the values as
97 * tasks.
98 * eg:
99 * default:
100 * watchers: {
101 * "*.js": ["$npm eslint"],
102 * "*.scss": ["$npm node-sass"]
103 * }
104 */
105 if (task_utils_1.isPlainObject(watchTaskParent.watchers)) {
106 return Object.keys(watchTaskParent.watchers)
107 .map(function (key, i) { return createOne(name, i, {
108 patterns: key,
109 tasks: watchTaskParent.watchers[key]
110 }, watchTaskParent.options, globalOptions); });
111 }
112 }
113 /**
114 * At this point assume that the short-hard pattern <pattern>:<tasks>
115 * eg:
116 * "*.js": ['uglify']
117 */
118 return all.concat(createOne(name, index, {
119 patterns: item,
120 tasks: watchTaskParent[item] // value as the tasks array
121 }, watchTaskParent.options, globalOptions));
122 }, []);
123}
124function createFlattenedWatchTask(taskName, trigger) {
125 var fromCli = ["block", "throttle", "debounce"].reduce(function (acc, key) {
126 // console.log(typeof trigger.config[key]);
127 if (typeof trigger.config[key] !== "undefined") {
128 acc[key] = trigger.config[key];
129 }
130 return acc;
131 }, {});
132 var globalOptions = _.assign({}, trigger.input.watch.options, fromCli);
133 var incoming = watch_preprocess_1.preprocessWatchTask(taskName);
134 var selection = trigger.input.watch[incoming.taskName] || {};
135 var watchers = getFormattedTask(incoming.taskName, selection, globalOptions);
136 var errors = watch_errors_1.gatherWatchTaskErrors(incoming, trigger.input);
137 return {
138 name: taskName,
139 before: selection.before || [],
140 options: selection.options || {},
141 watchers: watchers,
142 errors: errors
143 };
144}
145function validateTask(task, trigger) {
146 return task.errors.length === 0;
147}
148function resolveWatchTasks(taskNames, trigger) {
149 var taskList = taskNames
150 .map(function (taskName) {
151 return createFlattenedWatchTask(taskName, trigger);
152 });
153 /**
154 * Return both valid & invalid tasks. We want to let consumers
155 * handle errors/successes
156 * @type {{valid: Array, invalid: Array}}
157 */
158 var output = {
159 valid: taskList.filter(function (x) { return validateTask(x, trigger); }),
160 invalid: taskList.filter(function (x) { return !validateTask(x, trigger); }),
161 all: taskList
162 };
163 return output;
164}
165exports.resolveWatchTasks = resolveWatchTasks;
166/**
167 * The goal of this function is to produce a flat array containing tasks as strings
168 * this allows us to feed that into the task resolution stuff
169 */
170function resolveBeforeTasks(beforeFlagsFromCliOrConfig, input, watchTasks) {
171 var fromTopLevelInput = [].concat(input.watch.before);
172 var fromWatchTasks = watchTasks.reduce(function (acc, item) {
173 return acc.concat(item.before);
174 }, []);
175 return beforeFlagsFromCliOrConfig.concat(fromTopLevelInput, fromWatchTasks).filter(Boolean);
176}
177exports.resolveBeforeTasks = resolveBeforeTasks;
178//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gucmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93YXRjaC5yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSwyQkFBNEIsY0FBYyxDQUFDLENBQUE7QUFFM0MsaUNBQWtDLG9CQUFvQixDQUFDLENBQUE7QUFDdkQsNkJBQW9ELGdCQUFnQixDQUFDLENBQUE7QUFRckUsSUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzRCxJQUFNLENBQUMsR0FBVyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVqQywyQkFBbUIsR0FBbUI7SUFDL0MsYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFQUFFLEtBQUs7SUFDWixRQUFRLEVBQUUsQ0FBQztJQUNYLEtBQUssRUFBRSxDQUFDO0lBQ1IsUUFBUSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBb0NGOzs7OztHQUtHO0FBQ0gsbUJBQW1CLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhO0lBQzVFLEVBQUUsQ0FBQyxDQUFDLDBCQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDO2dCQUNILFFBQVEsRUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXRCLENBQXNCLEVBQUUsRUFBRSxDQUFDO2dCQUNqRixLQUFLLEVBQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxPQUFPLEVBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsMkJBQW1CLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQztnQkFDeEUsVUFBVSxFQUFLLElBQUksU0FBSSxLQUFPO2FBQ2pDLENBQUM7UUFDTixDQUFDO0lBRUwsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCwwQkFBMEIsSUFBWSxFQUFFLGVBQTBCLEVBQUUsYUFBNkI7SUFFN0Y7Ozs7Ozs7OztPQVNHO0lBQ0gsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7U0FLOUIsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBM0IsQ0FBMkIsQ0FBQztTQUN4QyxNQUFNLENBQUMsVUFBQyxHQUFjLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7V0FnQkc7UUFDSCxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztZQUV0Qjs7Ozs7Ozs7Ozs7ZUFXRztZQUNILEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQ2IsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ04sQ0FBQztZQUVEOzs7Ozs7Ozs7O2VBVUc7WUFDSCxFQUFFLENBQUMsQ0FBQywwQkFBYSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7cUJBQ3ZDLEdBQUcsQ0FBQyxVQUFDLEdBQUcsRUFBRSxDQUFDLElBQUssT0FBQSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtvQkFDaEMsUUFBUSxFQUFFLEdBQUc7b0JBQ2IsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2lCQUN2QyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEVBSHpCLENBR3lCLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0wsQ0FBQztRQUVEOzs7O1dBSUc7UUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUNyQyxRQUFRLEVBQUUsSUFBSTtZQUNkLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsMkJBQTJCO1NBQzNELEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNmLENBQUM7QUFFRCxrQ0FBa0MsUUFBZ0IsRUFBRSxPQUF1QjtJQUV2RSxJQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBRyxFQUFFLEdBQUc7UUFDdEUsMkNBQTJDO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsSUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXpFLElBQU0sUUFBUSxHQUFRLHNDQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELElBQU0sU0FBUyxHQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkUsSUFBTSxRQUFRLEdBQVEsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFcEYsSUFBTSxNQUFNLEdBQUcsb0NBQXFCLENBQ2hDLFFBQVEsRUFDUixPQUFPLENBQUMsS0FBSyxDQUNoQixDQUFDO0lBRUYsTUFBTSxDQUFDO1FBQ0gsSUFBSSxFQUFFLFFBQVE7UUFDZCxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFO1FBQzlCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxJQUFJLEVBQUU7UUFDaEMsUUFBUSxFQUFFLFFBQVE7UUFDbEIsTUFBTSxFQUFFLE1BQU07S0FDakIsQ0FBQztBQUNOLENBQUM7QUFFRCxzQkFBc0IsSUFBZSxFQUFFLE9BQXVCO0lBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELDJCQUFrQyxTQUFtQixFQUFFLE9BQXVCO0lBRTFFLElBQU0sUUFBUSxHQUFHLFNBQVM7U0FDckIsR0FBRyxDQUFDLFVBQUEsUUFBUTtRQUNULE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFUDs7OztPQUlHO0lBQ0gsSUFBTSxNQUFNLEdBQUc7UUFDWCxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQXhCLENBQXdCLENBQUM7UUFDckQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQXpCLENBQXlCLENBQUM7UUFDeEQsR0FBRyxFQUFFLFFBQVE7S0FDaEIsQ0FBQztJQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQW5CZSx5QkFBaUIsb0JBbUJoQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsNEJBQW1DLDBCQUFvQyxFQUFFLEtBQW9CLEVBQUUsVUFBdUI7SUFFbEgsSUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsSUFBTSxjQUFjLEdBQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxNQUFNLENBQ0MsMEJBQTBCLFFBQzFCLGlCQUFpQixFQUNqQixjQUFjLENBQ3BCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFaZSwwQkFBa0IscUJBWWpDLENBQUEifQ==
\No newline at end of file