@manticore-labs/nest 0.0.73 → 0.0.74

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 (236) hide show
  1. package/.circleci/config.yml +47 -47
  2. package/.idea/codeStyles/Project.xml +37 -37
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/encodings.xml +3 -3
  5. package/.idea/inspectionProfiles/Project_Default.xml +5 -5
  6. package/.idea/manticore-labs-nest.iml +11 -11
  7. package/.idea/misc.xml +5 -5
  8. package/.idea/modules.xml +7 -7
  9. package/.idea/vcs.xml +5 -5
  10. package/.idea/workspace.xml +433 -77
  11. package/LICENSE +8 -8
  12. package/README.1.md +116 -116
  13. package/README.md +1 -1
  14. package/build/main/index.d.ts +42 -42
  15. package/build/main/index.js +25 -25
  16. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  17. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +24 -24
  18. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  19. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +24 -24
  20. package/build/main/lib/auth0/auth0.controller.d.ts +40 -40
  21. package/build/main/lib/auth0/auth0.controller.js +537 -537
  22. package/build/main/lib/auth0/auth0.service.d.ts +69 -69
  23. package/build/main/lib/auth0/auth0.service.js +604 -604
  24. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  25. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +25 -25
  26. package/build/main/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  27. package/build/main/lib/auth0/interfaces/busqueda-nombre.js +2 -2
  28. package/build/main/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  29. package/build/main/lib/auth0/interfaces/funciones-seguridad.js +2 -2
  30. package/build/main/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  31. package/build/main/lib/auth0/interfaces/mensajes-controlador.js +2 -2
  32. package/build/main/lib/auth0/seguridad-jwt-moviles/check-jwt.d.ts +2 -2
  33. package/build/main/lib/auth0/seguridad-jwt-moviles/check-jwt.js +7 -7
  34. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  35. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.js +3 -3
  36. package/build/main/lib/funciones-util/buscar-registro.d.ts +1 -1
  37. package/build/main/lib/funciones-util/buscar-registro.js +491 -491
  38. package/build/main/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  39. package/build/main/lib/funciones-util/buscar-un-registro-por-id.js +25 -25
  40. package/build/main/lib/funciones-util/buscar-where-or.d.ts +1 -1
  41. package/build/main/lib/funciones-util/buscar-where-or.js +33 -33
  42. package/build/main/lib/funciones-util/contar-registros.d.ts +1 -1
  43. package/build/main/lib/funciones-util/contar-registros.js +41 -41
  44. package/build/main/lib/funciones-util/crear-un-registro.d.ts +1 -1
  45. package/build/main/lib/funciones-util/crear-un-registro.js +24 -24
  46. package/build/main/lib/funciones-util/editar-un-registro.d.ts +1 -1
  47. package/build/main/lib/funciones-util/editar-un-registro.js +24 -24
  48. package/build/main/lib/funciones-util/eliminar-uno.d.ts +1 -1
  49. package/build/main/lib/funciones-util/eliminar-uno.js +35 -35
  50. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  51. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +21 -21
  52. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  53. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.js +2 -2
  54. package/build/main/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  55. package/build/main/lib/interfaces-util/broadcast-join.gateway.js +2 -2
  56. package/build/main/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  57. package/build/main/lib/interfaces-util/campos-a-buscar.js +9 -9
  58. package/build/main/lib/interfaces-util/delete-service.d.ts +12 -12
  59. package/build/main/lib/interfaces-util/delete-service.js +2 -2
  60. package/build/main/lib/interfaces-util/dto.d.ts +4 -4
  61. package/build/main/lib/interfaces-util/dto.js +2 -2
  62. package/build/main/lib/interfaces-util/find-where-relations.d.ts +9 -9
  63. package/build/main/lib/interfaces-util/find-where-relations.js +2 -2
  64. package/build/main/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  65. package/build/main/lib/interfaces-util/funciones-seguridad.js +2 -2
  66. package/build/main/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  67. package/build/main/lib/interfaces-util/funciones.gateway.js +2 -2
  68. package/build/main/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  69. package/build/main/lib/interfaces-util/mensajes-controller.js +2 -2
  70. package/build/main/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  71. package/build/main/lib/interfaces-util/politicas-de-seguridad.js +2 -2
  72. package/build/main/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  73. package/build/main/lib/interfaces-util/respuesta-general.gateway.js +2 -2
  74. package/build/main/lib/menu/entities/menu-entity.d.ts +13 -13
  75. package/build/main/lib/menu/entities/menu-entity.js +93 -93
  76. package/build/main/lib/one-signal/interfaces/funciones-seguridad.d.ts +10 -9
  77. package/build/main/lib/one-signal/interfaces/funciones-seguridad.js +2 -2
  78. package/build/main/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  79. package/build/main/lib/one-signal/interfaces/one-signal-device.js +2 -2
  80. package/build/main/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  81. package/build/main/lib/one-signal/interfaces/one-signal-notification.js +2 -2
  82. package/build/main/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  83. package/build/main/lib/one-signal/interfaces/one-signal-notifications.js +2 -2
  84. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  85. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.js +2 -2
  86. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  87. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.js +2 -2
  88. package/build/main/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  89. package/build/main/lib/one-signal/interfaces/one-signal-success.js +2 -2
  90. package/build/main/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  91. package/build/main/lib/one-signal/interfaces/one-signal-tags.js +2 -2
  92. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  93. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.js +2 -2
  94. package/build/main/lib/one-signal/one-signal.controller.d.ts +16 -15
  95. package/build/main/lib/one-signal/one-signal.controller.js +289 -251
  96. package/build/main/lib/one-signal/one-signal.service.d.ts +34 -32
  97. package/build/main/lib/one-signal/one-signal.service.js +93 -85
  98. package/build/main/lib/politicas/revisar-si-tiene-nombre-permiso.d.ts +1 -1
  99. package/build/main/lib/politicas/revisar-si-tiene-nombre-permiso.js +9 -9
  100. package/build/main/lib/politicas/revisar-si-tiene-rol.d.ts +1 -1
  101. package/build/main/lib/politicas/revisar-si-tiene-rol.js +9 -9
  102. package/build/main/lib/principal.controller.d.ts +20 -20
  103. package/build/main/lib/principal.controller.js +309 -309
  104. package/build/main/lib/principal.dto.d.ts +5 -5
  105. package/build/main/lib/principal.dto.js +21 -21
  106. package/build/main/lib/principal.entity.d.ts +7 -7
  107. package/build/main/lib/principal.entity.js +42 -42
  108. package/build/main/lib/principal.find-many-options.d.ts +14 -14
  109. package/build/main/lib/principal.find-many-options.js +48 -48
  110. package/build/main/lib/principal.find-many-where-or.d.ts +10 -10
  111. package/build/main/lib/principal.find-many-where-or.js +28 -28
  112. package/build/main/lib/principal.gateway.d.ts +35 -35
  113. package/build/main/lib/principal.gateway.js +399 -399
  114. package/build/main/lib/principal.id.d.ts +3 -3
  115. package/build/main/lib/principal.id.js +16 -16
  116. package/build/main/lib/principal.resolver.d.ts +21 -21
  117. package/build/main/lib/principal.resolver.js +343 -343
  118. package/build/main/lib/principal.service.d.ts +38 -38
  119. package/build/main/lib/principal.service.js +260 -260
  120. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  121. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.js +16 -16
  122. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  123. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +30 -30
  124. package/build/main/lib/seguridad/funciones/index.d.ts +6 -6
  125. package/build/main/lib/seguridad/funciones/index.js +12 -12
  126. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  127. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.js +6 -6
  128. package/build/main/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  129. package/build/main/lib/seguridad/funciones/obtener-request.js +6 -6
  130. package/build/main/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  131. package/build/main/lib/seguridad/funciones/obtener-response.js +6 -6
  132. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  133. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.js +13 -13
  134. package/build/main/lib/seguridad/seguridad.decorator.d.ts +1 -1
  135. package/build/main/lib/seguridad/seguridad.decorator.js +4 -4
  136. package/build/module/index.d.ts +42 -42
  137. package/build/module/index.js +20 -20
  138. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  139. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +21 -21
  140. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  141. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +21 -21
  142. package/build/module/lib/auth0/auth0.controller.d.ts +40 -40
  143. package/build/module/lib/auth0/auth0.controller.js +535 -535
  144. package/build/module/lib/auth0/auth0.service.d.ts +69 -69
  145. package/build/module/lib/auth0/auth0.service.js +603 -603
  146. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  147. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +22 -22
  148. package/build/module/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  149. package/build/module/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  150. package/build/module/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  151. package/build/module/lib/auth0/seguridad-jwt-moviles/check-jwt.d.ts +2 -2
  152. package/build/module/lib/auth0/seguridad-jwt-moviles/check-jwt.js +4 -4
  153. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  154. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.js +1 -1
  155. package/build/module/lib/funciones-util/buscar-registro.d.ts +1 -1
  156. package/build/module/lib/funciones-util/buscar-registro.js +488 -488
  157. package/build/module/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  158. package/build/module/lib/funciones-util/buscar-un-registro-por-id.js +22 -22
  159. package/build/module/lib/funciones-util/buscar-where-or.d.ts +1 -1
  160. package/build/module/lib/funciones-util/buscar-where-or.js +30 -30
  161. package/build/module/lib/funciones-util/contar-registros.d.ts +1 -1
  162. package/build/module/lib/funciones-util/contar-registros.js +38 -38
  163. package/build/module/lib/funciones-util/crear-un-registro.d.ts +1 -1
  164. package/build/module/lib/funciones-util/crear-un-registro.js +21 -21
  165. package/build/module/lib/funciones-util/editar-un-registro.d.ts +1 -1
  166. package/build/module/lib/funciones-util/editar-un-registro.js +21 -21
  167. package/build/module/lib/funciones-util/eliminar-uno.d.ts +1 -1
  168. package/build/module/lib/funciones-util/eliminar-uno.js +32 -32
  169. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  170. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +18 -18
  171. package/build/module/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  172. package/build/module/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  173. package/build/module/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  174. package/build/module/lib/interfaces-util/campos-a-buscar.js +6 -6
  175. package/build/module/lib/interfaces-util/delete-service.d.ts +12 -12
  176. package/build/module/lib/interfaces-util/dto.d.ts +4 -4
  177. package/build/module/lib/interfaces-util/find-where-relations.d.ts +9 -9
  178. package/build/module/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  179. package/build/module/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  180. package/build/module/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  181. package/build/module/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  182. package/build/module/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  183. package/build/module/lib/menu/entities/menu-entity.d.ts +13 -13
  184. package/build/module/lib/menu/entities/menu-entity.js +90 -90
  185. package/build/module/lib/one-signal/interfaces/funciones-seguridad.d.ts +10 -9
  186. package/build/module/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  187. package/build/module/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  188. package/build/module/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  189. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  190. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  191. package/build/module/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  192. package/build/module/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  193. package/build/module/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  194. package/build/module/lib/one-signal/one-signal.controller.d.ts +16 -15
  195. package/build/module/lib/one-signal/one-signal.controller.js +287 -249
  196. package/build/module/lib/one-signal/one-signal.service.d.ts +34 -32
  197. package/build/module/lib/one-signal/one-signal.service.js +94 -83
  198. package/build/module/lib/politicas/revisar-si-tiene-nombre-permiso.d.ts +1 -1
  199. package/build/module/lib/politicas/revisar-si-tiene-nombre-permiso.js +6 -6
  200. package/build/module/lib/politicas/revisar-si-tiene-rol.d.ts +1 -1
  201. package/build/module/lib/politicas/revisar-si-tiene-rol.js +6 -6
  202. package/build/module/lib/principal.controller.d.ts +20 -20
  203. package/build/module/lib/principal.controller.js +306 -306
  204. package/build/module/lib/principal.dto.d.ts +5 -5
  205. package/build/module/lib/principal.dto.js +18 -18
  206. package/build/module/lib/principal.entity.d.ts +7 -7
  207. package/build/module/lib/principal.entity.js +39 -39
  208. package/build/module/lib/principal.find-many-options.d.ts +14 -14
  209. package/build/module/lib/principal.find-many-options.js +45 -45
  210. package/build/module/lib/principal.find-many-where-or.d.ts +10 -10
  211. package/build/module/lib/principal.find-many-where-or.js +25 -25
  212. package/build/module/lib/principal.gateway.d.ts +35 -35
  213. package/build/module/lib/principal.gateway.js +396 -396
  214. package/build/module/lib/principal.id.d.ts +3 -3
  215. package/build/module/lib/principal.id.js +13 -13
  216. package/build/module/lib/principal.resolver.d.ts +21 -21
  217. package/build/module/lib/principal.resolver.js +340 -340
  218. package/build/module/lib/principal.service.d.ts +38 -38
  219. package/build/module/lib/principal.service.js +257 -257
  220. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  221. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.js +13 -13
  222. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  223. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +27 -27
  224. package/build/module/lib/seguridad/funciones/index.d.ts +6 -6
  225. package/build/module/lib/seguridad/funciones/index.js +6 -6
  226. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  227. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.js +3 -3
  228. package/build/module/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  229. package/build/module/lib/seguridad/funciones/obtener-request.js +3 -3
  230. package/build/module/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  231. package/build/module/lib/seguridad/funciones/obtener-response.js +3 -3
  232. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  233. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.js +10 -10
  234. package/build/module/lib/seguridad/seguridad.decorator.d.ts +1 -1
  235. package/build/module/lib/seguridad/seguridad.decorator.js +2 -2
  236. package/package.json +117 -117
