UNPKG

stiks

Version:

Node bundling & workflow utility for building Node apps.

275 lines 7.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var os = require("os"); var path_1 = require("path"); var del = require("del"); var chek_1 = require("chek"); var logger_1 = require("./logger"); var glob = require("glob"); var fs_extra_1 = require("fs-extra"); var colurs_1 = require("colurs"); var semver_1 = require("semver"); var util_1 = require("util"); var _pkg; var colurs = new colurs_1.Colurs(); exports.cwd = process.cwd(); /** * Get Parsed * * @param filename the filename to path.parse. */ function getParsed(filename) { filename = path_1.resolve(exports.cwd, filename); return path_1.parse(filename); } /** * Get Relative * * @param filename the filename to get relative path for. */ function getRelative(filename) { var parsed = chek_1.isString(filename) ? getParsed(filename) : filename; return path_1.relative(exports.cwd, path_1.join(parsed.dir, parsed.base || '')); } /** * Clean * Removes file(s) using provided glob(s). * * @param globs glob or array of glob strings. */ function clean(globs) { globs = chek_1.toArray(globs); globs.forEach(function (g) { try { del.sync(g); // Some files may not exist del doesn't throw // error just continues. // log.notify(`successfully cleaned or ignored ${getRelative(g)}.`); } catch (ex) { logger_1.log.notify("failed to clean " + getRelative(g) + "."); } }); } exports.clean = clean; /** * Copy * Copies source to target. Does NOT support globs. * * @param src the source path to be copied. * @param dest the destination path to copy to. */ function copy(src, dest) { if (!src || !dest) return false; try { fs_extra_1.copySync(src, dest); logger_1.log.notify("copied " + src + " to " + dest + "."); return true; } catch (ex) { logger_1.log.warn("failed to copy " + src + " to " + dest + "."); return false; } } exports.copy = copy; /** * Copy All * Takes collection and copies to destination. * * @param copies collection of source and destination targets. */ function copyAll(copies) { var success = 0; var failed = 0; var result; function update(_result) { if (!_result) failed++; else success++; } function logResults() { // only log if something copied or failed. if (success || failed) { if (failed > success) { if (!success) logger_1.log.error(failed + " failed to copy with 0 succeeding."); else logger_1.log.warn(failed + " failed to copy " + success + " succeeded."); } else { logger_1.log.notify(success + " items copied " + failed + " failed."); } } } if (chek_1.isPlainObject(copies)) { chek_1.keys(copies).forEach(function (k) { var itm = copies[k]; // Check if src is glob. if (itm.src.indexOf('*') !== -1) { var arr = glob.sync(itm.src); arr.forEach(function (str) { result = copy(str, itm.dest); update(result); }); } else { result = copy(itm.src, itm.dest); update(result); } }); logResults(); } else if (chek_1.isArray(copies)) { // If not array of tuples convert. if (chek_1.isString(copies[0])) copies = copies.reduce(function (a, c) { var tuple = c.split('|'); return a.concat([tuple]); }, []); copies.forEach(function (c) { var tuple = c; if (tuple[0].indexOf('*') !== -1) { var arr = glob.sync(tuple[0]); arr.forEach(function (str) { result = copy(str, tuple[1]); update(result); }); } else { result = copy(tuple[0], tuple[1]); update(result); } }); logResults(); } else { logger_1.log.warn("copy failed using unknown configuration type."); } return { success: success, failed: failed }; } exports.copyAll = copyAll; /** * Pkg * Loads the package.json file for project or saves package.json. * * @param val the package.json object to be written to file. */ function pkg(val) { var filename = path_1.resolve(exports.cwd, 'package.json'); if (!val) return _pkg || (_pkg = fs_extra_1.readJSONSync(filename)); fs_extra_1.writeJSONSync(filename, val, { spaces: 2 }); } exports.pkg = pkg; /** * Bump * : Bumps the package version. * * @param type the release type to increment the package by. */ function bump(type) { if (type === void 0) { type = 'patch'; } var _pkg = pkg(); if (!_pkg || !_pkg.version) logger_1.log.error('failed to load package.json, are you sure this is a valid project?'); var origVer = _pkg.version; var newVer = semver_1.inc(origVer, type); if (newVer === null) logger_1.log.error('Whoops tried to bump version but got null.'); _pkg.version = newVer; pkg(_pkg); return { name: _pkg.name, version: _pkg.version, previous: origVer, current: _pkg.version }; } exports.bump = bump; /** * Serve * Hook to Browser Sync accepts name and options returning a Browser Sync Server Instance. * @see https://www.browsersync.io/docs/api * * @param name the name of the server or Browser Sync options. * @param options the Browser Sync Options. */ function serve(name, options, init) { var _pkg = pkg(); if (chek_1.isPlainObject(name)) { init = options; options = name; name = undefined; } if (chek_1.isBoolean(options)) { init = options; options = undefined; } var defaults = { server: { baseDir: './dist' } }; name = name || 'dev-server'; options = chek_1.extend({}, defaults, options); var bsync = chek_1.tryRootRequire('browser-sync'); if (!bsync) logger_1.log.error('browser-sync not found try >> npm install browser-sync -s'); var server = bsync.create(name); if (init !== false) server.init(options, function (err) { if (err) { logger_1.log.error(err); } else { logger_1.log.notify("browser Sync server " + name + " started."); } }); return server; } exports.serve = serve; /** * Platform * Gets information and paths for the current platform. */ function platform() { var cpus = os.cpus(); var cpu = cpus[0]; cpu.cores = cpus.length; var tmpPlatform = os.platform(); if (/^win/.test(tmpPlatform)) tmpPlatform = 'windows'; else if (tmpPlatform === 'darwin' || tmpPlatform === 'freebsd') tmpPlatform = 'mac'; else if (tmpPlatform === 'linux') tmpPlatform = 'linux'; return { platform: tmpPlatform, arch: os.arch(), release: os.release(), hostname: os.hostname(), homedir: os.homedir(), cpu: cpu }; } exports.platform = platform; /** * Colorizes a value. * * @param val the value to colorize. * @param styles the styles to be applied. */ function colorize(val) { var styles = []; for (var _i = 1; _i < arguments.length; _i++) { styles[_i - 1] = arguments[_i]; } styles = chek_1.flatten(styles); if (chek_1.isObject(val)) return util_1.inspect(val, null, null, true); if (/\./.test(styles[0])) styles = styles[0].split('.'); return colurs.applyAnsi(val, styles); } exports.colorize = colorize; //# sourceMappingURL=utils.js.map