wsp-ms-core 1.0.15 → 1.0.17
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/{infrastructure/express/index.d.cts → express.d.mts} +1 -1
- package/dist/{infrastructure/express/index.d.ts → express.d.ts} +1 -1
- package/dist/{infrastructure/express/index.cjs → express.js} +2 -2
- package/dist/express.js.map +1 -0
- package/dist/{infrastructure/express/index.js → express.mjs} +1 -1
- package/dist/express.mjs.map +1 -0
- package/dist/index.js +53 -10
- package/dist/index.js.map +1 -1
- package/dist/{index.cjs → index.mjs} +11 -54
- package/dist/index.mjs.map +1 -0
- package/package.json +7 -10
- package/dist/index.cjs.map +0 -1
- package/dist/infrastructure/express/index.cjs.map +0 -1
- package/dist/infrastructure/express/index.js.map +0 -1
- /package/dist/{index.d.cts → index.d.mts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestHandler, ErrorRequestHandler } from 'express';
|
|
2
|
-
import { H as HttpController, E as ErrorManager } from '
|
|
2
|
+
import { H as HttpController, E as ErrorManager } from './ErrorManager-b8cb2152.js';
|
|
3
3
|
|
|
4
4
|
declare function adaptExpressRoute(Controller: new () => HttpController): RequestHandler;
|
|
5
5
|
declare function adaptExpressErrorHandler(errorManager: ErrorManager): ErrorRequestHandler;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestHandler, ErrorRequestHandler } from 'express';
|
|
2
|
-
import { H as HttpController, E as ErrorManager } from '
|
|
2
|
+
import { H as HttpController, E as ErrorManager } from './ErrorManager-b8cb2152.js';
|
|
3
3
|
|
|
4
4
|
declare function adaptExpressRoute(Controller: new () => HttpController): RequestHandler;
|
|
5
5
|
declare function adaptExpressErrorHandler(errorManager: ErrorManager): ErrorRequestHandler;
|
|
@@ -16,7 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
};
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
|
|
19
|
-
// src/
|
|
19
|
+
// src/express.ts
|
|
20
20
|
var express_exports = {};
|
|
21
21
|
__export(express_exports, {
|
|
22
22
|
adaptExpressErrorHandler: () => adaptExpressErrorHandler,
|
|
@@ -174,4 +174,4 @@ function adaptExpressErrorHandler(errorManager) {
|
|
|
174
174
|
adaptExpressErrorHandler,
|
|
175
175
|
adaptExpressRoute
|
|
176
176
|
});
|
|
177
|
-
//# sourceMappingURL=
|
|
177
|
+
//# sourceMappingURL=express.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/express.ts","../src/domain/contracts/ValueObject.ts","../src/domain/value-objects/Language.ts","../src/infrastructure/express/ExpressAdapters.ts"],"sourcesContent":["export * from '@infrastructure/express/ExpressAdapters';","\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import {Request, Response, NextFunction, RequestHandler, ErrorRequestHandler} from 'express';\nimport {HttpController, HttpRequest} from '@infrastructure/contracts/Http';\nimport {ErrorManager} from \"@infrastructure/errors/ErrorManager\";\nimport {Language} from \"@domain/value-objects/Language\";\n\nexport function adaptExpressRoute(Controller: new () => HttpController): RequestHandler {\n return async (req: Request, res: Response, next: NextFunction) => {\n const rawLangHeader = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(rawLangHeader) ? rawLangHeader[0] : rawLangHeader || '';\n const lang = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n const httpRequest: HttpRequest = {\n headers: req.headers as Record<string, string>,\n params: req.params,\n query: Object.fromEntries(Object.entries(req.query).map(([k, v]) => [k, String(v)])),\n lang,\n body: req.body,\n };\n try {\n const controller = new Controller();\n const {statusCode, body} = await controller.handle(httpRequest);\n res.status(statusCode).json(body);\n } catch (err) {\n next(err);\n }\n };\n}\n\nexport function adaptExpressErrorHandler(errorManager: ErrorManager): ErrorRequestHandler {\n return (err, req: Request, res: Response, next: NextFunction) => {\n const raw = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(raw) ? raw[0] : raw ?? '';\n const langCode = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n\n const result = errorManager.handle(err, Language.create(langCode));\n const statusCode = typeof result.status === 'number' ? result.status : 500;\n res.status(statusCode).json({ message: result.message });\n };\n}"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCO,IAAe,cAAf,MAAiD;AAAA,EAI1C,YAAY,OAAmB;AACrC,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,OAAO,OAAO,KAAK;AAAA,EACrC;AAAA,EAIA,IAAW,QAAoB;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,WAAmB;AACtB,WAAO,OAAO,KAAK,MAAM;AAAA,EAC7B;AAAA,EAEO,OAAO,IAA8C;AACxD,QAAI,OAAO,QAAQ,OAAO;AAAW,aAAO;AAC5C,QAAI,GAAG,gBAAgB,KAAK;AAAa,aAAO;AAChD,WAAO,GAAG,UAAU,KAAK;AAAA,EAC7B;AACJ;;;ACvBO,IAAM,YAAN,MAAM,kBAAiB,YAAoB;AAAA,EAwEtC,YAAY,MAAc;AAC9B,UAAM,KAAK,KAAK,EAAE,YAAY,CAAC;AAAA,EACnC;AAAA,EAEU,SAAS,OAAqB;AACpC,QAAI,CAAC,UAAS,UAAU,SAAS,KAAK,GAAG;AACrC,YAAM,IAAI,MAAM,aAAa,KAAK,oBAAoB;AAAA,IAC1D;AAAA,EACJ;AAAA,EAEO,OAAe;AAClB,WAAO,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,OAAc,OAAO,KAAuB;AACxC,UAAM,aAAa,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,KAAK,GAAG;AAC5D,QAAI;AACA,aAAO,IAAI,UAAS,UAAU;AAAA,IAClC,SAAS,OAAY;AACjB,aAAO,UAAS;AAAA,IACpB;AAAA,EACJ;AAEJ;AA/Fa,UAEc,YAA+B;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AApCS,UAsCc,UAAoC,IAAI,UAAS,IAAI;AAtCnE,UAuCc,UAAoC,IAAI,UAAS,IAAI;AAvCnE,UAwCc,wBAAoC,IAAI,UAAS,OAAO;AAxCtE,UAyCc,yBAAoC,IAAI,UAAS,OAAO;AAzCtE,UA0Cc,oBAAoC,IAAI,UAAS,OAAO;AA1CtE,UA2Cc,iBAAqC,IAAI,UAAS,OAAO;AA3CvE,UA4Cc,sBAAoC,IAAI,UAAS,OAAO;AA5CtE,UA6Cc,kBAAoC,IAAI,UAAS,OAAO;AA7CtE,UA8Cc,uBAAoC,IAAI,UAAS,OAAO;AA9CtE,UA+Cc,kBAAoC,IAAI,UAAS,OAAO;AA/CtE,UAgDc,iBAAoC,IAAI,UAAS,OAAO;AAhDtE,UAiDc,mBAAoC,IAAI,UAAS,OAAO;AAjDtE,UAkDc,oBAAoC,IAAI,UAAS,OAAO;AAlDtE,UAmDc,sBAAoC,IAAI,UAAS,IAAI;AAnDnE,UAoDc,UAAoC,IAAI,UAAS,IAAI;AApDnE,UAqDc,oBAAoC,IAAI,UAAS,OAAO;AArDtE,UAsDc,oBAAoC,IAAI,UAAS,OAAO;AAtDtE,UAuDc,qBAAoC,IAAI,UAAS,OAAO;AAvDtE,UAwDc,iBAAoC,IAAI,UAAS,OAAO;AAxDtE,UAyDc,+BAAyC,IAAI,UAAS,OAAO;AAzD3E,UA0Dc,iBAAoC,IAAI,UAAS,OAAO;AA1DtE,UA2Dc,oBAAoC,IAAI,UAAS,OAAO;AA3DtE,UA4Dc,mBAAoC,IAAI,UAAS,OAAO;AA5DtE,UA6Dc,eAAoC,IAAI,UAAS,OAAO;AA7DtE,UA8Dc,kBAAoC,IAAI,UAAS,OAAO;AA9DtE,UA+Dc,gBAAoC,IAAI,UAAS,OAAO;AA/DtE,UAgEc,kBAAoC,IAAI,UAAS,OAAO;AAhEtE,UAiEc,mBAAoC,IAAI,UAAS,OAAO;AAjEtE,UAkEc,kBAAoC,IAAI,UAAS,OAAO;AAlEtE,UAmEc,sBAAoC,IAAI,UAAS,OAAO;AAnEtE,UAoEc,mBAAoC,IAAI,UAAS,OAAO;AApEtE,UAqEc,oBAAoC,IAAI,UAAS,OAAO;AArEtE,UAsEc,sBAAoC,IAAI,UAAS,OAAO;AAtE5E,IAAM,WAAN;;;ACGA,SAAS,kBAAkB,YAAsD;AACpF,SAAO,OAAO,KAAc,KAAe,SAAuB;AAC9D,UAAM,gBAAgB,IAAI,QAAQ,iBAAiB,KAAK,IAAI,QAAQ,iBAAiB,KAAK;AAC1F,UAAM,UAAU,MAAM,QAAQ,aAAa,IAAI,cAAc,CAAC,IAAI,iBAAiB;AACnF,UAAM,OAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY;AACpE,UAAM,cAA2B;AAAA,MAC7B,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,OAAO,OAAO,YAAY,OAAO,QAAQ,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAAA,MACnF;AAAA,MACA,MAAM,IAAI;AAAA,IACd;AACA,QAAI;AACA,YAAM,aAAa,IAAI,WAAW;AAClC,YAAM,EAAC,YAAY,KAAI,IAAI,MAAM,WAAW,OAAO,WAAW;AAC9D,UAAI,OAAO,UAAU,EAAE,KAAK,IAAI;AAAA,IACpC,SAAS,KAAK;AACV,WAAK,GAAG;AAAA,IACZ;AAAA,EACJ;AACJ;AAEO,SAAS,yBAAyB,cAAiD;AACtF,SAAO,CAAC,KAAK,KAAc,KAAe,SAAuB;AAC7D,UAAM,MAAM,IAAI,QAAQ,iBAAiB,KAAK,IAAI,QAAQ,iBAAiB,KAAK;AAChF,UAAM,UAAU,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,OAAO;AACrD,UAAM,WAAW,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY;AAExE,UAAM,SAAS,aAAa,OAAO,KAAK,SAAS,OAAO,QAAQ,CAAC;AACjE,UAAM,aAAa,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AACvE,QAAI,OAAO,UAAU,EAAE,KAAK,EAAE,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC3D;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/domain/contracts/ValueObject.ts","../src/domain/value-objects/Language.ts","../src/infrastructure/express/ExpressAdapters.ts"],"sourcesContent":["\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import {Request, Response, NextFunction, RequestHandler, ErrorRequestHandler} from 'express';\nimport {HttpController, HttpRequest} from '@infrastructure/contracts/Http';\nimport {ErrorManager} from \"@infrastructure/errors/ErrorManager\";\nimport {Language} from \"@domain/value-objects/Language\";\n\nexport function adaptExpressRoute(Controller: new () => HttpController): RequestHandler {\n return async (req: Request, res: Response, next: NextFunction) => {\n const rawLangHeader = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(rawLangHeader) ? rawLangHeader[0] : rawLangHeader || '';\n const lang = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n const httpRequest: HttpRequest = {\n headers: req.headers as Record<string, string>,\n params: req.params,\n query: Object.fromEntries(Object.entries(req.query).map(([k, v]) => [k, String(v)])),\n lang,\n body: req.body,\n };\n try {\n const controller = new Controller();\n const {statusCode, body} = await controller.handle(httpRequest);\n res.status(statusCode).json(body);\n } catch (err) {\n next(err);\n }\n };\n}\n\nexport function adaptExpressErrorHandler(errorManager: ErrorManager): ErrorRequestHandler {\n return (err, req: Request, res: Response, next: NextFunction) => {\n const raw = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(raw) ? raw[0] : raw ?? '';\n const langCode = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n\n const result = errorManager.handle(err, Language.create(langCode));\n const statusCode = typeof result.status === 'number' ? result.status : 500;\n res.status(statusCode).json({ message: result.message });\n };\n}"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/index.ts
|
|
20
|
+
var src_exports = {};
|
|
21
|
+
__export(src_exports, {
|
|
22
|
+
Currency: () => Currency,
|
|
23
|
+
DateTime: () => DateTime,
|
|
24
|
+
DomainEntity: () => DomainEntity,
|
|
25
|
+
DomainError: () => DomainError,
|
|
26
|
+
DomainEvent: () => DomainEvent,
|
|
27
|
+
Email: () => Email,
|
|
28
|
+
ErrorManager: () => ErrorManager,
|
|
29
|
+
FatalError: () => FatalError,
|
|
30
|
+
HttpHealthCheckController: () => HttpHealthCheckController,
|
|
31
|
+
HttpNotFoundController: () => HttpNotFoundController,
|
|
32
|
+
InternalError: () => InternalError,
|
|
33
|
+
Language: () => Language,
|
|
34
|
+
MysqlConnection: () => MysqlConnection,
|
|
35
|
+
MysqlConnector: () => MysqlConnector,
|
|
36
|
+
Price: () => Price,
|
|
37
|
+
UUID: () => UUID,
|
|
38
|
+
UsageError: () => UsageError,
|
|
39
|
+
ValueObject: () => ValueObject
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(src_exports);
|
|
42
|
+
|
|
1
43
|
// src/domain/value-objects/DateTime.ts
|
|
2
|
-
|
|
44
|
+
var import_luxon = require("luxon");
|
|
3
45
|
|
|
4
46
|
// src/domain/contracts/ValueObject.ts
|
|
5
47
|
var ValueObject = class {
|
|
@@ -26,7 +68,7 @@ var ValueObject = class {
|
|
|
26
68
|
var _DateTime = class _DateTime extends ValueObject {
|
|
27
69
|
constructor(value) {
|
|
28
70
|
super(value);
|
|
29
|
-
this._dt =
|
|
71
|
+
this._dt = import_luxon.DateTime.fromFormat(value, _DateTime.DEFAULT_FORMAT, { zone: "utc" });
|
|
30
72
|
}
|
|
31
73
|
static fromLuxon(dt) {
|
|
32
74
|
return new _DateTime(_DateTime.toUtcFormat(dt));
|
|
@@ -35,7 +77,7 @@ var _DateTime = class _DateTime extends ValueObject {
|
|
|
35
77
|
return dt.setZone("utc").toFormat(_DateTime.DEFAULT_FORMAT);
|
|
36
78
|
}
|
|
37
79
|
validate(value) {
|
|
38
|
-
const q =
|
|
80
|
+
const q = import_luxon.DateTime.fromFormat(value, _DateTime.DEFAULT_FORMAT, { zone: "utc" });
|
|
39
81
|
if (!q.isValid) {
|
|
40
82
|
throw new Error(`Invalid DateTime: ${q.invalidExplanation}`);
|
|
41
83
|
}
|
|
@@ -102,14 +144,14 @@ var _DateTime = class _DateTime extends ValueObject {
|
|
|
102
144
|
}
|
|
103
145
|
static create(input) {
|
|
104
146
|
if (input === void 0) {
|
|
105
|
-
return new _DateTime(_DateTime.toUtcFormat(
|
|
147
|
+
return new _DateTime(_DateTime.toUtcFormat(import_luxon.DateTime.now()));
|
|
106
148
|
}
|
|
107
149
|
if (typeof input === "number") {
|
|
108
150
|
return new _DateTime(
|
|
109
|
-
_DateTime.toUtcFormat(
|
|
151
|
+
_DateTime.toUtcFormat(import_luxon.DateTime.fromMillis(input, { zone: "utc" }))
|
|
110
152
|
);
|
|
111
153
|
}
|
|
112
|
-
const iso =
|
|
154
|
+
const iso = import_luxon.DateTime.fromISO(input, { zone: "utc" });
|
|
113
155
|
if (iso.isValid) {
|
|
114
156
|
return new _DateTime(_DateTime.toUtcFormat(iso));
|
|
115
157
|
}
|
|
@@ -506,7 +548,7 @@ _ErrorManager.TEMPLATES = /* @__PURE__ */ new Map();
|
|
|
506
548
|
var ErrorManager = _ErrorManager;
|
|
507
549
|
|
|
508
550
|
// src/infrastructure/mysql/MysqlConnector.ts
|
|
509
|
-
|
|
551
|
+
var import_promise = require("mysql2/promise");
|
|
510
552
|
|
|
511
553
|
// src/infrastructure/mysql/MysqlConnection.ts
|
|
512
554
|
var MysqlConnection = class {
|
|
@@ -545,7 +587,7 @@ var MysqlConnection = class {
|
|
|
545
587
|
// src/infrastructure/mysql/MysqlConnector.ts
|
|
546
588
|
var _MysqlConnector = class _MysqlConnector {
|
|
547
589
|
constructor(pool) {
|
|
548
|
-
this._pool = pool ?? createPool({
|
|
590
|
+
this._pool = pool ?? (0, import_promise.createPool)({
|
|
549
591
|
host: process.env.DB_HOST,
|
|
550
592
|
port: Number(process.env.DB_PORT ?? 3306),
|
|
551
593
|
user: process.env.DB_USER,
|
|
@@ -608,7 +650,8 @@ var HttpHealthCheckController = class {
|
|
|
608
650
|
};
|
|
609
651
|
}
|
|
610
652
|
};
|
|
611
|
-
export
|
|
653
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
654
|
+
0 && (module.exports = {
|
|
612
655
|
Currency,
|
|
613
656
|
DateTime,
|
|
614
657
|
DomainEntity,
|
|
@@ -627,5 +670,5 @@ export {
|
|
|
627
670
|
UUID,
|
|
628
671
|
UsageError,
|
|
629
672
|
ValueObject
|
|
630
|
-
};
|
|
673
|
+
});
|
|
631
674
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/domain/value-objects/DateTime.ts","../src/domain/contracts/ValueObject.ts","../src/domain/contracts/DomainEntity.ts","../src/domain/contracts/DomainError.ts","../src/domain/contracts/DomainEvent.ts","../src/domain/errors/FatalError.ts","../src/domain/errors/InternalError.ts","../src/domain/errors/UsageError.ts","../src/domain/value-objects/Currency.ts","../src/domain/value-objects/Email.ts","../src/domain/value-objects/Language.ts","../src/domain/value-objects/Price.ts","../src/domain/value-objects/UUID.ts","../src/utils/StringVars.ts","../src/infrastructure/errors/ErrorManager.ts","../src/infrastructure/mysql/MysqlConnector.ts","../src/infrastructure/mysql/MysqlConnection.ts","../src/infrastructure/http/HttpNotFoundController.ts","../src/infrastructure/http/HttpHealthCheckController.ts"],"sourcesContent":["import {DateTime as LuxonDateTime} from 'luxon';\nimport {ValueObject} from \"@domain/contracts/ValueObject\";\n\n\nexport class DateTime extends ValueObject<string> {\n\n public static readonly DEFAULT_FORMAT: string = 'yyyy-MM-dd HH:mm:ss';\n\n private readonly _dt: LuxonDateTime;\n\n private static fromLuxon(dt: LuxonDateTime): DateTime {\n return new DateTime(DateTime.toUtcFormat(dt));\n }\n\n private static toUtcFormat(dt: LuxonDateTime): string {\n return dt.setZone('utc').toFormat(DateTime.DEFAULT_FORMAT);\n }\n\n private constructor(value: string) {\n super(value);\n this._dt = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n }\n\n protected validate(value: string): void {\n const q = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n if (!q.isValid) {\n throw new Error(`Invalid DateTime: ${q.invalidExplanation}`);\n }\n }\n\n public plusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({years}));\n }\n\n public plusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({months}));\n }\n\n public plusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({days}));\n }\n\n public plusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({hours}));\n }\n\n public plusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({minutes}));\n }\n\n public plusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({seconds}));\n }\n\n public minusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({years}));\n }\n\n public minusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({months}));\n }\n\n public minusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({days}));\n }\n\n public minusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({hours}));\n }\n\n public minusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({minutes}));\n }\n\n public minusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({seconds}));\n }\n\n public get year(): number {\n return this._dt.year;\n }\n\n public get month(): number {\n return this._dt.month;\n }\n\n public get day(): number {\n return this._dt.day;\n }\n\n public get hour(): number {\n return this._dt.hour;\n }\n\n public get minute(): number {\n return this._dt.minute;\n }\n\n public get second(): number {\n return this._dt.second;\n }\n\n public getMonthName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('LLLL');\n }\n\n public getWeekdayName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('cccc');\n }\n\n public static create(input?: string | number): DateTime {\n if (input === undefined) {\n return new DateTime(DateTime.toUtcFormat(LuxonDateTime.now()));\n }\n\n /* ① timestamp */\n if (typeof input === 'number') {\n return new DateTime(\n DateTime.toUtcFormat(LuxonDateTime.fromMillis(input, { zone: 'utc' })),\n );\n }\n\n /* ② ISO string o ya formateado */\n const iso = LuxonDateTime.fromISO(input, { zone: 'utc' });\n if (iso.isValid) {\n return new DateTime(DateTime.toUtcFormat(iso));\n }\n\n /* ③ se asume que viene en formato DEFAULT_FORMAT (UTC) */\n return new DateTime(input);\n }\n}\n","\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import {UUID} from \"@domain/value-objects/UUID\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport abstract class DomainEntity<T extends Record<string, string | number | boolean>> {\n\n public readonly uuid: UUID;\n\n private readonly _createdAt: DateTime;\n private _updatedAt: DateTime;\n private _deletedAt?: DateTime;\n\n protected readonly props: T;\n\n protected constructor(\n uuid: UUID,\n props: T,\n audit?: { createdAt?: DateTime; updatedAt?: DateTime; deletedAt?: DateTime },\n ) {\n this.uuid = uuid;\n this.props = props;\n\n this._createdAt = audit?.createdAt ?? DateTime.create();\n this._updatedAt = audit?.updatedAt ?? this.createdAt;\n this._deletedAt = audit?.deletedAt;\n }\n\n protected touch(): void {\n this._updatedAt = DateTime.create();\n }\n\n public get createdAt(): DateTime {\n return this._createdAt;\n }\n\n public get updatedAt(): DateTime {\n return this._updatedAt;\n }\n\n public get deletedAt(): DateTime | undefined {\n return this._deletedAt;\n }\n\n public get isDeleted(): boolean {\n return Boolean(this._deletedAt);\n }\n\n public abstract equals(entity?: DomainEntity<T>): boolean;\n\n public softDelete(): void {\n if (!this._deletedAt) {\n this._deletedAt = DateTime.create();\n this.touch();\n }\n }\n\n public abstract toPrimitives(): Record<string, unknown>;\n\n}\n","export abstract class DomainError extends Error {\n\n public readonly type: string;\n\n protected constructor(type: string, message = '') {\n super(message);\n this.type = type;\n }\n}","import {DateTime} from \"../value-objects/DateTime\";\n\nexport abstract class DomainEvent<T = unknown> {\n\n readonly type: string;\n private readonly _occurredAt: DateTime;\n private readonly _payload: T;\n\n protected constructor(payload: T) {\n this._payload = payload;\n this._occurredAt = DateTime.create();\n }\n\n get payload(): T {\n return this._payload;\n }\n\n get occurredAt(): DateTime {\n return this._occurredAt;\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class FatalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class InternalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class UsageError extends DomainError {\n\n public readonly vars: Record<string, any>;\n\n public constructor(type: string, vars: Record<string, any> = {}) {\n super(type);\n this.vars = vars;\n }\n\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Currency extends ValueObject<string> {\n\n public static readonly ALPHA_REGEX = /^[A-Z]{3}$/u;\n public static readonly NUM_REGEX = /^\\d{3}$/u;\n\n private static readonly ALPHA_TO_NUM: Record<string, number> = {\n USD: 840,\n EUR: 978,\n UYU: 858,\n ARS: 32,\n BRL: 986,\n };\n\n private static readonly NUM_TO_ALPHA: Record<number, string> =\n Object.entries(Currency.ALPHA_TO_NUM).reduce(\n (acc, [alpha, num]) => {\n acc[num as number] = alpha;\n return acc;\n },\n {} as Record<number, string>,\n );\n\n public static readonly USD = new Currency('USD');\n public static readonly EUR = new Currency('EUR');\n public static readonly UYU = new Currency('UYU');\n public static readonly ARS = new Currency('ARS');\n public static readonly BRL = new Currency('BRL');\n\n public readonly numeric: number;\n\n private constructor(alpha: string) {\n super(alpha.toUpperCase().trim());\n this.numeric = Currency.ALPHA_TO_NUM[this.value];\n }\n\n protected validate(alpha: string): void {\n const code = alpha.toUpperCase().trim();\n if (!Currency.ALPHA_REGEX.test(code)) {\n throw new Error(`Currency code <${alpha}> is not a valid ISO‑4217 alpha value`);\n }\n if (!(code in Currency.ALPHA_TO_NUM)) {\n throw new Error(`Currency <${code}> is not supported`);\n }\n }\n\n public static create(raw: string | number): Currency {\n if (typeof raw === 'number' || Currency.NUM_REGEX.test(raw)) {\n const num = Number(raw);\n const alpha = Currency.NUM_TO_ALPHA[num];\n if (!alpha) {\n throw new Error(`Numeric currency <${raw}> is not supported`);\n }\n return new Currency(alpha);\n }\n return new Currency(String(raw));\n }\n\n public static isValid(raw: string | number): boolean {\n try {\n Currency.create(raw);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Email extends ValueObject<string> {\n\n public static readonly REGEX: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u;\n\n private constructor(email: string) {\n super(email.trim());\n }\n\n protected validate(value: string): void {\n if (!Email.REGEX.test(value)) {\n throw new Error(`Email <${value}> is not a valid address`);\n }\n }\n\n public static create(raw: string): Email {\n return new Email(raw);\n }\n\n public static isValid(raw: string): boolean {\n return Email.REGEX.test(raw.trim());\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\nimport { Currency } from '@domain/value-objects/Currency';\n\nexport class Price extends ValueObject<{ amount: number; currency: Currency }> {\n\n public static readonly MIN_AMOUNT: number = -1000000;\n\n public readonly amount: number;\n public readonly currency: Currency;\n\n private constructor(amount: number, currency: Currency) {\n super({ amount, currency });\n this.amount = amount;\n this.currency = currency;\n }\n\n protected validate(props: { amount: number; currency: Currency }): void {\n const { amount, currency } = props;\n\n if (typeof amount !== 'number' || Number.isNaN(amount) || !Number.isFinite(amount)) {\n throw new Error(`Price amount <${amount}> is not a valid number`);\n }\n if (amount < Price.MIN_AMOUNT) {\n throw new Error(`Price amount <${amount}> must be ≥ ${Price.MIN_AMOUNT}`);\n }\n }\n\n public equals(other?: Price | null): boolean {\n if (!other) return false;\n return this.amount === other.amount && this.currency.equals(other.currency);\n }\n\n private assertSameCurrency(other: Price): void {\n if (!this.currency.equals(other.currency)) {\n throw new Error('Cannot operate on Price objects with different currencies');\n }\n }\n\n public add(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount + other.amount, this.currency);\n }\n\n public subtract(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount - other.amount, this.currency);\n }\n\n public static create(amount: number, currency: Currency | string | number): Price {\n const cur = currency instanceof Currency ? currency : Currency.create(currency);\n return new Price(amount, cur);\n }\n\n}\n","import {ValueObject} from \"@domain/contracts/ValueObject\";\n\nexport class UUID extends ValueObject<string> {\n\n private constructor(value: string) {\n super(value);\n }\n\n protected validate(uuid: string) {\n if (!UUID.isValid(uuid)) {\n throw new Error(`Invalid uuid ${uuid}`);\n }\n }\n\n public static create(uuid?: string): UUID {\n return new UUID(uuid ?? crypto.randomUUID());\n }\n\n public static isValid(uuid: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid);\n }\n\n}","export class StringVars {\n\n public static parse(str: string, ob: { [key: string]: any }): string {\n const regex = /{{(.*?)}}/g;\n return str.replace(regex, (match, variable) => {\n if (ob.hasOwnProperty(variable.trim())) {\n return ob[variable.trim()];\n } else {\n return match;\n }\n });\n }\n\n}","import {Language} from \"@domain/value-objects/Language\";\nimport {FatalError} from \"@domain/errors/FatalError\";\nimport {InternalError} from \"@domain/errors/InternalError\";\nimport {UsageError} from \"@domain/errors/UsageError\";\nimport {StringVars} from \"@utils/StringVars\";\nimport {Logger} from \"@infrastructure/contracts/Logger\";\n\nexport interface ErrorTemplate {\n type: string;\n languages: Record<string, string>;\n}\n\nexport type ErrorManagerHandleResult = {\n status: number | string;\n message: string;\n};\n\nexport class ErrorManager {\n\n private static readonly DEFAULT_MESSAGES: Record<string, string> = {\n 'es': 'Ups, hemos encontrado un error. Nuestro equipo ya está trabajando para solucionarlo',\n 'en': 'Ups, we found an error. Our team is working on it.',\n 'pt': 'Ops, encontramos um bug. Nossa equipe já está trabalhando para resolver isso.',\n };\n\n public static readonly APP_ERRORS = {\n UNDEFINED: 'UNDEFINED_ERROR',\n PROCESS: 'PROCESS_ERROR',\n DATABASE: 'DATABASE_ERROR'\n } as const;\n\n private static readonly TEMPLATES = new Map<string, ErrorTemplate>();\n\n public constructor(private readonly logger: Logger | null = null) {}\n\n private getDefaultMessage(lang: Language): string {\n return (ErrorManager.DEFAULT_MESSAGES[lang.value] || ErrorManager.DEFAULT_MESSAGES[lang.base()] || 'error');\n }\n\n private onFatal(err: FatalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.fatal(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onInternal(err: InternalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.error(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onUsage(err: UsageError, lang: Language): ErrorManagerHandleResult {\n const tmpl = ErrorManager.TEMPLATES.get(err.type);\n if (!tmpl) {\n this.logger?.error('TEMPLATE_NOT_FOUND', `${err.type}`);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n const code = lang.value;\n const base = lang.base();\n const rawMsg =\n tmpl.languages[code] ??\n tmpl.languages[base] ??\n this.getDefaultMessage(lang);\n return {\n status: 'ERROR',\n message: StringVars.parse(rawMsg, err.vars),\n };\n }\n\n private onUnknown(err: Error, lang: Language): ErrorManagerHandleResult {\n this.logger?.error('UNKNOWN_ERROR', err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n public handle(err: Error, lang: Language): ErrorManagerHandleResult {\n if (['local','dev'].includes(process.env.ENVIRONMENT ?? '')) {\n console.log(err);\n }\n if (err instanceof FatalError) {\n return this.onFatal(err, lang);\n }\n if (err instanceof InternalError) {\n return this.onInternal(err, lang);\n }\n if (err instanceof UsageError) {\n return this.onUsage(err, lang);\n }\n return this.onUnknown(err, lang);\n }\n\n public static addTemplate(template: ErrorTemplate): void {\n ErrorManager.TEMPLATES.set(template.type, template);\n }\n\n}\n","import { createPool, Pool, PoolConnection } from 'mysql2/promise';\nimport {DatabaseConnector} from \"@infrastructure/contracts/DatabaseConnector\";\nimport {MysqlConnection} from \"@infrastructure/mysql/MysqlConnection\";\n\nexport class MysqlConnector implements DatabaseConnector<MysqlConnection> {\n public static readonly DEFAULT_POOL_SIZE: number = 10;\n\n private readonly _pool: Pool;\n\n public constructor(pool?: Pool) {\n this._pool =\n pool ??\n createPool({\n host: process.env.DB_HOST,\n port: Number(process.env.DB_PORT ?? 3306),\n user: process.env.DB_USER,\n password: process.env.DB_PASSWORD,\n database: process.env.DB_NAME,\n connectionLimit:\n Number(process.env.DB_POOL_SIZE) || MysqlConnector.DEFAULT_POOL_SIZE,\n decimalNumbers: true,\n });\n }\n\n private async wrap(conn: PoolConnection): Promise<MysqlConnection> {\n return new MysqlConnection(conn);\n }\n\n public async getConnection(): Promise<MysqlConnection> {\n const conn: PoolConnection = await this._pool.getConnection();\n return this.wrap(conn);\n }\n\n public async closePool(): Promise<void> {\n await this._pool.end();\n }\n\n public static async ping(): Promise<boolean> {\n const connector: MysqlConnector = new MysqlConnector();\n try {\n const conn = await connector._pool.getConnection();\n await conn.ping();\n conn.release();\n return true;\n } catch {\n return false;\n } finally {\n await connector.closePool();\n }\n }\n}\n","import {FieldPacket, PoolConnection, RowDataPacket} from \"mysql2/promise\";\nimport {DatabaseConnection} from \"@infrastructure/contracts/DatabaseConnection\";\n\nexport class MysqlConnection implements DatabaseConnection<string, any[], RowDataPacket> {\n\n private readonly _conn: PoolConnection;\n\n public constructor(conn: PoolConnection) {\n this._conn = conn;\n }\n\n public async query<R = RowDataPacket>(statement: string, params: any[] = [],): Promise<R[]> {\n const [rows] = await this._conn.query<R[] & RowDataPacket[] & FieldPacket[]>(statement, params);\n return rows as R[];\n }\n\n public async begin(): Promise<void> {\n await this._conn.beginTransaction();\n }\n\n public async commit(): Promise<void> {\n await this._conn.commit();\n }\n\n public async rollback(): Promise<void> {\n await this._conn.rollback();\n }\n\n public async transaction<T>(fn: (conn: this) => Promise<T>): Promise<T> {\n await this.begin();\n try {\n const result: T = await fn(this);\n await this.commit();\n return result;\n } catch (err) {\n await this.rollback();\n throw err;\n }\n }\n\n public async close(): Promise<void> {\n this._conn.release();\n }\n\n}\n","import { HttpController, HttpRequest, HttpResponse } from '@infrastructure/contracts/Http';\n\nexport class HttpNotFoundController implements HttpController {\n public async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 404,\n body: {\n status: 'NOT_FOUND',\n message: `Route ${request.headers.location} not found`,\n },\n };\n }\n}\n","import {HttpController, HttpRequest, HttpResponse} from \"@infrastructure/contracts/Http\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport class HttpHealthCheckController implements HttpController {\n async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 200,\n body: {\n date: DateTime.create().value,\n code: 200,\n status: 'OK'\n }\n }\n }\n}"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/domain/value-objects/DateTime.ts","../src/domain/contracts/ValueObject.ts","../src/domain/contracts/DomainEntity.ts","../src/domain/contracts/DomainError.ts","../src/domain/contracts/DomainEvent.ts","../src/domain/errors/FatalError.ts","../src/domain/errors/InternalError.ts","../src/domain/errors/UsageError.ts","../src/domain/value-objects/Currency.ts","../src/domain/value-objects/Email.ts","../src/domain/value-objects/Language.ts","../src/domain/value-objects/Price.ts","../src/domain/value-objects/UUID.ts","../src/utils/StringVars.ts","../src/infrastructure/errors/ErrorManager.ts","../src/infrastructure/mysql/MysqlConnector.ts","../src/infrastructure/mysql/MysqlConnection.ts","../src/infrastructure/http/HttpNotFoundController.ts","../src/infrastructure/http/HttpHealthCheckController.ts"],"sourcesContent":["/* ──────────────────────────────────────────────── *\n * DOMAIN *\n * ──────────────────────────────────────────────── */\n// Contracts\nexport {DomainEntity} from './domain/contracts/DomainEntity';\nexport {DomainError} from './domain/contracts/DomainError';\nexport {DomainEvent} from './domain/contracts/DomainEvent';\nexport {ValueObject} from './domain/contracts/ValueObject';\n// Errors\nexport {FatalError} from './domain/errors/FatalError';\nexport {InternalError} from './domain/errors/InternalError';\nexport {UsageError} from './domain/errors/UsageError';\n// Value objects\nexport {Currency} from './domain/value-objects/Currency';\nexport {DateTime} from './domain/value-objects/DateTime';\nexport {Email} from './domain/value-objects/Email';\nexport {Language} from './domain/value-objects/Language';\nexport {Price} from './domain/value-objects/Price';\nexport {UUID} from './domain/value-objects/UUID';\n\n\n/* ──────────────────────────────────────────────── *\n * APPLICATION *\n * ──────────────────────────────────────────────── */\n// Contracts\nexport {EventBus} from './application/contracts/EventBus';\nexport {EventBusRepository} from './application/contracts/EventBusRepository';\n\n\n/* ──────────────────────────────────────────────── *\n * INFRASTRUCTURE *\n * ──────────────────────────────────────────────── */\n// Contracts\nexport {DatabaseConnector} from './infrastructure/contracts/DatabaseConnector';\nexport {DatabaseConnection} from './infrastructure/contracts/DatabaseConnection';\nexport {Logger} from './infrastructure/contracts/Logger';\nexport {HttpRequest, HttpResponse, HttpController, UploadedFile} from './infrastructure/contracts/Http';\n// Errors\nexport {ErrorManager, ErrorManagerHandleResult, ErrorTemplate} from './infrastructure/errors/ErrorManager';\n// Mysql\nexport {MysqlConnector} from './infrastructure/mysql/MysqlConnector';\nexport {MysqlConnection} from './infrastructure/mysql/MysqlConnection';\n\nexport {HttpNotFoundController} from './infrastructure/http/HttpNotFoundController';\nexport {HttpHealthCheckController} from './infrastructure/http/HttpHealthCheckController';\n\n","import {DateTime as LuxonDateTime} from 'luxon';\nimport {ValueObject} from \"@domain/contracts/ValueObject\";\n\nexport class DateTime extends ValueObject<string> {\n\n public static readonly DEFAULT_FORMAT: string = 'yyyy-MM-dd HH:mm:ss';\n\n private readonly _dt: LuxonDateTime;\n\n private static fromLuxon(dt: LuxonDateTime): DateTime {\n return new DateTime(DateTime.toUtcFormat(dt));\n }\n\n private static toUtcFormat(dt: LuxonDateTime): string {\n return dt.setZone('utc').toFormat(DateTime.DEFAULT_FORMAT);\n }\n\n private constructor(value: string) {\n super(value);\n this._dt = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n }\n\n protected validate(value: string): void {\n const q = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n if (!q.isValid) {\n throw new Error(`Invalid DateTime: ${q.invalidExplanation}`);\n }\n }\n\n public plusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({years}));\n }\n\n public plusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({months}));\n }\n\n public plusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({days}));\n }\n\n public plusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({hours}));\n }\n\n public plusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({minutes}));\n }\n\n public plusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({seconds}));\n }\n\n public minusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({years}));\n }\n\n public minusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({months}));\n }\n\n public minusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({days}));\n }\n\n public minusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({hours}));\n }\n\n public minusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({minutes}));\n }\n\n public minusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({seconds}));\n }\n\n public get year(): number {\n return this._dt.year;\n }\n\n public get month(): number {\n return this._dt.month;\n }\n\n public get day(): number {\n return this._dt.day;\n }\n\n public get hour(): number {\n return this._dt.hour;\n }\n\n public get minute(): number {\n return this._dt.minute;\n }\n\n public get second(): number {\n return this._dt.second;\n }\n\n public getMonthName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('LLLL');\n }\n\n public getWeekdayName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('cccc');\n }\n\n public static create(input?: string | number): DateTime {\n if (input === undefined) {\n return new DateTime(DateTime.toUtcFormat(LuxonDateTime.now()));\n }\n\n /* ① timestamp */\n if (typeof input === 'number') {\n return new DateTime(\n DateTime.toUtcFormat(LuxonDateTime.fromMillis(input, { zone: 'utc' })),\n );\n }\n\n /* ② ISO string o ya formateado */\n const iso = LuxonDateTime.fromISO(input, { zone: 'utc' });\n if (iso.isValid) {\n return new DateTime(DateTime.toUtcFormat(iso));\n }\n\n /* ③ se asume que viene en formato DEFAULT_FORMAT (UTC) */\n return new DateTime(input);\n }\n}\n","\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import {UUID} from \"@domain/value-objects/UUID\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport abstract class DomainEntity<T extends Record<string, string | number | boolean>> {\n\n public readonly uuid: UUID;\n\n private readonly _createdAt: DateTime;\n private _updatedAt: DateTime;\n private _deletedAt?: DateTime;\n\n protected readonly props: T;\n\n protected constructor(\n uuid: UUID,\n props: T,\n audit?: { createdAt?: DateTime; updatedAt?: DateTime; deletedAt?: DateTime },\n ) {\n this.uuid = uuid;\n this.props = props;\n\n this._createdAt = audit?.createdAt ?? DateTime.create();\n this._updatedAt = audit?.updatedAt ?? this.createdAt;\n this._deletedAt = audit?.deletedAt;\n }\n\n protected touch(): void {\n this._updatedAt = DateTime.create();\n }\n\n public get createdAt(): DateTime {\n return this._createdAt;\n }\n\n public get updatedAt(): DateTime {\n return this._updatedAt;\n }\n\n public get deletedAt(): DateTime | undefined {\n return this._deletedAt;\n }\n\n public get isDeleted(): boolean {\n return Boolean(this._deletedAt);\n }\n\n public abstract equals(entity?: DomainEntity<T>): boolean;\n\n public softDelete(): void {\n if (!this._deletedAt) {\n this._deletedAt = DateTime.create();\n this.touch();\n }\n }\n\n public abstract toPrimitives(): Record<string, unknown>;\n\n}\n","export abstract class DomainError extends Error {\n\n public readonly type: string;\n\n protected constructor(type: string, message = '') {\n super(message);\n this.type = type;\n }\n}","import {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport abstract class DomainEvent<T = unknown> {\n\n readonly type: string;\n private readonly _occurredAt: DateTime;\n private readonly _payload: T;\n\n protected constructor(payload: T) {\n this._payload = payload;\n this._occurredAt = DateTime.create();\n }\n\n get payload(): T {\n return this._payload;\n }\n\n get occurredAt(): DateTime {\n return this._occurredAt;\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class FatalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class InternalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class UsageError extends DomainError {\n\n public readonly vars: Record<string, any>;\n\n public constructor(type: string, vars: Record<string, any> = {}) {\n super(type);\n this.vars = vars;\n }\n\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Currency extends ValueObject<string> {\n\n public static readonly ALPHA_REGEX = /^[A-Z]{3}$/u;\n public static readonly NUM_REGEX = /^\\d{3}$/u;\n\n private static readonly ALPHA_TO_NUM: Record<string, number> = {\n USD: 840,\n EUR: 978,\n UYU: 858,\n ARS: 32,\n BRL: 986,\n };\n\n private static readonly NUM_TO_ALPHA: Record<number, string> =\n Object.entries(Currency.ALPHA_TO_NUM).reduce(\n (acc, [alpha, num]) => {\n acc[num as number] = alpha;\n return acc;\n },\n {} as Record<number, string>,\n );\n\n public static readonly USD = new Currency('USD');\n public static readonly EUR = new Currency('EUR');\n public static readonly UYU = new Currency('UYU');\n public static readonly ARS = new Currency('ARS');\n public static readonly BRL = new Currency('BRL');\n\n public readonly numeric: number;\n\n private constructor(alpha: string) {\n super(alpha.toUpperCase().trim());\n this.numeric = Currency.ALPHA_TO_NUM[this.value];\n }\n\n protected validate(alpha: string): void {\n const code = alpha.toUpperCase().trim();\n if (!Currency.ALPHA_REGEX.test(code)) {\n throw new Error(`Currency code <${alpha}> is not a valid ISO‑4217 alpha value`);\n }\n if (!(code in Currency.ALPHA_TO_NUM)) {\n throw new Error(`Currency <${code}> is not supported`);\n }\n }\n\n public static create(raw: string | number): Currency {\n if (typeof raw === 'number' || Currency.NUM_REGEX.test(raw)) {\n const num = Number(raw);\n const alpha = Currency.NUM_TO_ALPHA[num];\n if (!alpha) {\n throw new Error(`Numeric currency <${raw}> is not supported`);\n }\n return new Currency(alpha);\n }\n return new Currency(String(raw));\n }\n\n public static isValid(raw: string | number): boolean {\n try {\n Currency.create(raw);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Email extends ValueObject<string> {\n\n public static readonly REGEX: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u;\n\n private constructor(email: string) {\n super(email.trim());\n }\n\n protected validate(value: string): void {\n if (!Email.REGEX.test(value)) {\n throw new Error(`Email <${value}> is not a valid address`);\n }\n }\n\n public static create(raw: string): Email {\n return new Email(raw);\n }\n\n public static isValid(raw: string): boolean {\n return Email.REGEX.test(raw.trim());\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\nimport { Currency } from '@domain/value-objects/Currency';\n\nexport class Price extends ValueObject<{ amount: number; currency: Currency }> {\n\n public static readonly MIN_AMOUNT: number = -1000000;\n\n public readonly amount: number;\n public readonly currency: Currency;\n\n private constructor(amount: number, currency: Currency) {\n super({ amount, currency });\n this.amount = amount;\n this.currency = currency;\n }\n\n protected validate(props: { amount: number; currency: Currency }): void {\n const { amount, currency } = props;\n\n if (typeof amount !== 'number' || Number.isNaN(amount) || !Number.isFinite(amount)) {\n throw new Error(`Price amount <${amount}> is not a valid number`);\n }\n if (amount < Price.MIN_AMOUNT) {\n throw new Error(`Price amount <${amount}> must be ≥ ${Price.MIN_AMOUNT}`);\n }\n }\n\n public equals(other?: Price | null): boolean {\n if (!other) return false;\n return this.amount === other.amount && this.currency.equals(other.currency);\n }\n\n private assertSameCurrency(other: Price): void {\n if (!this.currency.equals(other.currency)) {\n throw new Error('Cannot operate on Price objects with different currencies');\n }\n }\n\n public add(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount + other.amount, this.currency);\n }\n\n public subtract(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount - other.amount, this.currency);\n }\n\n public static create(amount: number, currency: Currency | string | number): Price {\n const cur = currency instanceof Currency ? currency : Currency.create(currency);\n return new Price(amount, cur);\n }\n\n}\n","import {ValueObject} from \"@domain/contracts/ValueObject\";\n\nexport class UUID extends ValueObject<string> {\n\n private constructor(value: string) {\n super(value);\n }\n\n protected validate(uuid: string) {\n if (!UUID.isValid(uuid)) {\n throw new Error(`Invalid uuid ${uuid}`);\n }\n }\n\n public static create(uuid?: string): UUID {\n return new UUID(uuid ?? crypto.randomUUID());\n }\n\n public static isValid(uuid: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid);\n }\n\n}","export class StringVars {\n\n public static parse(str: string, ob: { [key: string]: any }): string {\n const regex = /{{(.*?)}}/g;\n return str.replace(regex, (match, variable) => {\n if (ob.hasOwnProperty(variable.trim())) {\n return ob[variable.trim()];\n } else {\n return match;\n }\n });\n }\n\n}","import {Language} from \"@domain/value-objects/Language\";\nimport {FatalError} from \"@domain/errors/FatalError\";\nimport {InternalError} from \"@domain/errors/InternalError\";\nimport {UsageError} from \"@domain/errors/UsageError\";\nimport {StringVars} from \"@utils/StringVars\";\nimport {Logger} from \"@infrastructure/contracts/Logger\";\n\nexport interface ErrorTemplate {\n type: string;\n languages: Record<string, string>;\n}\n\nexport type ErrorManagerHandleResult = {\n status: number | string;\n message: string;\n};\n\nexport class ErrorManager {\n\n private static readonly DEFAULT_MESSAGES: Record<string, string> = {\n 'es': 'Ups, hemos encontrado un error. Nuestro equipo ya está trabajando para solucionarlo',\n 'en': 'Ups, we found an error. Our team is working on it.',\n 'pt': 'Ops, encontramos um bug. Nossa equipe já está trabalhando para resolver isso.',\n };\n\n public static readonly APP_ERRORS = {\n UNDEFINED: 'UNDEFINED_ERROR',\n PROCESS: 'PROCESS_ERROR',\n DATABASE: 'DATABASE_ERROR'\n } as const;\n\n private static readonly TEMPLATES = new Map<string, ErrorTemplate>();\n\n public constructor(private readonly logger: Logger | null = null) {}\n\n private getDefaultMessage(lang: Language): string {\n return (ErrorManager.DEFAULT_MESSAGES[lang.value] || ErrorManager.DEFAULT_MESSAGES[lang.base()] || 'error');\n }\n\n private onFatal(err: FatalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.fatal(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onInternal(err: InternalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.error(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onUsage(err: UsageError, lang: Language): ErrorManagerHandleResult {\n const tmpl = ErrorManager.TEMPLATES.get(err.type);\n if (!tmpl) {\n this.logger?.error('TEMPLATE_NOT_FOUND', `${err.type}`);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n const code = lang.value;\n const base = lang.base();\n const rawMsg =\n tmpl.languages[code] ??\n tmpl.languages[base] ??\n this.getDefaultMessage(lang);\n return {\n status: 'ERROR',\n message: StringVars.parse(rawMsg, err.vars),\n };\n }\n\n private onUnknown(err: Error, lang: Language): ErrorManagerHandleResult {\n this.logger?.error('UNKNOWN_ERROR', err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n public handle(err: Error, lang: Language): ErrorManagerHandleResult {\n if (['local','dev'].includes(process.env.ENVIRONMENT ?? '')) {\n console.log(err);\n }\n if (err instanceof FatalError) {\n return this.onFatal(err, lang);\n }\n if (err instanceof InternalError) {\n return this.onInternal(err, lang);\n }\n if (err instanceof UsageError) {\n return this.onUsage(err, lang);\n }\n return this.onUnknown(err, lang);\n }\n\n public static addTemplate(template: ErrorTemplate): void {\n ErrorManager.TEMPLATES.set(template.type, template);\n }\n\n}\n","import { createPool, Pool, PoolConnection } from 'mysql2/promise';\nimport {DatabaseConnector} from \"@infrastructure/contracts/DatabaseConnector\";\nimport {MysqlConnection} from \"@infrastructure/mysql/MysqlConnection\";\n\nexport class MysqlConnector implements DatabaseConnector<MysqlConnection> {\n public static readonly DEFAULT_POOL_SIZE: number = 10;\n\n private readonly _pool: Pool;\n\n public constructor(pool?: Pool) {\n this._pool =\n pool ??\n createPool({\n host: process.env.DB_HOST,\n port: Number(process.env.DB_PORT ?? 3306),\n user: process.env.DB_USER,\n password: process.env.DB_PASSWORD,\n database: process.env.DB_NAME,\n connectionLimit:\n Number(process.env.DB_POOL_SIZE) || MysqlConnector.DEFAULT_POOL_SIZE,\n decimalNumbers: true,\n });\n }\n\n private async wrap(conn: PoolConnection): Promise<MysqlConnection> {\n return new MysqlConnection(conn);\n }\n\n public async getConnection(): Promise<MysqlConnection> {\n const conn: PoolConnection = await this._pool.getConnection();\n return this.wrap(conn);\n }\n\n public async closePool(): Promise<void> {\n await this._pool.end();\n }\n\n public static async ping(): Promise<boolean> {\n const connector: MysqlConnector = new MysqlConnector();\n try {\n const conn = await connector._pool.getConnection();\n await conn.ping();\n conn.release();\n return true;\n } catch {\n return false;\n } finally {\n await connector.closePool();\n }\n }\n}\n","import {FieldPacket, PoolConnection, RowDataPacket} from \"mysql2/promise\";\nimport {DatabaseConnection} from \"@infrastructure/contracts/DatabaseConnection\";\n\nexport class MysqlConnection implements DatabaseConnection<string, any[], RowDataPacket> {\n\n private readonly _conn: PoolConnection;\n\n public constructor(conn: PoolConnection) {\n this._conn = conn;\n }\n\n public async query<R = RowDataPacket>(statement: string, params: any[] = [],): Promise<R[]> {\n const [rows] = await this._conn.query<R[] & RowDataPacket[] & FieldPacket[]>(statement, params);\n return rows as R[];\n }\n\n public async begin(): Promise<void> {\n await this._conn.beginTransaction();\n }\n\n public async commit(): Promise<void> {\n await this._conn.commit();\n }\n\n public async rollback(): Promise<void> {\n await this._conn.rollback();\n }\n\n public async transaction<T>(fn: (conn: this) => Promise<T>): Promise<T> {\n await this.begin();\n try {\n const result: T = await fn(this);\n await this.commit();\n return result;\n } catch (err) {\n await this.rollback();\n throw err;\n }\n }\n\n public async close(): Promise<void> {\n this._conn.release();\n }\n\n}\n","import { HttpController, HttpRequest, HttpResponse } from '@infrastructure/contracts/Http';\n\nexport class HttpNotFoundController implements HttpController {\n public async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 404,\n body: {\n status: 'NOT_FOUND',\n message: `Route ${request.headers.location} not found`,\n },\n };\n }\n}\n","import {HttpController, HttpRequest, HttpResponse} from \"@infrastructure/contracts/Http\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport class HttpHealthCheckController implements HttpController {\n async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 200,\n body: {\n date: DateTime.create().value,\n code: 200,\n status: 'OK'\n }\n }\n }\n}"],"mappings":"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","names":["LuxonDateTime"]}
|
|
@@ -1,47 +1,5 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
|
|
19
|
-
// src/index.ts
|
|
20
|
-
var src_exports = {};
|
|
21
|
-
__export(src_exports, {
|
|
22
|
-
Currency: () => Currency,
|
|
23
|
-
DateTime: () => DateTime,
|
|
24
|
-
DomainEntity: () => DomainEntity,
|
|
25
|
-
DomainError: () => DomainError,
|
|
26
|
-
DomainEvent: () => DomainEvent,
|
|
27
|
-
Email: () => Email,
|
|
28
|
-
ErrorManager: () => ErrorManager,
|
|
29
|
-
FatalError: () => FatalError,
|
|
30
|
-
HttpHealthCheckController: () => HttpHealthCheckController,
|
|
31
|
-
HttpNotFoundController: () => HttpNotFoundController,
|
|
32
|
-
InternalError: () => InternalError,
|
|
33
|
-
Language: () => Language,
|
|
34
|
-
MysqlConnection: () => MysqlConnection,
|
|
35
|
-
MysqlConnector: () => MysqlConnector,
|
|
36
|
-
Price: () => Price,
|
|
37
|
-
UUID: () => UUID,
|
|
38
|
-
UsageError: () => UsageError,
|
|
39
|
-
ValueObject: () => ValueObject
|
|
40
|
-
});
|
|
41
|
-
module.exports = __toCommonJS(src_exports);
|
|
42
|
-
|
|
43
1
|
// src/domain/value-objects/DateTime.ts
|
|
44
|
-
|
|
2
|
+
import { DateTime as LuxonDateTime } from "luxon";
|
|
45
3
|
|
|
46
4
|
// src/domain/contracts/ValueObject.ts
|
|
47
5
|
var ValueObject = class {
|
|
@@ -68,7 +26,7 @@ var ValueObject = class {
|
|
|
68
26
|
var _DateTime = class _DateTime extends ValueObject {
|
|
69
27
|
constructor(value) {
|
|
70
28
|
super(value);
|
|
71
|
-
this._dt =
|
|
29
|
+
this._dt = LuxonDateTime.fromFormat(value, _DateTime.DEFAULT_FORMAT, { zone: "utc" });
|
|
72
30
|
}
|
|
73
31
|
static fromLuxon(dt) {
|
|
74
32
|
return new _DateTime(_DateTime.toUtcFormat(dt));
|
|
@@ -77,7 +35,7 @@ var _DateTime = class _DateTime extends ValueObject {
|
|
|
77
35
|
return dt.setZone("utc").toFormat(_DateTime.DEFAULT_FORMAT);
|
|
78
36
|
}
|
|
79
37
|
validate(value) {
|
|
80
|
-
const q =
|
|
38
|
+
const q = LuxonDateTime.fromFormat(value, _DateTime.DEFAULT_FORMAT, { zone: "utc" });
|
|
81
39
|
if (!q.isValid) {
|
|
82
40
|
throw new Error(`Invalid DateTime: ${q.invalidExplanation}`);
|
|
83
41
|
}
|
|
@@ -144,14 +102,14 @@ var _DateTime = class _DateTime extends ValueObject {
|
|
|
144
102
|
}
|
|
145
103
|
static create(input) {
|
|
146
104
|
if (input === void 0) {
|
|
147
|
-
return new _DateTime(_DateTime.toUtcFormat(
|
|
105
|
+
return new _DateTime(_DateTime.toUtcFormat(LuxonDateTime.now()));
|
|
148
106
|
}
|
|
149
107
|
if (typeof input === "number") {
|
|
150
108
|
return new _DateTime(
|
|
151
|
-
_DateTime.toUtcFormat(
|
|
109
|
+
_DateTime.toUtcFormat(LuxonDateTime.fromMillis(input, { zone: "utc" }))
|
|
152
110
|
);
|
|
153
111
|
}
|
|
154
|
-
const iso =
|
|
112
|
+
const iso = LuxonDateTime.fromISO(input, { zone: "utc" });
|
|
155
113
|
if (iso.isValid) {
|
|
156
114
|
return new _DateTime(_DateTime.toUtcFormat(iso));
|
|
157
115
|
}
|
|
@@ -548,7 +506,7 @@ _ErrorManager.TEMPLATES = /* @__PURE__ */ new Map();
|
|
|
548
506
|
var ErrorManager = _ErrorManager;
|
|
549
507
|
|
|
550
508
|
// src/infrastructure/mysql/MysqlConnector.ts
|
|
551
|
-
|
|
509
|
+
import { createPool } from "mysql2/promise";
|
|
552
510
|
|
|
553
511
|
// src/infrastructure/mysql/MysqlConnection.ts
|
|
554
512
|
var MysqlConnection = class {
|
|
@@ -587,7 +545,7 @@ var MysqlConnection = class {
|
|
|
587
545
|
// src/infrastructure/mysql/MysqlConnector.ts
|
|
588
546
|
var _MysqlConnector = class _MysqlConnector {
|
|
589
547
|
constructor(pool) {
|
|
590
|
-
this._pool = pool ??
|
|
548
|
+
this._pool = pool ?? createPool({
|
|
591
549
|
host: process.env.DB_HOST,
|
|
592
550
|
port: Number(process.env.DB_PORT ?? 3306),
|
|
593
551
|
user: process.env.DB_USER,
|
|
@@ -650,8 +608,7 @@ var HttpHealthCheckController = class {
|
|
|
650
608
|
};
|
|
651
609
|
}
|
|
652
610
|
};
|
|
653
|
-
|
|
654
|
-
0 && (module.exports = {
|
|
611
|
+
export {
|
|
655
612
|
Currency,
|
|
656
613
|
DateTime,
|
|
657
614
|
DomainEntity,
|
|
@@ -670,5 +627,5 @@ var HttpHealthCheckController = class {
|
|
|
670
627
|
UUID,
|
|
671
628
|
UsageError,
|
|
672
629
|
ValueObject
|
|
673
|
-
}
|
|
674
|
-
//# sourceMappingURL=index.
|
|
630
|
+
};
|
|
631
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/domain/value-objects/DateTime.ts","../src/domain/contracts/ValueObject.ts","../src/domain/contracts/DomainEntity.ts","../src/domain/contracts/DomainError.ts","../src/domain/contracts/DomainEvent.ts","../src/domain/errors/FatalError.ts","../src/domain/errors/InternalError.ts","../src/domain/errors/UsageError.ts","../src/domain/value-objects/Currency.ts","../src/domain/value-objects/Email.ts","../src/domain/value-objects/Language.ts","../src/domain/value-objects/Price.ts","../src/domain/value-objects/UUID.ts","../src/utils/StringVars.ts","../src/infrastructure/errors/ErrorManager.ts","../src/infrastructure/mysql/MysqlConnector.ts","../src/infrastructure/mysql/MysqlConnection.ts","../src/infrastructure/http/HttpNotFoundController.ts","../src/infrastructure/http/HttpHealthCheckController.ts"],"sourcesContent":["import {DateTime as LuxonDateTime} from 'luxon';\nimport {ValueObject} from \"@domain/contracts/ValueObject\";\n\nexport class DateTime extends ValueObject<string> {\n\n public static readonly DEFAULT_FORMAT: string = 'yyyy-MM-dd HH:mm:ss';\n\n private readonly _dt: LuxonDateTime;\n\n private static fromLuxon(dt: LuxonDateTime): DateTime {\n return new DateTime(DateTime.toUtcFormat(dt));\n }\n\n private static toUtcFormat(dt: LuxonDateTime): string {\n return dt.setZone('utc').toFormat(DateTime.DEFAULT_FORMAT);\n }\n\n private constructor(value: string) {\n super(value);\n this._dt = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n }\n\n protected validate(value: string): void {\n const q = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n if (!q.isValid) {\n throw new Error(`Invalid DateTime: ${q.invalidExplanation}`);\n }\n }\n\n public plusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({years}));\n }\n\n public plusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({months}));\n }\n\n public plusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({days}));\n }\n\n public plusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({hours}));\n }\n\n public plusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({minutes}));\n }\n\n public plusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({seconds}));\n }\n\n public minusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({years}));\n }\n\n public minusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({months}));\n }\n\n public minusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({days}));\n }\n\n public minusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({hours}));\n }\n\n public minusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({minutes}));\n }\n\n public minusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({seconds}));\n }\n\n public get year(): number {\n return this._dt.year;\n }\n\n public get month(): number {\n return this._dt.month;\n }\n\n public get day(): number {\n return this._dt.day;\n }\n\n public get hour(): number {\n return this._dt.hour;\n }\n\n public get minute(): number {\n return this._dt.minute;\n }\n\n public get second(): number {\n return this._dt.second;\n }\n\n public getMonthName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('LLLL');\n }\n\n public getWeekdayName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('cccc');\n }\n\n public static create(input?: string | number): DateTime {\n if (input === undefined) {\n return new DateTime(DateTime.toUtcFormat(LuxonDateTime.now()));\n }\n\n /* ① timestamp */\n if (typeof input === 'number') {\n return new DateTime(\n DateTime.toUtcFormat(LuxonDateTime.fromMillis(input, { zone: 'utc' })),\n );\n }\n\n /* ② ISO string o ya formateado */\n const iso = LuxonDateTime.fromISO(input, { zone: 'utc' });\n if (iso.isValid) {\n return new DateTime(DateTime.toUtcFormat(iso));\n }\n\n /* ③ se asume que viene en formato DEFAULT_FORMAT (UTC) */\n return new DateTime(input);\n }\n}\n","\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import {UUID} from \"@domain/value-objects/UUID\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport abstract class DomainEntity<T extends Record<string, string | number | boolean>> {\n\n public readonly uuid: UUID;\n\n private readonly _createdAt: DateTime;\n private _updatedAt: DateTime;\n private _deletedAt?: DateTime;\n\n protected readonly props: T;\n\n protected constructor(\n uuid: UUID,\n props: T,\n audit?: { createdAt?: DateTime; updatedAt?: DateTime; deletedAt?: DateTime },\n ) {\n this.uuid = uuid;\n this.props = props;\n\n this._createdAt = audit?.createdAt ?? DateTime.create();\n this._updatedAt = audit?.updatedAt ?? this.createdAt;\n this._deletedAt = audit?.deletedAt;\n }\n\n protected touch(): void {\n this._updatedAt = DateTime.create();\n }\n\n public get createdAt(): DateTime {\n return this._createdAt;\n }\n\n public get updatedAt(): DateTime {\n return this._updatedAt;\n }\n\n public get deletedAt(): DateTime | undefined {\n return this._deletedAt;\n }\n\n public get isDeleted(): boolean {\n return Boolean(this._deletedAt);\n }\n\n public abstract equals(entity?: DomainEntity<T>): boolean;\n\n public softDelete(): void {\n if (!this._deletedAt) {\n this._deletedAt = DateTime.create();\n this.touch();\n }\n }\n\n public abstract toPrimitives(): Record<string, unknown>;\n\n}\n","export abstract class DomainError extends Error {\n\n public readonly type: string;\n\n protected constructor(type: string, message = '') {\n super(message);\n this.type = type;\n }\n}","import {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport abstract class DomainEvent<T = unknown> {\n\n readonly type: string;\n private readonly _occurredAt: DateTime;\n private readonly _payload: T;\n\n protected constructor(payload: T) {\n this._payload = payload;\n this._occurredAt = DateTime.create();\n }\n\n get payload(): T {\n return this._payload;\n }\n\n get occurredAt(): DateTime {\n return this._occurredAt;\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class FatalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class InternalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class UsageError extends DomainError {\n\n public readonly vars: Record<string, any>;\n\n public constructor(type: string, vars: Record<string, any> = {}) {\n super(type);\n this.vars = vars;\n }\n\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Currency extends ValueObject<string> {\n\n public static readonly ALPHA_REGEX = /^[A-Z]{3}$/u;\n public static readonly NUM_REGEX = /^\\d{3}$/u;\n\n private static readonly ALPHA_TO_NUM: Record<string, number> = {\n USD: 840,\n EUR: 978,\n UYU: 858,\n ARS: 32,\n BRL: 986,\n };\n\n private static readonly NUM_TO_ALPHA: Record<number, string> =\n Object.entries(Currency.ALPHA_TO_NUM).reduce(\n (acc, [alpha, num]) => {\n acc[num as number] = alpha;\n return acc;\n },\n {} as Record<number, string>,\n );\n\n public static readonly USD = new Currency('USD');\n public static readonly EUR = new Currency('EUR');\n public static readonly UYU = new Currency('UYU');\n public static readonly ARS = new Currency('ARS');\n public static readonly BRL = new Currency('BRL');\n\n public readonly numeric: number;\n\n private constructor(alpha: string) {\n super(alpha.toUpperCase().trim());\n this.numeric = Currency.ALPHA_TO_NUM[this.value];\n }\n\n protected validate(alpha: string): void {\n const code = alpha.toUpperCase().trim();\n if (!Currency.ALPHA_REGEX.test(code)) {\n throw new Error(`Currency code <${alpha}> is not a valid ISO‑4217 alpha value`);\n }\n if (!(code in Currency.ALPHA_TO_NUM)) {\n throw new Error(`Currency <${code}> is not supported`);\n }\n }\n\n public static create(raw: string | number): Currency {\n if (typeof raw === 'number' || Currency.NUM_REGEX.test(raw)) {\n const num = Number(raw);\n const alpha = Currency.NUM_TO_ALPHA[num];\n if (!alpha) {\n throw new Error(`Numeric currency <${raw}> is not supported`);\n }\n return new Currency(alpha);\n }\n return new Currency(String(raw));\n }\n\n public static isValid(raw: string | number): boolean {\n try {\n Currency.create(raw);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Email extends ValueObject<string> {\n\n public static readonly REGEX: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u;\n\n private constructor(email: string) {\n super(email.trim());\n }\n\n protected validate(value: string): void {\n if (!Email.REGEX.test(value)) {\n throw new Error(`Email <${value}> is not a valid address`);\n }\n }\n\n public static create(raw: string): Email {\n return new Email(raw);\n }\n\n public static isValid(raw: string): boolean {\n return Email.REGEX.test(raw.trim());\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\nimport { Currency } from '@domain/value-objects/Currency';\n\nexport class Price extends ValueObject<{ amount: number; currency: Currency }> {\n\n public static readonly MIN_AMOUNT: number = -1000000;\n\n public readonly amount: number;\n public readonly currency: Currency;\n\n private constructor(amount: number, currency: Currency) {\n super({ amount, currency });\n this.amount = amount;\n this.currency = currency;\n }\n\n protected validate(props: { amount: number; currency: Currency }): void {\n const { amount, currency } = props;\n\n if (typeof amount !== 'number' || Number.isNaN(amount) || !Number.isFinite(amount)) {\n throw new Error(`Price amount <${amount}> is not a valid number`);\n }\n if (amount < Price.MIN_AMOUNT) {\n throw new Error(`Price amount <${amount}> must be ≥ ${Price.MIN_AMOUNT}`);\n }\n }\n\n public equals(other?: Price | null): boolean {\n if (!other) return false;\n return this.amount === other.amount && this.currency.equals(other.currency);\n }\n\n private assertSameCurrency(other: Price): void {\n if (!this.currency.equals(other.currency)) {\n throw new Error('Cannot operate on Price objects with different currencies');\n }\n }\n\n public add(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount + other.amount, this.currency);\n }\n\n public subtract(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount - other.amount, this.currency);\n }\n\n public static create(amount: number, currency: Currency | string | number): Price {\n const cur = currency instanceof Currency ? currency : Currency.create(currency);\n return new Price(amount, cur);\n }\n\n}\n","import {ValueObject} from \"@domain/contracts/ValueObject\";\n\nexport class UUID extends ValueObject<string> {\n\n private constructor(value: string) {\n super(value);\n }\n\n protected validate(uuid: string) {\n if (!UUID.isValid(uuid)) {\n throw new Error(`Invalid uuid ${uuid}`);\n }\n }\n\n public static create(uuid?: string): UUID {\n return new UUID(uuid ?? crypto.randomUUID());\n }\n\n public static isValid(uuid: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid);\n }\n\n}","export class StringVars {\n\n public static parse(str: string, ob: { [key: string]: any }): string {\n const regex = /{{(.*?)}}/g;\n return str.replace(regex, (match, variable) => {\n if (ob.hasOwnProperty(variable.trim())) {\n return ob[variable.trim()];\n } else {\n return match;\n }\n });\n }\n\n}","import {Language} from \"@domain/value-objects/Language\";\nimport {FatalError} from \"@domain/errors/FatalError\";\nimport {InternalError} from \"@domain/errors/InternalError\";\nimport {UsageError} from \"@domain/errors/UsageError\";\nimport {StringVars} from \"@utils/StringVars\";\nimport {Logger} from \"@infrastructure/contracts/Logger\";\n\nexport interface ErrorTemplate {\n type: string;\n languages: Record<string, string>;\n}\n\nexport type ErrorManagerHandleResult = {\n status: number | string;\n message: string;\n};\n\nexport class ErrorManager {\n\n private static readonly DEFAULT_MESSAGES: Record<string, string> = {\n 'es': 'Ups, hemos encontrado un error. Nuestro equipo ya está trabajando para solucionarlo',\n 'en': 'Ups, we found an error. Our team is working on it.',\n 'pt': 'Ops, encontramos um bug. Nossa equipe já está trabalhando para resolver isso.',\n };\n\n public static readonly APP_ERRORS = {\n UNDEFINED: 'UNDEFINED_ERROR',\n PROCESS: 'PROCESS_ERROR',\n DATABASE: 'DATABASE_ERROR'\n } as const;\n\n private static readonly TEMPLATES = new Map<string, ErrorTemplate>();\n\n public constructor(private readonly logger: Logger | null = null) {}\n\n private getDefaultMessage(lang: Language): string {\n return (ErrorManager.DEFAULT_MESSAGES[lang.value] || ErrorManager.DEFAULT_MESSAGES[lang.base()] || 'error');\n }\n\n private onFatal(err: FatalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.fatal(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onInternal(err: InternalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.error(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onUsage(err: UsageError, lang: Language): ErrorManagerHandleResult {\n const tmpl = ErrorManager.TEMPLATES.get(err.type);\n if (!tmpl) {\n this.logger?.error('TEMPLATE_NOT_FOUND', `${err.type}`);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n const code = lang.value;\n const base = lang.base();\n const rawMsg =\n tmpl.languages[code] ??\n tmpl.languages[base] ??\n this.getDefaultMessage(lang);\n return {\n status: 'ERROR',\n message: StringVars.parse(rawMsg, err.vars),\n };\n }\n\n private onUnknown(err: Error, lang: Language): ErrorManagerHandleResult {\n this.logger?.error('UNKNOWN_ERROR', err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n public handle(err: Error, lang: Language): ErrorManagerHandleResult {\n if (['local','dev'].includes(process.env.ENVIRONMENT ?? '')) {\n console.log(err);\n }\n if (err instanceof FatalError) {\n return this.onFatal(err, lang);\n }\n if (err instanceof InternalError) {\n return this.onInternal(err, lang);\n }\n if (err instanceof UsageError) {\n return this.onUsage(err, lang);\n }\n return this.onUnknown(err, lang);\n }\n\n public static addTemplate(template: ErrorTemplate): void {\n ErrorManager.TEMPLATES.set(template.type, template);\n }\n\n}\n","import { createPool, Pool, PoolConnection } from 'mysql2/promise';\nimport {DatabaseConnector} from \"@infrastructure/contracts/DatabaseConnector\";\nimport {MysqlConnection} from \"@infrastructure/mysql/MysqlConnection\";\n\nexport class MysqlConnector implements DatabaseConnector<MysqlConnection> {\n public static readonly DEFAULT_POOL_SIZE: number = 10;\n\n private readonly _pool: Pool;\n\n public constructor(pool?: Pool) {\n this._pool =\n pool ??\n createPool({\n host: process.env.DB_HOST,\n port: Number(process.env.DB_PORT ?? 3306),\n user: process.env.DB_USER,\n password: process.env.DB_PASSWORD,\n database: process.env.DB_NAME,\n connectionLimit:\n Number(process.env.DB_POOL_SIZE) || MysqlConnector.DEFAULT_POOL_SIZE,\n decimalNumbers: true,\n });\n }\n\n private async wrap(conn: PoolConnection): Promise<MysqlConnection> {\n return new MysqlConnection(conn);\n }\n\n public async getConnection(): Promise<MysqlConnection> {\n const conn: PoolConnection = await this._pool.getConnection();\n return this.wrap(conn);\n }\n\n public async closePool(): Promise<void> {\n await this._pool.end();\n }\n\n public static async ping(): Promise<boolean> {\n const connector: MysqlConnector = new MysqlConnector();\n try {\n const conn = await connector._pool.getConnection();\n await conn.ping();\n conn.release();\n return true;\n } catch {\n return false;\n } finally {\n await connector.closePool();\n }\n }\n}\n","import {FieldPacket, PoolConnection, RowDataPacket} from \"mysql2/promise\";\nimport {DatabaseConnection} from \"@infrastructure/contracts/DatabaseConnection\";\n\nexport class MysqlConnection implements DatabaseConnection<string, any[], RowDataPacket> {\n\n private readonly _conn: PoolConnection;\n\n public constructor(conn: PoolConnection) {\n this._conn = conn;\n }\n\n public async query<R = RowDataPacket>(statement: string, params: any[] = [],): Promise<R[]> {\n const [rows] = await this._conn.query<R[] & RowDataPacket[] & FieldPacket[]>(statement, params);\n return rows as R[];\n }\n\n public async begin(): Promise<void> {\n await this._conn.beginTransaction();\n }\n\n public async commit(): Promise<void> {\n await this._conn.commit();\n }\n\n public async rollback(): Promise<void> {\n await this._conn.rollback();\n }\n\n public async transaction<T>(fn: (conn: this) => Promise<T>): Promise<T> {\n await this.begin();\n try {\n const result: T = await fn(this);\n await this.commit();\n return result;\n } catch (err) {\n await this.rollback();\n throw err;\n }\n }\n\n public async close(): Promise<void> {\n this._conn.release();\n }\n\n}\n","import { HttpController, HttpRequest, HttpResponse } from '@infrastructure/contracts/Http';\n\nexport class HttpNotFoundController implements HttpController {\n public async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 404,\n body: {\n status: 'NOT_FOUND',\n message: `Route ${request.headers.location} not found`,\n },\n };\n }\n}\n","import {HttpController, HttpRequest, HttpResponse} from \"@infrastructure/contracts/Http\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport class HttpHealthCheckController implements HttpController {\n async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 200,\n body: {\n date: DateTime.create().value,\n code: 200,\n status: 'OK'\n }\n }\n }\n}"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wsp-ms-core",
|
|
3
|
-
"version": "1.0.15",
|
|
4
|
-
"description": "",
|
|
5
3
|
"author": "Wonasports",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"main": "dist/index.cjs",
|
|
4
|
+
"version": "1.0.17",
|
|
5
|
+
"main": "dist/index.cjs",
|
|
9
6
|
"module": "dist/index.js",
|
|
10
|
-
"types":
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
11
8
|
"files": [
|
|
12
9
|
"dist",
|
|
13
10
|
"README.md"
|
|
14
11
|
],
|
|
15
12
|
"exports": {
|
|
16
13
|
".": {
|
|
17
|
-
"import":
|
|
14
|
+
"import": "./dist/index.js",
|
|
18
15
|
"require": "./dist/index.cjs",
|
|
19
16
|
"types": "./dist/index.d.ts"
|
|
20
17
|
},
|
|
21
18
|
"./express": {
|
|
22
|
-
"import":
|
|
23
|
-
"require": "./dist/
|
|
24
|
-
"types": "./dist/
|
|
19
|
+
"import": "./dist/express.js",
|
|
20
|
+
"require": "./dist/express.cjs",
|
|
21
|
+
"types": "./dist/express.d.ts"
|
|
25
22
|
}
|
|
26
23
|
},
|
|
27
24
|
"peerDependencies": {
|
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/domain/value-objects/DateTime.ts","../src/domain/contracts/ValueObject.ts","../src/domain/contracts/DomainEntity.ts","../src/domain/contracts/DomainError.ts","../src/domain/contracts/DomainEvent.ts","../src/domain/errors/FatalError.ts","../src/domain/errors/InternalError.ts","../src/domain/errors/UsageError.ts","../src/domain/value-objects/Currency.ts","../src/domain/value-objects/Email.ts","../src/domain/value-objects/Language.ts","../src/domain/value-objects/Price.ts","../src/domain/value-objects/UUID.ts","../src/utils/StringVars.ts","../src/infrastructure/errors/ErrorManager.ts","../src/infrastructure/mysql/MysqlConnector.ts","../src/infrastructure/mysql/MysqlConnection.ts","../src/infrastructure/http/HttpNotFoundController.ts","../src/infrastructure/http/HttpHealthCheckController.ts"],"sourcesContent":["/* ──────────────────────────────────────────────── *\n * DOMAIN *\n * ──────────────────────────────────────────────── */\n// Contracts\nexport {DomainEntity} from './domain/contracts/DomainEntity';\nexport {DomainError} from './domain/contracts/DomainError';\nexport {DomainEvent} from './domain/contracts/DomainEvent';\nexport {ValueObject} from './domain/contracts/ValueObject';\n// Errors\nexport {FatalError} from './domain/errors/FatalError';\nexport {InternalError} from './domain/errors/InternalError';\nexport {UsageError} from './domain/errors/UsageError';\n// Value objects\nexport {Currency} from './domain/value-objects/Currency';\nexport {DateTime} from './domain/value-objects/DateTime';\nexport {Email} from './domain/value-objects/Email';\nexport {Language} from './domain/value-objects/Language';\nexport {Price} from './domain/value-objects/Price';\nexport {UUID} from './domain/value-objects/UUID';\n\n\n/* ──────────────────────────────────────────────── *\n * APPLICATION *\n * ──────────────────────────────────────────────── */\n// Contracts\nexport {EventBus} from './application/contracts/EventBus';\nexport {EventBusRepository} from './application/contracts/EventBusRepository';\n\n\n/* ──────────────────────────────────────────────── *\n * INFRASTRUCTURE *\n * ──────────────────────────────────────────────── */\n// Contracts\nexport {DatabaseConnector} from './infrastructure/contracts/DatabaseConnector';\nexport {DatabaseConnection} from './infrastructure/contracts/DatabaseConnection';\nexport {Logger} from './infrastructure/contracts/Logger';\nexport {HttpRequest, HttpResponse, HttpController, UploadedFile} from './infrastructure/contracts/Http';\n// Errors\nexport {ErrorManager, ErrorManagerHandleResult, ErrorTemplate} from './infrastructure/errors/ErrorManager';\n// Mysql\nexport {MysqlConnector} from './infrastructure/mysql/MysqlConnector';\nexport {MysqlConnection} from './infrastructure/mysql/MysqlConnection';\n\nexport {HttpNotFoundController} from './infrastructure/http/HttpNotFoundController';\nexport {HttpHealthCheckController} from '@infrastructure/http/HttpHealthCheckController';\n\n","import {DateTime as LuxonDateTime} from 'luxon';\nimport {ValueObject} from \"@domain/contracts/ValueObject\";\n\n\nexport class DateTime extends ValueObject<string> {\n\n public static readonly DEFAULT_FORMAT: string = 'yyyy-MM-dd HH:mm:ss';\n\n private readonly _dt: LuxonDateTime;\n\n private static fromLuxon(dt: LuxonDateTime): DateTime {\n return new DateTime(DateTime.toUtcFormat(dt));\n }\n\n private static toUtcFormat(dt: LuxonDateTime): string {\n return dt.setZone('utc').toFormat(DateTime.DEFAULT_FORMAT);\n }\n\n private constructor(value: string) {\n super(value);\n this._dt = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n }\n\n protected validate(value: string): void {\n const q = LuxonDateTime.fromFormat(value, DateTime.DEFAULT_FORMAT, { zone: 'utc' });\n if (!q.isValid) {\n throw new Error(`Invalid DateTime: ${q.invalidExplanation}`);\n }\n }\n\n public plusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({years}));\n }\n\n public plusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({months}));\n }\n\n public plusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({days}));\n }\n\n public plusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({hours}));\n }\n\n public plusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({minutes}));\n }\n\n public plusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.plus({seconds}));\n }\n\n public minusYears(years: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({years}));\n }\n\n public minusMonths(months: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({months}));\n }\n\n public minusDays(days: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({days}));\n }\n\n public minusHours(hours: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({hours}));\n }\n\n public minusMinutes(minutes: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({minutes}));\n }\n\n public minusSeconds(seconds: number): DateTime {\n return DateTime.fromLuxon(this._dt.minus({seconds}));\n }\n\n public get year(): number {\n return this._dt.year;\n }\n\n public get month(): number {\n return this._dt.month;\n }\n\n public get day(): number {\n return this._dt.day;\n }\n\n public get hour(): number {\n return this._dt.hour;\n }\n\n public get minute(): number {\n return this._dt.minute;\n }\n\n public get second(): number {\n return this._dt.second;\n }\n\n public getMonthName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('LLLL');\n }\n\n public getWeekdayName(locale: string = 'en'): string {\n return this._dt.setLocale(locale).toFormat('cccc');\n }\n\n public static create(input?: string | number): DateTime {\n if (input === undefined) {\n return new DateTime(DateTime.toUtcFormat(LuxonDateTime.now()));\n }\n\n /* ① timestamp */\n if (typeof input === 'number') {\n return new DateTime(\n DateTime.toUtcFormat(LuxonDateTime.fromMillis(input, { zone: 'utc' })),\n );\n }\n\n /* ② ISO string o ya formateado */\n const iso = LuxonDateTime.fromISO(input, { zone: 'utc' });\n if (iso.isValid) {\n return new DateTime(DateTime.toUtcFormat(iso));\n }\n\n /* ③ se asume que viene en formato DEFAULT_FORMAT (UTC) */\n return new DateTime(input);\n }\n}\n","\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import {UUID} from \"@domain/value-objects/UUID\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport abstract class DomainEntity<T extends Record<string, string | number | boolean>> {\n\n public readonly uuid: UUID;\n\n private readonly _createdAt: DateTime;\n private _updatedAt: DateTime;\n private _deletedAt?: DateTime;\n\n protected readonly props: T;\n\n protected constructor(\n uuid: UUID,\n props: T,\n audit?: { createdAt?: DateTime; updatedAt?: DateTime; deletedAt?: DateTime },\n ) {\n this.uuid = uuid;\n this.props = props;\n\n this._createdAt = audit?.createdAt ?? DateTime.create();\n this._updatedAt = audit?.updatedAt ?? this.createdAt;\n this._deletedAt = audit?.deletedAt;\n }\n\n protected touch(): void {\n this._updatedAt = DateTime.create();\n }\n\n public get createdAt(): DateTime {\n return this._createdAt;\n }\n\n public get updatedAt(): DateTime {\n return this._updatedAt;\n }\n\n public get deletedAt(): DateTime | undefined {\n return this._deletedAt;\n }\n\n public get isDeleted(): boolean {\n return Boolean(this._deletedAt);\n }\n\n public abstract equals(entity?: DomainEntity<T>): boolean;\n\n public softDelete(): void {\n if (!this._deletedAt) {\n this._deletedAt = DateTime.create();\n this.touch();\n }\n }\n\n public abstract toPrimitives(): Record<string, unknown>;\n\n}\n","export abstract class DomainError extends Error {\n\n public readonly type: string;\n\n protected constructor(type: string, message = '') {\n super(message);\n this.type = type;\n }\n}","import {DateTime} from \"../value-objects/DateTime\";\n\nexport abstract class DomainEvent<T = unknown> {\n\n readonly type: string;\n private readonly _occurredAt: DateTime;\n private readonly _payload: T;\n\n protected constructor(payload: T) {\n this._payload = payload;\n this._occurredAt = DateTime.create();\n }\n\n get payload(): T {\n return this._payload;\n }\n\n get occurredAt(): DateTime {\n return this._occurredAt;\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class FatalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class InternalError extends DomainError {\n\n public constructor(type: string, message: string = '') {\n super(type, message);\n }\n\n}","import {DomainError} from \"@domain/contracts/DomainError\";\n\nexport class UsageError extends DomainError {\n\n public readonly vars: Record<string, any>;\n\n public constructor(type: string, vars: Record<string, any> = {}) {\n super(type);\n this.vars = vars;\n }\n\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Currency extends ValueObject<string> {\n\n public static readonly ALPHA_REGEX = /^[A-Z]{3}$/u;\n public static readonly NUM_REGEX = /^\\d{3}$/u;\n\n private static readonly ALPHA_TO_NUM: Record<string, number> = {\n USD: 840,\n EUR: 978,\n UYU: 858,\n ARS: 32,\n BRL: 986,\n };\n\n private static readonly NUM_TO_ALPHA: Record<number, string> =\n Object.entries(Currency.ALPHA_TO_NUM).reduce(\n (acc, [alpha, num]) => {\n acc[num as number] = alpha;\n return acc;\n },\n {} as Record<number, string>,\n );\n\n public static readonly USD = new Currency('USD');\n public static readonly EUR = new Currency('EUR');\n public static readonly UYU = new Currency('UYU');\n public static readonly ARS = new Currency('ARS');\n public static readonly BRL = new Currency('BRL');\n\n public readonly numeric: number;\n\n private constructor(alpha: string) {\n super(alpha.toUpperCase().trim());\n this.numeric = Currency.ALPHA_TO_NUM[this.value];\n }\n\n protected validate(alpha: string): void {\n const code = alpha.toUpperCase().trim();\n if (!Currency.ALPHA_REGEX.test(code)) {\n throw new Error(`Currency code <${alpha}> is not a valid ISO‑4217 alpha value`);\n }\n if (!(code in Currency.ALPHA_TO_NUM)) {\n throw new Error(`Currency <${code}> is not supported`);\n }\n }\n\n public static create(raw: string | number): Currency {\n if (typeof raw === 'number' || Currency.NUM_REGEX.test(raw)) {\n const num = Number(raw);\n const alpha = Currency.NUM_TO_ALPHA[num];\n if (!alpha) {\n throw new Error(`Numeric currency <${raw}> is not supported`);\n }\n return new Currency(alpha);\n }\n return new Currency(String(raw));\n }\n\n public static isValid(raw: string | number): boolean {\n try {\n Currency.create(raw);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Email extends ValueObject<string> {\n\n public static readonly REGEX: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u;\n\n private constructor(email: string) {\n super(email.trim());\n }\n\n protected validate(value: string): void {\n if (!Email.REGEX.test(value)) {\n throw new Error(`Email <${value}> is not a valid address`);\n }\n }\n\n public static create(raw: string): Email {\n return new Email(raw);\n }\n\n public static isValid(raw: string): boolean {\n return Email.REGEX.test(raw.trim());\n }\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import { ValueObject } from '@domain/contracts/ValueObject';\nimport { Currency } from '@domain/value-objects/Currency';\n\nexport class Price extends ValueObject<{ amount: number; currency: Currency }> {\n\n public static readonly MIN_AMOUNT: number = -1000000;\n\n public readonly amount: number;\n public readonly currency: Currency;\n\n private constructor(amount: number, currency: Currency) {\n super({ amount, currency });\n this.amount = amount;\n this.currency = currency;\n }\n\n protected validate(props: { amount: number; currency: Currency }): void {\n const { amount, currency } = props;\n\n if (typeof amount !== 'number' || Number.isNaN(amount) || !Number.isFinite(amount)) {\n throw new Error(`Price amount <${amount}> is not a valid number`);\n }\n if (amount < Price.MIN_AMOUNT) {\n throw new Error(`Price amount <${amount}> must be ≥ ${Price.MIN_AMOUNT}`);\n }\n }\n\n public equals(other?: Price | null): boolean {\n if (!other) return false;\n return this.amount === other.amount && this.currency.equals(other.currency);\n }\n\n private assertSameCurrency(other: Price): void {\n if (!this.currency.equals(other.currency)) {\n throw new Error('Cannot operate on Price objects with different currencies');\n }\n }\n\n public add(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount + other.amount, this.currency);\n }\n\n public subtract(other: Price): Price {\n this.assertSameCurrency(other);\n return Price.create(this.amount - other.amount, this.currency);\n }\n\n public static create(amount: number, currency: Currency | string | number): Price {\n const cur = currency instanceof Currency ? currency : Currency.create(currency);\n return new Price(amount, cur);\n }\n\n}\n","import {ValueObject} from \"@domain/contracts/ValueObject\";\n\nexport class UUID extends ValueObject<string> {\n\n private constructor(value: string) {\n super(value);\n }\n\n protected validate(uuid: string) {\n if (!UUID.isValid(uuid)) {\n throw new Error(`Invalid uuid ${uuid}`);\n }\n }\n\n public static create(uuid?: string): UUID {\n return new UUID(uuid ?? crypto.randomUUID());\n }\n\n public static isValid(uuid: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid);\n }\n\n}","export class StringVars {\n\n public static parse(str: string, ob: { [key: string]: any }): string {\n const regex = /{{(.*?)}}/g;\n return str.replace(regex, (match, variable) => {\n if (ob.hasOwnProperty(variable.trim())) {\n return ob[variable.trim()];\n } else {\n return match;\n }\n });\n }\n\n}","import {Language} from \"@domain/value-objects/Language\";\nimport {FatalError} from \"@domain/errors/FatalError\";\nimport {InternalError} from \"@domain/errors/InternalError\";\nimport {UsageError} from \"@domain/errors/UsageError\";\nimport {StringVars} from \"@utils/StringVars\";\nimport {Logger} from \"@infrastructure/contracts/Logger\";\n\nexport interface ErrorTemplate {\n type: string;\n languages: Record<string, string>;\n}\n\nexport type ErrorManagerHandleResult = {\n status: number | string;\n message: string;\n};\n\nexport class ErrorManager {\n\n private static readonly DEFAULT_MESSAGES: Record<string, string> = {\n 'es': 'Ups, hemos encontrado un error. Nuestro equipo ya está trabajando para solucionarlo',\n 'en': 'Ups, we found an error. Our team is working on it.',\n 'pt': 'Ops, encontramos um bug. Nossa equipe já está trabalhando para resolver isso.',\n };\n\n public static readonly APP_ERRORS = {\n UNDEFINED: 'UNDEFINED_ERROR',\n PROCESS: 'PROCESS_ERROR',\n DATABASE: 'DATABASE_ERROR'\n } as const;\n\n private static readonly TEMPLATES = new Map<string, ErrorTemplate>();\n\n public constructor(private readonly logger: Logger | null = null) {}\n\n private getDefaultMessage(lang: Language): string {\n return (ErrorManager.DEFAULT_MESSAGES[lang.value] || ErrorManager.DEFAULT_MESSAGES[lang.base()] || 'error');\n }\n\n private onFatal(err: FatalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.fatal(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onInternal(err: InternalError, lang: Language): ErrorManagerHandleResult {\n this.logger?.error(err.type, err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n private onUsage(err: UsageError, lang: Language): ErrorManagerHandleResult {\n const tmpl = ErrorManager.TEMPLATES.get(err.type);\n if (!tmpl) {\n this.logger?.error('TEMPLATE_NOT_FOUND', `${err.type}`);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n const code = lang.value;\n const base = lang.base();\n const rawMsg =\n tmpl.languages[code] ??\n tmpl.languages[base] ??\n this.getDefaultMessage(lang);\n return {\n status: 'ERROR',\n message: StringVars.parse(rawMsg, err.vars),\n };\n }\n\n private onUnknown(err: Error, lang: Language): ErrorManagerHandleResult {\n this.logger?.error('UNKNOWN_ERROR', err.message);\n return { status: 'ERROR', message: this.getDefaultMessage(lang) };\n }\n\n public handle(err: Error, lang: Language): ErrorManagerHandleResult {\n if (['local','dev'].includes(process.env.ENVIRONMENT ?? '')) {\n console.log(err);\n }\n if (err instanceof FatalError) {\n return this.onFatal(err, lang);\n }\n if (err instanceof InternalError) {\n return this.onInternal(err, lang);\n }\n if (err instanceof UsageError) {\n return this.onUsage(err, lang);\n }\n return this.onUnknown(err, lang);\n }\n\n public static addTemplate(template: ErrorTemplate): void {\n ErrorManager.TEMPLATES.set(template.type, template);\n }\n\n}\n","import { createPool, Pool, PoolConnection } from 'mysql2/promise';\nimport {DatabaseConnector} from \"@infrastructure/contracts/DatabaseConnector\";\nimport {MysqlConnection} from \"@infrastructure/mysql/MysqlConnection\";\n\nexport class MysqlConnector implements DatabaseConnector<MysqlConnection> {\n public static readonly DEFAULT_POOL_SIZE: number = 10;\n\n private readonly _pool: Pool;\n\n public constructor(pool?: Pool) {\n this._pool =\n pool ??\n createPool({\n host: process.env.DB_HOST,\n port: Number(process.env.DB_PORT ?? 3306),\n user: process.env.DB_USER,\n password: process.env.DB_PASSWORD,\n database: process.env.DB_NAME,\n connectionLimit:\n Number(process.env.DB_POOL_SIZE) || MysqlConnector.DEFAULT_POOL_SIZE,\n decimalNumbers: true,\n });\n }\n\n private async wrap(conn: PoolConnection): Promise<MysqlConnection> {\n return new MysqlConnection(conn);\n }\n\n public async getConnection(): Promise<MysqlConnection> {\n const conn: PoolConnection = await this._pool.getConnection();\n return this.wrap(conn);\n }\n\n public async closePool(): Promise<void> {\n await this._pool.end();\n }\n\n public static async ping(): Promise<boolean> {\n const connector: MysqlConnector = new MysqlConnector();\n try {\n const conn = await connector._pool.getConnection();\n await conn.ping();\n conn.release();\n return true;\n } catch {\n return false;\n } finally {\n await connector.closePool();\n }\n }\n}\n","import {FieldPacket, PoolConnection, RowDataPacket} from \"mysql2/promise\";\nimport {DatabaseConnection} from \"@infrastructure/contracts/DatabaseConnection\";\n\nexport class MysqlConnection implements DatabaseConnection<string, any[], RowDataPacket> {\n\n private readonly _conn: PoolConnection;\n\n public constructor(conn: PoolConnection) {\n this._conn = conn;\n }\n\n public async query<R = RowDataPacket>(statement: string, params: any[] = [],): Promise<R[]> {\n const [rows] = await this._conn.query<R[] & RowDataPacket[] & FieldPacket[]>(statement, params);\n return rows as R[];\n }\n\n public async begin(): Promise<void> {\n await this._conn.beginTransaction();\n }\n\n public async commit(): Promise<void> {\n await this._conn.commit();\n }\n\n public async rollback(): Promise<void> {\n await this._conn.rollback();\n }\n\n public async transaction<T>(fn: (conn: this) => Promise<T>): Promise<T> {\n await this.begin();\n try {\n const result: T = await fn(this);\n await this.commit();\n return result;\n } catch (err) {\n await this.rollback();\n throw err;\n }\n }\n\n public async close(): Promise<void> {\n this._conn.release();\n }\n\n}\n","import { HttpController, HttpRequest, HttpResponse } from '@infrastructure/contracts/Http';\n\nexport class HttpNotFoundController implements HttpController {\n public async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 404,\n body: {\n status: 'NOT_FOUND',\n message: `Route ${request.headers.location} not found`,\n },\n };\n }\n}\n","import {HttpController, HttpRequest, HttpResponse} from \"@infrastructure/contracts/Http\";\nimport {DateTime} from \"@domain/value-objects/DateTime\";\n\nexport class HttpHealthCheckController implements HttpController {\n async handle(request: HttpRequest): Promise<HttpResponse> {\n return {\n statusCode: 200,\n body: {\n date: DateTime.create().value,\n code: 200,\n status: 'OK'\n }\n }\n }\n}"],"mappings":"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","names":["LuxonDateTime"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/infrastructure/express/index.ts","../../../src/domain/contracts/ValueObject.ts","../../../src/domain/value-objects/Language.ts","../../../src/infrastructure/express/ExpressAdapters.ts"],"sourcesContent":["export * from './ExpressAdapters'","\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import {Request, Response, NextFunction, RequestHandler, ErrorRequestHandler} from 'express';\nimport {HttpController, HttpRequest} from '@infrastructure/contracts/Http';\nimport {ErrorManager} from \"@infrastructure/errors/ErrorManager\";\nimport {Language} from \"@domain/value-objects/Language\";\n\nexport function adaptExpressRoute(Controller: new () => HttpController): RequestHandler {\n return async (req: Request, res: Response, next: NextFunction) => {\n const rawLangHeader = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(rawLangHeader) ? rawLangHeader[0] : rawLangHeader || '';\n const lang = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n const httpRequest: HttpRequest = {\n headers: req.headers as Record<string, string>,\n params: req.params,\n query: Object.fromEntries(Object.entries(req.query).map(([k, v]) => [k, String(v)])),\n lang,\n body: req.body,\n };\n try {\n const controller = new Controller();\n const {statusCode, body} = await controller.handle(httpRequest);\n res.status(statusCode).json(body);\n } catch (err) {\n next(err);\n }\n };\n}\n\nexport function adaptExpressErrorHandler(errorManager: ErrorManager): ErrorRequestHandler {\n return (err, req: Request, res: Response, next: NextFunction) => {\n const raw = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(raw) ? raw[0] : raw ?? '';\n const langCode = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n\n const result = errorManager.handle(err, Language.create(langCode));\n const statusCode = typeof result.status === 'number' ? result.status : 500;\n res.status(statusCode).json({ message: result.message });\n };\n}"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/domain/contracts/ValueObject.ts","../../../src/domain/value-objects/Language.ts","../../../src/infrastructure/express/ExpressAdapters.ts"],"sourcesContent":["\nexport abstract class ValueObject<TPrimitive = unknown> {\n\n protected readonly _value: TPrimitive;\n\n protected constructor(value: TPrimitive) {\n this.validate(value);\n this._value = Object.freeze(value);\n }\n\n protected abstract validate(value: TPrimitive): void;\n\n public get value(): TPrimitive {\n return this._value;\n }\n\n public toString(): string {\n return String(this._value);\n }\n\n public equals(vo?: ValueObject<TPrimitive> | null): boolean {\n if (vo === null || vo === undefined) return false;\n if (vo.constructor !== this.constructor) return false;\n return vo.value === this._value;\n }\n}","import { ValueObject } from '@domain/contracts/ValueObject';\n\nexport class Language extends ValueObject<string> {\n\n public static readonly SUPPORTED: readonly string[] = [\n 'es',\n 'en',\n 'en-us',\n 'en-gb',\n 'en-au',\n 'en-ca',\n 'en-nz',\n 'en-ie',\n 'en-za',\n 'en-jm',\n 'en-bz',\n 'en-tt',\n 'pt-br',\n 'pt',\n 'es',\n 'es-ar',\n 'es-gt',\n 'es-cr',\n 'es-pa',\n 'es-do',\n 'es-mx',\n 'es-ve',\n 'es-co',\n 'es-pe',\n 'es-ec',\n 'es-cl',\n 'es-uy',\n 'es-py',\n 'es-bo',\n 'es-sv',\n 'es-hn',\n 'es-ni',\n 'es-pr',\n ] as const;\n\n public static readonly DEFAULT: Language = new Language('es');\n public static readonly ENGLISH: Language = new Language('en');\n public static readonly ENGLISH_UNITED_STATES: Language = new Language('en-us');\n public static readonly ENGLISH_UNITED_KINGDOM: Language = new Language('en-gb');\n public static readonly ENGLISH_AUSTRALIA: Language = new Language('en-au');\n public static readonly ENGLISH_CANADA: Language = new Language('en-ca');\n public static readonly ENGLISH_NEW_ZEALAND: Language = new Language('en-nz');\n public static readonly ENGLISH_IRELAND: Language = new Language('en-ie');\n public static readonly ENGLISH_SOUTH_AFRICA: Language = new Language('en-za');\n public static readonly ENGLISH_JAMAICA: Language = new Language('en-jm');\n public static readonly ENGLISH_BELIZE: Language = new Language('en-bz');\n public static readonly ENGLISH_TRINIDAD: Language = new Language('en-tt');\n public static readonly PORTUGUESE_BRAZIL: Language = new Language('pt-br');\n public static readonly PORTUGUESE_PORTUGAL: Language = new Language('pt');\n public static readonly SPANISH: Language = new Language('es');\n public static readonly SPANISH_ARGENTINA: Language = new Language('es-ar');\n public static readonly SPANISH_GUATEMALA: Language = new Language('es-gt');\n public static readonly SPANISH_COSTA_RICA: Language = new Language('es-cr');\n public static readonly SPANISH_PANAMA: Language = new Language('es-pa');\n public static readonly SPANISH_REPUBLICA_DOMINICANA: Language = new Language('es-do');\n public static readonly SPANISH_MEXICO: Language = new Language('es-mx');\n public static readonly SPANISH_VENEZUELA: Language = new Language('es-ve');\n public static readonly SPANISH_COLOMBIA: Language = new Language('es-co');\n public static readonly SPANISH_PERU: Language = new Language('es-pe');\n public static readonly SPANISH_ECUADOR: Language = new Language('es-ec');\n public static readonly SPANISH_CHILE: Language = new Language('es-cl');\n public static readonly SPANISH_URUGUAY: Language = new Language('es-uy');\n public static readonly SPANISH_PARAGUAY: Language = new Language('es-py');\n public static readonly SPANISH_BOLIVIA: Language = new Language('es-bo');\n public static readonly SPANISH_EL_SALVADOR: Language = new Language('es-sv');\n public static readonly SPANISH_HONDURAS: Language = new Language('es-hn');\n public static readonly SPANISH_NICARAGUA: Language = new Language('es-ni');\n public static readonly SPANISH_PUERTO_RICO: Language = new Language('es-pr');\n\n private constructor(code: string) {\n super(code.trim().toLowerCase());\n }\n\n protected validate(value: string): void {\n if (!Language.SUPPORTED.includes(value)) {\n throw new Error(`Language <${value}> is not supported`);\n }\n }\n\n public base(): string {\n return this.value.split('-')[0];\n }\n\n public static create(raw: string): Language {\n const normalized = raw.trim().toLowerCase().replace('_', '-');\n try {\n return new Language(normalized);\n } catch (error: any) {\n return Language.DEFAULT; // default language\n }\n }\n\n}\n","import {Request, Response, NextFunction, RequestHandler, ErrorRequestHandler} from 'express';\nimport {HttpController, HttpRequest} from '@infrastructure/contracts/Http';\nimport {ErrorManager} from \"@infrastructure/errors/ErrorManager\";\nimport {Language} from \"@domain/value-objects/Language\";\n\nexport function adaptExpressRoute(Controller: new () => HttpController): RequestHandler {\n return async (req: Request, res: Response, next: NextFunction) => {\n const rawLangHeader = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(rawLangHeader) ? rawLangHeader[0] : rawLangHeader || '';\n const lang = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n const httpRequest: HttpRequest = {\n headers: req.headers as Record<string, string>,\n params: req.params,\n query: Object.fromEntries(Object.entries(req.query).map(([k, v]) => [k, String(v)])),\n lang,\n body: req.body,\n };\n try {\n const controller = new Controller();\n const {statusCode, body} = await controller.handle(httpRequest);\n res.status(statusCode).json(body);\n } catch (err) {\n next(err);\n }\n };\n}\n\nexport function adaptExpressErrorHandler(errorManager: ErrorManager): ErrorRequestHandler {\n return (err, req: Request, res: Response, next: NextFunction) => {\n const raw = req.headers['accept-language'] ?? req.headers['Accept-Language'] ?? 'es';\n const rawLang = Array.isArray(raw) ? raw[0] : raw ?? '';\n const langCode = rawLang.split(',')[0].split(';')[0].trim().toLowerCase();\n\n const result = errorManager.handle(err, Language.create(langCode));\n const statusCode = typeof result.status === 'number' ? result.status : 500;\n res.status(statusCode).json({ message: result.message });\n };\n}"],"mappings":"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","names":[]}
|
|
File without changes
|