@@ -1,492 +1,492 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const class_validator_1 = require("class-validator");
4
- const class_transformer_1 = require("class-transformer");
5
- const typeorm_1 = require("typeorm");
6
- async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions, skip, take, servicio) {
7
- let existeErrorEnConvertirAJSON = false;
8
- const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
9
- if (criterioBusquedaNoEsUnObjeto) {
10
- try {
11
- criterioBusqueda = JSON.parse(criterioBusqueda);
12
- }
13
- catch (e) {
14
- existeErrorEnConvertirAJSON = true;
15
- }
16
- }
17
- if (existeErrorEnConvertirAJSON) {
18
- console.error('Error: Formateando JSON, se busca con parametros default');
19
- const criterioBusquedaPorDefecto = {
20
- skip: skip,
21
- take: take
22
- };
23
- criterioBusqueda = criterioBusquedaPorDefecto;
24
- return servicio.find(criterioBusqueda);
25
- }
26
- else {
27
- const criterioBusquedaClase = class_transformer_1.plainToClass(PrincipalFindManyOptions, criterioBusqueda);
28
- const errors = await class_validator_1.validate(criterioBusquedaClase);
29
- const busquedaClasetieneAlMenosUnError = errors.length > 0;
30
- if (busquedaClasetieneAlMenosUnError) {
31
- console.error('Error: Error en criterios de busqueda, se busca con parametros default', errors);
32
- criterioBusqueda = {
33
- skip: skip,
34
- take: take
35
- };
36
- return servicio.find(criterioBusqueda);
37
- }
38
- else {
39
- if (criterioBusquedaClase.where) {
40
- if (Array.isArray(criterioBusquedaClase.where)) {
41
- criterioBusquedaClase
42
- .where
43
- .forEach((busqueda, indice) => {
44
- Object
45
- .keys(busqueda)
46
- .forEach((campo) => {
47
- let noEncuentraOperador = true;
48
- let campoEsTexto = typeof criterioBusquedaClase.where[indice][campo] === 'string';
49
- if (noEncuentraOperador && campoEsTexto) {
50
- const expresionRegularNot = /Not\(".+"\)+/g;
51
- const contieneNot = criterioBusquedaClase.where[indice][campo].match(expresionRegularNot);
52
- if (contieneNot && noEncuentraOperador) {
53
- const sinNot = criterioBusquedaClase.where[indice][campo].replace('Not("', '').replace('")', '');
54
- if (noEncuentraOperador && campoEsTexto) {
55
- const expresionRegularLike = /Like\(".+"\)+/g;
56
- const contieneLike = sinNot.match(expresionRegularLike);
57
- if (contieneLike) {
58
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
59
- noEncuentraOperador = false;
60
- }
61
- }
62
- if (noEncuentraOperador && campoEsTexto) {
63
- const expresionRegularLessThan = /LessThan\(".+"\)+/g;
64
- const contieneLessThan = sinNot.match(expresionRegularLessThan);
65
- if (contieneLessThan) {
66
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
67
- noEncuentraOperador = false;
68
- }
69
- }
70
- if (noEncuentraOperador && campoEsTexto) {
71
- const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
72
- const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
73
- if (contieneMoreThan) {
74
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
75
- noEncuentraOperador = false;
76
- }
77
- }
78
- if (noEncuentraOperador && campoEsTexto) {
79
- const expresionRegularEqual = /Equal\(".+"\)+/g;
80
- const contieneEqual = sinNot.match(expresionRegularEqual);
81
- if (contieneEqual) {
82
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
83
- noEncuentraOperador = false;
84
- }
85
- }
86
- if (noEncuentraOperador && campoEsTexto) {
87
- const expresionRegularBetween = /Between\(".+"\)+/g;
88
- const contieneBetween = sinNot.match(expresionRegularBetween);
89
- if (contieneBetween) {
90
- const busqueda = [...sinNot
91
- .replace('Between("', '')
92
- .replace('")', '')
93
- .replace(' ', '')
94
- .split(',')
95
- .map((n) => isNaN(n) ? n : +n)];
96
- const esFecha = busqueda[0].length === 10 &&
97
- busqueda[0].length === 10 &&
98
- (typeof busqueda[0] === 'string') &&
99
- (typeof busqueda[1] === 'string') &&
100
- busqueda[0].match('-') &&
101
- busqueda[1].match('-');
102
- if (esFecha) {
103
- const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
104
- const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
105
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
106
- }
107
- else {
108
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
109
- }
110
- noEncuentraOperador = false;
111
- }
112
- }
113
- if (noEncuentraOperador && campoEsTexto) {
114
- const expresionRegularIn = /In\(.+\)+/g;
115
- const contieneIn = sinNot.match(expresionRegularIn);
116
- if (contieneIn) {
117
- let arreglo;
118
- try {
119
- arreglo = JSON.parse(sinNot
120
- .replace('In(', '')
121
- .replace('])', ']'));
122
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.In(arreglo));
123
- noEncuentraOperador = false;
124
- }
125
- catch (e) {
126
- console.log('Error formateando clausula IN');
127
- console.log(e);
128
- }
129
- }
130
- }
131
- if (noEncuentraOperador && campoEsTexto) {
132
- const expresionRegularAny = /Any\(.+\)+/g;
133
- const contieneAny = sinNot.match(expresionRegularAny);
134
- if (contieneAny) {
135
- let arreglo;
136
- try {
137
- arreglo = JSON.parse(sinNot
138
- .replace('Any(', '')
139
- .replace(')', ''));
140
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
141
- noEncuentraOperador = false;
142
- }
143
- catch (e) {
144
- console.log('Error formateando clausula ANY');
145
- console.log(e);
146
- }
147
- }
148
- }
149
- if (noEncuentraOperador && campoEsTexto) {
150
- const expresionRegularIsNull = /IsNull\(".+"\)+/g;
151
- const contieneIsNull = sinNot.match(expresionRegularIsNull);
152
- if (contieneIsNull) {
153
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.IsNull());
154
- noEncuentraOperador = false;
155
- }
156
- }
157
- }
158
- } // Fin de NOT
159
- if (noEncuentraOperador && campoEsTexto) {
160
- const expresionRegularLike = /Like\(".+"\)+/g;
161
- const contieneLike = criterioBusquedaClase.where[indice][campo].match(expresionRegularLike);
162
- if (contieneLike) {
163
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Like(criterioBusquedaClase.where[indice][campo].replace('Like("', '').replace('")', ''));
164
- noEncuentraOperador = false;
165
- }
166
- }
167
- if (noEncuentraOperador && campoEsTexto) {
168
- const expresionRegularLessThan = /LessThan\(".+"\)+/g;
169
- const contieneLessThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularLessThan);
170
- if (contieneLessThan) {
171
- criterioBusquedaClase.where[indice][campo] = typeorm_1.LessThan(criterioBusquedaClase.where[indice][campo].replace('LessThan("', '').replace('")', ''));
172
- noEncuentraOperador = false;
173
- }
174
- }
175
- if (noEncuentraOperador && campoEsTexto) {
176
- const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
177
- const contieneMoreThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularMoreThan);
178
- if (contieneMoreThan) {
179
- criterioBusquedaClase.where[indice][campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[indice][campo].replace('MoreThan("', '').replace('")', ''));
180
- noEncuentraOperador = false;
181
- }
182
- }
183
- if (noEncuentraOperador && campoEsTexto) {
184
- const expresionRegularEqual = /Equal\(".+"\)+/g;
185
- const contieneEqual = criterioBusquedaClase.where[indice][campo].match(expresionRegularEqual);
186
- if (contieneEqual) {
187
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Equal(criterioBusquedaClase.where[indice][campo].replace('Equal("', '').replace('")', ''));
188
- noEncuentraOperador = false;
189
- }
190
- }
191
- if (noEncuentraOperador && campoEsTexto) {
192
- const expresionRegularBetween = /Between\(".+"\)+/g;
193
- const contieneBetween = criterioBusquedaClase.where[indice][campo].match(expresionRegularBetween);
194
- if (contieneBetween) {
195
- const busqueda = [...criterioBusquedaClase.where[indice][campo]
196
- .replace('Between("', '')
197
- .replace('")', '')
198
- .replace(' ', '')
199
- .split(',')
200
- .map((n) => isNaN(n) ? n : +n)];
201
- const esFecha = busqueda[0].length === 10 &&
202
- busqueda[0].length === 10 &&
203
- (typeof busqueda[0] === 'string') &&
204
- (typeof busqueda[1] === 'string') &&
205
- busqueda[0].match('-') &&
206
- busqueda[1].match('-');
207
- if (esFecha) {
208
- const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
209
- const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
210
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(fechaInicio, fechaFin);
211
- }
212
- else {
213
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
214
- }
215
- noEncuentraOperador = false;
216
- }
217
- }
218
- if (noEncuentraOperador && campoEsTexto) {
219
- const expresionRegularIn = /In\(.+\)+/g;
220
- const contieneIn = criterioBusquedaClase.where[indice][campo].match(expresionRegularIn);
221
- if (contieneIn) {
222
- let arreglo;
223
- try {
224
- arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
225
- .replace('In(', '')
226
- .replace('])', ']'));
227
- criterioBusquedaClase.where[indice][campo] = typeorm_1.In(arreglo);
228
- noEncuentraOperador = false;
229
- }
230
- catch (e) {
231
- console.log(e);
232
- }
233
- }
234
- }
235
- if (noEncuentraOperador && campoEsTexto) {
236
- const expresionRegularAny = /Any\(.+\)+/g;
237
- const contieneAny = criterioBusquedaClase.where[indice][campo].match(expresionRegularAny);
238
- if (contieneAny) {
239
- let arreglo;
240
- try {
241
- arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
242
- .replace('Any(', '')
243
- .replace(')', ''));
244
- criterioBusquedaClase.where[indice][campo] = typeorm_1.Any(arreglo);
245
- noEncuentraOperador = false;
246
- }
247
- catch (e) {
248
- console.log(e);
249
- }
250
- }
251
- }
252
- if (noEncuentraOperador && campoEsTexto) {
253
- const expresionRegularIsNull = /IsNull\(".+"\)+/g;
254
- const contieneIsNull = criterioBusquedaClase.where[indice][campo].match(expresionRegularIsNull);
255
- if (contieneIsNull) {
256
- criterioBusquedaClase.where[indice][campo] = typeorm_1.IsNull();
257
- noEncuentraOperador = false;
258
- }
259
- }
260
- });
261
- });
262
- }
263
- else {
264
- Object
265
- .keys(criterioBusquedaClase.where)
266
- .forEach((campo) => {
267
- let noEncuentraOperador = true;
268
- let campoEsTexto = typeof criterioBusquedaClase.where[campo] === 'string';
269
- if (noEncuentraOperador && campoEsTexto) {
270
- const expresionRegularNot = /Not\(".+"\)+/g;
271
- const contieneNot = criterioBusquedaClase.where[campo].match(expresionRegularNot);
272
- if (contieneNot && noEncuentraOperador) {
273
- // criterioBusquedaClase.where[campo] = Not(
274
- // criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '')
275
- // );
276
- // noEncuentraOperador = false;
277
- const sinNot = criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '');
278
- if (noEncuentraOperador && campoEsTexto) {
279
- const expresionRegularLike = /Like\(".+"\)+/g;
280
- const contieneLike = sinNot.match(expresionRegularLike);
281
- if (contieneLike) {
282
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
283
- noEncuentraOperador = false;
284
- }
285
- }
286
- if (noEncuentraOperador && campoEsTexto) {
287
- const expresionRegularLessThan = /LessThan\(".+"\)+/g;
288
- const contieneLessThan = sinNot.match(expresionRegularLessThan);
289
- if (contieneLessThan) {
290
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
291
- noEncuentraOperador = false;
292
- }
293
- }
294
- if (noEncuentraOperador && campoEsTexto) {
295
- const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
296
- const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
297
- if (contieneMoreThan) {
298
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
299
- noEncuentraOperador = false;
300
- }
301
- }
302
- if (noEncuentraOperador && campoEsTexto) {
303
- const expresionRegularEqual = /Equal\(".+"\)+/g;
304
- const contieneEqual = sinNot.match(expresionRegularEqual);
305
- if (contieneEqual) {
306
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
307
- noEncuentraOperador = false;
308
- }
309
- }
310
- if (noEncuentraOperador && campoEsTexto) {
311
- const expresionRegularBetween = /Between\(".+"\)+/g;
312
- const contieneBetween = sinNot.match(expresionRegularBetween);
313
- if (contieneBetween) {
314
- const busqueda = [...sinNot
315
- .replace('Between("', '')
316
- .replace('")', '')
317
- .replace(' ', '')
318
- .split(',')
319
- .map((n) => isNaN(n) ? n : +n)];
320
- const esFecha = busqueda[0].length === 10 &&
321
- busqueda[0].length === 10 &&
322
- (typeof busqueda[0] === 'string') &&
323
- (typeof busqueda[1] === 'string') &&
324
- busqueda[0].match('-') &&
325
- busqueda[1].match('-');
326
- if (esFecha) {
327
- const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
328
- const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
329
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
330
- }
331
- else {
332
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
333
- }
334
- noEncuentraOperador = false;
335
- }
336
- }
337
- if (noEncuentraOperador && campoEsTexto) {
338
- const expresionRegularIn = /In\(.+\)+/g;
339
- const contieneIn = sinNot.match(expresionRegularIn);
340
- if (contieneIn) {
341
- let arreglo;
342
- try {
343
- arreglo = JSON.parse(sinNot
344
- .replace('In(', '')
345
- .replace('])', ']'));
346
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
347
- noEncuentraOperador = false;
348
- }
349
- catch (e) {
350
- console.log('Error formateando clausula IN');
351
- console.log(e);
352
- }
353
- }
354
- }
355
- if (noEncuentraOperador && campoEsTexto) {
356
- const expresionRegularAny = /Any\(.+\)+/g;
357
- const contieneAny = sinNot.match(expresionRegularAny);
358
- if (contieneAny) {
359
- let arreglo;
360
- try {
361
- arreglo = JSON.parse(sinNot
362
- .replace('Any(', '')
363
- .replace(')', ''));
364
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
365
- noEncuentraOperador = false;
366
- }
367
- catch (e) {
368
- console.log('Error formateando clausula ANY');
369
- console.log(e);
370
- }
371
- }
372
- }
373
- if (noEncuentraOperador && campoEsTexto) {
374
- const expresionRegularIsNull = /IsNull\(".+"\)+/g;
375
- const contieneIsNull = sinNot.match(expresionRegularIsNull);
376
- if (contieneIsNull) {
377
- criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.IsNull());
378
- noEncuentraOperador = false;
379
- }
380
- }
381
- }
382
- } // Fin de NOT
383
- if (noEncuentraOperador && campoEsTexto) {
384
- const expresionRegularLike = /Like\(".+"\)+/g;
385
- const contieneLike = criterioBusquedaClase.where[campo].match(expresionRegularLike);
386
- if (contieneLike) {
387
- criterioBusquedaClase.where[campo] = typeorm_1.Like(criterioBusquedaClase.where[campo].replace('Like("', '').replace('")', ''));
388
- noEncuentraOperador = false;
389
- }
390
- }
391
- if (noEncuentraOperador && campoEsTexto) {
392
- const expresionRegularLessThan = /LessThan\(".+"\)+/g;
393
- const contieneLessThan = criterioBusquedaClase.where[campo].match(expresionRegularLessThan);
394
- if (contieneLessThan) {
395
- criterioBusquedaClase.where[campo] = typeorm_1.LessThan(criterioBusquedaClase.where[campo].replace('LessThan("', '').replace('")', ''));
396
- noEncuentraOperador = false;
397
- }
398
- }
399
- if (noEncuentraOperador && campoEsTexto) {
400
- const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
401
- const contieneMoreThan = criterioBusquedaClase.where[campo].match(expresionRegularMoreThan);
402
- if (contieneMoreThan) {
403
- criterioBusquedaClase.where[campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[campo].replace('MoreThan("', '').replace('")', ''));
404
- noEncuentraOperador = false;
405
- }
406
- }
407
- if (noEncuentraOperador && campoEsTexto) {
408
- const expresionRegularEqual = /Equal\(".+"\)+/g;
409
- const contieneEqual = criterioBusquedaClase.where[campo].match(expresionRegularEqual);
410
- if (contieneEqual) {
411
- criterioBusquedaClase.where[campo] = typeorm_1.Equal(criterioBusquedaClase.where[campo].replace('Equal("', '').replace('")', ''));
412
- noEncuentraOperador = false;
413
- }
414
- }
415
- if (noEncuentraOperador && campoEsTexto) {
416
- const expresionRegularBetween = /Between\(".+"\)+/g;
417
- const contieneBetween = criterioBusquedaClase.where[campo].match(expresionRegularBetween);
418
- if (contieneBetween) {
419
- const busqueda = [...criterioBusquedaClase.where[campo]
420
- .replace('Between("', '')
421
- .replace('")', '')
422
- .replace(' ', '')
423
- .split(',')
424
- .map((n) => isNaN(n) ? n : +n)];
425
- const esFecha = busqueda[0].length === 10 &&
426
- busqueda[0].length === 10 &&
427
- (typeof busqueda[0] === 'string') &&
428
- (typeof busqueda[1] === 'string') &&
429
- busqueda[0].match('-') &&
430
- busqueda[1].match('-');
431
- if (esFecha) {
432
- const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
433
- const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
434
- criterioBusquedaClase.where[campo] = typeorm_1.Between(fechaInicio, fechaFin);
435
- }
436
- else {
437
- criterioBusquedaClase.where[campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
438
- }
439
- noEncuentraOperador = false;
440
- }
441
- }
442
- if (noEncuentraOperador && campoEsTexto) {
443
- const expresionRegularIn = /In\(.+\)+/g;
444
- const contieneIn = criterioBusquedaClase.where[campo].match(expresionRegularIn);
445
- if (contieneIn) {
446
- let arreglo;
447
- try {
448
- arreglo = JSON.parse(criterioBusquedaClase.where[campo]
449
- .replace('In(', '')
450
- .replace('])', ']'));
451
- criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
452
- noEncuentraOperador = false;
453
- }
454
- catch (e) {
455
- console.log(e);
456
- }
457
- }
458
- }
459
- if (noEncuentraOperador && campoEsTexto) {
460
- const expresionRegularAny = /Any\(.+\)+/g;
461
- const contieneAny = criterioBusquedaClase.where[campo].match(expresionRegularAny);
462
- if (contieneAny) {
463
- let arreglo;
464
- try {
465
- arreglo = JSON.parse(criterioBusquedaClase.where[campo]
466
- .replace('Any(', '')
467
- .replace(')', ''));
468
- criterioBusquedaClase.where[campo] = typeorm_1.Any(arreglo);
469
- noEncuentraOperador = false;
470
- }
471
- catch (e) {
472
- console.log(e);
473
- }
474
- }
475
- }
476
- if (noEncuentraOperador && campoEsTexto) {
477
- const expresionRegularIsNull = /IsNull\(".+"\)+/g;
478
- const contieneIsNull = criterioBusquedaClase.where[campo].match(expresionRegularIsNull);
479
- if (contieneIsNull) {
480
- criterioBusquedaClase.where[campo] = typeorm_1.IsNull();
481
- noEncuentraOperador = false;
482
- }
483
- }
484
- });
485
- }
486
- }
487
- return servicio.find(criterioBusquedaClase);
488
- }
489
- }
490
- }
491
- exports.buscarVariosRegistros = buscarVariosRegistros;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const class_validator_1 = require("class-validator");
4
+ const class_transformer_1 = require("class-transformer");
5
+ const typeorm_1 = require("typeorm");
6
+ async function buscarVariosRegistros(criterioBusqueda, PrincipalFindManyOptions, skip, take, servicio) {
7
+ let existeErrorEnConvertirAJSON = false;
8
+ const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
9
+ if (criterioBusquedaNoEsUnObjeto) {
10
+ try {
11
+ criterioBusqueda = JSON.parse(criterioBusqueda);
12
+ }
13
+ catch (e) {
14
+ existeErrorEnConvertirAJSON = true;
15
+ }
16
+ }
17
+ if (existeErrorEnConvertirAJSON) {
18
+ console.error('Error: Formateando JSON, se busca con parametros default');
19
+ const criterioBusquedaPorDefecto = {
20
+ skip: skip,
21
+ take: take
22
+ };
23
+ criterioBusqueda = criterioBusquedaPorDefecto;
24
+ return servicio.find(criterioBusqueda);
25
+ }
26
+ else {
27
+ const criterioBusquedaClase = class_transformer_1.plainToClass(PrincipalFindManyOptions, criterioBusqueda);
28
+ const errors = await class_validator_1.validate(criterioBusquedaClase);
29
+ const busquedaClasetieneAlMenosUnError = errors.length > 0;
30
+ if (busquedaClasetieneAlMenosUnError) {
31
+ console.error('Error: Error en criterios de busqueda, se busca con parametros default', errors);
32
+ criterioBusqueda = {
33
+ skip: skip,
34
+ take: take
35
+ };
36
+ return servicio.find(criterioBusqueda);
37
+ }
38
+ else {
39
+ if (criterioBusquedaClase.where) {
40
+ if (Array.isArray(criterioBusquedaClase.where)) {
41
+ criterioBusquedaClase
42
+ .where
43
+ .forEach((busqueda, indice) => {
44
+ Object
45
+ .keys(busqueda)
46
+ .forEach((campo) => {
47
+ let noEncuentraOperador = true;
48
+ let campoEsTexto = typeof criterioBusquedaClase.where[indice][campo] === 'string';
49
+ if (noEncuentraOperador && campoEsTexto) {
50
+ const expresionRegularNot = /Not\(".+"\)+/g;
51
+ const contieneNot = criterioBusquedaClase.where[indice][campo].match(expresionRegularNot);
52
+ if (contieneNot && noEncuentraOperador) {
53
+ const sinNot = criterioBusquedaClase.where[indice][campo].replace('Not("', '').replace('")', '');
54
+ if (noEncuentraOperador && campoEsTexto) {
55
+ const expresionRegularLike = /Like\(".+"\)+/g;
56
+ const contieneLike = sinNot.match(expresionRegularLike);
57
+ if (contieneLike) {
58
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
59
+ noEncuentraOperador = false;
60
+ }
61
+ }
62
+ if (noEncuentraOperador && campoEsTexto) {
63
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
64
+ const contieneLessThan = sinNot.match(expresionRegularLessThan);
65
+ if (contieneLessThan) {
66
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
67
+ noEncuentraOperador = false;
68
+ }
69
+ }
70
+ if (noEncuentraOperador && campoEsTexto) {
71
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
72
+ const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
73
+ if (contieneMoreThan) {
74
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
75
+ noEncuentraOperador = false;
76
+ }
77
+ }
78
+ if (noEncuentraOperador && campoEsTexto) {
79
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
80
+ const contieneEqual = sinNot.match(expresionRegularEqual);
81
+ if (contieneEqual) {
82
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
83
+ noEncuentraOperador = false;
84
+ }
85
+ }
86
+ if (noEncuentraOperador && campoEsTexto) {
87
+ const expresionRegularBetween = /Between\(".+"\)+/g;
88
+ const contieneBetween = sinNot.match(expresionRegularBetween);
89
+ if (contieneBetween) {
90
+ const busqueda = [...sinNot
91
+ .replace('Between("', '')
92
+ .replace('")', '')
93
+ .replace(' ', '')
94
+ .split(',')
95
+ .map((n) => isNaN(n) ? n : +n)];
96
+ const esFecha = busqueda[0].length === 10 &&
97
+ busqueda[0].length === 10 &&
98
+ (typeof busqueda[0] === 'string') &&
99
+ (typeof busqueda[1] === 'string') &&
100
+ busqueda[0].match('-') &&
101
+ busqueda[1].match('-');
102
+ if (esFecha) {
103
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
104
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
105
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
106
+ }
107
+ else {
108
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
109
+ }
110
+ noEncuentraOperador = false;
111
+ }
112
+ }
113
+ if (noEncuentraOperador && campoEsTexto) {
114
+ const expresionRegularIn = /In\(.+\)+/g;
115
+ const contieneIn = sinNot.match(expresionRegularIn);
116
+ if (contieneIn) {
117
+ let arreglo;
118
+ try {
119
+ arreglo = JSON.parse(sinNot
120
+ .replace('In(', '')
121
+ .replace('])', ']'));
122
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.In(arreglo));
123
+ noEncuentraOperador = false;
124
+ }
125
+ catch (e) {
126
+ console.log('Error formateando clausula IN');
127
+ console.log(e);
128
+ }
129
+ }
130
+ }
131
+ if (noEncuentraOperador && campoEsTexto) {
132
+ const expresionRegularAny = /Any\(.+\)+/g;
133
+ const contieneAny = sinNot.match(expresionRegularAny);
134
+ if (contieneAny) {
135
+ let arreglo;
136
+ try {
137
+ arreglo = JSON.parse(sinNot
138
+ .replace('Any(', '')
139
+ .replace(')', ''));
140
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
141
+ noEncuentraOperador = false;
142
+ }
143
+ catch (e) {
144
+ console.log('Error formateando clausula ANY');
145
+ console.log(e);
146
+ }
147
+ }
148
+ }
149
+ if (noEncuentraOperador && campoEsTexto) {
150
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
151
+ const contieneIsNull = sinNot.match(expresionRegularIsNull);
152
+ if (contieneIsNull) {
153
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Not(typeorm_1.IsNull());
154
+ noEncuentraOperador = false;
155
+ }
156
+ }
157
+ }
158
+ } // Fin de NOT
159
+ if (noEncuentraOperador && campoEsTexto) {
160
+ const expresionRegularLike = /Like\(".+"\)+/g;
161
+ const contieneLike = criterioBusquedaClase.where[indice][campo].match(expresionRegularLike);
162
+ if (contieneLike) {
163
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Like(criterioBusquedaClase.where[indice][campo].replace('Like("', '').replace('")', ''));
164
+ noEncuentraOperador = false;
165
+ }
166
+ }
167
+ if (noEncuentraOperador && campoEsTexto) {
168
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
169
+ const contieneLessThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularLessThan);
170
+ if (contieneLessThan) {
171
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.LessThan(criterioBusquedaClase.where[indice][campo].replace('LessThan("', '').replace('")', ''));
172
+ noEncuentraOperador = false;
173
+ }
174
+ }
175
+ if (noEncuentraOperador && campoEsTexto) {
176
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
177
+ const contieneMoreThan = criterioBusquedaClase.where[indice][campo].match(expresionRegularMoreThan);
178
+ if (contieneMoreThan) {
179
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[indice][campo].replace('MoreThan("', '').replace('")', ''));
180
+ noEncuentraOperador = false;
181
+ }
182
+ }
183
+ if (noEncuentraOperador && campoEsTexto) {
184
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
185
+ const contieneEqual = criterioBusquedaClase.where[indice][campo].match(expresionRegularEqual);
186
+ if (contieneEqual) {
187
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Equal(criterioBusquedaClase.where[indice][campo].replace('Equal("', '').replace('")', ''));
188
+ noEncuentraOperador = false;
189
+ }
190
+ }
191
+ if (noEncuentraOperador && campoEsTexto) {
192
+ const expresionRegularBetween = /Between\(".+"\)+/g;
193
+ const contieneBetween = criterioBusquedaClase.where[indice][campo].match(expresionRegularBetween);
194
+ if (contieneBetween) {
195
+ const busqueda = [...criterioBusquedaClase.where[indice][campo]
196
+ .replace('Between("', '')
197
+ .replace('")', '')
198
+ .replace(' ', '')
199
+ .split(',')
200
+ .map((n) => isNaN(n) ? n : +n)];
201
+ const esFecha = busqueda[0].length === 10 &&
202
+ busqueda[0].length === 10 &&
203
+ (typeof busqueda[0] === 'string') &&
204
+ (typeof busqueda[1] === 'string') &&
205
+ busqueda[0].match('-') &&
206
+ busqueda[1].match('-');
207
+ if (esFecha) {
208
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
209
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
210
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(fechaInicio, fechaFin);
211
+ }
212
+ else {
213
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
214
+ }
215
+ noEncuentraOperador = false;
216
+ }
217
+ }
218
+ if (noEncuentraOperador && campoEsTexto) {
219
+ const expresionRegularIn = /In\(.+\)+/g;
220
+ const contieneIn = criterioBusquedaClase.where[indice][campo].match(expresionRegularIn);
221
+ if (contieneIn) {
222
+ let arreglo;
223
+ try {
224
+ arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
225
+ .replace('In(', '')
226
+ .replace('])', ']'));
227
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.In(arreglo);
228
+ noEncuentraOperador = false;
229
+ }
230
+ catch (e) {
231
+ console.log(e);
232
+ }
233
+ }
234
+ }
235
+ if (noEncuentraOperador && campoEsTexto) {
236
+ const expresionRegularAny = /Any\(.+\)+/g;
237
+ const contieneAny = criterioBusquedaClase.where[indice][campo].match(expresionRegularAny);
238
+ if (contieneAny) {
239
+ let arreglo;
240
+ try {
241
+ arreglo = JSON.parse(criterioBusquedaClase.where[indice][campo]
242
+ .replace('Any(', '')
243
+ .replace(')', ''));
244
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.Any(arreglo);
245
+ noEncuentraOperador = false;
246
+ }
247
+ catch (e) {
248
+ console.log(e);
249
+ }
250
+ }
251
+ }
252
+ if (noEncuentraOperador && campoEsTexto) {
253
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
254
+ const contieneIsNull = criterioBusquedaClase.where[indice][campo].match(expresionRegularIsNull);
255
+ if (contieneIsNull) {
256
+ criterioBusquedaClase.where[indice][campo] = typeorm_1.IsNull();
257
+ noEncuentraOperador = false;
258
+ }
259
+ }
260
+ });
261
+ });
262
+ }
263
+ else {
264
+ Object
265
+ .keys(criterioBusquedaClase.where)
266
+ .forEach((campo) => {
267
+ let noEncuentraOperador = true;
268
+ let campoEsTexto = typeof criterioBusquedaClase.where[campo] === 'string';
269
+ if (noEncuentraOperador && campoEsTexto) {
270
+ const expresionRegularNot = /Not\(".+"\)+/g;
271
+ const contieneNot = criterioBusquedaClase.where[campo].match(expresionRegularNot);
272
+ if (contieneNot && noEncuentraOperador) {
273
+ // criterioBusquedaClase.where[campo] = Not(
274
+ // criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '')
275
+ // );
276
+ // noEncuentraOperador = false;
277
+ const sinNot = criterioBusquedaClase.where[campo].replace('Not("', '').replace('")', '');
278
+ if (noEncuentraOperador && campoEsTexto) {
279
+ const expresionRegularLike = /Like\(".+"\)+/g;
280
+ const contieneLike = sinNot.match(expresionRegularLike);
281
+ if (contieneLike) {
282
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Like(sinNot.replace('Like("', '').replace('")', '')));
283
+ noEncuentraOperador = false;
284
+ }
285
+ }
286
+ if (noEncuentraOperador && campoEsTexto) {
287
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
288
+ const contieneLessThan = sinNot.match(expresionRegularLessThan);
289
+ if (contieneLessThan) {
290
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.LessThan(sinNot.replace('LessThan("', '').replace('")', '')));
291
+ noEncuentraOperador = false;
292
+ }
293
+ }
294
+ if (noEncuentraOperador && campoEsTexto) {
295
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
296
+ const contieneMoreThan = sinNot.match(expresionRegularMoreThan);
297
+ if (contieneMoreThan) {
298
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.MoreThan(sinNot.replace('MoreThan("', '').replace('")', '')));
299
+ noEncuentraOperador = false;
300
+ }
301
+ }
302
+ if (noEncuentraOperador && campoEsTexto) {
303
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
304
+ const contieneEqual = sinNot.match(expresionRegularEqual);
305
+ if (contieneEqual) {
306
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Equal(sinNot.replace('Equal("', '').replace('")', '')));
307
+ noEncuentraOperador = false;
308
+ }
309
+ }
310
+ if (noEncuentraOperador && campoEsTexto) {
311
+ const expresionRegularBetween = /Between\(".+"\)+/g;
312
+ const contieneBetween = sinNot.match(expresionRegularBetween);
313
+ if (contieneBetween) {
314
+ const busqueda = [...sinNot
315
+ .replace('Between("', '')
316
+ .replace('")', '')
317
+ .replace(' ', '')
318
+ .split(',')
319
+ .map((n) => isNaN(n) ? n : +n)];
320
+ const esFecha = busqueda[0].length === 10 &&
321
+ busqueda[0].length === 10 &&
322
+ (typeof busqueda[0] === 'string') &&
323
+ (typeof busqueda[1] === 'string') &&
324
+ busqueda[0].match('-') &&
325
+ busqueda[1].match('-');
326
+ if (esFecha) {
327
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
328
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
329
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(fechaInicio, fechaFin));
330
+ }
331
+ else {
332
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Between(busqueda[0], busqueda[1]));
333
+ }
334
+ noEncuentraOperador = false;
335
+ }
336
+ }
337
+ if (noEncuentraOperador && campoEsTexto) {
338
+ const expresionRegularIn = /In\(.+\)+/g;
339
+ const contieneIn = sinNot.match(expresionRegularIn);
340
+ if (contieneIn) {
341
+ let arreglo;
342
+ try {
343
+ arreglo = JSON.parse(sinNot
344
+ .replace('In(', '')
345
+ .replace('])', ']'));
346
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.In(arreglo));
347
+ noEncuentraOperador = false;
348
+ }
349
+ catch (e) {
350
+ console.log('Error formateando clausula IN');
351
+ console.log(e);
352
+ }
353
+ }
354
+ }
355
+ if (noEncuentraOperador && campoEsTexto) {
356
+ const expresionRegularAny = /Any\(.+\)+/g;
357
+ const contieneAny = sinNot.match(expresionRegularAny);
358
+ if (contieneAny) {
359
+ let arreglo;
360
+ try {
361
+ arreglo = JSON.parse(sinNot
362
+ .replace('Any(', '')
363
+ .replace(')', ''));
364
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.Any(arreglo));
365
+ noEncuentraOperador = false;
366
+ }
367
+ catch (e) {
368
+ console.log('Error formateando clausula ANY');
369
+ console.log(e);
370
+ }
371
+ }
372
+ }
373
+ if (noEncuentraOperador && campoEsTexto) {
374
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
375
+ const contieneIsNull = sinNot.match(expresionRegularIsNull);
376
+ if (contieneIsNull) {
377
+ criterioBusquedaClase.where[campo] = typeorm_1.Not(typeorm_1.IsNull());
378
+ noEncuentraOperador = false;
379
+ }
380
+ }
381
+ }
382
+ } // Fin de NOT
383
+ if (noEncuentraOperador && campoEsTexto) {
384
+ const expresionRegularLike = /Like\(".+"\)+/g;
385
+ const contieneLike = criterioBusquedaClase.where[campo].match(expresionRegularLike);
386
+ if (contieneLike) {
387
+ criterioBusquedaClase.where[campo] = typeorm_1.Like(criterioBusquedaClase.where[campo].replace('Like("', '').replace('")', ''));
388
+ noEncuentraOperador = false;
389
+ }
390
+ }
391
+ if (noEncuentraOperador && campoEsTexto) {
392
+ const expresionRegularLessThan = /LessThan\(".+"\)+/g;
393
+ const contieneLessThan = criterioBusquedaClase.where[campo].match(expresionRegularLessThan);
394
+ if (contieneLessThan) {
395
+ criterioBusquedaClase.where[campo] = typeorm_1.LessThan(criterioBusquedaClase.where[campo].replace('LessThan("', '').replace('")', ''));
396
+ noEncuentraOperador = false;
397
+ }
398
+ }
399
+ if (noEncuentraOperador && campoEsTexto) {
400
+ const expresionRegularMoreThan = /MoreThan\(".+"\)+/g;
401
+ const contieneMoreThan = criterioBusquedaClase.where[campo].match(expresionRegularMoreThan);
402
+ if (contieneMoreThan) {
403
+ criterioBusquedaClase.where[campo] = typeorm_1.MoreThan(criterioBusquedaClase.where[campo].replace('MoreThan("', '').replace('")', ''));
404
+ noEncuentraOperador = false;
405
+ }
406
+ }
407
+ if (noEncuentraOperador && campoEsTexto) {
408
+ const expresionRegularEqual = /Equal\(".+"\)+/g;
409
+ const contieneEqual = criterioBusquedaClase.where[campo].match(expresionRegularEqual);
410
+ if (contieneEqual) {
411
+ criterioBusquedaClase.where[campo] = typeorm_1.Equal(criterioBusquedaClase.where[campo].replace('Equal("', '').replace('")', ''));
412
+ noEncuentraOperador = false;
413
+ }
414
+ }
415
+ if (noEncuentraOperador && campoEsTexto) {
416
+ const expresionRegularBetween = /Between\(".+"\)+/g;
417
+ const contieneBetween = criterioBusquedaClase.where[campo].match(expresionRegularBetween);
418
+ if (contieneBetween) {
419
+ const busqueda = [...criterioBusquedaClase.where[campo]
420
+ .replace('Between("', '')
421
+ .replace('")', '')
422
+ .replace(' ', '')
423
+ .split(',')
424
+ .map((n) => isNaN(n) ? n : +n)];
425
+ const esFecha = busqueda[0].length === 10 &&
426
+ busqueda[0].length === 10 &&
427
+ (typeof busqueda[0] === 'string') &&
428
+ (typeof busqueda[1] === 'string') &&
429
+ busqueda[0].match('-') &&
430
+ busqueda[1].match('-');
431
+ if (esFecha) {
432
+ const fechaInicio = new Date(busqueda[0].substring(0, 4), busqueda[0].substring(5, 7) - 1, busqueda[0].substring(8));
433
+ const fechaFin = new Date(busqueda[1].substring(0, 4), busqueda[1].substring(5, 7) - 1, busqueda[1].substring(8));
434
+ criterioBusquedaClase.where[campo] = typeorm_1.Between(fechaInicio, fechaFin);
435
+ }
436
+ else {
437
+ criterioBusquedaClase.where[campo] = typeorm_1.Between(busqueda[0], busqueda[1]);
438
+ }
439
+ noEncuentraOperador = false;
440
+ }
441
+ }
442
+ if (noEncuentraOperador && campoEsTexto) {
443
+ const expresionRegularIn = /In\(.+\)+/g;
444
+ const contieneIn = criterioBusquedaClase.where[campo].match(expresionRegularIn);
445
+ if (contieneIn) {
446
+ let arreglo;
447
+ try {
448
+ arreglo = JSON.parse(criterioBusquedaClase.where[campo]
449
+ .replace('In(', '')
450
+ .replace('])', ']'));
451
+ criterioBusquedaClase.where[campo] = typeorm_1.In(arreglo);
452
+ noEncuentraOperador = false;
453
+ }
454
+ catch (e) {
455
+ console.log(e);
456
+ }
457
+ }
458
+ }
459
+ if (noEncuentraOperador && campoEsTexto) {
460
+ const expresionRegularAny = /Any\(.+\)+/g;
461
+ const contieneAny = criterioBusquedaClase.where[campo].match(expresionRegularAny);
462
+ if (contieneAny) {
463
+ let arreglo;
464
+ try {
465
+ arreglo = JSON.parse(criterioBusquedaClase.where[campo]
466
+ .replace('Any(', '')
467
+ .replace(')', ''));
468
+ criterioBusquedaClase.where[campo] = typeorm_1.Any(arreglo);
469
+ noEncuentraOperador = false;
470
+ }
471
+ catch (e) {
472
+ console.log(e);
473
+ }
474
+ }
475
+ }
476
+ if (noEncuentraOperador && campoEsTexto) {
477
+ const expresionRegularIsNull = /IsNull\(".+"\)+/g;
478
+ const contieneIsNull = criterioBusquedaClase.where[campo].match(expresionRegularIsNull);
479
+ if (contieneIsNull) {
480
+ criterioBusquedaClase.where[campo] = typeorm_1.IsNull();
481
+ noEncuentraOperador = false;
482
+ }
483
+ }
484
+ });
485
+ }
486
+ }
487
+ return servicio.find(criterioBusquedaClase);
488
+ }
489
+ }
490
+ }
491
+ exports.buscarVariosRegistros = buscarVariosRegistros;
492
492
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzY2FyLXJlZ2lzdHJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9mdW5jaW9uZXMtdXRpbC9idXNjYXItcmVnaXN0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBMkM7QUFDM0MseURBQWlEO0FBQ2pELHFDQUF5RjtBQUVsRixLQUFLLGdDQUFnQyxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVE7SUFDMUcsSUFBSSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7SUFDeEMsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLGdCQUFnQixLQUFLLFFBQVEsQ0FBQztJQUUxRSxJQUFJLDRCQUE0QixFQUFFO1FBQ2hDLElBQUk7WUFDRixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDakQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLDJCQUEyQixHQUFHLElBQUksQ0FBQztTQUNwQztLQUNGO0lBRUQsSUFBSSwyQkFBMkIsRUFBRTtRQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDMUUsTUFBTSwwQkFBMEIsR0FBRztZQUNqQyxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUNGLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hDO1NBQU07UUFDTCxNQUFNLHFCQUFxQixHQUFRLGdDQUFZLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RixNQUFNLE1BQU0sR0FBRyxNQUFNLDBCQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRCxNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzNELElBQUksZ0NB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