1 | "use strict";
|
2 |
|
3 | var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
|
4 |
|
5 | var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
|
6 |
|
7 | var _path = require("path");
|
8 |
|
9 | var path = _interopRequire(_path);
|
10 |
|
11 | var runSequence = _interopRequire(require("run-sequence"));
|
12 |
|
13 | var path = _interopRequire(_path);
|
14 |
|
15 | var fs = _interopRequire(require("fs"));
|
16 |
|
17 | var compileParams = _interopRequire(require("./utils/compileParams"));
|
18 |
|
19 | var merge = _interopRequire(require("deepmerge"));
|
20 |
|
21 | var callsite = _interopRequire(require("callsite"));
|
22 |
|
23 | var colors = _interopRequire(require("colors"));
|
24 |
|
25 | var Notification = _interopRequire(require("./utils/notification"));
|
26 |
|
27 | var pwd = require("shelljs").pwd;
|
28 | var assign = _interopRequire(require("object-assign"));
|
29 |
|
30 | var tasks = {};
|
31 | var queue = {};
|
32 | var settings = { vars: { src: "./src", dist: "./dist" } };
|
33 |
|
34 | var Pruno = (function () {
|
35 | function Pruno(cb) {
|
36 | try {
|
37 | var parent = module.parent;
|
38 | var gulp = parent.require("gulp");
|
39 | } catch (err) {
|
40 | throw new Error("Gulp is not currently installed. Please run `npm install -D gulp`.");
|
41 | }
|
42 |
|
43 | var stack = callsite();
|
44 | settings.topLevel = path.dirname(stack[1].getFileName());
|
45 |
|
46 | if (!gulp) {
|
47 | throw new ReferenceError("Please define the instance of gulp for pruno to use by executing " + "pruno.use(gulp) before executing pruno's constructor");
|
48 | }
|
49 |
|
50 | require("./modules/configure");
|
51 |
|
52 | var defaults = [];
|
53 | var gulpWatchers = [];
|
54 | var watchers = [];
|
55 |
|
56 | cb(tasks);
|
57 |
|
58 | Object.keys(queue).forEach(function (taskName) {
|
59 | var task = queue[taskName].instance;
|
60 | if (typeof task.enqueue === "function" && defaults.indexOf(taskName) === -1) {
|
61 | gulp.task(taskName, task.enqueue.bind(null, gulp, task.params));
|
62 | defaults.push(taskName);
|
63 | }
|
64 |
|
65 | var watchName = "" + taskName + ":watch";
|
66 | var watcher = task.generateWatcher ? task.generateWatcher(gulp, task.params) : false;
|
67 |
|
68 | if (watchers.indexOf(watchName) === -1) {
|
69 | if (typeof watcher === "function") {
|
70 | gulp.task(watchName, watcher);
|
71 | watchers.push(watchName);
|
72 | } else if (watcher === true) {
|
73 | var search = task.params.search;
|
74 | gulp.task(watchName, task.enqueue.bind(null, gulp, task.params));
|
75 | gulpWatchers.push({ search: search, watchName: watchName });
|
76 | }
|
77 | }
|
78 | });
|
79 |
|
80 | runSequence = runSequence.use(gulp);
|
81 |
|
82 | gulp.task("default", function () {
|
83 | var tasks = defaults.map(function (task) {
|
84 | return task.underline.yellow;
|
85 | }).join(", ");
|
86 | Pruno.notify("Starting", tasks);
|
87 |
|
88 | runSequence(defaults);
|
89 | });
|
90 |
|
91 | if (watchers.length + gulpWatchers.length > 0) {
|
92 | gulp.task("watch", function () {
|
93 | if (watchers.length > 0) {
|
94 | runSequence(watchers);
|
95 | }
|
96 |
|
97 | gulpWatchers.forEach(function (watcher) {
|
98 | runSequence(watcher.watchName);
|
99 | gulp.watch(watcher.search, [watcher.watchName]);
|
100 | });
|
101 | });
|
102 | }
|
103 | }
|
104 |
|
105 | _prototypeProperties(Pruno, {
|
106 | plugins: {
|
107 | value: function plugins(cb) {
|
108 | var _module$parent$require = module.parent.require(path.join(pwd(), "package.json"));
|
109 |
|
110 | var dependencies = _module$parent$require.dependencies;
|
111 | var devDependencies = _module$parent$require.devDependencies;
|
112 |
|
113 |
|
114 | var modules = Object.keys(assign({}, dependencies || {}, devDependencies || {})).filter(function (mod) {
|
115 | return /^pruno\-(.+)/.exec(mod);
|
116 | }).forEach(function (mod) {
|
117 | var mix = module.parent.require(mod);
|
118 | });
|
119 |
|
120 | return Pruno;
|
121 | },
|
122 | writable: true,
|
123 | enumerable: true,
|
124 | configurable: true
|
125 | },
|
126 | extend: {
|
127 | value: function extend(task) {
|
128 | var displayName = (task.displayName || task.name).toLowerCase().replace(/Task$/i, "");
|
129 |
|
130 | var taskName, instance;
|
131 | tasks[displayName] = function () {
|
132 | var name = arguments[0] === undefined ? null : arguments[0];
|
133 | var params = arguments[1] === undefined ? {} : arguments[1];
|
134 | if (typeof name === "object") {
|
135 | params = name;
|
136 | taskName = displayName;
|
137 | } else {
|
138 | taskName = "" + displayName + "-" + name;
|
139 | }
|
140 |
|
141 | var defaults = typeof task.getDefaults === "function" ? task.getDefaults() : {};
|
142 |
|
143 | var baseSettings = settings[displayName] || {};
|
144 |
|
145 | var opts = compileParams(taskName, defaults, baseSettings, params, settings);
|
146 | opts.taskName = taskName;
|
147 |
|
148 | instance = new task(opts);
|
149 | queue[taskName] = { instance: instance, opts: opts };
|
150 |
|
151 | return tasks;
|
152 | };
|
153 | },
|
154 | writable: true,
|
155 | enumerable: true,
|
156 | configurable: true
|
157 | },
|
158 | use: {
|
159 | value: function use(gulp) {
|
160 | throw new Error("pruno.use(...) has been deprecated. The parent modules gulp instance " + "is now automatically inferred.");
|
161 | },
|
162 | writable: true,
|
163 | enumerable: true,
|
164 | configurable: true
|
165 | },
|
166 | setDefaults: {
|
167 | value: function setDefaults() {
|
168 | var opts = arguments[0] === undefined ? {} : arguments[0];
|
169 | settings = merge(settings, opts);
|
170 | },
|
171 | writable: true,
|
172 | enumerable: true,
|
173 | configurable: true
|
174 | },
|
175 | notify: {
|
176 | value: function notify(plugin) {
|
177 | for (var _len = arguments.length, parts = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
178 | parts[_key - 1] = arguments[_key];
|
179 | }
|
180 |
|
181 | var timestamp = new Date();
|
182 | var stamp = "[pruno - " + timestamp + "]";
|
183 | var pluginLabel = "[" + plugin + "]";
|
184 |
|
185 | parts = Array.isArray(parts) ? parts : [parts];
|
186 |
|
187 | console.log.apply(console, [stamp.bold.green, pluginLabel.bold.magenta].concat(parts));
|
188 |
|
189 | new Notification().message(parts.join(" "));
|
190 | },
|
191 | writable: true,
|
192 | enumerable: true,
|
193 | configurable: true
|
194 | },
|
195 | error: {
|
196 | value: function error(plugin) {
|
197 | for (var _len = arguments.length, parts = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
198 | parts[_key - 1] = arguments[_key];
|
199 | }
|
200 |
|
201 | var timestamp = new Date();
|
202 | var stamp = "[pruno - " + timestamp + "]";
|
203 | var pluginLabel = "[" + plugin + "]";
|
204 |
|
205 | parts = Array.isArray(parts) ? parts : [parts];
|
206 |
|
207 | console.error.apply(console, [stamp.bold.red, pluginLabel.bold.magenta].concat(parts));
|
208 |
|
209 | new Notification().error(parts.join(" "));
|
210 | },
|
211 | writable: true,
|
212 | enumerable: true,
|
213 | configurable: true
|
214 | },
|
215 | get: {
|
216 | value: function get(property) {
|
217 | if (!property) {
|
218 | throw new TypeError("You must define a property go get.");
|
219 | }
|
220 |
|
221 | return settings[property];
|
222 | },
|
223 | writable: true,
|
224 | enumerable: true,
|
225 | configurable: true
|
226 | }
|
227 | });
|
228 |
|
229 | return Pruno;
|
230 | })();
|
231 |
|
232 | module.exports = Pruno; |
\ | No newline at end of file |