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.
- package/README.md +244 -7
- package/dist/LoggingMiddleware-BQKJUBqT.d.ts +6 -0
- package/dist/LoggingMiddleware-CYNvypha.d.cts +6 -0
- package/dist/Server-Ba-EFdi2.d.ts +53 -0
- package/dist/Server-CY3k1FIL.d.cts +53 -0
- package/dist/common.type-BoV71o_C.d.ts +11 -0
- package/dist/common.type-Ct06XeYQ.d.cts +11 -0
- package/dist/config.cjs +89 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.cts +51 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/cookies.cjs +32 -0
- package/dist/cookies.cjs.map +1 -0
- package/dist/cookies.d.cts +8 -0
- package/dist/cookies.d.ts +8 -0
- package/dist/cookies.js +29 -0
- package/dist/cookies.js.map +1 -0
- package/dist/cors.cjs +29 -0
- package/dist/cors.cjs.map +1 -0
- package/dist/cors.d.cts +14 -0
- package/dist/cors.d.ts +14 -0
- package/dist/cors.js +27 -0
- package/dist/cors.js.map +1 -0
- package/dist/decorators.cjs +141 -0
- package/dist/decorators.cjs.map +1 -0
- package/dist/decorators.d.cts +29 -0
- package/dist/decorators.d.ts +29 -0
- package/dist/decorators.js +122 -0
- package/dist/decorators.js.map +1 -0
- package/dist/http-error.cjs +14 -0
- package/dist/http-error.cjs.map +1 -0
- package/dist/http-error.d.cts +7 -0
- package/dist/http-error.d.ts +7 -0
- package/dist/http-error.js +12 -0
- package/dist/http-error.js.map +1 -0
- package/dist/index.cjs +910 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +899 -0
- package/dist/index.js.map +1 -0
- package/dist/infra.cjs +811 -0
- package/dist/infra.cjs.map +1 -0
- package/dist/infra.d.cts +8 -0
- package/dist/infra.d.ts +8 -0
- package/dist/infra.js +800 -0
- package/dist/infra.js.map +1 -0
- package/dist/logger.cjs +26 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +8 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.js +24 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware.cjs +117 -0
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.cts +10 -0
- package/dist/middleware.d.ts +10 -0
- package/dist/middleware.js +114 -0
- package/dist/middleware.js.map +1 -0
- package/dist/plugins.cjs +52 -0
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.d.cts +6 -0
- package/dist/plugins.d.ts +6 -0
- package/dist/plugins.js +49 -0
- package/dist/plugins.js.map +1 -0
- package/dist/rate-limit.cjs +27 -0
- package/dist/rate-limit.cjs.map +1 -0
- package/dist/rate-limit.d.cts +8 -0
- package/dist/rate-limit.d.ts +8 -0
- package/dist/rate-limit.js +25 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/request.type-CJ-EGGcM.d.cts +22 -0
- package/dist/request.type-CJ-EGGcM.d.ts +22 -0
- package/dist/response.type-d6e6eU9D.d.cts +33 -0
- package/dist/response.type-d6e6eU9D.d.ts +33 -0
- package/dist/router.cjs +111 -0
- package/dist/router.cjs.map +1 -0
- package/dist/router.d.cts +27 -0
- package/dist/router.d.ts +27 -0
- package/dist/router.js +109 -0
- package/dist/router.js.map +1 -0
- package/dist/routes.type-VPROfhnL.d.cts +14 -0
- package/dist/routes.type-VPROfhnL.d.ts +14 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +6 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.cjs +149 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +10 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +141 -0
- package/dist/utils.js.map +1 -0
- package/dist/validations.type-D4ZhF5g6.d.cts +6 -0
- package/dist/validations.type-D4ZhF5g6.d.ts +6 -0
- package/dist/validators.cjs +69 -0
- package/dist/validators.cjs.map +1 -0
- package/dist/validators.d.cts +11 -0
- package/dist/validators.d.ts +11 -0
- package/dist/validators.js +65 -0
- package/dist/validators.js.map +1 -0
- package/package.json +85 -66
- package/src/index.ts +1 -3
- package/src/infra/Router.ts +53 -3
- package/src/infra/Server.ts +37 -10
- package/src/infra/index.ts +1 -1
- 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"]}
|
package/dist/utils.d.cts
ADDED
|
@@ -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 };
|
package/dist/utils.d.ts
ADDED
|
@@ -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,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":";AAAA,IAAM,IAAA,uBAAW,OAAA,EAAuE;AAEjF,SAAS,YAAY,GAAA,EAAkC;AAC5D,EAAA,OAAO,CAAC,MAAA,EAAQ,WAAA,EAAa,cAAA,KAAmB;AAC9C,IAAA,MAAM,IAAA,GAAO,OAAO,MAAA,KAAW,UAAA,GAAc,SAAuB,MAAA,CAAe,WAAA;AAEnF,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACvB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,GAAA,uBAAU,GAAA,EAAI;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,IACpB;AAEA,IAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,GAAG,KAAK,EAAC;AAE9B,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,cAAA;AAAA,MACP;AAAA,KACD,CAAA;AAED,IAAA,GAAA,CAAI,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,EACnB,CAAA;AACF;AAEO,SAAS,gBAAA,CACd,MACA,WAAA,EACwC;AACxC,EAAA,OAAO,KAAK,GAAA,CAAI,IAAI,GAAG,GAAA,CAAI,WAAW,KAAK,EAAC;AAC9C;;;AC7BO,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EAGnC,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAkB,OAAA,EAAe;AAC3D,IAAA,KAAA,CAAM,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,OAAO,CAAC,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF,CAAA;;;ACLA,SAAS,eAAe,MAAA,EAAkD;AACxE,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC5D;AAEO,SAAS,cAAA,CAAe,QAAgB,IAAA,EAAqB;AAClE,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,IAAA,MAAM,IAAI,SAAA,CAAU,GAAA,EAAK,qBAAkB,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,CAAC,cAAA,CAAe,MAAM,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,MAAM,gDAA6C,CAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA;AAEZ,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACrC,IAAA,MAAM,IAAA,GAAO,OAAO,GAAG,CAAA;AACvB,IAAA,MAAM,GAAA,GAAM,IAAI,GAAG,CAAA;AAEnB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAI,OAAO,QAAQ,IAAA,EAAM;AACvB,QAAA,MAAM,IAAI,SAAA,CAAU,GAAA,EAAK,GAAG,GAAG,CAAA,UAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AAAA,MACpD;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,eAAA,CAAiB,CAAA;AAAA,MAClD;AAAA,IACF,CAAA,MAAA,IAAW,cAAA,CAAe,IAAI,CAAA,EAAG;AAC/B,MAAA,cAAA,CAAe,MAAM,GAAG,CAAA;AAAA,IAC1B;AAAA,EACF;AACF","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"]}
|