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-REJDZUZ5.mjs
DELETED
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
import { HttpStatusText } from './chunk-OWUGAI5V.mjs';
|
|
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
|
-
new Logger();
|
|
119
|
-
|
|
120
|
-
// src/utils/HttpError.ts
|
|
121
|
-
var HttpError = class _HttpError extends Error {
|
|
122
|
-
statusCode;
|
|
123
|
-
details;
|
|
124
|
-
isOperational;
|
|
125
|
-
constructor(statusCode, message, details) {
|
|
126
|
-
super(message ?? HttpStatusText[statusCode] ?? "Unknown Error");
|
|
127
|
-
this.statusCode = statusCode;
|
|
128
|
-
this.details = details;
|
|
129
|
-
this.isOperational = true;
|
|
130
|
-
Object.setPrototypeOf(this, _HttpError.prototype);
|
|
131
|
-
}
|
|
132
|
-
toJSON() {
|
|
133
|
-
const obj = {
|
|
134
|
-
error: {
|
|
135
|
-
statusCode: this.statusCode,
|
|
136
|
-
message: this.message
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
if (this.details) obj.error.details = this.details;
|
|
140
|
-
return obj;
|
|
141
|
-
}
|
|
142
|
-
static badRequest(message, details) {
|
|
143
|
-
return new _HttpError(400, message ?? "Bad Request", details);
|
|
144
|
-
}
|
|
145
|
-
static unauthorized(message) {
|
|
146
|
-
return new _HttpError(401, message ?? "Unauthorized");
|
|
147
|
-
}
|
|
148
|
-
static forbidden(message) {
|
|
149
|
-
return new _HttpError(403, message ?? "Forbidden");
|
|
150
|
-
}
|
|
151
|
-
static notFound(message) {
|
|
152
|
-
return new _HttpError(404, message ?? "Not Found");
|
|
153
|
-
}
|
|
154
|
-
static methodNotAllowed(message) {
|
|
155
|
-
return new _HttpError(405, message ?? "Method Not Allowed");
|
|
156
|
-
}
|
|
157
|
-
static conflict(message, details) {
|
|
158
|
-
return new _HttpError(409, message ?? "Conflict", details);
|
|
159
|
-
}
|
|
160
|
-
static unprocessableEntity(message, details) {
|
|
161
|
-
return new _HttpError(422, message ?? "Unprocessable Entity", details);
|
|
162
|
-
}
|
|
163
|
-
static tooManyRequests(message) {
|
|
164
|
-
return new _HttpError(429, message ?? "Too Many Requests");
|
|
165
|
-
}
|
|
166
|
-
static internal(message) {
|
|
167
|
-
return new _HttpError(500, message ?? "Internal Server Error");
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
// src/utils/Parser.ts
|
|
172
|
-
function parseQueryString(qs) {
|
|
173
|
-
const result = /* @__PURE__ */ Object.create(null);
|
|
174
|
-
if (!qs || qs.length === 0) return result;
|
|
175
|
-
let key = "";
|
|
176
|
-
let value = "";
|
|
177
|
-
let startingKey = true;
|
|
178
|
-
let i = qs.charCodeAt(0) === 63 ? 1 : 0;
|
|
179
|
-
for (; i < qs.length; i++) {
|
|
180
|
-
const ch = qs.charCodeAt(i);
|
|
181
|
-
if (ch === 61 && startingKey) {
|
|
182
|
-
startingKey = false;
|
|
183
|
-
continue;
|
|
184
|
-
}
|
|
185
|
-
if (ch === 38) {
|
|
186
|
-
if (key.length > 0) {
|
|
187
|
-
const decodedKey = fastDecode(key);
|
|
188
|
-
const decodedVal = fastDecode(value);
|
|
189
|
-
const existing = result[decodedKey];
|
|
190
|
-
if (existing === void 0) {
|
|
191
|
-
result[decodedKey] = decodedVal;
|
|
192
|
-
} else if (typeof existing === "string") {
|
|
193
|
-
result[decodedKey] = [existing, decodedVal];
|
|
194
|
-
} else {
|
|
195
|
-
existing.push(decodedVal);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
key = "";
|
|
199
|
-
value = "";
|
|
200
|
-
startingKey = true;
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
if (startingKey) {
|
|
204
|
-
key += qs[i];
|
|
205
|
-
} else {
|
|
206
|
-
value += qs[i];
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (key.length > 0) {
|
|
210
|
-
const decodedKey = fastDecode(key);
|
|
211
|
-
const decodedVal = fastDecode(value);
|
|
212
|
-
const existing = result[decodedKey];
|
|
213
|
-
if (existing === void 0) {
|
|
214
|
-
result[decodedKey] = decodedVal;
|
|
215
|
-
} else if (typeof existing === "string") {
|
|
216
|
-
result[decodedKey] = [existing, decodedVal];
|
|
217
|
-
} else {
|
|
218
|
-
existing.push(decodedVal);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
return result;
|
|
222
|
-
}
|
|
223
|
-
function fastDecode(str) {
|
|
224
|
-
if (str.indexOf("%") === -1 && str.indexOf("+") === -1) return str;
|
|
225
|
-
try {
|
|
226
|
-
return decodeURIComponent(str.replace(/\+/g, " "));
|
|
227
|
-
} catch {
|
|
228
|
-
return str;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
function parseCookies(header) {
|
|
232
|
-
const cookies = /* @__PURE__ */ Object.create(null);
|
|
233
|
-
if (!header) return cookies;
|
|
234
|
-
let i = 0;
|
|
235
|
-
const len = header.length;
|
|
236
|
-
while (i < len) {
|
|
237
|
-
while (i < len && header.charCodeAt(i) === 32) i++;
|
|
238
|
-
let eqIdx = -1;
|
|
239
|
-
let semiIdx = -1;
|
|
240
|
-
for (let j = i; j < len; j++) {
|
|
241
|
-
const ch = header.charCodeAt(j);
|
|
242
|
-
if (ch === 61 && eqIdx === -1) eqIdx = j;
|
|
243
|
-
if (ch === 59) {
|
|
244
|
-
semiIdx = j;
|
|
245
|
-
break;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
if (eqIdx === -1) {
|
|
249
|
-
i = semiIdx === -1 ? len : semiIdx + 1;
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
const end = semiIdx === -1 ? len : semiIdx;
|
|
253
|
-
const name = header.slice(i, eqIdx).trim();
|
|
254
|
-
let val = header.slice(eqIdx + 1, end).trim();
|
|
255
|
-
if (val.charCodeAt(0) === 34 && val.charCodeAt(val.length - 1) === 34) {
|
|
256
|
-
val = val.slice(1, -1);
|
|
257
|
-
}
|
|
258
|
-
if (cookies[name] === void 0) {
|
|
259
|
-
cookies[name] = fastDecode(val);
|
|
260
|
-
}
|
|
261
|
-
i = end + 1;
|
|
262
|
-
}
|
|
263
|
-
return cookies;
|
|
264
|
-
}
|
|
265
|
-
var CONTENT_TYPE_JSON = "application/json";
|
|
266
|
-
var CONTENT_TYPE_FORM = "application/x-www-form-urlencoded";
|
|
267
|
-
async function parseBody(req) {
|
|
268
|
-
const contentType = req.headers["content-type"] ?? "";
|
|
269
|
-
const contentLength = req.headers["content-length"];
|
|
270
|
-
if (req.method === "GET" || req.method === "HEAD" || req.method === "OPTIONS" || contentLength !== void 0 && contentLength === "0") {
|
|
271
|
-
return void 0;
|
|
272
|
-
}
|
|
273
|
-
const chunks = [];
|
|
274
|
-
let totalSize = 0;
|
|
275
|
-
const maxSize = 10 * 1024 * 1024;
|
|
276
|
-
return new Promise((resolve, reject) => {
|
|
277
|
-
req.on("data", (chunk) => {
|
|
278
|
-
totalSize += chunk.length;
|
|
279
|
-
if (totalSize > maxSize) {
|
|
280
|
-
req.destroy();
|
|
281
|
-
reject(new Error("Request body too large"));
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
chunks.push(chunk);
|
|
285
|
-
});
|
|
286
|
-
req.on("end", () => {
|
|
287
|
-
if (chunks.length === 0) {
|
|
288
|
-
resolve(void 0);
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
const raw = Buffer.concat(chunks).toString("utf-8");
|
|
292
|
-
if (contentType.startsWith(CONTENT_TYPE_JSON)) {
|
|
293
|
-
try {
|
|
294
|
-
resolve(JSON.parse(raw));
|
|
295
|
-
} catch {
|
|
296
|
-
resolve(raw);
|
|
297
|
-
}
|
|
298
|
-
} else if (contentType.startsWith(CONTENT_TYPE_FORM)) {
|
|
299
|
-
resolve(parseQueryString(raw));
|
|
300
|
-
} else {
|
|
301
|
-
resolve(raw);
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
req.on("error", reject);
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
function parseUrl(url) {
|
|
308
|
-
let pathname = "";
|
|
309
|
-
let search = "";
|
|
310
|
-
let i = 0;
|
|
311
|
-
for (; i < url.length; i++) {
|
|
312
|
-
if (url.charCodeAt(i) === 63) {
|
|
313
|
-
pathname = url.slice(0, i);
|
|
314
|
-
search = url.slice(i);
|
|
315
|
-
return { pathname, search };
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return { pathname: url, search: "" };
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// src/utils/IpResolver.ts
|
|
322
|
-
var PROXY_HEADERS = [
|
|
323
|
-
"x-forwarded-for",
|
|
324
|
-
"x-real-ip",
|
|
325
|
-
"cf-connecting-ip",
|
|
326
|
-
"x-client-ip",
|
|
327
|
-
"x-cluster-client-ip",
|
|
328
|
-
"fastly-client-ip",
|
|
329
|
-
"true-client-ip"
|
|
330
|
-
];
|
|
331
|
-
function resolveIp(req) {
|
|
332
|
-
for (const header of PROXY_HEADERS) {
|
|
333
|
-
const val = req.headers[header];
|
|
334
|
-
if (val) {
|
|
335
|
-
const ip = typeof val === "string" ? val.split(",")[0].trim() : val[0];
|
|
336
|
-
if (ip && ip.length > 0) return normalizeIp(ip);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
const remoteAddr = req.socket?.remoteAddress ?? "127.0.0.1";
|
|
340
|
-
return normalizeIp(remoteAddr);
|
|
341
|
-
}
|
|
342
|
-
function normalizeIp(ip) {
|
|
343
|
-
if (ip === "::1" || ip === "::ffff:127.0.0.1") return "127.0.0.1";
|
|
344
|
-
if (ip.startsWith("::ffff:")) return ip.slice(7);
|
|
345
|
-
return ip;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// src/utils/cookies/CookieManager.ts
|
|
349
|
-
function serializeCookie(name, value, options = {}) {
|
|
350
|
-
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
351
|
-
if (options.maxAge != null) {
|
|
352
|
-
cookie += `; Max-Age=${Math.floor(options.maxAge)}`;
|
|
353
|
-
}
|
|
354
|
-
if (options.expires) {
|
|
355
|
-
cookie += `; Expires=${options.expires.toUTCString()}`;
|
|
356
|
-
}
|
|
357
|
-
if (options.domain) {
|
|
358
|
-
cookie += `; Domain=${options.domain}`;
|
|
359
|
-
}
|
|
360
|
-
cookie += `; Path=${options.path ?? "/"}`;
|
|
361
|
-
if (options.secure) {
|
|
362
|
-
cookie += "; Secure";
|
|
363
|
-
}
|
|
364
|
-
if (options.httpOnly !== false) {
|
|
365
|
-
cookie += "; HttpOnly";
|
|
366
|
-
}
|
|
367
|
-
if (options.sameSite) {
|
|
368
|
-
cookie += `; SameSite=${options.sameSite}`;
|
|
369
|
-
}
|
|
370
|
-
return cookie;
|
|
371
|
-
}
|
|
372
|
-
function clearCookieHeader(name, options = {}) {
|
|
373
|
-
return serializeCookie(name, "", {
|
|
374
|
-
...options,
|
|
375
|
-
maxAge: 0,
|
|
376
|
-
expires: /* @__PURE__ */ new Date(0)
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
export { HttpError, Logger, clearCookieHeader, parseBody, parseCookies, parseQueryString, parseUrl, resolveIp, serializeCookie };
|
|
381
|
-
//# sourceMappingURL=chunk-REJDZUZ5.mjs.map
|
|
382
|
-
//# sourceMappingURL=chunk-REJDZUZ5.mjs.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":[],"mappings":"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","file":"chunk-REJDZUZ5.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","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-TC6N6TJZ.mjs
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
// src/decorators/Route.ts
|
|
2
|
-
var CONTROLLER_META_KEY = "azura:controller";
|
|
3
|
-
var ROUTES_META_KEY = "azura:routes";
|
|
4
|
-
var PARAMS_META_KEY = "azura:params";
|
|
5
|
-
var MIDDLEWARES_META_KEY = "azura:middlewares";
|
|
6
|
-
function ensureReflect() {
|
|
7
|
-
if (typeof Reflect === "undefined" || !Reflect.getMetadata) {
|
|
8
|
-
const store = /* @__PURE__ */ new Map();
|
|
9
|
-
Reflect.defineMetadata = (key, value, target, prop) => {
|
|
10
|
-
const k = prop ? `${key}::${prop}` : key;
|
|
11
|
-
if (!store.has(k)) store.set(k, /* @__PURE__ */ new Map());
|
|
12
|
-
store.get(k).set(target, value);
|
|
13
|
-
};
|
|
14
|
-
Reflect.getMetadata = (key, target, prop) => {
|
|
15
|
-
const k = prop ? `${key}::${prop}` : key;
|
|
16
|
-
return store.get(k)?.get(target);
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
ensureReflect();
|
|
21
|
-
function Controller(prefix = "") {
|
|
22
|
-
return (target) => {
|
|
23
|
-
Reflect.defineMetadata(CONTROLLER_META_KEY, prefix, target);
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
function createMethodDecorator(method) {
|
|
27
|
-
return (path = "") => {
|
|
28
|
-
return (target, propertyKey, _descriptor) => {
|
|
29
|
-
Reflect.defineMetadata(
|
|
30
|
-
ROUTES_META_KEY,
|
|
31
|
-
{ method, path, propertyKey: String(propertyKey), middlewares: [], params: [], meta: void 0 },
|
|
32
|
-
target,
|
|
33
|
-
String(propertyKey)
|
|
34
|
-
);
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
var Get = createMethodDecorator("GET");
|
|
39
|
-
var Post = createMethodDecorator("POST");
|
|
40
|
-
var Put = createMethodDecorator("PUT");
|
|
41
|
-
var Delete = createMethodDecorator("DELETE");
|
|
42
|
-
var Patch = createMethodDecorator("PATCH");
|
|
43
|
-
var Head = createMethodDecorator("HEAD");
|
|
44
|
-
var Options = createMethodDecorator("OPTIONS");
|
|
45
|
-
function createParamDecorator(type) {
|
|
46
|
-
return (name) => {
|
|
47
|
-
return (target, propertyKey, parameterIndex) => {
|
|
48
|
-
const key = String(propertyKey);
|
|
49
|
-
const existing = Reflect.getMetadata(PARAMS_META_KEY, target, key) ?? [];
|
|
50
|
-
existing.push({ index: parameterIndex, type, name });
|
|
51
|
-
Reflect.defineMetadata(PARAMS_META_KEY, existing, target, key);
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
var Body = createParamDecorator("body");
|
|
56
|
-
var Query = createParamDecorator("query");
|
|
57
|
-
var Param = createParamDecorator("param");
|
|
58
|
-
var Headers = createParamDecorator("header");
|
|
59
|
-
var Cookies = createParamDecorator("cookie");
|
|
60
|
-
var Req = createParamDecorator("req");
|
|
61
|
-
var Res = createParamDecorator("res");
|
|
62
|
-
var NextFunc = createParamDecorator("next");
|
|
63
|
-
var Ip = createParamDecorator("ip");
|
|
64
|
-
var Session = createParamDecorator("session");
|
|
65
|
-
function UseMiddleware(...middlewares) {
|
|
66
|
-
return (target, propertyKey, _descriptor) => {
|
|
67
|
-
if (propertyKey) {
|
|
68
|
-
const existing = Reflect.getMetadata(MIDDLEWARES_META_KEY, target, String(propertyKey)) ?? [];
|
|
69
|
-
Reflect.defineMetadata(MIDDLEWARES_META_KEY, [...existing, ...middlewares], target, String(propertyKey));
|
|
70
|
-
} else {
|
|
71
|
-
const existing = Reflect.getMetadata(MIDDLEWARES_META_KEY, target) ?? [];
|
|
72
|
-
Reflect.defineMetadata(MIDDLEWARES_META_KEY, [...existing, ...middlewares], target);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function applyDecorators(...decorators) {
|
|
77
|
-
return (target, propertyKey, descriptor) => {
|
|
78
|
-
for (const decorator of decorators) {
|
|
79
|
-
if (propertyKey !== void 0) {
|
|
80
|
-
decorator(target, propertyKey, descriptor);
|
|
81
|
-
} else {
|
|
82
|
-
decorator(target);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function Meta(key, value) {
|
|
88
|
-
return (target, propertyKey, _descriptor) => {
|
|
89
|
-
const routeMeta = Reflect.getMetadata(ROUTES_META_KEY, target, String(propertyKey));
|
|
90
|
-
if (routeMeta) {
|
|
91
|
-
if (!routeMeta.meta) routeMeta.meta = {};
|
|
92
|
-
routeMeta.meta[key] = value;
|
|
93
|
-
Reflect.defineMetadata(ROUTES_META_KEY, routeMeta, target, String(propertyKey));
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export { Body, Controller, Cookies, Delete, Get, Head, Headers, Ip, Meta, NextFunc, Options, Param, Patch, Post, Put, Query, Req, Res, Session, UseMiddleware, applyDecorators };
|
|
99
|
-
//# sourceMappingURL=chunk-TC6N6TJZ.mjs.map
|
|
100
|
-
//# sourceMappingURL=chunk-TC6N6TJZ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/decorators/Route.ts"],"names":[],"mappings":";AAGA,IAAM,mBAAA,GAAsB,kBAAA;AAC5B,IAAM,eAAA,GAAkB,cAAA;AACxB,IAAM,eAAA,GAAkB,cAAA;AACxB,IAAM,oBAAA,GAAuB,mBAAA;AAE7B,SAAS,aAAA,GAAsB;AAC7B,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,QAAQ,WAAA,EAAa;AAC1D,IAAA,MAAM,KAAA,uBAAY,GAAA,EAA2B;AAC7C,IAAC,QAAgB,cAAA,GAAiB,CAAC,GAAA,EAAa,KAAA,EAAY,QAAa,IAAA,KAAkB;AACzF,MAAA,MAAM,IAAI,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,GAAA;AACrC,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,QAAS,GAAA,CAAI,CAAA,kBAAG,IAAI,GAAA,EAAK,CAAA;AACzC,MAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,CAAG,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,IACjC,CAAA;AACA,IAAC,OAAA,CAAgB,WAAA,GAAc,CAAC,GAAA,EAAa,QAAa,IAAA,KAAkB;AAC1E,MAAA,MAAM,IAAI,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,GAAA;AACrC,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,IAAI,MAAM,CAAA;AAAA,IACjC,CAAA;AAAA,EACF;AACF;AAEA,aAAA,EAAc;AAEP,SAAS,UAAA,CAAW,SAAiB,EAAA,EAAoB;AAC9D,EAAA,OAAO,CAAC,MAAA,KAAW;AACjB,IAAA,OAAA,CAAQ,cAAA,CAAe,mBAAA,EAAqB,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC5D,CAAA;AACF;AAEA,SAAS,sBAAsB,MAAA,EAAoB;AACjD,EAAA,OAAO,CAAC,OAAe,EAAA,KAAwB;AAC7C,IAAA,OAAO,CAAC,MAAA,EAAQ,WAAA,EAAa,WAAA,KAAgB;AAC3C,MAAA,OAAA,CAAQ,cAAA;AAAA,QACN,eAAA;AAAA,QACA,EAAE,MAAA,EAAQ,IAAA,EAAM,WAAA,EAAa,OAAO,WAAW,CAAA,EAAG,WAAA,EAAa,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAG,MAAM,MAAA,EAAU;AAAA,QAC/F,MAAA;AAAA,QACA,OAAO,WAAW;AAAA,OACpB;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAEO,IAAM,GAAA,GAAM,sBAAsB,KAAK;AACvC,IAAM,IAAA,GAAO,sBAAsB,MAAM;AACzC,IAAM,GAAA,GAAM,sBAAsB,KAAK;AACvC,IAAM,MAAA,GAAS,sBAAsB,QAAQ;AAC7C,IAAM,KAAA,GAAQ,sBAAsB,OAAO;AAC3C,IAAM,IAAA,GAAO,sBAAsB,MAAM;AACzC,IAAM,OAAA,GAAU,sBAAsB,SAAS;AAEtD,SAAS,qBAAqB,IAAA,EAA6B;AACzD,EAAA,OAAO,CAAC,IAAA,KAAsC;AAC5C,IAAA,OAAO,CAAC,MAAA,EAAQ,WAAA,EAAa,cAAA,KAAmB;AAC9C,MAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,MAAA,MAAM,WAA4B,OAAA,CAAQ,WAAA,CAAY,iBAAiB,MAAA,EAAQ,GAAG,KAAK,EAAC;AACxF,MAAA,QAAA,CAAS,KAAK,EAAE,KAAA,EAAO,cAAA,EAAgB,IAAA,EAAM,MAAM,CAAA;AACnD,MAAA,OAAA,CAAQ,cAAA,CAAe,eAAA,EAAiB,QAAA,EAAU,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC/D,CAAA;AAAA,EACF,CAAA;AACF;AAEO,IAAM,IAAA,GAAO,qBAAqB,MAAM;AACxC,IAAM,KAAA,GAAQ,qBAAqB,OAAO;AAC1C,IAAM,KAAA,GAAQ,qBAAqB,OAAO;AAC1C,IAAM,OAAA,GAAU,qBAAqB,QAAQ;AAC7C,IAAM,OAAA,GAAU,qBAAqB,QAAQ;AAC7C,IAAM,GAAA,GAAM,qBAAqB,KAAK;AACtC,IAAM,GAAA,GAAM,qBAAqB,KAAK;AACtC,IAAM,QAAA,GAAW,qBAAqB,MAAM;AAC5C,IAAM,EAAA,GAAK,qBAAqB,IAAI;AACpC,IAAM,OAAA,GAAU,qBAAqB,SAAS;AAE9C,SAAS,iBAAiB,WAAA,EAAoE;AACnG,EAAA,OAAO,CAAC,MAAA,EAAa,WAAA,EAA+B,WAAA,KAAqC;AACvF,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,QAAA,GACJ,QAAQ,WAAA,CAAY,oBAAA,EAAsB,QAAQ,MAAA,CAAO,WAAW,CAAC,CAAA,IAAK,EAAC;AAC7E,MAAA,OAAA,CAAQ,cAAA,CAAe,oBAAA,EAAsB,CAAC,GAAG,QAAA,EAAU,GAAG,WAAW,CAAA,EAAG,MAAA,EAAQ,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,MAAM,WACJ,OAAA,CAAQ,WAAA,CAAY,oBAAA,EAAsB,MAAM,KAAK,EAAC;AACxD,MAAA,OAAA,CAAQ,cAAA,CAAe,sBAAsB,CAAC,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAA;AAAA,IACpF;AAAA,EACF,CAAA;AACF;AAEO,SAAS,mBAAmB,UAAA,EAAoF;AACrH,EAAA,OAAO,CAAC,MAAA,EAAa,WAAA,EAA+B,UAAA,KAAoC;AACtF,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,QAAC,SAAA,CAA8B,MAAA,EAAQ,WAAA,EAAa,UAAW,CAAA;AAAA,MACjE,CAAA,MAAO;AACL,QAAC,UAA6B,MAAM,CAAA;AAAA,MACtC;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAEO,SAAS,IAAA,CAAK,KAAa,KAAA,EAA6B;AAC7D,EAAA,OAAO,CAAC,MAAA,EAAQ,WAAA,EAAa,WAAA,KAAgB;AAC3C,IAAA,MAAM,YAAY,OAAA,CAAQ,WAAA,CAAY,iBAAiB,MAAA,EAAQ,MAAA,CAAO,WAAW,CAAC,CAAA;AAClF,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI,CAAC,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,OAAO,EAAC;AACvC,MAAA,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AACtB,MAAA,OAAA,CAAQ,eAAe,eAAA,EAAiB,SAAA,EAAW,MAAA,EAAQ,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IAChF;AAAA,EACF,CAAA;AACF","file":"chunk-TC6N6TJZ.mjs","sourcesContent":["import type { HttpMethod, MiddlewareHandler } from \"../types/common.type.js\";\r\nimport type { ParamMetadata, RouteMeta } from \"../types/routes.type.js\";\r\n\r\nconst CONTROLLER_META_KEY = \"azura:controller\";\r\nconst ROUTES_META_KEY = \"azura:routes\";\r\nconst PARAMS_META_KEY = \"azura:params\";\r\nconst MIDDLEWARES_META_KEY = \"azura:middlewares\";\r\n\r\nfunction ensureReflect(): void {\r\n if (typeof Reflect === \"undefined\" || !Reflect.getMetadata) {\r\n const store = new Map<string, Map<any, any>>();\r\n (Reflect as any).defineMetadata = (key: string, value: any, target: any, prop?: string) => {\r\n const k = prop ? `${key}::${prop}` : key;\r\n if (!store.has(k)) store.set(k, new Map());\r\n store.get(k)!.set(target, value);\r\n };\r\n (Reflect as any).getMetadata = (key: string, target: any, prop?: string) => {\r\n const k = prop ? `${key}::${prop}` : key;\r\n return store.get(k)?.get(target);\r\n };\r\n }\r\n}\r\n\r\nensureReflect();\r\n\r\nexport function Controller(prefix: string = \"\"): ClassDecorator {\r\n return (target) => {\r\n Reflect.defineMetadata(CONTROLLER_META_KEY, prefix, target);\r\n };\r\n}\r\n\r\nfunction createMethodDecorator(method: HttpMethod) {\r\n return (path: string = \"\"): MethodDecorator => {\r\n return (target, propertyKey, _descriptor) => {\r\n Reflect.defineMetadata(\r\n ROUTES_META_KEY,\r\n { method, path, propertyKey: String(propertyKey), middlewares: [], params: [], meta: undefined },\r\n target,\r\n String(propertyKey),\r\n );\r\n };\r\n };\r\n}\r\n\r\nexport const Get = createMethodDecorator(\"GET\");\r\nexport const Post = createMethodDecorator(\"POST\");\r\nexport const Put = createMethodDecorator(\"PUT\");\r\nexport const Delete = createMethodDecorator(\"DELETE\");\r\nexport const Patch = createMethodDecorator(\"PATCH\");\r\nexport const Head = createMethodDecorator(\"HEAD\");\r\nexport const Options = createMethodDecorator(\"OPTIONS\");\r\n\r\nfunction createParamDecorator(type: ParamMetadata[\"type\"]) {\r\n return (name?: string): ParameterDecorator => {\r\n return (target, propertyKey, parameterIndex) => {\r\n const key = String(propertyKey);\r\n const existing: ParamMetadata[] = Reflect.getMetadata(PARAMS_META_KEY, target, key) ?? [];\r\n existing.push({ index: parameterIndex, type, name });\r\n Reflect.defineMetadata(PARAMS_META_KEY, existing, target, key);\r\n };\r\n };\r\n}\r\n\r\nexport const Body = createParamDecorator(\"body\");\r\nexport const Query = createParamDecorator(\"query\");\r\nexport const Param = createParamDecorator(\"param\");\r\nexport const Headers = createParamDecorator(\"header\");\r\nexport const Cookies = createParamDecorator(\"cookie\");\r\nexport const Req = createParamDecorator(\"req\");\r\nexport const Res = createParamDecorator(\"res\");\r\nexport const NextFunc = createParamDecorator(\"next\");\r\nexport const Ip = createParamDecorator(\"ip\");\r\nexport const Session = createParamDecorator(\"session\");\r\n\r\nexport function UseMiddleware(...middlewares: MiddlewareHandler[]): MethodDecorator & ClassDecorator {\r\n return (target: any, propertyKey?: string | symbol, _descriptor?: PropertyDescriptor) => {\r\n if (propertyKey) {\r\n const existing: MiddlewareHandler[] =\r\n Reflect.getMetadata(MIDDLEWARES_META_KEY, target, String(propertyKey)) ?? [];\r\n Reflect.defineMetadata(MIDDLEWARES_META_KEY, [...existing, ...middlewares], target, String(propertyKey));\r\n } else {\r\n const existing: MiddlewareHandler[] =\r\n Reflect.getMetadata(MIDDLEWARES_META_KEY, target) ?? [];\r\n Reflect.defineMetadata(MIDDLEWARES_META_KEY, [...existing, ...middlewares], target);\r\n }\r\n };\r\n}\r\n\r\nexport function applyDecorators(...decorators: (MethodDecorator | ClassDecorator)[]): MethodDecorator & ClassDecorator {\r\n return (target: any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\r\n for (const decorator of decorators) {\r\n if (propertyKey !== undefined) {\r\n (decorator as MethodDecorator)(target, propertyKey, descriptor!);\r\n } else {\r\n (decorator as ClassDecorator)(target);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function Meta(key: string, value: any): MethodDecorator {\r\n return (target, propertyKey, _descriptor) => {\r\n const routeMeta = Reflect.getMetadata(ROUTES_META_KEY, target, String(propertyKey));\r\n if (routeMeta) {\r\n if (!routeMeta.meta) routeMeta.meta = {};\r\n routeMeta.meta[key] = value;\r\n Reflect.defineMetadata(ROUTES_META_KEY, routeMeta, target, String(propertyKey));\r\n }\r\n };\r\n}\r\n"]}
|