@obisey/nest 0.1.35 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/package.json +11 -3
  2. package/prototipos/__tests__/baseResolver.e2e.spec.d.ts +9 -0
  3. package/prototipos/__tests__/baseResolver.e2e.spec.js +172 -0
  4. package/prototipos/__tests__/baseResolver.integration.spec.d.ts +8 -0
  5. package/prototipos/__tests__/baseResolver.integration.spec.js +105 -0
  6. package/prototipos/__tests__/baseResolver.spec.d.ts +14 -0
  7. package/prototipos/__tests__/baseResolver.spec.js +305 -0
  8. package/prototipos/__tests__/baseService.e2e.simple.spec.d.ts +7 -0
  9. package/prototipos/__tests__/baseService.e2e.simple.spec.js +92 -0
  10. package/prototipos/__tests__/baseService.e2e.validation.spec.d.ts +7 -0
  11. package/prototipos/__tests__/baseService.e2e.validation.spec.js +157 -0
  12. package/prototipos/__tests__/baseService.integration.spec.d.ts +8 -0
  13. package/prototipos/__tests__/baseService.integration.spec.js +115 -0
  14. package/prototipos/__tests__/baseService.spec.d.ts +14 -0
  15. package/prototipos/__tests__/baseService.spec.js +253 -0
  16. package/prototipos/__tests__/cachear-types.spec.d.ts +8 -0
  17. package/prototipos/__tests__/cachear-types.spec.js +79 -0
  18. package/prototipos/__tests__/graphql-flow.e2e.spec.d.ts +9 -0
  19. package/prototipos/__tests__/graphql-flow.e2e.spec.js +270 -0
  20. package/prototipos/__tests__/test-helpers/mock-sequelize.d.ts +83 -0
  21. package/prototipos/__tests__/test-helpers/mock-sequelize.js +138 -0
  22. package/prototipos/baseResolver.d.ts +8 -8
  23. package/prototipos/baseResolver.js +23 -17
  24. package/prototipos/baseService.js +23 -75
  25. package/prototipos/utils/cachear.d.ts +12 -2
  26. package/prototipos/utils/cachear.js +14 -9
  27. package/adapters/index.d.ts +0 -11
  28. package/adapters/index.js +0 -27
  29. package/adapters/sequelize/index.d.ts +0 -5
  30. package/adapters/sequelize/index.js +0 -9
  31. package/adapters/sequelize/property.adapter.d.ts +0 -79
  32. package/adapters/sequelize/property.adapter.js +0 -134
  33. package/prototipos/index.d.ts +0 -9
  34. package/prototipos/index.js +0 -26
  35. package/receptor.d.ts +0 -25
  36. package/receptor.js +0 -153
  37. package/redisStore.d.ts +0 -11
  38. package/redisStore.js +0 -78
@@ -412,10 +412,9 @@ function BaseResolver(modelo) {
412
412
  { nombre: modelo, id: item.id },
413
413
  { nombre: planeta },
414
414
  ],
