devink 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,13 @@
1
- <div align="center">
2
- <img src="media/Devink.png" alt="Devink Logo" width="400" />
3
- <h1>devink</h1>
4
- <p><strong>Fast, lightweight, professional terminal logger. Zero dependencies.</strong></p>
5
- </div>
1
+ <h1 align="center">
2
+ <br>
3
+ <br>
4
+ <img width="320" src="media/Devink.png" alt="devink">
5
+ <br>
6
+ <br>
7
+ <br>
8
+ </h1>
9
+
10
+ > Fast, lightweight, professional terminal logger. Zero dependencies.
6
11
 
7
12
  [![npm version](https://badgen.net/npm/v/devink)](https://npmjs.com/package/devink)
8
13
  [![license](https://badgen.net/github/license/user/devink)](https://github.com/user/devink/blob/main/LICENSE)
package/dist/index.js CHANGED
@@ -1,141 +1 @@
1
- 'use strict';
2
-
3
- var __defProp = Object.defineProperty;
4
- var __export = (target, all) => {
5
- for (var name in all)
6
- __defProp(target, name, { get: all[name], enumerable: true });
7
- };
8
-
9
- // source/utils/ansi.ts
10
- var ansi_exports = {};
11
- __export(ansi_exports, {
12
- blue: () => blue,
13
- bold: () => bold,
14
- cyan: () => cyan,
15
- dim: () => dim,
16
- format: () => format,
17
- gray: () => gray,
18
- green: () => green,
19
- isColorSupported: () => isColorSupported,
20
- italic: () => italic,
21
- magenta: () => magenta,
22
- red: () => red,
23
- reset: () => reset,
24
- underline: () => underline,
25
- white: () => white,
26
- yellow: () => yellow
27
- });
28
- var isColorSupported = !process.env.NO_COLOR && (process.env.FORCE_COLOR || process.stdout?.isTTY || process.env.TERM === "xterm-256color");
29
- var format = (code, text) => {
30
- if (!isColorSupported) return text;
31
- return `\x1B[${code}m${text}\x1B[0m`;
32
- };
33
- var reset = (text) => format(0, text);
34
- var red = (text) => format(31, text);
35
- var green = (text) => format(32, text);
36
- var yellow = (text) => format(33, text);
37
- var blue = (text) => format(34, text);
38
- var magenta = (text) => format(35, text);
39
- var cyan = (text) => format(36, text);
40
- var white = (text) => format(37, text);
41
- var gray = (text) => format(90, text);
42
- var bold = (text) => format(1, text);
43
- var dim = (text) => format(2, text);
44
- var italic = (text) => format(3, text);
45
- var underline = (text) => format(4, text);
46
-
47
- // source/theme.ts
48
- var defaultTheme = {
49
- success: (msg) => green(msg),
50
- error: (msg) => red(bold(msg)),
51
- warn: (msg) => yellow(msg),
52
- info: (msg) => blue(msg),
53
- prefix: {
54
- success: green("\u2714"),
55
- error: red("\u2716"),
56
- warn: yellow("\u26A0"),
57
- info: blue("\u2139")
58
- }
59
- };
60
-
61
- // source/logger.ts
62
- var defaultTransport = {
63
- success: console.log,
64
- error: console.error,
65
- warn: console.warn,
66
- info: console.info
67
- };
68
- var Logger = class {
69
- theme;
70
- timestamps;
71
- colors;
72
- transport;
73
- constructor(options = {}) {
74
- this.theme = {
75
- ...defaultTheme,
76
- ...options.theme,
77
- prefix: {
78
- ...defaultTheme.prefix,
79
- ...options.theme?.prefix
80
- }
81
- };
82
- this.timestamps = options.timestamps ?? false;
83
- this.colors = options.colors ?? true;
84
- this.transport = { ...defaultTransport, ...options.transport };
85
- }
86
- getTimestamp() {
87
- if (!this.timestamps) return "";
88
- const now = /* @__PURE__ */ new Date();
89
- const time = now.toISOString().split("T")[1]?.split(".")[0];
90
- return gray(`[${time}] `);
91
- }
92
- formatMessage(message) {
93
- return message.map((m) => {
94
- if (typeof m === "string") return m;
95
- try {
96
- return JSON.stringify(m, null, 2);
97
- } catch {
98
- return "[Unserializable Object]";
99
- }
100
- }).join(" ");
101
- }
102
- stripAnsi(text) {
103
- return text.replace(/\x1b\[[0-9;]*m/g, "");
104
- }
105
- output(level, formattedOutput) {
106
- const finalOutput = this.colors ? formattedOutput : this.stripAnsi(formattedOutput);
107
- this.transport[level](finalOutput);
108
- }
109
- success(...message) {
110
- const msg = this.formatMessage(message);
111
- this.output(
112
- "success",
113
- `${this.getTimestamp()}${this.theme.prefix.success} ${this.theme.success(msg)}`
114
- );
115
- }
116
- error(...message) {
117
- const msg = this.formatMessage(message);
118
- this.output(
119
- "error",
120
- `${this.getTimestamp()}${this.theme.prefix.error} ${this.theme.error(msg)}`
121
- );
122
- }
123
- warn(...message) {
124
- const msg = this.formatMessage(message);
125
- this.output("warn", `${this.getTimestamp()}${this.theme.prefix.warn} ${this.theme.warn(msg)}`);
126
- }
127
- info(...message) {
128
- const msg = this.formatMessage(message);
129
- this.output("info", `${this.getTimestamp()}${this.theme.prefix.info} ${this.theme.info(msg)}`);
130
- }
131
- };
132
- var createLogger = (options) => {
133
- return new Logger(options);
134
- };
135
-
136
- exports.Logger = Logger;
137
- exports.ansi = ansi_exports;
138
- exports.createLogger = createLogger;
139
- exports.defaultTheme = defaultTheme;
140
- //# sourceMappingURL=index.js.map
141
- //# sourceMappingURL=index.js.map
1
+ 'use strict';var l=Object.defineProperty;var x=(t,r)=>{for(var s in r)l(t,s,{get:r[s],enumerable:true});};var h={};x(h,{blue:()=>g,bold:()=>m,cyan:()=>d,dim:()=>b,format:()=>e,gray:()=>c,green:()=>o,isColorSupported:()=>u,italic:()=>$,magenta:()=>T,red:()=>n,reset:()=>w,underline:()=>y,white:()=>v,yellow:()=>i});var u=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||process.stdout?.isTTY||process.env.TERM==="xterm-256color"),e=(t,r)=>u?`\x1B[${t}m${r}\x1B[0m`:r,w=t=>e(0,t),n=t=>e(31,t),o=t=>e(32,t),i=t=>e(33,t),g=t=>e(34,t),T=t=>e(35,t),d=t=>e(36,t),v=t=>e(37,t),c=t=>e(90,t),m=t=>e(1,t),b=t=>e(2,t),$=t=>e(3,t),y=t=>e(4,t);var p={success:t=>o(t),error:t=>n(m(t)),warn:t=>i(t),info:t=>g(t),prefix:{success:o("\u2714"),error:n("\u2716"),warn:i("\u26A0"),info:g("\u2139")}};var O={success:console.log,error:console.error,warn:console.warn,info:console.info},a=class{theme;timestamps;colors;transport;constructor(r={}){this.theme={...p,...r.theme,prefix:{...p.prefix,...r.theme?.prefix}},this.timestamps=r.timestamps??false,this.colors=r.colors??true,this.transport={...O,...r.transport};}getTimestamp(){if(!this.timestamps)return "";let s=new Date().toISOString().split("T")[1]?.split(".")[0];return c(`[${s}] `)}formatMessage(r){return r.map(s=>{if(typeof s=="string")return s;try{return JSON.stringify(s,null,2)}catch{return "[Unserializable Object]"}}).join(" ")}stripAnsi(r){return r.replace(/\x1b\[[0-9;]*m/g,"")}output(r,s){let f=this.colors?s:this.stripAnsi(s);this.transport[r](f);}success(...r){let s=this.formatMessage(r);this.output("success",`${this.getTimestamp()}${this.theme.prefix.success} ${this.theme.success(s)}`);}error(...r){let s=this.formatMessage(r);this.output("error",`${this.getTimestamp()}${this.theme.prefix.error} ${this.theme.error(s)}`);}warn(...r){let s=this.formatMessage(r);this.output("warn",`${this.getTimestamp()}${this.theme.prefix.warn} ${this.theme.warn(s)}`);}info(...r){let s=this.formatMessage(r);this.output("info",`${this.getTimestamp()}${this.theme.prefix.info} ${this.theme.info(s)}`);}},k=t=>new a(t);exports.Logger=a;exports.ansi=h;exports.createLogger=k;exports.defaultTheme=p;
package/dist/index.mjs CHANGED
@@ -1,136 +1 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
- // source/utils/ansi.ts
8
- var ansi_exports = {};
9
- __export(ansi_exports, {
10
- blue: () => blue,
11
- bold: () => bold,
12
- cyan: () => cyan,
13
- dim: () => dim,
14
- format: () => format,
15
- gray: () => gray,
16
- green: () => green,
17
- isColorSupported: () => isColorSupported,
18
- italic: () => italic,
19
- magenta: () => magenta,
20
- red: () => red,
21
- reset: () => reset,
22
- underline: () => underline,
23
- white: () => white,
24
- yellow: () => yellow
25
- });
26
- var isColorSupported = !process.env.NO_COLOR && (process.env.FORCE_COLOR || process.stdout?.isTTY || process.env.TERM === "xterm-256color");
27
- var format = (code, text) => {
28
- if (!isColorSupported) return text;
29
- return `\x1B[${code}m${text}\x1B[0m`;
30
- };
31
- var reset = (text) => format(0, text);
32
- var red = (text) => format(31, text);
33
- var green = (text) => format(32, text);
34
- var yellow = (text) => format(33, text);
35
- var blue = (text) => format(34, text);
36
- var magenta = (text) => format(35, text);
37
- var cyan = (text) => format(36, text);
38
- var white = (text) => format(37, text);
39
- var gray = (text) => format(90, text);
40
- var bold = (text) => format(1, text);
41
- var dim = (text) => format(2, text);
42
- var italic = (text) => format(3, text);
43
- var underline = (text) => format(4, text);
44
-
45
- // source/theme.ts
46
- var defaultTheme = {
47
- success: (msg) => green(msg),
48
- error: (msg) => red(bold(msg)),
49
- warn: (msg) => yellow(msg),
50
- info: (msg) => blue(msg),
51
- prefix: {
52
- success: green("\u2714"),
53
- error: red("\u2716"),
54
- warn: yellow("\u26A0"),
55
- info: blue("\u2139")
56
- }
57
- };
58
-
59
- // source/logger.ts
60
- var defaultTransport = {
61
- success: console.log,
62
- error: console.error,
63
- warn: console.warn,
64
- info: console.info
65
- };
66
- var Logger = class {
67
- theme;
68
- timestamps;
69
- colors;
70
- transport;
71
- constructor(options = {}) {
72
- this.theme = {
73
- ...defaultTheme,
74
- ...options.theme,
75
- prefix: {
76
- ...defaultTheme.prefix,
77
- ...options.theme?.prefix
78
- }
79
- };
80
- this.timestamps = options.timestamps ?? false;
81
- this.colors = options.colors ?? true;
82
- this.transport = { ...defaultTransport, ...options.transport };
83
- }
84
- getTimestamp() {
85
- if (!this.timestamps) return "";
86
- const now = /* @__PURE__ */ new Date();
87
- const time = now.toISOString().split("T")[1]?.split(".")[0];
88
- return gray(`[${time}] `);
89
- }
90
- formatMessage(message) {
91
- return message.map((m) => {
92
- if (typeof m === "string") return m;
93
- try {
94
- return JSON.stringify(m, null, 2);
95
- } catch {
96
- return "[Unserializable Object]";
97
- }
98
- }).join(" ");
99
- }
100
- stripAnsi(text) {
101
- return text.replace(/\x1b\[[0-9;]*m/g, "");
102
- }
103
- output(level, formattedOutput) {
104
- const finalOutput = this.colors ? formattedOutput : this.stripAnsi(formattedOutput);
105
- this.transport[level](finalOutput);
106
- }
107
- success(...message) {
108
- const msg = this.formatMessage(message);
109
- this.output(
110
- "success",
111
- `${this.getTimestamp()}${this.theme.prefix.success} ${this.theme.success(msg)}`
112
- );
113
- }
114
- error(...message) {
115
- const msg = this.formatMessage(message);
116
- this.output(
117
- "error",
118
- `${this.getTimestamp()}${this.theme.prefix.error} ${this.theme.error(msg)}`
119
- );
120
- }
121
- warn(...message) {
122
- const msg = this.formatMessage(message);
123
- this.output("warn", `${this.getTimestamp()}${this.theme.prefix.warn} ${this.theme.warn(msg)}`);
124
- }
125
- info(...message) {
126
- const msg = this.formatMessage(message);
127
- this.output("info", `${this.getTimestamp()}${this.theme.prefix.info} ${this.theme.info(msg)}`);
128
- }
129
- };
130
- var createLogger = (options) => {
131
- return new Logger(options);
132
- };
133
-
134
- export { Logger, ansi_exports as ansi, createLogger, defaultTheme };
135
- //# sourceMappingURL=index.mjs.map
136
- //# sourceMappingURL=index.mjs.map
1
+ var l=Object.defineProperty;var x=(t,r)=>{for(var s in r)l(t,s,{get:r[s],enumerable:true});};var h={};x(h,{blue:()=>g,bold:()=>m,cyan:()=>d,dim:()=>b,format:()=>e,gray:()=>c,green:()=>o,isColorSupported:()=>u,italic:()=>$,magenta:()=>T,red:()=>n,reset:()=>w,underline:()=>y,white:()=>v,yellow:()=>i});var u=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||process.stdout?.isTTY||process.env.TERM==="xterm-256color"),e=(t,r)=>u?`\x1B[${t}m${r}\x1B[0m`:r,w=t=>e(0,t),n=t=>e(31,t),o=t=>e(32,t),i=t=>e(33,t),g=t=>e(34,t),T=t=>e(35,t),d=t=>e(36,t),v=t=>e(37,t),c=t=>e(90,t),m=t=>e(1,t),b=t=>e(2,t),$=t=>e(3,t),y=t=>e(4,t);var p={success:t=>o(t),error:t=>n(m(t)),warn:t=>i(t),info:t=>g(t),prefix:{success:o("\u2714"),error:n("\u2716"),warn:i("\u26A0"),info:g("\u2139")}};var O={success:console.log,error:console.error,warn:console.warn,info:console.info},a=class{theme;timestamps;colors;transport;constructor(r={}){this.theme={...p,...r.theme,prefix:{...p.prefix,...r.theme?.prefix}},this.timestamps=r.timestamps??false,this.colors=r.colors??true,this.transport={...O,...r.transport};}getTimestamp(){if(!this.timestamps)return "";let s=new Date().toISOString().split("T")[1]?.split(".")[0];return c(`[${s}] `)}formatMessage(r){return r.map(s=>{if(typeof s=="string")return s;try{return JSON.stringify(s,null,2)}catch{return "[Unserializable Object]"}}).join(" ")}stripAnsi(r){return r.replace(/\x1b\[[0-9;]*m/g,"")}output(r,s){let f=this.colors?s:this.stripAnsi(s);this.transport[r](f);}success(...r){let s=this.formatMessage(r);this.output("success",`${this.getTimestamp()}${this.theme.prefix.success} ${this.theme.success(s)}`);}error(...r){let s=this.formatMessage(r);this.output("error",`${this.getTimestamp()}${this.theme.prefix.error} ${this.theme.error(s)}`);}warn(...r){let s=this.formatMessage(r);this.output("warn",`${this.getTimestamp()}${this.theme.prefix.warn} ${this.theme.warn(s)}`);}info(...r){let s=this.formatMessage(r);this.output("info",`${this.getTimestamp()}${this.theme.prefix.info} ${this.theme.info(s)}`);}},k=t=>new a(t);export{a as Logger,h as ansi,k as createLogger,p as defaultTheme};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devink",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Fast, lightweight, professional logger built with TypeScript. No dependencies.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -13,8 +13,7 @@
13
13
  }
14
14
  },
15
15
  "files": [
16
- "dist",
17
- "media"
16
+ "dist"
18
17
  ],
19
18
  "engines": {
20
19
  "node": ">=18.0.0"
@@ -40,8 +39,9 @@
40
39
  "structured-logger",
41
40
  "zero-dependency"
42
41
  ],
43
- "author": "",
42
+ "author": "harrymate22",
44
43
  "license": "MIT",
44
+ "repository": "harrymate22/devink",
45
45
  "devDependencies": {
46
46
  "@eslint/js": "^9.0.0",
47
47
  "@types/node": "^20.0.0",
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../source/utils/ansi.ts","../source/theme.ts","../source/logger.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const isColorSupported =\r\n !process.env.NO_COLOR &&\r\n (process.env.FORCE_COLOR || process.stdout?.isTTY || process.env.TERM === 'xterm-256color');\r\n\r\nexport const format = (code: number, text: string): string => {\r\n if (!isColorSupported) return text;\r\n return `\\x1b[${code}m${text}\\x1b[0m`;\r\n};\r\n\r\nexport const reset = (text: string): string => format(0, text);\r\nexport const red = (text: string): string => format(31, text);\r\nexport const green = (text: string): string => format(32, text);\r\nexport const yellow = (text: string): string => format(33, text);\r\nexport const blue = (text: string): string => format(34, text);\r\nexport const magenta = (text: string): string => format(35, text);\r\nexport const cyan = (text: string): string => format(36, text);\r\nexport const white = (text: string): string => format(37, text);\r\nexport const gray = (text: string): string => format(90, text);\r\n\r\nexport const bold = (text: string): string => format(1, text);\r\nexport const dim = (text: string): string => format(2, text);\r\nexport const italic = (text: string): string => format(3, text);\r\nexport const underline = (text: string): string => format(4, text);\r\n","import { red, green, yellow, blue, gray, bold } from './utils/ansi.js';\r\n\r\nexport interface Theme {\r\n success: (msg: string) => string;\r\n error: (msg: string) => string;\r\n warn: (msg: string) => string;\r\n info: (msg: string) => string;\r\n prefix: {\r\n success: string;\r\n error: string;\r\n warn: string;\r\n info: string;\r\n };\r\n}\r\n\r\nexport const defaultTheme: Theme = {\r\n success: (msg: string) => green(msg),\r\n error: (msg: string) => red(bold(msg)),\r\n warn: (msg: string) => yellow(msg),\r\n info: (msg: string) => blue(msg),\r\n prefix: {\r\n success: green('✔'),\r\n error: red('✖'),\r\n warn: yellow('⚠'),\r\n info: blue('ℹ'),\r\n },\r\n};\r\n","import { defaultTheme, type Theme } from './theme.js';\r\nimport { gray } from './utils/ansi.js';\r\n\r\nexport interface Transport {\r\n success: (...args: unknown[]) => void;\r\n error: (...args: unknown[]) => void;\r\n warn: (...args: unknown[]) => void;\r\n info: (...args: unknown[]) => void;\r\n}\r\n\r\nexport interface LoggerOptions {\r\n theme?: Partial<Theme>;\r\n timestamps?: boolean;\r\n colors?: boolean;\r\n transport?: Partial<Transport>;\r\n}\r\n\r\nconst defaultTransport: Transport = {\r\n success: console.log,\r\n error: console.error,\r\n warn: console.warn,\r\n info: console.info,\r\n};\r\n\r\nexport class Logger {\r\n private theme: Theme;\r\n private timestamps: boolean;\r\n private colors: boolean;\r\n private transport: Transport;\r\n\r\n constructor(options: LoggerOptions = {}) {\r\n this.theme = {\r\n ...defaultTheme,\r\n ...options.theme,\r\n prefix: {\r\n ...defaultTheme.prefix,\r\n ...options.theme?.prefix,\r\n },\r\n };\r\n this.timestamps = options.timestamps ?? false;\r\n this.colors = options.colors ?? true;\r\n this.transport = { ...defaultTransport, ...options.transport };\r\n }\r\n\r\n private getTimestamp(): string {\r\n if (!this.timestamps) return '';\r\n const now = new Date();\r\n const time = now.toISOString().split('T')[1]?.split('.')[0];\r\n return gray(`[${time}] `);\r\n }\r\n\r\n private formatMessage(message: unknown[]): string {\r\n return message\r\n .map((m) => {\r\n if (typeof m === 'string') return m;\r\n try {\r\n return JSON.stringify(m, null, 2);\r\n } catch {\r\n return '[Unserializable Object]';\r\n }\r\n })\r\n .join(' ');\r\n }\r\n\r\n private stripAnsi(text: string): string {\r\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\r\n }\r\n\r\n private output(level: keyof Transport, formattedOutput: string): void {\r\n const finalOutput = this.colors ? formattedOutput : this.stripAnsi(formattedOutput);\r\n this.transport[level](finalOutput);\r\n }\r\n\r\n public success(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output(\r\n 'success',\r\n `${this.getTimestamp()}${this.theme.prefix.success} ${this.theme.success(msg)}`,\r\n );\r\n }\r\n\r\n public error(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output(\r\n 'error',\r\n `${this.getTimestamp()}${this.theme.prefix.error} ${this.theme.error(msg)}`,\r\n );\r\n }\r\n\r\n public warn(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output('warn', `${this.getTimestamp()}${this.theme.prefix.warn} ${this.theme.warn(msg)}`);\r\n }\r\n\r\n public info(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output('info', `${this.getTimestamp()}${this.theme.prefix.info} ${this.theme.info(msg)}`);\r\n }\r\n}\r\n\r\nexport const createLogger = (options?: LoggerOptions): Logger => {\r\n return new Logger(options);\r\n};\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../source/utils/ansi.ts","../source/theme.ts","../source/logger.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["export const isColorSupported =\r\n !process.env.NO_COLOR &&\r\n (process.env.FORCE_COLOR || process.stdout?.isTTY || process.env.TERM === 'xterm-256color');\r\n\r\nexport const format = (code: number, text: string): string => {\r\n if (!isColorSupported) return text;\r\n return `\\x1b[${code}m${text}\\x1b[0m`;\r\n};\r\n\r\nexport const reset = (text: string): string => format(0, text);\r\nexport const red = (text: string): string => format(31, text);\r\nexport const green = (text: string): string => format(32, text);\r\nexport const yellow = (text: string): string => format(33, text);\r\nexport const blue = (text: string): string => format(34, text);\r\nexport const magenta = (text: string): string => format(35, text);\r\nexport const cyan = (text: string): string => format(36, text);\r\nexport const white = (text: string): string => format(37, text);\r\nexport const gray = (text: string): string => format(90, text);\r\n\r\nexport const bold = (text: string): string => format(1, text);\r\nexport const dim = (text: string): string => format(2, text);\r\nexport const italic = (text: string): string => format(3, text);\r\nexport const underline = (text: string): string => format(4, text);\r\n","import { red, green, yellow, blue, gray, bold } from './utils/ansi.js';\r\n\r\nexport interface Theme {\r\n success: (msg: string) => string;\r\n error: (msg: string) => string;\r\n warn: (msg: string) => string;\r\n info: (msg: string) => string;\r\n prefix: {\r\n success: string;\r\n error: string;\r\n warn: string;\r\n info: string;\r\n };\r\n}\r\n\r\nexport const defaultTheme: Theme = {\r\n success: (msg: string) => green(msg),\r\n error: (msg: string) => red(bold(msg)),\r\n warn: (msg: string) => yellow(msg),\r\n info: (msg: string) => blue(msg),\r\n prefix: {\r\n success: green('✔'),\r\n error: red('✖'),\r\n warn: yellow('⚠'),\r\n info: blue('ℹ'),\r\n },\r\n};\r\n","import { defaultTheme, type Theme } from './theme.js';\r\nimport { gray } from './utils/ansi.js';\r\n\r\nexport interface Transport {\r\n success: (...args: unknown[]) => void;\r\n error: (...args: unknown[]) => void;\r\n warn: (...args: unknown[]) => void;\r\n info: (...args: unknown[]) => void;\r\n}\r\n\r\nexport interface LoggerOptions {\r\n theme?: Partial<Theme>;\r\n timestamps?: boolean;\r\n colors?: boolean;\r\n transport?: Partial<Transport>;\r\n}\r\n\r\nconst defaultTransport: Transport = {\r\n success: console.log,\r\n error: console.error,\r\n warn: console.warn,\r\n info: console.info,\r\n};\r\n\r\nexport class Logger {\r\n private theme: Theme;\r\n private timestamps: boolean;\r\n private colors: boolean;\r\n private transport: Transport;\r\n\r\n constructor(options: LoggerOptions = {}) {\r\n this.theme = {\r\n ...defaultTheme,\r\n ...options.theme,\r\n prefix: {\r\n ...defaultTheme.prefix,\r\n ...options.theme?.prefix,\r\n },\r\n };\r\n this.timestamps = options.timestamps ?? false;\r\n this.colors = options.colors ?? true;\r\n this.transport = { ...defaultTransport, ...options.transport };\r\n }\r\n\r\n private getTimestamp(): string {\r\n if (!this.timestamps) return '';\r\n const now = new Date();\r\n const time = now.toISOString().split('T')[1]?.split('.')[0];\r\n return gray(`[${time}] `);\r\n }\r\n\r\n private formatMessage(message: unknown[]): string {\r\n return message\r\n .map((m) => {\r\n if (typeof m === 'string') return m;\r\n try {\r\n return JSON.stringify(m, null, 2);\r\n } catch {\r\n return '[Unserializable Object]';\r\n }\r\n })\r\n .join(' ');\r\n }\r\n\r\n private stripAnsi(text: string): string {\r\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\r\n }\r\n\r\n private output(level: keyof Transport, formattedOutput: string): void {\r\n const finalOutput = this.colors ? formattedOutput : this.stripAnsi(formattedOutput);\r\n this.transport[level](finalOutput);\r\n }\r\n\r\n public success(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output(\r\n 'success',\r\n `${this.getTimestamp()}${this.theme.prefix.success} ${this.theme.success(msg)}`,\r\n );\r\n }\r\n\r\n public error(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output(\r\n 'error',\r\n `${this.getTimestamp()}${this.theme.prefix.error} ${this.theme.error(msg)}`,\r\n );\r\n }\r\n\r\n public warn(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output('warn', `${this.getTimestamp()}${this.theme.prefix.warn} ${this.theme.warn(msg)}`);\r\n }\r\n\r\n public info(...message: unknown[]): void {\r\n const msg = this.formatMessage(message);\r\n this.output('info', `${this.getTimestamp()}${this.theme.prefix.info} ${this.theme.info(msg)}`);\r\n }\r\n}\r\n\r\nexport const createLogger = (options?: LoggerOptions): Logger => {\r\n return new Logger(options);\r\n};\r\n"]}
package/media/Devink.png DELETED
Binary file