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,95 @@
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", "node:fs", "node:path", "meta-enc", "procesamiento", "../server/app-dmencu"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppDmEncuParaTests = void 0;
13
+ exports.crearAppParaTests = crearAppParaTests;
14
+ exports.permisosDeInstalacion = permisosDeInstalacion;
15
+ exports.contextoDelRol = contextoDelRol;
16
+ const fs = require("node:fs");
17
+ const path = require("node:path");
18
+ const meta_enc_1 = require("meta-enc");
19
+ const procesamiento_1 = require("procesamiento");
20
+ const app_dmencu_1 = require("../server/app-dmencu");
21
+ // La app compuesta igual que en server-dmencu.ts, pero sin llamar a start():
22
+ // no se conecta a la base ni levanta el servidor.
23
+ exports.AppDmEncuParaTests = (0, app_dmencu_1.emergeAppDmEncu)((0, procesamiento_1.emergeAppProcesamiento)((0, procesamiento_1.emergeAppConsistencias)((0, procesamiento_1.emergeAppDatosExt)((0, meta_enc_1.emergeAppMetaEnc)((0, meta_enc_1.emergeAppRelEnc)((0, procesamiento_1.emergeAppVarCal)((0, meta_enc_1.emergeAppOperativos)(meta_enc_1.AppBackend))))))));
24
+ // policy 'web' es el modo RELEVAMIENTO (dispositivos), cualquier otra es GABINETE (ver getModoByPolicy)
25
+ function crearAppParaTests(policy = '') {
26
+ var be = new exports.AppDmEncuParaTests();
27
+ // la configuración se carga en start(); se completa sólo la parte del servidor
28
+ be.config.server = {
29
+ 'base-url': '',
30
+ port: 3000,
31
+ 'session-store': 'memory',
32
+ 'ip-replacer': '',
33
+ 'silent-startup': true,
34
+ 'kill-9': '',
35
+ bitacoraSchema: '',
36
+ bitacoraTableName: '',
37
+ useCors: false,
38
+ allowedHosts: [],
39
+ policy,
40
+ };
41
+ var permisos = permisosDeInstalacion();
42
+ be.caches.permisosRol = permisos.permisosRol;
43
+ be.caches.permisosRolSoloTrue = permisos.permisosRol;
44
+ be.caches.permisosSuperuser = permisos.permisosSuperuser;
45
+ be.caches.permisosParaNadie = permisos.permisosParaNadie;
46
+ return be;
47
+ }
48
+ function leerTab(nombreArchivo) {
49
+ // los tests corren desde dist/test
50
+ var contenido = fs.readFileSync(path.join(__dirname, '../../install', nombreArchivo), 'utf8');
51
+ var [encabezado, ...lineas] = contenido.split(/\r?\n/).filter(linea => linea.trim() != '');
52
+ var columnas = encabezado.split('|').map(columna => columna.trim());
53
+ return lineas.map(linea => {
54
+ var valores = linea.split('|').map(valor => valor.trim());
55
+ var fila = {};
56
+ columnas.forEach((columna, i) => { fila[columna] = valores[i]; });
57
+ return fila;
58
+ });
59
+ }
60
+ function puedeDe(filas, habilitado) {
61
+ var puede = {};
62
+ filas.forEach(fila => {
63
+ puede[fila.permiso] = puede[fila.permiso] || {};
64
+ puede[fila.permiso][fila.accion] = habilitado(fila);
65
+ });
66
+ return puede;
67
+ }
68
+ // Arma los permisos como lo hace postConfig en app-dmencu.ts (que los lee de la base),
69
+ // a partir de los .tab con que se instala la base
70
+ function permisosDeInstalacion() {
71
+ var roles = leerTab('roles.tab');
72
+ var rolesPermisos = leerTab('roles_permisos.tab');
73
+ var permisos = leerTab('permisos.tab');
74
+ var permisosRol = {};
75
+ roles.forEach(rol => {
76
+ var filasDelRol = rolesPermisos.filter(rp => rp.rol == rol.rol);
77
+ permisosRol[rol.rol] = {
78
+ superuser: rol.superuser == 'true',
79
+ puede: filasDelRol.length ? puedeDe(filasDelRol, rp => rp.habilitado == 'true') : undefined,
80
+ };
81
+ });
82
+ return {
83
+ permisosRol,
84
+ permisosSuperuser: puedeDe(permisos, () => true),
85
+ permisosParaNadie: puedeDe(permisos, () => false),
86
+ };
87
+ }
88
+ // contexto como el que arma getContext para un usuario con ese rol
89
+ function contextoDelRol(be, rol, idper = 'PER1') {
90
+ var user = { rol, idper, usuario: 'usu_' + rol };
91
+ return Object.assign(Object.assign({}, (0, app_dmencu_1.permisosSegunUsuario)(be.caches, user)), { be,
92
+ user, session: {}, username: user.usuario, machineId: 'test', navigator: 'test' });
93
+ }
94
+ });
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXBhcmEtdGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9hcHAtcGFyYS10ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUE4QkEsOENBc0JDO0lBNEJELHNEQWlCQztJQUdELHdDQVdDO0lBL0dELDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFFbEMsdUNBQThGO0lBQzlGLGlEQUFtSDtJQUVuSCxxREFBNkU7SUFHN0UsNkVBQTZFO0lBQzdFLGtEQUFrRDtJQUNyQyxRQUFBLGtCQUFrQixHQUFHLElBQUEsNEJBQWUsRUFDN0MsSUFBQSxzQ0FBc0IsRUFDbEIsSUFBQSxzQ0FBc0IsRUFDbEIsSUFBQSxpQ0FBaUIsRUFDYixJQUFBLDJCQUFnQixFQUNaLElBQUEsMEJBQWUsRUFDWCxJQUFBLCtCQUFlLEVBQ1gsSUFBQSw4QkFBbUIsRUFBQyxxQkFBVSxDQUFDLENBQ2xDLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQUM7SUFJRix3R0FBd0c7SUFDeEcsU0FBZ0IsaUJBQWlCLENBQUMsU0FBaUIsRUFBRTtRQUNqRCxJQUFJLEVBQUUsR0FBRyxJQUFJLDBCQUFrQixFQUFFLENBQUM7UUFDbEMsK0VBQStFO1FBQy9FLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHO1lBQ2YsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLGVBQWUsRUFBRSxRQUFRO1lBQ3pCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsUUFBUSxFQUFFLEVBQUU7WUFDWixjQUFjLEVBQUUsRUFBRTtZQUNsQixpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsWUFBWSxFQUFFLEVBQUU7WUFDaEIsTUFBTTtTQUNULENBQUM7UUFDRixJQUFJLFFBQVEsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZDLEVBQUUsQ0FBQyxN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LEdBQUcsQ0FBQyxTQUFTLElBQUksTUFBTTtnQkFDbEMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzlGLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU87WUFDSCxXQUFXO1lBQ1gsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDaEQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsU0FBZ0IsY0FBYyxDQUFDLEVBQWdCLEVBQUUsR0FBVyxFQUFFLFFBQWdCLE1BQU07UUFDaEYsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDakQsdUNBQ08sSUFBQSxpQ0FBb0IsRUFBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUN4QyxFQUFFO1lBQ0YsSUFBSSxFQUNKLE9BQU8sRUFBRSxFQUFFLEVBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQ3RCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLFNBQVMsRUFBRSxNQUFNLElBQ25CO0lBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBBcHBCYWNrZW5kLCBlbWVyZ2VBcHBNZXRhRW5jLCBlbWVyZ2VBcHBPcGVyYXRpdm9zLCBlbWVyZ2VBcHBSZWxFbmMgfSBmcm9tICdtZXRhLWVuYyc7XG5pbXBvcnQgeyBlbWVyZ2VBcHBDb25zaXN0ZW5jaWFzLCBlbWVyZ2VBcHBEYXRvc0V4dCwgZW1lcmdlQXBwUHJvY2VzYW1pZW50bywgZW1lcmdlQXBwVmFyQ2FsIH0gZnJvbSAncHJvY2VzYW1pZW50byc7XG5cbmltcG9ydCB7IGVtZXJnZUFwcERtRW5jdSwgcGVybWlzb3NTZWd1blVzdWFyaW8gfSBmcm9tICcuLi9zZXJ2ZXIvYXBwLWRtZW5jdSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIFBlcm1pc29zUm9sLCBQdWVkZSB9IGZyb20gJy4uL3NlcnZlci90eXBlcy1kbWVuY3UnO1xuXG4vLyBMYSBhcHAgY29tcHVlc3RhIGlndWFsIHF1ZSBlbiBzZXJ2ZXItZG1lbmN1LnRzLCBwZXJvIHNpbiBsbGFtYXIgYSBzdGFydCgpOlxuLy8gbm8gc2UgY29uZWN0YSBhIGxhIGJhc2UgbmkgbGV2YW50YSBlbCBzZXJ2aWRvci5cbmV4cG9ydCBjb25zdCBBcHBEbUVuY3VQYXJhVGVzdHMgPSBlbWVyZ2VBcHBEbUVuY3UoXG4gICAgZW1lcmdlQXBwUHJvY2VzYW1pZW50byhcbiAgICAgICAgZW1lcmdlQXBwQ29uc2lzdGVuY2lhcyhcbiAgICAgICAgICAgIGVtZXJnZUFwcERhdG9zRXh0KFxuICAgICAgICAgICAgICAgIGVtZXJnZUFwcE1ldGFFbmMoXG4gICAgICAgICAgICAgICAgICAgIGVtZXJnZUFwcFJlbEVuYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtZXJnZUFwcFZhckNhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWVyZ2VBcHBPcGVyYXRpdm9zKEFwcEJhY2tlbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApXG4pO1xuXG5leHBvcnQgdHlwZSBBcHBQYXJhVGVzdHMgPSBJbnN0YW5jZVR5cGU8dHlwZW9mIEFwcERtRW5jdVBhcmFUZXN0cz47XG5cbi8vIHBvbGljeSAnd2ViJyBlcyBlbCBtb2RvIFJFTEVWQU1JRU5UTyAoZGlzcG9zaXRpdm9zKSwgY3VhbHF1aWVyIG90cmEgZXMgR0FCSU5FVEUgKHZlciBnZXRNb2RvQnlQb2xpY3kpXG5leHBvcnQgZnVuY3Rpb24gY3JlYXJBcHBQYXJhVGVzdHMocG9saWN5OiBzdHJpbmcgPSAnJyk6IEFwcFBhcmFUZXN0cyB7XG4gICAgdmFyIGJlID0gbmV3IEFwcERtRW5jdVBhcmFUZXN0cygpO1xuICAgIC8vIGxhIGNvbmZpZ3VyYWNpw7NuIHNlIGNhcmdhIGVuIHN0YXJ0KCk7IHNlIGNvbXBsZXRhIHPDs2xvIGxhIHBhcnRlIGRlbCBzZXJ2aWRvclxuICAgIGJlLmNvbmZpZy5zZXJ2ZXIgPSB7XG4gICAgICAgICdiYXNlLXVybCc6ICcnLFxuICAgICAgICBwb3J0OiAzMDAwLFxuICAgICAgICAnc2Vzc2lvbi1zdG9yZSc6ICdtZW1vcnknLFxuICAgICAgICAnaXAtcmVwbGFjZXInOiAnJyxcbiAgICAgICAgJ3NpbGVudC1zdGFydHVwJzogdHJ1ZSxcbiAgICAgICAgJ2tpbGwtOSc6ICcnLFxuICAgICAgICBiaXRhY29yYVNjaGVtYTogJycsXG4gICAgICAgIGJpdGFjb3JhVGFibGVOYW1lOiAnJyxcbiAgICAgICAgdXNlQ29yczogZmFsc2UsXG4gICAgICAgIGFsbG93ZWRIb3N0czogW10sXG4gICAgICAgIHBvbGljeSxcbiAgICB9O1xuICAgIHZhciBwZXJtaXNvcyA9IHBlcm1pc29zRGVJbnN0YWxhY2lvbigpO1xuICAgIGJlLmNhY2hlcy5wZXJtaXNvc1JvbCA9IHBlcm1pc29zLnBlcm1pc29zUm9sO1xuICAgIGJlLmNhY2hlcy5wZXJtaXNvc1JvbFNvbG9UcnVlID0gcGVybWlzb3MucGVybWlzb3NSb2w7XG4gICAgYmUuY2FjaGVzLnBlcm1pc29zU3VwZXJ1c2VyID0gcGVybWlzb3MucGVybWlzb3NTdXBlcnVzZXI7XG4gICAgYmUuY2FjaGVzLnBlcm1pc29zUGFyYU5hZGllID0gcGVybWlzb3MucGVybWlzb3NQYXJhTmFkaWU7XG4gICAgcmV0dXJuIGJlO1xufVxuXG50eXBlIEZpbGFUYWIgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG5mdW5jdGlvbiBsZWVyVGFiKG5vbWJyZUFyY2hpdm86IHN0cmluZyk6IEZpbGFUYWJbXSB7XG4gICAgLy8gbG9zIHRlc3RzIGNvcnJlbiBkZXNkZSBkaXN0L3Rlc3RcbiAgICB2YXIgY29udGVuaWRvID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9pbnN0YWxsJywgbm9tYnJlQXJjaGl2byksICd1dGY4Jyk7XG4gICAgdmFyIFtlbmNhYmV6YWRvLCAuLi5saW5lYXNdID0gY29udGVuaWRvLnNwbGl0KC9cXHI/XFxuLykuZmlsdGVyKGxpbmVhID0+IGxpbmVhLnRyaW0oKSAhPSAnJyk7XG4gICAgdmFyIGNvbHVtbmFzID0gZW5jYWJlemFkby5zcGxpdCgnfCcpLm1hcChjb2x1bW5hID0+IGNvbHVtbmEudHJpbSgpKTtcbiAgICByZXR1cm4gbGluZWFzLm1hcChsaW5lYSA9PiB7XG4gICAgICAgIHZhciB2YWxvcmVzID0gbGluZWEuc3BsaXQoJ3wnKS5tYXAodmFsb3IgPT4gdmFsb3IudHJpbSgpKTtcbiAgICAgICAgdmFyIGZpbGE6IEZpbGFUYWIgPSB7fTtcbiAgICAgICAgY29sdW1uYXMuZm9yRWFjaCgoY29sdW1uYSwgaSkgPT4geyBmaWxhW2NvbHVtbmFdID0gdmFsb3Jlc1tpXTsgfSk7XG4gICAgICAgIHJldHVybiBmaWxhO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwdWVkZURlKGZpbGFzOiBGaWxhVGFiW10sIGhhYmlsaXRhZG86IChmaWxhOiBGaWxhVGFiKSA9PiBib29sZWFuKTogUHVlZGUge1xuICAgIHZhciBwdWVkZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+ID0ge307XG4gICAgZmlsYXMuZm9yRWFjaChmaWxhID0+IHtcbiAgICAgICAgcHVlZGVbZmlsYS5wZXJtaXNvXSA9IHB1ZWRlW2ZpbGEucGVybWlzb10gfHwge307XG4gICAgICAgIHB1ZWRlW2ZpbGEucGVybWlzb11bZmlsYS5hY2Npb25dID0gaGFiaWxpdGFkbyhmaWxhKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHVlZGU7XG59XG5cbi8vIEFybWEgbG9zIHBlcm1pc29zIGNvbW8gbG8gaGFjZSBwb3N0Q29uZmlnIGVuIGFwcC1kbWVuY3UudHMgKHF1ZSBsb3MgbGVlIGRlIGxhIGJhc2UpLFxuLy8gYSBwYXJ0aXIgZGUgbG9zIC50YWIgY29uIHF1ZSBzZSBpbnN0YWxhIGxhIGJhc2VcbmV4cG9ydCBmdW5jdGlvbiBwZXJtaXNvc0RlSW5zdGFsYWNpb24oKTogeyBwZXJtaXNvc1JvbDogUGVybWlzb3NSb2wsIHBlcm1pc29zU3VwZXJ1c2VyOiBQdWVkZSwgcGVybWlzb3NQYXJhTmFkaWU6IFB1ZWRlIH0ge1xuICAgIHZhciByb2xlcyA9IGxlZXJUYWIoJ3JvbGVzLnRhYicpO1xuICAgIHZhciByb2xlc1Blcm1pc29zID0gbGVlclRhYigncm9sZXNfcGVybWlzb3MudGFiJyk7XG4gICAgdmFyIHBlcm1pc29zID0gbGVlclRhYigncGVybWlzb3MudGFiJyk7XG4gICAgdmFyIHBlcm1pc29zUm9sOiBQZXJtaXNvc1JvbCA9IHt9O1xuICAgIHJvbGVzLmZvckVhY2gocm9sID0+IHtcbiAgICAgICAgdmFyIGZpbGFzRGVsUm9sID0gcm9sZXNQZXJtaXNvcy5maWx0ZXIocnAgPT4gcnAucm9sID09IHJvbC5yb2wpO1xuICAgICAgICBwZXJtaXNvc1JvbFtyb2wucm9sXSA9IHtcbiAgICAgICAgICAgIHN1cGVydXNlcjogcm9sLnN1cGVydXNlciA9PSAndHJ1ZScsXG4gICAgICAgICAgICBwdWVkZTogZmlsYXNEZWxSb2wubGVuZ3RoID8gcHVlZGVEZShmaWxhc0RlbFJvbCwgcnAgPT4gcnAuaGFiaWxpdGFkbyA9PSAndHJ1ZScpIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHBlcm1pc29zUm9sLFxuICAgICAgICBwZXJtaXNvc1N1cGVydXNlcjogcHVlZGVEZShwZXJtaXNvcywgKCkgPT4gdHJ1ZSksXG4gICAgICAgIHBlcm1pc29zUGFyYU5hZGllOiBwdWVkZURlKHBlcm1pc29zLCAoKSA9PiBmYWxzZSksXG4gICAgfTtcbn1cblxuLy8gY29udGV4dG8gY29tbyBlbCBxdWUgYXJtYSBnZXRDb250ZXh0IHBhcmEgdW4gdXN1YXJpbyBjb24gZXNlIHJvbFxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHRvRGVsUm9sKGJlOiBBcHBQYXJhVGVzdHMsIHJvbDogc3RyaW5nLCBpZHBlcjogc3RyaW5nID0gJ1BFUjEnKTogQ29udGV4dCB7XG4gICAgdmFyIHVzZXIgPSB7IHJvbCwgaWRwZXIsIHVzdWFyaW86ICd1c3VfJyArIHJvbCB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBlcm1pc29zU2VndW5Vc3VhcmlvKGJlLmNhY2hlcywgdXNlciksXG4gICAgICAgIGJlLFxuICAgICAgICB1c2VyLFxuICAgICAgICBzZXNzaW9uOiB7fSxcbiAgICAgICAgdXNlcm5hbWU6IHVzZXIudXN1YXJpbyxcbiAgICAgICAgbWFjaGluZUlkOiAndGVzdCcsXG4gICAgICAgIG5hdmlnYXRvcjogJ3Rlc3QnLFxuICAgIH07XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,183 @@
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", "node:fs", "node:os", "node:path", "../server/app-dmencu", "../server/ayuda", "./app-para-tests"], 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 fs = require("node:fs");
15
+ const os = require("node:os");
16
+ const path = require("node:path");
17
+ const app_dmencu_1 = require("../server/app-dmencu");
18
+ const ayuda_1 = require("../server/ayuda");
19
+ const app_para_tests_1 = require("./app-para-tests");
20
+ const GABINETE = '';
21
+ const RELEVAMIENTO = 'web';
22
+ function appConAyuda(policy) {
23
+ var be = (0, app_para_tests_1.crearAppParaTests)(policy);
24
+ be.caches.ayuda = (0, ayuda_1.cargarAyuda)(be.getAyudaFuentes());
25
+ return be;
26
+ }
27
+ function idsVisibles(be, rol) {
28
+ return (0, ayuda_1.temasVisibles)(be.caches.ayuda, (0, app_dmencu_1.quienConsultaAyuda)((0, app_para_tests_1.contextoDelRol)(be, rol))).map(tema => tema.id);
29
+ }
30
+ function tema(contenido, origen = 'test') {
31
+ return (0, ayuda_1.parsearTemaDeAyuda)(contenido, 'tema.md', origen);
32
+ }
33
+ (0, mocha_1.describe)('dmencu - ayuda en línea', () => {
34
+ (0, mocha_1.describe)('formato de los archivos', () => {
35
+ (0, mocha_1.it)('lee el encabezado y convierte el markdown a html', () => {
36
+ var leido = tema('---\nid: uno\ntitulo: Uno\npermisos: [campo.editar]\nmenu: asignacion\n---\nTexto **fuerte** y [otro](ayuda:dos)\n');
37
+ assert.strictEqual(leido.id, 'uno');
38
+ assert.strictEqual(leido.titulo, 'Uno');
39
+ assert.deepStrictEqual(leido.permisos, ['campo.editar']);
40
+ assert.deepStrictEqual(leido.menu, ['asignacion']);
41
+ assert.deepStrictEqual(leido.roles, []);
42
+ assert.strictEqual(leido.modo, null);
43
+ assert.strictEqual(leido.html, '<p>Texto <strong>fuerte</strong> y <a href="ayuda:dos">otro</a></p>\n');
44
+ });
45
+ (0, mocha_1.it)('no deja pasar html crudo', () => {
46
+ assert.ok(!tema('---\nid: uno\ntitulo: Uno\n---\n<script>alert(1)</script>\n').html.includes('<script>'));
47
+ });
48
+ (0, mocha_1.it)('acepta archivos con BOM y fin de línea de Windows', () => {
49
+ assert.strictEqual(tema('---\r\nid: uno\r\ntitulo: Uno\r\n---\r\nhola\r\n').html, '<p>hola</p>\n');
50
+ });
51
+ (0, mocha_1.it)('rechaza un archivo sin encabezado', () => {
52
+ assert.throws(() => tema('# Hola\n'), /falta el encabezado/);
53
+ });
54
+ (0, mocha_1.it)('rechaza campos desconocidos (para detectar errores de tipeo)', () => {
55
+ assert.throws(() => tema('---\nid: uno\ntitulo: Uno\npermiso: campo.editar\n---\n'), /campo desconocido "permiso"/);
56
+ });
57
+ (0, mocha_1.it)('rechaza un modo que no existe', () => {
58
+ assert.throws(() => tema('---\nid: uno\ntitulo: Uno\nmodo: OFICINA\n---\n'), /modo debe ser/);
59
+ });
60
+ (0, mocha_1.it)('rechaza permisos sin acción', () => {
61
+ assert.throws(() => tema('---\nid: uno\ntitulo: Uno\npermisos: [campo]\n---\n'), /permiso.accion/);
62
+ });
63
+ (0, mocha_1.it)('exige título salvo para ocultar', () => {
64
+ assert.throws(() => tema('---\nid: uno\n---\n'), /titulo/);
65
+ assert.strictEqual(tema('---\nid: uno\nocultar: true\n---\n').ocultar, true);
66
+ });
67
+ });
68
+ (0, mocha_1.describe)('fuentes: cómo las apps finales agregan, reemplazan y ocultan temas', () => {
69
+ var dmencu = [
70
+ tema('---\nid: a\ntitulo: A de dmencu\norden: 1\n---\n', 'dmencu'),
71
+ tema('---\nid: b\ntitulo: B\norden: 2\n---\n', 'dmencu'),
72
+ tema('---\nid: c\ntitulo: C\norden: 3\n---\n', 'dmencu'),
73
+ ];
74
+ var app = [
75
+ tema('---\nid: a\ntitulo: A de la app\norden: 1\n---\n', 'app'),
76
+ tema('---\nid: b\nocultar: true\n---\n', 'app'),
77
+ tema('---\nid: d\ntitulo: D\norden: 0\n---\n', 'app'),
78
+ ];
79
+ (0, mocha_1.it)('un id repetido reemplaza al anterior, ocultar lo quita y los nuevos se agregan según orden', () => {
80
+ var combinados = (0, ayuda_1.combinarTemasDeAyuda)([dmencu, app]);
81
+ assert.deepStrictEqual(combinados.map(t => [t.id, t.origen]), [['d', 'app'], ['a', 'app'], ['c', 'dmencu']]);
82
+ });
83
+ (0, mocha_1.it)('rechaza ids repetidos dentro de una misma carpeta', () => {
84
+ var carpeta = fs.mkdtempSync(path.join(os.tmpdir(), 'ayuda-'));
85
+ try {
86
+ fs.writeFileSync(path.join(carpeta, '1.md'), '---\nid: a\ntitulo: A\n---\n');
87
+ fs.writeFileSync(path.join(carpeta, '2.md'), '---\nid: a\ntitulo: Otra A\n---\n');
88
+ assert.throws(() => (0, ayuda_1.leerFuenteDeAyuda)({ origen: 'test', carpeta }), /ya está en/);
89
+ }
90
+ finally {
91
+ fs.rmSync(carpeta, { recursive: true });
92
+ }
93
+ });
94
+ (0, mocha_1.it)('avisa si la carpeta no existe', () => {
95
+ assert.throws(() => (0, ayuda_1.leerFuenteDeAyuda)({ origen: 'test', carpeta: path.join(os.tmpdir(), 'no-existe-ayuda') }), /no existe la carpeta/);
96
+ });
97
+ (0, mocha_1.it)('la carpeta de dmencu se encuentra desde el js compilado', () => {
98
+ assert.ok(fs.existsSync(path.join((0, ayuda_1.carpetaDelPaquete)(__dirname), 'ayuda')));
99
+ });
100
+ });
101
+ (0, mocha_1.describe)('los temas de dmencu', () => {
102
+ (0, mocha_1.it)('no tienen problemas en GABINETE (permisos, roles y opciones de menú existen)', () => {
103
+ assert.deepStrictEqual(appConAyuda(GABINETE).problemasDeAyuda(), []);
104
+ });
105
+ (0, mocha_1.it)('no tienen problemas en RELEVAMIENTO', () => {
106
+ assert.deepStrictEqual(appConAyuda(RELEVAMIENTO).problemasDeAyuda(), []);
107
+ });
108
+ (0, mocha_1.it)('cada opción del menú de admin en GABINETE tiene un tema que la explica, directa o a través de su menú padre', () => {
109
+ var be = appConAyuda(GABINETE);
110
+ var context = (0, app_para_tests_1.contextoDelRol)(be, 'admin');
111
+ var opciones = (0, ayuda_1.menuConAyuda)(be.getMenu(context).menu, be.caches.ayuda);
112
+ var sinAyuda = opciones.filter(opcion => opcion.tema == null && opcion.ruta != 'configurar' && opcion.ruta != 'carto').map(opcion => opcion.ruta);
113
+ assert.deepStrictEqual(sinAyuda, []);
114
+ });
115
+ });
116
+ (0, mocha_1.describe)('qué ve cada perfil', () => {
117
+ (0, mocha_1.it)('en RELEVAMIENTO quien releva ve la ayuda del dispositivo', () => {
118
+ var be = appConAyuda(RELEVAMIENTO);
119
+ assert.deepStrictEqual(idsVisibles(be, 'encuestador'), ['dm-relevamiento', 'dm-sincronizar', 'dm-cambiar-modo']);
120
+ assert.deepStrictEqual(idsVisibles(be, 'supervisor'), ['dm-relevamiento', 'dm-sincronizar', 'dm-cambiar-modo']);
121
+ });
122
+ (0, mocha_1.it)('en RELEVAMIENTO quien no releva no ve ayuda ni la opción del menú', () => {
123
+ var be = appConAyuda(RELEVAMIENTO);
124
+ assert.deepStrictEqual(idsVisibles(be, 'coor_campo'), []);
125
+ assert.deepStrictEqual(be.getMenu((0, app_para_tests_1.contextoDelRol)(be, 'coor_campo')).menu, []);
126
+ });
127
+ (0, mocha_1.it)('en GABINETE el encuestador no ve la ayuda del dispositivo', () => {
128
+ var be = appConAyuda(GABINETE);
129
+ assert.deepStrictEqual(idsVisibles(be, 'encuestador'), []);
130
+ assert.deepStrictEqual(be.getMenu((0, app_para_tests_1.contextoDelRol)(be, 'encuestador')).menu, []);
131
+ });
132
+ (0, mocha_1.it)('en GABINETE el ingresador ve lo de campo pero no lo de administración ni procesamiento', () => {
133
+ var ids = idsVisibles(appConAyuda(GABINETE), 'ingresador');
134
+ assert.deepStrictEqual(ids, ['circuito-encuesta', 'asignacion', 'recepcion', 'supervision', 'varios']);
135
+ });
136
+ (0, mocha_1.it)('diseño conceptual ve la ayuda de metadatos', () => {
137
+ var ids = idsVisibles(appConAyuda(GABINETE), 'dis_conceptual');
138
+ assert.deepStrictEqual(ids, ['circuito-encuesta', 'metadatos']);
139
+ });
140
+ (0, mocha_1.it)('admin (superuser) ve todos los temas del modo', () => {
141
+ var be = appConAyuda(GABINETE);
142
+ var deGabinete = be.caches.ayuda.filter(t => t.modo != 'RELEVAMIENTO').map(t => t.id);
143
+ assert.deepStrictEqual(idsVisibles(be, 'admin'), deGabinete);
144
+ });
145
+ (0, mocha_1.it)('un tema por rol se muestra a ese rol aunque no tenga el permiso', () => {
146
+ var porRol = tema('---\nid: x\ntitulo: X\nroles: [auxiliar]\n---\n');
147
+ var be = (0, app_para_tests_1.crearAppParaTests)(GABINETE);
148
+ assert.deepStrictEqual((0, ayuda_1.temasVisibles)([porRol], (0, app_dmencu_1.quienConsultaAyuda)((0, app_para_tests_1.contextoDelRol)(be, 'auxiliar'))).map(t => t.id), ['x']);
149
+ assert.deepStrictEqual((0, ayuda_1.temasVisibles)([porRol], (0, app_dmencu_1.quienConsultaAyuda)((0, app_para_tests_1.contextoDelRol)(be, 'ingresador'))), []);
150
+ });
151
+ (0, mocha_1.it)('la opción ayuda va al final del menú de quien tiene temas', () => {
152
+ var be = appConAyuda(RELEVAMIENTO);
153
+ var menu = be.getMenu((0, app_para_tests_1.contextoDelRol)(be, 'encuestador')).menu;
154
+ assert.deepStrictEqual(menu.map(opcion => opcion.name), ['relevamiento', 'sincronizar', 'cambiar_modo', 'ayuda']);
155
+ });
156
+ });
157
+ (0, mocha_1.describe)('menú con ayuda (lo que muestra "Qué puedo hacer")', () => {
158
+ (0, mocha_1.it)('liga cada opción del menú del usuario con su tema y no incluye la opción ayuda', () => {
159
+ var be = appConAyuda(RELEVAMIENTO);
160
+ var context = (0, app_para_tests_1.contextoDelRol)(be, 'encuestador');
161
+ var temas = (0, ayuda_1.temasVisibles)(be.caches.ayuda, (0, app_dmencu_1.quienConsultaAyuda)(context));
162
+ assert.deepStrictEqual((0, ayuda_1.menuConAyuda)(be.getMenu(context).menu, temas), [
163
+ { ruta: 'relevamiento', label: 'relevamiento', tema: 'dm-relevamiento', opciones: [] },
164
+ { ruta: 'sincronizar', label: 'sincronizar', tema: 'dm-sincronizar', opciones: [] },
165
+ { ruta: 'cambiar_modo', label: 'cambiar modo', tema: 'dm-cambiar-modo', opciones: [] },
166
+ ]);
167
+ });
168
+ (0, mocha_1.it)('recorre los submenús con rutas separadas por /', () => {
169
+ var be = appConAyuda(GABINETE);
170
+ var context = (0, app_para_tests_1.contextoDelRol)(be, 'ingresador');
171
+ var temas = (0, ayuda_1.temasVisibles)(be.caches.ayuda, (0, app_dmencu_1.quienConsultaAyuda)(context));
172
+ var asignacion = (0, ayuda_1.menuConAyuda)(be.getMenu(context).menu, temas).find(opcion => opcion.ruta == 'asignacion');
173
+ assert.ok(asignacion);
174
+ assert.deepStrictEqual(asignacion.opciones.map(opcion => [opcion.ruta, opcion.tema]), [
175
+ ['asignacion/encuestador', 'asignacion'],
176
+ ['asignacion/ingresador', 'asignacion'],
177
+ ['asignacion/recuperador', 'asignacion'],
178
+ ]);
179
+ });
180
+ });
181
+ });
182
+ });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1heXVkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3QtYXl1ZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFBQSxpQ0FBcUM7SUFFckMsc0NBQXVDO0lBQ3ZDLDhCQUE4QjtJQUM5Qiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBRWxDLHFEQUEwRDtJQUMxRCwyQ0FFeUI7SUFFekIscURBQW1GO0lBRW5GLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFM0IsU0FBUyxXQUFXLENBQUMsTUFBYztRQUMvQixJQUFJLEVBQUUsR0FBRyxJQUFBLGtDQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUEsbUJBQVcsRUFBQyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLFdBQVcsQ0FBQyxFQUFnQixFQUFFLEdBQVc7UUFDOUMsT0FBTyxJQUFBLHFCQUFhLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBQSwrQkFBa0IsRUFBQyxJQUFBLCtCQUFjLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELFNBQVMsSUFBSSxDQUFDLFNBQWlCLEVBQUUsU0FBaUIsTUFBTTtRQUNwRCxPQUFPLElBQUEsMEJBQWtCLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBQSxnQkFBUSxFQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtRQUVyQyxJQUFBLGdCQUFRLEVBQUMseUJBQXlC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QUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDO2dCQUMzRyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QixNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUNsRixDQUFDLHdCQUF3QixFQUFFLFlBQVksQ0FBQztvQkFDeEMsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUM7b0JBQ3ZDLENBQUMsd0JBQXdCLEVBQUUsWUFBWSxDQUFDO2lCQUMzQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5cbmltcG9ydCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgcXVpZW5Db25zdWx0YUF5dWRhIH0gZnJvbSAnLi4vc2VydmVyL2FwcC1kbWVuY3UnO1xuaW1wb3J0IHtcbiAgICBjYXJnYXJBeXVkYSwgY2FycGV0YURlbFBhcXVldGUsIGNvbWJpbmFyVGVtYXNEZUF5dWRhLCBsZWVyRnVlbnRlRGVBeXVkYSwgbWVudUNvbkF5dWRhLCBwYXJzZWFyVGVtYURlQXl1ZGEsIHRlbWFzVmlzaWJsZXNcbn0gZnJvbSAnLi4vc2VydmVyL2F5dWRhJztcbmltcG9ydCB0eXBlIHsgQXl1ZGFUZW1hLCBNZW51SW5mb0Jhc2UgfSBmcm9tICcuLi9zZXJ2ZXIvdHlwZXMtZG1lbmN1JztcbmltcG9ydCB7IEFwcFBhcmFUZXN0cywgY29udGV4dG9EZWxSb2wsIGNyZWFyQXBwUGFyYVRlc3RzIH0gZnJvbSAnLi9hcHAtcGFyYS10ZXN0cyc7XG5cbmNvbnN0IEdBQklORVRFID0gJyc7XG5jb25zdCBSRUxFVkFNSUVOVE8gPSAnd2ViJztcblxuZnVuY3Rpb24gYXBwQ29uQXl1ZGEocG9saWN5OiBzdHJpbmcpOiBBcHBQYXJhVGVzdHMge1xuICAgIHZhciBiZSA9IGNyZWFyQXBwUGFyYVRlc3RzKHBvbGljeSk7XG4gICAgYmUuY2FjaGVzLmF5dWRhID0gY2FyZ2FyQXl1ZGEoYmUuZ2V0QXl1ZGFGdWVudGVzKCkpO1xuICAgIHJldHVybiBiZTtcbn1cblxuZnVuY3Rpb24gaWRzVmlzaWJsZXMoYmU6IEFwcFBhcmFUZXN0cywgcm9sOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRlbWFzVmlzaWJsZXMoYmUuY2FjaGVzLmF5dWRhLCBxdWllbkNvbnN1bHRhQXl1ZGEoY29udGV4dG9EZWxSb2woYmUsIHJvbCkpKS5tYXAodGVtYSA9PiB0ZW1hLmlkKTtcbn1cblxuZnVuY3Rpb24gdGVtYShjb250ZW5pZG86IHN0cmluZywgb3JpZ2VuOiBzdHJpbmcgPSAndGVzdCcpOiBBeXVkYVRlbWEge1xuICAgIHJldHVybiBwYXJzZWFyVGVtYURlQXl1ZGEoY29udGVuaWRvLCAndGVtYS5tZCcsIG9yaWdlbik7XG59XG5cbmRlc2NyaWJlKCdkbWVuY3UgLSBheXVkYSBlbiBsw61uZWEnLCAoKSA9PiB7XG5cbiAgICBkZXNjcmliZSgnZm9ybWF0byBkZSBsb3MgYXJjaGl2b3MnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdsZWUgZWwgZW5jYWJlemFkbyB5IGNvbnZpZXJ0ZSBlbCBtYXJrZG93biBhIGh0bWwnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgbGVpZG8gPSB0ZW1hKCctLS1cXG5pZDogdW5vXFxudGl0dWxvOiBVbm9cXG5wZXJtaXNvczogW2NhbXBvLmVkaXRhcl1cXG5tZW51OiBhc2lnbmFjaW9uXFxuLS0tXFxuVGV4dG8gKipmdWVydGUqKiB5IFtvdHJvXShheXVkYTpkb3MpXFxuJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGVpZG8uaWQsICd1bm8nKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsZWlkby50aXR1bG8sICdVbm8nKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwobGVpZG8ucGVybWlzb3MsIFsnY2FtcG8uZWRpdGFyJ10pO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChsZWlkby5tZW51LCBbJ2FzaWduYWNpb24nXSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGxlaWRvLnJvbGVzLCBbXSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGVpZG8ubW9kbywgbnVsbCk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGVpZG8uaHRtbCwgJzxwPlRleHRvIDxzdHJvbmc+ZnVlcnRlPC9zdHJvbmc+IHkgPGEgaHJlZj1cImF5dWRhOmRvc1wiPm90cm88L2E+PC9wPlxcbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ25vIGRlamEgcGFzYXIgaHRtbCBjcnVkbycsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5vayghdGVtYSgnLS0tXFxuaWQ6IHVub1xcbnRpdHVsbzogVW5vXFxuLS0tXFxuPHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0PlxcbicpLmh0bWwuaW5jbHVkZXMoJzxzY3JpcHQ+JykpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2FjZXB0YSBhcmNoaXZvcyBjb24gQk9NIHkgZmluIGRlIGzDrW5lYSBkZSBXaW5kb3dzJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbWEoJ++7vy0tLVxcclxcbmlkOiB1bm9cXHJcXG50aXR1bG86IFVub1xcclxcbi0tLVxcclxcbmhvbGFcXHJcXG4nKS5odG1sLCAnPHA+aG9sYTwvcD5cXG4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdyZWNoYXphIHVuIGFyY2hpdm8gc2luIGVuY2FiZXphZG8nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRlbWEoJyMgSG9sYVxcbicpLCAvZmFsdGEgZWwgZW5jYWJlemFkby8pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3JlY2hhemEgY2FtcG9zIGRlc2Nvbm9jaWRvcyAocGFyYSBkZXRlY3RhciBlcnJvcmVzIGRlIHRpcGVvKScsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGVtYSgnLS0tXFxuaWQ6IHVub1xcbnRpdHVsbzogVW5vXFxucGVybWlzbzogY2FtcG8uZWRpdGFyXFxuLS0tXFxuJyksIC9jYW1wbyBkZXNjb25vY2lkbyBcInBlcm1pc29cIi8pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3JlY2hhemEgdW4gbW9kbyBxdWUgbm8gZXhpc3RlJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0ZW1hKCctLS1cXG5pZDogdW5vXFxudGl0dWxvOiBVbm9cXG5tb2RvOiBPRklDSU5BXFxuLS0tXFxuJyksIC9tb2RvIGRlYmUgc2VyLyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVjaGF6YSBwZXJtaXNvcyBzaW4gYWNjacOzbicsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGVtYSgnLS0tXFxuaWQ6IHVub1xcbnRpdHVsbzogVW5vXFxucGVybWlzb3M6IFtjYW1wb11cXG4tLS1cXG4nKSwgL3Blcm1pc28uYWNjaW9uLyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnZXhpZ2UgdMOtdHVsbyBzYWx2byBwYXJhIG9jdWx0YXInLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRlbWEoJy0tLVxcbmlkOiB1bm9cXG4tLS1cXG4nKSwgL3RpdHVsby8pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbWEoJy0tLVxcbmlkOiB1bm9cXG5vY3VsdGFyOiB0cnVlXFxuLS0tXFxuJykub2N1bHRhciwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Z1ZW50ZXM6IGPDs21vIGxhcyBhcHBzIGZpbmFsZXMgYWdyZWdhbiwgcmVlbXBsYXphbiB5IG9jdWx0YW4gdGVtYXMnLCAoKSA9PiB7XG4gICAgICAgIHZhciBkbWVuY3UgPSBbXG4gICAgICAgICAgICB0ZW1hKCctLS1cXG5pZDogYVxcbnRpdHVsbzogQSBkZSBkbWVuY3VcXG5vcmRlbjogMVxcbi0tLVxcbicsICdkbWVuY3UnKSxcbiAgICAgICAgICAgIHRlbWEoJy0tLVxcbmlkOiBiXFxudGl0dWxvOiBCXFxub3JkZW46IDJcXG4tLS1cXG4nLCAnZG1lbmN1JyksXG4gICAgICAgICAgICB0ZW1hKCctLS1cXG5pZDogY1xcbnRpdHVsbzogQ1xcbm9yZGVuOiAzXFxuLS0tXFxuJywgJ2RtZW5jdScpLFxuICAgICAgICBdO1xuICAgICAgICB2YXIgYXBwID0gW1xuICAgICAgICAgICAgdGVtYSgnLS0tXFxuaWQ6IGFcXG50aXR1bG86IEEgZGUgbGEgYXBwXFxub3JkZW46IDFcXG4tLS1cXG4nLCAnYXBwJyksXG4gICAgICAgICAgICB0ZW1hKCctLS1cXG5pZDogYlxcbm9jdWx0YXI6IHRydWVcXG4tLS1cXG4nLCAnYXBwJyksXG4gICAgICAgICAgICB0ZW1hKCctLS1cXG5pZDogZFxcbnRpdHVsbzogRFxcbm9yZGVuOiAwXFxuLS0tXFxuJywgJ2FwcCcpLFxuICAgICAgICBdO1xuICAgICAgICBpdCgndW4gaWQgcmVwZXRpZG8gcmVlbXBsYXphIGFsIGFudGVyaW9yLCBvY3VsdGFyIGxvIHF1aXRhIHkgbG9zIG51ZXZvcyBzZSBhZ3JlZ2FuIHNlZ8O6biBvcmRlbicsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBjb21iaW5hZG9zID0gY29tYmluYXJUZW1hc0RlQXl1ZGEoW2RtZW5jdSwgYXBwXSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGNvbWJpbmFkb3MubWFwKHQgPT4gW3QuaWQsIHQub3JpZ2VuXSksIFtbJ2QnLCAnYXBwJ10sIFsnYScsICdhcHAnXSwgWydjJywgJ2RtZW5jdSddXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVjaGF6YSBpZHMgcmVwZXRpZG9zIGRlbnRybyBkZSB1bmEgbWlzbWEgY2FycGV0YScsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBjYXJwZXRhID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnYXl1ZGEtJykpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihjYXJwZXRhLCAnMS5tZCcpLCAnLS0tXFxuaWQ6IGFcXG50aXR1bG86IEFcXG4tLS1cXG4nKTtcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihjYXJwZXRhLCAnMi5tZCcpLCAnLS0tXFxuaWQ6IGFcXG50aXR1bG86IE90cmEgQVxcbi0tLVxcbicpO1xuICAgICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbGVlckZ1ZW50ZURlQXl1ZGEoeyBvcmlnZW46ICd0ZXN0JywgY2FycGV0YSB9KSwgL3lhIGVzdMOhIGVuLyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGZzLnJtU3luYyhjYXJwZXRhLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdhdmlzYSBzaSBsYSBjYXJwZXRhIG5vIGV4aXN0ZScsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbGVlckZ1ZW50ZURlQXl1ZGEoeyBvcmlnZW46ICd0ZXN0JywgY2FycGV0YTogcGF0aC5qb2luKG9zLnRtcGRpcigpLCAnbm8tZXhpc3RlLWF5dWRhJykgfSksIC9ubyBleGlzdGUgbGEgY2FycGV0YS8pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2xhIGNhcnBldGEgZGUgZG1lbmN1IHNlIGVuY3VlbnRyYSBkZXNkZSBlbCBqcyBjb21waWxhZG8nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQub2soZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY2FycGV0YURlbFBhcXVldGUoX19kaXJuYW1lKSwgJ2F5dWRhJykpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbG9zIHRlbWFzIGRlIGRtZW5jdScsICgpID0+IHtcbiAgICAgICAgaXQoJ25vIHRpZW5lbiBwcm9ibGVtYXMgZW4gR0FCSU5FVEUgKHBlcm1pc29zLCByb2xlcyB5IG9wY2lvbmVzIGRlIG1lbsO6IGV4aXN0ZW4pJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhcHBDb25BeXVkYShHQUJJTkVURSkucHJvYmxlbWFzRGVBeXVkYSgpLCBbXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnbm8gdGllbmVuIHByb2JsZW1hcyBlbiBSRUxFVkFNSUVOVE8nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFwcENvbkF5dWRhKFJFTEVWQU1JRU5UTykucHJvYmxlbWFzRGVBeXVkYSgpLCBbXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY2FkYSBvcGNpw7NuIGRlbCBtZW7DuiBkZSBhZG1pbiBlbiBHQUJJTkVURSB0aWVuZSB1biB0ZW1hIHF1ZSBsYSBleHBsaWNhLCBkaXJlY3RhIG8gYSB0cmF2w6lzIGRlIHN1IG1lbsO6IHBhZHJlJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGJlID0gYXBwQ29uQXl1ZGEoR0FCSU5FVEUpO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb250ZXh0b0RlbFJvbChiZSwgJ2FkbWluJyk7XG4gICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBtZW51Q29uQXl1ZGEoYmUuZ2V0TWVudShjb250ZXh0KS5tZW51LCBiZS5jYWNoZXMuYXl1ZGEpO1xuICAgICAgICAgICAgdmFyIHNpbkF5dWRhID0gb3BjaW9uZXMuZmlsdGVyKG9wY2lvbiA9PiBvcGNpb24udGVtYSA9PSBudWxsICYmIG9wY2lvbi5ydXRhICE9ICdjb25maWd1cmFyJyAmJiBvcGNpb24ucnV0YSAhPSAnY2FydG8nKS5tYXAob3BjaW9uID0+IG9wY2lvbi5ydXRhKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2luQXl1ZGEsIFtdKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncXXDqSB2ZSBjYWRhIHBlcmZpbCcsICgpID0+IHtcbiAgICAgICAgaXQoJ2VuIFJFTEVWQU1JRU5UTyBxdWllbiByZWxldmEgdmUgbGEgYXl1ZGEgZGVsIGRpc3Bvc2l0aXZvJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGJlID0gYXBwQ29uQXl1ZGEoUkVMRVZBTUlFTlRPKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoaWRzVmlzaWJsZXMoYmUsICdlbmN1ZXN0YWRvcicpLCBbJ2RtLXJlbGV2YW1pZW50bycsICdkbS1zaW5jcm9uaXphcicsICdkbS1jYW1iaWFyLW1vZG8nXSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlkc1Zpc2libGVzKGJlLCAnc3VwZXJ2aXNvcicpLCBbJ2RtLXJlbGV2YW1pZW50bycsICdkbS1zaW5jcm9uaXphcicsICdkbS1jYW1iaWFyLW1vZG8nXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnZW4gUkVMRVZBTUlFTlRPIHF1aWVuIG5vIHJlbGV2YSBubyB2ZSBheXVkYSBuaSBsYSBvcGNpw7NuIGRlbCBtZW7DuicsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBiZSA9IGFwcENvbkF5dWRhKFJFTEVWQU1JRU5UTyk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlkc1Zpc2libGVzKGJlLCAnY29vcl9jYW1wbycpLCBbXSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJlLmdldE1lbnUoY29udGV4dG9EZWxSb2woYmUsICdjb29yX2NhbXBvJykpLm1lbnUsIFtdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdlbiBHQUJJTkVURSBlbCBlbmN1ZXN0YWRvciBubyB2ZSBsYSBheXVkYSBkZWwgZGlzcG9zaXRpdm8nLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgYmUgPSBhcHBDb25BeXVkYShHQUJJTkVURSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlkc1Zpc2libGVzKGJlLCAnZW5jdWVzdGFkb3InKSwgW10pO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChiZS5nZXRNZW51KGNvbnRleHRvRGVsUm9sKGJlLCAnZW5jdWVzdGFkb3InKSkubWVudSwgW10pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2VuIEdBQklORVRFIGVsIGluZ3Jlc2Fkb3IgdmUgbG8gZGUgY2FtcG8gcGVybyBubyBsbyBkZSBhZG1pbmlzdHJhY2nDs24gbmkgcHJvY2VzYW1pZW50bycsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBpZHMgPSBpZHNWaXNpYmxlcyhhcHBDb25BeXVkYShHQUJJTkVURSksICdpbmdyZXNhZG9yJyk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlkcywgWydjaXJjdWl0by1lbmN1ZXN0YScsICdhc2lnbmFjaW9uJywgJ3JlY2VwY2lvbicsICdzdXBlcnZpc2lvbicsICd2YXJpb3MnXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnZGlzZcOxbyBjb25jZXB0dWFsIHZlIGxhIGF5dWRhIGRlIG1ldGFkYXRvcycsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBpZHMgPSBpZHNWaXNpYmxlcyhhcHBDb25BeXVkYShHQUJJTkVURSksICdkaXNfY29uY2VwdHVhbCcpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChpZHMsIFsnY2lyY3VpdG8tZW5jdWVzdGEnLCAnbWV0YWRhdG9zJ10pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2FkbWluIChzdXBlcnVzZXIpIHZlIHRvZG9zIGxvcyB0ZW1hcyBkZWwgbW9kbycsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBiZSA9IGFwcENvbkF5dWRhKEdBQklORVRFKTtcbiAgICAgICAgICAgIHZhciBkZUdhYmluZXRlID0gYmUuY2FjaGVzLmF5dWRhLmZpbHRlcih0ID0+IHQubW9kbyAhPSAnUkVMRVZBTUlFTlRPJykubWFwKHQgPT4gdC5pZCk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlkc1Zpc2libGVzKGJlLCAnYWRtaW4nKSwgZGVHYWJpbmV0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgndW4gdGVtYSBwb3Igcm9sIHNlIG11ZXN0cmEgYSBlc2Ugcm9sIGF1bnF1ZSBubyB0ZW5nYSBlbCBwZXJtaXNvJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHBvclJvbCA9IHRlbWEoJy0tLVxcbmlkOiB4XFxudGl0dWxvOiBYXFxucm9sZXM6IFthdXhpbGlhcl1cXG4tLS1cXG4nKTtcbiAgICAgICAgICAgIHZhciBiZSA9IGNyZWFyQXBwUGFyYVRlc3RzKEdBQklORVRFKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodGVtYXNWaXNpYmxlcyhbcG9yUm9sXSwgcXVpZW5Db25zdWx0YUF5dWRhKGNvbnRleHRvRGVsUm9sKGJlLCAnYXV4aWxpYXInKSkpLm1hcCh0ID0+IHQuaWQpLCBbJ3gnXSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHRlbWFzVmlzaWJsZXMoW3BvclJvbF0sIHF1aWVuQ29uc3VsdGFBeXVkYShjb250ZXh0b0RlbFJvbChiZSwgJ2luZ3Jlc2Fkb3InKSkpLCBbXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnbGEgb3BjacOzbiBheXVkYSB2YSBhbCBmaW5hbCBkZWwgbWVuw7ogZGUgcXVpZW4gdGllbmUgdGVtYXMnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgYmUgPSBhcHBDb25BeXVkYShSRUxFVkFNSUVOVE8pO1xuICAgICAgICAgICAgdmFyIG1lbnU6IE1lbnVJbmZvQmFzZVtdID0gYmUuZ2V0TWVudShjb250ZXh0b0RlbFJvbChiZSwgJ2VuY3Vlc3RhZG9yJykpLm1lbnU7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG1lbnUubWFwKG9wY2lvbiA9PiBvcGNpb24ubmFtZSksIFsncmVsZXZhbWllbnRvJywgJ3NpbmNyb25pemFyJywgJ2NhbWJpYXJfbW9kbycsICdheXVkYSddKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbWVuw7ogY29uIGF5dWRhIChsbyBxdWUgbXVlc3RyYSBcIlF1w6kgcHVlZG8gaGFjZXJcIiknLCAoKSA9PiB7XG4gICAgICAgIGl0KCdsaWdhIGNhZGEgb3BjacOzbiBkZWwgbWVuw7ogZGVsIHVzdWFyaW8gY29uIHN1IHRlbWEgeSBubyBpbmNsdXllIGxhIG9wY2nDs24gYXl1ZGEnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgYmUgPSBhcHBDb25BeXVkYShSRUxFVkFNSUVOVE8pO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb250ZXh0b0RlbFJvbChiZSwgJ2VuY3Vlc3RhZG9yJyk7XG4gICAgICAgICAgICB2YXIgdGVtYXMgPSB0ZW1hc1Zpc2libGVzKGJlLmNhY2hlcy5heXVkYSwgcXVpZW5Db25zdWx0YUF5dWRhKGNvbnRleHQpKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwobWVudUNvbkF5dWRhKGJlLmdldE1lbnUoY29udGV4dCkubWVudSwgdGVtYXMpLCBbXG4gICAgICAgICAgICAgICAgeyBydXRhOiAncmVsZXZhbWllbnRvJywgbGFiZWw6ICdyZWxldmFtaWVudG8nLCB0ZW1hOiAnZG0tcmVsZXZhbWllbnRvJywgb3BjaW9uZXM6IFtdIH0sXG4gICAgICAgICAgICAgICAgeyBydXRhOiAnc2luY3Jvbml6YXInLCBsYWJlbDogJ3NpbmNyb25pemFyJywgdGVtYTogJ2RtLXNpbmNyb25pemFyJywgb3BjaW9uZXM6IFtdIH0sXG4gICAgICAgICAgICAgICAgeyBydXRhOiAnY2FtYmlhcl9tb2RvJywgbGFiZWw6ICdjYW1iaWFyIG1vZG8nLCB0ZW1hOiAnZG0tY2FtYmlhci1tb2RvJywgb3BjaW9uZXM6IFtdIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdyZWNvcnJlIGxvcyBzdWJtZW7DunMgY29uIHJ1dGFzIHNlcGFyYWRhcyBwb3IgLycsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBiZSA9IGFwcENvbkF5dWRhKEdBQklORVRFKTtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY29udGV4dG9EZWxSb2woYmUsICdpbmdyZXNhZG9yJyk7XG4gICAgICAgICAgICB2YXIgdGVtYXMgPSB0ZW1hc1Zpc2libGVzKGJlLmNhY2hlcy5heXVkYSwgcXVpZW5Db25zdWx0YUF5dWRhKGNvbnRleHQpKTtcbiAgICAgICAgICAgIHZhciBhc2lnbmFjaW9uID0gbWVudUNvbkF5dWRhKGJlLmdldE1lbnUoY29udGV4dCkubWVudSwgdGVtYXMpLmZpbmQob3BjaW9uID0+IG9wY2lvbi5ydXRhID09ICdhc2lnbmFjaW9uJyk7XG4gICAgICAgICAgICBhc3NlcnQub2soYXNpZ25hY2lvbik7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFzaWduYWNpb24ub3BjaW9uZXMubWFwKG9wY2lvbiA9PiBbb3BjaW9uLnJ1dGEsIG9wY2lvbi50ZW1hXSksIFtcbiAgICAgICAgICAgICAgICBbJ2FzaWduYWNpb24vZW5jdWVzdGFkb3InLCAnYXNpZ25hY2lvbiddLFxuICAgICAgICAgICAgICAgIFsnYXNpZ25hY2lvbi9pbmdyZXNhZG9yJywgJ2FzaWduYWNpb24nXSxcbiAgICAgICAgICAgICAgICBbJ2FzaWduYWNpb24vcmVjdXBlcmFkb3InLCAnYXNpZ25hY2lvbiddLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};