UNPKG

12.3 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gucmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93YXRjaC5yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSwyQ0FBMkM7QUFFM0MsdURBQXVEO0FBQ3ZELCtDQUFxRTtBQVFyRSxJQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELElBQU0sQ0FBQyxHQUFXLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRWpDLFFBQUEsbUJBQW1CLEdBQW1CO0lBQy9DLGFBQWEsRUFBRSxJQUFJO0lBQ25CLEtBQUssRUFBRSxLQUFLO0lBQ1osUUFBUSxFQUFFLENBQUM7SUFDWCxLQUFLLEVBQUUsQ0FBQztJQUNSLFFBQVEsRUFBRSxDQUFDO0NBQ2QsQ0FBQztBQW9DRjs7Ozs7R0FLRztBQUNILG1CQUFtQixJQUFZLEVBQUUsS0FBYSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYTtJQUM1RSxFQUFFLENBQUMsQ0FBQywwQkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQztnQkFDSCxRQUFRLEVBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUF0QixDQUFzQixFQUFFLEVBQUUsQ0FBQztnQkFDakYsS0FBSyxFQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDakMsT0FBTyxFQUFLLENBQUMsQ0FBQyxLQUFLLENB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
\No newline at end of file