415
- }), (cache) => Promise.resolve(new Clase(JSON.parse(cache))), //Revisar
416
- (resultado) => Promise.resolve(resultado ? resultado.get({ plain: true }) : null), //transformar
417
- () => item.$get(planeta, { where: (0, formarwhere_1.formarWhere)(where) }), //Pedir
418
- () => new Promise(async (resolve) => {
415
+ }), (cache) => Promise.resolve(new Clase(JSON.parse(cache))), (resultado) => Promise.resolve(resultado
416
+ ? JSON.stringify(resultado.get({ plain: true }))
417
+ : null), () => item.$get(planeta, { where: (0, formarwhere_1.formarWhere)(where) }), () => new Promise(async (resolve) => {
419
418
  try {
420
419
  let e = await this.redis.hExists(nkey, planeta);
421
420
  if (e) {
@@ -437,11 +436,13 @@ function BaseResolver(modelo) {
437
436
  catch (err) {
438
437
  console.log(this.cacheManager);
439
438
  }
440
- }), //observar
441
- (__, resultado) => {
442
- if (resultado)
443
- this.redis.hSet(`${universo ? universo : 'pro'}:${IdEmpresa}:${planeta}:${resultado.id}`, 'item', JSON.stringify(resultado));
444
- return this.redis.hSet(nkey, planeta, resultado ? JSON.stringify(resultado.id) : null);
439
+ }), (__, datos) => {
440
+ if (datos) {
441
+ const parsed = JSON.parse(datos);
442
+ this.redis.hSet(`${universo ? universo : 'pro'}:${IdEmpresa}:${planeta}:${parsed.id}`, 'item', datos);
443
+ return this.redis.hSet(nkey, planeta, String(parsed.id));
444
+ }
445
+ return this.redis.hSet(nkey, planeta, null);
445
446
  });
446
447
  if (resultado)
447
448
  await (0, paginar_1.paginar)(this.cacheManager, IdEmpresa, pagina, planeta, resultado.get({ plain: true }));
@@ -481,10 +482,7 @@ function BaseResolver(modelo) {
481
482
  }), (cache) => Promise.resolve(cache.map((n) => {
482
483
  const parsed = JSON.parse(n);
483
484
  return Clase.build(parsed, { raw: false, isNewRecord: false });
484
- })), //Revisar
485
- (resultado) => Promise.resolve(resultado.map((n) => n.get({ plain: true }))), //transformar
486
- () => item.$get(planeta, { where: (0, formarwhere_1.formarWhere)(where) }), //Pedir
487
- () => new Promise(async (resolve) => {
485
+ })), (resultado) => Promise.resolve(resultado.map((n) => JSON.stringify(n.get({ plain: true })))), () => item.$get(planeta, { where: (0, formarwhere_1.formarWhere)(where) }), () => new Promise(async (resolve) => {
488
486
  try {
489
487
  let e = await this.redis.hExists(nkey, planeta);
490
488
  if (e) {
@@ -507,9 +505,9 @@ function BaseResolver(modelo) {
507
505
  catch (err) {
508
506
  console.log({ err });
509
507
  }
510
- }), //observar
511
- (__, resultado) => {
512
- return Promise.all(resultado.map((n) => this.redis.hSet(pkey(n.id), 'item', JSON.stringify(n)))).then(() => this.redis.hSet(nkey, planeta, JSON.stringify(resultado.map((n) => n.id))));
508
+ }), (__, datos) => {
509
+ const parsedItems = datos.map((s) => JSON.parse(s));
510
+ return Promise.all(parsedItems.map((n, i) => this.redis.hSet(pkey(n.id), 'item', datos[i]))).then(() => this.redis.hSet(nkey, planeta, JSON.stringify(parsedItems.map((n) => n.id))));
513
511
  });
514
512
  await (0, paginar_1.paginar)(this.cacheManager, IdEmpresa, pagina, planeta, resultado.map((n) => n.get({ plain: true })));
515
513
  // if (isDev)
@@ -544,6 +542,9 @@ function BaseResolver(modelo) {
544
542
  ], borrarSSR)
545
543
  .then(() => servicio.findByPk(IdModelo))
546
544
  .then((item) => {
545
+ if (tipo === 'hasOne') {
546
+ return item.$set(alias, IdPlaneta);
547
+ }
547
548
  return item.$add(alias, IdPlaneta, through ? { through } : null);
548
549
  })
549
550
  .then((response) => true)
@@ -572,7 +573,12 @@ function BaseResolver(modelo) {
572
573
  ...crearKey(planeta, IdPlaneta),
573
574
  ], borrarSSR)
574
575
  .then(() => servicio.findByPk(IdModelo))
575
- .then((item) => item.$remove(alias, IdPlaneta))
576
+ .then((item) => {
577
+ if (tipo === 'belongsTo' || tipo === 'hasOne') {
578
+ return item.$set(alias, null);
579
+ }
580
+ return item.$remove(alias, IdPlaneta);
581
+ })
576
582
  .then(() => true)
