From af7c2d8f4c2ef56672f0407012c6319b8af2f986 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 17 Jan 2019 19:21:11 +0530 Subject: [PATCH] feat(log): make log package --- bin/log.js | 107 ------------------------------------- packages/log/index.ts | 89 ++++++++++++++++++++++++++++++ packages/log/package.json | 8 +++ packages/log/tsconfig.json | 3 ++ 4 files changed, 100 insertions(+), 107 deletions(-) delete mode 100644 bin/log.js create mode 100644 packages/log/index.ts create mode 100644 packages/log/package.json create mode 100644 packages/log/tsconfig.json diff --git a/bin/log.js b/bin/log.js deleted file mode 100644 index 8c2b76cebaa..00000000000 --- a/bin/log.js +++ /dev/null @@ -1,107 +0,0 @@ -const colors = { - Reset: "\x1b[0m", - Bright: "\x1b[1m", - Dim: "\x1b[2m", - Underscore: "\x1b[4m", - Blink: "\x1b[5m", - Reverse: "\x1b[7m", - Hidden: "\x1b[8m", - FgBlack: "\x1b[30m", - FgRed: "\x1b[31m", - FgGreen: "\x1b[32m", - FgYellow: "\x1b[33m", - FgBlue: "\x1b[34m", - FgMagenta: "\x1b[35m", - FgCyan: "\x1b[36m", - FgWhite: "\x1b[37m", - BgBlack: "\x1b[40m", - BgRed: "\x1b[41m", - BgGreen: "\x1b[42m", - BgYellow: "\x1b[43m", - BgBlue: "\x1b[44m", - BgMagenta: "\x1b[45m", - BgCyan: "\x1b[46m", - BgWhite: "\x1b[47m", -}; - -class Logger { - constructor(title) { - this.title = title; - process.stdout.write(`${colors.Bright}${title} - ${colors.FgCyan}webpack-cli ${colors.Reset}\n`); - } - - log(message) { - const messages = message.split("\n"); - if (messages.length === 1) { - process.stdout.write(`${colors.Bright} • ${colors.Reset}${messages[0]} \n`); - } else { - process.stdout.write(`${colors.Bright} • ${colors.Reset}${messages[0]} \n`); - messages.splice(0,1); - messages.forEach(message => { - process.stdout.write(` ${message}\n`); - }); - } - } - - info(message) { - const messages = message.split("\n"); - if (messages.length === 1) { - process.stdout.write(`${colors.Bright}${colors.FgCyan} i ${messages[0]} ${colors.Reset}\n`); - } else { - process.stdout.write(`${colors.Bright}${colors.FgCyan} i ${messages[0]} \n`); - messages.splice(0,1); - messages.forEach(message => { - process.stdout.write(` ${message}\n`); - }); - process.stdout.write(`${colors.Reset}`); - } - } - - error(message) { - const messages = message.split("\n"); - if (messages.length === 1) { - process.stderr.write(`${colors.Bright}${colors.FgRed} \u2717 ${messages[0]} ${colors.Reset}\n`); - } else { - process.stderr.write(`${colors.Bright}${colors.FgRed} \u2717 ${messages[0]} \n`); - messages.splice(0,1); - messages.forEach(message => { - process.stderr.write(` ${message}\n`); - }); - process.stderr.write(`${colors.Reset}`); - } - } - - warn(message) { - const messages = message.split("\n"); - if (messages.length === 1) { - process.stdout.write(`${colors.FgYellow}${colors.Bright} ⚠ ${messages[0]} ${colors.Reset}\n`); - } else { - process.stdout.write(`${colors.FgYellow}${colors.Bright} ⚠ ${messages[0]} \n`); - messages.splice(0,1); - messages.forEach(message => { - process.stdout.write(` ${message}\n`); - }); - process.stdout.write(`${colors.Reset}`); - } - } - - success(message) { - const messages = message.split("\n"); - if (messages.length === 1) { - process.stdout.write(`${colors.FgGreen}${colors.Bright} \u2713 ${colors.FgGreen}${messages[0]} ${colors.Reset}\n`); - } else { - process.stdout.write(`${colors.FgGreen}${colors.Bright} \u2713 ${colors.FgGreen}${messages[0]} \n`); - messages.splice(0,1); - messages.forEach(message => { - process.stdout.write(` ${message}\n`); - }); - process.stdout.write(`${colors.Reset}`); - } - } - - clrscr() { - process.stdout.write("\x1Bc"); - process.stdout.write(`${colors.Bright}${this.title} - ${colors.FgCyan}webpack-cli ${colors.Reset}\n`); - } -} -module.exports = Logger; diff --git a/packages/log/index.ts b/packages/log/index.ts new file mode 100644 index 00000000000..0c58fab9eed --- /dev/null +++ b/packages/log/index.ts @@ -0,0 +1,89 @@ +import chalk from "chalk"; + +const log = (message: string) => process.stdout.write(message); +const logError = (message: string) => process.stderr.write(message); + +export class Logger { + public name: string; + + constructor(input: { name?: string, start?: boolean} | string) { + if (input) { + if (typeof input === "string") { + this.name = input; + } else { + if (!input.name || input.name === "") { + throw new Error("Name of the task was not passed"); + } + this.name = input.name; + if (input.start) { + this.start(); + } + } + } else { + throw new Error("Name of the task was not passed"); + } + } + + public log(message: string) { + message = this.build(message); + message = ` ${chalk.bold("•")} ${message}`; + log(message); + } + + public success(message: string) { + message = this.build(message); + message = chalk.green(` ${chalk.bold("\u2713")} ${message}`); + log(message); + } + + public error(message: string) { + message = this.build(message); + message = chalk.red(` ${chalk.bold("\u2717")} ${message}`); + logError(message); + } + + public warn(message: string) { + message = this.build(message); + message = chalk.yellowBright(` ${chalk.bold("⚠")} ${message}`); + log(message); + } + + public info(message: string) { + message = this.build(message); + message = chalk.cyan(` ${chalk.bold("i")} ${message}`); + log(message); + } + + public clrscr() { + log("\x1Bc"); + this.start(); + } + + public custom(symbol: string, message: string) { + if (symbol.length !== 1) { + throw new Error("Only single character can be passed to custom"); + } else { + message = this.build(message); + message = ` ${chalk.bold(symbol)} ${message}`; + log(message); + } + } + + private build(message: string): string { + const lines = message.split("\n"); + if (lines.length === 1) { + return lines[0]; + } + message = lines[0] + "\n"; + + for (let i = 1; i < lines.length; i++) { + message += ` ${lines[i]}\n`; + } + return message; + } + + private start() { + const message: string = `${ chalk.bold(this.name) } - ${chalk.cyan("webpack-cli")}` + "\n"; + log(message); + } +} diff --git a/packages/log/package.json b/packages/log/package.json new file mode 100644 index 00000000000..bdb3c2bda3d --- /dev/null +++ b/packages/log/package.json @@ -0,0 +1,8 @@ +{ + "name": "@webpack-cli/log", + "version": "0.0.1", + "description": "custom task based logger", + "main": "index.js", + "author": "", + "license": "MIT" +} diff --git a/packages/log/tsconfig.json b/packages/log/tsconfig.json new file mode 100644 index 00000000000..b198a752fda --- /dev/null +++ b/packages/log/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.packages.json" +}