azurajs 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +244 -7
  2. package/dist/LoggingMiddleware-BQKJUBqT.d.ts +6 -0
  3. package/dist/LoggingMiddleware-CYNvypha.d.cts +6 -0
  4. package/dist/Server-Ba-EFdi2.d.ts +53 -0
  5. package/dist/Server-CY3k1FIL.d.cts +53 -0
  6. package/dist/common.type-BoV71o_C.d.ts +11 -0
  7. package/dist/common.type-Ct06XeYQ.d.cts +11 -0
  8. package/dist/config.cjs +89 -0
  9. package/dist/config.cjs.map +1 -0
  10. package/dist/config.d.cts +51 -0
  11. package/dist/config.d.ts +51 -0
  12. package/dist/config.js +83 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/cookies.cjs +32 -0
  15. package/dist/cookies.cjs.map +1 -0
  16. package/dist/cookies.d.cts +8 -0
  17. package/dist/cookies.d.ts +8 -0
  18. package/dist/cookies.js +29 -0
  19. package/dist/cookies.js.map +1 -0
  20. package/dist/cors.cjs +29 -0
  21. package/dist/cors.cjs.map +1 -0
  22. package/dist/cors.d.cts +14 -0
  23. package/dist/cors.d.ts +14 -0
  24. package/dist/cors.js +27 -0
  25. package/dist/cors.js.map +1 -0
  26. package/dist/decorators.cjs +141 -0
  27. package/dist/decorators.cjs.map +1 -0
  28. package/dist/decorators.d.cts +29 -0
  29. package/dist/decorators.d.ts +29 -0
  30. package/dist/decorators.js +122 -0
  31. package/dist/decorators.js.map +1 -0
  32. package/dist/http-error.cjs +14 -0
  33. package/dist/http-error.cjs.map +1 -0
  34. package/dist/http-error.d.cts +7 -0
  35. package/dist/http-error.d.ts +7 -0
  36. package/dist/http-error.js +12 -0
  37. package/dist/http-error.js.map +1 -0
  38. package/dist/index.cjs +910 -0
  39. package/dist/index.cjs.map +1 -0
  40. package/dist/index.d.cts +8 -0
  41. package/dist/index.d.ts +8 -0
  42. package/dist/index.js +899 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/infra.cjs +811 -0
  45. package/dist/infra.cjs.map +1 -0
  46. package/dist/infra.d.cts +8 -0
  47. package/dist/infra.d.ts +8 -0
  48. package/dist/infra.js +800 -0
  49. package/dist/infra.js.map +1 -0
  50. package/dist/logger.cjs +26 -0
  51. package/dist/logger.cjs.map +1 -0
  52. package/dist/logger.d.cts +8 -0
  53. package/dist/logger.d.ts +8 -0
  54. package/dist/logger.js +24 -0
  55. package/dist/logger.js.map +1 -0
  56. package/dist/middleware.cjs +117 -0
  57. package/dist/middleware.cjs.map +1 -0
  58. package/dist/middleware.d.cts +10 -0
  59. package/dist/middleware.d.ts +10 -0
  60. package/dist/middleware.js +114 -0
  61. package/dist/middleware.js.map +1 -0
  62. package/dist/plugins.cjs +52 -0
  63. package/dist/plugins.cjs.map +1 -0
  64. package/dist/plugins.d.cts +6 -0
  65. package/dist/plugins.d.ts +6 -0
  66. package/dist/plugins.js +49 -0
  67. package/dist/plugins.js.map +1 -0
  68. package/dist/rate-limit.cjs +27 -0
  69. package/dist/rate-limit.cjs.map +1 -0
  70. package/dist/rate-limit.d.cts +8 -0
  71. package/dist/rate-limit.d.ts +8 -0
  72. package/dist/rate-limit.js +25 -0
  73. package/dist/rate-limit.js.map +1 -0
  74. package/dist/request.type-CJ-EGGcM.d.cts +22 -0
  75. package/dist/request.type-CJ-EGGcM.d.ts +22 -0
  76. package/dist/response.type-d6e6eU9D.d.cts +33 -0
  77. package/dist/response.type-d6e6eU9D.d.ts +33 -0
  78. package/dist/router.cjs +111 -0
  79. package/dist/router.cjs.map +1 -0
  80. package/dist/router.d.cts +27 -0
  81. package/dist/router.d.ts +27 -0
  82. package/dist/router.js +109 -0
  83. package/dist/router.js.map +1 -0
  84. package/dist/routes.type-VPROfhnL.d.cts +14 -0
  85. package/dist/routes.type-VPROfhnL.d.ts +14 -0
  86. package/dist/types.cjs +4 -0
  87. package/dist/types.cjs.map +1 -0
  88. package/dist/types.d.cts +6 -0
  89. package/dist/types.d.ts +6 -0
  90. package/dist/types.js +3 -0
  91. package/dist/types.js.map +1 -0
  92. package/dist/utils.cjs +149 -0
  93. package/dist/utils.cjs.map +1 -0
  94. package/dist/utils.d.cts +10 -0
  95. package/dist/utils.d.ts +10 -0
  96. package/dist/utils.js +141 -0
  97. package/dist/utils.js.map +1 -0
  98. package/dist/validations.type-D4ZhF5g6.d.cts +6 -0
  99. package/dist/validations.type-D4ZhF5g6.d.ts +6 -0
  100. package/dist/validators.cjs +69 -0
  101. package/dist/validators.cjs.map +1 -0
  102. package/dist/validators.d.cts +11 -0
  103. package/dist/validators.d.ts +11 -0
  104. package/dist/validators.js +65 -0
  105. package/dist/validators.js.map +1 -0
  106. package/package.json +85 -66
  107. package/src/index.ts +1 -3
  108. package/src/infra/Router.ts +53 -3
  109. package/src/infra/Server.ts +37 -10
  110. package/src/infra/index.ts +1 -1
  111. package/src/shared/config/ConfigModule.ts +1 -0
