diff --git a/CHANGELOGS.md b/CHANGELOGS.md new file mode 100644 index 0000000..e56d695 --- /dev/null +++ b/CHANGELOGS.md @@ -0,0 +1,26 @@ +# Changelogs + +Here are the changelogs since the first package version. + +## 2023.09.02 + +- Migrated to CHANGELOGS.md +- Now debugLevel is required and no more optional +- Added types, to choose which debug message should be logged or not +- Cleaned up some code +- Restyled README.md +- Repository moved to [Thunder Network Source](https://source.thundernetwork.org/ThunderNetworkRaD/node-cout) + +## 2023.07.08-2 + +- Fix emoji for Debug + +## 2023.07.08-1 + +- Fix info Emoji + +## 2023.07.08 + +- Exported the main class as default +- Add Stringify to all functions +- Changed the string type in the function to "any" diff --git a/package.json b/package.json index 41e36ac..854e92c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-cout", - "version": "2023.07.08-2", + "version": "2023.09.02", "description": "Standard output module for JavaScript / TypeScript", "main": "build/index.js", "types": "build/index.d.ts", @@ -10,7 +10,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/ThunderNetworkRaD/node-cout.git" + "url": "git+https://source.thundernetwork.org/ThunderNetworkRaD/node-cout.git" }, "keywords": [ "std", @@ -22,14 +22,15 @@ "typescript", "input", "cout", - "await" + "await", + "log" ], "author": "Thunder Network RaD | Killer Boss Original", "license": "Mozilla Public License 2.0", "bugs": { - "url": "https://github.com/ThunderNetworkRaD/node-cout/issues" + "url": "https://source.thundernetwork.org/ThunderNetworkRaD/node-cout/issues" }, - "homepage": "https://github.com/ThunderNetworkRaD/node-cout#readme", + "homepage": "https://source.thundernetwork.org/ThunderNetworkRaD/node-cout#readme", "dependencies": { "@thundernetworkrad/logs": "^2023.2.5-1", "@thundernetworkrad/time": "^2023.2.5-2", diff --git a/readme.md b/readme.md index 01af3b7..ec32bff 100644 --- a/readme.md +++ b/readme.md @@ -1,35 +1,57 @@ -# COUT +# COUT -This module allow you to make COUT and Debugs in NodeJS +This package allows you to use `cout` and debug levels in Node.js. -## MJS or TypeScript -```js -import cc from 'node-cout'; +## Installation -const cout = new cc(0, true, true); // debugLevel, logs enabled (file), emojis enabled +Run this in your project folder: -cout.debug('test', 0) // console.log time and the string, if the number is >= to the debugLevel -cout.log('test') -cout.error('test') -cout.warn('test') -cout.info('test') +```bash +npm install node-cout ``` -## CJS -use `await import("")` +## Usage + +Learn how to use `node-cout` here: + +### Import + ```js -const { default } = await import('node-cout'); // ti put in an async function -const cout = new default(); // from here equal to MJS example +const cc = require('node-cout'); // CommonJS + +import cc from 'node-cout'; // MJS or TypeScript + +const cout = new cc(1, { save: true, emoji: true, types: ['loading', 'uploading'] }); ``` -## Changelogs -### 2023.07.08-2 -- Fix emoji for Debug +> Parameters: +> ``` +> debugLevel: number +> options?: { +> save?: boolean +> emoji?: boolean +> types?: string[] +> } +> ``` -### 2023.07.08-1 -- Fix info Emoji +### Logging -### v2023.07.08 -- Exported the main class as default -- Add Stringify to all functions -- Changed the string type in the function to "any" +```js +cout.debug('Hello World', 1); // Sends a debug log (1 is debug level, if its higher than the one defined in the constructor, its not going to be logged.) + +cout.info('Hello World'); // Sends an info log + +cout.warn('Hello World'); // Sends a warning log + +cout.error('Hello World'); // Sends an error log + +cout.log('Hello World'); // Sends a normal log +``` + +If you want to use the `types` option, you can do it like this: + +```js +cout.debug('Hello World', 1, types); +``` + +`types` can either be a string or an array of strings, and if one of them matches with one of the types defined in the constructor, the log is going to be logged. \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 49fef39..10f6898 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,99 +1,115 @@ -import { getTime } from '@thundernetworkrad/time'; -import { log } from '@thundernetworkrad/logs'; +import { getTime } from "@thundernetworkrad/time"; +import { log } from "@thundernetworkrad/logs"; import chalk from "chalk"; export default class cout { - private debugLevel: number - private file: boolean - private emoji: boolean + private debugLevel: number + private save: boolean + private emoji: boolean + private types: string[] - /** - * - * @param debugLevel The debug level of the logging - * @param file Do you want put the logs in a file? - * @param emoji Do you want put the logs in an emoji? - */ - constructor(debugLevel?: number, file?: boolean, emoji?: boolean) { - this.debugLevel = debugLevel || 0; - this.file = file || false; - this.emoji = emoji || false; - } + /** + * + * @param debugLevel The maximum debug level preferred + * @param options.save Whetever logs are saved in a file or not + * @param options.emoji If logs are followed by an emoji + * @param options.types Types of logs that are allowed to appear + * + */ + constructor(debugLevel: number, options?: { save?: boolean, emoji?: boolean, types?: string[] }) { + const { save, emoji, types } = options || {}; + this.debugLevel = debugLevel || 0; + this.save = save || false; + this.emoji = emoji || false; + this.types = types || []; + } - private l(string: string, type: string) { - let time = `${getTime().hours}:${getTime().minutes}:${getTime().seconds}`; - type = type.toUpperCase(); + private l(string: string, type: string) { + let time = `${getTime().hours}:${getTime().minutes}:${getTime().seconds}`; + type = type.toUpperCase(); - if (getTime().hours < 10) time += " "; - if (getTime().minutes < 10) time += " "; - if (getTime().seconds < 10) time += " "; + if (getTime().hours < 10) time += " "; + if (getTime().minutes < 10) time += " "; + if (getTime().seconds < 10) time += " "; - let timec = chalk.blue(time), stringc: string = " ", typec: string, emoji: string, emojic: string; + let timec = chalk.blue(time), stringc: string = " ", typec: string, emoji: string, emojic: string; - switch (type) { - case "DEBUG": - stringc = chalk.grey(string); - typec = chalk.grey(type); - emoji = "📝"; - emojic = "📝 "; - break; - case "LOG": - stringc = chalk.white(string); - type = " " + type; - typec = chalk.white(type); - emoji = "🪵"; - emojic = "🪵 "; - break; - case "INFO": - stringc = chalk.cyan(string); - type = " " + type; - typec = chalk.cyan(type); - emoji = "ℹ️ "; - emojic = "ℹ️ "; - break; - case "WARN": - stringc = chalk.yellow(string); - type = " " + type; - typec = chalk.yellow(type); - emoji = "⚠️"; - emojic = "⚠️ "; - break; - case "ERROR": - stringc = chalk.red(string); - typec = chalk.red(type); - emoji = "❌"; - emojic = "❌ "; - break; - } - if (this.file) { - string.split("\n").forEach((line) => { - log(`${this.emoji ? emoji : ""}[${time} ${type}] | ${line}`); - }) - } + switch (type) { + case "DEBUG": + stringc = chalk.grey(string); + typec = chalk.grey(type); + emoji = "📝"; + emojic = "📝 "; + break; + case "LOG": + stringc = chalk.white(string); + type = " " + type; + typec = chalk.white(type); + emoji = "🪵"; + emojic = "🪵 "; + break; + case "INFO": + stringc = chalk.cyan(string); + type = " " + type; + typec = chalk.cyan(type); + emoji = "ℹ️ "; + emojic = "ℹ️ "; + break; + case "WARN": + stringc = chalk.yellow(string); + type = " " + type; + typec = chalk.yellow(type); + emoji = "⚠️"; + emojic = "⚠️ "; + break; + case "ERROR": + stringc = chalk.red(string); + typec = chalk.red(type); + emoji = "❌"; + emojic = "❌ "; + break; + } + if (this.save) { + string.split("\n").forEach((line) => { + log(`${this.emoji ? emoji : ""}[${time} ${type}] | ${line}`); + }) + } - stringc.split("\n").forEach((line) => { - console.log(`${this.emoji ? emojic : ""}[${timec} ${typec}] | ${line}`); - }) - } + stringc.split("\n").forEach((line) => { + console.log(`${this.emoji ? emojic : ""}[${timec} ${typec}] | ${line}`); + }) + } - debug(string: any, level?: number) { - if (this.debugLevel >= (level || 0)) { - this.l(String(string), "DEBUG") - } - } + private checkTypes(types: string | string[]) { + if (!Array.isArray(types)) types = [types]; + return types.some((type) => this.types.includes(type)); - log(string: any) { - this.l(String(string), "LOG"); - } + } - info(string: any) { - this.l(String(string), "INFO"); - } + debug(string: any, level: number, types?: string | string[]) { + if ((level || 0) <= this.debugLevel) { + if (types && !this.checkTypes(types)) return; + this.l(String(string), "DEBUG"); + } + } - warn(string: any) { - this.l(String(string), "WARN"); - } + log(string: any, types?: string | string[]) { + if (types && !this.checkTypes(types)) return; + this.l(String(string), "LOG"); + } - error(string: any) { - this.l(String(string), "ERROR"); - } + info(string: any, types?: string | string[]) { + if (types && !this.checkTypes(types)) return; + this.l(String(string), "INFO"); + } + + warn(string: any, types?: string | string[]) { + if (types && !this.checkTypes(types)) return; + this.l(String(string), "WARN"); + } + + error(string: any, types?: string | string[]) { + if (types && !this.checkTypes(types)) return; + this.l(String(string), "ERROR"); + } }