1 | ;
|
2 | var task_resolve_1 = require("./task.resolve");
|
3 | var task_utils_1 = require("./task.utils");
|
4 | var _ = require("../lodash.custom");
|
5 | (function (TaskErrorTypes) {
|
6 | TaskErrorTypes[TaskErrorTypes["TaskNotFound"] = "TaskNotFound"] = "TaskNotFound";
|
7 | TaskErrorTypes[TaskErrorTypes["SubtasksNotInConfig"] = "SubtasksNotInConfig"] = "SubtasksNotInConfig";
|
8 | TaskErrorTypes[TaskErrorTypes["SubtaskNotProvided"] = "SubtaskNotProvided"] = "SubtaskNotProvided";
|
9 | TaskErrorTypes[TaskErrorTypes["SubtaskNotProvidedForParent"] = "SubtaskNotProvidedForParent"] = "SubtaskNotProvidedForParent";
|
10 | TaskErrorTypes[TaskErrorTypes["SubtaskNotFound"] = "SubtaskNotFound"] = "SubtaskNotFound";
|
11 | TaskErrorTypes[TaskErrorTypes["SubtaskWildcardNotAvailable"] = "SubtaskWildcardNotAvailable"] = "SubtaskWildcardNotAvailable";
|
12 | TaskErrorTypes[TaskErrorTypes["AdaptorNotFound"] = "AdaptorNotFound"] = "AdaptorNotFound";
|
13 | TaskErrorTypes[TaskErrorTypes["FlagNotFound"] = "FlagNotFound"] = "FlagNotFound";
|
14 | TaskErrorTypes[TaskErrorTypes["CBFlagNotProvided"] = "CBFlagNotProvided"] = "CBFlagNotProvided";
|
15 | TaskErrorTypes[TaskErrorTypes["InvalidTaskInput"] = "InvalidTaskInput"] = "InvalidTaskInput";
|
16 | TaskErrorTypes[TaskErrorTypes["CircularReference"] = "CircularReference"] = "CircularReference";
|
17 | TaskErrorTypes[TaskErrorTypes["FileTypeNotSupported"] = "FileTypeNotSupported"] = "FileTypeNotSupported";
|
18 | })(exports.TaskErrorTypes || (exports.TaskErrorTypes = {}));
|
19 | var TaskErrorTypes = exports.TaskErrorTypes;
|
20 | function gatherTaskErrors(task, trigger) {
|
21 | return [
|
22 | getModuleErrors,
|
23 | getFileTypeErrors,
|
24 | getCBFlagErrors,
|
25 | getSubTaskErrors,
|
26 | getParentGroupErrors
|
27 | ].reduce(function (all, fn) { return all.concat(fn(task, trigger)); }, []);
|
28 | }
|
29 | exports.gatherTaskErrors = gatherTaskErrors;
|
30 | function getModuleErrors(task, trigger) {
|
31 | if (task.type === task_resolve_1.TaskTypes.ParentGroup)
|
32 | return [];
|
33 | if (task.type === task_resolve_1.TaskTypes.ExternalTask)
|
34 | return [];
|
35 | if (task.type === task_resolve_1.TaskTypes.InlineFunction)
|
36 | return [];
|
37 | /**
|
38 | * If a module was not located, and there are 0 child tasks,
|
39 | * this can be classified as a `module not found error`
|
40 | */
|
41 | if (task.externalTasks.length === 0 && task.tasks.length === 0) {
|
42 | var matchSorter = require('match-sorter');
|
43 | return [{
|
44 | type: TaskErrorTypes.TaskNotFound,
|
45 | taskName: task.taskName,
|
46 | cwd: trigger.config.cwd,
|
47 | possible: matchSorter(task_utils_1.getPossibleTaskNames(trigger.input), task.taskName, { threshold: matchSorter.rankings.NO_MATCH })
|
48 | }];
|
49 | }
|
50 | return [];
|
51 | }
|
52 | function getFileTypeErrors(task, trigger) {
|
53 | /**
|
54 | * If it's not an external task, this can never be an error
|
55 | */
|
56 | if (task.type !== task_resolve_1.TaskTypes.ExternalTask)
|
57 | return [];
|
58 | var supported = task_utils_1.isSupportedFileType(task.externalTasks[0].parsed.ext);
|
59 | if (supported)
|
60 | return [];
|
61 | return [{
|
62 | type: TaskErrorTypes.FileTypeNotSupported,
|
63 | taskName: task.taskName,
|
64 | externalFile: task.externalTasks[0]
|
65 | }];
|
66 | }
|
67 | function getCBFlagErrors(task, trigger) {
|
68 | return task.cbflags.reduce(function (all, flag) {
|
69 | /**
|
70 | * if `flag` is an empty string, the user provided an @ after a task
|
71 | * name, but without the right-hand part.
|
72 | * eg:
|
73 | * $ crossbow run build-css@
|
74 | *
|
75 | * when it should of been
|
76 | * $ crossbow run build-css@p
|
77 | *
|
78 | */
|
79 | if (flag === "") {
|
80 | return all.concat({
|
81 | type: TaskErrorTypes.CBFlagNotProvided,
|
82 | taskName: task.taskName
|
83 | });
|
84 | }
|
85 | return all;
|
86 | }, []);
|
87 | }
|
88 | function getSubTaskErrors(task, trigger) {
|
89 | if (task.type === task_resolve_1.TaskTypes.ParentGroup)
|
90 | return [];
|
91 | /**
|
92 | * Now validate any sub tasks given with colon syntax
|
93 | * eg: sass:dev
|
94 | * -> must have a configuration object under the key sass.dev
|
95 | * -> VALID
|
96 | * config:
|
97 | * sass:
|
98 | * dev: 'input.scss'
|
99 | */
|
100 | return task.subTasks.reduce(function (all, subTaskName) {
|
101 | var configKeys = (function () {
|
102 | var taskOptions = Object.keys(_.get(task, "options", {}));
|
103 | if (taskOptions.length) {
|
104 | return taskOptions;
|
105 | }
|
106 | return Object.keys(_.get(trigger.input, ["options"].concat(task.baseTaskName), {}));
|
107 | })();
|
108 | /**
|
109 | * if `name` is an empty string, the user provided a colon-separated task
|
110 | * name without the right-hand part.
|
111 | * eg:
|
112 | * $ crossbow run sass:
|
113 | *
|
114 | * when it should of been
|
115 | * $ crossbow run sass:site:dev
|
116 | *
|
117 | */
|
118 | if (subTaskName === "") {
|
119 | return all.concat({
|
120 | type: TaskErrorTypes.SubtaskNotProvided,
|
121 | name: subTaskName
|
122 | });
|
123 | }
|
124 | /**
|
125 | * if a star was given as a subTask,
|
126 | * then this item must have configuration
|
127 | * as we'll want to run once with each key
|
128 | */
|
129 | if (subTaskName === "*") {
|
130 | return all.concat(handleWildcardSubtask(configKeys, subTaskName));
|
131 | }
|
132 | /**
|
133 | * Now check if this is an attempt at loading a grouped task
|
134 | */
|
135 | if (subTaskName.length) {
|
136 | var matching = task.tasks.filter(function (x) { return x.taskName === subTaskName; });
|
137 | if (matching.length)
|
138 | return all;
|
139 | }
|
140 | if (!configKeys.length) {
|
141 | return all.concat({
|
142 | type: TaskErrorTypes.SubtasksNotInConfig,
|
143 | name: subTaskName
|
144 | });
|
145 | }
|
146 | /**
|
147 | * Finally check if there's configuration that Matches this
|
148 | * key.
|
149 | */
|
150 | var match = _.get(trigger.input, ["options"].concat(task.baseTaskName, subTaskName));
|
151 | var match2 = _.get(task, ["options"].concat(subTaskName));
|
152 | if (match === undefined && match2 === undefined) {
|
153 | return all.concat({
|
154 | type: TaskErrorTypes.SubtaskNotFound,
|
155 | name: subTaskName
|
156 | });
|
157 | }
|
158 | return all;
|
159 | }, []);
|
160 | }
|
161 | function getParentGroupErrors(task, trigger) {
|
162 | /**
|
163 | * This only applies to ParentGroups
|
164 | */
|
165 | if (task.type !== task_resolve_1.TaskTypes.ParentGroup)
|
166 | return [];
|
167 | /**
|
168 | * If the type is a ParentGroup, it requires that a sub-task is provided also
|
169 | */
|
170 | if (task.subTasks[0] === "*") {
|
171 | var children = task_utils_1.getChildItems(task.baseTaskName, trigger.input.tasks);
|
172 | if (Object.keys(children).length) {
|
173 | return [];
|
174 | }
|
175 | }
|
176 | if (task.subTasks.length === 0) {
|
177 | var available = (function () {
|
178 | var match = task_utils_1.isParentGroupName(task.baseTaskName);
|
179 | if (match) {
|
180 | return Object.keys(_.get(trigger.input.tasks, [task.baseTaskName], {}));
|
181 | }
|
182 | return Object.keys(_.get(trigger.input.tasks, ["(" + task.baseTaskName + ")"], {}));
|
183 | })();
|
184 | return [{
|
185 | type: TaskErrorTypes.SubtaskNotProvidedForParent,
|
186 | name: task.baseTaskName,
|
187 | available: available
|
188 | }];
|
189 | }
|
190 | function match(name) {
|
191 | return _.get(trigger.input.tasks, [("(" + task.baseTaskName + ")"), name]);
|
192 | }
|
193 | return task.subTasks.reduce(function (acc, subTask) {
|
194 | if (!match(subTask)) {
|
195 | return acc.concat([{
|
196 | type: TaskErrorTypes.SubtaskNotFound,
|
197 | name: subTask
|
198 | }]);
|
199 | }
|
200 | return acc;
|
201 | }, []);
|
202 | }
|
203 | function handleWildcardSubtask(configKeys, name) {
|
204 | if (configKeys.length) {
|
205 | return [];
|
206 | }
|
207 | return [{
|
208 | type: TaskErrorTypes.SubtaskWildcardNotAvailable,
|
209 | name: name
|
210 | }];
|
211 | }
|
212 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFzay5lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLDZCQUF3QixnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3pDLDJCQUEwRixjQUFjLENBQUMsQ0FBQTtBQUd6RyxJQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV0QyxXQUFZLGNBQWM7SUFDdEIsZ0RBQW9CLGNBQWMsa0JBQUEsQ0FBQTtJQUNsQyx1REFBMkIscUJBQXFCLHlCQUFBLENBQUE7SUFDaEQsc0RBQTBCLG9CQUFvQix3QkFBQSxDQUFBO0lBQzlDLCtEQUFtQyw2QkFBNkIsaUNBQUEsQ0FBQTtJQUNoRSxtREFBdUIsaUJBQWlCLHFCQUFBLENBQUE7SUFDeEMsK0RBQW1DLDZCQUE2QixpQ0FBQSxDQUFBO0lBQ2hFLG1EQUF1QixpQkFBaUIscUJBQUEsQ0FBQTtJQUN4QyxnREFBb0IsY0FBYyxrQkFBQSxDQUFBO0lBQ2xDLHFEQUF5QixtQkFBbUIsdUJBQUEsQ0FBQTtJQUM1QyxvREFBd0Isa0JBQWtCLHNCQUFBLENBQUE7SUFDMUMscURBQXlCLG1CQUFtQix1QkFBQSxDQUFBO0lBQzVDLHdEQUE0QixzQkFBc0IsMEJBQUEsQ0FBQTtBQUN0RCxDQUFDLEVBYlcsc0JBQWMsS0FBZCxzQkFBYyxRQWF6QjtBQWJELElBQVksY0FBYyxHQUFkLHNCQWFYLENBQUE7QUFFRCwwQkFBaUMsSUFBVSxFQUFFLE9BQXVCO0lBQ2hFLE1BQU0sQ0FBQztRQUNILGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixvQkFBb0I7S0FFdkIsQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFHLEVBQUUsRUFBRSxJQUFLLE9BQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQTdCLENBQTZCLEVBQUUsRUFB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 |
\ | No newline at end of file |