package/dist/utils.cjs ADDED
@@ -0,0 +1,149 @@
1
+ 'use strict';
2
+
3
+ // src/utils/Logger.ts
4
+ var RESET = "\x1B[0m";
5
+ var COLORS = {
6
+ info: "\x1B[36m",
7
+ warn: "\x1B[33m",
8
+ error: "\x1B[31m"
9
+ };
10
+ var LEVEL_LABELS = {
11
+ info: "INFO",
12
+ warn: "WARN",
13
+ error: "ERROR"
14
+ };
15
+ function logger(level, msg) {
16
+ const color = COLORS[level];
17
+ const levelLabel = LEVEL_LABELS[level];
18
+ const prefix = `${color}[Azura:${levelLabel}]${RESET}`;
19
+ (level === "error" ? console.error : level === "warn" ? console.warn : console.log)(
20
+ `${prefix} ${msg}`
21
+ );
22
+ }
23
+
24
+ // src/utils/Parser.ts
25
+ function parseQS(qs) {
26
+ const out = {};
27
+ if (!qs) return out;
28
+ const parts = qs.split("&");
29
+ for (let i = 0; i < parts.length; i++) {
30
+ const p = parts[i];
31
+ if (!p) continue;
32
+ const idx = p.indexOf("=");
33
+ if (idx === -1) {
34
+ out[decodeURIComponent(p)] = "";
35
+ continue;
36
+ }
37
+ const k = decodeURIComponent(p.slice(0, idx));
38
+ const v = decodeURIComponent(p.slice(idx + 1));
39
+ const existing = out[k];
40
+ if (existing !== void 0) {
41
+ if (Array.isArray(existing)) {
42
+ existing.push(v);
43
+ } else {
44
+ out[k] = [existing, v];
45
+ }
46
+ } else {
47
+ out[k] = v;
48
+ }
49
+ }
50
+ return out;
51
+ }
52
+
53
+ // src/utils/cookies/ParserCookie.ts
54
+ function parseCookiesHeader(header) {
55
+ if (!header) return {};
56
+ return header.split(";").reduce((acc, pair) => {
57
+ const [k, ...vals] = pair.trim().split("=");
58
+ if (!k) return acc;
59
+ acc[k] = decodeURIComponent(vals.join("="));
60
+ return acc;
61
+ }, {});
62
+ }
63
+
64
+ // src/utils/cookies/SerializeCookie.ts
65
+ function serializeCookie(name, val, opts = {}) {
66
+ const encode = opts.encode ?? encodeURIComponent;
67
+ let str = `${name}=${encode(val)}`;
68
+ if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))
69
+ str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;
70
+ if (opts.domain) str += `; Domain=${opts.domain}`;
71
+ if (opts.path) str += `; Path=${opts.path}`;
72
+ if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;
73
+ if (opts.httpOnly) str += `; HttpOnly`;
74
+ if (opts.secure) str += `; Secure`;
75
+ if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;
76
+ return str;
77
+ }
78
+
79
+ // src/utils/validators/DTOValidator.ts
80
+ var DTOS = /* @__PURE__ */ new WeakMap();
81
+ function validateDto(dto) {
82
+ return (target, propertyKey, parameterIndex) => {
83
+ const ctor = typeof target === "function" ? target : target.constructor;
84
+ let map = DTOS.get(ctor);
85
+ if (!map) {
86
+ map = /* @__PURE__ */ new Map();
87
+ DTOS.set(ctor, map);
88
+ }
89
+ const key = String(propertyKey);
90
+ const list = map.get(key) ?? [];
91
+ list.push({
92
+ index: parameterIndex,
93
+ dto
94
+ });
95
+ map.set(key, list);
96
+ };
97
+ }
98
+ function getDtoValidators(ctor, propertyKey) {
99
+ return DTOS.get(ctor)?.get(propertyKey) ?? [];
100
+ }
101
+
102
+ // src/infra/utils/HttpError.ts
103
+ var HttpError = class extends Error {
104
+ constructor(status, message, payload) {
105
+ super(message ?? String(message ?? "Error"));
106
+ this.status = status;
107
+ this.payload = payload;
108
+ }
109
+ };
110
+
111
+ // src/utils/validators/SchemaValidator.ts
112
+ function isSchemaObject(schema) {
113
+ return typeof schema === "object" && !Array.isArray(schema);
114
+ }
115
+ function validateSchema(schema, data) {
116
+ if (typeof data !== "object" || data === null) {
117
+ throw new HttpError(400, "Payload inv\xE1lido");
118
+ }
119
+ if (!isSchemaObject(schema)) {
120
+ throw new Error("Schema inv\xE1lido: deve ser um objeto no topo");
121
+ }
122
+ const obj = data;
123
+ for (const key of Object.keys(schema)) {
124
+ const rule = schema[key];
125
+ const val = obj[key];
126
+ if (!rule) continue;
127
+ if (typeof rule === "string") {
128
+ if (typeof val !== rule) {
129
+ throw new HttpError(400, `${key} deve ser ${rule}`);
130
+ }
131
+ } else if (Array.isArray(rule)) {
132
+ if (!Array.isArray(val)) {
133
+ throw new HttpError(400, `${key} deve ser array`);
134
+ }
135
+ } else if (isSchemaObject(rule)) {
136
+ validateSchema(rule, val);
137
+ }
138
+ }
139
+ }
140
+
141
+ exports.getDtoValidators = getDtoValidators;
142
+ exports.logger = logger;
143
+ exports.parseCookiesHeader = parseCookiesHeader;
144
+ exports.parseQS = parseQS;
145
+ exports.serializeCookie = serializeCookie;
146
+ exports.validateDto = validateDto;
147
+ exports.validateSchema = validateSchema;
148
+ //# sourceMappingURL=utils.cjs.map
149
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/ParserCookie.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/validators/DTOValidator.ts","../src/infra/utils/HttpError.ts","../src/utils/validators/SchemaValidator.ts"],"names":[],"mappings":"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","file":"utils.cjs","sourcesContent":["const RESET = \"\\x1b[0m\";\nconst COLORS = {\n info: \"\\x1b[36m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n};\n\nconst LEVEL_LABELS = {\n info: \"INFO\",\n warn: \"WARN\",\n error: \"ERROR\",\n};\n\nexport function logger(level: keyof typeof COLORS, msg: string) {\n const color = COLORS[level];\n const levelLabel = LEVEL_LABELS[level];\n\n const prefix = `${color}[Azura:${levelLabel}]${RESET}`;\n\n (level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log)(\n `${prefix} ${msg}`\n );\n}\n","export function parseQS(qs: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n if (!qs) return out;\n \n const parts = qs.split(\"&\");\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n if (!p) continue;\n \n const idx = p.indexOf(\"=\");\n if (idx === -1) {\n out[decodeURIComponent(p)] = \"\";\n continue;\n }\n \n const k = decodeURIComponent(p.slice(0, idx));\n const v = decodeURIComponent(p.slice(idx + 1));\n \n const existing = out[k];\n if (existing !== undefined) {\n if (Array.isArray(existing)) {\n existing.push(v);\n } else {\n out[k] = [existing as string, v];\n }\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n","export function parseCookiesHeader(header: string | undefined): Record<string, string> {\n if (!header) return {};\n return header.split(\";\").reduce<Record<string, string>>((acc, pair) => {\n const [k, ...vals] = pair.trim().split(\"=\");\n if (!k) return acc;\n acc[k] = decodeURIComponent(vals.join(\"=\"));\n return acc;\n }, {});\n}\n","import type { CookieOptions } from \"../../types/http/response.type\";\n\nexport function serializeCookie(name: string, val: string, opts: CookieOptions = {}): string {\n const encode = opts.encode ?? encodeURIComponent;\n let str = `${name}=${encode(val)}`;\n if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))\n str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;\n if (opts.domain) str += `; Domain=${opts.domain}`;\n if (opts.path) str += `; Path=${opts.path}`;\n if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;\n if (opts.httpOnly) str += `; HttpOnly`;\n if (opts.secure) str += `; Secure`;\n if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;\n return str;\n}\n","const DTOS = new WeakMap<Function, Map<string, Array<{ index: number; dto: unknown }>>>();\n\nexport function validateDto(dto: unknown): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n const ctor = typeof target === \"function\" ? (target as Function) : (target as any).constructor;\n\n let map = DTOS.get(ctor);\n if (!map) {\n map = new Map();\n DTOS.set(ctor, map);\n }\n\n const key = String(propertyKey);\n const list = map.get(key) ?? [];\n\n list.push({\n index: parameterIndex,\n dto,\n });\n\n map.set(key, list);\n };\n}\n\nexport function getDtoValidators(\n ctor: Function,\n propertyKey: string\n): Array<{ index: number; dto: unknown }> {\n return DTOS.get(ctor)?.get(propertyKey) ?? [];\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","import { HttpError } from \"../../infra/utils/HttpError\";\nimport type { Schema } from \"../../types/validations.type\";\n\nfunction isSchemaObject(schema: Schema): schema is Record<string, Schema> {\n return typeof schema === \"object\" && !Array.isArray(schema);\n}\n\nexport function validateSchema(schema: Schema, data: unknown): void {\n if (typeof data !== \"object\" || data === null) {\n throw new HttpError(400, \"Payload inválido\");\n }\n\n if (!isSchemaObject(schema)) {\n throw new Error(\"Schema inválido: deve ser um objeto no topo\");\n }\n\n const obj = data as Record<string, unknown>;\n\n for (const key of Object.keys(schema)) {\n const rule = schema[key];\n const val = obj[key];\n\n if (!rule) continue;\n\n if (typeof rule === \"string\") {\n if (typeof val !== rule) {\n throw new HttpError(400, `${key} deve ser ${rule}`);\n }\n } else if (Array.isArray(rule)) {\n if (!Array.isArray(val)) {\n throw new HttpError(400, `${key} deve ser array`);\n }\n } else if (isSchemaObject(rule)) {\n validateSchema(rule, val);\n }\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export { logger } from './logger.cjs';
2
+ export { parseCookiesHeader, serializeCookie } from './cookies.cjs';
3
+ export { getDtoValidators, validateDto, validateSchema } from './validators.cjs';
4
+ import './response.type-d6e6eU9D.cjs';
5
+ import 'node:http';
6
+ import './validations.type-D4ZhF5g6.cjs';
7
+
8
+ declare function parseQS(qs: string): Record<string, string | string[]>;
9
+
10
+ export { parseQS };
@@ -0,0 +1,10 @@
1
+ export { logger } from './logger.js';
2
+ export { parseCookiesHeader, serializeCookie } from './cookies.js';
3
+ export { getDtoValidators, validateDto, validateSchema } from './validators.js';
4
+ import './response.type-d6e6eU9D.js';
5
+ import 'node:http';
6
+ import './validations.type-D4ZhF5g6.js';
7
+
8
+ declare function parseQS(qs: string): Record<string, string | string[]>;
9
+
10
+ export { parseQS };
package/dist/utils.js ADDED
@@ -0,0 +1,141 @@
1
+ // src/utils/Logger.ts
2
+ var RESET = "\x1B[0m";
3
+ var COLORS = {
4
+ info: "\x1B[36m",
5
+ warn: "\x1B[33m",
6
+ error: "\x1B[31m"
7
+ };
8
+ var LEVEL_LABELS = {
9
+ info: "INFO",
10
+ warn: "WARN",
11
+ error: "ERROR"
12
+ };
13
+ function logger(level, msg) {
14
+ const color = COLORS[level];
15
+ const levelLabel = LEVEL_LABELS[level];
16
+ const prefix = `${color}[Azura:${levelLabel}]${RESET}`;
17
+ (level === "error" ? console.error : level === "warn" ? console.warn : console.log)(
18
+ `${prefix} ${msg}`
19
+ );
20
+ }
21
+
22
+ // src/utils/Parser.ts
23
+ function parseQS(qs) {
24
+ const out = {};
25
+ if (!qs) return out;
26
+ const parts = qs.split("&");
27
+ for (let i = 0; i < parts.length; i++) {
28
+ const p = parts[i];
29
+ if (!p) continue;
30
+ const idx = p.indexOf("=");
31
+ if (idx === -1) {
32
+ out[decodeURIComponent(p)] = "";
33
+ continue;
34
+ }
35
+ const k = decodeURIComponent(p.slice(0, idx));
36
+ const v = decodeURIComponent(p.slice(idx + 1));
37
+ const existing = out[k];
38
+ if (existing !== void 0) {
39
+ if (Array.isArray(existing)) {
40
+ existing.push(v);
41
+ } else {
42
+ out[k] = [existing, v];
43
+ }
44
+ } else {
45
+ out[k] = v;
46
+ }
47
+ }
48
+ return out;
49
+ }
50
+
51
+ // src/utils/cookies/ParserCookie.ts
52
+ function parseCookiesHeader(header) {
53
+ if (!header) return {};
54
+ return header.split(";").reduce((acc, pair) => {
55
+ const [k, ...vals] = pair.trim().split("=");
56
+ if (!k) return acc;
57
+ acc[k] = decodeURIComponent(vals.join("="));
58
+ return acc;
59
+ }, {});
60
+ }
61
+
62
+ // src/utils/cookies/SerializeCookie.ts
63
+ function serializeCookie(name, val, opts = {}) {
64
+ const encode = opts.encode ?? encodeURIComponent;
65
+ let str = `${name}=${encode(val)}`;
66
+ if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))
67
+ str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;
68
+ if (opts.domain) str += `; Domain=${opts.domain}`;
69
+ if (opts.path) str += `; Path=${opts.path}`;
70
+ if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;
71
+ if (opts.httpOnly) str += `; HttpOnly`;
72
+ if (opts.secure) str += `; Secure`;
73
+ if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;
74
+ return str;
75
+ }
76
+
77
+ // src/utils/validators/DTOValidator.ts
78
+ var DTOS = /* @__PURE__ */ new WeakMap();
79
+ function validateDto(dto) {
80
+ return (target, propertyKey, parameterIndex) => {
81
+ const ctor = typeof target === "function" ? target : target.constructor;
82
+ let map = DTOS.get(ctor);
83
+ if (!map) {
84
+ map = /* @__PURE__ */ new Map();
85
+ DTOS.set(ctor, map);
86
+ }
87
+ const key = String(propertyKey);
88
+ const list = map.get(key) ?? [];
89
+ list.push({
90
+ index: parameterIndex,
91
+ dto
92
+ });
93
+ map.set(key, list);
94
+ };
95
+ }
96
+ function getDtoValidators(ctor, propertyKey) {
97
+ return DTOS.get(ctor)?.get(propertyKey) ?? [];
98
+ }
99
+
100
+ // src/infra/utils/HttpError.ts
101
+ var HttpError = class extends Error {
102
+ constructor(status, message, payload) {
103
+ super(message ?? String(message ?? "Error"));
104
+ this.status = status;
105
+ this.payload = payload;
106
+ }
107
+ };
108
+
109
+ // src/utils/validators/SchemaValidator.ts
110
+ function isSchemaObject(schema) {
111
+ return typeof schema === "object" && !Array.isArray(schema);
112
+ }
113
+ function validateSchema(schema, data) {
114
+ if (typeof data !== "object" || data === null) {
115
+ throw new HttpError(400, "Payload inv\xE1lido");
116
+ }
117
+ if (!isSchemaObject(schema)) {
118
+ throw new Error("Schema inv\xE1lido: deve ser um objeto no topo");
119
+ }
120
+ const obj = data;
121
+ for (const key of Object.keys(schema)) {
122
+ const rule = schema[key];
123
+ const val = obj[key];
124
+ if (!rule) continue;
125
+ if (typeof rule === "string") {
126
+ if (typeof val !== rule) {
127
+ throw new HttpError(400, `${key} deve ser ${rule}`);
128
+ }
129
+ } else if (Array.isArray(rule)) {
130
+ if (!Array.isArray(val)) {
131
+ throw new HttpError(400, `${key} deve ser array`);
132
+ }
133
+ } else if (isSchemaObject(rule)) {
134
+ validateSchema(rule, val);
135
+ }
136
+ }
137
+ }
138
+
139
+ export { getDtoValidators, logger, parseCookiesHeader, parseQS, serializeCookie, validateDto, validateSchema };
140
+ //# sourceMappingURL=utils.js.map
141
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/ParserCookie.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/validators/DTOValidator.ts","../src/infra/utils/HttpError.ts","../src/utils/validators/SchemaValidator.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["const RESET = \"\\x1b[0m\";\nconst COLORS = {\n info: \"\\x1b[36m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n};\n\nconst LEVEL_LABELS = {\n info: \"INFO\",\n warn: \"WARN\",\n error: \"ERROR\",\n};\n\nexport function logger(level: keyof typeof COLORS, msg: string) {\n const color = COLORS[level];\n const levelLabel = LEVEL_LABELS[level];\n\n const prefix = `${color}[Azura:${levelLabel}]${RESET}`;\n\n (level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log)(\n `${prefix} ${msg}`\n );\n}\n","export function parseQS(qs: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n if (!qs) return out;\n \n const parts = qs.split(\"&\");\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n if (!p) continue;\n \n const idx = p.indexOf(\"=\");\n if (idx === -1) {\n out[decodeURIComponent(p)] = \"\";\n continue;\n }\n \n const k = decodeURIComponent(p.slice(0, idx));\n const v = decodeURIComponent(p.slice(idx + 1));\n \n const existing = out[k];\n if (existing !== undefined) {\n if (Array.isArray(existing)) {\n existing.push(v);\n } else {\n out[k] = [existing as string, v];\n }\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n","export function parseCookiesHeader(header: string | undefined): Record<string, string> {\n if (!header) return {};\n return header.split(\";\").reduce<Record<string, string>>((acc, pair) => {\n const [k, ...vals] = pair.trim().split(\"=\");\n if (!k) return acc;\n acc[k] = decodeURIComponent(vals.join(\"=\"));\n return acc;\n }, {});\n}\n","import type { CookieOptions } from \"../../types/http/response.type\";\n\nexport function serializeCookie(name: string, val: string, opts: CookieOptions = {}): string {\n const encode = opts.encode ?? encodeURIComponent;\n let str = `${name}=${encode(val)}`;\n if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))\n str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;\n if (opts.domain) str += `; Domain=${opts.domain}`;\n if (opts.path) str += `; Path=${opts.path}`;\n if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;\n if (opts.httpOnly) str += `; HttpOnly`;\n if (opts.secure) str += `; Secure`;\n if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;\n return str;\n}\n","const DTOS = new WeakMap<Function, Map<string, Array<{ index: number; dto: unknown }>>>();\n\nexport function validateDto(dto: unknown): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n const ctor = typeof target === \"function\" ? (target as Function) : (target as any).constructor;\n\n let map = DTOS.get(ctor);\n if (!map) {\n map = new Map();\n DTOS.set(ctor, map);\n }\n\n const key = String(propertyKey);\n const list = map.get(key) ?? [];\n\n list.push({\n index: parameterIndex,\n dto,\n });\n\n map.set(key, list);\n };\n}\n\nexport function getDtoValidators(\n ctor: Function,\n propertyKey: string\n): Array<{ index: number; dto: unknown }> {\n return DTOS.get(ctor)?.get(propertyKey) ?? [];\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","import { HttpError } from \"../../infra/utils/HttpError\";\nimport type { Schema } from \"../../types/validations.type\";\n\nfunction isSchemaObject(schema: Schema): schema is Record<string, Schema> {\n return typeof schema === \"object\" && !Array.isArray(schema);\n}\n\nexport function validateSchema(schema: Schema, data: unknown): void {\n if (typeof data !== \"object\" || data === null) {\n throw new HttpError(400, \"Payload inválido\");\n }\n\n if (!isSchemaObject(schema)) {\n throw new Error(\"Schema inválido: deve ser um objeto no topo\");\n }\n\n const obj = data as Record<string, unknown>;\n\n for (const key of Object.keys(schema)) {\n const rule = schema[key];\n const val = obj[key];\n\n if (!rule) continue;\n\n if (typeof rule === \"string\") {\n if (typeof val !== rule) {\n throw new HttpError(400, `${key} deve ser ${rule}`);\n }\n } else if (Array.isArray(rule)) {\n if (!Array.isArray(val)) {\n throw new HttpError(400, `${key} deve ser array`);\n }\n } else if (isSchemaObject(rule)) {\n validateSchema(rule, val);\n }\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ type PrimitiveType = "string" | "number" | "boolean";
2
+ type Schema = PrimitiveType | Schema[] | {
3
+ [key: string]: Schema;
4
+ };
5
+
6
+ export type { Schema as S };
@@ -0,0 +1,6 @@
1
+ type PrimitiveType = "string" | "number" | "boolean";
2
+ type Schema = PrimitiveType | Schema[] | {
3
+ [key: string]: Schema;
4
+ };
5
+
6
+ export type { Schema as S };
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ // src/utils/validators/DTOValidator.ts
4
+ var DTOS = /* @__PURE__ */ new WeakMap();
5
+ function validateDto(dto) {
6
+ return (target, propertyKey, parameterIndex) => {
7
+ const ctor = typeof target === "function" ? target : target.constructor;
8
+ let map = DTOS.get(ctor);
9
+ if (!map) {
10
+ map = /* @__PURE__ */ new Map();
11
+ DTOS.set(ctor, map);
12
+ }
13
+ const key = String(propertyKey);
14
+ const list = map.get(key) ?? [];
15
+ list.push({
16
+ index: parameterIndex,
17
+ dto
18
+ });
19
+ map.set(key, list);
20
+ };
21
+ }
22
+ function getDtoValidators(ctor, propertyKey) {
23
+ return DTOS.get(ctor)?.get(propertyKey) ?? [];
24
+ }
25
+
26
+ // src/infra/utils/HttpError.ts
27
+ var HttpError = class extends Error {
28
+ constructor(status, message, payload) {
29
+ super(message ?? String(message ?? "Error"));
30
+ this.status = status;
31
+ this.payload = payload;
32
+ }
33
+ };
34
+
35
+ // src/utils/validators/SchemaValidator.ts
36
+ function isSchemaObject(schema) {
37
+ return typeof schema === "object" && !Array.isArray(schema);
38
+ }
39
+ function validateSchema(schema, data) {
40
+ if (typeof data !== "object" || data === null) {
41
+ throw new HttpError(400, "Payload inv\xE1lido");
42
+ }
43
+ if (!isSchemaObject(schema)) {
44
+ throw new Error("Schema inv\xE1lido: deve ser um objeto no topo");
45
+ }
46
+ const obj = data;
47
+ for (const key of Object.keys(schema)) {
48
+ const rule = schema[key];
49
+ const val = obj[key];
50
+ if (!rule) continue;
51
+ if (typeof rule === "string") {
52
+ if (typeof val !== rule) {
53
+ throw new HttpError(400, `${key} deve ser ${rule}`);
54
+ }
55
+ } else if (Array.isArray(rule)) {
56
+ if (!Array.isArray(val)) {
57
+ throw new HttpError(400, `${key} deve ser array`);
58
+ }
59
+ } else if (isSchemaObject(rule)) {
60
+ validateSchema(rule, val);
61
+ }
62
+ }
63
+ }
64
+
65
+ exports.getDtoValidators = getDtoValidators;
66
+ exports.validateDto = validateDto;
67
+ exports.validateSchema = validateSchema;
68
+ //# sourceMappingURL=validators.cjs.map
69
+ //# sourceMappingURL=validators.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/validators/DTOValidator.ts","../src/infra/utils/HttpError.ts","../src/utils/validators/SchemaValidator.ts"],"names":[],"mappings":"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","file":"validators.cjs","sourcesContent":["const DTOS = new WeakMap<Function, Map<string, Array<{ index: number; dto: unknown }>>>();\n\nexport function validateDto(dto: unknown): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n const ctor = typeof target === \"function\" ? (target as Function) : (target as any).constructor;\n\n let map = DTOS.get(ctor);\n if (!map) {\n map = new Map();\n DTOS.set(ctor, map);\n }\n\n const key = String(propertyKey);\n const list = map.get(key) ?? [];\n\n list.push({\n index: parameterIndex,\n dto,\n });\n\n map.set(key, list);\n };\n}\n\nexport function getDtoValidators(\n ctor: Function,\n propertyKey: string\n): Array<{ index: number; dto: unknown }> {\n return DTOS.get(ctor)?.get(propertyKey) ?? [];\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","import { HttpError } from \"../../infra/utils/HttpError\";\nimport type { Schema } from \"../../types/validations.type\";\n\nfunction isSchemaObject(schema: Schema): schema is Record<string, Schema> {\n return typeof schema === \"object\" && !Array.isArray(schema);\n}\n\nexport function validateSchema(schema: Schema, data: unknown): void {\n if (typeof data !== \"object\" || data === null) {\n throw new HttpError(400, \"Payload inválido\");\n }\n\n if (!isSchemaObject(schema)) {\n throw new Error(\"Schema inválido: deve ser um objeto no topo\");\n }\n\n const obj = data as Record<string, unknown>;\n\n for (const key of Object.keys(schema)) {\n const rule = schema[key];\n const val = obj[key];\n\n if (!rule) continue;\n\n if (typeof rule === \"string\") {\n if (typeof val !== rule) {\n throw new HttpError(400, `${key} deve ser ${rule}`);\n }\n } else if (Array.isArray(rule)) {\n if (!Array.isArray(val)) {\n throw new HttpError(400, `${key} deve ser array`);\n }\n } else if (isSchemaObject(rule)) {\n validateSchema(rule, val);\n }\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { S as Schema } from './validations.type-D4ZhF5g6.cjs';
2
+
3
+ declare function validateDto(dto: unknown): ParameterDecorator;
4
+ declare function getDtoValidators(ctor: Function, propertyKey: string): Array<{
5
+ index: number;
6
+ dto: unknown;
7
+ }>;
8
+
9
+ declare function validateSchema(schema: Schema, data: unknown): void;
10
+
11
+ export { getDtoValidators, validateDto, validateSchema };
@@ -0,0 +1,11 @@
1
+ import { S as Schema } from './validations.type-D4ZhF5g6.js';
2
+
3
+ declare function validateDto(dto: unknown): ParameterDecorator;
4
+ declare function getDtoValidators(ctor: Function, propertyKey: string): Array<{
5
+ index: number;
6
+ dto: unknown;
7
+ }>;
8
+
9
+ declare function validateSchema(schema: Schema, data: unknown): void;
10
+
11
+ export { getDtoValidators, validateDto, validateSchema };
@@ -0,0 +1,65 @@
1
+ // src/utils/validators/DTOValidator.ts
2
+ var DTOS = /* @__PURE__ */ new WeakMap();
3
+ function validateDto(dto) {
4
+ return (target, propertyKey, parameterIndex) => {
5
+ const ctor = typeof target === "function" ? target : target.constructor;
6
+ let map = DTOS.get(ctor);
7
+ if (!map) {
8
+ map = /* @__PURE__ */ new Map();
9
+ DTOS.set(ctor, map);
10
+ }
11
+ const key = String(propertyKey);
12
+ const list = map.get(key) ?? [];
13
+ list.push({
14
+ index: parameterIndex,
15
+ dto
16
+ });
17
+ map.set(key, list);
18
+ };
19
+ }
20
+ function getDtoValidators(ctor, propertyKey) {
21
+ return DTOS.get(ctor)?.get(propertyKey) ?? [];
22
+ }
23
+
24
+ // src/infra/utils/HttpError.ts
25
+ var HttpError = class extends Error {
26
+ constructor(status, message, payload) {
27
+ super(message ?? String(message ?? "Error"));
28
+ this.status = status;
29
+ this.payload = payload;
30
+ }
31
+ };
32
+
33
+ // src/utils/validators/SchemaValidator.ts
34
+ function isSchemaObject(schema) {
35
+ return typeof schema === "object" && !Array.isArray(schema);
36
+ }
37
+ function validateSchema(schema, data) {
38
+ if (typeof data !== "object" || data === null) {
39
+ throw new HttpError(400, "Payload inv\xE1lido");
40
+ }
41
+ if (!isSchemaObject(schema)) {
42
+ throw new Error("Schema inv\xE1lido: deve ser um objeto no topo");
43
+ }
44
+ const obj = data;
45
+ for (const key of Object.keys(schema)) {
46
+ const rule = schema[key];
47
+ const val = obj[key];
48
+ if (!rule) continue;
49
+ if (typeof rule === "string") {
50
+ if (typeof val !== rule) {
51
+ throw new HttpError(400, `${key} deve ser ${rule}`);
52
+ }
53
+ } else if (Array.isArray(rule)) {
54
+ if (!Array.isArray(val)) {
55
+ throw new HttpError(400, `${key} deve ser array`);
56
+ }
57
+ } else if (isSchemaObject(rule)) {
58
+ validateSchema(rule, val);
59
+ }
60
+ }
61
+ }
62
+
63
+ export { getDtoValidators, validateDto, validateSchema };
64
+ //# sourceMappingURL=validators.js.map
65
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/validators/DTOValidator.ts","../src/infra/utils/HttpError.ts","../src/utils/validators/SchemaValidator.ts"],"names":[],"mappings":"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","file":"validators.js","sourcesContent":["const DTOS = new WeakMap<Function, Map<string, Array<{ index: number; dto: unknown }>>>();\n\nexport function validateDto(dto: unknown): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n const ctor = typeof target === \"function\" ? (target as Function) : (target as any).constructor;\n\n let map = DTOS.get(ctor);\n if (!map) {\n map = new Map();\n DTOS.set(ctor, map);\n }\n\n const key = String(propertyKey);\n const list = map.get(key) ?? [];\n\n list.push({\n index: parameterIndex,\n dto,\n });\n\n map.set(key, list);\n };\n}\n\nexport function getDtoValidators(\n ctor: Function,\n propertyKey: string\n): Array<{ index: number; dto: unknown }> {\n return DTOS.get(ctor)?.get(propertyKey) ?? [];\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","import { HttpError } from \"../../infra/utils/HttpError\";\nimport type { Schema } from \"../../types/validations.type\";\n\nfunction isSchemaObject(schema: Schema): schema is Record<string, Schema> {\n return typeof schema === \"object\" && !Array.isArray(schema);\n}\n\nexport function validateSchema(schema: Schema, data: unknown): void {\n if (typeof data !== \"object\" || data === null) {\n throw new HttpError(400, \"Payload inválido\");\n }\n\n if (!isSchemaObject(schema)) {\n throw new Error(\"Schema inválido: deve ser um objeto no topo\");\n }\n\n const obj = data as Record<string, unknown>;\n\n for (const key of Object.keys(schema)) {\n const rule = schema[key];\n const val = obj[key];\n\n if (!rule) continue;\n\n if (typeof rule === \"string\") {\n if (typeof val !== rule) {\n throw new HttpError(400, `${key} deve ser ${rule}`);\n }\n } else if (Array.isArray(rule)) {\n if (!Array.isArray(val)) {\n throw new HttpError(400, `${key} deve ser array`);\n }\n } else if (isSchemaObject(rule)) {\n validateSchema(rule, val);\n }\n }\n}\n"]}