rslog 1.3.1 → 2.0.0

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
@@ -17,7 +17,7 @@ A tiny, intuitive, type-friendly logger for Node.js.
17
17
 
18
18
  ## Preview
19
19
 
20
- ![Artboard](https://github.com/rspack-contrib/rslog/assets/7237365/9677ecb3-eff1-4c0e-9392-9b61b248fe5c)
20
+ ![Artboard](https://github.com/rstackjs/rslog/assets/7237365/9677ecb3-eff1-4c0e-9392-9b61b248fe5c)
21
21
 
22
22
  ## Install
23
23
 
@@ -37,13 +37,7 @@ bun add rslog
37
37
 
38
38
  ## Usage
39
39
 
40
- - Require:
41
-
42
40
  ```js
43
- // with require
44
- const { logger } = require('rslog');
45
-
46
- // with import
47
41
  import { logger } from 'rslog';
48
42
  ```
49
43
 
@@ -148,4 +142,4 @@ The color implementation of Rslog are modified from [alexeyraspopov/picocolors](
148
142
 
149
143
  ## License
150
144
 
151
- Rslog is [MIT licensed](https://github.com/rspack-contrib/rslog/blob/main/LICENSE).
145
+ Rslog is [MIT licensed](https://github.com/rstackjs/rslog/blob/main/LICENSE).
package/dist/color.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type ColorFn = (input: string | number | null | undefined) => string;
1
+ export type ColorFn = (text: string | number) => string;
2
2
  export declare const bold: ColorFn;
3
3
  export declare const red: ColorFn;
4
4
  export declare const green: ColorFn;
package/dist/index.js CHANGED
@@ -1,6 +1,15 @@
1
+ import { styleText } from "node:util";
1
2
  import node_process from "node:process";
2
3
  import node_os from "node:os";
3
4
  import node_tty from "node:tty";
5
+ const createStyler = (style)=>(text)=>styleText(style, String(text));
6
+ const bold = createStyler('bold');
7
+ const red = createStyler('red');
8
+ const green = createStyler('green');
9
+ const yellow = createStyler('yellow');
10
+ const magenta = createStyler('magenta');
11
+ const cyan = createStyler('cyan');
12
+ const gray = createStyler('gray');
4
13
  function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : node_process.argv) {
5
14
  const prefix = flag.startsWith('-') ? '' : 1 === flag.length ? '-' : '--';
6
15
  const position = argv.indexOf(prefix + flag);
@@ -103,27 +112,10 @@ const supportsColor = {
103
112
  };
104
113
  const supports_color = supportsColor;
105
114
  const colorLevel = supports_color.stdout ? supports_color.stdout.level : 0;
106
- let errorStackRegExp = /at\s.*:\d+:\d+[\s\)]*$/;
107
- let anonymousErrorStackRegExp = /at\s.*\(<anonymous>\)$/;
108
- let isErrorStackMessage = (message)=>errorStackRegExp.test(message) || anonymousErrorStackRegExp.test(message);
109
- let formatter = (open, close, replace = open)=>colorLevel >= 2 ? (input)=>{
110
- let string = '' + input;
111
- let index = string.indexOf(close, open.length);
112
- return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
113
- } : String;
114
- let replaceClose = (string, close, replace, index)=>{
115
- let start = string.substring(0, index) + replace;
116
- let end = string.substring(index + close.length);
117
- let nextIndex = end.indexOf(close);
118
- return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
119
- };
120
- const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m');
121
- const red = formatter('\x1b[31m', '\x1b[39m');
122
- const green = formatter('\x1b[32m', '\x1b[39m');
123
- const yellow = formatter('\x1b[33m', '\x1b[39m');
124
- const magenta = formatter('\x1b[35m', '\x1b[39m');
125
- const cyan = formatter('\x1b[36m', '\x1b[39m');
126
- const gray = formatter('\x1b[90m', '\x1b[39m');
115
+ let errorStackRegExp = /at [^\r\n]{0,200}:\d+:\d+[\s\)]*$/;
116
+ let anonymousErrorStackRegExp = /at [^\r\n]{0,200}\(<anonymous>\)$/;
117
+ let indexErrorStackRegExp = /at [^\r\n]{0,200}\(index\s\d+\)$/;
118
+ let isErrorStackMessage = (message)=>errorStackRegExp.test(message) || anonymousErrorStackRegExp.test(message) || indexErrorStackRegExp.test(message);
127
119
  let startColor = [
128
120
  189,
129
121
  255,
package/package.json CHANGED
@@ -1,20 +1,18 @@
1
1
  {
2
2
  "name": "rslog",
3
- "version": "1.3.1",
3
+ "version": "2.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
- "url": "https://github.com/rspack-contrib/rslog.git"
6
+ "url": "https://github.com/rstackjs/rslog.git"
7
7
  },
8
8
  "license": "MIT",
9
9
  "type": "module",
10
10
  "exports": {
11
11
  ".": {
12
12
  "types": "./dist/index.d.ts",
13
- "import": "./dist/index.js",
14
- "require": "./dist/index.cjs"
13
+ "default": "./dist/index.js"
15
14
  }
16
15
  },
17
- "main": "./dist/index.cjs",
18
16
  "types": "./dist/index.d.ts",
19
17
  "files": [
20
18
  "dist"
@@ -28,15 +26,19 @@
28
26
  "test": "rstest"
29
27
  },
30
28
  "devDependencies": {
31
- "@rslib/core": "^0.17.0",
32
- "@rstest/core": "^0.6.1",
33
- "@types/node": "^24.9.2",
34
- "prettier": "~3.6.2",
29
+ "@rslib/core": "^0.18.2",
30
+ "@rstest/core": "^0.6.8",
31
+ "@types/node": "^24.10.1",
32
+ "path-serializer": "^0.5.1",
33
+ "prettier": "~3.7.3",
35
34
  "strip-ansi": "^7.1.2",
36
35
  "supports-color": "^10.2.2",
37
36
  "typescript": "~5.9.3"
38
37
  },
39
- "packageManager": "pnpm@10.20.0",
38
+ "packageManager": "pnpm@10.24.0",
39
+ "engines": {
40
+ "node": "^20.19.0 || >=22.12.0"
41
+ },
40
42
  "publishConfig": {
41
43
  "access": "public",
42
44
  "registry": "https://registry.npmjs.org/"
package/dist/index.cjs DELETED
@@ -1,299 +0,0 @@
1
- "use strict";
2
- var __webpack_require__ = {};
3
- (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
9
- };
10
- })();
11
- (()=>{
12
- __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
- })();
14
- (()=>{
15
- __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
- value: 'Module'
18
- });
19
- Object.defineProperty(exports1, '__esModule', {
20
- value: true
21
- });
22
- };
23
- })();
24
- var __webpack_exports__ = {};
25
- __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- createLogger: ()=>createLogger,
28
- logger: ()=>src_logger
29
- });
30
- const external_node_process_namespaceObject = require("node:process");
31
- const external_node_os_namespaceObject = require("node:os");
32
- const external_node_tty_namespaceObject = require("node:tty");
33
- function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : external_node_process_namespaceObject.argv) {
34
- const prefix = flag.startsWith('-') ? '' : 1 === flag.length ? '-' : '--';
35
- const position = argv.indexOf(prefix + flag);
36
- const terminatorPosition = argv.indexOf('--');
37
- return -1 !== position && (-1 === terminatorPosition || position < terminatorPosition);
38
- }
39
- const { env } = external_node_process_namespaceObject;
40
- let flagForceColor;
41
- if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false') || hasFlag('color=never')) flagForceColor = 0;
42
- else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true') || hasFlag('color=always')) flagForceColor = 1;
43
- function envForceColor() {
44
- if (!('FORCE_COLOR' in env)) return;
45
- if ('true' === env.FORCE_COLOR) return 1;
46
- if ('false' === env.FORCE_COLOR) return 0;
47
- if (0 === env.FORCE_COLOR.length) return 1;
48
- const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
49
- if (![
50
- 0,
51
- 1,
52
- 2,
53
- 3
54
- ].includes(level)) return;
55
- return level;
56
- }
57
- function translateLevel(level) {
58
- if (0 === level) return false;
59
- return {
60
- level,
61
- hasBasic: true,
62
- has256: level >= 2,
63
- has16m: level >= 3
64
- };
65
- }
66
- function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
67
- const noFlagForceColor = envForceColor();
68
- if (void 0 !== noFlagForceColor) flagForceColor = noFlagForceColor;
69
- const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
70
- if (0 === forceColor) return 0;
71
- if (sniffFlags) {
72
- if (hasFlag('color=16m') || hasFlag('color=full') || hasFlag('color=truecolor')) return 3;
73
- if (hasFlag('color=256')) return 2;
74
- }
75
- if ('TF_BUILD' in env && 'AGENT_NAME' in env) return 1;
76
- if (haveStream && !streamIsTTY && void 0 === forceColor) return 0;
77
- const min = forceColor || 0;
78
- if ('dumb' === env.TERM) return min;
79
- if ('win32' === external_node_process_namespaceObject.platform) {
80
- const osRelease = external_node_os_namespaceObject.release().split('.');
81
- if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
82
- return 1;
83
- }
84
- if ('CI' in env) {
85
- if ([
86
- 'GITHUB_ACTIONS',
87
- 'GITEA_ACTIONS',
88
- 'CIRCLECI'
89
- ].some((key)=>key in env)) return 3;
90
- if ([
91
- 'TRAVIS',
92
- 'APPVEYOR',
93
- 'GITLAB_CI',
94
- 'BUILDKITE',
95
- 'DRONE'
96
- ].some((sign)=>sign in env) || 'codeship' === env.CI_NAME) return 1;
97
- return min;
98
- }
99
- if ('TEAMCITY_VERSION' in env) return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
100
- if ('truecolor' === env.COLORTERM) return 3;
101
- if ('xterm-kitty' === env.TERM) return 3;
102
- if ('xterm-ghostty' === env.TERM) return 3;
103
- if ('wezterm' === env.TERM) return 3;
104
- if ('TERM_PROGRAM' in env) {
105
- const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
106
- switch(env.TERM_PROGRAM){
107
- case 'iTerm.app':
108
- return version >= 3 ? 3 : 2;
109
- case 'Apple_Terminal':
110
- return 2;
111
- }
112
- }
113
- if (/-256(color)?$/i.test(env.TERM)) return 2;
114
- if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) return 1;
115
- if ('COLORTERM' in env) return 1;
116
- return min;
117
- }
118
- function createSupportsColor(stream, options = {}) {
119
- const level = _supportsColor(stream, {
120
- streamIsTTY: stream && stream.isTTY,
121
- ...options
122
- });
123
- return translateLevel(level);
124
- }
125
- const supportsColor = {
126
- stdout: createSupportsColor({
127
- isTTY: external_node_tty_namespaceObject.isatty(1)
128
- }),
129
- stderr: createSupportsColor({
130
- isTTY: external_node_tty_namespaceObject.isatty(2)
131
- })
132
- };
133
- const supports_color = supportsColor;
134
- const colorLevel = supports_color.stdout ? supports_color.stdout.level : 0;
135
- let errorStackRegExp = /at\s.*:\d+:\d+[\s\)]*$/;
136
- let anonymousErrorStackRegExp = /at\s.*\(<anonymous>\)$/;
137
- let isErrorStackMessage = (message)=>errorStackRegExp.test(message) || anonymousErrorStackRegExp.test(message);
138
- let formatter = (open, close, replace = open)=>colorLevel >= 2 ? (input)=>{
139
- let string = '' + input;
140
- let index = string.indexOf(close, open.length);
141
- return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
142
- } : String;
143
- let replaceClose = (string, close, replace, index)=>{
144
- let start = string.substring(0, index) + replace;
145
- let end = string.substring(index + close.length);
146
- let nextIndex = end.indexOf(close);
147
- return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
148
- };
149
- const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m');
150
- const red = formatter('\x1b[31m', '\x1b[39m');
151
- const green = formatter('\x1b[32m', '\x1b[39m');
152
- const yellow = formatter('\x1b[33m', '\x1b[39m');
153
- const magenta = formatter('\x1b[35m', '\x1b[39m');
154
- const cyan = formatter('\x1b[36m', '\x1b[39m');
155
- const gray = formatter('\x1b[90m', '\x1b[39m');
156
- let startColor = [
157
- 189,
158
- 255,
159
- 243
160
- ];
161
- let endColor = [
162
- 74,
163
- 194,
164
- 154
165
- ];
166
- let isWord = (char)=>!/[\s\n]/.test(char);
167
- let gradient = (message)=>{
168
- if (colorLevel < 3) return 2 === colorLevel ? bold(cyan(message)) : message;
169
- let chars = [
170
- ...message
171
- ];
172
- let steps = chars.filter(isWord).length;
173
- let r = startColor[0];
174
- let g = startColor[1];
175
- let b = startColor[2];
176
- let rStep = (endColor[0] - r) / steps;
177
- let gStep = (endColor[1] - g) / steps;
178
- let bStep = (endColor[2] - b) / steps;
179
- let output = '';
180
- for (let char of chars){
181
- if (isWord(char)) {
182
- r += rStep;
183
- g += gStep;
184
- b += bStep;
185
- }
186
- output += `\x1b[38;2;${Math.round(r)};${Math.round(g)};${Math.round(b)}m${char}\x1b[39m`;
187
- }
188
- return bold(output);
189
- };
190
- let LOG_LEVEL = {
191
- silent: -1,
192
- error: 0,
193
- warn: 1,
194
- info: 2,
195
- log: 2,
196
- verbose: 3
197
- };
198
- let LOG_TYPES = {
199
- error: {
200
- label: 'error',
201
- level: 'error',
202
- color: red
203
- },
204
- warn: {
205
- label: 'warn',
206
- level: 'warn',
207
- color: yellow
208
- },
209
- info: {
210
- label: 'info',
211
- level: 'info',
212
- color: cyan
213
- },
214
- start: {
215
- label: 'start',
216
- level: 'info',
217
- color: cyan
218
- },
219
- ready: {
220
- label: 'ready',
221
- level: 'info',
222
- color: green
223
- },
224
- success: {
225
- label: 'success',
226
- level: 'info',
227
- color: green
228
- },
229
- log: {
230
- level: 'info'
231
- },
232
- debug: {
233
- label: 'debug',
234
- level: 'verbose',
235
- color: magenta
236
- }
237
- };
238
- const normalizeErrorMessage = (err)=>{
239
- if (err.stack) {
240
- let [name, ...rest] = err.stack.split('\n');
241
- if (name.startsWith('Error: ')) name = name.slice(7);
242
- return `${name}\n${gray(rest.join('\n'))}`;
243
- }
244
- return err.message;
245
- };
246
- let createLogger = (options = {})=>{
247
- let maxLevel = options.level || 'info';
248
- let log = (type, message, ...args)=>{
249
- let logType = LOG_TYPES[type];
250
- const { level } = logType;
251
- if (LOG_LEVEL[level] > LOG_LEVEL[maxLevel]) return;
252
- if (null == message) return console.log();
253
- let label = '';
254
- let text = '';
255
- if ('label' in logType) {
256
- label = (logType.label || '').padEnd(7);
257
- label = bold(logType.color ? logType.color(label) : label);
258
- }
259
- if (message instanceof Error) {
260
- text += normalizeErrorMessage(message);
261
- const { cause } = message;
262
- if (cause) {
263
- text += yellow('\n [cause]: ');
264
- text += cause instanceof Error ? normalizeErrorMessage(cause) : String(cause);
265
- }
266
- } else if ('error' === level && 'string' == typeof message) {
267
- let lines = message.split('\n');
268
- text = lines.map((line)=>isErrorStackMessage(line) ? gray(line) : line).join('\n');
269
- } else text = `${message}`;
270
- const method = 'error' === level || 'warn' === level ? level : 'log';
271
- console[method](label.length ? `${label} ${text}` : text, ...args);
272
- };
273
- let logger = {
274
- greet: (message)=>log('log', gradient(message))
275
- };
276
- Object.keys(LOG_TYPES).forEach((key)=>{
277
- logger[key] = (...args)=>log(key, ...args);
278
- });
279
- Object.defineProperty(logger, 'level', {
280
- get: ()=>maxLevel,
281
- set (val) {
282
- maxLevel = val;
283
- }
284
- });
285
- logger.override = (customLogger)=>{
286
- Object.assign(logger, customLogger);
287
- };
288
- return logger;
289
- };
290
- let src_logger = createLogger();
291
- exports.createLogger = __webpack_exports__.createLogger;
292
- exports.logger = __webpack_exports__.logger;
293
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
294
- "createLogger",
295
- "logger"
296
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
297
- Object.defineProperty(exports, '__esModule', {
298
- value: true
299
- });