UNPKG

7.03 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
4
5var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
6
7var _path = require("path");
8
9var path = _interopRequire(_path);
10
11var runSequence = _interopRequire(require("run-sequence"));
12
13var path = _interopRequire(_path);
14
15var fs = _interopRequire(require("fs"));
16
17var compileParams = _interopRequire(require("./utils/compileParams"));
18
19var merge = _interopRequire(require("deepmerge"));
20
21var callsite = _interopRequire(require("callsite"));
22
23var colors = _interopRequire(require("colors"));
24
25var Notification = _interopRequire(require("./utils/notification"));
26
27var pwd = require("shelljs").pwd;
28var assign = _interopRequire(require("object-assign"));
29
30var tasks = {};
31var queue = {};
32var settings = { vars: { src: "./src", dist: "./dist" } };
33
34var 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
232module.exports = Pruno;
\No newline at end of file