UNPKG

7.69 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var os = require("os");
4var path_1 = require("path");
5var del = require("del");
6var chek_1 = require("chek");
7var logger_1 = require("./logger");
8var glob = require("glob");
9var colurs_1 = require("colurs");
10var fs_extra_1 = require("fs-extra");
11var semver_1 = require("semver");
12var util_1 = require("util");
13var _pkg;
14exports.cwd = process.cwd();
15var colurs = new colurs_1.Colurs();
16/**
17 * Get Parsed
18 *
19 * @param filename the filename to path.parse.
20 */
21function getParsed(filename) {
22 filename = path_1.resolve(exports.cwd, filename);
23 return path_1.parse(filename);
24}
25/**
26 * Get Relative
27 *
28 * @param filename the filename to get relative path for.
29 */
30function getRelative(filename) {
31 var parsed = chek_1.isString(filename) ? getParsed(filename) : filename;
32 return path_1.relative(exports.cwd, path_1.join(parsed.dir, parsed.base || ''));
33}
34/**
35 * Clean
36 * Removes file(s) using provided glob(s).
37 *
38 * @param globs glob or array of glob strings.
39 */
40function clean(globs) {
41 globs = chek_1.toArray(globs);
42 globs.forEach(function (g) {
43 try {
44 del.sync(g);
45 // Some files may not exist del doesn't throw
46 // error just continues.
47 // log.info(`successfully cleaned or ignored ${getRelative(g)}.`);
48 }
49 catch (ex) {
50 logger_1.log.info("failed to clean " + getRelative(g) + ".");
51 }
52 });
53}
54exports.clean = clean;
55/**
56 * Copy
57 * Copies source to target. Does NOT support globs.
58 *
59 * @param src the source path to be copied.
60 * @param dest the destination path to copy to.
61 */
62function copy(src, dest) {
63 if (!src || !dest)
64 return false;
65 var parsedSrc, parsedDest;
66 parsedSrc = getParsed(src);
67 parsedDest = getParsed(dest);
68 try {
69 fs_extra_1.copySync(src, dest);
70 return true;
71 }
72 catch (ex) {
73 logger_1.log.warn("failed to copy " + colurs.yellow(getRelative(parsedSrc || 'undefined')) + " to " + colurs.red(getRelative(parsedDest || 'undefined')) + ".");
74 return false;
75 }
76}
77exports.copy = copy;
78/**
79 * Copy All
80 * Takes collection and copies to destination.
81 *
82 * @param copies collection of source and destination targets.
83 */
84function copyAll(copies) {
85 var success = 0;
86 var failed = 0;
87 var result;
88 function update(_result) {
89 if (!_result)
90 failed++;
91 else
92 success++;
93 }
94 function logResults() {
95 // only log if something copied or failed.
96 if (success || failed) {
97 if (failed > success) {
98 if (!success)
99 logger_1.log.error(colurs.red(failed) + " copies " + colurs.red('failed') + " to processes with 0 succeeding.");
100 else
101 logger_1.log.warn(colurs.red(failed) + " copies " + colurs.red('failed') + " to processes with " + (colurs.green(success) + 'succeeding') + ".");
102 }
103 else {
104 logger_1.log.info(colurs.green(success) + " items " + colurs.green('successfully') + " copied with " + colurs.yellow(failed) + " copies " + colurs.yellow('failing') + ".");
105 }
106 }
107 }
108 if (chek_1.isPlainObject(copies)) {
109 chek_1.keys(copies).forEach(function (k) {
110 var itm = copies[k];
111 // Check if src is glob.
112 if (itm.src.indexOf('*') !== -1) {
113 var arr = glob.sync(itm.src);
114 arr.forEach(function (str) {
115 result = copy(str, itm.dest);
116 update(result);
117 });
118 }
119 else {
120 result = copy(itm.src, itm.dest);
121 update(result);
122 }
123 });
124 // logResults();
125 }
126 else if (chek_1.isArray(copies)) {
127 // If not array of tuples convert.
128 if (chek_1.isString(copies[0]))
129 copies = [copies[0].split('|')];
130 copies.forEach(function (c) {
131 var tuple = c;
132 if (tuple[0].indexOf('*') !== -1) {
133 var arr = glob.sync(tuple[0]);
134 arr.forEach(function (str) {
135 result = copy(str, tuple[1]);
136 update(result);
137 });
138 }
139 else {
140 result = copy(tuple[0], tuple[1]);
141 update(result);
142 }
143 });
144 // logResults();
145 }
146 else {
147 logger_1.log.warn("cannot copy using unknown configuration type of " + typeof copies + ".");
148 }
149 return {
150 success: success,
151 failed: failed
152 };
153}
154exports.copyAll = copyAll;
155/**
156 * Pkg
157 * Loads the package.json file for project or saves package.json.
158 *
159 * @param val the package.json object to be written to file.
160 */
161function pkg(val) {
162 var filename = path_1.resolve(exports.cwd, 'package.json');
163 if (!val)
164 return _pkg || (_pkg = fs_extra_1.readJSONSync(filename));
165 fs_extra_1.writeJSONSync(filename, val, { spaces: 2 });
166}
167exports.pkg = pkg;
168/**
169 * Bump
170 * : Bumps the package version.
171 *
172 * @param type the release type to increment the package by.
173 */
174function bump(type) {
175 if (type === void 0) { type = 'patch'; }
176 var _pkg = pkg();
177 if (!_pkg || !_pkg.version)
178 logger_1.log.error('Failed to load package.json, are you sure this is a valid project?');
179 var origVer = _pkg.version;
180 var newVer = semver_1.inc(origVer, type);
181 if (newVer === null)
182 logger_1.log.error('Whoops tried to bump version but got null.');
183 _pkg.version = newVer;
184 pkg(_pkg);
185 return { name: _pkg.name, version: _pkg.version, previous: origVer, current: _pkg.version };
186}
187exports.bump = bump;
188/**
189 * Serve
190 * Hook to Browser Sync accepts name and options returning a Browser Sync Server Instance.
191 * @see https://www.browsersync.io/docs/api
192 *
193 * @param name the name of the server or Browser Sync options.
194 * @param options the Browser Sync Options.
195 */
196function serve(name, options, init) {
197 var _pkg = pkg();
198 if (chek_1.isPlainObject(name)) {
199 init = options;
200 options = name;
201 name = undefined;
202 }
203 if (util_1.isBoolean(options)) {
204 init = options;
205 options = undefined;
206 }
207 var defaults = {
208 server: {
209 baseDir: './dist'
210 }
211 };
212 name = name || 'dev-server';
213 options = chek_1.extend({}, defaults, options);
214 var bsync = chek_1.tryRootRequire('browser-sync');
215 if (!bsync)
216 logger_1.log.error('failed to load root module browser-sync, ensure the module is installed');
217 var server = bsync.create(name);
218 if (init !== false)
219 server.init(options, function (err) {
220 if (err) {
221 logger_1.log.error(err);
222 }
223 else {
224 logger_1.log.info("browser Sync server " + name + " successfully initialized.");
225 }
226 });
227 return server;
228}
229exports.serve = serve;
230/**
231 * Platform
232 * Gets information and paths for the current platform.
233 */
234function platform() {
235 var cpus = os.cpus();
236 var cpu = cpus[0];
237 cpu.cores = cpus.length;
238 var tmpPlatform = os.platform();
239 if (/^win/.test(tmpPlatform))
240 tmpPlatform = 'windows';
241 else if (tmpPlatform === 'darwin' || tmpPlatform === 'freebsd')
242 tmpPlatform = 'mac';
243 else if (tmpPlatform === 'linux')
244 tmpPlatform = 'linux';
245 return {
246 platform: tmpPlatform,
247 arch: os.arch(),
248 release: os.release(),
249 hostname: os.hostname(),
250 homedir: os.homedir(),
251 cpu: cpu
252 };
253}
254exports.platform = platform;
255//# sourceMappingURL=utils.js.map
\No newline at end of file