dmencu 3.2.21 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README.md +42 -42
  2. package/ayuda/asignacion.md +16 -0
  3. package/ayuda/circuito-encuesta.md +27 -0
  4. package/ayuda/control.md +13 -0
  5. package/ayuda/dm-cambiar-modo.md +16 -0
  6. package/ayuda/dm-relevamiento.md +20 -0
  7. package/ayuda/dm-sincronizar.md +18 -0
  8. package/ayuda/fin-de-campo.md +14 -0
  9. package/ayuda/metadatos.md +14 -0
  10. package/ayuda/procesar.md +13 -0
  11. package/ayuda/recepcion.md +20 -0
  12. package/ayuda/supervision.md +9 -0
  13. package/ayuda/usuarios.md +12 -0
  14. package/ayuda/varios.md +23 -0
  15. package/dist/client/client/client.js +101 -4
  16. package/dist/client/client/css/menu.styl +29 -0
  17. package/dist/client/unlogged/abrir-formulario.js +1 -1
  18. package/dist/client/unlogged/bypass-formulario.d.ts +6 -42
  19. package/dist/client/unlogged/bypass-formulario.js +84 -219
  20. package/dist/client/unlogged/calculos-encuesta.js +112 -38
  21. package/dist/client/unlogged/css/formulario-react.styl +9 -0
  22. package/dist/client/unlogged/helpers-casilleros.d.ts +1 -1
  23. package/dist/client/unlogged/helpers-casilleros.js +12 -18
  24. package/dist/client/unlogged/helpers-formulario.d.ts +16 -0
  25. package/dist/client/unlogged/helpers-formulario.js +88 -0
  26. package/dist/client/unlogged/redux-formulario.d.ts +1 -2
  27. package/dist/client/unlogged/redux-formulario.js +21 -31
  28. package/dist/client/unlogged/render-config.d.ts +5 -1
  29. package/dist/client/unlogged/render-config.js +14 -1
  30. package/dist/client/unlogged/render-formulario.d.ts +3 -6
  31. package/dist/client/unlogged/render-formulario.js +71 -69
  32. package/dist/client/unlogged/render-formulario.tsx +100 -57
  33. package/dist/client/unlogged/render-general.d.ts +2 -0
  34. package/dist/client/unlogged/render-general.js +2 -1
  35. package/dist/client/unlogged/render-general.tsx +2 -1
  36. package/dist/client/unlogged/render-init.d.ts +1 -0
  37. package/dist/client/unlogged/render-init.js +9 -2
  38. package/dist/client/unlogged/tipos.d.ts +93 -41
  39. package/dist/client/unlogged/tipos.js +1 -1
  40. package/dist/server/app-dmencu.d.ts +1435 -0
  41. package/dist/server/app-dmencu.js +1091 -0
  42. package/dist/server/ayuda.d.ts +19 -0
  43. package/dist/server/ayuda.js +224 -0
  44. package/dist/server/def-config.d.ts +1 -0
  45. package/dist/server/def-config.js +123 -0
  46. package/dist/server/procedures-dmencu.d.ts +43 -0
  47. package/dist/server/procedures-dmencu.js +2313 -0
  48. package/dist/server/server/app-dmencu.d.ts +49 -91
  49. package/dist/server/server/app-dmencu.js +151 -52
  50. package/dist/server/server/ayuda.d.ts +19 -0
  51. package/dist/server/server/ayuda.js +224 -0
  52. package/dist/server/server/procedures-dmencu.d.ts +34 -2
  53. package/dist/server/server/procedures-dmencu.js +93 -51
  54. package/dist/server/server/setters-rea-no-rea.d.ts +13 -0
  55. package/dist/server/server/setters-rea-no-rea.js +35 -0
  56. package/dist/server/server/table-areas.js +4 -4
  57. package/dist/server/server/table-areas_asignacion_general.js +2 -1
  58. package/dist/server/server/table-control_campo.js +4 -4
  59. package/dist/server/server/table-no_rea.js +4 -2
  60. package/dist/server/server/table-no_rea_sup.js +7 -3
  61. package/dist/server/server/table-personal.js +1 -1
  62. package/dist/server/server/table-tareas_tem.js +2 -2
  63. package/dist/server/server/table-tem.js +2 -2
  64. package/dist/server/server/types-dmencu.d.ts +53 -2
  65. package/dist/server/server/types-dmencu.js +2 -1
  66. package/dist/server/setters-rea-no-rea.d.ts +13 -0
  67. package/dist/server/setters-rea-no-rea.js +35 -0
  68. package/dist/server/table-acciones.d.ts +2 -0
  69. package/dist/server/table-acciones.js +45 -0
  70. package/dist/server/table-area_enc_proximas.d.ts +2 -0
  71. package/dist/server/table-area_enc_proximas.js +30 -0
  72. package/dist/server/table-areas.d.ts +4 -0
  73. package/dist/server/table-areas.js +112 -0
  74. package/dist/server/table-areas_asignacion_general.d.ts +2 -0
  75. package/dist/server/table-areas_asignacion_general.js +86 -0
  76. package/dist/server/table-barrios.d.ts +2 -0
  77. package/dist/server/table-barrios.js +35 -0
  78. package/dist/server/table-comunas.d.ts +2 -0
  79. package/dist/server/table-comunas.js +33 -0
  80. package/dist/server/table-control_campo.d.ts +12 -0
  81. package/dist/server/table-control_campo.js +119 -0
  82. package/dist/server/table-control_dias_carga.d.ts +2 -0
  83. package/dist/server/table-control_dias_carga.js +63 -0
  84. package/dist/server/table-control_resumen.d.ts +2 -0
  85. package/dist/server/table-control_resumen.js +19 -0
  86. package/dist/server/table-diccionario.d.ts +2 -0
  87. package/dist/server/table-diccionario.js +32 -0
  88. package/dist/server/table-dictra.d.ts +2 -0
  89. package/dist/server/table-dictra.js +46 -0
  90. package/dist/server/table-dicvar.d.ts +2 -0
  91. package/dist/server/table-dicvar.js +32 -0
  92. package/dist/server/table-encuestadores.d.ts +13 -0
  93. package/dist/server/table-encuestadores.js +75 -0
  94. package/dist/server/table-estados.d.ts +2 -0
  95. package/dist/server/table-estados.js +47 -0
  96. package/dist/server/table-estados_acciones.d.ts +2 -0
  97. package/dist/server/table-estados_acciones.js +40 -0
  98. package/dist/server/table-fracciones.d.ts +2 -0
  99. package/dist/server/table-fracciones.js +37 -0
  100. package/dist/server/table-grilla_hoja_ruta.d.ts +2 -0
  101. package/dist/server/table-grilla_hoja_ruta.js +93 -0
  102. package/dist/server/table-historial_tem.d.ts +2 -0
  103. package/dist/server/table-historial_tem.js +57 -0
  104. package/dist/server/table-hogares.d.ts +2 -0
  105. package/dist/server/table-hogares.js +156 -0
  106. package/dist/server/table-hogares_sup.d.ts +2 -0
  107. package/dist/server/table-hogares_sup.js +191 -0
  108. package/dist/server/table-inconsistencias_cumplen_condicion.d.ts +2 -0
  109. package/dist/server/table-inconsistencias_cumplen_condicion.js +33 -0
  110. package/dist/server/table-manzanas.d.ts +2 -0
  111. package/dist/server/table-manzanas.js +36 -0
  112. package/dist/server/table-mis_encuestadores.d.ts +2 -0
  113. package/dist/server/table-mis_encuestadores.js +77 -0
  114. package/dist/server/table-mis_tareas.d.ts +2 -0
  115. package/dist/server/table-mis_tareas.js +18 -0
  116. package/dist/server/table-mis_tareas_areas.d.ts +2 -0
  117. package/dist/server/table-mis_tareas_areas.js +20 -0
  118. package/dist/server/table-modos_dm.d.ts +2 -0
  119. package/dist/server/table-modos_dm.js +28 -0
  120. package/dist/server/table-no_rea.js +38 -0
  121. package/dist/server/table-no_rea_sup.js +36 -0
  122. package/dist/server/table-operaciones.d.ts +2 -0
  123. package/dist/server/table-operaciones.js +30 -0
  124. package/dist/server/table-parametros.d.ts +2 -0
  125. package/dist/server/table-parametros.js +40 -0
  126. package/dist/server/table-permisos.d.ts +2 -0
  127. package/dist/server/table-permisos.js +31 -0
  128. package/dist/server/table-personal.d.ts +5 -0
  129. package/dist/server/table-personal.js +62 -0
  130. package/dist/server/table-personal_rol.d.ts +2 -0
  131. package/dist/server/table-personal_rol.js +42 -0
  132. package/dist/server/table-personas.d.ts +2 -0
  133. package/dist/server/table-personas.js +448 -0
  134. package/dist/server/table-personas_sup.d.ts +2 -0
  135. package/dist/server/table-personas_sup.js +93 -0
  136. package/dist/server/table-radios.d.ts +2 -0
  137. package/dist/server/table-radios.js +37 -0
  138. package/dist/server/table-rea.d.ts +2 -0
  139. package/dist/server/table-rea.js +38 -0
  140. package/dist/server/table-rea_sup.d.ts +2 -0
  141. package/dist/server/table-rea_sup.js +38 -0
  142. package/dist/server/table-recepcionistas.d.ts +2 -0
  143. package/dist/server/table-recepcionistas.js +18 -0
  144. package/dist/server/table-recuperadores.d.ts +2 -0
  145. package/dist/server/table-recuperadores.js +18 -0
  146. package/dist/server/table-roles.d.ts +2 -0
  147. package/dist/server/table-roles.js +33 -0
  148. package/dist/server/table-roles_permisos.d.ts +2 -0
  149. package/dist/server/table-roles_permisos.js +36 -0
  150. package/dist/server/table-roles_subordinados.d.ts +2 -0
  151. package/dist/server/table-roles_subordinados.js +31 -0
  152. package/dist/server/table-semanas.d.ts +2 -0
  153. package/dist/server/table-semanas.js +42 -0
  154. package/dist/server/table-sincronizaciones.d.ts +2 -0
  155. package/dist/server/table-sincronizaciones.js +30 -0
  156. package/dist/server/table-supervisores.d.ts +2 -0
  157. package/dist/server/table-supervisores.js +18 -0
  158. package/dist/server/table-tareas.d.ts +2 -0
  159. package/dist/server/table-tareas.js +48 -0
  160. package/dist/server/table-tareas_areas.d.ts +7 -0
  161. package/dist/server/table-tareas_areas.js +112 -0
  162. package/dist/server/table-tareas_proximas.d.ts +2 -0
  163. package/dist/server/table-tareas_proximas.js +48 -0
  164. package/dist/server/table-tareas_tem.d.ts +14 -0
  165. package/dist/server/table-tareas_tem.js +206 -0
  166. package/dist/server/table-tareas_tem_analisis_campo.d.ts +2 -0
  167. package/dist/server/table-tareas_tem_analisis_campo.js +31 -0
  168. package/dist/server/table-tareas_tem_fin_campo.d.ts +3 -0
  169. package/dist/server/table-tareas_tem_fin_campo.js +56 -0
  170. package/dist/server/table-tareas_tem_ingreso.d.ts +2 -0
  171. package/dist/server/table-tareas_tem_ingreso.js +31 -0
  172. package/dist/server/table-tareas_tem_procesamiento.d.ts +2 -0
  173. package/dist/server/table-tareas_tem_procesamiento.js +34 -0
  174. package/dist/server/table-tareas_tem_recepcion.d.ts +6 -0
  175. package/dist/server/table-tareas_tem_recepcion.js +59 -0
  176. package/dist/server/table-tem.d.ts +3 -0
  177. package/dist/server/table-tem.js +247 -0
  178. package/dist/server/table-tem_asignacion.d.ts +2 -0
  179. package/dist/server/table-tem_asignacion.js +50 -0
  180. package/dist/server/table-tem_borradas.d.ts +2 -0
  181. package/dist/server/table-tem_borradas.js +35 -0
  182. package/dist/server/table-usuarios.d.ts +2 -0
  183. package/dist/server/table-usuarios.js +63 -0
  184. package/dist/server/table-visitas.d.ts +2 -0
  185. package/dist/server/table-visitas.js +91 -0
  186. package/dist/server/table-visitas_sup.d.ts +2 -0
  187. package/dist/server/table-visitas_sup.js +91 -0
  188. package/dist/server/table-viviendas.d.ts +2 -0
  189. package/dist/server/table-viviendas.js +299 -0
  190. package/dist/server/types-dmencu.d.ts +114 -0
  191. package/dist/server/types-dmencu.js +34 -0
  192. package/dist/server/unlogged/tipos.d.ts +93 -41
  193. package/dist/server/unlogged/tipos.js +1 -1
  194. package/dist/test/app-para-tests.d.ts +1117 -0
  195. package/dist/test/app-para-tests.js +95 -0
  196. package/dist/test/test-ayuda.d.ts +1 -0
  197. package/dist/test/test-ayuda.js +183 -0
  198. package/dist/test/test-caches-rea.d.ts +1 -0
  199. package/dist/test/test-caches-rea.js +243 -0
  200. package/dist/test/test-helpers-casilleros.d.ts +1 -0
  201. package/dist/test/test-helpers-casilleros.js +154 -0
  202. package/dist/test/test-helpers-formulario.d.ts +1 -0
  203. package/dist/test/test-helpers-formulario.js +95 -0
  204. package/dist/test/test-impacto-rea-no-rea-en-bd.d.ts +1 -0
  205. package/dist/test/test-impacto-rea-no-rea-en-bd.js +243 -0
  206. package/dist/test/test-menu-segun-rol.d.ts +1 -0
  207. package/dist/test/test-menu-segun-rol.js +170 -0
  208. package/dist/test/test-setters-rea-no-rea.d.ts +1 -0
  209. package/dist/test/test-setters-rea-no-rea.js +95 -0
  210. package/dist/test/test.d.ts +7 -0
  211. package/dist/test/test.js +9 -2
  212. package/dist/unlogged/helpers-casilleros.d.ts +1 -1
  213. package/dist/unlogged/helpers-casilleros.js +12 -18
  214. package/dist/unlogged/helpers-formulario.d.ts +16 -0
  215. package/dist/unlogged/helpers-formulario.js +88 -0
  216. package/dist/unlogged/tipos.d.ts +20 -2
  217. package/dist/unlogged/tipos.js +1 -1
  218. package/dist/unlogged/unlogged/abrir-formulario.js +1 -1
  219. package/dist/unlogged/unlogged/bypass-formulario.d.ts +6 -42
  220. package/dist/unlogged/unlogged/bypass-formulario.js +84 -219
  221. package/dist/unlogged/unlogged/css/formulario-react.styl +9 -0
  222. package/dist/unlogged/unlogged/helpers-casilleros.js +7 -14
  223. package/dist/unlogged/unlogged/helpers-formulario.d.ts +16 -0
  224. package/dist/unlogged/unlogged/helpers-formulario.js +88 -0
  225. package/dist/unlogged/unlogged/redux-formulario.d.ts +1 -2
  226. package/dist/unlogged/unlogged/redux-formulario.js +21 -31
  227. package/dist/unlogged/unlogged/render-config.d.ts +5 -1
  228. package/dist/unlogged/unlogged/render-config.js +14 -1
  229. package/dist/unlogged/unlogged/render-formulario.d.ts +3 -6
  230. package/dist/unlogged/unlogged/render-formulario.js +71 -69
  231. package/dist/unlogged/unlogged/render-formulario.tsx +100 -57
  232. package/dist/unlogged/unlogged/render-general.d.ts +2 -0
  233. package/dist/unlogged/unlogged/render-general.js +2 -1
  234. package/dist/unlogged/unlogged/render-general.tsx +2 -1
  235. package/dist/unlogged/unlogged/render-init.d.ts +1 -0
  236. package/dist/unlogged/unlogged/render-init.js +9 -2
  237. package/dist/unlogged/unlogged/tipos.d.ts +93 -41
  238. package/dist/unlogged/unlogged/tipos.js +1 -1
  239. package/dist/unlogged/unlogged/unlogged.js +15 -2
  240. package/install/accion_cumple_condicion.sql +1 -1
  241. package/install/generador_accion_cumple_condicion.sql +2 -2
  242. package/install/tarea_cumple_condicion.sql +1 -1
  243. package/install/xcalcular_resultado_trg.sql +1 -1
  244. package/package.json +24 -18
  245. package/dist/server/server/table-no_rea copy.js +0 -38
  246. package/dist/server/server/table-no_rea_sup copy.js +0 -36
  247. package/dist/unlogged/bypass-formulario.d.ts +0 -198
  248. package/dist/unlogged/bypass-formulario.js +0 -1226
  249. package/dist/unlogged/redux-formulario.d.ts +0 -440
  250. package/dist/unlogged/redux-formulario.js +0 -324
  251. package/dist/unlogged/render-config.d.ts +0 -52
  252. package/dist/unlogged/render-config.js +0 -161
  253. package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +0 -198
  254. package/dist/unlogged/unlogged/bypass-formulario copy.js +0 -1226
  255. package/dist/unlogged/unlogged/helpers.d.ts +0 -14
  256. package/dist/unlogged/unlogged/helpers.js +0 -129
  257. /package/dist/server/{server/table-no_rea copy.d.ts → table-no_rea.d.ts} +0 -0
  258. /package/dist/server/{server/table-no_rea_sup copy.d.ts → table-no_rea_sup.d.ts} +0 -0
