plutin 1.0.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/dist/base-controller-cec5714c.d.ts +46 -0
- package/dist/core/decorators/controller-http-decorator.cjs +752 -0
- package/dist/core/decorators/controller-http-decorator.cjs.map +1 -0
- package/dist/core/decorators/controller-http-decorator.d.cts +13 -0
- package/dist/core/decorators/controller-http-decorator.d.ts +13 -0
- package/dist/core/decorators/controller-http-decorator.js +735 -0
- package/dist/core/decorators/controller-http-decorator.js.map +1 -0
- package/dist/core/decorators/dependency-container.cjs +92 -0
- package/dist/core/decorators/dependency-container.cjs.map +1 -0
- package/dist/core/decorators/dependency-container.d.cts +22 -0
- package/dist/core/decorators/dependency-container.d.ts +22 -0
- package/dist/core/decorators/dependency-container.js +69 -0
- package/dist/core/decorators/dependency-container.js.map +1 -0
- package/dist/core/entities/aggregate-root.cjs +99 -0
- package/dist/core/entities/aggregate-root.cjs.map +1 -0
- package/dist/core/entities/aggregate-root.d.cts +8 -0
- package/dist/core/entities/aggregate-root.d.ts +8 -0
- package/dist/core/entities/aggregate-root.js +74 -0
- package/dist/core/entities/aggregate-root.js.map +1 -0
- package/dist/core/entities/common-dto.cjs +19 -0
- package/dist/core/entities/common-dto.cjs.map +1 -0
- package/dist/core/entities/common-dto.d.cts +10 -0
- package/dist/core/entities/common-dto.d.ts +10 -0
- package/dist/core/entities/common-dto.js +1 -0
- package/dist/core/entities/common-dto.js.map +1 -0
- package/dist/core/entities/domain-event.cjs +19 -0
- package/dist/core/entities/domain-event.cjs.map +1 -0
- package/dist/core/entities/domain-event.d.cts +6 -0
- package/dist/core/entities/domain-event.d.ts +6 -0
- package/dist/core/entities/domain-event.js +1 -0
- package/dist/core/entities/domain-event.js.map +1 -0
- package/dist/core/entities/entity.cjs +92 -0
- package/dist/core/entities/entity.cjs.map +1 -0
- package/dist/core/entities/entity.d.cts +17 -0
- package/dist/core/entities/entity.d.ts +17 -0
- package/dist/core/entities/entity.js +67 -0
- package/dist/core/entities/entity.js.map +1 -0
- package/dist/core/entities/optional.cjs +19 -0
- package/dist/core/entities/optional.cjs.map +1 -0
- package/dist/core/entities/optional.d.cts +3 -0
- package/dist/core/entities/optional.d.ts +3 -0
- package/dist/core/entities/optional.js +1 -0
- package/dist/core/entities/optional.js.map +1 -0
- package/dist/core/entities/unique-entity-id.cjs +50 -0
- package/dist/core/entities/unique-entity-id.cjs.map +1 -0
- package/dist/core/entities/unique-entity-id.d.cts +9 -0
- package/dist/core/entities/unique-entity-id.d.ts +9 -0
- package/dist/core/entities/unique-entity-id.js +27 -0
- package/dist/core/entities/unique-entity-id.js.map +1 -0
- package/dist/core/entities/value-object.cjs +40 -0
- package/dist/core/entities/value-object.cjs.map +1 -0
- package/dist/core/entities/value-object.d.cts +6 -0
- package/dist/core/entities/value-object.d.ts +6 -0
- package/dist/core/entities/value-object.js +17 -0
- package/dist/core/entities/value-object.js.map +1 -0
- package/dist/core/entities/watched-list.cjs +121 -0
- package/dist/core/entities/watched-list.cjs.map +1 -0
- package/dist/core/entities/watched-list.d.cts +27 -0
- package/dist/core/entities/watched-list.d.ts +27 -0
- package/dist/core/entities/watched-list.js +98 -0
- package/dist/core/entities/watched-list.js.map +1 -0
- package/dist/core/entities/watched-list.test.cjs +186 -0
- package/dist/core/entities/watched-list.test.cjs.map +1 -0
- package/dist/core/entities/watched-list.test.d.cts +2 -0
- package/dist/core/entities/watched-list.test.d.ts +2 -0
- package/dist/core/entities/watched-list.test.js +185 -0
- package/dist/core/entities/watched-list.test.js.map +1 -0
- package/dist/core/errors/api-common-error.cjs +38 -0
- package/dist/core/errors/api-common-error.cjs.map +1 -0
- package/dist/core/errors/api-common-error.d.cts +28 -0
- package/dist/core/errors/api-common-error.d.ts +28 -0
- package/dist/core/errors/api-common-error.js +13 -0
- package/dist/core/errors/api-common-error.js.map +1 -0
- package/dist/core/errors/application-error.cjs +54 -0
- package/dist/core/errors/application-error.cjs.map +1 -0
- package/dist/core/errors/application-error.d.cts +8 -0
- package/dist/core/errors/application-error.d.ts +8 -0
- package/dist/core/errors/application-error.js +33 -0
- package/dist/core/errors/application-error.js.map +1 -0
- package/dist/core/errors/conflict-error.cjs +56 -0
- package/dist/core/errors/conflict-error.cjs.map +1 -0
- package/dist/core/errors/conflict-error.d.cts +13 -0
- package/dist/core/errors/conflict-error.d.ts +13 -0
- package/dist/core/errors/conflict-error.js +35 -0
- package/dist/core/errors/conflict-error.js.map +1 -0
- package/dist/core/errors/domain-error.cjs +54 -0
- package/dist/core/errors/domain-error.cjs.map +1 -0
- package/dist/core/errors/domain-error.d.cts +8 -0
- package/dist/core/errors/domain-error.d.ts +8 -0
- package/dist/core/errors/domain-error.js +33 -0
- package/dist/core/errors/domain-error.js.map +1 -0
- package/dist/core/errors/http-client-error.cjs +54 -0
- package/dist/core/errors/http-client-error.cjs.map +1 -0
- package/dist/core/errors/http-client-error.d.cts +8 -0
- package/dist/core/errors/http-client-error.d.ts +8 -0
- package/dist/core/errors/http-client-error.js +33 -0
- package/dist/core/errors/http-client-error.js.map +1 -0
- package/dist/core/errors/infra-error.cjs +54 -0
- package/dist/core/errors/infra-error.cjs.map +1 -0
- package/dist/core/errors/infra-error.d.cts +8 -0
- package/dist/core/errors/infra-error.d.ts +8 -0
- package/dist/core/errors/infra-error.js +33 -0
- package/dist/core/errors/infra-error.js.map +1 -0
- package/dist/core/errors/validation-error.cjs +55 -0
- package/dist/core/errors/validation-error.cjs.map +1 -0
- package/dist/core/errors/validation-error.d.cts +8 -0
- package/dist/core/errors/validation-error.d.ts +8 -0
- package/dist/core/errors/validation-error.js +34 -0
- package/dist/core/errors/validation-error.js.map +1 -0
- package/dist/core/http/base-controller.cjs +731 -0
- package/dist/core/http/base-controller.cjs.map +1 -0
- package/dist/core/http/base-controller.d.cts +1 -0
- package/dist/core/http/base-controller.d.ts +1 -0
- package/dist/core/http/base-controller.js +720 -0
- package/dist/core/http/base-controller.js.map +1 -0
- package/dist/core/http/dto-response.cjs +19 -0
- package/dist/core/http/dto-response.cjs.map +1 -0
- package/dist/core/http/dto-response.d.cts +10 -0
- package/dist/core/http/dto-response.d.ts +10 -0
- package/dist/core/http/dto-response.js +1 -0
- package/dist/core/http/dto-response.js.map +1 -0
- package/dist/core/http/error-notifier.cjs +19 -0
- package/dist/core/http/error-notifier.cjs.map +1 -0
- package/dist/core/http/error-notifier.d.cts +1 -0
- package/dist/core/http/error-notifier.d.ts +1 -0
- package/dist/core/http/error-notifier.js +1 -0
- package/dist/core/http/error-notifier.js.map +1 -0
- package/dist/core/http/get-take-and-skip.cjs +40 -0
- package/dist/core/http/get-take-and-skip.cjs.map +1 -0
- package/dist/core/http/get-take-and-skip.d.cts +6 -0
- package/dist/core/http/get-take-and-skip.d.ts +6 -0
- package/dist/core/http/get-take-and-skip.js +17 -0
- package/dist/core/http/get-take-and-skip.js.map +1 -0
- package/dist/core/http/health-connections.cjs +42 -0
- package/dist/core/http/health-connections.cjs.map +1 -0
- package/dist/core/http/health-connections.d.cts +16 -0
- package/dist/core/http/health-connections.d.ts +16 -0
- package/dist/core/http/health-connections.js +23 -0
- package/dist/core/http/health-connections.js.map +1 -0
- package/dist/core/http/http.cjs +19 -0
- package/dist/core/http/http.cjs.map +1 -0
- package/dist/core/http/http.d.cts +10 -0
- package/dist/core/http/http.d.ts +10 -0
- package/dist/core/http/http.js +1 -0
- package/dist/core/http/http.js.map +1 -0
- package/dist/core/http/pagination.cjs +19 -0
- package/dist/core/http/pagination.cjs.map +1 -0
- package/dist/core/http/pagination.d.cts +9 -0
- package/dist/core/http/pagination.d.ts +9 -0
- package/dist/core/http/pagination.js +1 -0
- package/dist/core/http/pagination.js.map +1 -0
- package/dist/core/http/validator.cjs +19 -0
- package/dist/core/http/validator.cjs.map +1 -0
- package/dist/core/http/validator.d.cts +11 -0
- package/dist/core/http/validator.d.ts +11 -0
- package/dist/core/http/validator.js +1 -0
- package/dist/core/http/validator.js.map +1 -0
- package/dist/core/index.cjs +957 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +18 -0
- package/dist/core/index.d.ts +18 -0
- package/dist/core/index.js +933 -0
- package/dist/core/index.js.map +1 -0
- package/dist/infra/adapters/http/express-adapter.cjs +577 -0
- package/dist/infra/adapters/http/express-adapter.cjs.map +1 -0
- package/dist/infra/adapters/http/express-adapter.d.cts +15 -0
- package/dist/infra/adapters/http/express-adapter.d.ts +15 -0
- package/dist/infra/adapters/http/express-adapter.js +556 -0
- package/dist/infra/adapters/http/express-adapter.js.map +1 -0
- package/dist/infra/adapters/http/fastify-adapter.cjs +562 -0
- package/dist/infra/adapters/http/fastify-adapter.cjs.map +1 -0
- package/dist/infra/adapters/http/fastify-adapter.d.cts +14 -0
- package/dist/infra/adapters/http/fastify-adapter.d.ts +14 -0
- package/dist/infra/adapters/http/fastify-adapter.js +541 -0
- package/dist/infra/adapters/http/fastify-adapter.js.map +1 -0
- package/dist/infra/adapters/http/response-error-code.cjs +35 -0
- package/dist/infra/adapters/http/response-error-code.cjs.map +1 -0
- package/dist/infra/adapters/http/response-error-code.d.cts +6 -0
- package/dist/infra/adapters/http/response-error-code.d.ts +6 -0
- package/dist/infra/adapters/http/response-error-code.js +10 -0
- package/dist/infra/adapters/http/response-error-code.js.map +1 -0
- package/dist/infra/adapters/http/validate-controller-metadata.cjs +42 -0
- package/dist/infra/adapters/http/validate-controller-metadata.cjs.map +1 -0
- package/dist/infra/adapters/http/validate-controller-metadata.d.cts +11 -0
- package/dist/infra/adapters/http/validate-controller-metadata.d.ts +11 -0
- package/dist/infra/adapters/http/validate-controller-metadata.js +19 -0
- package/dist/infra/adapters/http/validate-controller-metadata.js.map +1 -0
- package/dist/infra/adapters/notifications/discord.cjs +86 -0
- package/dist/infra/adapters/notifications/discord.cjs.map +1 -0
- package/dist/infra/adapters/notifications/discord.d.cts +14 -0
- package/dist/infra/adapters/notifications/discord.d.ts +14 -0
- package/dist/infra/adapters/notifications/discord.js +65 -0
- package/dist/infra/adapters/notifications/discord.js.map +1 -0
- package/dist/infra/adapters/notifications/in-memory.cjs +40 -0
- package/dist/infra/adapters/notifications/in-memory.cjs.map +1 -0
- package/dist/infra/adapters/notifications/in-memory.d.cts +8 -0
- package/dist/infra/adapters/notifications/in-memory.d.ts +8 -0
- package/dist/infra/adapters/notifications/in-memory.js +21 -0
- package/dist/infra/adapters/notifications/in-memory.js.map +1 -0
- package/dist/infra/adapters/notifications/sentry.cjs +129 -0
- package/dist/infra/adapters/notifications/sentry.cjs.map +1 -0
- package/dist/infra/adapters/notifications/sentry.d.cts +13 -0
- package/dist/infra/adapters/notifications/sentry.d.ts +13 -0
- package/dist/infra/adapters/notifications/sentry.js +96 -0
- package/dist/infra/adapters/notifications/sentry.js.map +1 -0
- package/dist/infra/adapters/validators/zod/index.cjs +179 -0
- package/dist/infra/adapters/validators/zod/index.cjs.map +1 -0
- package/dist/infra/adapters/validators/zod/index.d.cts +19 -0
- package/dist/infra/adapters/validators/zod/index.d.ts +19 -0
- package/dist/infra/adapters/validators/zod/index.js +154 -0
- package/dist/infra/adapters/validators/zod/index.js.map +1 -0
- package/dist/infra/adapters/validators/zod/zod-map-error.cjs +79 -0
- package/dist/infra/adapters/validators/zod/zod-map-error.cjs.map +1 -0
- package/dist/infra/adapters/validators/zod/zod-map-error.d.cts +15 -0
- package/dist/infra/adapters/validators/zod/zod-map-error.d.ts +15 -0
- package/dist/infra/adapters/validators/zod/zod-map-error.js +60 -0
- package/dist/infra/adapters/validators/zod/zod-map-error.js.map +1 -0
- package/dist/infra/adapters/validators/zod/zod-validator.cjs +178 -0
- package/dist/infra/adapters/validators/zod/zod-validator.cjs.map +1 -0
- package/dist/infra/adapters/validators/zod/zod-validator.d.cts +13 -0
- package/dist/infra/adapters/validators/zod/zod-validator.d.ts +13 -0
- package/dist/infra/adapters/validators/zod/zod-validator.js +153 -0
- package/dist/infra/adapters/validators/zod/zod-validator.js.map +1 -0
- package/dist/infra/env/index.cjs +473 -0
- package/dist/infra/env/index.cjs.map +1 -0
- package/dist/infra/env/index.d.cts +10 -0
- package/dist/infra/env/index.d.ts +10 -0
- package/dist/infra/env/index.js +456 -0
- package/dist/infra/env/index.js.map +1 -0
- package/dist/infra/index.cjs +781 -0
- package/dist/infra/index.cjs.map +1 -0
- package/dist/infra/index.d.cts +5 -0
- package/dist/infra/index.d.ts +5 -0
- package/dist/infra/index.js +752 -0
- package/dist/infra/index.js.map +1 -0
- package/package.json +82 -0
- package/readme.md +56 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/infra/adapters/notifications/sentry.ts
|
|
5
|
+
import * as Sentry from "@sentry/node";
|
|
6
|
+
|
|
7
|
+
// src/core/decorators/dependency-container.ts
|
|
8
|
+
import "reflect-metadata";
|
|
9
|
+
function Inject(token) {
|
|
10
|
+
return (target, _propertyKey, parameterIndex) => {
|
|
11
|
+
const constructor = typeof target === "function" ? target : target.constructor;
|
|
12
|
+
const existingInjectedParams = Reflect.getOwnMetadata("inject:params", constructor) || {};
|
|
13
|
+
existingInjectedParams[parameterIndex] = token;
|
|
14
|
+
Reflect.defineMetadata("inject:params", existingInjectedParams, constructor);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
__name(Inject, "Inject");
|
|
18
|
+
|
|
19
|
+
// src/infra/adapters/notifications/sentry.ts
|
|
20
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
21
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
23
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
24
|
+
else
|
|
25
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
26
|
+
if (d = decorators[i])
|
|
27
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
28
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
29
|
+
}
|
|
30
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
31
|
+
function _ts_metadata(k, v) {
|
|
32
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
33
|
+
return Reflect.metadata(k, v);
|
|
34
|
+
}
|
|
35
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
36
|
+
function _ts_param(paramIndex, decorator) {
|
|
37
|
+
return function(target, key) {
|
|
38
|
+
decorator(target, key, paramIndex);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
__name(_ts_param, "_ts_param");
|
|
42
|
+
var SentryNotifier = class {
|
|
43
|
+
static {
|
|
44
|
+
__name(this, "SentryNotifier");
|
|
45
|
+
}
|
|
46
|
+
options;
|
|
47
|
+
constructor(options) {
|
|
48
|
+
this.options = options;
|
|
49
|
+
Sentry.init({
|
|
50
|
+
dsn: this.options.dsn,
|
|
51
|
+
environment: this.options.environment,
|
|
52
|
+
attachStacktrace: true,
|
|
53
|
+
tracesSampleRate: this.options.environment === "production" ? 0.1 : 1,
|
|
54
|
+
maxBreadcrumbs: 100,
|
|
55
|
+
debug: this.options.environment !== "production"
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async notify(error, context) {
|
|
59
|
+
Sentry.withScope((scope) => {
|
|
60
|
+
scope.setLevel("error");
|
|
61
|
+
if (context?.env)
|
|
62
|
+
scope.setTag("env", context.env);
|
|
63
|
+
if (context?.user) {
|
|
64
|
+
scope.setUser({
|
|
65
|
+
id: context.user.id,
|
|
66
|
+
username: context.user.name,
|
|
67
|
+
email: context.user.email
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (context?.request) {
|
|
71
|
+
const { body, query, params, headers, method, url, requestId } = context.request;
|
|
72
|
+
scope.setContext("http", {
|
|
73
|
+
method,
|
|
74
|
+
requestId,
|
|
75
|
+
url,
|
|
76
|
+
headers,
|
|
77
|
+
query,
|
|
78
|
+
body,
|
|
79
|
+
params
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
Sentry.captureException(error);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
SentryNotifier = _ts_decorate([
|
|
87
|
+
_ts_param(0, Inject("SentryConfig")),
|
|
88
|
+
_ts_metadata("design:type", Function),
|
|
89
|
+
_ts_metadata("design:paramtypes", [
|
|
90
|
+
typeof SentryOptions === "undefined" ? Object : SentryOptions
|
|
91
|
+
])
|
|
92
|
+
], SentryNotifier);
|
|
93
|
+
export {
|
|
94
|
+
SentryNotifier
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=sentry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/infra/adapters/notifications/sentry.ts","../../../../src/core/decorators/dependency-container.ts"],"sourcesContent":["import * as Sentry from '@sentry/node'\nimport type { ContextError } from 'core/http/base-controller'\n\nimport { Inject } from '../../../core/decorators/dependency-container'\nimport IErrorNotifier from '../../../core/http/error-notifier'\n\ntype SentryOptions = {\n dsn: string\n environment: string\n}\n\nexport class SentryNotifier implements IErrorNotifier {\n constructor(@Inject('SentryConfig') private readonly options: SentryOptions) {\n Sentry.init({\n dsn: this.options.dsn,\n environment: this.options.environment,\n attachStacktrace: true,\n tracesSampleRate: this.options.environment === 'production' ? 0.1 : 1.0,\n maxBreadcrumbs: 100,\n debug: this.options.environment !== 'production',\n })\n }\n\n async notify(error: Error, context: ContextError): Promise<void> {\n Sentry.withScope((scope) => {\n scope.setLevel('error')\n\n if (context?.env) scope.setTag('env', context.env)\n\n if (context?.user) {\n scope.setUser({\n id: context.user.id,\n username: context.user.name,\n email: context.user.email,\n })\n }\n\n if (context?.request) {\n const { body, query, params, headers, method, url, requestId } =\n context.request\n\n scope.setContext('http', {\n method,\n requestId,\n url,\n headers,\n query,\n body,\n params,\n })\n }\n\n Sentry.captureException(error)\n })\n }\n}\n","import 'reflect-metadata'\n\ntype Class<T = any> = new (...args: any[]) => T\n\ntype Registration =\n | { type: 'class'; myClass: Class; singleton: boolean }\n | { type: 'value'; value: any }\n\nexport default class DependencyContainer {\n static registry = new Map<string, Registration>()\n static singletons = new Map<string, any>()\n\n static register<T>(\n token: string,\n myClass: Class<T>,\n options: { singleton: boolean }\n ) {\n this.registry.set(token, {\n type: 'class',\n myClass,\n singleton: options.singleton,\n })\n }\n\n static registerValue<T>(token: string, value: T) {\n this.registry.set(token, { type: 'value', value })\n }\n\n static resolve<T>(target: Class<T>): T {\n const paramTypes = Reflect.getMetadata('design:paramtypes', target) || []\n\n const injectMetadata: Record<number, string> =\n Reflect.getOwnMetadata('inject:params', target) || {}\n\n const params = paramTypes.map((_: any, index: number) => {\n const token = injectMetadata[index]\n\n if (!token) {\n throw new Error(\n `Missing @Inject token for parameter index ${index} in ${target.name}`\n )\n }\n\n return this.resolveToken(token)\n })\n\n return new target(...params)\n }\n\n static resolveToken(token: string): any {\n const registration = this.registry.get(token)\n\n if (!registration) {\n throw new Error(\n `\"${token}\" not registered. Please register it in the container.`\n )\n }\n\n if (registration.type === 'value') {\n return registration.value\n }\n\n const { myClass, singleton } = registration\n\n if (singleton) {\n if (!this.singletons.has(token)) {\n const instance = this.resolve(myClass)\n this.singletons.set(token, instance)\n }\n return this.singletons.get(token)\n }\n\n return this.resolve(myClass)\n }\n}\n\nexport function Inject(token: string): ParameterDecorator {\n return (\n target: object,\n _propertyKey: string | symbol | undefined,\n parameterIndex: number\n ): void => {\n const constructor =\n typeof target === 'function' ? target : target.constructor\n\n const existingInjectedParams: Record<number, string> =\n Reflect.getOwnMetadata('inject:params', constructor) || {}\n\n existingInjectedParams[parameterIndex] = token\n\n Reflect.defineMetadata('inject:params', existingInjectedParams, constructor)\n }\n}\n"],"mappings":";;;;AAAA,YAAYA,YAAY;;;ACAxB,OAAO;AA4EA,SAASC,OAAOC,OAAa;AAClC,SAAO,CACLC,QACAC,cACAC,mBAAAA;AAEA,UAAMC,cACJ,OAAOH,WAAW,aAAaA,SAASA,OAAOG;AAEjD,UAAMC,yBACJC,QAAQC,eAAe,iBAAiBH,WAAAA,KAAgB,CAAC;AAE3DC,2BAAuBF,cAAAA,IAAkBH;AAEzCM,YAAQE,eAAe,iBAAiBH,wBAAwBD,WAAAA;EAClE;AACF;AAhBgBL;;;;;;;;;;;;;;;;;;;;;;;;;ADjET,IAAMU,iBAAN,MAAMA;SAAAA;;;;EACXC,YAAqDC,SAAwB;SAAxBA,UAAAA;AACnDC,IAAOC,YAAK;MACVC,KAAK,KAAKH,QAAQG;MAClBC,aAAa,KAAKJ,QAAQI;MAC1BC,kBAAkB;MAClBC,kBAAkB,KAAKN,QAAQI,gBAAgB,eAAe,MAAM;MACpEG,gBAAgB;MAChBC,OAAO,KAAKR,QAAQI,gBAAgB;IACtC,CAAA;EACF;EAEA,MAAMK,OAAOC,OAAcC,SAAsC;AAC/DV,IAAOW,iBAAU,CAACC,UAAAA;AAChBA,YAAMC,SAAS,OAAA;AAEf,UAAIH,SAASI;AAAKF,cAAMG,OAAO,OAAOL,QAAQI,GAAG;AAEjD,UAAIJ,SAASM,MAAM;AACjBJ,cAAMK,QAAQ;UACZC,IAAIR,QAAQM,KAAKE;UACjBC,UAAUT,QAAQM,KAAKI;UACvBC,OAAOX,QAAQM,KAAKK;QACtB,CAAA;MACF;AAEA,UAAIX,SAASY,SAAS;AACpB,cAAM,EAAEC,MAAMC,OAAOC,QAAQC,SAASC,QAAQC,KAAKC,UAAS,IAC1DnB,QAAQY;AAEVV,cAAMkB,WAAW,QAAQ;UACvBH;UACAE;UACAD;UACAF;UACAF;UACAD;UACAE;QACF,CAAA;MACF;AAEAzB,MAAO+B,wBAAiBtB,KAAAA;IAC1B,CAAA;EACF;AACF;;;;;;;;","names":["Sentry","Inject","token","target","_propertyKey","parameterIndex","constructor","existingInjectedParams","Reflect","getOwnMetadata","defineMetadata","SentryNotifier","constructor","options","Sentry","init","dsn","environment","attachStacktrace","tracesSampleRate","maxBreadcrumbs","debug","notify","error","context","withScope","scope","setLevel","env","setTag","user","setUser","id","username","name","email","request","body","query","params","headers","method","url","requestId","setContext","captureException"]}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/infra/adapters/validators/zod/index.ts
|
|
22
|
+
var zod_exports = {};
|
|
23
|
+
__export(zod_exports, {
|
|
24
|
+
default: () => ZodValidator,
|
|
25
|
+
zodValidator: () => zodValidator
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(zod_exports);
|
|
28
|
+
|
|
29
|
+
// src/core/errors/api-common-error.ts
|
|
30
|
+
var ApiErrorEnum = /* @__PURE__ */ function(ApiErrorEnum2) {
|
|
31
|
+
ApiErrorEnum2["DOMAIN"] = "ERR001";
|
|
32
|
+
ApiErrorEnum2["APPLICATION"] = "ERR002";
|
|
33
|
+
ApiErrorEnum2["INFRA"] = "ERR003";
|
|
34
|
+
ApiErrorEnum2["HTTP_CLIENT"] = "ERR004";
|
|
35
|
+
ApiErrorEnum2["VALIDATOR"] = "ERR005";
|
|
36
|
+
return ApiErrorEnum2;
|
|
37
|
+
}({});
|
|
38
|
+
|
|
39
|
+
// src/core/errors/validation-error.ts
|
|
40
|
+
var ValidationError = class extends Error {
|
|
41
|
+
static {
|
|
42
|
+
__name(this, "ValidationError");
|
|
43
|
+
}
|
|
44
|
+
props;
|
|
45
|
+
constructor(errors) {
|
|
46
|
+
super("Validation Error");
|
|
47
|
+
this.props = {
|
|
48
|
+
code: 400,
|
|
49
|
+
errorCode: ApiErrorEnum.VALIDATOR,
|
|
50
|
+
message: "Validation Error",
|
|
51
|
+
occurredAt: /* @__PURE__ */ new Date(),
|
|
52
|
+
errors
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// src/infra/adapters/validators/zod/zod-map-error.ts
|
|
58
|
+
var ZodMapError = class {
|
|
59
|
+
static {
|
|
60
|
+
__name(this, "ZodMapError");
|
|
61
|
+
}
|
|
62
|
+
static mapCommon(error) {
|
|
63
|
+
return {
|
|
64
|
+
type: error.code,
|
|
65
|
+
path: error.path.join("."),
|
|
66
|
+
property: error.path.pop(),
|
|
67
|
+
propertyType: error.expected,
|
|
68
|
+
receivedValue: error.received,
|
|
69
|
+
message: error.message
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
static mapInvalidUnion(error) {
|
|
73
|
+
const [errors] = error.unionErrors.flat().map((err) => err.issues.map((item) => this.mapCommon(item)));
|
|
74
|
+
return errors;
|
|
75
|
+
}
|
|
76
|
+
static mapInvalidType(error) {
|
|
77
|
+
return [
|
|
78
|
+
this.mapCommon(error)
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
static mapErrorsFactory(error) {
|
|
82
|
+
if (error.code === "invalid_union") {
|
|
83
|
+
return this.mapInvalidUnion(error);
|
|
84
|
+
}
|
|
85
|
+
return this.mapInvalidType(error);
|
|
86
|
+
}
|
|
87
|
+
static mapErrors(errors) {
|
|
88
|
+
const standardizedErrors = /* @__PURE__ */ new Map();
|
|
89
|
+
errors.flat().forEach((error) => {
|
|
90
|
+
const keyError = standardizedErrors.get(error.path[0]);
|
|
91
|
+
if (keyError) {
|
|
92
|
+
if (!keyError.propertyErrors) {
|
|
93
|
+
keyError.propertyErrors = [];
|
|
94
|
+
}
|
|
95
|
+
keyError.propertyErrors.push(...this.mapErrorsFactory(error));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
standardizedErrors.set(error.path[0], {
|
|
99
|
+
location: error.path[0],
|
|
100
|
+
propertyErrors: Array.from([
|
|
101
|
+
...this.mapErrorsFactory(error)
|
|
102
|
+
])
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
return Array.from(standardizedErrors, ([, arr]) => ({
|
|
106
|
+
...arr
|
|
107
|
+
})).flat();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// src/infra/adapters/validators/zod/zod-validator.ts
|
|
112
|
+
function zodValidator(schema) {
|
|
113
|
+
return async (request) => {
|
|
114
|
+
const validator = new ZodValidator(schema);
|
|
115
|
+
const validatedRequest = await validator.validate(request);
|
|
116
|
+
return validatedRequest;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
__name(zodValidator, "zodValidator");
|
|
120
|
+
|
|
121
|
+
// src/infra/adapters/validators/zod/index.ts
|
|
122
|
+
var ZodValidator = class {
|
|
123
|
+
static {
|
|
124
|
+
__name(this, "ZodValidator");
|
|
125
|
+
}
|
|
126
|
+
zodSchema;
|
|
127
|
+
constructor(zodSchema) {
|
|
128
|
+
this.zodSchema = zodSchema;
|
|
129
|
+
}
|
|
130
|
+
async validate(requestHttp) {
|
|
131
|
+
const errors = [];
|
|
132
|
+
const { data: headersData = {}, error: headersErrors = {} } = requestHttp.headers ? await this.zodSchema.shape.headers.safeParseAsync(requestHttp.headers, {
|
|
133
|
+
path: [
|
|
134
|
+
"headers"
|
|
135
|
+
]
|
|
136
|
+
}) : {};
|
|
137
|
+
if (headersErrors?.errors) {
|
|
138
|
+
errors.push(headersErrors?.errors);
|
|
139
|
+
}
|
|
140
|
+
const { data: paramsData = {}, error: paramsErrors = {} } = requestHttp.params ? await this.zodSchema.shape.params.safeParseAsync(requestHttp.params, {
|
|
141
|
+
path: [
|
|
142
|
+
"params"
|
|
143
|
+
]
|
|
144
|
+
}) : {};
|
|
145
|
+
if (paramsErrors?.errors) {
|
|
146
|
+
errors.push(paramsErrors?.errors);
|
|
147
|
+
}
|
|
148
|
+
const { data: queryData = {}, error: queryErrors = {} } = requestHttp.query ? await this.zodSchema.shape.query.safeParseAsync(requestHttp.query, {
|
|
149
|
+
path: [
|
|
150
|
+
"query"
|
|
151
|
+
]
|
|
152
|
+
}) : {};
|
|
153
|
+
if (queryErrors?.errors) {
|
|
154
|
+
errors.push(queryErrors?.errors);
|
|
155
|
+
}
|
|
156
|
+
const { data: bodyData = {}, error: bodyErrors = {} } = requestHttp.body ? await this.zodSchema.shape.body.safeParseAsync(requestHttp.body, {
|
|
157
|
+
path: [
|
|
158
|
+
"body"
|
|
159
|
+
]
|
|
160
|
+
}) : {};
|
|
161
|
+
if (bodyErrors?.errors) {
|
|
162
|
+
errors.push(bodyErrors?.errors);
|
|
163
|
+
}
|
|
164
|
+
if (errors.length) {
|
|
165
|
+
throw new ValidationError(ZodMapError.mapErrors(errors));
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
body: bodyData,
|
|
169
|
+
headers: headersData,
|
|
170
|
+
params: paramsData,
|
|
171
|
+
query: queryData
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
176
|
+
0 && (module.exports = {
|
|
177
|
+
zodValidator
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/infra/adapters/validators/zod/index.ts","../../../../../src/core/errors/api-common-error.ts","../../../../../src/core/errors/validation-error.ts","../../../../../src/infra/adapters/validators/zod/zod-map-error.ts","../../../../../src/infra/adapters/validators/zod/zod-validator.ts"],"sourcesContent":["import { ZodEffects, type ZodError, ZodObject } from 'zod'\n\nimport ValidationError from '../../../../core/errors/validation-error'\nimport IValidationHTTP, { RequestHttp } from '../../../../core/http/validator'\nimport ZodMapError from './zod-map-error'\nimport { zodValidator } from './zod-validator'\n\ntype SchemaDefinition = {\n headers: ZodObject<Record<string, any>>\n params: ZodObject<Record<string, any>>\n query: ZodObject<Record<string, any>>\n body:\n | ZodObject<Record<string, any>>\n | ZodEffects<ZodObject<Record<string, any>>>\n}\n\ntype ZodSchemaObject = ZodObject<SchemaDefinition>\n\nexport default class ZodValidator implements IValidationHTTP {\n constructor(private zodSchema: ZodSchemaObject) {}\n\n async validate<T>(requestHttp: RequestHttp): Promise<T> {\n const errors = []\n\n const {\n data: headersData = {},\n error: headersErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.headers\n ? await this.zodSchema.shape.headers.safeParseAsync(requestHttp.headers, {\n path: ['headers'],\n })\n : {}\n\n if (headersErrors?.errors) {\n errors.push(headersErrors?.errors)\n }\n\n const {\n data: paramsData = {},\n error: paramsErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.params\n ? await this.zodSchema.shape.params.safeParseAsync(requestHttp.params, {\n path: ['params'],\n })\n : {}\n\n if (paramsErrors?.errors) {\n errors.push(paramsErrors?.errors)\n }\n\n const {\n data: queryData = {},\n error: queryErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.query\n ? await this.zodSchema.shape.query.safeParseAsync(requestHttp.query, {\n path: ['query'],\n })\n : {}\n\n if (queryErrors?.errors) {\n errors.push(queryErrors?.errors)\n }\n\n const {\n data: bodyData = {},\n error: bodyErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.body\n ? await this.zodSchema.shape.body.safeParseAsync(requestHttp.body, {\n path: ['body'],\n })\n : {}\n\n if (bodyErrors?.errors) {\n errors.push(bodyErrors?.errors)\n }\n\n if (errors.length) {\n throw new ValidationError(ZodMapError.mapErrors(errors))\n }\n\n return {\n body: bodyData,\n headers: headersData,\n params: paramsData,\n query: queryData,\n } as T\n }\n}\n\nexport { zodValidator }\n","export type PropertiesError = {\n receivedValue?: any\n type: string\n message: string\n property: string | number | undefined\n propertyType?: string\n path?: string\n}\n\nexport type CommonError = {\n location: string\n propertyErrors?: PropertiesError[]\n}\n\nexport type ApiCommonError = {\n code: number\n occurredAt: Date\n message: string\n errorCode: string\n errors?: CommonError[]\n}\n\nexport enum ApiErrorEnum {\n DOMAIN = 'ERR001',\n APPLICATION = 'ERR002',\n INFRA = 'ERR003',\n HTTP_CLIENT = 'ERR004',\n VALIDATOR = 'ERR005',\n}\n","import {\n type ApiCommonError,\n ApiErrorEnum,\n type CommonError,\n} from './api-common-error'\n\nexport default class ValidationError extends Error {\n props: ApiCommonError\n\n constructor(errors: CommonError[]) {\n super('Validation Error')\n this.props = {\n code: 400,\n errorCode: ApiErrorEnum.VALIDATOR,\n message: 'Validation Error',\n occurredAt: new Date(),\n errors,\n }\n }\n}\n","import type { ZodIssue } from 'zod'\n\nimport type {\n CommonError,\n PropertiesError,\n} from '../../../../core/errors/api-common-error'\n\ntype ZodError = ZodIssue & {\n expected: string\n received: string\n}\n\ntype ZodInvalidUnion = ZodError & {\n code: 'invalid_union'\n}\n\nexport default class ZodMapError {\n private static mapCommon(error: ZodError): PropertiesError {\n return {\n type: error.code,\n path: error.path.join('.'),\n property: error.path.pop(),\n propertyType: error.expected,\n receivedValue: error.received,\n message: error.message,\n }\n }\n\n private static mapInvalidUnion(error: ZodInvalidUnion): PropertiesError[] {\n const [errors] = error.unionErrors\n .flat()\n .map((err) => err.issues.map((item: any) => this.mapCommon(item)))\n\n return errors\n }\n\n private static mapInvalidType(error: ZodError): PropertiesError[] {\n return [this.mapCommon(error)]\n }\n\n private static mapErrorsFactory(error: ZodError): PropertiesError[] {\n if (error.code === 'invalid_union') {\n return this.mapInvalidUnion(error)\n }\n\n return this.mapInvalidType(error)\n }\n\n static mapErrors(errors: ZodIssue[][]) {\n const standardizedErrors = new Map<string | number, CommonError>()\n\n errors.flat().forEach((error) => {\n const keyError = standardizedErrors.get(error.path[0])\n\n if (keyError) {\n if (!keyError.propertyErrors) {\n keyError.propertyErrors = []\n }\n\n keyError.propertyErrors.push(\n ...this.mapErrorsFactory(error as ZodError)\n )\n\n return\n }\n\n standardizedErrors.set(error.path[0], {\n location: error.path[0],\n propertyErrors: Array.from([\n ...this.mapErrorsFactory(error as ZodError),\n ]),\n } as CommonError)\n })\n\n return Array.from(standardizedErrors, ([, arr]) => ({\n ...arr,\n })).flat()\n }\n}\n","import { z } from 'zod'\n\nimport { Request } from '../../../../core/http/base-controller'\nimport ZodValidator from './index'\n\nexport type ZodSchema = z.ZodObject<{\n headers: z.ZodObject<Record<string, any>>\n params: z.ZodObject<Record<string, any>>\n query: z.ZodObject<Record<string, any>>\n body:\n | z.ZodObject<Record<string, any>>\n | z.ZodEffects<z.ZodObject<Record<string, any>>>\n}>\n\nexport type MiddlewareFunction = (request: Request) => Promise<Request>\n\nexport function zodValidator(schema: ZodSchema): MiddlewareFunction {\n return async (request: Request): Promise<Request> => {\n const validator = new ZodValidator(schema)\n const validatedRequest = await validator.validate<Request>(request)\n return validatedRequest\n }\n}\n"],"mappings":"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","names":["ApiErrorEnum","ValidationError","Error","props","constructor","errors","code","errorCode","ApiErrorEnum","VALIDATOR","message","occurredAt","Date","ZodMapError","mapCommon","error","type","code","path","join","property","pop","propertyType","expected","receivedValue","received","message","mapInvalidUnion","errors","unionErrors","flat","map","err","issues","item","mapInvalidType","mapErrorsFactory","mapErrors","standardizedErrors","Map","forEach","keyError","get","propertyErrors","push","set","location","Array","from","arr","zodValidator","schema","request","validator","ZodValidator","validatedRequest","validate","ZodValidator","constructor","zodSchema","validate","requestHttp","errors","data","headersData","error","headersErrors","headers","shape","safeParseAsync","path","push","paramsData","paramsErrors","params","queryData","queryErrors","query","bodyData","bodyErrors","body","length","ValidationError","ZodMapError","mapErrors"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ZodObject, ZodEffects } from 'zod';
|
|
2
|
+
import IValidationHTTP, { RequestHttp } from '../../../../core/http/validator.cjs';
|
|
3
|
+
export { zodValidator } from './zod-validator.cjs';
|
|
4
|
+
import '../../../../base-controller-cec5714c.js';
|
|
5
|
+
|
|
6
|
+
type SchemaDefinition = {
|
|
7
|
+
headers: ZodObject<Record<string, any>>;
|
|
8
|
+
params: ZodObject<Record<string, any>>;
|
|
9
|
+
query: ZodObject<Record<string, any>>;
|
|
10
|
+
body: ZodObject<Record<string, any>> | ZodEffects<ZodObject<Record<string, any>>>;
|
|
11
|
+
};
|
|
12
|
+
type ZodSchemaObject = ZodObject<SchemaDefinition>;
|
|
13
|
+
declare class ZodValidator implements IValidationHTTP {
|
|
14
|
+
private zodSchema;
|
|
15
|
+
constructor(zodSchema: ZodSchemaObject);
|
|
16
|
+
validate<T>(requestHttp: RequestHttp): Promise<T>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { ZodValidator as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ZodObject, ZodEffects } from 'zod';
|
|
2
|
+
import IValidationHTTP, { RequestHttp } from '../../../../core/http/validator.js';
|
|
3
|
+
export { zodValidator } from './zod-validator.js';
|
|
4
|
+
import '../../../../base-controller-cec5714c.js';
|
|
5
|
+
|
|
6
|
+
type SchemaDefinition = {
|
|
7
|
+
headers: ZodObject<Record<string, any>>;
|
|
8
|
+
params: ZodObject<Record<string, any>>;
|
|
9
|
+
query: ZodObject<Record<string, any>>;
|
|
10
|
+
body: ZodObject<Record<string, any>> | ZodEffects<ZodObject<Record<string, any>>>;
|
|
11
|
+
};
|
|
12
|
+
type ZodSchemaObject = ZodObject<SchemaDefinition>;
|
|
13
|
+
declare class ZodValidator implements IValidationHTTP {
|
|
14
|
+
private zodSchema;
|
|
15
|
+
constructor(zodSchema: ZodSchemaObject);
|
|
16
|
+
validate<T>(requestHttp: RequestHttp): Promise<T>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { ZodValidator as default };
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/core/errors/api-common-error.ts
|
|
5
|
+
var ApiErrorEnum = /* @__PURE__ */ function(ApiErrorEnum2) {
|
|
6
|
+
ApiErrorEnum2["DOMAIN"] = "ERR001";
|
|
7
|
+
ApiErrorEnum2["APPLICATION"] = "ERR002";
|
|
8
|
+
ApiErrorEnum2["INFRA"] = "ERR003";
|
|
9
|
+
ApiErrorEnum2["HTTP_CLIENT"] = "ERR004";
|
|
10
|
+
ApiErrorEnum2["VALIDATOR"] = "ERR005";
|
|
11
|
+
return ApiErrorEnum2;
|
|
12
|
+
}({});
|
|
13
|
+
|
|
14
|
+
// src/core/errors/validation-error.ts
|
|
15
|
+
var ValidationError = class extends Error {
|
|
16
|
+
static {
|
|
17
|
+
__name(this, "ValidationError");
|
|
18
|
+
}
|
|
19
|
+
props;
|
|
20
|
+
constructor(errors) {
|
|
21
|
+
super("Validation Error");
|
|
22
|
+
this.props = {
|
|
23
|
+
code: 400,
|
|
24
|
+
errorCode: ApiErrorEnum.VALIDATOR,
|
|
25
|
+
message: "Validation Error",
|
|
26
|
+
occurredAt: /* @__PURE__ */ new Date(),
|
|
27
|
+
errors
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/infra/adapters/validators/zod/zod-map-error.ts
|
|
33
|
+
var ZodMapError = class {
|
|
34
|
+
static {
|
|
35
|
+
__name(this, "ZodMapError");
|
|
36
|
+
}
|
|
37
|
+
static mapCommon(error) {
|
|
38
|
+
return {
|
|
39
|
+
type: error.code,
|
|
40
|
+
path: error.path.join("."),
|
|
41
|
+
property: error.path.pop(),
|
|
42
|
+
propertyType: error.expected,
|
|
43
|
+
receivedValue: error.received,
|
|
44
|
+
message: error.message
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
static mapInvalidUnion(error) {
|
|
48
|
+
const [errors] = error.unionErrors.flat().map((err) => err.issues.map((item) => this.mapCommon(item)));
|
|
49
|
+
return errors;
|
|
50
|
+
}
|
|
51
|
+
static mapInvalidType(error) {
|
|
52
|
+
return [
|
|
53
|
+
this.mapCommon(error)
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
static mapErrorsFactory(error) {
|
|
57
|
+
if (error.code === "invalid_union") {
|
|
58
|
+
return this.mapInvalidUnion(error);
|
|
59
|
+
}
|
|
60
|
+
return this.mapInvalidType(error);
|
|
61
|
+
}
|
|
62
|
+
static mapErrors(errors) {
|
|
63
|
+
const standardizedErrors = /* @__PURE__ */ new Map();
|
|
64
|
+
errors.flat().forEach((error) => {
|
|
65
|
+
const keyError = standardizedErrors.get(error.path[0]);
|
|
66
|
+
if (keyError) {
|
|
67
|
+
if (!keyError.propertyErrors) {
|
|
68
|
+
keyError.propertyErrors = [];
|
|
69
|
+
}
|
|
70
|
+
keyError.propertyErrors.push(...this.mapErrorsFactory(error));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
standardizedErrors.set(error.path[0], {
|
|
74
|
+
location: error.path[0],
|
|
75
|
+
propertyErrors: Array.from([
|
|
76
|
+
...this.mapErrorsFactory(error)
|
|
77
|
+
])
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
return Array.from(standardizedErrors, ([, arr]) => ({
|
|
81
|
+
...arr
|
|
82
|
+
})).flat();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// src/infra/adapters/validators/zod/zod-validator.ts
|
|
87
|
+
function zodValidator(schema) {
|
|
88
|
+
return async (request) => {
|
|
89
|
+
const validator = new ZodValidator(schema);
|
|
90
|
+
const validatedRequest = await validator.validate(request);
|
|
91
|
+
return validatedRequest;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
__name(zodValidator, "zodValidator");
|
|
95
|
+
|
|
96
|
+
// src/infra/adapters/validators/zod/index.ts
|
|
97
|
+
var ZodValidator = class {
|
|
98
|
+
static {
|
|
99
|
+
__name(this, "ZodValidator");
|
|
100
|
+
}
|
|
101
|
+
zodSchema;
|
|
102
|
+
constructor(zodSchema) {
|
|
103
|
+
this.zodSchema = zodSchema;
|
|
104
|
+
}
|
|
105
|
+
async validate(requestHttp) {
|
|
106
|
+
const errors = [];
|
|
107
|
+
const { data: headersData = {}, error: headersErrors = {} } = requestHttp.headers ? await this.zodSchema.shape.headers.safeParseAsync(requestHttp.headers, {
|
|
108
|
+
path: [
|
|
109
|
+
"headers"
|
|
110
|
+
]
|
|
111
|
+
}) : {};
|
|
112
|
+
if (headersErrors?.errors) {
|
|
113
|
+
errors.push(headersErrors?.errors);
|
|
114
|
+
}
|
|
115
|
+
const { data: paramsData = {}, error: paramsErrors = {} } = requestHttp.params ? await this.zodSchema.shape.params.safeParseAsync(requestHttp.params, {
|
|
116
|
+
path: [
|
|
117
|
+
"params"
|
|
118
|
+
]
|
|
119
|
+
}) : {};
|
|
120
|
+
if (paramsErrors?.errors) {
|
|
121
|
+
errors.push(paramsErrors?.errors);
|
|
122
|
+
}
|
|
123
|
+
const { data: queryData = {}, error: queryErrors = {} } = requestHttp.query ? await this.zodSchema.shape.query.safeParseAsync(requestHttp.query, {
|
|
124
|
+
path: [
|
|
125
|
+
"query"
|
|
126
|
+
]
|
|
127
|
+
}) : {};
|
|
128
|
+
if (queryErrors?.errors) {
|
|
129
|
+
errors.push(queryErrors?.errors);
|
|
130
|
+
}
|
|
131
|
+
const { data: bodyData = {}, error: bodyErrors = {} } = requestHttp.body ? await this.zodSchema.shape.body.safeParseAsync(requestHttp.body, {
|
|
132
|
+
path: [
|
|
133
|
+
"body"
|
|
134
|
+
]
|
|
135
|
+
}) : {};
|
|
136
|
+
if (bodyErrors?.errors) {
|
|
137
|
+
errors.push(bodyErrors?.errors);
|
|
138
|
+
}
|
|
139
|
+
if (errors.length) {
|
|
140
|
+
throw new ValidationError(ZodMapError.mapErrors(errors));
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
body: bodyData,
|
|
144
|
+
headers: headersData,
|
|
145
|
+
params: paramsData,
|
|
146
|
+
query: queryData
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
export {
|
|
151
|
+
ZodValidator as default,
|
|
152
|
+
zodValidator
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/core/errors/api-common-error.ts","../../../../../src/core/errors/validation-error.ts","../../../../../src/infra/adapters/validators/zod/zod-map-error.ts","../../../../../src/infra/adapters/validators/zod/zod-validator.ts","../../../../../src/infra/adapters/validators/zod/index.ts"],"sourcesContent":["export type PropertiesError = {\n receivedValue?: any\n type: string\n message: string\n property: string | number | undefined\n propertyType?: string\n path?: string\n}\n\nexport type CommonError = {\n location: string\n propertyErrors?: PropertiesError[]\n}\n\nexport type ApiCommonError = {\n code: number\n occurredAt: Date\n message: string\n errorCode: string\n errors?: CommonError[]\n}\n\nexport enum ApiErrorEnum {\n DOMAIN = 'ERR001',\n APPLICATION = 'ERR002',\n INFRA = 'ERR003',\n HTTP_CLIENT = 'ERR004',\n VALIDATOR = 'ERR005',\n}\n","import {\n type ApiCommonError,\n ApiErrorEnum,\n type CommonError,\n} from './api-common-error'\n\nexport default class ValidationError extends Error {\n props: ApiCommonError\n\n constructor(errors: CommonError[]) {\n super('Validation Error')\n this.props = {\n code: 400,\n errorCode: ApiErrorEnum.VALIDATOR,\n message: 'Validation Error',\n occurredAt: new Date(),\n errors,\n }\n }\n}\n","import type { ZodIssue } from 'zod'\n\nimport type {\n CommonError,\n PropertiesError,\n} from '../../../../core/errors/api-common-error'\n\ntype ZodError = ZodIssue & {\n expected: string\n received: string\n}\n\ntype ZodInvalidUnion = ZodError & {\n code: 'invalid_union'\n}\n\nexport default class ZodMapError {\n private static mapCommon(error: ZodError): PropertiesError {\n return {\n type: error.code,\n path: error.path.join('.'),\n property: error.path.pop(),\n propertyType: error.expected,\n receivedValue: error.received,\n message: error.message,\n }\n }\n\n private static mapInvalidUnion(error: ZodInvalidUnion): PropertiesError[] {\n const [errors] = error.unionErrors\n .flat()\n .map((err) => err.issues.map((item: any) => this.mapCommon(item)))\n\n return errors\n }\n\n private static mapInvalidType(error: ZodError): PropertiesError[] {\n return [this.mapCommon(error)]\n }\n\n private static mapErrorsFactory(error: ZodError): PropertiesError[] {\n if (error.code === 'invalid_union') {\n return this.mapInvalidUnion(error)\n }\n\n return this.mapInvalidType(error)\n }\n\n static mapErrors(errors: ZodIssue[][]) {\n const standardizedErrors = new Map<string | number, CommonError>()\n\n errors.flat().forEach((error) => {\n const keyError = standardizedErrors.get(error.path[0])\n\n if (keyError) {\n if (!keyError.propertyErrors) {\n keyError.propertyErrors = []\n }\n\n keyError.propertyErrors.push(\n ...this.mapErrorsFactory(error as ZodError)\n )\n\n return\n }\n\n standardizedErrors.set(error.path[0], {\n location: error.path[0],\n propertyErrors: Array.from([\n ...this.mapErrorsFactory(error as ZodError),\n ]),\n } as CommonError)\n })\n\n return Array.from(standardizedErrors, ([, arr]) => ({\n ...arr,\n })).flat()\n }\n}\n","import { z } from 'zod'\n\nimport { Request } from '../../../../core/http/base-controller'\nimport ZodValidator from './index'\n\nexport type ZodSchema = z.ZodObject<{\n headers: z.ZodObject<Record<string, any>>\n params: z.ZodObject<Record<string, any>>\n query: z.ZodObject<Record<string, any>>\n body:\n | z.ZodObject<Record<string, any>>\n | z.ZodEffects<z.ZodObject<Record<string, any>>>\n}>\n\nexport type MiddlewareFunction = (request: Request) => Promise<Request>\n\nexport function zodValidator(schema: ZodSchema): MiddlewareFunction {\n return async (request: Request): Promise<Request> => {\n const validator = new ZodValidator(schema)\n const validatedRequest = await validator.validate<Request>(request)\n return validatedRequest\n }\n}\n","import { ZodEffects, type ZodError, ZodObject } from 'zod'\n\nimport ValidationError from '../../../../core/errors/validation-error'\nimport IValidationHTTP, { RequestHttp } from '../../../../core/http/validator'\nimport ZodMapError from './zod-map-error'\nimport { zodValidator } from './zod-validator'\n\ntype SchemaDefinition = {\n headers: ZodObject<Record<string, any>>\n params: ZodObject<Record<string, any>>\n query: ZodObject<Record<string, any>>\n body:\n | ZodObject<Record<string, any>>\n | ZodEffects<ZodObject<Record<string, any>>>\n}\n\ntype ZodSchemaObject = ZodObject<SchemaDefinition>\n\nexport default class ZodValidator implements IValidationHTTP {\n constructor(private zodSchema: ZodSchemaObject) {}\n\n async validate<T>(requestHttp: RequestHttp): Promise<T> {\n const errors = []\n\n const {\n data: headersData = {},\n error: headersErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.headers\n ? await this.zodSchema.shape.headers.safeParseAsync(requestHttp.headers, {\n path: ['headers'],\n })\n : {}\n\n if (headersErrors?.errors) {\n errors.push(headersErrors?.errors)\n }\n\n const {\n data: paramsData = {},\n error: paramsErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.params\n ? await this.zodSchema.shape.params.safeParseAsync(requestHttp.params, {\n path: ['params'],\n })\n : {}\n\n if (paramsErrors?.errors) {\n errors.push(paramsErrors?.errors)\n }\n\n const {\n data: queryData = {},\n error: queryErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.query\n ? await this.zodSchema.shape.query.safeParseAsync(requestHttp.query, {\n path: ['query'],\n })\n : {}\n\n if (queryErrors?.errors) {\n errors.push(queryErrors?.errors)\n }\n\n const {\n data: bodyData = {},\n error: bodyErrors = {} as ZodError<{ errors: ZodError[] }>,\n } = requestHttp.body\n ? await this.zodSchema.shape.body.safeParseAsync(requestHttp.body, {\n path: ['body'],\n })\n : {}\n\n if (bodyErrors?.errors) {\n errors.push(bodyErrors?.errors)\n }\n\n if (errors.length) {\n throw new ValidationError(ZodMapError.mapErrors(errors))\n }\n\n return {\n body: bodyData,\n headers: headersData,\n params: paramsData,\n query: queryData,\n } as T\n }\n}\n\nexport { zodValidator }\n"],"mappings":";;;;AAsBO,IAAKA,eAAAA,yBAAAA,eAAAA;;;;;;SAAAA;;;;AChBZ,IAAqBC,kBAArB,cAA6CC,MAAAA;EAN7C,OAM6CA;;;EAC3CC;EAEAC,YAAYC,QAAuB;AACjC,UAAM,kBAAA;AACN,SAAKF,QAAQ;MACXG,MAAM;MACNC,WAAWC,aAAaC;MACxBC,SAAS;MACTC,YAAY,oBAAIC,KAAAA;MAChBP;IACF;EACF;AACF;;;ACHA,IAAqBQ,cAArB,MAAqBA;EAArB,OAAqBA;;;EACnB,OAAeC,UAAUC,OAAkC;AACzD,WAAO;MACLC,MAAMD,MAAME;MACZC,MAAMH,MAAMG,KAAKC,KAAK,GAAA;MACtBC,UAAUL,MAAMG,KAAKG,IAAG;MACxBC,cAAcP,MAAMQ;MACpBC,eAAeT,MAAMU;MACrBC,SAASX,MAAMW;IACjB;EACF;EAEA,OAAeC,gBAAgBZ,OAA2C;AACxE,UAAM,CAACa,MAAAA,IAAUb,MAAMc,YACpBC,KAAI,EACJC,IAAI,CAACC,QAAQA,IAAIC,OAAOF,IAAI,CAACG,SAAc,KAAKpB,UAAUoB,IAAAA,CAAAA,CAAAA;AAE7D,WAAON;EACT;EAEA,OAAeO,eAAepB,OAAoC;AAChE,WAAO;MAAC,KAAKD,UAAUC,KAAAA;;EACzB;EAEA,OAAeqB,iBAAiBrB,OAAoC;AAClE,QAAIA,MAAME,SAAS,iBAAiB;AAClC,aAAO,KAAKU,gBAAgBZ,KAAAA;IAC9B;AAEA,WAAO,KAAKoB,eAAepB,KAAAA;EAC7B;EAEA,OAAOsB,UAAUT,QAAsB;AACrC,UAAMU,qBAAqB,oBAAIC,IAAAA;AAE/BX,WAAOE,KAAI,EAAGU,QAAQ,CAACzB,UAAAA;AACrB,YAAM0B,WAAWH,mBAAmBI,IAAI3B,MAAMG,KAAK,CAAA,CAAE;AAErD,UAAIuB,UAAU;AACZ,YAAI,CAACA,SAASE,gBAAgB;AAC5BF,mBAASE,iBAAiB,CAAA;QAC5B;AAEAF,iBAASE,eAAeC,KAAI,GACvB,KAAKR,iBAAiBrB,KAAAA,CAAAA;AAG3B;MACF;AAEAuB,yBAAmBO,IAAI9B,MAAMG,KAAK,CAAA,GAAI;QACpC4B,UAAU/B,MAAMG,KAAK,CAAA;QACrByB,gBAAgBI,MAAMC,KAAK;aACtB,KAAKZ,iBAAiBrB,KAAAA;SAC1B;MACH,CAAA;IACF,CAAA;AAEA,WAAOgC,MAAMC,KAAKV,oBAAoB,CAAC,CAAA,EAAGW,GAAAA,OAAU;MAClD,GAAGA;IACL,EAAA,EAAInB,KAAI;EACV;AACF;;;AC9DO,SAASoB,aAAaC,QAAiB;AAC5C,SAAO,OAAOC,YAAAA;AACZ,UAAMC,YAAY,IAAIC,aAAaH,MAAAA;AACnC,UAAMI,mBAAmB,MAAMF,UAAUG,SAAkBJ,OAAAA;AAC3D,WAAOG;EACT;AACF;AANgBL;;;ACEhB,IAAqBO,eAArB,MAAqBA;EAhBrB,OAgBqBA;;;;EACnBC,YAAoBC,WAA4B;SAA5BA,YAAAA;EAA6B;EAEjD,MAAMC,SAAYC,aAAsC;AACtD,UAAMC,SAAS,CAAA;AAEf,UAAM,EACJC,MAAMC,cAAc,CAAC,GACrBC,OAAOC,gBAAgB,CAAC,EAAqC,IAC3DL,YAAYM,UACZ,MAAM,KAAKR,UAAUS,MAAMD,QAAQE,eAAeR,YAAYM,SAAS;MACrEG,MAAM;QAAC;;IACT,CAAA,IACA,CAAC;AAEL,QAAIJ,eAAeJ,QAAQ;AACzBA,aAAOS,KAAKL,eAAeJ,MAAAA;IAC7B;AAEA,UAAM,EACJC,MAAMS,aAAa,CAAC,GACpBP,OAAOQ,eAAe,CAAC,EAAqC,IAC1DZ,YAAYa,SACZ,MAAM,KAAKf,UAAUS,MAAMM,OAAOL,eAAeR,YAAYa,QAAQ;MACnEJ,MAAM;QAAC;;IACT,CAAA,IACA,CAAC;AAEL,QAAIG,cAAcX,QAAQ;AACxBA,aAAOS,KAAKE,cAAcX,MAAAA;IAC5B;AAEA,UAAM,EACJC,MAAMY,YAAY,CAAC,GACnBV,OAAOW,cAAc,CAAC,EAAqC,IACzDf,YAAYgB,QACZ,MAAM,KAAKlB,UAAUS,MAAMS,MAAMR,eAAeR,YAAYgB,OAAO;MACjEP,MAAM;QAAC;;IACT,CAAA,IACA,CAAC;AAEL,QAAIM,aAAad,QAAQ;AACvBA,aAAOS,KAAKK,aAAad,MAAAA;IAC3B;AAEA,UAAM,EACJC,MAAMe,WAAW,CAAC,GAClBb,OAAOc,aAAa,CAAC,EAAqC,IACxDlB,YAAYmB,OACZ,MAAM,KAAKrB,UAAUS,MAAMY,KAAKX,eAAeR,YAAYmB,MAAM;MAC/DV,MAAM;QAAC;;IACT,CAAA,IACA,CAAC;AAEL,QAAIS,YAAYjB,QAAQ;AACtBA,aAAOS,KAAKQ,YAAYjB,MAAAA;IAC1B;AAEA,QAAIA,OAAOmB,QAAQ;AACjB,YAAM,IAAIC,gBAAgBC,YAAYC,UAAUtB,MAAAA,CAAAA;IAClD;AAEA,WAAO;MACLkB,MAAMF;MACNX,SAASH;MACTU,QAAQF;MACRK,OAAOF;IACT;EACF;AACF;","names":["ApiErrorEnum","ValidationError","Error","props","constructor","errors","code","errorCode","ApiErrorEnum","VALIDATOR","message","occurredAt","Date","ZodMapError","mapCommon","error","type","code","path","join","property","pop","propertyType","expected","receivedValue","received","message","mapInvalidUnion","errors","unionErrors","flat","map","err","issues","item","mapInvalidType","mapErrorsFactory","mapErrors","standardizedErrors","Map","forEach","keyError","get","propertyErrors","push","set","location","Array","from","arr","zodValidator","schema","request","validator","ZodValidator","validatedRequest","validate","ZodValidator","constructor","zodSchema","validate","requestHttp","errors","data","headersData","error","headersErrors","headers","shape","safeParseAsync","path","push","paramsData","paramsErrors","params","queryData","queryErrors","query","bodyData","bodyErrors","body","length","ValidationError","ZodMapError","mapErrors"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/infra/adapters/validators/zod/zod-map-error.ts
|
|
22
|
+
var zod_map_error_exports = {};
|
|
23
|
+
__export(zod_map_error_exports, {
|
|
24
|
+
default: () => ZodMapError
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(zod_map_error_exports);
|
|
27
|
+
var ZodMapError = class {
|
|
28
|
+
static {
|
|
29
|
+
__name(this, "ZodMapError");
|
|
30
|
+
}
|
|
31
|
+
static mapCommon(error) {
|
|
32
|
+
return {
|
|
33
|
+
type: error.code,
|
|
34
|
+
path: error.path.join("."),
|
|
35
|
+
property: error.path.pop(),
|
|
36
|
+
propertyType: error.expected,
|
|
37
|
+
receivedValue: error.received,
|
|
38
|
+
message: error.message
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
static mapInvalidUnion(error) {
|
|
42
|
+
const [errors] = error.unionErrors.flat().map((err) => err.issues.map((item) => this.mapCommon(item)));
|
|
43
|
+
return errors;
|
|
44
|
+
}
|
|
45
|
+
static mapInvalidType(error) {
|
|
46
|
+
return [
|
|
47
|
+
this.mapCommon(error)
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
static mapErrorsFactory(error) {
|
|
51
|
+
if (error.code === "invalid_union") {
|
|
52
|
+
return this.mapInvalidUnion(error);
|
|
53
|
+
}
|
|
54
|
+
return this.mapInvalidType(error);
|
|
55
|
+
}
|
|
56
|
+
static mapErrors(errors) {
|
|
57
|
+
const standardizedErrors = /* @__PURE__ */ new Map();
|
|
58
|
+
errors.flat().forEach((error) => {
|
|
59
|
+
const keyError = standardizedErrors.get(error.path[0]);
|
|
60
|
+
if (keyError) {
|
|
61
|
+
if (!keyError.propertyErrors) {
|
|
62
|
+
keyError.propertyErrors = [];
|
|
63
|
+
}
|
|
64
|
+
keyError.propertyErrors.push(...this.mapErrorsFactory(error));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
standardizedErrors.set(error.path[0], {
|
|
68
|
+
location: error.path[0],
|
|
69
|
+
propertyErrors: Array.from([
|
|
70
|
+
...this.mapErrorsFactory(error)
|
|
71
|
+
])
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
return Array.from(standardizedErrors, ([, arr]) => ({
|
|
75
|
+
...arr
|
|
76
|
+
})).flat();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=zod-map-error.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/infra/adapters/validators/zod/zod-map-error.ts"],"sourcesContent":["import type { ZodIssue } from 'zod'\n\nimport type {\n CommonError,\n PropertiesError,\n} from '../../../../core/errors/api-common-error'\n\ntype ZodError = ZodIssue & {\n expected: string\n received: string\n}\n\ntype ZodInvalidUnion = ZodError & {\n code: 'invalid_union'\n}\n\nexport default class ZodMapError {\n private static mapCommon(error: ZodError): PropertiesError {\n return {\n type: error.code,\n path: error.path.join('.'),\n property: error.path.pop(),\n propertyType: error.expected,\n receivedValue: error.received,\n message: error.message,\n }\n }\n\n private static mapInvalidUnion(error: ZodInvalidUnion): PropertiesError[] {\n const [errors] = error.unionErrors\n .flat()\n .map((err) => err.issues.map((item: any) => this.mapCommon(item)))\n\n return errors\n }\n\n private static mapInvalidType(error: ZodError): PropertiesError[] {\n return [this.mapCommon(error)]\n }\n\n private static mapErrorsFactory(error: ZodError): PropertiesError[] {\n if (error.code === 'invalid_union') {\n return this.mapInvalidUnion(error)\n }\n\n return this.mapInvalidType(error)\n }\n\n static mapErrors(errors: ZodIssue[][]) {\n const standardizedErrors = new Map<string | number, CommonError>()\n\n errors.flat().forEach((error) => {\n const keyError = standardizedErrors.get(error.path[0])\n\n if (keyError) {\n if (!keyError.propertyErrors) {\n keyError.propertyErrors = []\n }\n\n keyError.propertyErrors.push(\n ...this.mapErrorsFactory(error as ZodError)\n )\n\n return\n }\n\n standardizedErrors.set(error.path[0], {\n location: error.path[0],\n propertyErrors: Array.from([\n ...this.mapErrorsFactory(error as ZodError),\n ]),\n } as CommonError)\n })\n\n return Array.from(standardizedErrors, ([, arr]) => ({\n ...arr,\n })).flat()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgBA;;;;;AAAA,IAAqBA,cAArB,MAAqBA;EAArB,OAAqBA;;;EACnB,OAAeC,UAAUC,OAAkC;AACzD,WAAO;MACLC,MAAMD,MAAME;MACZC,MAAMH,MAAMG,KAAKC,KAAK,GAAA;MACtBC,UAAUL,MAAMG,KAAKG,IAAG;MACxBC,cAAcP,MAAMQ;MACpBC,eAAeT,MAAMU;MACrBC,SAASX,MAAMW;IACjB;EACF;EAEA,OAAeC,gBAAgBZ,OAA2C;AACxE,UAAM,CAACa,MAAAA,IAAUb,MAAMc,YACpBC,KAAI,EACJC,IAAI,CAACC,QAAQA,IAAIC,OAAOF,IAAI,CAACG,SAAc,KAAKpB,UAAUoB,IAAAA,CAAAA,CAAAA;AAE7D,WAAON;EACT;EAEA,OAAeO,eAAepB,OAAoC;AAChE,WAAO;MAAC,KAAKD,UAAUC,KAAAA;;EACzB;EAEA,OAAeqB,iBAAiBrB,OAAoC;AAClE,QAAIA,MAAME,SAAS,iBAAiB;AAClC,aAAO,KAAKU,gBAAgBZ,KAAAA;IAC9B;AAEA,WAAO,KAAKoB,eAAepB,KAAAA;EAC7B;EAEA,OAAOsB,UAAUT,QAAsB;AACrC,UAAMU,qBAAqB,oBAAIC,IAAAA;AAE/BX,WAAOE,KAAI,EAAGU,QAAQ,CAACzB,UAAAA;AACrB,YAAM0B,WAAWH,mBAAmBI,IAAI3B,MAAMG,KAAK,CAAA,CAAE;AAErD,UAAIuB,UAAU;AACZ,YAAI,CAACA,SAASE,gBAAgB;AAC5BF,mBAASE,iBAAiB,CAAA;QAC5B;AAEAF,iBAASE,eAAeC,KAAI,GACvB,KAAKR,iBAAiBrB,KAAAA,CAAAA;AAG3B;MACF;AAEAuB,yBAAmBO,IAAI9B,MAAMG,KAAK,CAAA,GAAI;QACpC4B,UAAU/B,MAAMG,KAAK,CAAA;QACrByB,gBAAgBI,MAAMC,KAAK;aACtB,KAAKZ,iBAAiBrB,KAAAA;SAC1B;MACH,CAAA;IACF,CAAA;AAEA,WAAOgC,MAAMC,KAAKV,oBAAoB,CAAC,CAAA,EAAGW,GAAAA,OAAU;MAClD,GAAGA;IACL,EAAA,EAAInB,KAAI;EACV;AACF;","names":["ZodMapError","mapCommon","error","type","code","path","join","property","pop","propertyType","expected","receivedValue","received","message","mapInvalidUnion","errors","unionErrors","flat","map","err","issues","item","mapInvalidType","mapErrorsFactory","mapErrors","standardizedErrors","Map","forEach","keyError","get","propertyErrors","push","set","location","Array","from","arr"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ZodIssue } from 'zod';
|
|
2
|
+
import { PropertiesError } from '../../../../core/errors/api-common-error.cjs';
|
|
3
|
+
|
|
4
|
+
declare class ZodMapError {
|
|
5
|
+
private static mapCommon;
|
|
6
|
+
private static mapInvalidUnion;
|
|
7
|
+
private static mapInvalidType;
|
|
8
|
+
private static mapErrorsFactory;
|
|
9
|
+
static mapErrors(errors: ZodIssue[][]): {
|
|
10
|
+
location: string;
|
|
11
|
+
propertyErrors?: PropertiesError[];
|
|
12
|
+
}[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { ZodMapError as default };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ZodIssue } from 'zod';
|
|
2
|
+
import { PropertiesError } from '../../../../core/errors/api-common-error.js';
|
|
3
|
+
|
|
4
|
+
declare class ZodMapError {
|
|
5
|
+
private static mapCommon;
|
|
6
|
+
private static mapInvalidUnion;
|
|
7
|
+
private static mapInvalidType;
|
|
8
|
+
private static mapErrorsFactory;
|
|
9
|
+
static mapErrors(errors: ZodIssue[][]): {
|
|
10
|
+
location: string;
|
|
11
|
+
propertyErrors?: PropertiesError[];
|
|
12
|
+
}[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { ZodMapError as default };
|