1 | ;
|
2 | var task_utils_1 = require("./task.utils");
|
3 | var watch_preprocess_1 = require("./watch.preprocess");
|
4 | var watch_errors_1 = require("./watch.errors");
|
5 | var blacklist = ["options", "bs-config", "before", "id"];
|
6 | var _ = require("../lodash.custom");
|
7 | exports.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 | */
|
20 | function 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 | */
|
38 | function 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 | }
|
124 | function 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 | }
|
145 | function validateTask(task, trigger) {
|
146 | return task.errors.length === 0;
|
147 | }
|
148 | function 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 | }
|
165 | exports.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 | */
|
170 | function 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 | }
|
177 | exports.resolveBeforeTasks = resolveBeforeTasks;
|
178 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gucmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93YXRjaC5yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSwyQkFBNEIsY0FBYyxDQUFDLENBQUE7QUFFM0MsaUNBQWtDLG9CQUFvQixDQUFDLENBQUE7QUFDdkQsNkJBQW9ELGdCQUFnQixDQUFDLENBQUE7QUFRckUsSUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzRCxJQUFNLENBQUMsR0FBVyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVqQywyQkFBbUIsR0FBbUI7SUFDL0MsYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFQUFFLEtBQUs7SUFDWixRQUFRLEVBQUUsQ0FBQztJQUNYLEtBQUssRUFBRSxDQUFDO0lBQ1IsUUFBUSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBb0NGOzs7OztHQUtHO0FBQ0gsbUJBQW1CLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhO0lBQzVFLEVBQUUsQ0FBQyxDQUFDLDBCQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDO2dCQUNILFFBQVEsRUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXRCLENBQXNCLEVBQUUsRUFBRSxDQUFDO2dCQUNqRixLQUFLLEVBQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMs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 |
\ | No newline at end of file |