@@ -0,0 +1,243 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ (function (factory) {
11
+ if (typeof module === "object" && typeof module.exports === "object") {
12
+ var v = factory(require, exports);
13
+ if (v !== undefined) module.exports = v;
14
+ }
15
+ else if (typeof define === "function" && define.amd) {
16
+ define(["require", "exports", "mocha", "node:assert", "../server/app-dmencu", "../server/procedures-dmencu", "../unlogged/helpers-casilleros", "./app-para-tests"], factory);
17
+ }
18
+ })(function (require, exports) {
19
+ "use strict";
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ const mocha_1 = require("mocha");
22
+ const assert = require("node:assert");
23
+ const app_dmencu_1 = require("../server/app-dmencu");
24
+ const procedures_dmencu_1 = require("../server/procedures-dmencu");
25
+ const helpers_casilleros_1 = require("../unlogged/helpers-casilleros");
26
+ const app_para_tests_1 = require("./app-para-tests");
27
+ // se listan acá (y no se importa TABLAS_REA_NO_REA) para que el test falle si alguna deja de tratarse
28
+ const TABLAS_REA_NO_REA = ['rea', 'no_rea', 'rea_sup', 'no_rea_sup'];
29
+ // Base de datos en memoria: cada consulta se resuelve por la tabla del "from"
30
+ class BaseFalsa {
31
+ constructor(tablas) {
32
+ this.tablas = tablas;
33
+ this.consultas = [];
34
+ }
35
+ query(sql) {
36
+ var _a, _b, _c, _d, _e;
37
+ this.consultas.push(sql);
38
+ var tabla = (_b = (_a = /from (\w+)/.exec(sql)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : '';
39
+ var filas = (_c = this.tablas[tabla]) !== null && _c !== void 0 ? _c : [];
40
+ if (/group by grupo0?(_sup)? /.test(sql + ' ')) {
41
+ var campoGrupo = (_e = (_d = /select (\w+)/.exec(sql)) === null || _d === void 0 ? void 0 : _d[1]) !== null && _e !== void 0 ? _e : 'grupo';
42
+ var alias = /as grupo,/.test(sql) ? 'grupo' : campoGrupo;
43
+ var grupos = {};
44
+ filas.forEach(fila => {
45
+ var grupo = String(fila[campoGrupo]);
46
+ grupos[grupo] = grupos[grupo] || [];
47
+ grupos[grupo].push(fila);
48
+ });
49
+ filas = Object.keys(grupos).sort().map(grupo => ({ [alias]: grupo, codigos: grupos[grupo] }));
50
+ }
51
+ return {
52
+ fetchAll: () => __awaiter(this, void 0, void 0, function* () { return ({ rowCount: filas.length, rows: filas, fields: [] }); }),
53
+ fetchUniqueRow: () => __awaiter(this, void 0, void 0, function* () { return ({ rowCount: 1, row: filas[0], fields: [] }); }),
54
+ };
55
+ }
56
+ }
57
+ const noReas = [
58
+ { operativo: 'etoi211', no_rea: 1, descripcion: 'ausente', grupo: 'ausencia', variable: 'v1', valor: '7', grupo0: 'encuestable', orden: 1 },
59
+ { operativo: 'etoi211', no_rea: 2, descripcion: 'rechazo', grupo: 'rechazo', variable: 'v1', valor: '8', grupo0: 'encuestable', orden: 2 },
60
+ { operativo: 'eah2022', no_rea: 1, descripcion: 'deshabitada', grupo: 'no encuestable', variable: 'v1', valor: '9', grupo0: 'no encuestable', orden: 1 },
61
+ ];
62
+ const noReasSup = [
63
+ { operativo: 'etoi211', no_rea_sup: 71, desc_norea_sup: 'no contacto', grupo_sup: 'sin contacto', variable_sup: 's1', valor_sup: '2', grupo0_sup: 'sup', orden: 1 },
64
+ { operativo: 'eah2022', no_rea_sup: 72, desc_norea_sup: 'otro', grupo_sup: 'otro', variable_sup: 's1', valor_sup: '3', grupo0_sup: 'sup', orden: 1 },
65
+ ];
66
+ const reas = [
67
+ { operativo: 'etoi211', rea: 1, descripcion: 'completa', condicion: 'v1 = 1 and v2 > 10', orden: 1, es_positiva: true, tarea: null },
68
+ { operativo: 'etoi211', rea: 2, descripcion: 'incompleta', condicion: 'v1 = 1', orden: 2, es_positiva: false, tarea: 'encu' },
69
+ { operativo: 'eah2022', rea: 1, descripcion: 'otra', condicion: 'v3 = 5', orden: 1, es_positiva: true, tarea: null },
70
+ ];
71
+ const reasSup = [
72
+ { operativo: 'etoi211', rea_sup: 1, descripcion: 'supervisada', condicion: 's1 = 1', orden: 1, es_positiva: true, tarea: 'supe' },
73
+ ];
74
+ const operativos = [{ con_rea_hogar: true, operativo: 'etoi211', config_sorteo: null }];
75
+ function baseConDatos() {
76
+ return new BaseFalsa({ no_rea: noReas, rea: reas, no_rea_sup: noReasSup, rea_sup: reasSup, operativos });
77
+ }
78
+ // evalúa una condición compilada (condicion_js) como lo hace el dispositivo
79
+ function evaluar(condicionJs, valores) {
80
+ var funcion = new Function('valores', 'helpers', 'return ' + condicionJs);
81
+ return funcion(valores, helpers_casilleros_1.helpersCasilleros);
82
+ }
83
+ (0, mocha_1.describe)('dmencu - caches de rea/no rea', () => {
84
+ (0, mocha_1.describe)('refreshCaches', () => {
85
+ (0, mocha_1.it)('carga rea, no rea y sus versiones _sup', () => __awaiter(void 0, void 0, void 0, function* () {
86
+ var be = (0, app_para_tests_1.crearAppParaTests)();
87
+ yield be.refreshCaches(baseConDatos());
88
+ assert.deepStrictEqual(be.caches.tableContent.no_rea, noReas);
89
+ assert.deepStrictEqual(be.caches.tableContent.rea, reas);
90
+ assert.deepStrictEqual(be.caches.tableContent.no_rea_sup, noReasSup);
91
+ assert.deepStrictEqual(be.caches.tableContent.rea_sup, reasSup);
92
+ }));
93
+ (0, mocha_1.it)('pide a la base las listas ordenadas por operativo y orden (define la prioridad de evaluación)', () => __awaiter(void 0, void 0, void 0, function* () {
94
+ var be = (0, app_para_tests_1.crearAppParaTests)();
95
+ var base = baseConDatos();
96
+ yield be.refreshCaches(base);
97
+ for (var tabla of TABLAS_REA_NO_REA) {
98
+ var consulta = base.consultas.find(sql => new RegExp(`from ${tabla} order by`).test(sql));
99
+ assert.ok(consulta, `no se consultó ${tabla}`);
100
+ assert.match(consulta, new RegExp(`order by operativo, orden, ${tabla}`));
101
+ }
102
+ }));
103
+ (0, mocha_1.it)('agrupa los no rea por grupo y por grupo0', () => __awaiter(void 0, void 0, void 0, function* () {
104
+ var be = (0, app_para_tests_1.crearAppParaTests)();
105
+ yield be.refreshCaches(baseConDatos());
106
+ assert.deepStrictEqual(be.caches.tableContent.no_rea_groups.map((g) => g.grupo), ['ausencia', 'no encuestable', 'rechazo']);
107
+ assert.deepStrictEqual(be.caches.tableContent.no_rea_groups0.map((g) => g.grupo), ['encuestable', 'no encuestable']);
108
+ }));
109
+ (0, mocha_1.it)('carga la configuración del operativo actual (con_rea_hogar)', () => __awaiter(void 0, void 0, void 0, function* () {
110
+ var be = (0, app_para_tests_1.crearAppParaTests)();
111
+ yield be.refreshCaches(baseConDatos());
112
+ assert.deepStrictEqual(be.caches.tableContent.conReaHogar, operativos[0]);
113
+ }));
114
+ (0, mocha_1.it)('al recargar reemplaza los datos anteriores', () => __awaiter(void 0, void 0, void 0, function* () {
115
+ var be = (0, app_para_tests_1.crearAppParaTests)();
116
+ var base = baseConDatos();
117
+ yield be.refreshCaches(base);
118
+ base.tablas.rea = [reas[0]];
119
+ yield be.refreshCaches(base);
120
+ assert.deepStrictEqual(be.caches.tableContent.rea, [reas[0]]);
121
+ }));
122
+ });
123
+ (0, mocha_1.describe)('refrescarEstructuraAlModificarTabla (envuelve table_record_save y table_record_delete)', () => {
124
+ function prepararRefrescador() {
125
+ var eventos = [];
126
+ var clientesRefrescados = [];
127
+ var be = {
128
+ caches: { timestampEstructura: 0 },
129
+ refreshCaches: (client) => __awaiter(this, void 0, void 0, function* () {
130
+ eventos.push('refrescar');
131
+ clientesRefrescados.push(client);
132
+ }),
133
+ };
134
+ var llamadas = [];
135
+ var guardar = (_context, parameters, extra) => __awaiter(this, void 0, void 0, function* () {
136
+ eventos.push('guardar');
137
+ llamadas.push({ tabla: parameters.table, extra });
138
+ return { guardado: parameters.table };
139
+ });
140
+ return { be, eventos, clientesRefrescados, llamadas, guardar };
141
+ }
142
+ for (const tabla of TABLAS_REA_NO_REA) {
143
+ (0, mocha_1.it)(`al modificar ${tabla} recarga las caches después de guardar y cambia la estructura`, () => __awaiter(void 0, void 0, void 0, function* () {
144
+ var { be, eventos, clientesRefrescados, guardar } = prepararRefrescador();
145
+ var client = new BaseFalsa({});
146
+ var resultado = yield (0, app_dmencu_1.refrescarEstructuraAlModificarTabla)(be, guardar)({ client }, { table: tabla });
147
+ assert.deepStrictEqual(resultado, { guardado: tabla });
148
+ assert.deepStrictEqual(eventos, ['guardar', 'refrescar']);
149
+ assert.strictEqual(clientesRefrescados[0], client, 'debe recargar con el mismo cliente (misma transacción)');
150
+ assert.ok(be.caches.timestampEstructura > 0);
151
+ }));
152
+ }
153
+ for (const tabla of ['casilleros', 'semanas']) {
154
+ (0, mocha_1.it)(`al modificar ${tabla} cambia la estructura sin recargar las caches de rea`, () => __awaiter(void 0, void 0, void 0, function* () {
155
+ var { be, eventos, guardar } = prepararRefrescador();
156
+ yield (0, app_dmencu_1.refrescarEstructuraAlModificarTabla)(be, guardar)({ client: new BaseFalsa({}) }, { table: tabla });
157
+ assert.deepStrictEqual(eventos, ['guardar']);
158
+ assert.ok(be.caches.timestampEstructura > 0);
159
+ }));
160
+ }
161
+ (0, mocha_1.it)('al modificar otras tablas no toca la estructura ni las caches', () => __awaiter(void 0, void 0, void 0, function* () {
162
+ var { be, eventos, guardar } = prepararRefrescador();
163
+ yield (0, app_dmencu_1.refrescarEstructuraAlModificarTabla)(be, guardar)({ client: new BaseFalsa({}) }, { table: 'usuarios' });
164
+ assert.deepStrictEqual(eventos, ['guardar']);
165
+ assert.strictEqual(be.caches.timestampEstructura, 0);
166
+ }));
167
+ (0, mocha_1.it)('si falla el guardado no recarga ni cambia la estructura', () => __awaiter(void 0, void 0, void 0, function* () {
168
+ var { be, eventos } = prepararRefrescador();
169
+ var guardarConError = (_context, _parameters) => __awaiter(void 0, void 0, void 0, function* () {
170
+ eventos.push('guardar');
171
+ throw new Error('error al guardar');
172
+ });
173
+ yield assert.rejects((0, app_dmencu_1.refrescarEstructuraAlModificarTabla)(be, guardarConError)({ client: new BaseFalsa({}) }, { table: 'rea' }), /error al guardar/);
174
+ assert.deepStrictEqual(eventos, ['guardar']);
175
+ assert.strictEqual(be.caches.timestampEstructura, 0);
176
+ }));
177
+ (0, mocha_1.it)('pasa a la función original los argumentos extra (files/opts de table_record_save)', () => __awaiter(void 0, void 0, void 0, function* () {
178
+ var { be, llamadas, guardar } = prepararRefrescador();
179
+ var extra = { files: [] };
180
+ yield (0, app_dmencu_1.refrescarEstructuraAlModificarTabla)(be, guardar)({ client: new BaseFalsa({}) }, { table: 'no_rea' }, extra);
181
+ assert.strictEqual(llamadas[0].extra, extra);
182
+ }));
183
+ });
184
+ (0, mocha_1.describe)('reasNoReasDelOperativo (rea/no rea en la estructura que recibe el dispositivo)', () => {
185
+ const tableContent = { no_rea: noReas, no_rea_sup: noReasSup, rea: reas, rea_sup: reasSup };
186
+ (0, mocha_1.it)('filtra cada lista por operativo', () => {
187
+ var resultado = (0, procedures_dmencu_1.reasNoReasDelOperativo)(tableContent, 'etoi211');
188
+ assert.deepStrictEqual(resultado.noReas, [noReas[0], noReas[1]]);
189
+ assert.deepStrictEqual(resultado.noReasSup, [noReasSup[0]]);
190
+ assert.deepStrictEqual(resultado.reas.map(rea => rea.rea), [1, 2]);
191
+ assert.deepStrictEqual(resultado.reasSup.map(reaSup => reaSup.rea_sup), [1]);
192
+ });
193
+ (0, mocha_1.it)('conserva el orden de las caches (que viene ordenado por orden)', () => {
194
+ var resultado = (0, procedures_dmencu_1.reasNoReasDelOperativo)(Object.assign(Object.assign({}, tableContent), { rea: [reas[1], reas[0]] }), 'etoi211');
195
+ assert.deepStrictEqual(resultado.reas.map(rea => rea.rea), [2, 1]);
196
+ });
197
+ (0, mocha_1.it)('compila las condiciones de rea a js evaluable en el dispositivo', () => {
198
+ var [completa, incompleta] = (0, procedures_dmencu_1.reasNoReasDelOperativo)(tableContent, 'etoi211').reas;
199
+ assert.strictEqual(evaluar(completa.condicion_js, { v1: 1, v2: 11 }), true);
200
+ assert.strictEqual(evaluar(completa.condicion_js, { v1: 1, v2: 5 }), false);
201
+ assert.strictEqual(evaluar(incompleta.condicion_js, { v1: 1 }), true);
202
+ assert.strictEqual(evaluar(incompleta.condicion_js, { v1: 2 }), false);
203
+ });
204
+ (0, mocha_1.it)('compila las condiciones de rea_sup', () => {
205
+ var [supervisada] = (0, procedures_dmencu_1.reasNoReasDelOperativo)(tableContent, 'etoi211').reasSup;
206
+ assert.strictEqual(evaluar(supervisada.condicion_js, { s1: 1 }), true);
207
+ assert.strictEqual(evaluar(supervisada.condicion_js, { s1: 2 }), false);
208
+ });
209
+ (0, mocha_1.it)('las variables sin cargar se toman como 0 (no rompen la evaluación)', () => {
210
+ var [completa] = (0, procedures_dmencu_1.reasNoReasDelOperativo)(tableContent, 'etoi211').reas;
211
+ assert.strictEqual(evaluar(completa.condicion_js, {}), false);
212
+ });
213
+ (0, mocha_1.it)('no modifica las caches', () => {
214
+ var antes = JSON.stringify(tableContent);
215
+ (0, procedures_dmencu_1.reasNoReasDelOperativo)(tableContent, 'etoi211');
216
+ assert.strictEqual(JSON.stringify(tableContent), antes);
217
+ });
218
+ (0, mocha_1.it)('si las caches no se cargaron devuelve listas vacías', () => {
219
+ assert.deepStrictEqual((0, procedures_dmencu_1.reasNoReasDelOperativo)({}, 'etoi211'), { noReas: [], noReasSup: [], reas: [], reasSup: [] });
220
+ });
221
+ });
222
+ (0, mocha_1.describe)('de punta a punta: modificar una rea llega a la estructura del dispositivo', () => {
223
+ (0, mocha_1.it)('después de guardar una rea, la estructura del operativo la incluye compilada', () => __awaiter(void 0, void 0, void 0, function* () {
224
+ var be = (0, app_para_tests_1.crearAppParaTests)();
225
+ var base = baseConDatos();
226
+ yield be.refreshCaches(base);
227
+ var timestampAnterior = be.caches.timestampEstructura;
228
+ var nuevaRea = { operativo: 'etoi211', rea: 3, descripcion: 'nueva', condicion: 'v4 = 2', orden: 3, es_positiva: true, tarea: null };
229
+ var guardar = (_context, _parameters) => __awaiter(void 0, void 0, void 0, function* () {
230
+ base.tablas.rea = [...reas, nuevaRea];
231
+ return 'ok';
232
+ });
233
+ yield new Promise(resolve => setTimeout(resolve, 2));
234
+ yield (0, app_dmencu_1.refrescarEstructuraAlModificarTabla)(be, guardar)({ client: base }, { table: 'rea' });
235
+ assert.ok(be.caches.timestampEstructura > timestampAnterior, 'los dispositivos deben recibir la estructura nueva');
236
+ var reasOP1 = (0, procedures_dmencu_1.reasNoReasDelOperativo)(be.caches.tableContent, 'etoi211').reas;
237
+ assert.deepStrictEqual(reasOP1.map(rea => rea.rea), [1, 2, 3]);
238
+ assert.strictEqual(evaluar(reasOP1[2].condicion_js, { v4: 2 }), true);
239
+ }));
240
+ });
241
+ });
242
+ });
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYWNoZXMtcmVhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvdGVzdC1jYWNoZXMtcmVhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsaUNBQXFDO0lBRXJDLHNDQUF1QztJQUV2QyxxREFBeUg7SUFDekgsbUVBQXFFO0lBQ3JFLHVFQUFtRTtJQUVuRSxxREFBcUQ7SUFFckQsc0dBQXNHO0lBQ3RHLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUlyRSw4RUFBOEU7SUFDOUUsTUFBTSxTQUFTO1FBRVgsWUFBbUIsTUFBbUM7WUFBbkMsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7WUFEdEQsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUNpQyxDQUFDO1FBQzNELEtBQUssQ0FBQyxHQUFXOztZQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksS0FBSyxHQUFHLE1BQUEsTUFBQSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQywwQ0FBRyxDQUFDLENBQUMsbUNBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLFVBQVUsR0FBRyxNQUFBLE1BQUEsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsMENBQUcsQ0FBQyxDQUFDLG1DQUFJLE9BQU8sQ0FBQztnQkFDMUQsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FB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QUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcblxuaW1wb3J0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0Jyk7XG5cbmltcG9ydCB7IENsaWVudGVEYiwgQ29uc3VsdGFEYiwgcmVmcmVzY2FyRXN0cnVjdHVyYUFsTW9kaWZpY2FyVGFibGEsIFJlZnJlc2NhZG9yRXN0cnVjdHVyYSB9IGZyb20gJy4uL3NlcnZlci9hcHAtZG1lbmN1JztcbmltcG9ydCB7IHJlYXNOb1JlYXNEZWxPcGVyYXRpdm8gfSBmcm9tICcuLi9zZXJ2ZXIvcHJvY2VkdXJlcy1kbWVuY3UnO1xuaW1wb3J0IHsgaGVscGVyc0Nhc2lsbGVyb3MgfSBmcm9tICcuLi91bmxvZ2dlZC9oZWxwZXJzLWNhc2lsbGVyb3MnO1xuaW1wb3J0IHR5cGUgeyBOb1JlYSwgTm9SZWFTdXAsIFJlYSwgUmVhU3VwLCBWYWxvciB9IGZyb20gJy4uL3VubG9nZ2VkL3RpcG9zJztcbmltcG9ydCB7IGNyZWFyQXBwUGFyYVRlc3RzIH0gZnJvbSAnLi9hcHAtcGFyYS10ZXN0cyc7XG5cbi8vIHNlIGxpc3RhbiBhY8OhICh5IG5vIHNlIGltcG9ydGEgVEFCTEFTX1JFQV9OT19SRUEpIHBhcmEgcXVlIGVsIHRlc3QgZmFsbGUgc2kgYWxndW5hIGRlamEgZGUgdHJhdGFyc2VcbmNvbnN0IFRBQkxBU19SRUFfTk9fUkVBID0gWydyZWEnLCAnbm9fcmVhJywgJ3JlYV9zdXAnLCAnbm9fcmVhX3N1cCddO1xuXG50eXBlIEZpbGEgPSB7IFtjYW1wbzogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCBGaWxhW10gfTtcblxuLy8gQmFzZSBkZSBkYXRvcyBlbiBtZW1vcmlhOiBjYWRhIGNvbnN1bHRhIHNlIHJlc3VlbHZlIHBvciBsYSB0YWJsYSBkZWwgXCJmcm9tXCJcbmNsYXNzIEJhc2VGYWxzYSBpbXBsZW1lbnRzIENsaWVudGVEYiB7XG4gICAgY29uc3VsdGFzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0YWJsYXM6IHsgW3RhYmxhOiBzdHJpbmddOiBGaWxhW10gfSkgeyB9XG4gICAgcXVlcnkoc3FsOiBzdHJpbmcpOiBDb25zdWx0YURiIHtcbiAgICAgICAgdGhpcy5jb25zdWx0YXMucHVzaChzcWwpO1xuICAgICAgICB2YXIgdGFibGEgPSAvZnJvbSAoXFx3KykvLmV4ZWMoc3FsKT8uWzFdID8/ICcnO1xuICAgICAgICB2YXIgZmlsYXMgPSB0aGlzLnRhYmxhc1t0YWJsYV0gPz8gW107XG4gICAgICAgIGlmICgvZ3JvdXAgYnkgZ3J1cG8wPyhfc3VwKT8gLy50ZXN0KHNxbCArICcgJykpIHtcbiAgICAgICAgICAgIHZhciBjYW1wb0dydXBvID0gL3NlbGVjdCAoXFx3KykvLmV4ZWMoc3FsKT8uWzFdID8/ICdncnVwbyc7XG4gICAgICAgICAgICB2YXIgYWxpYXMgPSAvYXMgZ3J1cG8sLy50ZXN0KHNxbCkgPyAnZ3J1cG8nIDogY2FtcG9HcnVwbztcbiAgICAgICAgICAgIHZhciBncnVwb3M6IHsgW2dydXBvOiBzdHJpbmddOiBGaWxhW10gfSA9IHt9O1xuICAgICAgICAgICAgZmlsYXMuZm9yRWFjaChmaWxhID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgZ3J1cG8gPSBTdHJpbmcoZmlsYVtjYW1wb0dydXBvXSk7XG4gICAgICAgICAgICAgICAgZ3J1cG9zW2dydXBvXSA9IGdydXBvc1tncnVwb10gfHwgW107XG4gICAgICAgICAgICAgICAgZ3J1cG9zW2dydXBvXS5wdXNoKGZpbGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaWxhcyA9IE9iamVjdC5rZXlzKGdydXBvcykuc29ydCgpLm1hcChncnVwbyA9PiAoeyBbYWxpYXNdOiBncnVwbywgY29kaWdvczogZ3J1cG9zW2dydXBvXSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZldGNoQWxsOiBhc3luYyAoKSA9PiAoeyByb3dDb3VudDogZmlsYXMubGVuZ3RoLCByb3dzOiBmaWxhcywgZmllbGRzOiBbXSB9KSxcbiAgICAgICAgICAgIGZldGNoVW5pcXVlUm93OiBhc3luYyAoKSA9PiAoeyByb3dDb3VudDogMSwgcm93OiBmaWxhc1swXSwgZmllbGRzOiBbXSB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNvbnN0IG5vUmVhczogTm9SZWFbXSA9IFtcbiAgICB7IG9wZXJhdGl2bzogJ2V0b2kyMTEnLCBub19yZWE6IDEsIGRlc2NyaXBjaW9uOiAnYXVzZW50ZScsIGdydXBvOiAnYXVzZW5jaWEnLCB2YXJpYWJsZTogJ3YxJywgdmFsb3I6ICc3JywgZ3J1cG8wOiAnZW5jdWVzdGFibGUnLCBvcmRlbjogMSB9LFxuICAgIHsgb3BlcmF0aXZvOiAnZXRvaTIxMScsIG5vX3JlYTogMiwgZGVzY3JpcGNpb246ICdyZWNoYXpvJywgZ3J1cG86ICdyZWNoYXpvJywgdmFyaWFibGU6ICd2MScsIHZhbG9yOiAnOCcsIGdydXBvMDogJ2VuY3Vlc3RhYmxlJywgb3JkZW46IDIgfSxcbiAgICB7IG9wZXJhdGl2bzogJ2VhaDIwMjInLCBub19yZWE6IDEsIGRlc2NyaXBjaW9uOiAnZGVzaGFiaXRhZGEnLCBncnVwbzogJ25vIGVuY3Vlc3RhYmxlJywgdmFyaWFibGU6ICd2MScsIHZhbG9yOiAnOScsIGdydXBvMDogJ25vIGVuY3Vlc3RhYmxlJywgb3JkZW46IDEgfSxcbl07XG5jb25zdCBub1JlYXNTdXA6IE5vUmVhU3VwW10gPSBbXG4gICAgeyBvcGVyYXRpdm86ICdldG9pMjExJywgbm9fcmVhX3N1cDogNzEsIGRlc2Nfbm9yZWFfc3VwOiAnbm8gY29udGFjdG8nLCBncnVwb19zdXA6ICdzaW4gY29udGFjdG8nLCB2YXJpYWJsZV9zdXA6ICdzMScsIHZhbG9yX3N1cDogJzInLCBncnVwbzBfc3VwOiAnc3VwJywgb3JkZW46IDEgfSxcbiAgICB7IG9wZXJhdGl2bzogJ2VhaDIwMjInLCBub19yZWFfc3VwOiA3MiwgZGVzY19ub3JlYV9zdXA6ICdvdHJvJywgZ3J1cG9fc3VwOiAnb3RybycsIHZhcmlhYmxlX3N1cDogJ3MxJywgdmFsb3Jfc3VwOiAnMycsIGdydXBvMF9zdXA6ICdzdXAnLCBvcmRlbjogMSB9LFxuXTtcbmNvbnN0IHJlYXM6IE9taXQ8UmVhLCAnY29uZGljaW9uX2pzJz5bXSA9IFtcbiAgICB7IG9wZXJhdGl2bzogJ2V0b2kyMTEnLCByZWE6IDEsIGRlc2NyaXBjaW9uOiAnY29tcGxldGEnLCBjb25kaWNpb246ICd2MSA9IDEgYW5kIHYyID4gMTAnLCBvcmRlbjogMSwgZXNfcG9zaXRpdmE6IHRydWUsIHRhcmVhOiBudWxsIH0sXG4gICAgeyBvcGVyYXRpdm86ICdldG9pMjExJywgcmVhOiAyLCBkZXNjcmlwY2lvbjogJ2luY29tcGxldGEnLCBjb25kaWNpb246ICd2MSA9IDEnLCBvcmRlbjogMiwgZXNfcG9zaXRpdmE6IGZhbHNlLCB0YXJlYTogJ2VuY3UnIH0sXG4gICAgeyBvcGVyYXRpdm86ICdlYWgyMDIyJywgcmVhOiAxLCBkZXNjcmlwY2lvbjogJ290cmEnLCBjb25kaWNpb246ICd2MyA9IDUnLCBvcmRlbjogMSwgZXNfcG9zaXRpdmE6IHRydWUsIHRhcmVhOiBudWxsIH0sXG5dO1xuY29uc3QgcmVhc1N1cDogT21pdDxSZWFTdXAsICdjb25kaWNpb25fanMnPltdID0gW1xuICAgIHsgb3BlcmF0aXZvOiAnZXRvaTIxMScsIHJlYV9zdXA6IDEsIGRlc2NyaXBjaW9uOiAnc3VwZXJ2aXNhZGEnLCBjb25kaWNpb246ICdzMSA9IDEnLCBvcmRlbjogMSwgZXNfcG9zaXRpdmE6IHRydWUsIHRhcmVhOiAnc3VwZScgfSxcbl07XG5jb25zdCBvcGVyYXRpdm9zOiBGaWxhW10gPSBbeyBjb25fcmVhX2hvZ2FyOiB0cnVlLCBvcGVyYXRpdm86ICdldG9pMjExJywgY29uZmlnX3NvcnRlbzogbnVsbCB9XTtcblxuZnVuY3Rpb24gYmFzZUNvbkRhdG9zKCkge1xuICAgIHJldHVybiBuZXcgQmFzZUZhbHNhKHsgbm9fcmVhOiBub1JlYXMsIHJlYTogcmVhcywgbm9fcmVhX3N1cDogbm9SZWFzU3VwLCByZWFfc3VwOiByZWFzU3VwLCBvcGVyYXRpdm9zIH0pO1xufVxuXG4vLyBldmFsw7phIHVuYSBjb25kaWNpw7NuIGNvbXBpbGFkYSAoY29uZGljaW9uX2pzKSBjb21vIGxvIGhhY2UgZWwgZGlzcG9zaXRpdm9cbmZ1bmN0aW9uIGV2YWx1YXIoY29uZGljaW9uSnM6IHN0cmluZywgdmFsb3JlczogUmVjb3JkPHN0cmluZywgVmFsb3I+KTogYm9vbGVhbiB7XG4gICAgdmFyIGZ1bmNpb24gPSBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJyArIGNvbmRpY2lvbkpzKTtcbiAgICByZXR1cm4gZnVuY2lvbih2YWxvcmVzLCBoZWxwZXJzQ2FzaWxsZXJvcyk7XG59XG5cbmRlc2NyaWJlKCdkbWVuY3UgLSBjYWNoZXMgZGUgcmVhL25vIHJlYScsICgpID0+IHtcblxuICAgIGRlc2NyaWJlKCdyZWZyZXNoQ2FjaGVzJywgKCkgPT4ge1xuICAgICAgICBpdCgnY2FyZ2EgcmVhLCBubyByZWEgeSBzdXMgdmVyc2lvbmVzIF9zdXAnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgYmUgPSBjcmVhckFwcFBhcmFUZXN0cygpO1xuICAgICAgICAgICAgYXdhaXQgYmUucmVmcmVzaENhY2hlcyhiYXNlQ29uRGF0b3MoKSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhLCBub1JlYXMpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChiZS5jYWNoZXMudGFibGVDb250ZW50LnJlYSwgcmVhcyk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhX3N1cCwgbm9SZWFzU3VwKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYmUuY2FjaGVzLnRhYmxlQ29udGVudC5yZWFfc3VwLCByZWFzU3VwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdwaWRlIGEgbGEgYmFzZSBsYXMgbGlzdGFzIG9yZGVuYWRhcyBwb3Igb3BlcmF0aXZvIHkgb3JkZW4gKGRlZmluZSBsYSBwcmlvcmlkYWQgZGUgZXZhbHVhY2nDs24pJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGJlID0gY3JlYXJBcHBQYXJhVGVzdHMoKTtcbiAgICAgICAgICAgIHZhciBiYXNlID0gYmFzZUNvbkRhdG9zKCk7XG4gICAgICAgICAgICBhd2FpdCBiZS5yZWZyZXNoQ2FjaGVzKGJhc2UpO1xuICAgICAgICAgICAgZm9yICh2YXIgdGFibGEgb2YgVEFCTEFTX1JFQV9OT19SRUEpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29uc3VsdGEgPSBiYXNlLmNvbnN1bHRhcy5maW5kKHNxbCA9PiBuZXcgUmVnRXhwKGBmcm9tICR7dGFibGF9IG9yZGVyIGJ5YCkudGVzdChzcWwpKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQub2soY29uc3VsdGEsIGBubyBzZSBjb25zdWx0w7MgJHt0YWJsYX1gKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQubWF0Y2goY29uc3VsdGEsIG5ldyBSZWdFeHAoYG9yZGVyIGJ5IG9wZXJhdGl2bywgb3JkZW4sICR7dGFibGF9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2FncnVwYSBsb3Mgbm8gcmVhIHBvciBncnVwbyB5IHBvciBncnVwbzAnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgYmUgPSBjcmVhckFwcFBhcmFUZXN0cygpO1xuICAgICAgICAgICAgYXdhaXQgYmUucmVmcmVzaENhY2hlcyhiYXNlQ29uRGF0b3MoKSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICAgICAgICAgIGJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhX2dyb3Vwcy5tYXAoKGc6IEZpbGEpID0+IGcuZ3J1cG8pLFxuICAgICAgICAgICAgICAgIFsnYXVzZW5jaWEnLCAnbm8gZW5jdWVzdGFibGUnLCAncmVjaGF6byddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICAgICAgICBiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYV9ncm91cHMwLm1hcCgoZzogRmlsYSkgPT4gZy5ncnVwbyksXG4gICAgICAgICAgICAgICAgWydlbmN1ZXN0YWJsZScsICdubyBlbmN1ZXN0YWJsZSddXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhcmdhIGxhIGNvbmZpZ3VyYWNpw7NuIGRlbCBvcGVyYXRpdm8gYWN0dWFsIChjb25fcmVhX2hvZ2FyKScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHZhciBiZSA9IGNyZWFyQXBwUGFyYVRlc3RzKCk7XG4gICAgICAgICAgICBhd2FpdCBiZS5yZWZyZXNoQ2FjaGVzKGJhc2VDb25EYXRvcygpKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYmUuY2FjaGVzLnRhYmxlQ29udGVudC5jb25SZWFIb2dhciwgb3BlcmF0aXZvc1swXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnYWwgcmVjYXJnYXIgcmVlbXBsYXphIGxvcyBkYXRvcyBhbnRlcmlvcmVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGJlID0gY3JlYXJBcHBQYXJhVGVzdHMoKTtcbiAgICAgICAgICAgIHZhciBiYXNlID0gYmFzZUNvbkRhdG9zKCk7XG4gICAgICAgICAgICBhd2FpdCBiZS5yZWZyZXNoQ2FjaGVzKGJhc2UpO1xuICAgICAgICAgICAgYmFzZS50YWJsYXMucmVhID0gW3JlYXNbMF1dO1xuICAgICAgICAgICAgYXdhaXQgYmUucmVmcmVzaENhY2hlcyhiYXNlKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYmUuY2FjaGVzLnRhYmxlQ29udGVudC5yZWEsIFtyZWFzWzBdXSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3JlZnJlc2NhckVzdHJ1Y3R1cmFBbE1vZGlmaWNhclRhYmxhIChlbnZ1ZWx2ZSB0YWJsZV9yZWNvcmRfc2F2ZSB5IHRhYmxlX3JlY29yZF9kZWxldGUpJywgKCkgPT4ge1xuICAgICAgICB0eXBlIENvbnRleHRvRmFsc28gPSB7IGNsaWVudDogQ2xpZW50ZURiIH07XG4gICAgICAgIHR5cGUgTGxhbWFkYSA9IHsgdGFibGE6IHN0cmluZywgZXh0cmE6IG9iamVjdCB8IHVuZGVmaW5lZCB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHByZXBhcmFyUmVmcmVzY2Fkb3IoKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRvczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIHZhciBjbGllbnRlc1JlZnJlc2NhZG9zOiBDbGllbnRlRGJbXSA9IFtdO1xuICAgICAgICAgICAgdmFyIGJlOiBSZWZyZXNjYWRvckVzdHJ1Y3R1cmEgPSB7XG4gICAgICAgICAgICAgICAgY2FjaGVzOiB7IHRpbWVzdGFtcEVzdHJ1Y3R1cmE6IDAgfSxcbiAgICAgICAgICAgICAgICByZWZyZXNoQ2FjaGVzOiBhc3luYyAoY2xpZW50OiBDbGllbnRlRGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRvcy5wdXNoKCdyZWZyZXNjYXInKTtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50ZXNSZWZyZXNjYWRvcy5wdXNoKGNsaWVudCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgbGxhbWFkYXM6IExsYW1hZGFbXSA9IFtdO1xuICAgICAgICAgICAgdmFyIGd1YXJkYXIgPSBhc3luYyAoX2NvbnRleHQ6IENvbnRleHRvRmFsc28sIHBhcmFtZXRlcnM6IHsgdGFibGU6IHN0cmluZyB9LCBleHRyYT86IG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50b3MucHVzaCgnZ3VhcmRhcicpO1xuICAgICAgICAgICAgICAgIGxsYW1hZGFzLnB1c2goeyB0YWJsYTogcGFyYW1ldGVycy50YWJsZSwgZXh0cmEgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZ3VhcmRhZG86IHBhcmFtZXRlcnMudGFibGUgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4geyBiZSwgZXZlbnRvcywgY2xpZW50ZXNSZWZyZXNjYWRvcywgbGxhbWFkYXMsIGd1YXJkYXIgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdGFibGEgb2YgVEFCTEFTX1JFQV9OT19SRUEpIHtcbiAgICAgICAgICAgIGl0KGBhbCBtb2RpZmljYXIgJHt0YWJsYX0gcmVjYXJnYSBsYXMgY2FjaGVzIGRlc3B1w6lzIGRlIGd1YXJkYXIgeSBjYW1iaWEgbGEgZXN0cnVjdHVyYWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgeyBiZSwgZXZlbnRvcywgY2xpZW50ZXNSZWZyZXNjYWRvcywgZ3VhcmRhciB9ID0gcHJlcGFyYXJSZWZyZXNjYWRvcigpO1xuICAgICAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXcgQmFzZUZhbHNhKHt9KTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0YWRvID0gYXdhaXQgcmVmcmVzY2FyRXN0cnVjdHVyYUFsTW9kaWZpY2FyVGFibGEoYmUsIGd1YXJkYXIpKHsgY2xpZW50IH0sIHsgdGFibGU6IHRhYmxhIH0pO1xuICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0YWRvLCB7IGd1YXJkYWRvOiB0YWJsYSB9KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGV2ZW50b3MsIFsnZ3VhcmRhcicsICdyZWZyZXNjYXInXSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNsaWVudGVzUmVmcmVzY2Fkb3NbMF0sIGNsaWVudCwgJ2RlYmUgcmVjYXJnYXIgY29uIGVsIG1pc21vIGNsaWVudGUgKG1pc21hIHRyYW5zYWNjacOzbiknKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQub2soYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEgPiAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdGFibGEgb2YgWydjYXNpbGxlcm9zJywgJ3NlbWFuYXMnXSkge1xuICAgICAgICAgICAgaXQoYGFsIG1vZGlmaWNhciAke3RhYmxhfSBjYW1iaWEgbGEgZXN0cnVjdHVyYSBzaW4gcmVjYXJnYXIgbGFzIGNhY2hlcyBkZSByZWFgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIHsgYmUsIGV2ZW50b3MsIGd1YXJkYXIgfSA9IHByZXBhcmFyUmVmcmVzY2Fkb3IoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWZyZXNjYXJFc3RydWN0dXJhQWxNb2RpZmljYXJUYWJsYShiZSwgZ3VhcmRhcikoeyBjbGllbnQ6IG5ldyBCYXNlRmFsc2Eoe30pIH0sIHsgdGFibGU6IHRhYmxhIH0pO1xuICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXZlbnRvcywgWydndWFyZGFyJ10pO1xuICAgICAgICAgICAgICAgIGFzc2VydC5vayhiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSA+IDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaXQoJ2FsIG1vZGlmaWNhciBvdHJhcyB0YWJsYXMgbm8gdG9jYSBsYSBlc3RydWN0dXJhIG5pIGxhcyBjYWNoZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyBiZSwgZXZlbnRvcywgZ3VhcmRhciB9ID0gcHJlcGFyYXJSZWZyZXNjYWRvcigpO1xuICAgICAgICAgICAgYXdhaXQgcmVmcmVzY2FyRXN0cnVjdHVyYUFsTW9kaWZpY2FyVGFibGEoYmUsIGd1YXJkYXIpKHsgY2xpZW50OiBuZXcgQmFzZUZhbHNhKHt9KSB9LCB7IHRhYmxlOiAndXN1YXJpb3MnIH0pO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChldmVudG9zLCBbJ2d1YXJkYXInXSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3NpIGZhbGxhIGVsIGd1YXJkYWRvIG5vIHJlY2FyZ2EgbmkgY2FtYmlhIGxhIGVzdHJ1Y3R1cmEnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyBiZSwgZXZlbnRvcyB9ID0gcHJlcGFyYXJSZWZyZXNjYWRvcigpO1xuICAgICAgICAgICAgdmFyIGd1YXJkYXJDb25FcnJvciA9IGFzeW5jIChfY29udGV4dDogQ29udGV4dG9GYWxzbywgX3BhcmFtZXRlcnM6IHsgdGFibGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnRvcy5wdXNoKCdndWFyZGFyJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBhbCBndWFyZGFyJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICAgICAgICAgcmVmcmVzY2FyRXN0cnVjdHVyYUFsTW9kaWZpY2FyVGFibGEoYmUsIGd1YXJkYXJDb25FcnJvcikoeyBjbGllbnQ6IG5ldyBCYXNlRmFsc2Eoe30pIH0sIHsgdGFibGU6ICdyZWEnIH0pLFxuICAgICAgICAgICAgICAgIC9lcnJvciBhbCBndWFyZGFyL1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXZlbnRvcywgWydndWFyZGFyJ10pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdwYXNhIGEgbGEgZnVuY2nDs24gb3JpZ2luYWwgbG9zIGFyZ3VtZW50b3MgZXh0cmEgKGZpbGVzL29wdHMgZGUgdGFibGVfcmVjb3JkX3NhdmUpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHsgYmUsIGxsYW1hZGFzLCBndWFyZGFyIH0gPSBwcmVwYXJhclJlZnJlc2NhZG9yKCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgICAgICAgYXdhaXQgcmVmcmVzY2FyRXN0cnVjdHVyYUFsTW9kaWZpY2FyVGFibGEoYmUsIGd1YXJkYXIpKHsgY2xpZW50OiBuZXcgQmFzZUZhbHNhKHt9KSB9LCB7IHRhYmxlOiAnbm9fcmVhJyB9LCBleHRyYSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGxhbWFkYXNbMF0uZXh0cmEsIGV4dHJhKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncmVhc05vUmVhc0RlbE9wZXJhdGl2byAocmVhL25vIHJlYSBlbiBsYSBlc3RydWN0dXJhIHF1ZSByZWNpYmUgZWwgZGlzcG9zaXRpdm8pJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB7IG5vX3JlYTogbm9SZWFzLCBub19yZWFfc3VwOiBub1JlYXNTdXAsIHJlYTogcmVhcywgcmVhX3N1cDogcmVhc1N1cCB9O1xuXG4gICAgICAgIGl0KCdmaWx0cmEgY2FkYSBsaXN0YSBwb3Igb3BlcmF0aXZvJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHJlc3VsdGFkbyA9IHJlYXNOb1JlYXNEZWxPcGVyYXRpdm8odGFibGVDb250ZW50LCAnZXRvaTIxMScpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHRhZG8ubm9SZWFzLCBbbm9SZWFzWzBdLCBub1JlYXNbMV1dKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0YWRvLm5vUmVhc1N1cCwgW25vUmVhc1N1cFswXV0pO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHRhZG8ucmVhcy5tYXAocmVhID0+IHJlYS5yZWEpLCBbMSwgMl0pO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHRhZG8ucmVhc1N1cC5tYXAocmVhU3VwID0+IHJlYVN1cC5yZWFfc3VwKSwgWzFdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdjb25zZXJ2YSBlbCBvcmRlbiBkZSBsYXMgY2FjaGVzIChxdWUgdmllbmUgb3JkZW5hZG8gcG9yIG9yZGVuKScsICgpID0+IHtcbiAgICAgICAgICAgIHZhciByZXN1bHRhZG8gPSByZWFzTm9SZWFzRGVsT3BlcmF0aXZvKHsgLi4udGFibGVDb250ZW50LCByZWE6IFtyZWFzWzFdLCByZWFzWzBdXSB9LCAnZXRvaTIxMScpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHRhZG8ucmVhcy5tYXAocmVhID0+IHJlYS5yZWEpLCBbMiwgMV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NvbXBpbGEgbGFzIGNvbmRpY2lvbmVzIGRlIHJlYSBhIGpzIGV2YWx1YWJsZSBlbiBlbCBkaXNwb3NpdGl2bycsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBbY29tcGxldGEsIGluY29tcGxldGFdID0gcmVhc05vUmVhc0RlbE9wZXJhdGl2byh0YWJsZUNvbnRlbnQsICdldG9pMjExJykucmVhcztcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChldmFsdWFyKGNvbXBsZXRhLmNvbmRpY2lvbl9qcywgeyB2MTogMSwgdjI6IDExIH0pLCB0cnVlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChldmFsdWFyKGNvbXBsZXRhLmNvbmRpY2lvbl9qcywgeyB2MTogMSwgdjI6IDUgfSksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChldmFsdWFyKGluY29tcGxldGEuY29uZGljaW9uX2pzLCB7IHYxOiAxIH0pLCB0cnVlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChldmFsdWFyKGluY29tcGxldGEuY29uZGljaW9uX2pzLCB7IHYxOiAyIH0pLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY29tcGlsYSBsYXMgY29uZGljaW9uZXMgZGUgcmVhX3N1cCcsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBbc3VwZXJ2aXNhZGFdID0gcmVhc05vUmVhc0RlbE9wZXJhdGl2byh0YWJsZUNvbnRlbnQsICdldG9pMjExJykucmVhc1N1cDtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChldmFsdWFyKHN1cGVydmlzYWRhLmNvbmRpY2lvbl9qcywgeyBzMTogMSB9KSwgdHJ1ZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbHVhcihzdXBlcnZpc2FkYS5jb25kaWNpb25fanMsIHsgczE6IDIgfSksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdsYXMgdmFyaWFibGVzIHNpbiBjYXJnYXIgc2UgdG9tYW4gY29tbyAwIChubyByb21wZW4gbGEgZXZhbHVhY2nDs24pJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIFtjb21wbGV0YV0gPSByZWFzTm9SZWFzRGVsT3BlcmF0aXZvKHRhYmxlQ29udGVudCwgJ2V0b2kyMTEnKS5yZWFzO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV2YWx1YXIoY29tcGxldGEuY29uZGljaW9uX2pzLCB7fSksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdubyBtb2RpZmljYSBsYXMgY2FjaGVzJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGFudGVzID0gSlNPTi5zdHJpbmdpZnkodGFibGVDb250ZW50KTtcbiAgICAgICAgICAgIHJlYXNOb1JlYXNEZWxPcGVyYXRpdm8odGFibGVDb250ZW50LCAnZXRvaTIxMScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKEpTT04uc3RyaW5naWZ5KHRhYmxlQ29udGVudCksIGFudGVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaSBsYXMgY2FjaGVzIG5vIHNlIGNhcmdhcm9uIGRldnVlbHZlIGxpc3RhcyB2YWPDrWFzJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWFzTm9SZWFzRGVsT3BlcmF0aXZvKHt9LCAnZXRvaTIxMScpLCB7IG5vUmVhczogW10sIG5vUmVhc1N1cDogW10sIHJlYXM6IFtdLCByZWFzU3VwOiBbXSB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGUgcHVudGEgYSBwdW50YTogbW9kaWZpY2FyIHVuYSByZWEgbGxlZ2EgYSBsYSBlc3RydWN0dXJhIGRlbCBkaXNwb3NpdGl2bycsICgpID0+IHtcbiAgICAgICAgaXQoJ2Rlc3B1w6lzIGRlIGd1YXJkYXIgdW5hIHJlYSwgbGEgZXN0cnVjdHVyYSBkZWwgb3BlcmF0aXZvIGxhIGluY2x1eWUgY29tcGlsYWRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGJlID0gY3JlYXJBcHBQYXJhVGVzdHMoKTtcbiAgICAgICAgICAgIHZhciBiYXNlID0gYmFzZUNvbkRhdG9zKCk7XG4gICAgICAgICAgICBhd2FpdCBiZS5yZWZyZXNoQ2FjaGVzKGJhc2UpO1xuICAgICAgICAgICAgdmFyIHRpbWVzdGFtcEFudGVyaW9yID0gYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmE7XG4gICAgICAgICAgICB2YXIgbnVldmFSZWE6IE9taXQ8UmVhLCAnY29uZGljaW9uX2pzJz4gPSB7IG9wZXJhdGl2bzogJ2V0b2kyMTEnLCByZWE6IDMsIGRlc2NyaXBjaW9uOiAnbnVldmEnLCBjb25kaWNpb246ICd2NCA9IDInLCBvcmRlbjogMywgZXNfcG9zaXRpdmE6IHRydWUsIHRhcmVhOiBudWxsIH07XG4gICAgICAgICAgICB2YXIgZ3VhcmRhciA9IGFzeW5jIChfY29udGV4dDogeyBjbGllbnQ6IENsaWVudGVEYiB9LCBfcGFyYW1ldGVyczogeyB0YWJsZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBiYXNlLnRhYmxhcy5yZWEgPSBbLi4ucmVhcywgbnVldmFSZWFdO1xuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyKSk7XG4gICAgICAgICAgICBhd2FpdCByZWZyZXNjYXJFc3RydWN0dXJhQWxNb2RpZmljYXJUYWJsYShiZSwgZ3VhcmRhcikoeyBjbGllbnQ6IGJhc2UgfSwgeyB0YWJsZTogJ3JlYScgfSk7XG4gICAgICAgICAgICBhc3NlcnQub2soYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEgPiB0aW1lc3RhbXBBbnRlcmlvciwgJ2xvcyBkaXNwb3NpdGl2b3MgZGViZW4gcmVjaWJpciBsYSBlc3RydWN0dXJhIG51ZXZhJyk7XG4gICAgICAgICAgICB2YXIgcmVhc09QMSA9IHJlYXNOb1JlYXNEZWxPcGVyYXRpdm8oYmUuY2FjaGVzLnRhYmxlQ29udGVudCwgJ2V0b2kyMTEnKS5yZWFzO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWFzT1AxLm1hcChyZWEgPT4gcmVhLnJlYSksIFsxLCAyLCAzXSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbHVhcihyZWFzT1AxWzJdLmNvbmRpY2lvbl9qcywgeyB2NDogMiB9KSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,154 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "mocha", "node:assert", "../unlogged/helpers-casilleros"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const mocha_1 = require("mocha");
13
+ const assert = require("node:assert");
14
+ const helpers_casilleros_1 = require("../unlogged/helpers-casilleros");
15
+ const { funs } = helpers_casilleros_1.helpersCasilleros;
16
+ (0, mocha_1.describe)('dmencu - helpersCasilleros', () => {
17
+ (0, mocha_1.describe)('null2zero', () => {
18
+ (0, mocha_1.it)('convierte null y undefined en 0', () => {
19
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.null2zero(null), 0);
20
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.null2zero(undefined), 0);
21
+ });
22
+ (0, mocha_1.it)('deja intactos los demás valores (incluso 0, "" y false)', () => {
23
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.null2zero(5), 5);
24
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.null2zero(0), 0);
25
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.null2zero(''), '');
26
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.null2zero(false), false);
27
+ });
28
+ });
29
+ (0, mocha_1.describe)('div0err', () => {
30
+ (0, mocha_1.it)('divide normalmente', () => {
31
+ assert.strictEqual(helpers_casilleros_1.helpersCasilleros.div0err(10, 4, 'v1'), 2.5);
32
+ });
33
+ (0, mocha_1.it)('lanza error indicando la pk si el denominador es 0', () => {
34
+ assert.throws(() => helpers_casilleros_1.helpersCasilleros.div0err(10, 0, 'viv 7'), /Error en viv 7 division por cero de 10/);
35
+ });
36
+ });
37
+ (0, mocha_1.describe)('funs.blanco', () => {
38
+ (0, mocha_1.it)('null, undefined y "" son blanco', () => {
39
+ assert.strictEqual(funs.blanco(null), true);
40
+ assert.strictEqual(funs.blanco(undefined), true);
41
+ assert.strictEqual(funs.blanco(''), true);
42
+ });
43
+ (0, mocha_1.it)('0 NO es blanco (es una respuesta válida)', () => {
44
+ assert.strictEqual(funs.blanco(0), false);
45
+ });
46
+ (0, mocha_1.it)('valores cargados no son blanco', () => {
47
+ assert.strictEqual(funs.blanco(1), false);
48
+ assert.strictEqual(funs.blanco('a'), false);
49
+ });
50
+ });
51
+ (0, mocha_1.describe)('funs.informado', () => {
52
+ (0, mocha_1.it)('null y undefined no están informados', () => {
53
+ assert.strictEqual(funs.informado(null), false);
54
+ assert.strictEqual(funs.informado(undefined), false);
55
+ });
56
+ (0, mocha_1.it)('arrays y objetos vacíos no están informados', () => {
57
+ assert.strictEqual(funs.informado([]), false);
58
+ assert.strictEqual(funs.informado({}), false);
59
+ });
60
+ (0, mocha_1.it)('valores, arrays y objetos con contenido están informados', () => {
61
+ assert.strictEqual(funs.informado(0), true);
62
+ assert.strictEqual(funs.informado(''), true);
63
+ assert.strictEqual(funs.informado([1]), true);
64
+ assert.strictEqual(funs.informado({ a: 1 }), true);
65
+ });
66
+ });
67
+ (0, mocha_1.describe)('funs.nsnc y funs.par', () => {
68
+ (0, mocha_1.it)('nsnc solo es verdadero para -9 (número o texto)', () => {
69
+ assert.strictEqual(funs.nsnc(-9), true);
70
+ assert.strictEqual(funs.nsnc('-9'), true);
71
+ assert.strictEqual(funs.nsnc(9), false);
72
+ assert.strictEqual(funs.nsnc(null), false);
73
+ });
74
+ (0, mocha_1.it)('par', () => {
75
+ assert.strictEqual(funs.par(4), true);
76
+ assert.strictEqual(funs.par(0), true);
77
+ assert.strictEqual(funs.par(7), false);
78
+ });
79
+ });
80
+ (0, mocha_1.describe)('funs.hoy', () => {
81
+ (0, mocha_1.it)('devuelve la fecha de hoy en formato dd/mm/aaaa', () => {
82
+ const ahora = new Date();
83
+ const hoy = funs.hoy();
84
+ assert.match(hoy, /^\d{1,2}\/\d{1,2}\/\d{4}$/);
85
+ const [d, m, y] = hoy.split('/').map(Number);
86
+ assert.deepStrictEqual([d, m, y], [ahora.getDate(), ahora.getMonth() + 1, ahora.getFullYear()]);
87
+ });
88
+ });
89
+ (0, mocha_1.describe)('funs.fecha_valida', () => {
90
+ (0, mocha_1.it)('acepta fechas válidas con y sin ceros a la izquierda', () => {
91
+ assert.strictEqual(funs.fecha_valida('01/01/2025'), true);
92
+ assert.strictEqual(funs.fecha_valida('1/1/2025'), true);
93
+ assert.strictEqual(funs.fecha_valida('31/12/2025'), true);
94
+ });
95
+ (0, mocha_1.it)('acepta el 29/02 de un año bisiesto', () => {
96
+ assert.strictEqual(funs.fecha_valida('29/02/2024'), true);
97
+ });
98
+ (0, mocha_1.it)('rechaza días inexistentes en el mes', () => {
99
+ assert.strictEqual(funs.fecha_valida('31/02/2025'), false);
100
+ assert.strictEqual(funs.fecha_valida('30/02/2025'), false);
101
+ assert.strictEqual(funs.fecha_valida('31/04/2025'), false);
102
+ assert.strictEqual(funs.fecha_valida('31/06/2025'), false);
103
+ });
104
+ (0, mocha_1.it)('rechaza el 29/02 de un año no bisiesto', () => {
105
+ assert.strictEqual(funs.fecha_valida('29/02/2023'), false);
106
+ });
107
+ (0, mocha_1.it)('rechaza formatos inválidos', () => {
108
+ assert.strictEqual(funs.fecha_valida('15/13/2025'), false);
109
+ assert.strictEqual(funs.fecha_valida('00/01/2025'), false);
110
+ assert.strictEqual(funs.fecha_valida('32/01/2025'), false);
111
+ assert.strictEqual(funs.fecha_valida('2025-01-01'), false);
112
+ assert.strictEqual(funs.fecha_valida('01/01/25'), false);
113
+ assert.strictEqual(funs.fecha_valida(''), false);
114
+ });
115
+ (0, mocha_1.it)('solo acepta años 20xx', () => {
116
+ assert.strictEqual(funs.fecha_valida('01/01/1999'), false);
117
+ assert.strictEqual(funs.fecha_valida('01/01/2100'), false);
118
+ });
119
+ });
120
+ (0, mocha_1.describe)('funs.mesanio_valido', () => {
121
+ (0, mocha_1.it)('acepta mm/aaaa con años 19xx y 20xx', () => {
122
+ assert.strictEqual(funs.mesanio_valido('01/1995'), true);
123
+ assert.strictEqual(funs.mesanio_valido('1/1995'), true);
124
+ assert.strictEqual(funs.mesanio_valido('12/2025'), true);
125
+ });
126
+ (0, mocha_1.it)('rechaza meses fuera de rango y años fuera de 19xx/20xx', () => {
127
+ assert.strictEqual(funs.mesanio_valido('13/2025'), false);
128
+ assert.strictEqual(funs.mesanio_valido('00/2025'), false);
129
+ assert.strictEqual(funs.mesanio_valido('01/1895'), false);
130
+ assert.strictEqual(funs.mesanio_valido('01/25'), false);
131
+ });
132
+ });
133
+ (0, mocha_1.describe)('funs.edad_mes_annio_valido', () => {
134
+ (0, mocha_1.it)('acepta la edad que corresponde a los meses cumplidos', () => {
135
+ // feb/1995 a ene/2025: 359 meses -> 29 años
136
+ assert.strictEqual(funs.edad_mes_annio_valido(29, '02/1995', '15/01/2025'), true);
137
+ assert.strictEqual(funs.edad_mes_annio_valido(30, '02/1995', '15/01/2025'), false);
138
+ });
139
+ (0, mocha_1.it)('en el mes de cumpleaños acepta ambas edades (tolerancia de un mes)', () => {
140
+ // ene/1995 a ene/2025: 360 meses exactos -> 30, o 29 si todavía no cumplió
141
+ assert.strictEqual(funs.edad_mes_annio_valido(30, '01/1995', '15/01/2025'), true);
142
+ assert.strictEqual(funs.edad_mes_annio_valido(29, '01/1995', '15/01/2025'), true);
143
+ assert.strictEqual(funs.edad_mes_annio_valido(28, '01/1995', '15/01/2025'), false);
144
+ });
145
+ (0, mocha_1.it)('un bebé nacido en el mes de la realización tiene 0 años', () => {
146
+ assert.strictEqual(funs.edad_mes_annio_valido(0, '01/2025', '15/01/2025'), true);
147
+ });
148
+ (0, mocha_1.it)('rechaza edades muy distintas', () => {
149
+ assert.strictEqual(funs.edad_mes_annio_valido(40, '06/1995', '15/01/2025'), false);
150
+ });
151
+ });
152
+ });
153
+ });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXJzLWNhc2lsbGVyb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC90ZXN0LWhlbHBlcnMtY2FzaWxsZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUFBLGlDQUFxQztJQUVyQyxzQ0FBdUM7SUFFdkMsdUVBQW1FO0lBRW5FLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxzQ0FBaUIsQ0FBQztJQUVuQyxJQUFBLGdCQUFRLEVBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBRXhDLElBQUEsZ0JBQVEsRUFBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLElBQUEsVUFBRSxFQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtnQkFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxzQ0FBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsc0NBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBQSxVQUFFLEVBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO2dCQUMvRCxNQUFNLENBQUMsV0FBVyxDQUFDLHNDQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxzQ0FBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxXQUFXLENBQUMsc0NBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLHNDQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FB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TSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUNILElBQUEsVUFBRSxFQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtnQkFDL0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyRixDQUFDLENBQUMsQ0FBQztZQUNILElBQUEsVUFBRSxFQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtnQkFDcEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5cbmltcG9ydCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpO1xuXG5pbXBvcnQgeyBoZWxwZXJzQ2FzaWxsZXJvcyB9IGZyb20gJy4uL3VubG9nZ2VkL2hlbHBlcnMtY2FzaWxsZXJvcyc7XG5cbmNvbnN0IHsgZnVucyB9ID0gaGVscGVyc0Nhc2lsbGVyb3M7XG5cbmRlc2NyaWJlKCdkbWVuY3UgLSBoZWxwZXJzQ2FzaWxsZXJvcycsICgpID0+IHtcblxuICAgIGRlc2NyaWJlKCdudWxsMnplcm8nLCAoKSA9PiB7XG4gICAgICAgIGl0KCdjb252aWVydGUgbnVsbCB5IHVuZGVmaW5lZCBlbiAwJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhlbHBlcnNDYXNpbGxlcm9zLm51bGwyemVybyhudWxsKSwgMCk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGVscGVyc0Nhc2lsbGVyb3MubnVsbDJ6ZXJvKHVuZGVmaW5lZCksIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2RlamEgaW50YWN0b3MgbG9zIGRlbcOhcyB2YWxvcmVzIChpbmNsdXNvIDAsIFwiXCIgeSBmYWxzZSknLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGVscGVyc0Nhc2lsbGVyb3MubnVsbDJ6ZXJvKDUpLCA1KTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoZWxwZXJzQ2FzaWxsZXJvcy5udWxsMnplcm8oMCksIDApO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhlbHBlcnNDYXNpbGxlcm9zLm51bGwyemVybygnJyksICcnKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoZWxwZXJzQ2FzaWxsZXJvcy5udWxsMnplcm8oZmFsc2UpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RpdjBlcnInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdkaXZpZGUgbm9ybWFsbWVudGUnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGVscGVyc0Nhc2lsbGVyb3MuZGl2MGVycigxMCwgNCwgJ3YxJyksIDIuNSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnbGFuemEgZXJyb3IgaW5kaWNhbmRvIGxhIHBrIHNpIGVsIGRlbm9taW5hZG9yIGVzIDAnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGhlbHBlcnNDYXNpbGxlcm9zLmRpdjBlcnIoMTAsIDAsICd2aXYgNycpLCAvRXJyb3IgZW4gdml2IDcgZGl2aXNpb24gcG9yIGNlcm8gZGUgMTAvKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZnVucy5ibGFuY28nLCAoKSA9PiB7XG4gICAgICAgIGl0KCdudWxsLCB1bmRlZmluZWQgeSBcIlwiIHNvbiBibGFuY28nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5ibGFuY28obnVsbCksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuYmxhbmNvKHVuZGVmaW5lZCksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuYmxhbmNvKCcnKSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnMCBOTyBlcyBibGFuY28gKGVzIHVuYSByZXNwdWVzdGEgdsOhbGlkYSknLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5ibGFuY28oMCksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCd2YWxvcmVzIGNhcmdhZG9zIG5vIHNvbiBibGFuY28nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5ibGFuY28oMSksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmJsYW5jbygnYScpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Z1bnMuaW5mb3JtYWRvJywgKCkgPT4ge1xuICAgICAgICBpdCgnbnVsbCB5IHVuZGVmaW5lZCBubyBlc3TDoW4gaW5mb3JtYWRvcycsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmluZm9ybWFkbyhudWxsKSwgZmFsc2UpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuaW5mb3JtYWRvKHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdhcnJheXMgeSBvYmpldG9zIHZhY8Otb3Mgbm8gZXN0w6FuIGluZm9ybWFkb3MnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5pbmZvcm1hZG8oW10pLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5pbmZvcm1hZG8oe30pLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgndmFsb3JlcywgYXJyYXlzIHkgb2JqZXRvcyBjb24gY29udGVuaWRvIGVzdMOhbiBpbmZvcm1hZG9zJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuaW5mb3JtYWRvKDApLCB0cnVlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmluZm9ybWFkbygnJyksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuaW5mb3JtYWRvKFsxXSksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuaW5mb3JtYWRvKHsgYTogMSB9KSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Z1bnMubnNuYyB5IGZ1bnMucGFyJywgKCkgPT4ge1xuICAgICAgICBpdCgnbnNuYyBzb2xvIGVzIHZlcmRhZGVybyBwYXJhIC05IChuw7ptZXJvIG8gdGV4dG8pJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMubnNuYygtOSksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMubnNuYygnLTknKSwgdHJ1ZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5uc25jKDkpLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5uc25jKG51bGwpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncGFyJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMucGFyKDQpLCB0cnVlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLnBhcigwKSwgdHJ1ZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5wYXIoNyksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZnVucy5ob3knLCAoKSA9PiB7XG4gICAgICAgIGl0KCdkZXZ1ZWx2ZSBsYSBmZWNoYSBkZSBob3kgZW4gZm9ybWF0byBkZC9tbS9hYWFhJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWhvcmEgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgaG95ID0gZnVucy5ob3koKTtcbiAgICAgICAgICAgIGFzc2VydC5tYXRjaChob3ksIC9eXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fSQvKTtcbiAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IGhveS5zcGxpdCgnLycpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChbZCwgbSwgeV0sIFthaG9yYS5nZXREYXRlKCksIGFob3JhLmdldE1vbnRoKCkgKyAxLCBhaG9yYS5nZXRGdWxsWWVhcigpXSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Z1bnMuZmVjaGFfdmFsaWRhJywgKCkgPT4ge1xuICAgICAgICBpdCgnYWNlcHRhIGZlY2hhcyB2w6FsaWRhcyBjb24geSBzaW4gY2Vyb3MgYSBsYSBpenF1aWVyZGEnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJzAxLzAxLzIwMjUnKSwgdHJ1ZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJzEvMS8yMDI1JyksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZmVjaGFfdmFsaWRhKCczMS8xMi8yMDI1JyksIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2FjZXB0YSBlbCAyOS8wMiBkZSB1biBhw7FvIGJpc2llc3RvJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZmVjaGFfdmFsaWRhKCcyOS8wMi8yMDI0JyksIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3JlY2hhemEgZMOtYXMgaW5leGlzdGVudGVzIGVuIGVsIG1lcycsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmZlY2hhX3ZhbGlkYSgnMzEvMDIvMjAyNScpLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJzMwLzAyLzIwMjUnKSwgZmFsc2UpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZmVjaGFfdmFsaWRhKCczMS8wNC8yMDI1JyksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmZlY2hhX3ZhbGlkYSgnMzEvMDYvMjAyNScpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVjaGF6YSBlbCAyOS8wMiBkZSB1biBhw7FvIG5vIGJpc2llc3RvJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZmVjaGFfdmFsaWRhKCcyOS8wMi8yMDIzJyksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdyZWNoYXphIGZvcm1hdG9zIGludsOhbGlkb3MnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJzE1LzEzLzIwMjUnKSwgZmFsc2UpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZmVjaGFfdmFsaWRhKCcwMC8wMS8yMDI1JyksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmZlY2hhX3ZhbGlkYSgnMzIvMDEvMjAyNScpLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJzIwMjUtMDEtMDEnKSwgZmFsc2UpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZmVjaGFfdmFsaWRhKCcwMS8wMS8yNScpLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJycpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc29sbyBhY2VwdGEgYcOxb3MgMjB4eCcsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmZlY2hhX3ZhbGlkYSgnMDEvMDEvMTk5OScpLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5mZWNoYV92YWxpZGEoJzAxLzAxLzIxMDAnKSwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmdW5zLm1lc2FuaW9fdmFsaWRvJywgKCkgPT4ge1xuICAgICAgICBpdCgnYWNlcHRhIG1tL2FhYWEgY29uIGHDsW9zIDE5eHggeSAyMHh4JywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMubWVzYW5pb192YWxpZG8oJzAxLzE5OTUnKSwgdHJ1ZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5tZXNhbmlvX3ZhbGlkbygnMS8xOTk1JyksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMubWVzYW5pb192YWxpZG8oJzEyLzIwMjUnKSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVjaGF6YSBtZXNlcyBmdWVyYSBkZSByYW5nbyB5IGHDsW9zIGZ1ZXJhIGRlIDE5eHgvMjB4eCcsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLm1lc2FuaW9fdmFsaWRvKCcxMy8yMDI1JyksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLm1lc2FuaW9fdmFsaWRvKCcwMC8yMDI1JyksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLm1lc2FuaW9fdmFsaWRvKCcwMS8xODk1JyksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLm1lc2FuaW9fdmFsaWRvKCcwMS8yNScpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Z1bnMuZWRhZF9tZXNfYW5uaW9fdmFsaWRvJywgKCkgPT4ge1xuICAgICAgICBpdCgnYWNlcHRhIGxhIGVkYWQgcXVlIGNvcnJlc3BvbmRlIGEgbG9zIG1lc2VzIGN1bXBsaWRvcycsICgpID0+IHtcbiAgICAgICAgICAgIC8vIGZlYi8xOTk1IGEgZW5lLzIwMjU6IDM1OSBtZXNlcyAtPiAyOSBhw7Fvc1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZWRhZF9tZXNfYW5uaW9fdmFsaWRvKDI5LCAnMDIvMTk5NScsICcxNS8wMS8yMDI1JyksIHRydWUpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZ1bnMuZWRhZF9tZXNfYW5uaW9fdmFsaWRvKDMwLCAnMDIvMTk5NScsICcxNS8wMS8yMDI1JyksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdlbiBlbCBtZXMgZGUgY3VtcGxlYcOxb3MgYWNlcHRhIGFtYmFzIGVkYWRlcyAodG9sZXJhbmNpYSBkZSB1biBtZXMpJywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gZW5lLzE5OTUgYSBlbmUvMjAyNTogMzYwIG1lc2VzIGV4YWN0b3MgLT4gMzAsIG8gMjkgc2kgdG9kYXbDrWEgbm8gY3VtcGxpw7NcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmVkYWRfbWVzX2FubmlvX3ZhbGlkbygzMCwgJzAxLzE5OTUnLCAnMTUvMDEvMjAyNScpLCB0cnVlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmVkYWRfbWVzX2FubmlvX3ZhbGlkbygyOSwgJzAxLzE5OTUnLCAnMTUvMDEvMjAyNScpLCB0cnVlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmVkYWRfbWVzX2FubmlvX3ZhbGlkbygyOCwgJzAxLzE5OTUnLCAnMTUvMDEvMjAyNScpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgndW4gYmViw6kgbmFjaWRvIGVuIGVsIG1lcyBkZSBsYSByZWFsaXphY2nDs24gdGllbmUgMCBhw7FvcycsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmdW5zLmVkYWRfbWVzX2FubmlvX3ZhbGlkbygwLCAnMDEvMjAyNScsICcxNS8wMS8yMDI1JyksIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3JlY2hhemEgZWRhZGVzIG11eSBkaXN0aW50YXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZnVucy5lZGFkX21lc19hbm5pb192YWxpZG8oNDAsICcwNi8xOTk1JywgJzE1LzAxLzIwMjUnKSwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ export {};