@arcaelas/dynamite 1.0.10 → 1.0.13
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/LICENSE.txt +32 -0
- package/README.txt +206 -0
- package/package.json +5 -4
- package/src/@types/index.d.ts +96 -0
- package/src/@types/index.js +9 -0
- package/{build/src → src}/core/client.d.ts +4 -0
- package/{build/src → src}/core/client.js +14 -2
- package/src/core/table.d.ts +98 -0
- package/src/core/table.js +459 -0
- package/src/core/wrapper.d.ts +17 -0
- package/src/core/wrapper.js +46 -0
- package/src/decorators/belongs_to.d.ts +1 -0
- package/src/decorators/belongs_to.js +24 -0
- package/src/decorators/created_at.d.ts +1 -0
- package/{build/src → src}/decorators/created_at.js +0 -7
- package/src/decorators/default.d.ts +1 -0
- package/{build/src → src}/decorators/default.js +2 -12
- package/src/decorators/has_many.d.ts +1 -0
- package/src/decorators/has_many.js +24 -0
- package/{build/src → src}/decorators/index.d.ts +4 -1
- package/src/decorators/index.js +36 -0
- package/src/decorators/index_sort.d.ts +12 -0
- package/src/decorators/index_sort.js +43 -0
- package/src/decorators/mutate.d.ts +2 -0
- package/{build/src → src}/decorators/mutate.js +2 -11
- package/src/decorators/name.d.ts +1 -0
- package/src/decorators/name.js +28 -0
- package/src/decorators/not_null.d.ts +1 -0
- package/{build/src → src}/decorators/not_null.js +0 -7
- package/src/decorators/primary_key.d.ts +6 -0
- package/src/decorators/primary_key.js +30 -0
- package/src/decorators/updated_at.d.ts +12 -0
- package/src/decorators/updated_at.js +26 -0
- package/src/decorators/validate.d.ts +1 -0
- package/{build/src → src}/decorators/validate.js +0 -7
- package/{build/src → src}/index.d.ts +9 -0
- package/{build/src → src}/index.js +14 -5
- package/{build/src → src}/utils/batch-relations.js +2 -1
- package/src/utils/circular-detector.d.ts +82 -0
- package/src/utils/circular-detector.js +209 -0
- package/src/utils/memory-manager.d.ts +42 -0
- package/src/utils/memory-manager.js +108 -0
- package/{build/src → src}/utils/projection.js +3 -2
- package/src/utils/relations.d.ts +17 -0
- package/src/utils/relations.js +166 -0
- package/src/utils/security-validator.d.ts +49 -0
- package/src/utils/security-validator.js +152 -0
- package/src/utils/throttle-manager.d.ts +78 -0
- package/src/utils/throttle-manager.js +196 -0
- package/src/utils/transaction-manager.d.ts +88 -0
- package/src/utils/transaction-manager.js +298 -0
- package/build/__tests__/crud.spec.d.ts +0 -7
- package/build/__tests__/crud.spec.js +0 -287
- package/build/__tests__/crud.spec.js.map +0 -1
- package/build/__tests__/debug-decorators.spec.d.ts +0 -7
- package/build/__tests__/debug-decorators.spec.js +0 -143
- package/build/__tests__/debug-decorators.spec.js.map +0 -1
- package/build/__tests__/decorators.spec.d.ts +0 -7
- package/build/__tests__/decorators.spec.js +0 -203
- package/build/__tests__/decorators.spec.js.map +0 -1
- package/build/__tests__/instance-crud.spec.d.ts +0 -7
- package/build/__tests__/instance-crud.spec.js +0 -184
- package/build/__tests__/instance-crud.spec.js.map +0 -1
- package/build/src/core/client.js.map +0 -1
- package/build/src/core/table.d.ts +0 -164
- package/build/src/core/table.js +0 -406
- package/build/src/core/table.js.map +0 -1
- package/build/src/core/wrapper.d.ts +0 -54
- package/build/src/core/wrapper.js +0 -27
- package/build/src/core/wrapper.js.map +0 -1
- package/build/src/decorators/created_at.d.ts +0 -8
- package/build/src/decorators/created_at.js.map +0 -1
- package/build/src/decorators/default.d.ts +0 -8
- package/build/src/decorators/default.js.map +0 -1
- package/build/src/decorators/index.js +0 -26
- package/build/src/decorators/index.js.map +0 -1
- package/build/src/decorators/index_sort.d.ts +0 -8
- package/build/src/decorators/index_sort.js +0 -30
- package/build/src/decorators/index_sort.js.map +0 -1
- package/build/src/decorators/mutate.d.ts +0 -9
- package/build/src/decorators/mutate.js.map +0 -1
- package/build/src/decorators/name.d.ts +0 -8
- package/build/src/decorators/name.js +0 -42
- package/build/src/decorators/name.js.map +0 -1
- package/build/src/decorators/not_null.d.ts +0 -8
- package/build/src/decorators/not_null.js.map +0 -1
- package/build/src/decorators/primary_key.d.ts +0 -8
- package/build/src/decorators/primary_key.js +0 -26
- package/build/src/decorators/primary_key.js.map +0 -1
- package/build/src/decorators/updated_at.d.ts +0 -8
- package/build/src/decorators/updated_at.js +0 -18
- package/build/src/decorators/updated_at.js.map +0 -1
- package/build/src/decorators/validate.d.ts +0 -8
- package/build/src/decorators/validate.js.map +0 -1
- package/build/src/index.js.map +0 -1
- package/build/src/utils/batch-relations.js.map +0 -1
- package/build/src/utils/naming.js.map +0 -1
- package/build/src/utils/projection.js.map +0 -1
- package/build/src/utils/relations.d.ts +0 -23
- package/build/src/utils/relations.js +0 -205
- package/build/src/utils/relations.js.map +0 -1
- /package/{build/src → src}/utils/batch-relations.d.ts +0 -0
- /package/{build/src → src}/utils/naming.d.ts +0 -0
- /package/{build/src → src}/utils/naming.js +0 -0
- /package/{build/src → src}/utils/projection.d.ts +0 -0
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @file name.ts
|
|
4
|
-
* @descripcion Decorador @Name para tablas y columnas
|
|
5
|
-
* @autor Miguel Alejandro
|
|
6
|
-
* @fecha 2025-01-27
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.default = Name;
|
|
10
|
-
const wrapper_1 = require("../core/wrapper");
|
|
11
|
-
const naming_1 = require("../utils/naming");
|
|
12
|
-
/** Decorador para establecer nombres personalizados de tablas y columnas */
|
|
13
|
-
function Name(label) {
|
|
14
|
-
(!label || typeof label !== "string") &&
|
|
15
|
-
(() => {
|
|
16
|
-
throw new TypeError("@Name requiere una cadena no vacía");
|
|
17
|
-
})();
|
|
18
|
-
return (target, prop) => {
|
|
19
|
-
const ctor = prop === undefined ? target : target.constructor;
|
|
20
|
-
const entry = (0, wrapper_1.ensureConfig)(ctor, (0, naming_1.toSnakePlural)(ctor.name));
|
|
21
|
-
if (prop === undefined) {
|
|
22
|
-
const auto = (0, naming_1.toSnakePlural)(ctor.name);
|
|
23
|
-
entry.name !== auto &&
|
|
24
|
-
entry.name !== label &&
|
|
25
|
-
entry.name &&
|
|
26
|
-
(() => {
|
|
27
|
-
throw new Error(`La clase ${ctor.name} ya tiene un @Name distinto (${entry.name})`);
|
|
28
|
-
})();
|
|
29
|
-
entry.name = label;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const col = (0, wrapper_1.ensureColumn)(entry, prop, label);
|
|
33
|
-
col.name &&
|
|
34
|
-
col.name !== label &&
|
|
35
|
-
(() => {
|
|
36
|
-
throw new Error(`La columna '${String(prop)}' ya tiene @Name distinto (${col.name})`);
|
|
37
|
-
})();
|
|
38
|
-
col.name = label;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=name.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"name.js","sourceRoot":"","sources":["../../../src/decorators/name.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAMH,uBAiCC;AArCD,6CAA6D;AAC7D,4CAAgD;AAEhD,4EAA4E;AAC5E,SAAwB,IAAI,CAC1B,KAAa;IAEb,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,CAAC,GAAG,EAAE;YACJ,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CAAC,MAAW,EAAE,IAAsB,EAAQ,EAAE;QACnD,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,IAAA,sBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,KAAK,IAAI;gBACjB,KAAK,CAAC,IAAI,KAAK,KAAK;gBACpB,KAAK,CAAC,IAAI;gBACV,CAAC,GAAG,EAAE;oBACJ,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,CAAC,IAAI,gCAAgC,KAAK,CAAC,IAAI,GAAG,CACnE,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,IAAI;gBACN,GAAG,CAAC,IAAI,KAAK,KAAK;gBAClB,CAAC,GAAG,EAAE;oBACJ,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,CAAC,IAAI,GAAG,CACrE,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file not_null.ts
|
|
3
|
-
* @descripcion Decorador @NotNull para validación no-null
|
|
4
|
-
* @autor Miguel Alejandro
|
|
5
|
-
* @fecha 2025-01-27
|
|
6
|
-
*/
|
|
7
|
-
/** Decorador para validar que el valor no sea nulo, indefinido o string vacío */
|
|
8
|
-
export default function NotNull(): PropertyDecorator;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"not_null.js","sourceRoot":"","sources":["../../../src/decorators/not_null.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAKH,0BAOC;AAVD,0DAAkC;AAElC,iFAAiF;AACjF,SAAwB,OAAO;IAC7B,OAAQ,kBAAgB,CACtB,CAAC,KAAU,EAAE,EAAE,CACb,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CACrD,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file primary_key.ts
|
|
3
|
-
* @descripcion Decorador @PrimaryKey para clave primaria compuesta
|
|
4
|
-
* @autor Miguel Alejandro
|
|
5
|
-
* @fecha 2025-01-27
|
|
6
|
-
*/
|
|
7
|
-
/** Decorador para marcar propiedad como clave primaria compuesta (Index + IndexSort) */
|
|
8
|
-
export default function PrimaryKey(name?: string): PropertyDecorator;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @file primary_key.ts
|
|
4
|
-
* @descripcion Decorador @PrimaryKey para clave primaria compuesta
|
|
5
|
-
* @autor Miguel Alejandro
|
|
6
|
-
* @fecha 2025-01-27
|
|
7
|
-
*/
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.default = PrimaryKey;
|
|
13
|
-
const index_1 = __importDefault(require("./index"));
|
|
14
|
-
const index_sort_1 = __importDefault(require("./index_sort"));
|
|
15
|
-
/** Decorador para marcar propiedad como clave primaria compuesta (Index + IndexSort) */
|
|
16
|
-
function PrimaryKey(name = "primary") {
|
|
17
|
-
(typeof name !== "string" || !name.trim()) &&
|
|
18
|
-
(() => {
|
|
19
|
-
throw new TypeError("@PrimaryKey requiere un nombre de índice válido");
|
|
20
|
-
})();
|
|
21
|
-
return (target, prop) => {
|
|
22
|
-
(0, index_1.default)()(target, prop);
|
|
23
|
-
(0, index_sort_1.default)()(target, prop);
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=primary_key.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primary_key.js","sourceRoot":"","sources":["../../../src/decorators/primary_key.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAMH,6BASC;AAbD,oDAA4B;AAC5B,8DAAqC;AAErC,wFAAwF;AACxF,SAAwB,UAAU,CAAC,IAAI,GAAG,SAAS;IACjD,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,CAAC,GAAG,EAAE;YACJ,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;QACzE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CAAC,MAAc,EAAE,IAAqB,EAAQ,EAAE;QACrD,IAAA,eAAK,GAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtB,IAAA,oBAAS,GAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file updated_at.ts
|
|
3
|
-
* @descripcion Decorador @UpdatedAt para timestamp de actualización
|
|
4
|
-
* @autor Miguel Alejandro
|
|
5
|
-
* @fecha 2025-01-27
|
|
6
|
-
*/
|
|
7
|
-
/** Decorador para establecer timestamp automático de actualización */
|
|
8
|
-
export default function UpdatedAt(): PropertyDecorator;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @file updated_at.ts
|
|
4
|
-
* @descripcion Decorador @UpdatedAt para timestamp de actualización
|
|
5
|
-
* @autor Miguel Alejandro
|
|
6
|
-
* @fecha 2025-01-27
|
|
7
|
-
*/
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.default = UpdatedAt;
|
|
13
|
-
const mutate_1 = __importDefault(require("./mutate"));
|
|
14
|
-
/** Decorador para establecer timestamp automático de actualización */
|
|
15
|
-
function UpdatedAt() {
|
|
16
|
-
return (0, mutate_1.default)(() => new Date().toISOString());
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=updated_at.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"updated_at.js","sourceRoot":"","sources":["../../../src/decorators/updated_at.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAKH,4BAEC;AALD,sDAA8B;AAE9B,sEAAsE;AACtE,SAAwB,SAAS;IAC/B,OAAO,IAAA,gBAAM,EAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file validate.ts
|
|
3
|
-
* @descripcion Decorador @Validate para validaciones
|
|
4
|
-
* @autor Miguel Alejandro
|
|
5
|
-
* @fecha 2025-01-27
|
|
6
|
-
*/
|
|
7
|
-
/** Decorador para aplicar validaciones a propiedades */
|
|
8
|
-
export default function Validate(validators: ((v: unknown) => true | string) | ((v: unknown) => true | string)[]): PropertyDecorator;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/decorators/validate.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAMH,2BAkBC;AAtBD,6CAA4E;AAC5E,4CAAgD;AAEhD,wDAAwD;AACxD,SAAwB,QAAQ,CAC9B,UAEqC;IAErC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,MAAc,EAAE,IAAqB,EAAQ,EAAE;QACrD,MAAM,IAAI,GAAI,MAAc,CAAC,WAAW,CAAC;QACzC,MAAM,KAAK,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,IAAA,sBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC;QACpB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,GAAG;YACzD,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,aAAa,CAAC,KAAU,EAAE,GAAW,EAAE,IAAqB;IACnE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE;QACjC,GAAG;YACD,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,GAAG,CAAC,GAAY;YACd,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,GAAG;gBACD,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;oBAC5C,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU;wBACjC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE;wBACf,CAAC,CAAC,GAAG,CAAC,OAAO;oBACf,CAAC,CAAC,GAAG,CAAC;YACV,IAAI,GAAG,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM;oBAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,KAAK,IAAI;wBACR,CAAC,GAAG,EAAE;4BACJ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;wBACpE,CAAC,CAAC,EAAE,CAAC;gBACT,CAAC;YACH,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QAClB,CAAC;QACD,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC"}
|
package/build/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,eAAe;AACf,wCAAyC;AAAhC,kGAAA,QAAQ,OAAA;AACjB,sCAAgD;AAAvC,+GAAA,OAAO,OAAS;AAEzB,yDAAyD;AAEzD,aAAa;AACb,sDAA+D;AAAtD,wHAAA,OAAO,OAAa;AAC7B,gDAA0D;AAAjD,mHAAA,OAAO,OAAW;AAC3B,4CAAsD;AAA7C,+GAAA,OAAO,OAAS;AACzB,sDAA+D;AAAtD,wHAAA,OAAO,OAAa;AAC7B,8CAAwD;AAA/C,iHAAA,OAAO,OAAU;AAC1B,0CAAoD;AAA3C,6GAAA,OAAO,OAAQ;AACxB,kDAA2D;AAAlD,oHAAA,OAAO,OAAW;AAC3B,wDAAiE;AAAxD,0HAAA,OAAO,OAAc;AAC9B,sDAA+D;AAAtD,wHAAA,OAAO,OAAa;AAC7B,kDAA4D;AAAnD,qHAAA,OAAO,OAAY;AAE5B,YAAY;AACZ,+CAAuD;AAA9C,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch-relations.js","sourceRoot":"","sources":["../../../src/utils/batch-relations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/utils/naming.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAKH,sCAEC;AALD,0DAAkC;AAElC,wEAAwE;AACxE,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,IAAA,mBAAS,EAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/utils/projection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,0CAA0C;AACnC,MAAM,eAAe,GAAG,CAC7B,UAAqB,EACrB,IAAU,EACU,EAAE;IACtB,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAEnD,qCAAqC;IACrC,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CACvC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAC7D,CAAC;IAEF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B;AAEF,gDAAgD;AACzC,MAAM,0BAA0B,GAAG,CACxC,OAAY,EACZ,cAAyB,EACf,EAAE;IACZ,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAEjD,wCAAwC;IACxC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CACnC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAgB,EAAE,EAAE;QACxC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE5B,yBAAyB;QACzB,IAAI,OAAO,EAAE,UAAU;YAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,QAAQ;YAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,CACF,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC,CAAC;AAlBW,QAAA,0BAA0B,8BAkBrC;AAEF,oDAAoD;AAC7C,MAAM,kBAAkB,GAAG,CAChC,KAAU,EACV,QAAuC,EAC7B,EAAE;IACZ,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAa,CAAC;IAE5D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAW,EAAE,EAAE,CACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK;gBAC5B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACjD,CAAC;QAEJ,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAW,EAAE,EAAE,CACd,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAChE,CAAC;QAEJ,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,kBAAkB,sBAyB7B"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file relations.ts
|
|
3
|
-
* @descripcion Sistema de relaciones completo ultra-conciso
|
|
4
|
-
* @autor Miguel Alejandro
|
|
5
|
-
* @fecha 2025-01-27
|
|
6
|
-
*/
|
|
7
|
-
/** Decorador @hasMany para relaciones 1:N */
|
|
8
|
-
export declare const hasMany: (targetModel: () => any, foreignKey: string, localKey?: string) => (target: any, propertyKey: string) => void;
|
|
9
|
-
/** Decorador @belongsTo para relaciones N:1 */
|
|
10
|
-
export declare const belongsTo: (targetModel: () => any, localKey: string, foreignKey?: string) => (target: any, propertyKey: string) => void;
|
|
11
|
-
/** Automatic optimized includes processing with transparent batch loading */
|
|
12
|
-
export declare const processIncludes: (Model: any, items: any[], include: any, depth?: number) => Promise<any[]>;
|
|
13
|
-
/** Clear relation cache for specific model */
|
|
14
|
-
export declare const clearRelationCache: (Model: any) => boolean;
|
|
15
|
-
/** Start the cleanup interval */
|
|
16
|
-
export declare const startCleanupInterval: () => void;
|
|
17
|
-
/** Stop the cleanup interval */
|
|
18
|
-
export declare const stopCleanupInterval: () => void;
|
|
19
|
-
/** Separar opciones de query e include */
|
|
20
|
-
export declare const separateQueryOptions: (options: any) => {
|
|
21
|
-
queryOptions: any;
|
|
22
|
-
includeOptions: any;
|
|
23
|
-
};
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @file relations.ts
|
|
4
|
-
* @descripcion Sistema de relaciones completo ultra-conciso
|
|
5
|
-
* @autor Miguel Alejandro
|
|
6
|
-
* @fecha 2025-01-27
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.separateQueryOptions = exports.stopCleanupInterval = exports.startCleanupInterval = exports.clearRelationCache = exports.processIncludes = exports.belongsTo = exports.hasMany = void 0;
|
|
10
|
-
const wrapper_1 = require("../core/wrapper");
|
|
11
|
-
const naming_1 = require("./naming");
|
|
12
|
-
const relCache = new Map();
|
|
13
|
-
/** Decorador @hasMany para relaciones 1:N */
|
|
14
|
-
const hasMany = (targetModel, foreignKey, localKey = "id") => (target, propertyKey) => {
|
|
15
|
-
// Registrar metadatos de relación
|
|
16
|
-
(0, wrapper_1.ensureConfig)(target.constructor, (0, naming_1.toSnakePlural)(target.constructor.name)).relations.set(propertyKey, {
|
|
17
|
-
type: "hasMany",
|
|
18
|
-
targetModel,
|
|
19
|
-
foreignKey,
|
|
20
|
-
localKey,
|
|
21
|
-
});
|
|
22
|
-
// Definir getter dinámico para la propiedad de relación
|
|
23
|
-
Object.defineProperty(target, propertyKey, {
|
|
24
|
-
get: function () {
|
|
25
|
-
// Intentar obtener datos cargados previamente
|
|
26
|
-
const cached = this[`_${propertyKey}`];
|
|
27
|
-
if (cached !== undefined)
|
|
28
|
-
return cached;
|
|
29
|
-
// Si no hay datos cargados, retornar array vacío (lazy loading no implementado aquí)
|
|
30
|
-
console.warn(`Relación ${propertyKey} no cargada. Use includes en la consulta.`);
|
|
31
|
-
return [];
|
|
32
|
-
},
|
|
33
|
-
configurable: true,
|
|
34
|
-
enumerable: false,
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
exports.hasMany = hasMany;
|
|
38
|
-
/** Decorador @belongsTo para relaciones N:1 */
|
|
39
|
-
const belongsTo = (targetModel, localKey, foreignKey = "id") => (target, propertyKey) => {
|
|
40
|
-
// Registrar metadatos de relación
|
|
41
|
-
(0, wrapper_1.ensureConfig)(target.constructor, (0, naming_1.toSnakePlural)(target.constructor.name)).relations.set(propertyKey, {
|
|
42
|
-
type: "belongsTo",
|
|
43
|
-
targetModel,
|
|
44
|
-
localKey,
|
|
45
|
-
foreignKey,
|
|
46
|
-
});
|
|
47
|
-
// Definir getter dinámico para la propiedad de relación
|
|
48
|
-
Object.defineProperty(target, propertyKey, {
|
|
49
|
-
get: function () {
|
|
50
|
-
// Intentar obtener datos cargados previamente
|
|
51
|
-
const cached = this[`_${propertyKey}`];
|
|
52
|
-
if (cached !== undefined)
|
|
53
|
-
return cached;
|
|
54
|
-
// Si no hay datos cargados, retornar null (lazy loading no implementado aquí)
|
|
55
|
-
console.warn(`Relación ${propertyKey} no cargada. Use includes en la consulta.`);
|
|
56
|
-
return null;
|
|
57
|
-
},
|
|
58
|
-
configurable: true,
|
|
59
|
-
enumerable: false,
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
exports.belongsTo = belongsTo;
|
|
63
|
-
/** Automatic batch loading for hasMany relations */
|
|
64
|
-
const batchLoadHasMany = async (Model, items, relation) => {
|
|
65
|
-
const { targetModel, foreignKey, localKey } = relation;
|
|
66
|
-
const TargetModel = targetModel();
|
|
67
|
-
const parentKeys = items.map((item) => item[localKey]).filter(Boolean);
|
|
68
|
-
if (!parentKeys.length)
|
|
69
|
-
return new Map();
|
|
70
|
-
const relatedItems = await TargetModel.where({
|
|
71
|
-
[foreignKey]: { in: parentKeys },
|
|
72
|
-
});
|
|
73
|
-
const grouped = new Map();
|
|
74
|
-
relatedItems.forEach((item) => {
|
|
75
|
-
const key = item[foreignKey];
|
|
76
|
-
if (!grouped.has(key))
|
|
77
|
-
grouped.set(key, []);
|
|
78
|
-
grouped.get(key).push(item);
|
|
79
|
-
});
|
|
80
|
-
return grouped;
|
|
81
|
-
};
|
|
82
|
-
/** Automatic batch loading for belongsTo relations with TTL cache */
|
|
83
|
-
const batchLoadBelongsTo = async (Model, items, relation) => {
|
|
84
|
-
const { targetModel, localKey, foreignKey } = relation;
|
|
85
|
-
const TargetModel = targetModel();
|
|
86
|
-
const cacheKey = `${TargetModel.name}_belongsTo`;
|
|
87
|
-
const cache = relCache.get(cacheKey) || new Map();
|
|
88
|
-
relCache.set(cacheKey, cache);
|
|
89
|
-
const now = Date.now();
|
|
90
|
-
const keysToFetch = [];
|
|
91
|
-
const cachedResults = new Map();
|
|
92
|
-
items.forEach((item) => {
|
|
93
|
-
const key = item[localKey];
|
|
94
|
-
if (!key)
|
|
95
|
-
return;
|
|
96
|
-
const cached = cache.get(key);
|
|
97
|
-
if (cached && cached.expires > now) {
|
|
98
|
-
cachedResults.set(key, cached.data);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
keysToFetch.push(key);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
if (keysToFetch.length) {
|
|
105
|
-
console.log("DEBUG: batchLoadBelongsTo fetching keys:", keysToFetch, "for foreignKey:", foreignKey);
|
|
106
|
-
console.log("DEBUG: TargetModel:", TargetModel.name);
|
|
107
|
-
try {
|
|
108
|
-
const fetchedItems = await TargetModel.where({
|
|
109
|
-
[foreignKey]: { in: keysToFetch },
|
|
110
|
-
});
|
|
111
|
-
console.log("DEBUG: batchLoadBelongsTo fetched items:", fetchedItems.length);
|
|
112
|
-
const expires = now + 300000;
|
|
113
|
-
fetchedItems.forEach((item) => {
|
|
114
|
-
const key = item[foreignKey];
|
|
115
|
-
cache.set(key, { data: item, expires });
|
|
116
|
-
cachedResults.set(key, item);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
console.error("DEBUG: batchLoadBelongsTo error:", error);
|
|
121
|
-
throw error;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return cachedResults;
|
|
125
|
-
};
|
|
126
|
-
/** Automatic optimized includes processing with transparent batch loading */
|
|
127
|
-
const processIncludes = async (Model, items, include, depth = 0) => {
|
|
128
|
-
if (!include || depth > 10 || !items.length)
|
|
129
|
-
return items;
|
|
130
|
-
const meta = Model.getMeta();
|
|
131
|
-
// Process all relations in parallel with automatic batching
|
|
132
|
-
const relationPromises = Object.entries(include).map(async ([relationKey, relationOptions]) => {
|
|
133
|
-
const relation = meta.relations.get(relationKey);
|
|
134
|
-
if (!relation)
|
|
135
|
-
return;
|
|
136
|
-
let relatedData;
|
|
137
|
-
// Automatic batch loading based on relation type
|
|
138
|
-
if (relation.type === "hasMany") {
|
|
139
|
-
relatedData = await batchLoadHasMany(Model, items, relation);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
relatedData = await batchLoadBelongsTo(Model, items, relation);
|
|
143
|
-
}
|
|
144
|
-
// Assign relations to items using private properties for getters
|
|
145
|
-
items.forEach((item) => {
|
|
146
|
-
const key = item[relation.localKey];
|
|
147
|
-
const related = relatedData.get(key);
|
|
148
|
-
// Almacenar en propiedad privada que el getter dinámico busca
|
|
149
|
-
item[`_${relationKey}`] =
|
|
150
|
-
relation.type === "hasMany" ? related || [] : related || null;
|
|
151
|
-
});
|
|
152
|
-
// Recursive processing for nested includes
|
|
153
|
-
if (relationOptions?.include && relatedData.size) {
|
|
154
|
-
const allRelated = Array.from(relatedData.values())
|
|
155
|
-
.flat()
|
|
156
|
-
.filter(Boolean);
|
|
157
|
-
const TargetModel = relation.targetModel();
|
|
158
|
-
await (0, exports.processIncludes)(TargetModel, allRelated, relationOptions.include, depth + 1);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
await Promise.all(relationPromises);
|
|
162
|
-
return items;
|
|
163
|
-
};
|
|
164
|
-
exports.processIncludes = processIncludes;
|
|
165
|
-
/** Auto cleanup expired cache entries */
|
|
166
|
-
const cleanupExpiredCache = () => {
|
|
167
|
-
const now = Date.now();
|
|
168
|
-
relCache.forEach((cache, modelKey) => {
|
|
169
|
-
cache.forEach((entry, key) => {
|
|
170
|
-
if (entry.expires <= now)
|
|
171
|
-
cache.delete(key);
|
|
172
|
-
});
|
|
173
|
-
if (cache.size === 0)
|
|
174
|
-
relCache.delete(modelKey);
|
|
175
|
-
});
|
|
176
|
-
};
|
|
177
|
-
/** Clear relation cache for specific model */
|
|
178
|
-
const clearRelationCache = (Model) => relCache.delete(`${Model.name}_belongsTo`);
|
|
179
|
-
exports.clearRelationCache = clearRelationCache;
|
|
180
|
-
// Auto cleanup every 5 minutes
|
|
181
|
-
let cleanupInterval = null;
|
|
182
|
-
/** Start the cleanup interval */
|
|
183
|
-
const startCleanupInterval = () => {
|
|
184
|
-
if (!cleanupInterval) {
|
|
185
|
-
cleanupInterval = setInterval(cleanupExpiredCache, 300000);
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
exports.startCleanupInterval = startCleanupInterval;
|
|
189
|
-
/** Stop the cleanup interval */
|
|
190
|
-
const stopCleanupInterval = () => {
|
|
191
|
-
if (cleanupInterval) {
|
|
192
|
-
clearInterval(cleanupInterval);
|
|
193
|
-
cleanupInterval = null;
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
exports.stopCleanupInterval = stopCleanupInterval;
|
|
197
|
-
// Auto-start cleanup interval
|
|
198
|
-
(0, exports.startCleanupInterval)();
|
|
199
|
-
/** Separar opciones de query e include */
|
|
200
|
-
const separateQueryOptions = (options) => {
|
|
201
|
-
const { include, ...queryOptions } = options;
|
|
202
|
-
return { queryOptions, includeOptions: include };
|
|
203
|
-
};
|
|
204
|
-
exports.separateQueryOptions = separateQueryOptions;
|
|
205
|
-
//# sourceMappingURL=relations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/utils/relations.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|