azurajs 3.0.1 → 3.0.2
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/config/index.js +128 -6
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +130 -1
- package/dist/config/index.mjs.map +1 -1
- package/dist/core/index.js +1100 -11
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +1102 -3
- package/dist/core/index.mjs.map +1 -1
- package/dist/decorators/index.js +117 -87
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/index.mjs +98 -1
- package/dist/decorators/index.mjs.map +1 -1
- package/dist/index.js +2592 -236
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2537 -9
- package/dist/index.mjs.map +1 -1
- package/dist/middleware/index.js +16 -7
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/index.mjs +17 -1
- package/dist/middleware/index.mjs.map +1 -1
- package/dist/plugins/index.js +1056 -73
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/index.mjs +1042 -1
- package/dist/plugins/index.mjs.map +1 -1
- package/dist/types/index.js +49 -12
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs +49 -2
- package/dist/types/index.mjs.map +1 -1
- package/dist/utils/index.js +551 -50
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +541 -3
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +35 -17
- package/{dist/chunk-DR254CWJ.mjs → src/config/ConfigModule.ts} +169 -132
- package/src/config/index.ts +1 -0
- package/src/core/index.ts +2 -0
- package/src/core/router.ts +284 -0
- package/{dist/chunk-EYAHUNC7.mjs → src/core/server.ts} +590 -699
- package/src/decorators/Route.ts +110 -0
- package/src/decorators/index.ts +23 -0
- package/src/index.ts +12 -0
- package/src/middleware/LoggingMiddleware.ts +20 -0
- package/src/middleware/index.ts +1 -0
- package/src/plugins/CORSPlugin.ts +56 -0
- package/src/plugins/CircuitBreakerPlugin.ts +84 -0
- package/src/plugins/CompressionPlugin.ts +80 -0
- package/src/plugins/ETagPlugin.ts +31 -0
- package/src/plugins/HealthCheckPlugin.ts +57 -0
- package/src/plugins/HelmetPlugin.ts +89 -0
- package/src/plugins/JWTPlugin.ts +132 -0
- package/src/plugins/MultipartPlugin.ts +168 -0
- package/src/plugins/ProxyPlugin.ts +89 -0
- package/src/plugins/RateLimitPlugin.ts +96 -0
- package/src/plugins/RequestIdPlugin.ts +21 -0
- package/src/plugins/SSEPlugin.ts +114 -0
- package/src/plugins/SessionPlugin.ts +98 -0
- package/src/plugins/StaticPlugin.ts +152 -0
- package/src/plugins/TimeoutPlugin.ts +33 -0
- package/src/plugins/index.ts +18 -0
- package/src/types/common.type.ts +82 -0
- package/src/types/config.type.ts +57 -0
- package/{dist/chunk-OWUGAI5V.mjs → src/types/http/status.ts} +49 -51
- package/src/types/index.ts +55 -0
- package/src/types/plugins/plugin.type.ts +170 -0
- package/src/types/reflect.d.ts +14 -0
- package/src/types/routes.type.ts +70 -0
- package/src/utils/HttpError.ts +62 -0
- package/src/utils/IpResolver.ts +30 -0
- package/src/utils/Logger.ts +144 -0
- package/src/utils/Parser.ts +182 -0
- package/src/utils/cookies/CookieManager.ts +48 -0
- package/src/utils/index.ts +9 -0
- package/{dist/chunk-UWIFSGSQ.mjs → src/utils/validators/DTOValidator.ts} +145 -141
- package/src/utils/validators/SchemaValidator.ts +45 -0
- package/dist/chunk-3UFAWS2V.js +0 -392
- package/dist/chunk-3UFAWS2V.js.map +0 -1
- package/dist/chunk-4LSFAAZW.js +0 -4
- package/dist/chunk-4LSFAAZW.js.map +0 -1
- package/dist/chunk-7NSRIVZM.js +0 -54
- package/dist/chunk-7NSRIVZM.js.map +0 -1
- package/dist/chunk-AOG6NYAM.js +0 -144
- package/dist/chunk-AOG6NYAM.js.map +0 -1
- package/dist/chunk-DR254CWJ.mjs.map +0 -1
- package/dist/chunk-EYAHUNC7.mjs.map +0 -1
- package/dist/chunk-HHDQPIJN.mjs +0 -19
- package/dist/chunk-HHDQPIJN.mjs.map +0 -1
- package/dist/chunk-HHZNAGGI.js +0 -702
- package/dist/chunk-HHZNAGGI.js.map +0 -1
- package/dist/chunk-KJM5XCAY.js +0 -21
- package/dist/chunk-KJM5XCAY.js.map +0 -1
- package/dist/chunk-NLSZKAPA.mjs +0 -1044
- package/dist/chunk-NLSZKAPA.mjs.map +0 -1
- package/dist/chunk-OWUGAI5V.mjs.map +0 -1
- package/dist/chunk-POPNQEOK.js +0 -1063
- package/dist/chunk-POPNQEOK.js.map +0 -1
- package/dist/chunk-QPRW4YU4.js +0 -134
- package/dist/chunk-QPRW4YU4.js.map +0 -1
- package/dist/chunk-REJDZUZ5.mjs +0 -382
- package/dist/chunk-REJDZUZ5.mjs.map +0 -1
- package/dist/chunk-TC6N6TJZ.mjs +0 -100
- package/dist/chunk-TC6N6TJZ.mjs.map +0 -1
- package/dist/chunk-TEUXKMXP.js +0 -122
- package/dist/chunk-TEUXKMXP.js.map +0 -1
- package/dist/chunk-UWIFSGSQ.mjs.map +0 -1
- package/dist/chunk-YPBKY4KY.mjs +0 -3
- package/dist/chunk-YPBKY4KY.mjs.map +0 -1
package/dist/chunk-3UFAWS2V.js
DELETED
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunk7NSRIVZM_js = require('./chunk-7NSRIVZM.js');
|
|
4
|
-
|
|
5
|
-
// src/utils/Logger.ts
|
|
6
|
-
var LEVEL_PRIORITY = {
|
|
7
|
-
debug: 0,
|
|
8
|
-
info: 1,
|
|
9
|
-
warn: 2,
|
|
10
|
-
error: 3,
|
|
11
|
-
silent: 4
|
|
12
|
-
};
|
|
13
|
-
var COLORS = {
|
|
14
|
-
reset: "\x1B[0m",
|
|
15
|
-
bold: "\x1B[1m",
|
|
16
|
-
dim: "\x1B[2m",
|
|
17
|
-
red: "\x1B[31m",
|
|
18
|
-
green: "\x1B[32m",
|
|
19
|
-
yellow: "\x1B[33m",
|
|
20
|
-
blue: "\x1B[34m",
|
|
21
|
-
magenta: "\x1B[35m",
|
|
22
|
-
cyan: "\x1B[36m",
|
|
23
|
-
white: "\x1B[37m",
|
|
24
|
-
gray: "\x1B[90m"};
|
|
25
|
-
var METHOD_COLORS = {
|
|
26
|
-
GET: COLORS.green,
|
|
27
|
-
POST: COLORS.blue,
|
|
28
|
-
PUT: COLORS.yellow,
|
|
29
|
-
DELETE: COLORS.red,
|
|
30
|
-
PATCH: COLORS.magenta,
|
|
31
|
-
HEAD: COLORS.cyan,
|
|
32
|
-
OPTIONS: COLORS.gray
|
|
33
|
-
};
|
|
34
|
-
function statusColor(code) {
|
|
35
|
-
if (code < 200) return COLORS.gray;
|
|
36
|
-
if (code < 300) return COLORS.green;
|
|
37
|
-
if (code < 400) return COLORS.cyan;
|
|
38
|
-
if (code < 500) return COLORS.yellow;
|
|
39
|
-
return COLORS.red;
|
|
40
|
-
}
|
|
41
|
-
function formatDuration(ns) {
|
|
42
|
-
const us = Number(ns) / 1e3;
|
|
43
|
-
if (us < 1e3) return `${us.toFixed(0)}\xB5s`;
|
|
44
|
-
const ms = us / 1e3;
|
|
45
|
-
if (ms < 1e3) return `${ms.toFixed(1)}ms`;
|
|
46
|
-
return `${(ms / 1e3).toFixed(2)}s`;
|
|
47
|
-
}
|
|
48
|
-
var Logger = class {
|
|
49
|
-
level;
|
|
50
|
-
useColors;
|
|
51
|
-
showTimestamp;
|
|
52
|
-
prefix;
|
|
53
|
-
constructor(options = {}) {
|
|
54
|
-
this.level = options.level ?? "info";
|
|
55
|
-
this.useColors = options.colors ?? process.stdout.isTTY !== false;
|
|
56
|
-
this.showTimestamp = options.timestamp ?? true;
|
|
57
|
-
this.prefix = options.prefix ?? "azura";
|
|
58
|
-
}
|
|
59
|
-
shouldLog(level) {
|
|
60
|
-
return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.level];
|
|
61
|
-
}
|
|
62
|
-
timestamp() {
|
|
63
|
-
if (!this.showTimestamp) return "";
|
|
64
|
-
const now = /* @__PURE__ */ new Date();
|
|
65
|
-
return `${COLORS.gray}${now.toISOString().slice(11, 23)}${COLORS.reset} `;
|
|
66
|
-
}
|
|
67
|
-
tag(level) {
|
|
68
|
-
if (!this.useColors) return `[${level.toUpperCase()}]`;
|
|
69
|
-
const colorMap = {
|
|
70
|
-
debug: COLORS.gray,
|
|
71
|
-
info: COLORS.blue,
|
|
72
|
-
warn: COLORS.yellow,
|
|
73
|
-
error: COLORS.red
|
|
74
|
-
};
|
|
75
|
-
return `${colorMap[level] ?? ""}[${level.toUpperCase()}]${COLORS.reset}`;
|
|
76
|
-
}
|
|
77
|
-
debug(message, ...args) {
|
|
78
|
-
if (!this.shouldLog("debug")) return;
|
|
79
|
-
console.debug(`${this.timestamp()}${this.tag("debug")} ${message}`, ...args);
|
|
80
|
-
}
|
|
81
|
-
info(message, ...args) {
|
|
82
|
-
if (!this.shouldLog("info")) return;
|
|
83
|
-
console.info(`${this.timestamp()}${this.tag("info")} ${message}`, ...args);
|
|
84
|
-
}
|
|
85
|
-
warn(message, ...args) {
|
|
86
|
-
if (!this.shouldLog("warn")) return;
|
|
87
|
-
console.warn(`${this.timestamp()}${this.tag("warn")} ${message}`, ...args);
|
|
88
|
-
}
|
|
89
|
-
error(message, ...args) {
|
|
90
|
-
if (!this.shouldLog("error")) return;
|
|
91
|
-
console.error(`${this.timestamp()}${this.tag("error")} ${message}`, ...args);
|
|
92
|
-
}
|
|
93
|
-
request(method, path, statusCode, duration) {
|
|
94
|
-
if (!this.shouldLog("info")) return;
|
|
95
|
-
const mc = this.useColors ? METHOD_COLORS[method] ?? COLORS.white : "";
|
|
96
|
-
const sc = this.useColors ? statusColor(statusCode) : "";
|
|
97
|
-
const r = this.useColors ? COLORS.reset : "";
|
|
98
|
-
const dur = formatDuration(duration);
|
|
99
|
-
console.info(
|
|
100
|
-
`${this.timestamp()}${mc}${method.padEnd(7)}${r} ${path} ${sc}${statusCode}${r} ${COLORS.dim}${dur}${r}`
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
banner(port, host) {
|
|
104
|
-
if (!this.shouldLog("info")) return;
|
|
105
|
-
const c = this.useColors;
|
|
106
|
-
const lines = [
|
|
107
|
-
"",
|
|
108
|
-
`${c ? COLORS.bold + COLORS.cyan : ""} \u26A1 AzuraJS v3.0.0${c ? COLORS.reset : ""}`,
|
|
109
|
-
"",
|
|
110
|
-
`${c ? COLORS.green : ""} \u279C Local: ${c ? COLORS.bold : ""}http://${host}:${port}/${c ? COLORS.reset : ""}`,
|
|
111
|
-
`${c ? COLORS.dim : ""} \u279C Press Ctrl+C to stop${c ? COLORS.reset : ""}`,
|
|
112
|
-
""
|
|
113
|
-
];
|
|
114
|
-
console.info(lines.join("\n"));
|
|
115
|
-
}
|
|
116
|
-
setLevel(level) {
|
|
117
|
-
this.level = level;
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
new Logger();
|
|
121
|
-
|
|
122
|
-
// src/utils/HttpError.ts
|
|
123
|
-
var HttpError = class _HttpError extends Error {
|
|
124
|
-
statusCode;
|
|
125
|
-
details;
|
|
126
|
-
isOperational;
|
|
127
|
-
constructor(statusCode, message, details) {
|
|
128
|
-
super(message ?? chunk7NSRIVZM_js.HttpStatusText[statusCode] ?? "Unknown Error");
|
|
129
|
-
this.statusCode = statusCode;
|
|
130
|
-
this.details = details;
|
|
131
|
-
this.isOperational = true;
|
|
132
|
-
Object.setPrototypeOf(this, _HttpError.prototype);
|
|
133
|
-
}
|
|
134
|
-
toJSON() {
|
|
135
|
-
const obj = {
|
|
136
|
-
error: {
|
|
137
|
-
statusCode: this.statusCode,
|
|
138
|
-
message: this.message
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
if (this.details) obj.error.details = this.details;
|
|
142
|
-
return obj;
|
|
143
|
-
}
|
|
144
|
-
static badRequest(message, details) {
|
|
145
|
-
return new _HttpError(400, message ?? "Bad Request", details);
|
|
146
|
-
}
|
|
147
|
-
static unauthorized(message) {
|
|
148
|
-
return new _HttpError(401, message ?? "Unauthorized");
|
|
149
|
-
}
|
|
150
|
-
static forbidden(message) {
|
|
151
|
-
return new _HttpError(403, message ?? "Forbidden");
|
|
152
|
-
}
|
|
153
|
-
static notFound(message) {
|
|
154
|
-
return new _HttpError(404, message ?? "Not Found");
|
|
155
|
-
}
|
|
156
|
-
static methodNotAllowed(message) {
|
|
157
|
-
return new _HttpError(405, message ?? "Method Not Allowed");
|
|
158
|
-
}
|
|
159
|
-
static conflict(message, details) {
|
|
160
|
-
return new _HttpError(409, message ?? "Conflict", details);
|
|
161
|
-
}
|
|
162
|
-
static unprocessableEntity(message, details) {
|
|
163
|
-
return new _HttpError(422, message ?? "Unprocessable Entity", details);
|
|
164
|
-
}
|
|
165
|
-
static tooManyRequests(message) {
|
|
166
|
-
return new _HttpError(429, message ?? "Too Many Requests");
|
|
167
|
-
}
|
|
168
|
-
static internal(message) {
|
|
169
|
-
return new _HttpError(500, message ?? "Internal Server Error");
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
// src/utils/Parser.ts
|
|
174
|
-
function parseQueryString(qs) {
|
|
175
|
-
const result = /* @__PURE__ */ Object.create(null);
|
|
176
|
-
if (!qs || qs.length === 0) return result;
|
|
177
|
-
let key = "";
|
|
178
|
-
let value = "";
|
|
179
|
-
let startingKey = true;
|
|
180
|
-
let i = qs.charCodeAt(0) === 63 ? 1 : 0;
|
|
181
|
-
for (; i < qs.length; i++) {
|
|
182
|
-
const ch = qs.charCodeAt(i);
|
|
183
|
-
if (ch === 61 && startingKey) {
|
|
184
|
-
startingKey = false;
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
if (ch === 38) {
|
|
188
|
-
if (key.length > 0) {
|
|
189
|
-
const decodedKey = fastDecode(key);
|
|
190
|
-
const decodedVal = fastDecode(value);
|
|
191
|
-
const existing = result[decodedKey];
|
|
192
|
-
if (existing === void 0) {
|
|
193
|
-
result[decodedKey] = decodedVal;
|
|
194
|
-
} else if (typeof existing === "string") {
|
|
195
|
-
result[decodedKey] = [existing, decodedVal];
|
|
196
|
-
} else {
|
|
197
|
-
existing.push(decodedVal);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
key = "";
|
|
201
|
-
value = "";
|
|
202
|
-
startingKey = true;
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
if (startingKey) {
|
|
206
|
-
key += qs[i];
|
|
207
|
-
} else {
|
|
208
|
-
value += qs[i];
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
if (key.length > 0) {
|
|
212
|
-
const decodedKey = fastDecode(key);
|
|
213
|
-
const decodedVal = fastDecode(value);
|
|
214
|
-
const existing = result[decodedKey];
|
|
215
|
-
if (existing === void 0) {
|
|
216
|
-
result[decodedKey] = decodedVal;
|
|
217
|
-
} else if (typeof existing === "string") {
|
|
218
|
-
result[decodedKey] = [existing, decodedVal];
|
|
219
|
-
} else {
|
|
220
|
-
existing.push(decodedVal);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return result;
|
|
224
|
-
}
|
|
225
|
-
function fastDecode(str) {
|
|
226
|
-
if (str.indexOf("%") === -1 && str.indexOf("+") === -1) return str;
|
|
227
|
-
try {
|
|
228
|
-
return decodeURIComponent(str.replace(/\+/g, " "));
|
|
229
|
-
} catch {
|
|
230
|
-
return str;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
function parseCookies(header) {
|
|
234
|
-
const cookies = /* @__PURE__ */ Object.create(null);
|
|
235
|
-
if (!header) return cookies;
|
|
236
|
-
let i = 0;
|
|
237
|
-
const len = header.length;
|
|
238
|
-
while (i < len) {
|
|
239
|
-
while (i < len && header.charCodeAt(i) === 32) i++;
|
|
240
|
-
let eqIdx = -1;
|
|
241
|
-
let semiIdx = -1;
|
|
242
|
-
for (let j = i; j < len; j++) {
|
|
243
|
-
const ch = header.charCodeAt(j);
|
|
244
|
-
if (ch === 61 && eqIdx === -1) eqIdx = j;
|
|
245
|
-
if (ch === 59) {
|
|
246
|
-
semiIdx = j;
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (eqIdx === -1) {
|
|
251
|
-
i = semiIdx === -1 ? len : semiIdx + 1;
|
|
252
|
-
continue;
|
|
253
|
-
}
|
|
254
|
-
const end = semiIdx === -1 ? len : semiIdx;
|
|
255
|
-
const name = header.slice(i, eqIdx).trim();
|
|
256
|
-
let val = header.slice(eqIdx + 1, end).trim();
|
|
257
|
-
if (val.charCodeAt(0) === 34 && val.charCodeAt(val.length - 1) === 34) {
|
|
258
|
-
val = val.slice(1, -1);
|
|
259
|
-
}
|
|
260
|
-
if (cookies[name] === void 0) {
|
|
261
|
-
cookies[name] = fastDecode(val);
|
|
262
|
-
}
|
|
263
|
-
i = end + 1;
|
|
264
|
-
}
|
|
265
|
-
return cookies;
|
|
266
|
-
}
|
|
267
|
-
var CONTENT_TYPE_JSON = "application/json";
|
|
268
|
-
var CONTENT_TYPE_FORM = "application/x-www-form-urlencoded";
|
|
269
|
-
async function parseBody(req) {
|
|
270
|
-
const contentType = req.headers["content-type"] ?? "";
|
|
271
|
-
const contentLength = req.headers["content-length"];
|
|
272
|
-
if (req.method === "GET" || req.method === "HEAD" || req.method === "OPTIONS" || contentLength !== void 0 && contentLength === "0") {
|
|
273
|
-
return void 0;
|
|
274
|
-
}
|
|
275
|
-
const chunks = [];
|
|
276
|
-
let totalSize = 0;
|
|
277
|
-
const maxSize = 10 * 1024 * 1024;
|
|
278
|
-
return new Promise((resolve, reject) => {
|
|
279
|
-
req.on("data", (chunk) => {
|
|
280
|
-
totalSize += chunk.length;
|
|
281
|
-
if (totalSize > maxSize) {
|
|
282
|
-
req.destroy();
|
|
283
|
-
reject(new Error("Request body too large"));
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
chunks.push(chunk);
|
|
287
|
-
});
|
|
288
|
-
req.on("end", () => {
|
|
289
|
-
if (chunks.length === 0) {
|
|
290
|
-
resolve(void 0);
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
const raw = Buffer.concat(chunks).toString("utf-8");
|
|
294
|
-
if (contentType.startsWith(CONTENT_TYPE_JSON)) {
|
|
295
|
-
try {
|
|
296
|
-
resolve(JSON.parse(raw));
|
|
297
|
-
} catch {
|
|
298
|
-
resolve(raw);
|
|
299
|
-
}
|
|
300
|
-
} else if (contentType.startsWith(CONTENT_TYPE_FORM)) {
|
|
301
|
-
resolve(parseQueryString(raw));
|
|
302
|
-
} else {
|
|
303
|
-
resolve(raw);
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
req.on("error", reject);
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
function parseUrl(url) {
|
|
310
|
-
let pathname = "";
|
|
311
|
-
let search = "";
|
|
312
|
-
let i = 0;
|
|
313
|
-
for (; i < url.length; i++) {
|
|
314
|
-
if (url.charCodeAt(i) === 63) {
|
|
315
|
-
pathname = url.slice(0, i);
|
|
316
|
-
search = url.slice(i);
|
|
317
|
-
return { pathname, search };
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
return { pathname: url, search: "" };
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// src/utils/IpResolver.ts
|
|
324
|
-
var PROXY_HEADERS = [
|
|
325
|
-
"x-forwarded-for",
|
|
326
|
-
"x-real-ip",
|
|
327
|
-
"cf-connecting-ip",
|
|
328
|
-
"x-client-ip",
|
|
329
|
-
"x-cluster-client-ip",
|
|
330
|
-
"fastly-client-ip",
|
|
331
|
-
"true-client-ip"
|
|
332
|
-
];
|
|
333
|
-
function resolveIp(req) {
|
|
334
|
-
for (const header of PROXY_HEADERS) {
|
|
335
|
-
const val = req.headers[header];
|
|
336
|
-
if (val) {
|
|
337
|
-
const ip = typeof val === "string" ? val.split(",")[0].trim() : val[0];
|
|
338
|
-
if (ip && ip.length > 0) return normalizeIp(ip);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
const remoteAddr = req.socket?.remoteAddress ?? "127.0.0.1";
|
|
342
|
-
return normalizeIp(remoteAddr);
|
|
343
|
-
}
|
|
344
|
-
function normalizeIp(ip) {
|
|
345
|
-
if (ip === "::1" || ip === "::ffff:127.0.0.1") return "127.0.0.1";
|
|
346
|
-
if (ip.startsWith("::ffff:")) return ip.slice(7);
|
|
347
|
-
return ip;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// src/utils/cookies/CookieManager.ts
|
|
351
|
-
function serializeCookie(name, value, options = {}) {
|
|
352
|
-
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
353
|
-
if (options.maxAge != null) {
|
|
354
|
-
cookie += `; Max-Age=${Math.floor(options.maxAge)}`;
|
|
355
|
-
}
|
|
356
|
-
if (options.expires) {
|
|
357
|
-
cookie += `; Expires=${options.expires.toUTCString()}`;
|
|
358
|
-
}
|
|
359
|
-
if (options.domain) {
|
|
360
|
-
cookie += `; Domain=${options.domain}`;
|
|
361
|
-
}
|
|
362
|
-
cookie += `; Path=${options.path ?? "/"}`;
|
|
363
|
-
if (options.secure) {
|
|
364
|
-
cookie += "; Secure";
|
|
365
|
-
}
|
|
366
|
-
if (options.httpOnly !== false) {
|
|
367
|
-
cookie += "; HttpOnly";
|
|
368
|
-
}
|
|
369
|
-
if (options.sameSite) {
|
|
370
|
-
cookie += `; SameSite=${options.sameSite}`;
|
|
371
|
-
}
|
|
372
|
-
return cookie;
|
|
373
|
-
}
|
|
374
|
-
function clearCookieHeader(name, options = {}) {
|
|
375
|
-
return serializeCookie(name, "", {
|
|
376
|
-
...options,
|
|
377
|
-
maxAge: 0,
|
|
378
|
-
expires: /* @__PURE__ */ new Date(0)
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
exports.HttpError = HttpError;
|
|
383
|
-
exports.Logger = Logger;
|
|
384
|
-
exports.clearCookieHeader = clearCookieHeader;
|
|
385
|
-
exports.parseBody = parseBody;
|
|
386
|
-
exports.parseCookies = parseCookies;
|
|
387
|
-
exports.parseQueryString = parseQueryString;
|
|
388
|
-
exports.parseUrl = parseUrl;
|
|
389
|
-
exports.resolveIp = resolveIp;
|
|
390
|
-
exports.serializeCookie = serializeCookie;
|
|
391
|
-
//# sourceMappingURL=chunk-3UFAWS2V.js.map
|
|
392
|
-
//# sourceMappingURL=chunk-3UFAWS2V.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/Logger.ts","../src/utils/HttpError.ts","../src/utils/Parser.ts","../src/utils/IpResolver.ts","../src/utils/cookies/CookieManager.ts"],"names":["HttpStatusText"],"mappings":"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","file":"chunk-3UFAWS2V.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","import { HttpStatusText } from \"../types/http/status.js\";\r\n\r\nexport class HttpError extends Error {\r\n public readonly statusCode: number;\r\n public readonly details?: any;\r\n public readonly isOperational: boolean;\r\n\r\n constructor(statusCode: number, message?: string, details?: any) {\r\n super(message ?? HttpStatusText[statusCode] ?? \"Unknown Error\");\r\n this.statusCode = statusCode;\r\n this.details = details;\r\n this.isOperational = true;\r\n Object.setPrototypeOf(this, HttpError.prototype);\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n const obj: Record<string, any> = {\r\n error: {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n },\r\n };\r\n if (this.details) obj.error.details = this.details;\r\n return obj;\r\n }\r\n\r\n static badRequest(message?: string, details?: any): HttpError {\r\n return new HttpError(400, message ?? \"Bad Request\", details);\r\n }\r\n\r\n static unauthorized(message?: string): HttpError {\r\n return new HttpError(401, message ?? \"Unauthorized\");\r\n }\r\n\r\n static forbidden(message?: string): HttpError {\r\n return new HttpError(403, message ?? \"Forbidden\");\r\n }\r\n\r\n static notFound(message?: string): HttpError {\r\n return new HttpError(404, message ?? \"Not Found\");\r\n }\r\n\r\n static methodNotAllowed(message?: string): HttpError {\r\n return new HttpError(405, message ?? \"Method Not Allowed\");\r\n }\r\n\r\n static conflict(message?: string, details?: any): HttpError {\r\n return new HttpError(409, message ?? \"Conflict\", details);\r\n }\r\n\r\n static unprocessableEntity(message?: string, details?: any): HttpError {\r\n return new HttpError(422, message ?? \"Unprocessable Entity\", details);\r\n }\r\n\r\n static tooManyRequests(message?: string): HttpError {\r\n return new HttpError(429, message ?? \"Too Many Requests\");\r\n }\r\n\r\n static internal(message?: string): HttpError {\r\n return new HttpError(500, message ?? \"Internal Server Error\");\r\n }\r\n}\r\n","import type { IncomingMessage } from \"node:http\";\r\n\r\nexport function parseQueryString(qs: string): Record<string, string | string[]> {\r\n const result: Record<string, string | string[]> = Object.create(null);\r\n if (!qs || qs.length === 0) return result;\r\n\r\n let key = \"\";\r\n let value = \"\";\r\n let startingKey = true;\r\n let i = qs.charCodeAt(0) === 63 ? 1 : 0; // skip leading ?\r\n\r\n for (; i < qs.length; i++) {\r\n const ch = qs.charCodeAt(i);\r\n\r\n if (ch === 61 /* = */ && startingKey) {\r\n startingKey = false;\r\n continue;\r\n }\r\n\r\n if (ch === 38 /* & */) {\r\n if (key.length > 0) {\r\n const decodedKey = fastDecode(key);\r\n const decodedVal = fastDecode(value);\r\n const existing = result[decodedKey];\r\n if (existing === undefined) {\r\n result[decodedKey] = decodedVal;\r\n } else if (typeof existing === \"string\") {\r\n result[decodedKey] = [existing, decodedVal];\r\n } else {\r\n existing.push(decodedVal);\r\n }\r\n }\r\n key = \"\";\r\n value = \"\";\r\n startingKey = true;\r\n continue;\r\n }\r\n\r\n if (startingKey) {\r\n key += qs[i];\r\n } else {\r\n value += qs[i];\r\n }\r\n }\r\n\r\n if (key.length > 0) {\r\n const decodedKey = fastDecode(key);\r\n const decodedVal = fastDecode(value);\r\n const existing = result[decodedKey];\r\n if (existing === undefined) {\r\n result[decodedKey] = decodedVal;\r\n } else if (typeof existing === \"string\") {\r\n result[decodedKey] = [existing, decodedVal];\r\n } else {\r\n existing.push(decodedVal);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction fastDecode(str: string): string {\r\n if (str.indexOf(\"%\") === -1 && str.indexOf(\"+\") === -1) return str;\r\n try {\r\n return decodeURIComponent(str.replace(/\\+/g, \" \"));\r\n } catch {\r\n return str;\r\n }\r\n}\r\n\r\nexport function parseCookies(header: string | undefined): Record<string, string> {\r\n const cookies: Record<string, string> = Object.create(null);\r\n if (!header) return cookies;\r\n\r\n let i = 0;\r\n const len = header.length;\r\n\r\n while (i < len) {\r\n while (i < len && header.charCodeAt(i) === 32) i++; // skip spaces\r\n\r\n let eqIdx = -1;\r\n let semiIdx = -1;\r\n for (let j = i; j < len; j++) {\r\n const ch = header.charCodeAt(j);\r\n if (ch === 61 && eqIdx === -1) eqIdx = j;\r\n if (ch === 59) { semiIdx = j; break; }\r\n }\r\n\r\n if (eqIdx === -1) {\r\n i = semiIdx === -1 ? len : semiIdx + 1;\r\n continue;\r\n }\r\n\r\n const end = semiIdx === -1 ? len : semiIdx;\r\n const name = header.slice(i, eqIdx).trim();\r\n let val = header.slice(eqIdx + 1, end).trim();\r\n\r\n if (val.charCodeAt(0) === 34 && val.charCodeAt(val.length - 1) === 34) {\r\n val = val.slice(1, -1);\r\n }\r\n\r\n if (cookies[name] === undefined) {\r\n cookies[name] = fastDecode(val);\r\n }\r\n\r\n i = end + 1;\r\n }\r\n\r\n return cookies;\r\n}\r\n\r\nconst CONTENT_TYPE_JSON = \"application/json\";\r\nconst CONTENT_TYPE_FORM = \"application/x-www-form-urlencoded\";\r\n\r\nexport async function parseBody(req: IncomingMessage): Promise<any> {\r\n const contentType = req.headers[\"content-type\"] ?? \"\";\r\n const contentLength = req.headers[\"content-length\"];\r\n\r\n if (\r\n req.method === \"GET\" ||\r\n req.method === \"HEAD\" ||\r\n req.method === \"OPTIONS\" ||\r\n (contentLength !== undefined && contentLength === \"0\")\r\n ) {\r\n return undefined;\r\n }\r\n\r\n const chunks: Buffer[] = [];\r\n let totalSize = 0;\r\n const maxSize = 10 * 1024 * 1024; // 10MB default\r\n\r\n return new Promise((resolve, reject) => {\r\n req.on(\"data\", (chunk: Buffer) => {\r\n totalSize += chunk.length;\r\n if (totalSize > maxSize) {\r\n req.destroy();\r\n reject(new Error(\"Request body too large\"));\r\n return;\r\n }\r\n chunks.push(chunk);\r\n });\r\n\r\n req.on(\"end\", () => {\r\n if (chunks.length === 0) {\r\n resolve(undefined);\r\n return;\r\n }\r\n\r\n const raw = Buffer.concat(chunks).toString(\"utf-8\");\r\n\r\n if (contentType.startsWith(CONTENT_TYPE_JSON)) {\r\n try {\r\n resolve(JSON.parse(raw));\r\n } catch {\r\n resolve(raw);\r\n }\r\n } else if (contentType.startsWith(CONTENT_TYPE_FORM)) {\r\n resolve(parseQueryString(raw));\r\n } else {\r\n resolve(raw);\r\n }\r\n });\r\n\r\n req.on(\"error\", reject);\r\n });\r\n}\r\n\r\nexport function parseUrl(url: string): { pathname: string; search: string } {\r\n let pathname = \"\";\r\n let search = \"\";\r\n let i = 0;\r\n\r\n for (; i < url.length; i++) {\r\n if (url.charCodeAt(i) === 63) { // ?\r\n pathname = url.slice(0, i);\r\n search = url.slice(i);\r\n return { pathname, search };\r\n }\r\n }\r\n\r\n return { pathname: url, search: \"\" };\r\n}\r\n","import type { IncomingMessage } from \"node:http\";\r\n\r\nconst PROXY_HEADERS = [\r\n \"x-forwarded-for\",\r\n \"x-real-ip\",\r\n \"cf-connecting-ip\",\r\n \"x-client-ip\",\r\n \"x-cluster-client-ip\",\r\n \"fastly-client-ip\",\r\n \"true-client-ip\",\r\n] as const;\r\n\r\nexport function resolveIp(req: IncomingMessage): string {\r\n for (const header of PROXY_HEADERS) {\r\n const val = req.headers[header];\r\n if (val) {\r\n const ip = typeof val === \"string\" ? val.split(\",\")[0].trim() : val[0];\r\n if (ip && ip.length > 0) return normalizeIp(ip);\r\n }\r\n }\r\n\r\n const remoteAddr = req.socket?.remoteAddress ?? \"127.0.0.1\";\r\n return normalizeIp(remoteAddr);\r\n}\r\n\r\nfunction normalizeIp(ip: string): string {\r\n if (ip === \"::1\" || ip === \"::ffff:127.0.0.1\") return \"127.0.0.1\";\r\n if (ip.startsWith(\"::ffff:\")) return ip.slice(7);\r\n return ip;\r\n}\r\n","import type { CookieOptions } from \"../../types/common.type.js\";\r\n\r\nexport function serializeCookie(\r\n name: string,\r\n value: string,\r\n options: CookieOptions = {},\r\n): string {\r\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\r\n\r\n if (options.maxAge != null) {\r\n cookie += `; Max-Age=${Math.floor(options.maxAge)}`;\r\n }\r\n\r\n if (options.expires) {\r\n cookie += `; Expires=${options.expires.toUTCString()}`;\r\n }\r\n\r\n if (options.domain) {\r\n cookie += `; Domain=${options.domain}`;\r\n }\r\n\r\n cookie += `; Path=${options.path ?? \"/\"}`;\r\n\r\n if (options.secure) {\r\n cookie += \"; Secure\";\r\n }\r\n\r\n if (options.httpOnly !== false) {\r\n cookie += \"; HttpOnly\";\r\n }\r\n\r\n if (options.sameSite) {\r\n cookie += `; SameSite=${options.sameSite}`;\r\n }\r\n\r\n return cookie;\r\n}\r\n\r\nexport function clearCookieHeader(\r\n name: string,\r\n options: CookieOptions = {},\r\n): string {\r\n return serializeCookie(name, \"\", {\r\n ...options,\r\n maxAge: 0,\r\n expires: new Date(0),\r\n });\r\n}\r\n"]}
|
package/dist/chunk-4LSFAAZW.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4LSFAAZW.js"}
|
package/dist/chunk-7NSRIVZM.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/types/http/status.ts
|
|
4
|
-
var HttpStatus = {
|
|
5
|
-
OK: 200,
|
|
6
|
-
CREATED: 201,
|
|
7
|
-
ACCEPTED: 202,
|
|
8
|
-
NO_CONTENT: 204,
|
|
9
|
-
MOVED_PERMANENTLY: 301,
|
|
10
|
-
FOUND: 302,
|
|
11
|
-
NOT_MODIFIED: 304,
|
|
12
|
-
BAD_REQUEST: 400,
|
|
13
|
-
UNAUTHORIZED: 401,
|
|
14
|
-
FORBIDDEN: 403,
|
|
15
|
-
NOT_FOUND: 404,
|
|
16
|
-
METHOD_NOT_ALLOWED: 405,
|
|
17
|
-
CONFLICT: 409,
|
|
18
|
-
GONE: 410,
|
|
19
|
-
UNPROCESSABLE_ENTITY: 422,
|
|
20
|
-
TOO_MANY_REQUESTS: 429,
|
|
21
|
-
INTERNAL_SERVER_ERROR: 500,
|
|
22
|
-
NOT_IMPLEMENTED: 501,
|
|
23
|
-
BAD_GATEWAY: 502,
|
|
24
|
-
SERVICE_UNAVAILABLE: 503,
|
|
25
|
-
GATEWAY_TIMEOUT: 504
|
|
26
|
-
};
|
|
27
|
-
var HttpStatusText = {
|
|
28
|
-
200: "OK",
|
|
29
|
-
201: "Created",
|
|
30
|
-
202: "Accepted",
|
|
31
|
-
204: "No Content",
|
|
32
|
-
301: "Moved Permanently",
|
|
33
|
-
302: "Found",
|
|
34
|
-
304: "Not Modified",
|
|
35
|
-
400: "Bad Request",
|
|
36
|
-
401: "Unauthorized",
|
|
37
|
-
403: "Forbidden",
|
|
38
|
-
404: "Not Found",
|
|
39
|
-
405: "Method Not Allowed",
|
|
40
|
-
409: "Conflict",
|
|
41
|
-
410: "Gone",
|
|
42
|
-
422: "Unprocessable Entity",
|
|
43
|
-
429: "Too Many Requests",
|
|
44
|
-
500: "Internal Server Error",
|
|
45
|
-
501: "Not Implemented",
|
|
46
|
-
502: "Bad Gateway",
|
|
47
|
-
503: "Service Unavailable",
|
|
48
|
-
504: "Gateway Timeout"
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
exports.HttpStatus = HttpStatus;
|
|
52
|
-
exports.HttpStatusText = HttpStatusText;
|
|
53
|
-
//# sourceMappingURL=chunk-7NSRIVZM.js.map
|
|
54
|
-
//# sourceMappingURL=chunk-7NSRIVZM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/http/status.ts"],"names":[],"mappings":";;;AAAO,IAAM,UAAA,GAAa;AAAA,EACxB,EAAA,EAAI,GAAA;AAAA,EACJ,OAAA,EAAS,GAAA;AAAA,EACT,QAAA,EAAU,GAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,iBAAA,EAAmB,GAAA;AAAA,EACnB,KAAA,EAAO,GAAA;AAAA,EACP,YAAA,EAAc,GAAA;AAAA,EACd,WAAA,EAAa,GAAA;AAAA,EACb,YAAA,EAAc,GAAA;AAAA,EACd,SAAA,EAAW,GAAA;AAAA,EACX,SAAA,EAAW,GAAA;AAAA,EACX,kBAAA,EAAoB,GAAA;AAAA,EACpB,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM,GAAA;AAAA,EACN,oBAAA,EAAsB,GAAA;AAAA,EACtB,iBAAA,EAAmB,GAAA;AAAA,EACnB,qBAAA,EAAuB,GAAA;AAAA,EACvB,eAAA,EAAiB,GAAA;AAAA,EACjB,WAAA,EAAa,GAAA;AAAA,EACb,mBAAA,EAAqB,GAAA;AAAA,EACrB,eAAA,EAAiB;AACnB;AAIO,IAAM,cAAA,GAAyC;AAAA,EACpD,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,SAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,mBAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,cAAA;AAAA,EACL,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK,cAAA;AAAA,EACL,GAAA,EAAK,WAAA;AAAA,EACL,GAAA,EAAK,WAAA;AAAA,EACL,GAAA,EAAK,oBAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,sBAAA;AAAA,EACL,GAAA,EAAK,mBAAA;AAAA,EACL,GAAA,EAAK,uBAAA;AAAA,EACL,GAAA,EAAK,iBAAA;AAAA,EACL,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK,qBAAA;AAAA,EACL,GAAA,EAAK;AACP","file":"chunk-7NSRIVZM.js","sourcesContent":["export const HttpStatus = {\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NO_CONTENT: 204,\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n NOT_MODIFIED: 304,\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n UNPROCESSABLE_ENTITY: 422,\r\n TOO_MANY_REQUESTS: 429,\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n} as const;\r\n\r\nexport type HttpStatusCode = (typeof HttpStatus)[keyof typeof HttpStatus];\r\n\r\nexport const HttpStatusText: Record<number, string> = {\r\n 200: \"OK\",\r\n 201: \"Created\",\r\n 202: \"Accepted\",\r\n 204: \"No Content\",\r\n 301: \"Moved Permanently\",\r\n 302: \"Found\",\r\n 304: \"Not Modified\",\r\n 400: \"Bad Request\",\r\n 401: \"Unauthorized\",\r\n 403: \"Forbidden\",\r\n 404: \"Not Found\",\r\n 405: \"Method Not Allowed\",\r\n 409: \"Conflict\",\r\n 410: \"Gone\",\r\n 422: \"Unprocessable Entity\",\r\n 429: \"Too Many Requests\",\r\n 500: \"Internal Server Error\",\r\n 501: \"Not Implemented\",\r\n 502: \"Bad Gateway\",\r\n 503: \"Service Unavailable\",\r\n 504: \"Gateway Timeout\",\r\n};\r\n"]}
|
package/dist/chunk-AOG6NYAM.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/utils/validators/DTOValidator.ts
|
|
4
|
-
var DTOValidator = class {
|
|
5
|
-
static validate(data, schema) {
|
|
6
|
-
const errors = [];
|
|
7
|
-
if (data == null || typeof data !== "object") {
|
|
8
|
-
return {
|
|
9
|
-
valid: false,
|
|
10
|
-
errors: [{ field: "_root", message: "Request body must be an object" }]
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
for (const [field, rule] of Object.entries(schema)) {
|
|
14
|
-
const value = data[field];
|
|
15
|
-
if (rule.required && (value === void 0 || value === null || value === "")) {
|
|
16
|
-
errors.push({
|
|
17
|
-
field,
|
|
18
|
-
message: rule.message ?? `${field} is required`,
|
|
19
|
-
value
|
|
20
|
-
});
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
|
-
if (value === void 0 || value === null) continue;
|
|
24
|
-
if (rule.type) {
|
|
25
|
-
const actualType = Array.isArray(value) ? "array" : typeof value;
|
|
26
|
-
if (actualType !== rule.type) {
|
|
27
|
-
errors.push({
|
|
28
|
-
field,
|
|
29
|
-
message: rule.message ?? `${field} must be of type ${rule.type}`,
|
|
30
|
-
value
|
|
31
|
-
});
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (rule.type === "string" || typeof value === "string") {
|
|
36
|
-
if (rule.min !== void 0 && value.length < rule.min) {
|
|
37
|
-
errors.push({
|
|
38
|
-
field,
|
|
39
|
-
message: rule.message ?? `${field} must be at least ${rule.min} characters`,
|
|
40
|
-
value
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
if (rule.max !== void 0 && value.length > rule.max) {
|
|
44
|
-
errors.push({
|
|
45
|
-
field,
|
|
46
|
-
message: rule.message ?? `${field} must be at most ${rule.max} characters`,
|
|
47
|
-
value
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
if (rule.pattern && !rule.pattern.test(value)) {
|
|
51
|
-
errors.push({
|
|
52
|
-
field,
|
|
53
|
-
message: rule.message ?? `${field} has invalid format`,
|
|
54
|
-
value
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (rule.type === "number" || typeof value === "number") {
|
|
59
|
-
if (rule.min !== void 0 && value < rule.min) {
|
|
60
|
-
errors.push({
|
|
61
|
-
field,
|
|
62
|
-
message: rule.message ?? `${field} must be at least ${rule.min}`,
|
|
63
|
-
value
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
if (rule.max !== void 0 && value > rule.max) {
|
|
67
|
-
errors.push({
|
|
68
|
-
field,
|
|
69
|
-
message: rule.message ?? `${field} must be at most ${rule.max}`,
|
|
70
|
-
value
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
if (rule.type === "array" && Array.isArray(value)) {
|
|
75
|
-
if (rule.min !== void 0 && value.length < rule.min) {
|
|
76
|
-
errors.push({
|
|
77
|
-
field,
|
|
78
|
-
message: rule.message ?? `${field} must have at least ${rule.min} items`,
|
|
79
|
-
value
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (rule.max !== void 0 && value.length > rule.max) {
|
|
83
|
-
errors.push({
|
|
84
|
-
field,
|
|
85
|
-
message: rule.message ?? `${field} must have at most ${rule.max} items`,
|
|
86
|
-
value
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
if (rule.enum && !rule.enum.includes(value)) {
|
|
91
|
-
errors.push({
|
|
92
|
-
field,
|
|
93
|
-
message: rule.message ?? `${field} must be one of: ${rule.enum.join(", ")}`,
|
|
94
|
-
value
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
if (rule.custom) {
|
|
98
|
-
const customError = rule.custom(value);
|
|
99
|
-
if (customError) {
|
|
100
|
-
errors.push({ field, message: customError, value });
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
valid: errors.length === 0,
|
|
106
|
-
errors,
|
|
107
|
-
data: errors.length === 0 ? data : void 0
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
// src/utils/validators/SchemaValidator.ts
|
|
113
|
-
var SchemaValidator = class {
|
|
114
|
-
static validate(data, schema) {
|
|
115
|
-
if (typeof schema.safeParse === "function") {
|
|
116
|
-
const result = schema.safeParse(data);
|
|
117
|
-
if (result.success) {
|
|
118
|
-
return { valid: true, data: result.data };
|
|
119
|
-
}
|
|
120
|
-
return { valid: false, errors: result.error };
|
|
121
|
-
}
|
|
122
|
-
if (typeof schema.parse === "function") {
|
|
123
|
-
try {
|
|
124
|
-
const parsed = schema.parse(data);
|
|
125
|
-
return { valid: true, data: parsed };
|
|
126
|
-
} catch (err) {
|
|
127
|
-
return { valid: false, errors: err };
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
if (typeof schema.validate === "function") {
|
|
131
|
-
const result = schema.validate(data);
|
|
132
|
-
if (result.error) {
|
|
133
|
-
return { valid: false, errors: result.error };
|
|
134
|
-
}
|
|
135
|
-
return { valid: true, data: result.value };
|
|
136
|
-
}
|
|
137
|
-
return { valid: true, data };
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
exports.DTOValidator = DTOValidator;
|
|
142
|
-
exports.SchemaValidator = SchemaValidator;
|
|
143
|
-
//# sourceMappingURL=chunk-AOG6NYAM.js.map
|
|
144
|
-
//# sourceMappingURL=chunk-AOG6NYAM.js.map
|