577
583
  .catch((err) => {
578
584
  // log(chalk.red('desligar', alias, err, '***********'));
@@ -53,15 +53,11 @@ function BaseService(modelo) {
53
53
  let nkey = `${key.universo ? key.universo : 'pro'}:${key.IdEmpresa}:${key.fragmentos[0].nombre}:${id}`;
54
54
  const { resultado, cache } = await (0, cachear_1.cachear)(cacheable, this.cacheManager, (0, keyInterface_1.transformarKey)({ ...key }), (cache) => {
55
55
  return Promise.resolve(repository.sequelize.models[(0, lodash_1.capitalize)(modelo)](JSON.parse(cache)));
56
- }, //Revisar
57
- (resultado) => {
56
+ }, (resultado) => {
58
57
  return Promise.resolve(resultado
59
58
  ? JSON.stringify(resultado.get({ plain: true }))
60
59
  : null);
61
- }, //transformar
62
- () => repository.findByPk(id), //Pedir
63
- () => new Promise(async (resolve) => {
64
- //observar
60
+ }, () => repository.findByPk(id), () => new Promise(async (resolve) => {
65
61
  let e = await this.redis.hExists(nkey, 'item');
66
62
  if (e) {
67
63
  let item = await this.redis.hGet(nkey, 'item');
@@ -70,9 +66,9 @@ function BaseService(modelo) {
70
66
  else {
71
67
  resolve(undefined);
72
68
  }
73
- }), (__, resultado) => {
74
- if (resultado) {
75
- this.redis.hSet(nkey, 'item', resultado);
69
+ }), (__, datos) => {
70
+ if (datos) {
71
+ this.redis.hSet(nkey, 'item', datos);
76
72
  }
77
73
  return Promise.resolve(false);
78
74
  });
@@ -129,85 +125,42 @@ function BaseService(modelo) {
129
125
  where,
130
126
  }), (cache) => Promise.resolve(cache.map((n) => {
131
127
  const parsed = JSON.parse(n);
132
- console.log(`[OBISEY-NEST CACHE HIT] ${modelo}:`, {
133
- cached: parsed,
134
- modelName: (0, lodash_1.capitalize)(modelo),
135
- });
136
128
  const ModelClass = repository.sequelize.models[(0, lodash_1.capitalize)(modelo)];
137
- const instance = ModelClass.build(parsed, { raw: false, isNewRecord: false });
138
- console.log(`[OBISEY-NEST DESERIALIZED] ${modelo}:`, {
139
- id: instance.id,
140
- hasId: 'id' in instance,
141
- });
142
- return instance;
143
- })), //Revisar
144
- (resultado) => {
145
- console.log(`[TRANSFORMAR] ${modelo}: returning ${resultado.length} instances`);
146
- return Promise.resolve(resultado);
147
- }, //transformar
148
- () => new Promise((resolve) => {
149
- repository.findAll(value).then(result => {
150
- console.log(`[PEDIR-DB] ${modelo}: found ${result.length} items from DB`);
151
- resolve(result);
152
- });
153
- }), //Pedir
154
- () => new Promise(async (resolve) => {
155
- console.log(`[OBSERVAR-START] ${modelo}: checking Redis for nkey=${nkey.substring(0, 50)}`);
129
+ return ModelClass.build(parsed, { raw: false, isNewRecord: false });
130
+ })), (resultado) => {
131
+ return Promise.resolve(resultado.map((n) => JSON.stringify(n.get({ plain: true }))));
132
+ }, () => repository.findAll(value), () => new Promise(async (resolve) => {
156
133
  let e = await this.redis.hExists(nkey, peticion);
157
- console.log(`[OBSERVAR-EXISTS] ${modelo}: hExists result=${e}`);
158
134
  if (e) {
159
135
  let ids = await this.redis.hGet(nkey, peticion);
160
- console.log(`[OBSERVAR-IDS] ${modelo}: hGet returned=${ids ? ids.substring(0, 60) : 'NULL'}`);
161
136
  if (ids) {
162
137
  const idArray = JSON.parse(ids);
163
- console.log(`[OBSERVAR-IDS-PARSED] ${modelo}: parsed ${idArray.length} IDs=[${idArray.join(',')}]`);
164
- Promise.all(idArray.map(async (id, idx) => {
165
- const exists = await this.redis.hExists(pkey(id), 'item');
166
- console.log(`[OBSERVAR-EXISTS-${idx}] ${modelo}: id=${id}, hExists(pkey(id), 'item')=${exists}`);
167
- return exists;
168
- })).then((exists) => {
169
- console.log(`[OBSERVAR-EXISTS-ARRAY] ${modelo}: all checks done, exists=[${exists}], includes(false)=${exists.includes(false)}`);
138
+ Promise.all(idArray.map(async (id) => this.redis.hExists(pkey(id), 'item'))).then((exists) => {
170
139
  if (!exists.includes(false)) {
171
- console.log(`[OBSERVAR-ALL-EXIST] ${modelo}: all items exist, fetching from Redis`);
172
- Promise.all(idArray.map(async (id, idx) => {
173
- const item = await this.redis.hGet(pkey(id), 'item');
174
- console.log(`[OBSERVAR-HGET-${idx}] ${modelo}: id=${id}, hGet(pkey(id), 'item')=${item ? item.substring(0, 60) : 'NULL'}`);
175
- return item;
176
- })).then(items => {
177
- console.log(`[OBSERVAR-RESOLVE-ITEMS] ${modelo}: resolving ${items.length} items from Redis`);
178
- console.log(`[OBSERVAR-ITEMS-CONTENT] ${modelo}: [0]=${items[0] ? items[0].substring(0, 80) : 'NULL'}`);
179
- console.log(`[OBSERVAR-ITEMS-NULL-COUNT] ${modelo}: ${items.filter(i => i === null).length} NULL items out of ${items.length}`);
180
- resolve(items);
181
- });
140
+ Promise.all(idArray.map(async (id) => this.redis.hGet(pkey(id), 'item'))).then(resolve);
182
141
  }
183
- else {
184
- console.log(`[OBSERVAR-INCOMPLETE] ${modelo}: some items missing. exists.includes(false)=true, fallback to DB`);
142
+ else
185
143
  resolve(undefined);
186
- }
187
144
  });
188
145
  }
189
- else {
190
- console.log(`[OBSERVAR-NO-IDS] ${modelo}: hGet returned null, no IDs in Redis, fallback to DB`);
146
+ else
191
147
  resolve(undefined);
192
- }
193
148
  }
194
- else {
195
- console.log(`[OBSERVAR-NOT-EXISTS] ${modelo}: hExists returned false, nkey not in Redis, fallback to DB`);
149
+ else
196
150
  resolve(undefined);
197
- }
198
- }), //observar
199
- (__, resultado) => {
200
- // LEGACY PATTERN: Save individual items FIRST, then save IDs
201
- return Promise.all(resultado.map((n) => this.redis.hSet(pkey(n.id || n), 'item', JSON.stringify(n)))).then(() => this.redis.hSet(nkey, peticion, JSON.stringify(resultado.map((n) => n.id || n))));
151
+ }), (__, datos) => {
152
+ return Promise.all(datos.map((n) => {
153
+ const parsed = JSON.parse(n);
154
+ return this.redis.hSet(pkey(parsed.id), 'item', n);
155
+ })).then(() => this.redis.hSet(nkey, peticion, JSON.stringify(datos.map((n) => JSON.parse(n).id))));
202
156
  });
203
- await (0, paginar_1.paginar)(this.cacheManager, key.IdEmpresa, pagina, modelo, resultado.map((n) => n.get({ plain: true })));
157
+ await (0, paginar_1.paginar)(this.cacheManager, key.IdEmpresa, pagina, modelo, resultado.map((n) => JSON.stringify(n.get({ plain: true }))));
204
158
  // if (isDev)
205
159
  // console.log(
206
160
  // // moment().diff(moment(tiempo), 'milliseconds', true),
207
161
  // 'paginacion',
208
162
  // cache,
209
163
  // );
210
- console.log(`[BUSCAR-TODOS-RESULT] modelo=${modelo} items=${resultado.length} cache=${cache}`);
211
164
  resolve(resultado ? resultado : []);
212
165
  }
213
166
  catch (err) {
@@ -237,7 +190,6 @@ function BaseService(modelo) {
237
190
  `${key.universo ? key.universo : 'pro'}:${IdEmpresa}:pre${modelo}`,
238
191
  `${key.universo ? key.universo : 'pro'}:${IdEmpresa}:arbol:${modelo}`,
239
192
  ];
240
- console.log(`Keys a eliminar::::`, keys);
241
193
  await this.eliminarCache(keys, borrarSSR);
242
194
  // imprimir(`${modelo} ${item.id} crear`)
243
195
  // let key$ : string = transformarKey({
@@ -289,10 +241,7 @@ function BaseService(modelo) {
289
241
  ...key,
290
242
  include,
291
243
  where: stringifWhere(where),
292
- }), (cache) => Promise.resolve(JSON.parse(cache)), //Revisar
293
- (resultado) => Promise.resolve(JSON.stringify(resultado)), //transformar
294
- () => repository.count({ ...value, distinct: false }), //Pedir
295
- () => new Promise(async (resolve) => {
244
+ }), (cache) => Promise.resolve(JSON.parse(cache)), (resultado) => Promise.resolve(JSON.stringify(resultado)), () => repository.count({ ...value, distinct: false }), () => new Promise(async (resolve) => {
296
245
  let e = await this.redis.hExists(nkey, peticion);
297
246
  if (e) {
298
247
  let item = await this.redis.hGet(nkey, peticion);
@@ -306,9 +255,8 @@ function BaseService(modelo) {
306
255
  else {
307
256
  resolve(undefined);
308
257
  }
309
- }), //observar
310
- (__, resultado) => {
311
- return this.redis.hSet(nkey, peticion, resultado);
258
+ }), (__, datos) => {
259
+ return this.redis.hSet(nkey, peticion, datos);
312
260
  });
313
261
  // let key$ : string = transformarKey({ nombre : 'contar', ...key, include, where : stringifWhere(where) })
314
262
  // const cache = await this.cacheManager.get(key$)
@@ -1,4 +1,14 @@
1
- export declare const cachear: (cacheable: boolean, cacheManager: any, key: string, revisar: (x: any) => Promise<any>, transformar: (x: any) => Promise<any>, pedir: () => Promise<any>, observar?: (x: any) => Promise<any>, actualizar?: (x: any, datos: any) => Promise<any>) => Promise<{
2
- resultado: any;
1
+ /**
2
+ * Cache orchestration with two generic types:
3
+ *
4
+ * TResult = the "live" type (Sequelize instance, number, etc.)
5
+ * TCache = the "serialized" type (string, string[], etc.)
6
+ *
7
+ * Symmetry:
8
+ * TOWARD Redis: TResult → transformar → TCache → actualizar → Redis
9
+ * FROM Redis: Redis → observar → TCache → revisar → TResult
10
+ */
11
+ export declare function cachear<TResult, TCache>(cacheable: boolean, cacheManager: any, key: string, revisar: (cache: TCache) => Promise<TResult>, transformar: (resultado: TResult) => Promise<TCache>, pedir: () => Promise<TResult>, observar?: (key: string) => Promise<TCache | undefined>, actualizar?: (key: string, datos: TCache) => Promise<any>): Promise<{
12
+ resultado: TResult;
3
13
  cache: boolean;
4
14
  }>;
@@ -1,24 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cachear = void 0;
3
+ exports.cachear = cachear;
4
4
  const lodash_1 = require("lodash");
5
- // const chalk = require('chalk');
6
- // const log = console.log;
7
- // var imprimir = (texto) => log(chalk.blue(texto));
8
5
  var tiempo = 86400000;
9
- const cachear = (cacheable, cacheManager, key, revisar, transformar, pedir, observar = (key) => cacheManager.get(key), actualizar = (key, datos) => cacheManager.set(key, datos, 'EX', tiempo)) => {
6
+ /**
7
+ * Cache orchestration with two generic types:
8
+ *
9
+ * TResult = the "live" type (Sequelize instance, number, etc.)
10
+ * TCache = the "serialized" type (string, string[], etc.)
11
+ *
12
+ * Symmetry:
13
+ * TOWARD Redis: TResult → transformar → TCache → actualizar → Redis
14
+ * FROM Redis: Redis → observar → TCache → revisar → TResult
15
+ */
16
+ function cachear(cacheable, cacheManager, key, revisar, transformar, pedir, observar = (key) => cacheManager.get(key), actualizar = (key, datos) => cacheManager.set(key, datos, 'EX', tiempo)) {
10
17
  return new Promise(async (resolve) => {
11
18
  try {
12
19
  const cache = await observar(key);
13
20
  let resultado;
14
- // console.log({ cache, cacheable })
15
21
  if (!(0, lodash_1.isUndefined)(cache) && ((0, lodash_1.isUndefined)(cacheable) || cacheable)) {
16
22
  resultado = await revisar(cache);
17
23
  resolve({ cache: true, resultado });
18
24
  return;
19
25
  }
20
26
  resultado = await pedir();
21
- // console.log({resultado})
22
27
  let datos = await transformar(resultado);
23
28
  await actualizar(key, datos);
24
29
  resolve({ cache: false, resultado });
@@ -26,7 +31,7 @@ const cachear = (cacheable, cacheManager, key, revisar, transformar, pedir, obse
26
31
  }
27
32
  catch (err) {
28
33
  console.log({ key, err });
34
+ resolve(null);
29
35
  }
30
36
  });
31
- };
32
- exports.cachear = cachear;
37
+ }
@@ -1,11 +0,0 @@
1
- /**
2
- * Adapters - Agnóstico de BD
3
- *
4
- * Patrón: Cada BD tiene su carpeta con adapters específicos
5
- * - sequelize/ → Adapters para Sequelize ORM
6
- * - drizzle/ → Adapters para Drizzle (futuro)
7
- * - prisma/ → Adapters para Prisma (futuro)
8
- *
9
- * Cada adapter transforma PropertyDTO/RelationDTO → BD-specific config
10
- */
11
- export * from './sequelize';
package/adapters/index.js DELETED
@@ -1,27 +0,0 @@
1
- "use strict";
2
- /**
3
- * Adapters - Agnóstico de BD
4
- *
5
- * Patrón: Cada BD tiene su carpeta con adapters específicos
6
- * - sequelize/ → Adapters para Sequelize ORM
7
- * - drizzle/ → Adapters para Drizzle (futuro)
8
- * - prisma/ → Adapters para Prisma (futuro)
9
- *
10
- * Cada adapter transforma PropertyDTO/RelationDTO → BD-specific config
11
- */
12
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- var desc = Object.getOwnPropertyDescriptor(m, k);
15
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
- desc = { enumerable: true, get: function() { return m[k]; } };
17
- }
18
- Object.defineProperty(o, k2, desc);
19
- }) : (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- o[k2] = m[k];
22
- }));
23
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
24
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
25
- };
26
- Object.defineProperty(exports, "__esModule", { value: true });
27
- __exportStar(require("./sequelize"), exports);
@@ -1,5 +0,0 @@
1
- /**
2
- * Sequelize Adapters
3
- * Agnósticos de BD, específicos para Sequelize
4
- */
5
- export { PropertyAdapter, type PropertyDTO, type SequelizeColumnConfig } from './property.adapter';
@@ -1,9 +0,0 @@
1
- "use strict";
2
- /**
3
- * Sequelize Adapters
4
- * Agnósticos de BD, específicos para Sequelize
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.PropertyAdapter = void 0;
8
- var property_adapter_1 = require("./property.adapter");
9
- Object.defineProperty(exports, "PropertyAdapter", { enumerable: true, get: function () { return property_adapter_1.PropertyAdapter; } });
@@ -1,79 +0,0 @@
1
- /**
2
- * PropertyAdapter para Sequelize
3
- * Maneja tipado de propiedades agnósticamente
4
- *
5
- * RESPUESTA BAJO:
6
- * - Convertir PropertyDTO → ColumnConfig (Sequelize)
7
- * - Convertir PropertyDTO → TypeScriptType
8
- * - Manejar types especiales (JSON, ENUM, ARRAY)
9
- *
10
- * @example
11
- * const prop = { name: 'email', type: 'STRING', nullable: true }
12
- * const column = PropertyAdapter.column(prop)
13
- * // Returns: "@Column({ type: DataType.STRING, allowNull: true, field: 'email' })"
14
- */
15
- /**
16
- * DTO que recibe el adapter (estructura de API)
17
- */
18
- export interface PropertyDTO {
19
- name: string;
20
- type: 'STRING' | 'INTEGER' | 'FLOAT' | 'DECIMAL' | 'DATE' | 'BOOLEAN' | 'JSON' | 'TEXT' | 'ENUM' | 'ARRAY';
21
- nullable?: boolean;
22
- primaryKey?: boolean;
23
- autoIncrement?: boolean;
24
- unique?: boolean;
25
- defaultValue?: string | number | boolean;
26
- enumValues?: string[];
27
- decimals?: number;
28
- precision?: number;
29
- length?: number;
30
- }
31
- /**
32
- * Config que devuelve el adapter (para usar en template)
33
- */
34
- export interface SequelizeColumnConfig {
35
- decorator: string;
36
- tsType: string;
37
- tsFieldType: string;
38
- }
39
- /**
40
- * PropertyAdapter - Transforma PropertyDTO → SequelizeColumnConfig
41
- */
42
- export declare class PropertyAdapter {
43
- /**
44
- * Convierte tipo de dato API → DataType de Sequelize (string)
45
- * @example 'STRING' → 'DataType.STRING'
46
- */
47
- private static mapToSequelizeType;
48
- /**
49
- * Convierte tipo de dato API → Tipo TypeScript
50
- * @example 'STRING' → 'string', 'INTEGER' → 'number'
51
- */
52
- private static mapToTypeScriptType;
53
- /**
54
- * Genera el decorador @Column con todas las opciones
55
- */
56
- private static generateColumnDecorator;
57
- /**
58
- * Método principal: Convierte PropertyDTO → SequelizeColumnConfig
59
- * Esto es lo que usan los templates
60
- */
61
- static column(prop: PropertyDTO): SequelizeColumnConfig;
62
- /**
63
- * Getter para solo el decorador (para templates simples)
64
- */
65
- static getDecorator(prop: PropertyDTO): string;
66
- /**
67
- * Getter para solo el tipo TypeScript
68
- */
69
- static getTsType(prop: PropertyDTO): string;
70
- /**
71
- * Getter para solo el tipo TypeScript con ?
72
- */
73
- static getTsFieldType(prop: PropertyDTO): string;
74
- }
75
- /**
76
- * Export default para facilitar uso en templates
77
- * @example <%= adapter.column(property) %>
78
- */
79
- export default PropertyAdapter;
@@ -1,134 +0,0 @@
1
- "use strict";
2
- /**
3
- * PropertyAdapter para Sequelize
4
- * Maneja tipado de propiedades agnósticamente
5
- *
6
- * RESPUESTA BAJO:
7
- * - Convertir PropertyDTO → ColumnConfig (Sequelize)
8
- * - Convertir PropertyDTO → TypeScriptType
9
- * - Manejar types especiales (JSON, ENUM, ARRAY)
10
- *
11
- * @example
12
- * const prop = { name: 'email', type: 'STRING', nullable: true }
13
- * const column = PropertyAdapter.column(prop)
14
- * // Returns: "@Column({ type: DataType.STRING, allowNull: true, field: 'email' })"
15
- */
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.PropertyAdapter = void 0;
18
- /**
19
- * PropertyAdapter - Transforma PropertyDTO → SequelizeColumnConfig
20
- */
21
- class PropertyAdapter {
22
- /**
23
- * Convierte tipo de dato API → DataType de Sequelize (string)
24
- * @example 'STRING' → 'DataType.STRING'
25
- */
26
- static mapToSequelizeType(type, prop) {
27
- const typeMap = {
28
- STRING: 'DataType.STRING',
29
- INTEGER: 'DataType.INTEGER',
30
- FLOAT: 'DataType.FLOAT',
31
- DECIMAL: `DataType.DECIMAL(${prop.precision || 10}, ${prop.decimals || 2})`,
32
- DATE: 'DataType.DATE',
33
- BOOLEAN: 'DataType.BOOLEAN',
34
- JSON: 'DataType.JSON',
35
- TEXT: 'DataType.TEXT',
36
- ENUM: `DataType.ENUM(${prop.enumValues?.map((e) => `'${e}'`).join(', ') || ''})`,
37
- ARRAY: 'DataType.ARRAY(DataType.STRING)', // Default array de strings
38
- };
39
- return typeMap[type] || 'DataType.STRING';
40
- }
41
- /**
42
- * Convierte tipo de dato API → Tipo TypeScript
43
- * @example 'STRING' → 'string', 'INTEGER' → 'number'
44
- */
45
- static mapToTypeScriptType(type) {
46
- const typeMap = {
47
- STRING: 'string',
48
- INTEGER: 'number',
49
- FLOAT: 'number',
50
- DECIMAL: 'number',
51
- DATE: 'Date',
52
- BOOLEAN: 'boolean',
53
- JSON: 'any',
54
- TEXT: 'string',
55
- ENUM: 'string',
56
- ARRAY: 'string[]',
57
- };
58
- return typeMap[type] || 'string';
59
- }
60
- /**
61
- * Genera el decorador @Column con todas las opciones
62
- */
63
- static generateColumnDecorator(prop, sequelizeType) {
64
- const options = [`type: ${sequelizeType}`];
65
- // Field mapping (si es distinto al nombre)
66
- options.push(`field: '${prop.name}'`);
67
- // Nullable
68
- if (prop.nullable) {
69
- options.push('allowNull: true');
70
- }
71
- else {
72
- options.push('allowNull: false');
73
- }
74
- // Primary key
75
- if (prop.primaryKey) {
76
- options.push('primaryKey: true');
77
- }
78
- // Auto increment
79
- if (prop.autoIncrement) {
80
- options.push('autoIncrement: true');
81
- }
82
- // Unique
83
- if (prop.unique) {
84
- options.push('unique: true');
85
- }
86
- // Default value
87
- if (prop.defaultValue !== undefined && prop.defaultValue !== null) {
88
- const defaultValue = typeof prop.defaultValue === 'string' ? `'${prop.defaultValue}'` : prop.defaultValue;
89
- options.push(`defaultValue: ${defaultValue}`);
90
- }
91
- return `@Column({ ${options.join(', ')} })`;
92
- }
93
- /**
94
- * Método principal: Convierte PropertyDTO → SequelizeColumnConfig
95
- * Esto es lo que usan los templates
96
- */
97
- static column(prop) {
98
- const sequelizeType = this.mapToSequelizeType(prop.type, prop);
99
- const tsType = this.mapToTypeScriptType(prop.type);
100
- // Campo TypeScript con ? si es nullable
101
- const tsFieldType = prop.nullable ? `${tsType}?` : tsType;
102
- return {
103
- decorator: this.generateColumnDecorator(prop, sequelizeType),
104
- tsType,
105
- tsFieldType,
106
- };
107
- }
108
- /**
109
- * Getter para solo el decorador (para templates simples)
110
- */
111
- static getDecorator(prop) {
112
- const sequelizeType = this.mapToSequelizeType(prop.type, prop);
113
- return this.generateColumnDecorator(prop, sequelizeType);
114
- }
115
- /**
116
- * Getter para solo el tipo TypeScript
117
- */
118
- static getTsType(prop) {
119
- return this.mapToTypeScriptType(prop.type);
120
- }
121
- /**
122
- * Getter para solo el tipo TypeScript con ?
123
- */
124
- static getTsFieldType(prop) {
125
- const tsType = this.mapToTypeScriptType(prop.type);
126
- return prop.nullable ? `${tsType}?` : tsType;
127
- }
128
- }
129
- exports.PropertyAdapter = PropertyAdapter;
130
- /**
131
- * Export default para facilitar uso en templates
132
- * @example <%= adapter.column(property) %>
133
- */
134
- exports.default = PropertyAdapter;
@@ -1,9 +0,0 @@
1
- export * from './baseService';
2
- export * from './baseResolver';
3
- export * from './baseController';
4
- export * from './utils/paginar';
5
- export * from './utils/keyInterface';
6
- export * from './utils/cifrado';
7
- export * from './utils/cachear';
8
- export * from './utils/activarRedis';
9
- export * from '../types';
@@ -1,26 +0,0 @@
1
- "use strict";
2
- // src/index.ts
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
- };
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- __exportStar(require("./baseService"), exports);
19
- __exportStar(require("./baseResolver"), exports);
20
- __exportStar(require("./baseController"), exports);
21
- __exportStar(require("./utils/paginar"), exports);
22
- __exportStar(require("./utils/keyInterface"), exports);
23
- __exportStar(require("./utils/cifrado"), exports);
24
- __exportStar(require("./utils/cachear"), exports);
25
- __exportStar(require("./utils/activarRedis"), exports);
26
- __exportStar(require("../types"), exports);
package/receptor.d.ts DELETED
@@ -1,25 +0,0 @@
1
- import { HttpService } from '@nestjs/axios';
2
- import { Conexion, ConexionProps } from './conexion';
3
- export interface ReceptorConfig {
4
- globalUrl: string;
5
- }
6
- export declare class ReceptorService {
7
- private cacheManager;
8
- readonly request: any;
9
- private httpService;
10
- private readonly config?;
11
- conexiones: {
12
- [key: string]: ConexionProps;
13
- };
14
- conexionesActivas: {
15
- [key: string]: Conexion;
16
- };
17
- constructor(cacheManager: any, request: any, httpService: HttpService, config?: ReceptorConfig);
18
- hola(): void;
19
- private get globalUrl();
20
- buscarConexiones(): Promise<any>;
21
- buscarEmpresa(): Promise<any>;
22
- buscar({ req }: {
23
- req: any;
24
- }, conexion: typeof Conexion, host_?: string): Promise<Conexion>;
25
- }