UNPKG

@omnia/tooling

Version:

Provide basic stuffs extensible for omnia extension.

179 lines (178 loc) • 6.39 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.LogTypes = exports.log = exports.logTime = exports.getFileName = exports.getGuidValue = exports.getDirectories = exports.isNullOrEmpty = exports.isNull = exports.isValidGuid = exports.root = exports.timeWatch = exports.getCurrentDateTime = exports.rewriteFile = exports.registerLogToClient = exports.ensureTraillingSlash = exports.generateGuid = void 0; let path = require('path'), fs = require('fs'), timestamp = require('console-timestamp'), chalk = require('chalk'), _timer = {}; let _logToClientHandler = null; var LogTypes; (function (LogTypes) { LogTypes[LogTypes["Info"] = 1] = "Info"; LogTypes[LogTypes["Warning"] = 2] = "Warning"; LogTypes[LogTypes["Error"] = 3] = "Error"; LogTypes[LogTypes["HeadLine"] = 4] = "HeadLine"; })(LogTypes || (LogTypes = {})); exports.LogTypes = LogTypes; ; let firstLoadedTime = new Date().getTime(); function rewriteFile(args) { args.path = args.path || process.cwd(); var fullPath = path.join(args.path, args.file); args.spliceWithinLine = args.spliceWithinLine || false; args.haystack = fs.readFileSync(fullPath, 'utf8'); var body = rewrite(args); fs.writeFileSync(fullPath, body, 'utf8'); } exports.rewriteFile = rewriteFile; function escapeRegExp(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); } function rewrite(args) { // check if splicable is already in the body text var re = new RegExp(args.splicable.map(function (line) { return '\s*' + escapeRegExp(line); }).join('\r\n')); if (re.test(args.haystack)) { return args.haystack; } var lines = args.haystack.split('\r\n'); var otherwiseLineIndex = 0; lines.forEach(function (line, i) { if (line.indexOf(args.needle) !== -1) { otherwiseLineIndex = i; } }); if ((otherwiseLineIndex > 0) && (args.spliceWithinLine)) { var line = lines[otherwiseLineIndex]; var indexToSpliceAt = line.indexOf(args.needle); lines[otherwiseLineIndex] = line.substr(0, indexToSpliceAt) + args.splicable[0] + line.substr(indexToSpliceAt); return lines.join('\r\n'); } var spaces = 0; while (lines[otherwiseLineIndex].charAt(spaces) === ' ') { spaces += 1; } var spaceStr = ''; while ((spaces -= 1) >= 0) { spaceStr += ' '; } lines.splice(otherwiseLineIndex, 0, args.splicable.map(function (line) { return spaceStr + line; }).join('\r\n')); return lines.join('\r\n'); } function getCurrentDateTime() { var d = new Date(); return d.getFullYear() + "-" + d.getMonth() + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); } exports.getCurrentDateTime = getCurrentDateTime; function flatArrayFiles(listFiles) { var flatFiles = ""; for (var i = 0; i < listFiles.length; i++) { flatFiles += listFiles[i].replace(/^.*[\\\/]/, '') + ", "; } if (flatFiles.length > 2 && flatFiles.substr(flatFiles.length - 2, 2) === ", ") { flatFiles = flatFiles.substr(0, flatFiles.length - 2); } return flatFiles; } function timeWatch(timerId, callBack, msWait) { if (_timer[timerId]) { clearTimeout(_timer[timerId]); } _timer[timerId] = setTimeout(callBack, msWait); } exports.timeWatch = timeWatch; // Helper functions var ROOT = process.cwd(); function root(args) { args = Array.prototype.slice.call(arguments, 0); return path.join.apply(path, [ROOT].concat(args)); } exports.root = root; /** * Generate relatively-safe guid */ function generateGuid() { var d = new Date().getTime(); var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); return uuid; } exports.generateGuid = generateGuid; ; function isValidGuid(value) { if (!isNullOrEmpty(value)) { var result = value.match(/^[{]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[}]?$/); return result !== null && result.length > 0; } return false; } exports.isValidGuid = isValidGuid; function isNull(obj) { if (obj === 0 || obj === false) return false; return (!obj || typeof obj === "undefined" || obj === null); } exports.isNull = isNull; function isNullOrEmpty(obj) { return isNull(obj) || obj === ""; } exports.isNullOrEmpty = isNullOrEmpty; function getDirectories(path) { return fs.readdirSync(path).filter(function (file) { return fs.statSync(path + '/' + file).isDirectory(); }); } exports.getDirectories = getDirectories; function getGuidValue(value) { if (value) { let matchs = value.match(/([A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12})/i); if (matchs) return matchs[0]; } return null; } exports.getGuidValue = getGuidValue; function getFileName(source) { if (source) { let extension = path.extname(source); return path.basename(source, extension); } return null; } exports.getFileName = getFileName; function log(message, type, writeToClient = false) { if (type === LogTypes.HeadLine) { console.log(timestamp('[hh:mm:ss] ') + chalk.cyan(message)); } else if (type === LogTypes.Error) { console.log(timestamp('[hh:mm:ss] ') + chalk.red(message)); } else if (type === LogTypes.Warning) { console.log(timestamp('[hh:mm:ss] ') + chalk.yellow(message)); } else { console.log(timestamp('[hh:mm:ss] ') + chalk.green(message)); } if (writeToClient && _logToClientHandler) { _logToClientHandler(message.toString(), type); } } exports.log = log; function logTime(message, start) { if (start === null) log(message + " after " + (new Date().getTime() - firstLoadedTime) + "ms TOTAL", LogTypes.HeadLine); else log(message + " after " + (new Date().getTime() - start) + "ms", LogTypes.HeadLine); } exports.logTime = logTime; function registerLogToClient(handler) { _logToClientHandler = handler; } exports.registerLogToClient = registerLogToClient; function ensureTraillingSlash(path) { return path.replace(/\/$|$/, '/'); } exports.ensureTraillingSlash = ensureTraillingSlash;