azurajs 3.0.2 → 3.0.3
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/dist/core/index.d.mts +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/{Logger-iEQNVVSc.d.mts → logger/index.d.mts} +2 -1
- package/dist/{Logger-iEQNVVSc.d.ts → logger/index.d.ts} +2 -1
- package/dist/logger/index.js +123 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/index.mjs +120 -0
- package/dist/logger/index.mjs.map +1 -0
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/package.json +11 -2
- package/src/logger/index.ts +1 -0
package/dist/core/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Server } from 'node:http';
|
|
2
2
|
import { H as HttpMethod, R as RouteHandler, M as MiddlewareHandler, b as RouteMatch, E as ErrorHandler } from '../common.type-BhGCNyEm.mjs';
|
|
3
|
-
import {
|
|
3
|
+
import { Logger } from '../logger/index.mjs';
|
|
4
4
|
import { A as AzuraConfig } from '../config.type-4K-xcMSy.mjs';
|
|
5
5
|
import { g as PluginHandler } from '../plugin.type-BNooWhKa.mjs';
|
|
6
6
|
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Server } from 'node:http';
|
|
2
2
|
import { H as HttpMethod, R as RouteHandler, M as MiddlewareHandler, b as RouteMatch, E as ErrorHandler } from '../common.type-BhGCNyEm.js';
|
|
3
|
-
import {
|
|
3
|
+
import { Logger } from '../logger/index.js';
|
|
4
4
|
import { A as AzuraConfig } from '../config.type-s3ImgfM_.js';
|
|
5
5
|
import { g as PluginHandler } from '../plugin.type-D4HHceYz.js';
|
|
6
6
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { AzuraServer, Router } from './core/index.mjs';
|
|
2
2
|
export { Body, Controller, Cookies, Delete, Get, Head, Headers, Ip, Meta, NextFunc, Options, Param, Patch, Post, Put, Query, Req, Res, Session, UseMiddleware, applyDecorators } from './decorators/index.mjs';
|
|
3
3
|
export { CORSPlugin, CircuitBreakerPlugin, CompressionPlugin, ETagPlugin, HealthCheckPlugin, HelmetPlugin, JWTPayload, JWTPlugin, MultipartPlugin, ProxyPlugin, RateLimitPlugin, RequestIdPlugin, SSEClient, SSEManager, SSEPlugin, SessionPlugin, StaticPlugin, TimeoutPlugin, UploadedFile, signJWT, verifyJWT } from './plugins/index.mjs';
|
|
4
|
-
export {
|
|
4
|
+
export { Logger } from './logger/index.mjs';
|
|
5
5
|
export { DTOValidator, ExternalSchema, HttpError, Schema, SchemaValidationResult, SchemaValidator, ValidationError, ValidationResult, clearCookieHeader, parseBody, parseCookies, parseQueryString, parseUrl, resolveIp, serializeCookie } from './utils/index.mjs';
|
|
6
6
|
export { ConfigModule } from './config/index.mjs';
|
|
7
7
|
export { LoggingMiddleware } from './middleware/index.mjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { AzuraServer, Router } from './core/index.js';
|
|
2
2
|
export { Body, Controller, Cookies, Delete, Get, Head, Headers, Ip, Meta, NextFunc, Options, Param, Patch, Post, Put, Query, Req, Res, Session, UseMiddleware, applyDecorators } from './decorators/index.js';
|
|
3
3
|
export { CORSPlugin, CircuitBreakerPlugin, CompressionPlugin, ETagPlugin, HealthCheckPlugin, HelmetPlugin, JWTPayload, JWTPlugin, MultipartPlugin, ProxyPlugin, RateLimitPlugin, RequestIdPlugin, SSEClient, SSEManager, SSEPlugin, SessionPlugin, StaticPlugin, TimeoutPlugin, UploadedFile, signJWT, verifyJWT } from './plugins/index.js';
|
|
4
|
-
export {
|
|
4
|
+
export { Logger } from './logger/index.js';
|
|
5
5
|
export { DTOValidator, ExternalSchema, HttpError, Schema, SchemaValidationResult, SchemaValidator, ValidationError, ValidationResult, clearCookieHeader, parseBody, parseCookies, parseQueryString, parseUrl, resolveIp, serializeCookie } from './utils/index.js';
|
|
6
6
|
export { ConfigModule } from './config/index.js';
|
|
7
7
|
export { LoggingMiddleware } from './middleware/index.js';
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/utils/Logger.ts
|
|
4
|
+
var LEVEL_PRIORITY = {
|
|
5
|
+
debug: 0,
|
|
6
|
+
info: 1,
|
|
7
|
+
warn: 2,
|
|
8
|
+
error: 3,
|
|
9
|
+
silent: 4
|
|
10
|
+
};
|
|
11
|
+
var COLORS = {
|
|
12
|
+
reset: "\x1B[0m",
|
|
13
|
+
bold: "\x1B[1m",
|
|
14
|
+
dim: "\x1B[2m",
|
|
15
|
+
red: "\x1B[31m",
|
|
16
|
+
green: "\x1B[32m",
|
|
17
|
+
yellow: "\x1B[33m",
|
|
18
|
+
blue: "\x1B[34m",
|
|
19
|
+
magenta: "\x1B[35m",
|
|
20
|
+
cyan: "\x1B[36m",
|
|
21
|
+
white: "\x1B[37m",
|
|
22
|
+
gray: "\x1B[90m"};
|
|
23
|
+
var METHOD_COLORS = {
|
|
24
|
+
GET: COLORS.green,
|
|
25
|
+
POST: COLORS.blue,
|
|
26
|
+
PUT: COLORS.yellow,
|
|
27
|
+
DELETE: COLORS.red,
|
|
28
|
+
PATCH: COLORS.magenta,
|
|
29
|
+
HEAD: COLORS.cyan,
|
|
30
|
+
OPTIONS: COLORS.gray
|
|
31
|
+
};
|
|
32
|
+
function statusColor(code) {
|
|
33
|
+
if (code < 200) return COLORS.gray;
|
|
34
|
+
if (code < 300) return COLORS.green;
|
|
35
|
+
if (code < 400) return COLORS.cyan;
|
|
36
|
+
if (code < 500) return COLORS.yellow;
|
|
37
|
+
return COLORS.red;
|
|
38
|
+
}
|
|
39
|
+
function formatDuration(ns) {
|
|
40
|
+
const us = Number(ns) / 1e3;
|
|
41
|
+
if (us < 1e3) return `${us.toFixed(0)}\xB5s`;
|
|
42
|
+
const ms = us / 1e3;
|
|
43
|
+
if (ms < 1e3) return `${ms.toFixed(1)}ms`;
|
|
44
|
+
return `${(ms / 1e3).toFixed(2)}s`;
|
|
45
|
+
}
|
|
46
|
+
var Logger = class {
|
|
47
|
+
level;
|
|
48
|
+
useColors;
|
|
49
|
+
showTimestamp;
|
|
50
|
+
prefix;
|
|
51
|
+
constructor(options = {}) {
|
|
52
|
+
this.level = options.level ?? "info";
|
|
53
|
+
this.useColors = options.colors ?? process.stdout.isTTY !== false;
|
|
54
|
+
this.showTimestamp = options.timestamp ?? true;
|
|
55
|
+
this.prefix = options.prefix ?? "azura";
|
|
56
|
+
}
|
|
57
|
+
shouldLog(level) {
|
|
58
|
+
return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.level];
|
|
59
|
+
}
|
|
60
|
+
timestamp() {
|
|
61
|
+
if (!this.showTimestamp) return "";
|
|
62
|
+
const now = /* @__PURE__ */ new Date();
|
|
63
|
+
return `${COLORS.gray}${now.toISOString().slice(11, 23)}${COLORS.reset} `;
|
|
64
|
+
}
|
|
65
|
+
tag(level) {
|
|
66
|
+
if (!this.useColors) return `[${level.toUpperCase()}]`;
|
|
67
|
+
const colorMap = {
|
|
68
|
+
debug: COLORS.gray,
|
|
69
|
+
info: COLORS.blue,
|
|
70
|
+
warn: COLORS.yellow,
|
|
71
|
+
error: COLORS.red
|
|
72
|
+
};
|
|
73
|
+
return `${colorMap[level] ?? ""}[${level.toUpperCase()}]${COLORS.reset}`;
|
|
74
|
+
}
|
|
75
|
+
debug(message, ...args) {
|
|
76
|
+
if (!this.shouldLog("debug")) return;
|
|
77
|
+
console.debug(`${this.timestamp()}${this.tag("debug")} ${message}`, ...args);
|
|
78
|
+
}
|
|
79
|
+
info(message, ...args) {
|
|
80
|
+
if (!this.shouldLog("info")) return;
|
|
81
|
+
console.info(`${this.timestamp()}${this.tag("info")} ${message}`, ...args);
|
|
82
|
+
}
|
|
83
|
+
warn(message, ...args) {
|
|
84
|
+
if (!this.shouldLog("warn")) return;
|
|
85
|
+
console.warn(`${this.timestamp()}${this.tag("warn")} ${message}`, ...args);
|
|
86
|
+
}
|
|
87
|
+
error(message, ...args) {
|
|
88
|
+
if (!this.shouldLog("error")) return;
|
|
89
|
+
console.error(`${this.timestamp()}${this.tag("error")} ${message}`, ...args);
|
|
90
|
+
}
|
|
91
|
+
request(method, path, statusCode, duration) {
|
|
92
|
+
if (!this.shouldLog("info")) return;
|
|
93
|
+
const mc = this.useColors ? METHOD_COLORS[method] ?? COLORS.white : "";
|
|
94
|
+
const sc = this.useColors ? statusColor(statusCode) : "";
|
|
95
|
+
const r = this.useColors ? COLORS.reset : "";
|
|
96
|
+
const dur = formatDuration(duration);
|
|
97
|
+
console.info(
|
|
98
|
+
`${this.timestamp()}${mc}${method.padEnd(7)}${r} ${path} ${sc}${statusCode}${r} ${COLORS.dim}${dur}${r}`
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
banner(port, host) {
|
|
102
|
+
if (!this.shouldLog("info")) return;
|
|
103
|
+
const c = this.useColors;
|
|
104
|
+
const lines = [
|
|
105
|
+
"",
|
|
106
|
+
`${c ? COLORS.bold + COLORS.cyan : ""} \u26A1 AzuraJS v3.0.0${c ? COLORS.reset : ""}`,
|
|
107
|
+
"",
|
|
108
|
+
`${c ? COLORS.green : ""} \u279C Local: ${c ? COLORS.bold : ""}http://${host}:${port}/${c ? COLORS.reset : ""}`,
|
|
109
|
+
`${c ? COLORS.dim : ""} \u279C Press Ctrl+C to stop${c ? COLORS.reset : ""}`,
|
|
110
|
+
""
|
|
111
|
+
];
|
|
112
|
+
console.info(lines.join("\n"));
|
|
113
|
+
}
|
|
114
|
+
setLevel(level) {
|
|
115
|
+
this.level = level;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
var logger = new Logger();
|
|
119
|
+
|
|
120
|
+
exports.Logger = Logger;
|
|
121
|
+
exports.logger = logger;
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
123
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\r\n\r\nconst LEVEL_PRIORITY: Record<LogLevel, number> = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n silent: 4,\r\n};\r\n\r\nconst COLORS = {\r\n reset: \"\\x1b[0m\",\r\n bold: \"\\x1b[1m\",\r\n dim: \"\\x1b[2m\",\r\n red: \"\\x1b[31m\",\r\n green: \"\\x1b[32m\",\r\n yellow: \"\\x1b[33m\",\r\n blue: \"\\x1b[34m\",\r\n magenta: \"\\x1b[35m\",\r\n cyan: \"\\x1b[36m\",\r\n white: \"\\x1b[37m\",\r\n gray: \"\\x1b[90m\",\r\n bgRed: \"\\x1b[41m\",\r\n bgGreen: \"\\x1b[42m\",\r\n bgYellow: \"\\x1b[43m\",\r\n bgBlue: \"\\x1b[44m\",\r\n} as const;\r\n\r\nconst METHOD_COLORS: Record<string, string> = {\r\n GET: COLORS.green,\r\n POST: COLORS.blue,\r\n PUT: COLORS.yellow,\r\n DELETE: COLORS.red,\r\n PATCH: COLORS.magenta,\r\n HEAD: COLORS.cyan,\r\n OPTIONS: COLORS.gray,\r\n};\r\n\r\nfunction statusColor(code: number): string {\r\n if (code < 200) return COLORS.gray;\r\n if (code < 300) return COLORS.green;\r\n if (code < 400) return COLORS.cyan;\r\n if (code < 500) return COLORS.yellow;\r\n return COLORS.red;\r\n}\r\n\r\nfunction formatDuration(ns: bigint): string {\r\n const us = Number(ns) / 1_000;\r\n if (us < 1_000) return `${us.toFixed(0)}µs`;\r\n const ms = us / 1_000;\r\n if (ms < 1_000) return `${ms.toFixed(1)}ms`;\r\n return `${(ms / 1_000).toFixed(2)}s`;\r\n}\r\n\r\nexport class Logger {\r\n private level: LogLevel;\r\n private useColors: boolean;\r\n private showTimestamp: boolean;\r\n private prefix: string;\r\n\r\n constructor(options: {\r\n level?: LogLevel;\r\n colors?: boolean;\r\n timestamp?: boolean;\r\n prefix?: string;\r\n } = {}) {\r\n this.level = options.level ?? \"info\";\r\n this.useColors = options.colors ?? process.stdout.isTTY !== false;\r\n this.showTimestamp = options.timestamp ?? true;\r\n this.prefix = options.prefix ?? \"azura\";\r\n }\r\n\r\n private shouldLog(level: LogLevel): boolean {\r\n return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.level];\r\n }\r\n\r\n private timestamp(): string {\r\n if (!this.showTimestamp) return \"\";\r\n const now = new Date();\r\n return `${COLORS.gray}${now.toISOString().slice(11, 23)}${COLORS.reset} `;\r\n }\r\n\r\n private tag(level: LogLevel): string {\r\n if (!this.useColors) return `[${level.toUpperCase()}]`;\r\n const colorMap: Record<string, string> = {\r\n debug: COLORS.gray,\r\n info: COLORS.blue,\r\n warn: COLORS.yellow,\r\n error: COLORS.red,\r\n };\r\n return `${colorMap[level] ?? \"\"}[${level.toUpperCase()}]${COLORS.reset}`;\r\n }\r\n\r\n debug(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"debug\")) return;\r\n console.debug(`${this.timestamp()}${this.tag(\"debug\")} ${message}`, ...args);\r\n }\r\n\r\n info(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"info\")) return;\r\n console.info(`${this.timestamp()}${this.tag(\"info\")} ${message}`, ...args);\r\n }\r\n\r\n warn(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"warn\")) return;\r\n console.warn(`${this.timestamp()}${this.tag(\"warn\")} ${message}`, ...args);\r\n }\r\n\r\n error(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"error\")) return;\r\n console.error(`${this.timestamp()}${this.tag(\"error\")} ${message}`, ...args);\r\n }\r\n\r\n request(method: string, path: string, statusCode: number, duration: bigint): void {\r\n if (!this.shouldLog(\"info\")) return;\r\n const mc = this.useColors ? METHOD_COLORS[method] ?? COLORS.white : \"\";\r\n const sc = this.useColors ? statusColor(statusCode) : \"\";\r\n const r = this.useColors ? COLORS.reset : \"\";\r\n const dur = formatDuration(duration);\r\n console.info(\r\n `${this.timestamp()}${mc}${method.padEnd(7)}${r} ${path} ${sc}${statusCode}${r} ${COLORS.dim}${dur}${r}`,\r\n );\r\n }\r\n\r\n banner(port: number, host: string): void {\r\n if (!this.shouldLog(\"info\")) return;\r\n const c = this.useColors;\r\n const lines = [\r\n \"\",\r\n `${c ? COLORS.bold + COLORS.cyan : \"\"} ⚡ AzuraJS v3.0.0${c ? COLORS.reset : \"\"}`,\r\n \"\",\r\n `${c ? COLORS.green : \"\"} ➜ Local: ${c ? COLORS.bold : \"\"}http://${host}:${port}/${c ? COLORS.reset : \"\"}`,\r\n `${c ? COLORS.dim : \"\"} ➜ Press Ctrl+C to stop${c ? COLORS.reset : \"\"}`,\r\n \"\",\r\n ];\r\n console.info(lines.join(\"\\n\"));\r\n }\r\n\r\n setLevel(level: LogLevel): void {\r\n this.level = level;\r\n }\r\n}\r\n\r\nexport const logger = new Logger();\r\n"]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// src/utils/Logger.ts
|
|
2
|
+
var LEVEL_PRIORITY = {
|
|
3
|
+
debug: 0,
|
|
4
|
+
info: 1,
|
|
5
|
+
warn: 2,
|
|
6
|
+
error: 3,
|
|
7
|
+
silent: 4
|
|
8
|
+
};
|
|
9
|
+
var COLORS = {
|
|
10
|
+
reset: "\x1B[0m",
|
|
11
|
+
bold: "\x1B[1m",
|
|
12
|
+
dim: "\x1B[2m",
|
|
13
|
+
red: "\x1B[31m",
|
|
14
|
+
green: "\x1B[32m",
|
|
15
|
+
yellow: "\x1B[33m",
|
|
16
|
+
blue: "\x1B[34m",
|
|
17
|
+
magenta: "\x1B[35m",
|
|
18
|
+
cyan: "\x1B[36m",
|
|
19
|
+
white: "\x1B[37m",
|
|
20
|
+
gray: "\x1B[90m"};
|
|
21
|
+
var METHOD_COLORS = {
|
|
22
|
+
GET: COLORS.green,
|
|
23
|
+
POST: COLORS.blue,
|
|
24
|
+
PUT: COLORS.yellow,
|
|
25
|
+
DELETE: COLORS.red,
|
|
26
|
+
PATCH: COLORS.magenta,
|
|
27
|
+
HEAD: COLORS.cyan,
|
|
28
|
+
OPTIONS: COLORS.gray
|
|
29
|
+
};
|
|
30
|
+
function statusColor(code) {
|
|
31
|
+
if (code < 200) return COLORS.gray;
|
|
32
|
+
if (code < 300) return COLORS.green;
|
|
33
|
+
if (code < 400) return COLORS.cyan;
|
|
34
|
+
if (code < 500) return COLORS.yellow;
|
|
35
|
+
return COLORS.red;
|
|
36
|
+
}
|
|
37
|
+
function formatDuration(ns) {
|
|
38
|
+
const us = Number(ns) / 1e3;
|
|
39
|
+
if (us < 1e3) return `${us.toFixed(0)}\xB5s`;
|
|
40
|
+
const ms = us / 1e3;
|
|
41
|
+
if (ms < 1e3) return `${ms.toFixed(1)}ms`;
|
|
42
|
+
return `${(ms / 1e3).toFixed(2)}s`;
|
|
43
|
+
}
|
|
44
|
+
var Logger = class {
|
|
45
|
+
level;
|
|
46
|
+
useColors;
|
|
47
|
+
showTimestamp;
|
|
48
|
+
prefix;
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.level = options.level ?? "info";
|
|
51
|
+
this.useColors = options.colors ?? process.stdout.isTTY !== false;
|
|
52
|
+
this.showTimestamp = options.timestamp ?? true;
|
|
53
|
+
this.prefix = options.prefix ?? "azura";
|
|
54
|
+
}
|
|
55
|
+
shouldLog(level) {
|
|
56
|
+
return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.level];
|
|
57
|
+
}
|
|
58
|
+
timestamp() {
|
|
59
|
+
if (!this.showTimestamp) return "";
|
|
60
|
+
const now = /* @__PURE__ */ new Date();
|
|
61
|
+
return `${COLORS.gray}${now.toISOString().slice(11, 23)}${COLORS.reset} `;
|
|
62
|
+
}
|
|
63
|
+
tag(level) {
|
|
64
|
+
if (!this.useColors) return `[${level.toUpperCase()}]`;
|
|
65
|
+
const colorMap = {
|
|
66
|
+
debug: COLORS.gray,
|
|
67
|
+
info: COLORS.blue,
|
|
68
|
+
warn: COLORS.yellow,
|
|
69
|
+
error: COLORS.red
|
|
70
|
+
};
|
|
71
|
+
return `${colorMap[level] ?? ""}[${level.toUpperCase()}]${COLORS.reset}`;
|
|
72
|
+
}
|
|
73
|
+
debug(message, ...args) {
|
|
74
|
+
if (!this.shouldLog("debug")) return;
|
|
75
|
+
console.debug(`${this.timestamp()}${this.tag("debug")} ${message}`, ...args);
|
|
76
|
+
}
|
|
77
|
+
info(message, ...args) {
|
|
78
|
+
if (!this.shouldLog("info")) return;
|
|
79
|
+
console.info(`${this.timestamp()}${this.tag("info")} ${message}`, ...args);
|
|
80
|
+
}
|
|
81
|
+
warn(message, ...args) {
|
|
82
|
+
if (!this.shouldLog("warn")) return;
|
|
83
|
+
console.warn(`${this.timestamp()}${this.tag("warn")} ${message}`, ...args);
|
|
84
|
+
}
|
|
85
|
+
error(message, ...args) {
|
|
86
|
+
if (!this.shouldLog("error")) return;
|
|
87
|
+
console.error(`${this.timestamp()}${this.tag("error")} ${message}`, ...args);
|
|
88
|
+
}
|
|
89
|
+
request(method, path, statusCode, duration) {
|
|
90
|
+
if (!this.shouldLog("info")) return;
|
|
91
|
+
const mc = this.useColors ? METHOD_COLORS[method] ?? COLORS.white : "";
|
|
92
|
+
const sc = this.useColors ? statusColor(statusCode) : "";
|
|
93
|
+
const r = this.useColors ? COLORS.reset : "";
|
|
94
|
+
const dur = formatDuration(duration);
|
|
95
|
+
console.info(
|
|
96
|
+
`${this.timestamp()}${mc}${method.padEnd(7)}${r} ${path} ${sc}${statusCode}${r} ${COLORS.dim}${dur}${r}`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
banner(port, host) {
|
|
100
|
+
if (!this.shouldLog("info")) return;
|
|
101
|
+
const c = this.useColors;
|
|
102
|
+
const lines = [
|
|
103
|
+
"",
|
|
104
|
+
`${c ? COLORS.bold + COLORS.cyan : ""} \u26A1 AzuraJS v3.0.0${c ? COLORS.reset : ""}`,
|
|
105
|
+
"",
|
|
106
|
+
`${c ? COLORS.green : ""} \u279C Local: ${c ? COLORS.bold : ""}http://${host}:${port}/${c ? COLORS.reset : ""}`,
|
|
107
|
+
`${c ? COLORS.dim : ""} \u279C Press Ctrl+C to stop${c ? COLORS.reset : ""}`,
|
|
108
|
+
""
|
|
109
|
+
];
|
|
110
|
+
console.info(lines.join("\n"));
|
|
111
|
+
}
|
|
112
|
+
setLevel(level) {
|
|
113
|
+
this.level = level;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
var logger = new Logger();
|
|
117
|
+
|
|
118
|
+
export { Logger, logger };
|
|
119
|
+
//# sourceMappingURL=index.mjs.map
|
|
120
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\r\n\r\nconst LEVEL_PRIORITY: Record<LogLevel, number> = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n silent: 4,\r\n};\r\n\r\nconst COLORS = {\r\n reset: \"\\x1b[0m\",\r\n bold: \"\\x1b[1m\",\r\n dim: \"\\x1b[2m\",\r\n red: \"\\x1b[31m\",\r\n green: \"\\x1b[32m\",\r\n yellow: \"\\x1b[33m\",\r\n blue: \"\\x1b[34m\",\r\n magenta: \"\\x1b[35m\",\r\n cyan: \"\\x1b[36m\",\r\n white: \"\\x1b[37m\",\r\n gray: \"\\x1b[90m\",\r\n bgRed: \"\\x1b[41m\",\r\n bgGreen: \"\\x1b[42m\",\r\n bgYellow: \"\\x1b[43m\",\r\n bgBlue: \"\\x1b[44m\",\r\n} as const;\r\n\r\nconst METHOD_COLORS: Record<string, string> = {\r\n GET: COLORS.green,\r\n POST: COLORS.blue,\r\n PUT: COLORS.yellow,\r\n DELETE: COLORS.red,\r\n PATCH: COLORS.magenta,\r\n HEAD: COLORS.cyan,\r\n OPTIONS: COLORS.gray,\r\n};\r\n\r\nfunction statusColor(code: number): string {\r\n if (code < 200) return COLORS.gray;\r\n if (code < 300) return COLORS.green;\r\n if (code < 400) return COLORS.cyan;\r\n if (code < 500) return COLORS.yellow;\r\n return COLORS.red;\r\n}\r\n\r\nfunction formatDuration(ns: bigint): string {\r\n const us = Number(ns) / 1_000;\r\n if (us < 1_000) return `${us.toFixed(0)}µs`;\r\n const ms = us / 1_000;\r\n if (ms < 1_000) return `${ms.toFixed(1)}ms`;\r\n return `${(ms / 1_000).toFixed(2)}s`;\r\n}\r\n\r\nexport class Logger {\r\n private level: LogLevel;\r\n private useColors: boolean;\r\n private showTimestamp: boolean;\r\n private prefix: string;\r\n\r\n constructor(options: {\r\n level?: LogLevel;\r\n colors?: boolean;\r\n timestamp?: boolean;\r\n prefix?: string;\r\n } = {}) {\r\n this.level = options.level ?? \"info\";\r\n this.useColors = options.colors ?? process.stdout.isTTY !== false;\r\n this.showTimestamp = options.timestamp ?? true;\r\n this.prefix = options.prefix ?? \"azura\";\r\n }\r\n\r\n private shouldLog(level: LogLevel): boolean {\r\n return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.level];\r\n }\r\n\r\n private timestamp(): string {\r\n if (!this.showTimestamp) return \"\";\r\n const now = new Date();\r\n return `${COLORS.gray}${now.toISOString().slice(11, 23)}${COLORS.reset} `;\r\n }\r\n\r\n private tag(level: LogLevel): string {\r\n if (!this.useColors) return `[${level.toUpperCase()}]`;\r\n const colorMap: Record<string, string> = {\r\n debug: COLORS.gray,\r\n info: COLORS.blue,\r\n warn: COLORS.yellow,\r\n error: COLORS.red,\r\n };\r\n return `${colorMap[level] ?? \"\"}[${level.toUpperCase()}]${COLORS.reset}`;\r\n }\r\n\r\n debug(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"debug\")) return;\r\n console.debug(`${this.timestamp()}${this.tag(\"debug\")} ${message}`, ...args);\r\n }\r\n\r\n info(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"info\")) return;\r\n console.info(`${this.timestamp()}${this.tag(\"info\")} ${message}`, ...args);\r\n }\r\n\r\n warn(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"warn\")) return;\r\n console.warn(`${this.timestamp()}${this.tag(\"warn\")} ${message}`, ...args);\r\n }\r\n\r\n error(message: string, ...args: any[]): void {\r\n if (!this.shouldLog(\"error\")) return;\r\n console.error(`${this.timestamp()}${this.tag(\"error\")} ${message}`, ...args);\r\n }\r\n\r\n request(method: string, path: string, statusCode: number, duration: bigint): void {\r\n if (!this.shouldLog(\"info\")) return;\r\n const mc = this.useColors ? METHOD_COLORS[method] ?? COLORS.white : \"\";\r\n const sc = this.useColors ? statusColor(statusCode) : \"\";\r\n const r = this.useColors ? COLORS.reset : \"\";\r\n const dur = formatDuration(duration);\r\n console.info(\r\n `${this.timestamp()}${mc}${method.padEnd(7)}${r} ${path} ${sc}${statusCode}${r} ${COLORS.dim}${dur}${r}`,\r\n );\r\n }\r\n\r\n banner(port: number, host: string): void {\r\n if (!this.shouldLog(\"info\")) return;\r\n const c = this.useColors;\r\n const lines = [\r\n \"\",\r\n `${c ? COLORS.bold + COLORS.cyan : \"\"} ⚡ AzuraJS v3.0.0${c ? COLORS.reset : \"\"}`,\r\n \"\",\r\n `${c ? COLORS.green : \"\"} ➜ Local: ${c ? COLORS.bold : \"\"}http://${host}:${port}/${c ? COLORS.reset : \"\"}`,\r\n `${c ? COLORS.dim : \"\"} ➜ Press Ctrl+C to stop${c ? COLORS.reset : \"\"}`,\r\n \"\",\r\n ];\r\n console.info(lines.join(\"\\n\"));\r\n }\r\n\r\n setLevel(level: LogLevel): void {\r\n this.level = level;\r\n }\r\n}\r\n\r\nexport const logger = new Logger();\r\n"]}
|
package/dist/utils/index.d.mts
CHANGED
package/dist/utils/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "azurajs",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Ultra-fast TypeScript-first web framework for Node.js and Bun with decorator-based routing, zero dependencies, and built-in plugin system",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -70,6 +70,14 @@
|
|
|
70
70
|
"require": "./dist/middleware/index.js",
|
|
71
71
|
"default": "./dist/middleware/index.mjs"
|
|
72
72
|
},
|
|
73
|
+
"./logger": {
|
|
74
|
+
"types": "./dist/logger/index.d.ts",
|
|
75
|
+
"bun": "./dist/logger/index.mjs",
|
|
76
|
+
"import": "./dist/logger/index.mjs",
|
|
77
|
+
"module": "./dist/logger/index.mjs",
|
|
78
|
+
"require": "./dist/logger/index.js",
|
|
79
|
+
"default": "./dist/logger/index.mjs"
|
|
80
|
+
},
|
|
73
81
|
"./package.json": "./package.json"
|
|
74
82
|
},
|
|
75
83
|
"typesVersions": {
|
|
@@ -80,7 +88,8 @@
|
|
|
80
88
|
"types": ["./dist/types/index.d.ts"],
|
|
81
89
|
"utils": ["./dist/utils/index.d.ts"],
|
|
82
90
|
"config": ["./dist/config/index.d.ts"],
|
|
83
|
-
"middleware": ["./dist/middleware/index.d.ts"]
|
|
91
|
+
"middleware": ["./dist/middleware/index.d.ts"],
|
|
92
|
+
"logger": ["./dist/logger/index.d.ts"]
|
|
84
93
|
}
|
|
85
94
|
},
|
|
86
95
|
"files": [
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Logger, logger } from "../utils/Logger.js";
|