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.
- package/README.md +42 -42
- package/ayuda/asignacion.md +16 -0
- package/ayuda/circuito-encuesta.md +27 -0
- package/ayuda/control.md +13 -0
- package/ayuda/dm-cambiar-modo.md +16 -0
- package/ayuda/dm-relevamiento.md +20 -0
- package/ayuda/dm-sincronizar.md +18 -0
- package/ayuda/fin-de-campo.md +14 -0
- package/ayuda/metadatos.md +14 -0
- package/ayuda/procesar.md +13 -0
- package/ayuda/recepcion.md +20 -0
- package/ayuda/supervision.md +9 -0
- package/ayuda/usuarios.md +12 -0
- package/ayuda/varios.md +23 -0
- package/dist/client/client/client.js +101 -4
- package/dist/client/client/css/menu.styl +29 -0
- package/dist/client/unlogged/abrir-formulario.js +1 -1
- package/dist/client/unlogged/bypass-formulario.d.ts +6 -42
- package/dist/client/unlogged/bypass-formulario.js +84 -219
- package/dist/client/unlogged/calculos-encuesta.js +112 -38
- package/dist/client/unlogged/css/formulario-react.styl +9 -0
- package/dist/client/unlogged/helpers-casilleros.d.ts +1 -1
- package/dist/client/unlogged/helpers-casilleros.js +12 -18
- package/dist/client/unlogged/helpers-formulario.d.ts +16 -0
- package/dist/client/unlogged/helpers-formulario.js +88 -0
- package/dist/client/unlogged/redux-formulario.d.ts +1 -2
- package/dist/client/unlogged/redux-formulario.js +21 -31
- package/dist/client/unlogged/render-config.d.ts +5 -1
- package/dist/client/unlogged/render-config.js +14 -1
- package/dist/client/unlogged/render-formulario.d.ts +3 -6
- package/dist/client/unlogged/render-formulario.js +71 -69
- package/dist/client/unlogged/render-formulario.tsx +100 -57
- package/dist/client/unlogged/render-general.d.ts +2 -0
- package/dist/client/unlogged/render-general.js +2 -1
- package/dist/client/unlogged/render-general.tsx +2 -1
- package/dist/client/unlogged/render-init.d.ts +1 -0
- package/dist/client/unlogged/render-init.js +9 -2
- package/dist/client/unlogged/tipos.d.ts +93 -41
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/app-dmencu.d.ts +1435 -0
- package/dist/server/app-dmencu.js +1091 -0
- package/dist/server/ayuda.d.ts +19 -0
- package/dist/server/ayuda.js +224 -0
- package/dist/server/def-config.d.ts +1 -0
- package/dist/server/def-config.js +123 -0
- package/dist/server/procedures-dmencu.d.ts +43 -0
- package/dist/server/procedures-dmencu.js +2313 -0
- package/dist/server/server/app-dmencu.d.ts +49 -91
- package/dist/server/server/app-dmencu.js +151 -52
- package/dist/server/server/ayuda.d.ts +19 -0
- package/dist/server/server/ayuda.js +224 -0
- package/dist/server/server/procedures-dmencu.d.ts +34 -2
- package/dist/server/server/procedures-dmencu.js +93 -51
- package/dist/server/server/setters-rea-no-rea.d.ts +13 -0
- package/dist/server/server/setters-rea-no-rea.js +35 -0
- package/dist/server/server/table-areas.js +4 -4
- package/dist/server/server/table-areas_asignacion_general.js +2 -1
- package/dist/server/server/table-control_campo.js +4 -4
- package/dist/server/server/table-no_rea.js +4 -2
- package/dist/server/server/table-no_rea_sup.js +7 -3
- package/dist/server/server/table-personal.js +1 -1
- package/dist/server/server/table-tareas_tem.js +2 -2
- package/dist/server/server/table-tem.js +2 -2
- package/dist/server/server/types-dmencu.d.ts +53 -2
- package/dist/server/server/types-dmencu.js +2 -1
- package/dist/server/setters-rea-no-rea.d.ts +13 -0
- package/dist/server/setters-rea-no-rea.js +35 -0
- package/dist/server/table-acciones.d.ts +2 -0
- package/dist/server/table-acciones.js +45 -0
- package/dist/server/table-area_enc_proximas.d.ts +2 -0
- package/dist/server/table-area_enc_proximas.js +30 -0
- package/dist/server/table-areas.d.ts +4 -0
- package/dist/server/table-areas.js +112 -0
- package/dist/server/table-areas_asignacion_general.d.ts +2 -0
- package/dist/server/table-areas_asignacion_general.js +86 -0
- package/dist/server/table-barrios.d.ts +2 -0
- package/dist/server/table-barrios.js +35 -0
- package/dist/server/table-comunas.d.ts +2 -0
- package/dist/server/table-comunas.js +33 -0
- package/dist/server/table-control_campo.d.ts +12 -0
- package/dist/server/table-control_campo.js +119 -0
- package/dist/server/table-control_dias_carga.d.ts +2 -0
- package/dist/server/table-control_dias_carga.js +63 -0
- package/dist/server/table-control_resumen.d.ts +2 -0
- package/dist/server/table-control_resumen.js +19 -0
- package/dist/server/table-diccionario.d.ts +2 -0
- package/dist/server/table-diccionario.js +32 -0
- package/dist/server/table-dictra.d.ts +2 -0
- package/dist/server/table-dictra.js +46 -0
- package/dist/server/table-dicvar.d.ts +2 -0
- package/dist/server/table-dicvar.js +32 -0
- package/dist/server/table-encuestadores.d.ts +13 -0
- package/dist/server/table-encuestadores.js +75 -0
- package/dist/server/table-estados.d.ts +2 -0
- package/dist/server/table-estados.js +47 -0
- package/dist/server/table-estados_acciones.d.ts +2 -0
- package/dist/server/table-estados_acciones.js +40 -0
- package/dist/server/table-fracciones.d.ts +2 -0
- package/dist/server/table-fracciones.js +37 -0
- package/dist/server/table-grilla_hoja_ruta.d.ts +2 -0
- package/dist/server/table-grilla_hoja_ruta.js +93 -0
- package/dist/server/table-historial_tem.d.ts +2 -0
- package/dist/server/table-historial_tem.js +57 -0
- package/dist/server/table-hogares.d.ts +2 -0
- package/dist/server/table-hogares.js +156 -0
- package/dist/server/table-hogares_sup.d.ts +2 -0
- package/dist/server/table-hogares_sup.js +191 -0
- package/dist/server/table-inconsistencias_cumplen_condicion.d.ts +2 -0
- package/dist/server/table-inconsistencias_cumplen_condicion.js +33 -0
- package/dist/server/table-manzanas.d.ts +2 -0
- package/dist/server/table-manzanas.js +36 -0
- package/dist/server/table-mis_encuestadores.d.ts +2 -0
- package/dist/server/table-mis_encuestadores.js +77 -0
- package/dist/server/table-mis_tareas.d.ts +2 -0
- package/dist/server/table-mis_tareas.js +18 -0
- package/dist/server/table-mis_tareas_areas.d.ts +2 -0
- package/dist/server/table-mis_tareas_areas.js +20 -0
- package/dist/server/table-modos_dm.d.ts +2 -0
- package/dist/server/table-modos_dm.js +28 -0
- package/dist/server/table-no_rea.js +38 -0
- package/dist/server/table-no_rea_sup.js +36 -0
- package/dist/server/table-operaciones.d.ts +2 -0
- package/dist/server/table-operaciones.js +30 -0
- package/dist/server/table-parametros.d.ts +2 -0
- package/dist/server/table-parametros.js +40 -0
- package/dist/server/table-permisos.d.ts +2 -0
- package/dist/server/table-permisos.js +31 -0
- package/dist/server/table-personal.d.ts +5 -0
- package/dist/server/table-personal.js +62 -0
- package/dist/server/table-personal_rol.d.ts +2 -0
- package/dist/server/table-personal_rol.js +42 -0
- package/dist/server/table-personas.d.ts +2 -0
- package/dist/server/table-personas.js +448 -0
- package/dist/server/table-personas_sup.d.ts +2 -0
- package/dist/server/table-personas_sup.js +93 -0
- package/dist/server/table-radios.d.ts +2 -0
- package/dist/server/table-radios.js +37 -0
- package/dist/server/table-rea.d.ts +2 -0
- package/dist/server/table-rea.js +38 -0
- package/dist/server/table-rea_sup.d.ts +2 -0
- package/dist/server/table-rea_sup.js +38 -0
- package/dist/server/table-recepcionistas.d.ts +2 -0
- package/dist/server/table-recepcionistas.js +18 -0
- package/dist/server/table-recuperadores.d.ts +2 -0
- package/dist/server/table-recuperadores.js +18 -0
- package/dist/server/table-roles.d.ts +2 -0
- package/dist/server/table-roles.js +33 -0
- package/dist/server/table-roles_permisos.d.ts +2 -0
- package/dist/server/table-roles_permisos.js +36 -0
- package/dist/server/table-roles_subordinados.d.ts +2 -0
- package/dist/server/table-roles_subordinados.js +31 -0
- package/dist/server/table-semanas.d.ts +2 -0
- package/dist/server/table-semanas.js +42 -0
- package/dist/server/table-sincronizaciones.d.ts +2 -0
- package/dist/server/table-sincronizaciones.js +30 -0
- package/dist/server/table-supervisores.d.ts +2 -0
- package/dist/server/table-supervisores.js +18 -0
- package/dist/server/table-tareas.d.ts +2 -0
- package/dist/server/table-tareas.js +48 -0
- package/dist/server/table-tareas_areas.d.ts +7 -0
- package/dist/server/table-tareas_areas.js +112 -0
- package/dist/server/table-tareas_proximas.d.ts +2 -0
- package/dist/server/table-tareas_proximas.js +48 -0
- package/dist/server/table-tareas_tem.d.ts +14 -0
- package/dist/server/table-tareas_tem.js +206 -0
- package/dist/server/table-tareas_tem_analisis_campo.d.ts +2 -0
- package/dist/server/table-tareas_tem_analisis_campo.js +31 -0
- package/dist/server/table-tareas_tem_fin_campo.d.ts +3 -0
- package/dist/server/table-tareas_tem_fin_campo.js +56 -0
- package/dist/server/table-tareas_tem_ingreso.d.ts +2 -0
- package/dist/server/table-tareas_tem_ingreso.js +31 -0
- package/dist/server/table-tareas_tem_procesamiento.d.ts +2 -0
- package/dist/server/table-tareas_tem_procesamiento.js +34 -0
- package/dist/server/table-tareas_tem_recepcion.d.ts +6 -0
- package/dist/server/table-tareas_tem_recepcion.js +59 -0
- package/dist/server/table-tem.d.ts +3 -0
- package/dist/server/table-tem.js +247 -0
- package/dist/server/table-tem_asignacion.d.ts +2 -0
- package/dist/server/table-tem_asignacion.js +50 -0
- package/dist/server/table-tem_borradas.d.ts +2 -0
- package/dist/server/table-tem_borradas.js +35 -0
- package/dist/server/table-usuarios.d.ts +2 -0
- package/dist/server/table-usuarios.js +63 -0
- package/dist/server/table-visitas.d.ts +2 -0
- package/dist/server/table-visitas.js +91 -0
- package/dist/server/table-visitas_sup.d.ts +2 -0
- package/dist/server/table-visitas_sup.js +91 -0
- package/dist/server/table-viviendas.d.ts +2 -0
- package/dist/server/table-viviendas.js +299 -0
- package/dist/server/types-dmencu.d.ts +114 -0
- package/dist/server/types-dmencu.js +34 -0
- package/dist/server/unlogged/tipos.d.ts +93 -41
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/test/app-para-tests.d.ts +1117 -0
- package/dist/test/app-para-tests.js +95 -0
- package/dist/test/test-ayuda.d.ts +1 -0
- package/dist/test/test-ayuda.js +183 -0
- package/dist/test/test-caches-rea.d.ts +1 -0
- package/dist/test/test-caches-rea.js +243 -0
- package/dist/test/test-helpers-casilleros.d.ts +1 -0
- package/dist/test/test-helpers-casilleros.js +154 -0
- package/dist/test/test-helpers-formulario.d.ts +1 -0
- package/dist/test/test-helpers-formulario.js +95 -0
- package/dist/test/test-impacto-rea-no-rea-en-bd.d.ts +1 -0
- package/dist/test/test-impacto-rea-no-rea-en-bd.js +243 -0
- package/dist/test/test-menu-segun-rol.d.ts +1 -0
- package/dist/test/test-menu-segun-rol.js +170 -0
- package/dist/test/test-setters-rea-no-rea.d.ts +1 -0
- package/dist/test/test-setters-rea-no-rea.js +95 -0
- package/dist/test/test.d.ts +7 -0
- package/dist/test/test.js +9 -2
- package/dist/unlogged/helpers-casilleros.d.ts +1 -1
- package/dist/unlogged/helpers-casilleros.js +12 -18
- package/dist/unlogged/helpers-formulario.d.ts +16 -0
- package/dist/unlogged/helpers-formulario.js +88 -0
- package/dist/unlogged/tipos.d.ts +20 -2
- package/dist/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/abrir-formulario.js +1 -1
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +6 -42
- package/dist/unlogged/unlogged/bypass-formulario.js +84 -219
- package/dist/unlogged/unlogged/css/formulario-react.styl +9 -0
- package/dist/unlogged/unlogged/helpers-casilleros.js +7 -14
- package/dist/unlogged/unlogged/helpers-formulario.d.ts +16 -0
- package/dist/unlogged/unlogged/helpers-formulario.js +88 -0
- package/dist/unlogged/unlogged/redux-formulario.d.ts +1 -2
- package/dist/unlogged/unlogged/redux-formulario.js +21 -31
- package/dist/unlogged/unlogged/render-config.d.ts +5 -1
- package/dist/unlogged/unlogged/render-config.js +14 -1
- package/dist/unlogged/unlogged/render-formulario.d.ts +3 -6
- package/dist/unlogged/unlogged/render-formulario.js +71 -69
- package/dist/unlogged/unlogged/render-formulario.tsx +100 -57
- package/dist/unlogged/unlogged/render-general.d.ts +2 -0
- package/dist/unlogged/unlogged/render-general.js +2 -1
- package/dist/unlogged/unlogged/render-general.tsx +2 -1
- package/dist/unlogged/unlogged/render-init.d.ts +1 -0
- package/dist/unlogged/unlogged/render-init.js +9 -2
- package/dist/unlogged/unlogged/tipos.d.ts +93 -41
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/unlogged.js +15 -2
- package/install/accion_cumple_condicion.sql +1 -1
- package/install/generador_accion_cumple_condicion.sql +2 -2
- package/install/tarea_cumple_condicion.sql +1 -1
- package/install/xcalcular_resultado_trg.sql +1 -1
- package/package.json +24 -18
- package/dist/server/server/table-no_rea copy.js +0 -38
- package/dist/server/server/table-no_rea_sup copy.js +0 -36
- package/dist/unlogged/bypass-formulario.d.ts +0 -198
- package/dist/unlogged/bypass-formulario.js +0 -1226
- package/dist/unlogged/redux-formulario.d.ts +0 -440
- package/dist/unlogged/redux-formulario.js +0 -324
- package/dist/unlogged/render-config.d.ts +0 -52
- package/dist/unlogged/render-config.js +0 -161
- package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +0 -198
- package/dist/unlogged/unlogged/bypass-formulario copy.js +0 -1226
- package/dist/unlogged/unlogged/helpers.d.ts +0 -14
- package/dist/unlogged/unlogged/helpers.js +0 -129
- /package/dist/server/{server/table-no_rea copy.d.ts → table-no_rea.d.ts} +0 -0
- /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", "mocha", "node:assert", "../unlogged/helpers-formulario"], 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_formulario_1 = require("../unlogged/helpers-formulario");
|
|
15
|
+
(0, mocha_1.describe)('dmencu - helpersFormulario', () => {
|
|
16
|
+
(0, mocha_1.describe)('extraerComodinesRedux', () => {
|
|
17
|
+
(0, mocha_1.it)('devuelve [] para textos vacíos o sin @', () => {
|
|
18
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerComodinesRedux)(''), []);
|
|
19
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerComodinesRedux)('texto sin comodines'), []);
|
|
20
|
+
});
|
|
21
|
+
(0, mocha_1.it)('extrae los comodines @comodin@ sin repetir y en orden de aparición', () => {
|
|
22
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerComodinesRedux)('En @MES_REF@ (semana @SEM_NUM@) de @MES_REF@'), ['MES_REF', 'SEM_NUM']);
|
|
23
|
+
});
|
|
24
|
+
(0, mocha_1.it)('ignora variables (@#var@) y datos de tem (@$tem...@)', () => {
|
|
25
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerComodinesRedux)('@#p3@ vive en @$tem.dominio@ desde @D30_REF@'), ['D30_REF']);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
(0, mocha_1.describe)('extraerVariablesInteres', () => {
|
|
29
|
+
(0, mocha_1.it)('devuelve [] para textos vacíos o sin variables', () => {
|
|
30
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerVariablesInteres)(''), []);
|
|
31
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerVariablesInteres)('En @MES_REF@'), []);
|
|
32
|
+
});
|
|
33
|
+
(0, mocha_1.it)('extrae las variables @#var@ sin repetir', () => {
|
|
34
|
+
assert.deepStrictEqual((0, helpers_formulario_1.extraerVariablesInteres)('¿@#nombre@ trabajó? Si @#nombre@ tiene @#edad-1@ años'), ['nombre', 'edad-1']);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
(0, mocha_1.describe)('REGEX_SPLIT_COMODINES y patrones de tipo', () => {
|
|
38
|
+
const texto = 'Hola @#p3@, en @MES_REF@ en @$tem.dominio@.';
|
|
39
|
+
(0, mocha_1.it)('split conserva el texto y separa cada token', () => {
|
|
40
|
+
assert.deepStrictEqual(texto.split(helpers_formulario_1.REGEX_SPLIT_COMODINES), ['Hola ', '@#p3@', ', en ', '@MES_REF@', ' en ', '@$tem.dominio@', '.']);
|
|
41
|
+
});
|
|
42
|
+
(0, mocha_1.it)('cada token se reconoce con un solo patrón', () => {
|
|
43
|
+
var _a, _b, _c;
|
|
44
|
+
assert.strictEqual((_a = helpers_formulario_1.IS_VARIABLE_HASH_PATTERN.exec('@#p3@')) === null || _a === void 0 ? void 0 : _a[1], 'p3');
|
|
45
|
+
assert.strictEqual((_b = helpers_formulario_1.IS_COMODIN_REDUX_PATTERN.exec('@MES_REF@')) === null || _b === void 0 ? void 0 : _b[1], 'MES_REF');
|
|
46
|
+
assert.strictEqual((_c = helpers_formulario_1.IS_TEM_PATTERN.exec('@$tem.dominio@')) === null || _c === void 0 ? void 0 : _c[1], 'tem.dominio');
|
|
47
|
+
assert.strictEqual(helpers_formulario_1.IS_COMODIN_REDUX_PATTERN.test('@#p3@'), false);
|
|
48
|
+
assert.strictEqual(helpers_formulario_1.IS_COMODIN_REDUX_PATTERN.test('@$tem.dominio@'), false);
|
|
49
|
+
assert.strictEqual(helpers_formulario_1.IS_VARIABLE_HASH_PATTERN.test('@MES_REF@'), false);
|
|
50
|
+
});
|
|
51
|
+
(0, mocha_1.it)('el prefijo $tem no distingue mayúsculas', () => {
|
|
52
|
+
var _a;
|
|
53
|
+
assert.deepStrictEqual('a @$TEM.x@ b'.split(helpers_formulario_1.REGEX_SPLIT_COMODINES), ['a ', '@$TEM.x@', ' b']);
|
|
54
|
+
assert.strictEqual((_a = helpers_formulario_1.IS_TEM_PATTERN.exec('@$TEM.x@')) === null || _a === void 0 ? void 0 : _a[1], 'TEM.x');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
(0, mocha_1.describe)('getBFVarNames', () => {
|
|
58
|
+
(0, mocha_1.it)('arma los nombres a partir del salto con prefijo F:', () => {
|
|
59
|
+
assert.deepStrictEqual((0, helpers_formulario_1.getBFVarNames)('F:F2'), {
|
|
60
|
+
listo: '$B.F:F2',
|
|
61
|
+
agregar: '$B.F:F2_agregar',
|
|
62
|
+
idFormulario: 'F:F2'
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
(0, mocha_1.it)('da lo mismo si el salto viene sin prefijo F:', () => {
|
|
66
|
+
assert.deepStrictEqual((0, helpers_formulario_1.getBFVarNames)('F2'), (0, helpers_formulario_1.getBFVarNames)('F:F2'));
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
(0, mocha_1.describe)('replaceSpecialWords', () => {
|
|
70
|
+
(0, mocha_1.it)('reemplaza #nombre, #apellido y #resultado capitalizando nombre y apellido', () => {
|
|
71
|
+
assert.strictEqual((0, helpers_formulario_1.replaceSpecialWords)('Encuesta de #nombre #apellido: #resultado', 'juana', 'pérez', 'completa'), 'Encuesta de Juana Pérez: completa');
|
|
72
|
+
});
|
|
73
|
+
(0, mocha_1.it)('no distingue mayúsculas en las palabras especiales', () => {
|
|
74
|
+
assert.strictEqual((0, helpers_formulario_1.replaceSpecialWords)('#NOMBRE y #Apellido', 'ana', 'gómez', ''), 'Ana y Gómez');
|
|
75
|
+
});
|
|
76
|
+
(0, mocha_1.it)('no capitaliza el resultado y deja el resto del texto intacto', () => {
|
|
77
|
+
assert.strictEqual((0, helpers_formulario_1.replaceSpecialWords)('estado: #resultado (#otro)', 'a', 'b', 'no rea'), 'estado: no rea (#otro)');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
(0, mocha_1.describe)('numberOrStringIncIfArray', () => {
|
|
81
|
+
(0, mocha_1.it)('en un array convierte la posición (base 0) en número de elemento (base 1)', () => {
|
|
82
|
+
assert.strictEqual((0, helpers_formulario_1.numberOrStringIncIfArray)('0', []), 1);
|
|
83
|
+
assert.strictEqual((0, helpers_formulario_1.numberOrStringIncIfArray)(2, []), 3);
|
|
84
|
+
});
|
|
85
|
+
(0, mocha_1.it)('en un objeto deja la clave numérica sin incrementar', () => {
|
|
86
|
+
assert.strictEqual((0, helpers_formulario_1.numberOrStringIncIfArray)('5', {}), 5);
|
|
87
|
+
});
|
|
88
|
+
(0, mocha_1.it)('deja las claves no numéricas como están', () => {
|
|
89
|
+
assert.strictEqual((0, helpers_formulario_1.numberOrStringIncIfArray)('abc', []), 'abc');
|
|
90
|
+
assert.strictEqual((0, helpers_formulario_1.numberOrStringIncIfArray)('abc', {}), 'abc');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXJzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC90ZXN0LWhlbHBlcnMtZm9ybXVsYXJpby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUFBLGlDQUFxQztJQUVyQyxzQ0FBdUM7SUFFdkMsdUVBVXdDO0lBRXhDLElBQUEsZ0JBQVEsRUFBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFFeEMsSUFBQSxnQkFBUSxFQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtZQUNuQyxJQUFBLFVBQUUsRUFBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBQSwwQ0FBcUIsRUFBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFBLDBDQUFxQixFQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFBLFVBQUUsRUFBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7Z0JBQzFFLE1BQU0sQ0FBQyxlQUFlLENBQ2xCLElBQUEsMENBQXFCLEVBQUMsOENBQThDLENBQUMsRUFDckUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQ3pCLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUNILElBQUEsVUFBRSxFQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtnQkFDNUQsTUFBTSxDQUFDLGVBQWUsQ0FDbEIsSUFBQSwwQ0FBcUIsRUFBQyw4Q0FBOEMsQ0FBQyxFQUNyRSxDQUFDLFNBQVMsQ0FBQyxDQUNkLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBQSxnQkFBUSxFQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtZQUNyQyxJQUFBLFVBQUUsRUFBQyxnREFBZ0QsRUFB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LEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw2Q0FBd0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFBLFVBQUUsRUFBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7Z0JBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw2Q0FBd0IsRUFBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFBLFVBQUUsRUFBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7Z0JBQy9DLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw2Q0FBd0IsRUFBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw2Q0FBd0IsRUFBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0IH0gZnJvbSAnbW9jaGEnO1xuXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKTtcblxuaW1wb3J0IHtcbiAgICBSRUdFWF9TUExJVF9DT01PRElORVMsXG4gICAgSVNfVEVNX1BBVFRFUk4sXG4gICAgSVNfVkFSSUFCTEVfSEFTSF9QQVRURVJOLFxuICAgIElTX0NPTU9ESU5fUkVEVVhfUEFUVEVSTixcbiAgICBleHRyYWVyQ29tb2RpbmVzUmVkdXgsXG4gICAgZXh0cmFlclZhcmlhYmxlc0ludGVyZXMsXG4gICAgZ2V0QkZWYXJOYW1lcyxcbiAgICByZXBsYWNlU3BlY2lhbFdvcmRzLFxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSxcbn0gZnJvbSAnLi4vdW5sb2dnZWQvaGVscGVycy1mb3JtdWxhcmlvJztcblxuZGVzY3JpYmUoJ2RtZW5jdSAtIGhlbHBlcnNGb3JtdWxhcmlvJywgKCkgPT4ge1xuXG4gICAgZGVzY3JpYmUoJ2V4dHJhZXJDb21vZGluZXNSZWR1eCcsICgpID0+IHtcbiAgICAgICAgaXQoJ2RldnVlbHZlIFtdIHBhcmEgdGV4dG9zIHZhY8Otb3MgbyBzaW4gQCcsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXh0cmFlckNvbW9kaW5lc1JlZHV4KCcnKSwgW10pO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHRyYWVyQ29tb2RpbmVzUmVkdXgoJ3RleHRvIHNpbiBjb21vZGluZXMnKSwgW10pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2V4dHJhZSBsb3MgY29tb2RpbmVzIEBjb21vZGluQCBzaW4gcmVwZXRpciB5IGVuIG9yZGVuIGRlIGFwYXJpY2nDs24nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICAgICAgICAgIGV4dHJhZXJDb21vZGluZXNSZWR1eCgnRW4gQE1FU19SRUZAIChzZW1hbmEgQFNFTV9OVU1AKSBkZSBATUVTX1JFRkAnKSxcbiAgICAgICAgICAgICAgICBbJ01FU19SRUYnLCAnU0VNX05VTSddXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2lnbm9yYSB2YXJpYWJsZXMgKEAjdmFyQCkgeSBkYXRvcyBkZSB0ZW0gKEAkdGVtLi4uQCknLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICAgICAgICAgIGV4dHJhZXJDb21vZGluZXNSZWR1eCgnQCNwM0Agdml2ZSBlbiBAJHRlbS5kb21pbmlvQCBkZXNkZSBARDMwX1JFRkAnKSxcbiAgICAgICAgICAgICAgICBbJ0QzMF9SRUYnXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXh0cmFlclZhcmlhYmxlc0ludGVyZXMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdkZXZ1ZWx2ZSBbXSBwYXJhIHRleHRvcyB2YWPDrW9zIG8gc2luIHZhcmlhYmxlcycsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXh0cmFlclZhcmlhYmxlc0ludGVyZXMoJycpLCBbXSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGV4dHJhZXJWYXJpYWJsZXNJbnRlcmVzKCdFbiBATUVTX1JFRkAnKSwgW10pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2V4dHJhZSBsYXMgdmFyaWFibGVzIEAjdmFyQCBzaW4gcmVwZXRpcicsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgICAgICAgICAgZXh0cmFlclZhcmlhYmxlc0ludGVyZXMoJ8K/QCNub21icmVAIHRyYWJhasOzPyBTaSBAI25vbWJyZUAgdGllbmUgQCNlZGFkLTFAIGHDsW9zJyksXG4gICAgICAgICAgICAgICAgWydub21icmUnLCAnZWRhZC0xJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1JFR0VYX1NQTElUX0NPTU9ESU5FUyB5IHBhdHJvbmVzIGRlIHRpcG8nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHRvID0gJ0hvbGEgQCNwM0AsIGVuIEBNRVNfUkVGQCBlbiBAJHRlbS5kb21pbmlvQC4nO1xuICAgICAgICBpdCgnc3BsaXQgY29uc2VydmEgZWwgdGV4dG8geSBzZXBhcmEgY2FkYSB0b2tlbicsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgICAgICAgICAgdGV4dG8uc3BsaXQoUkVHRVhfU1BMSVRfQ09NT0RJTkVTKSxcbiAgICAgICAgICAgICAgICBbJ0hvbGEgJywgJ0AjcDNAJywgJywgZW4gJywgJ0BNRVNfUkVGQCcsICcgZW4gJywgJ0AkdGVtLmRvbWluaW9AJywgJy4nXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdjYWRhIHRva2VuIHNlIHJlY29ub2NlIGNvbiB1biBzb2xvIHBhdHLDs24nLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoSVNfVkFSSUFCTEVfSEFTSF9QQVRURVJOLmV4ZWMoJ0AjcDNAJyk/LlsxXSwgJ3AzJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoSVNfQ09NT0RJTl9SRURVWF9QQVRURVJOLmV4ZWMoJ0BNRVNfUkVGQCcpPy5bMV0sICdNRVNfUkVGJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoSVNfVEVNX1BBVFRFUk4uZXhlYygnQCR0ZW0uZG9taW5pb0AnKT8uWzFdLCAndGVtLmRvbWluaW8nKTtcblxuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKElTX0NPTU9ESU5fUkVEVVhfUEFUVEVSTi50ZXN0KCdAI3AzQCcpLCBmYWxzZSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoSVNfQ09NT0RJTl9SRURVWF9QQVRURVJOLnRlc3QoJ0AkdGVtLmRvbWluaW9AJyksIGZhbHNlKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChJU19WQVJJQUJMRV9IQVNIX1BBVFRFUk4udGVzdCgnQE1FU19SRUZAJyksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdlbCBwcmVmaWpvICR0ZW0gbm8gZGlzdGluZ3VlIG1hecO6c2N1bGFzJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCgnYSBAJFRFTS54QCBiJy5zcGxpdChSRUdFWF9TUExJVF9DT01PRElORVMpLCBbJ2EgJywgJ0AkVEVNLnhAJywgJyBiJ10pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKElTX1RFTV9QQVRURVJOLmV4ZWMoJ0AkVEVNLnhAJyk/LlsxXSwgJ1RFTS54Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEJGVmFyTmFtZXMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdhcm1hIGxvcyBub21icmVzIGEgcGFydGlyIGRlbCBzYWx0byBjb24gcHJlZmlqbyBGOicsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZ2V0QkZWYXJOYW1lcygnRjpGMicpLCB7XG4gICAgICAgICAgICAgICAgbGlzdG86ICckQi5GOkYyJyxcbiAgICAgICAgICAgICAgICBhZ3JlZ2FyOiAnJEIuRjpGMl9hZ3JlZ2FyJyxcbiAgICAgICAgICAgICAgICBpZEZvcm11bGFyaW86ICdGOkYyJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnZGEgbG8gbWlzbW8gc2kgZWwgc2FsdG8gdmllbmUgc2luIHByZWZpam8gRjonLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGdldEJGVmFyTmFtZXMoJ0YyJyksIGdldEJGVmFyTmFtZXMoJ0Y6RjInKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3JlcGxhY2VTcGVjaWFsV29yZHMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdyZWVtcGxhemEgI25vbWJyZSwgI2FwZWxsaWRvIHkgI3Jlc3VsdGFkbyBjYXBpdGFsaXphbmRvIG5vbWJyZSB5IGFwZWxsaWRvJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgICAgICAgIHJlcGxhY2VTcGVjaWFsV29yZHMoJ0VuY3Vlc3RhIGRlICNub21icmUgI2FwZWxsaWRvOiAjcmVzdWx0YWRvJywgJ2p1YW5hJywgJ3DDqXJleicsICdjb21wbGV0YScpLFxuICAgICAgICAgICAgICAgICdFbmN1ZXN0YSBkZSBKdWFuYSBQw6lyZXo6IGNvbXBsZXRhJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdubyBkaXN0aW5ndWUgbWF5w7pzY3VsYXMgZW4gbGFzIHBhbGFicmFzIGVzcGVjaWFsZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVwbGFjZVNwZWNpYWxXb3JkcygnI05PTUJSRSB5ICNBcGVsbGlkbycsICdhbmEnLCAnZ8OzbWV6JywgJycpLCAnQW5hIHkgR8OzbWV6Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnbm8gY2FwaXRhbGl6YSBlbCByZXN1bHRhZG8geSBkZWphIGVsIHJlc3RvIGRlbCB0ZXh0byBpbnRhY3RvJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcGxhY2VTcGVjaWFsV29yZHMoJ2VzdGFkbzogI3Jlc3VsdGFkbyAoI290cm8pJywgJ2EnLCAnYicsICdubyByZWEnKSwgJ2VzdGFkbzogbm8gcmVhICgjb3RybyknKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5JywgKCkgPT4ge1xuICAgICAgICBpdCgnZW4gdW4gYXJyYXkgY29udmllcnRlIGxhIHBvc2ljacOzbiAoYmFzZSAwKSBlbiBuw7ptZXJvIGRlIGVsZW1lbnRvIChiYXNlIDEpJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSgnMCcsIFtdKSwgMSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KDIsIFtdKSwgMyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnZW4gdW4gb2JqZXRvIGRlamEgbGEgY2xhdmUgbnVtw6lyaWNhIHNpbiBpbmNyZW1lbnRhcicsICgpID0+IHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChudW1iZXJPclN0cmluZ0luY0lmQXJyYXkoJzUnLCB7fSksIDUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2RlamEgbGFzIGNsYXZlcyBubyBudW3DqXJpY2FzIGNvbW8gZXN0w6FuJywgKCkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSgnYWJjJywgW10pLCAnYWJjJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KCdhYmMnLCB7fSksICdhYmMnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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/procedures-dmencu"], 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 procedures_dmencu_1 = require("../server/procedures-dmencu");
|
|
24
|
+
// Mini base en memoria: aplica un "update ... set col=$n, col='lit', col=null, col=current_timestamp where col=$n and ..."
|
|
25
|
+
// sobre las filas de una tabla. Sólo entiende las asignaciones y condiciones que arman las consultas de dmencu.
|
|
26
|
+
class TablaFalsa {
|
|
27
|
+
constructor(nombre, filas) {
|
|
28
|
+
this.nombre = nombre;
|
|
29
|
+
this.filas = filas;
|
|
30
|
+
this.ahora = '2026-01-01T00:00:00.000Z';
|
|
31
|
+
}
|
|
32
|
+
update(sql, params) {
|
|
33
|
+
var partes = /^\s*update (\w+)\s+set ([\s\S]+?)\s+where ([\s\S]+?)\s+returning/.exec(sql);
|
|
34
|
+
assert.ok(partes, `consulta no reconocida: ${sql}`);
|
|
35
|
+
assert.strictEqual(partes[1], this.nombre, 'la consulta actualiza otra tabla');
|
|
36
|
+
var asignaciones = partes[2].split(',').map(asignacion => asignacion.trim());
|
|
37
|
+
var condiciones = partes[3].split(/\s+and\s+/).map(condicion => condicion.trim());
|
|
38
|
+
var valorDe = (expresion) => {
|
|
39
|
+
var parametro = /^\$(\d+)$/.exec(expresion);
|
|
40
|
+
if (parametro) {
|
|
41
|
+
assert.ok(Number(parametro[1]) <= params.length, `falta el parámetro ${expresion}`);
|
|
42
|
+
return params[Number(parametro[1]) - 1];
|
|
43
|
+
}
|
|
44
|
+
if (expresion == 'null')
|
|
45
|
+
return null;
|
|
46
|
+
if (expresion == 'current_timestamp')
|
|
47
|
+
return this.ahora;
|
|
48
|
+
var literal = /^'(.*)'$/.exec(expresion);
|
|
49
|
+
assert.ok(literal, `expresión no reconocida: ${expresion}`);
|
|
50
|
+
return literal[1];
|
|
51
|
+
};
|
|
52
|
+
var cumple = (fila) => condiciones.every(condicion => {
|
|
53
|
+
var [columna, expresion] = condicion.split(/\s*=\s*/);
|
|
54
|
+
return fila[columna] === valorDe(expresion);
|
|
55
|
+
});
|
|
56
|
+
var cambios = asignaciones.map(asignacion => {
|
|
57
|
+
var _a;
|
|
58
|
+
var [columna, expresion] = asignacion.split(/\s*=\s*/);
|
|
59
|
+
assert.ok(columna in ((_a = this.filas[0]) !== null && _a !== void 0 ? _a : {}), `la tabla ${this.nombre} no tiene la columna ${columna}`);
|
|
60
|
+
return { columna, valor: valorDe(expresion) };
|
|
61
|
+
});
|
|
62
|
+
var afectadas = this.filas.filter(cumple);
|
|
63
|
+
afectadas.forEach(fila => cambios.forEach(cambio => { fila[cambio.columna] = cambio.valor; }));
|
|
64
|
+
return afectadas.length;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const OPERATIVO = 'etoi211';
|
|
68
|
+
const ENC = '1001';
|
|
69
|
+
const OTRA_ENC = '1002';
|
|
70
|
+
const TOKEN = 'token-dm-1';
|
|
71
|
+
const respuestasReal = {
|
|
72
|
+
resumenEstado: 'ok', codRea: 1, codNoRea: null,
|
|
73
|
+
resumenEstadoSup: 'vacio', codReaSup: null, codNoReaSup: null,
|
|
74
|
+
};
|
|
75
|
+
const respuestasNoRea = {
|
|
76
|
+
resumenEstado: 'no rea', codRea: null, codNoRea: 3,
|
|
77
|
+
resumenEstadoSup: 'vacio', codReaSup: null, codNoReaSup: null,
|
|
78
|
+
};
|
|
79
|
+
const respuestasSup = {
|
|
80
|
+
resumenEstado: 'ok', codRea: 1, codNoRea: null,
|
|
81
|
+
resumenEstadoSup: 'no rea', codReaSup: null, codNoReaSup: 71,
|
|
82
|
+
};
|
|
83
|
+
function filaTem(enc) {
|
|
84
|
+
return {
|
|
85
|
+
operativo: OPERATIVO, enc, json_encuesta: null, fecha_modif_encuesta: null,
|
|
86
|
+
resumen_estado: 'vacio', norea: null, rea: null,
|
|
87
|
+
resumen_estado_sup: 'vacio', norea_sup: null, rea_sup: null,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function filaTareasTem(enc, tarea, cargadoDm = TOKEN) {
|
|
91
|
+
return {
|
|
92
|
+
operativo: OPERATIVO, enc, tarea, estado: 'C', cargado_dm: cargadoDm, operacion: null,
|
|
93
|
+
dm_resumen_estado: 'vacio', dm_norea: null, dm_rea: null,
|
|
94
|
+
dm_resumen_estado_sup: 'vacio', dm_norea_sup: null, dm_rea_sup: null,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
(0, mocha_1.describe)('dmencu - impacto de rea / no rea en la base', () => {
|
|
98
|
+
(0, mocha_1.describe)('tem (consultaUpdateTem)', () => {
|
|
99
|
+
function aplicar(respuestas, tarea, enc = ENC) {
|
|
100
|
+
var tem = new TablaFalsa('tem', [filaTem(ENC), filaTem(OTRA_ENC)]);
|
|
101
|
+
var consulta = (0, procedures_dmencu_1.consultaUpdateTem)(OPERATIVO, enc, respuestas, tarea);
|
|
102
|
+
var afectadas = tem.update(consulta.sql, consulta.params);
|
|
103
|
+
return { tem, afectadas, consulta };
|
|
104
|
+
}
|
|
105
|
+
(0, mocha_1.it)('una encuesta realizada guarda resumen y código de rea, y deja norea en null', () => {
|
|
106
|
+
var { tem, afectadas } = aplicar(respuestasReal, 'encu');
|
|
107
|
+
assert.strictEqual(afectadas, 1);
|
|
108
|
+
assert.strictEqual(tem.filas[0].resumen_estado, 'ok');
|
|
109
|
+
assert.strictEqual(tem.filas[0].rea, 1);
|
|
110
|
+
assert.strictEqual(tem.filas[0].norea, null);
|
|
111
|
+
});
|
|
112
|
+
(0, mocha_1.it)('una no rea guarda el código de no rea y deja rea en null', () => {
|
|
113
|
+
var { tem } = aplicar(respuestasNoRea, 'encu');
|
|
114
|
+
assert.strictEqual(tem.filas[0].resumen_estado, 'no rea');
|
|
115
|
+
assert.strictEqual(tem.filas[0].norea, 3);
|
|
116
|
+
assert.strictEqual(tem.filas[0].rea, null);
|
|
117
|
+
});
|
|
118
|
+
(0, mocha_1.it)('si la encuesta antes era no rea y ahora es rea, se borra la no rea', () => {
|
|
119
|
+
var tem = new TablaFalsa('tem', [Object.assign(Object.assign({}, filaTem(ENC)), { norea: 3, resumen_estado: 'no rea' })]);
|
|
120
|
+
var consulta = (0, procedures_dmencu_1.consultaUpdateTem)(OPERATIVO, ENC, respuestasReal, 'encu');
|
|
121
|
+
tem.update(consulta.sql, consulta.params);
|
|
122
|
+
assert.strictEqual(tem.filas[0].norea, null);
|
|
123
|
+
assert.strictEqual(tem.filas[0].rea, 1);
|
|
124
|
+
});
|
|
125
|
+
(0, mocha_1.it)('para la tarea supe guarda las columnas _sup y no toca las de la encuesta', () => {
|
|
126
|
+
var { tem } = aplicar(respuestasSup, 'supe');
|
|
127
|
+
assert.strictEqual(tem.filas[0].resumen_estado_sup, 'no rea');
|
|
128
|
+
assert.strictEqual(tem.filas[0].norea_sup, 71);
|
|
129
|
+
assert.strictEqual(tem.filas[0].rea_sup, null);
|
|
130
|
+
assert.strictEqual(tem.filas[0].resumen_estado, 'vacio');
|
|
131
|
+
assert.strictEqual(tem.filas[0].rea, null);
|
|
132
|
+
});
|
|
133
|
+
(0, mocha_1.it)('para una tarea que no es supe no toca las columnas _sup', () => {
|
|
134
|
+
var { tem } = aplicar(respuestasSup, 'encu');
|
|
135
|
+
assert.strictEqual(tem.filas[0].resumen_estado_sup, 'vacio');
|
|
136
|
+
assert.strictEqual(tem.filas[0].norea_sup, null);
|
|
137
|
+
});
|
|
138
|
+
(0, mocha_1.it)('guarda las respuestas y la fecha de modificación', () => {
|
|
139
|
+
var { tem } = aplicar(respuestasReal, 'encu');
|
|
140
|
+
assert.deepStrictEqual(tem.filas[0].json_encuesta, respuestasReal);
|
|
141
|
+
assert.strictEqual(tem.filas[0].fecha_modif_encuesta, tem.ahora);
|
|
142
|
+
});
|
|
143
|
+
(0, mocha_1.it)('sólo modifica la encuesta indicada', () => {
|
|
144
|
+
var { tem } = aplicar(respuestasReal, 'encu');
|
|
145
|
+
assert.deepStrictEqual(tem.filas[1], filaTem(OTRA_ENC));
|
|
146
|
+
});
|
|
147
|
+
(0, mocha_1.it)('no afecta ninguna fila si la encuesta no existe', () => {
|
|
148
|
+
var { afectadas } = aplicar(respuestasReal, 'encu', '9999');
|
|
149
|
+
assert.strictEqual(afectadas, 0);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
(0, mocha_1.describe)('guardarEncuestaEnTem (ejecuta la consulta sobre el cliente)', () => {
|
|
153
|
+
function clienteSobre(tem) {
|
|
154
|
+
return {
|
|
155
|
+
query: (sql, params) => ({
|
|
156
|
+
fetchUniqueRow: () => __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
var rowCount = tem.update(sql, params);
|
|
158
|
+
if (rowCount != 1) {
|
|
159
|
+
throw new Error(`se esperaba una fila y se actualizaron ${rowCount}`);
|
|
160
|
+
}
|
|
161
|
+
return { rowCount };
|
|
162
|
+
})
|
|
163
|
+
})
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
(0, mocha_1.it)('impacta el resultado en la TEM', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
167
|
+
var tem = new TablaFalsa('tem', [filaTem(ENC), filaTem(OTRA_ENC)]);
|
|
168
|
+
yield (0, procedures_dmencu_1.guardarEncuestaEnTem)({ client: clienteSobre(tem) }, OPERATIVO, ENC, respuestasNoRea, 'encu');
|
|
169
|
+
assert.strictEqual(tem.filas[0].norea, 3);
|
|
170
|
+
assert.strictEqual(tem.filas[0].resumen_estado, 'no rea');
|
|
171
|
+
assert.deepStrictEqual(tem.filas[1], filaTem(OTRA_ENC));
|
|
172
|
+
}));
|
|
173
|
+
(0, mocha_1.it)('falla si la encuesta no existe en la TEM', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
+
var tem = new TablaFalsa('tem', [filaTem(OTRA_ENC)]);
|
|
175
|
+
yield assert.rejects((0, procedures_dmencu_1.guardarEncuestaEnTem)({ client: clienteSobre(tem) }, OPERATIVO, ENC, respuestasReal, 'encu'), /se esperaba una fila/);
|
|
176
|
+
}));
|
|
177
|
+
});
|
|
178
|
+
(0, mocha_1.describe)('tareas_tem (consultaUpdateTareasTemPorDescarga)', () => {
|
|
179
|
+
function aplicar(respuestas, tarea, opts = {}) {
|
|
180
|
+
var _a, _b, _c;
|
|
181
|
+
var filas = (_a = opts.filas) !== null && _a !== void 0 ? _a : [filaTareasTem(ENC, 'encu'), filaTareasTem(ENC, 'supe'), filaTareasTem(OTRA_ENC, 'encu')];
|
|
182
|
+
var tareasTem = new TablaFalsa('tareas_tem', filas);
|
|
183
|
+
var consulta = (0, procedures_dmencu_1.consultaUpdateTareasTemPorDescarga)({
|
|
184
|
+
operativo: OPERATIVO, idEnc: ENC, tarea, token: (_b = opts.token) !== null && _b !== void 0 ? _b : TOKEN,
|
|
185
|
+
respuestasUAPrincipal: respuestas, pasaADescargar: (_c = opts.pasaADescargar) !== null && _c !== void 0 ? _c : false
|
|
186
|
+
});
|
|
187
|
+
var afectadas = tareasTem.update(consulta.sql, consulta.params);
|
|
188
|
+
return { tareasTem, afectadas };
|
|
189
|
+
}
|
|
190
|
+
(0, mocha_1.it)('una encuesta realizada guarda en dm_* el resumen y el código de rea', () => {
|
|
191
|
+
var { tareasTem, afectadas } = aplicar(respuestasReal, 'encu');
|
|
192
|
+
assert.strictEqual(afectadas, 1);
|
|
193
|
+
assert.strictEqual(tareasTem.filas[0].dm_resumen_estado, 'ok');
|
|
194
|
+
assert.strictEqual(tareasTem.filas[0].dm_rea, 1);
|
|
195
|
+
assert.strictEqual(tareasTem.filas[0].dm_norea, null);
|
|
196
|
+
});
|
|
197
|
+
(0, mocha_1.it)('una no rea guarda en dm_* el código de no rea', () => {
|
|
198
|
+
var { tareasTem } = aplicar(respuestasNoRea, 'encu');
|
|
199
|
+
assert.strictEqual(tareasTem.filas[0].dm_resumen_estado, 'no rea');
|
|
200
|
+
assert.strictEqual(tareasTem.filas[0].dm_norea, 3);
|
|
201
|
+
assert.strictEqual(tareasTem.filas[0].dm_rea, null);
|
|
202
|
+
});
|
|
203
|
+
(0, mocha_1.it)('para la tarea supe guarda dm_*_sup y no toca los de la encuesta', () => {
|
|
204
|
+
var { tareasTem } = aplicar(respuestasSup, 'supe');
|
|
205
|
+
var supe = tareasTem.filas[1];
|
|
206
|
+
assert.strictEqual(supe.dm_resumen_estado_sup, 'no rea');
|
|
207
|
+
assert.strictEqual(supe.dm_norea_sup, 71);
|
|
208
|
+
assert.strictEqual(supe.dm_resumen_estado, 'vacio');
|
|
209
|
+
assert.strictEqual(supe.dm_rea, null);
|
|
210
|
+
});
|
|
211
|
+
(0, mocha_1.it)('pasa la tarea a descargada y libera el token del dispositivo', () => {
|
|
212
|
+
var { tareasTem } = aplicar(respuestasReal, 'encu');
|
|
213
|
+
assert.strictEqual(tareasTem.filas[0].estado, 'D');
|
|
214
|
+
assert.strictEqual(tareasTem.filas[0].cargado_dm, null);
|
|
215
|
+
});
|
|
216
|
+
(0, mocha_1.it)('sólo modifica la tarea de la encuesta indicada', () => {
|
|
217
|
+
var { tareasTem } = aplicar(respuestasReal, 'encu');
|
|
218
|
+
assert.deepStrictEqual(tareasTem.filas[1], filaTareasTem(ENC, 'supe'));
|
|
219
|
+
assert.deepStrictEqual(tareasTem.filas[2], filaTareasTem(OTRA_ENC, 'encu'));
|
|
220
|
+
});
|
|
221
|
+
(0, mocha_1.it)('si el dispositivo ya no es el dueño de la encuesta (otro token) no modifica nada', () => {
|
|
222
|
+
var filas = [filaTareasTem(ENC, 'encu', 'token-de-otro-dm')];
|
|
223
|
+
var { tareasTem, afectadas } = aplicar(respuestasReal, 'encu', { filas });
|
|
224
|
+
assert.strictEqual(afectadas, 0);
|
|
225
|
+
assert.deepStrictEqual(tareasTem.filas[0], filaTareasTem(ENC, 'encu', 'token-de-otro-dm'));
|
|
226
|
+
});
|
|
227
|
+
(0, mocha_1.it)('si la encuesta ya no está cargada en ningún dispositivo no modifica nada', () => {
|
|
228
|
+
var filas = [filaTareasTem(ENC, 'encu', null)];
|
|
229
|
+
var { afectadas } = aplicar(respuestasReal, 'encu', { filas });
|
|
230
|
+
assert.strictEqual(afectadas, 0);
|
|
231
|
+
});
|
|
232
|
+
(0, mocha_1.it)('con cambio de modo o de usuario marca la operación como descargar', () => {
|
|
233
|
+
var { tareasTem } = aplicar(respuestasReal, 'encu', { pasaADescargar: true });
|
|
234
|
+
assert.strictEqual(tareasTem.filas[0].operacion, 'descargar');
|
|
235
|
+
});
|
|
236
|
+
(0, mocha_1.it)('sin cambio de modo ni de usuario no modifica la operación', () => {
|
|
237
|
+
var { tareasTem } = aplicar(respuestasReal, 'encu', { pasaADescargar: false });
|
|
238
|
+
assert.strictEqual(tareasTem.filas[0].operacion, null);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbXBhY3RvLXJlYS1uby1yZWEtZW4tYmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC90ZXN0LWltcGFjdG8tcmVhLW5vLXJlYS1lbi1iZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLGlDQUFxQztJQUVyQyxzQ0FBdUM7SUFFdkMsbUVBRXFDO0lBT3JDLDJIQUEySDtJQUMzSCxnSEFBZ0g7SUFDaEgsTUFBTSxVQUFVO1FBRVosWUFBbUIsTUFBYyxFQUFTLEtBQWE7WUFBcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtZQUFTLFVBQUssR0FBTCxLQUFLLENBQVE7WUFEdkQsVUFBSyxHQUFHLDBCQUEwQixDQUFDO1FBQ3dCLENBQUM7UUFFNUQsTUFBTSxDQUFDLEdBQVcsRUFBRSxNQUFzQjtZQUN0QyxJQUFJLE1BQU0sR0FBRyxrRUFBa0UsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDcEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1lBQy9FLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0UsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRixJQUFJLE9BQU8sR0FBRyxDQUFD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TSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzlFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFBLFVBQUUsRUFBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcblxuaW1wb3J0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0Jyk7XG5cbmltcG9ydCB7XG4gICAgQ2xpZW50ZVBhcmFUZW0sIGNvbnN1bHRhVXBkYXRlVGFyZWFzVGVtUG9yRGVzY2FyZ2EsIGNvbnN1bHRhVXBkYXRlVGVtLCBndWFyZGFyRW5jdWVzdGFFblRlbVxufSBmcm9tICcuLi9zZXJ2ZXIvcHJvY2VkdXJlcy1kbWVuY3UnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbWV0cm9TcWwgfSBmcm9tICcuLi9zZXJ2ZXIvc2V0dGVycy1yZWEtbm8tcmVhJztcbmltcG9ydCB0eXBlIHsgSWRPcGVyYXRpdm8sIElkVGFyZWEsIFJlc3VsdGFkb1Jlc3VtZW4gfSBmcm9tICcuLi91bmxvZ2dlZC90aXBvcyc7XG5cbnR5cGUgVmFsb3IgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IG9iamVjdDtcbnR5cGUgRmlsYSA9IHsgW2NvbHVtbmE6IHN0cmluZ106IFZhbG9yIH07XG5cbi8vIE1pbmkgYmFzZSBlbiBtZW1vcmlhOiBhcGxpY2EgdW4gXCJ1cGRhdGUgLi4uIHNldCBjb2w9JG4sIGNvbD0nbGl0JywgY29sPW51bGwsIGNvbD1jdXJyZW50X3RpbWVzdGFtcCB3aGVyZSBjb2w9JG4gYW5kIC4uLlwiXG4vLyBzb2JyZSBsYXMgZmlsYXMgZGUgdW5hIHRhYmxhLiBTw7NsbyBlbnRpZW5kZSBsYXMgYXNpZ25hY2lvbmVzIHkgY29uZGljaW9uZXMgcXVlIGFybWFuIGxhcyBjb25zdWx0YXMgZGUgZG1lbmN1LlxuY2xhc3MgVGFibGFGYWxzYSB7XG4gICAgYWhvcmEgPSAnMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbm9tYnJlOiBzdHJpbmcsIHB1YmxpYyBmaWxhczogRmlsYVtdKSB7IH1cblxuICAgIHVwZGF0ZShzcWw6IHN0cmluZywgcGFyYW1zOiBQYXJhbWV0cm9TcWxbXSk6IG51bWJlciB7XG4gICAgICAgIHZhciBwYXJ0ZXMgPSAvXlxccyp1cGRhdGUgKFxcdyspXFxzK3NldCAoW1xcc1xcU10rPylcXHMrd2hlcmUgKFtcXHNcXFNdKz8pXFxzK3JldHVybmluZy8uZXhlYyhzcWwpO1xuICAgICAgICBhc3NlcnQub2socGFydGVzLCBgY29uc3VsdGEgbm8gcmVjb25vY2lkYTogJHtzcWx9YCk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJ0ZXNbMV0sIHRoaXMubm9tYnJlLCAnbGEgY29uc3VsdGEgYWN0dWFsaXphIG90cmEgdGFibGEnKTtcbiAgICAgICAgdmFyIGFzaWduYWNpb25lcyA9IHBhcnRlc1syXS5zcGxpdCgnLCcpLm1hcChhc2lnbmFjaW9uID0+IGFzaWduYWNpb24udHJpbSgpKTtcbiAgICAgICAgdmFyIGNvbmRpY2lvbmVzID0gcGFydGVzWzNdLnNwbGl0KC9cXHMrYW5kXFxzKy8pLm1hcChjb25kaWNpb24gPT4gY29uZGljaW9uLnRyaW0oKSk7XG4gICAgICAgIHZhciB2YWxvckRlID0gKGV4cHJlc2lvbjogc3RyaW5nKTogVmFsb3IgPT4ge1xuICAgICAgICAgICAgdmFyIHBhcmFtZXRybyA9IC9eXFwkKFxcZCspJC8uZXhlYyhleHByZXNpb24pO1xuICAgICAgICAgICAgaWYgKHBhcmFtZXRybykge1xuICAgICAgICAgICAgICAgIGFzc2VydC5vayhOdW1iZXIocGFyYW1ldHJvWzFdKSA8PSBwYXJhbXMubGVuZ3RoLCBgZmFsdGEgZWwgcGFyw6FtZXRybyAke2V4cHJlc2lvbn1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zW051bWJlcihwYXJhbWV0cm9bMV0pIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXhwcmVzaW9uID09ICdudWxsJykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAoZXhwcmVzaW9uID09ICdjdXJyZW50X3RpbWVzdGFtcCcpIHJldHVybiB0aGlzLmFob3JhO1xuICAgICAgICAgICAgdmFyIGxpdGVyYWwgPSAvXicoLiopJyQvLmV4ZWMoZXhwcmVzaW9uKTtcbiAgICAgICAgICAgIGFzc2VydC5vayhsaXRlcmFsLCBgZXhwcmVzacOzbiBubyByZWNvbm9jaWRhOiAke2V4cHJlc2lvbn1gKTtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsWzFdO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgY3VtcGxlID0gKGZpbGE6IEZpbGEpID0+IGNvbmRpY2lvbmVzLmV2ZXJ5KGNvbmRpY2lvbiA9PiB7XG4gICAgICAgICAgICB2YXIgW2NvbHVtbmEsIGV4cHJlc2lvbl0gPSBjb25kaWNpb24uc3BsaXQoL1xccyo9XFxzKi8pO1xuICAgICAgICAgICAgcmV0dXJuIGZpbGFbY29sdW1uYV0gPT09IHZhbG9yRGUoZXhwcmVzaW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBjYW1iaW9zID0gYXNpZ25hY2lvbmVzLm1hcChhc2lnbmFjaW9uID0+IHtcbiAgICAgICAgICAgIHZhciBbY29sdW1uYSwgZXhwcmVzaW9uXSA9IGFzaWduYWNpb24uc3BsaXQoL1xccyo9XFxzKi8pO1xuICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbHVtbmEgaW4gKHRoaXMuZmlsYXNbMF0gPz8ge30pLCBgbGEgdGFibGEgJHt0aGlzLm5vbWJyZX0gbm8gdGllbmUgbGEgY29sdW1uYSAke2NvbHVtbmF9YCk7XG4gICAgICAgICAgICByZXR1cm4geyBjb2x1bW5hLCB2YWxvcjogdmFsb3JEZShleHByZXNpb24pIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgYWZlY3RhZGFzID0gdGhpcy5maWxhcy5maWx0ZXIoY3VtcGxlKTtcbiAgICAgICAgYWZlY3RhZGFzLmZvckVhY2goZmlsYSA9PiBjYW1iaW9zLmZvckVhY2goY2FtYmlvID0+IHsgZmlsYVtjYW1iaW8uY29sdW1uYV0gPSBjYW1iaW8udmFsb3I7IH0pKTtcbiAgICAgICAgcmV0dXJuIGFmZWN0YWRhcy5sZW5ndGg7XG4gICAgfVxufVxuXG5jb25zdCBPUEVSQVRJVk8gPSAnZXRvaTIxMScgYXMgSWRPcGVyYXRpdm87XG5jb25zdCBFTkMgPSAnMTAwMSc7XG5jb25zdCBPVFJBX0VOQyA9ICcxMDAyJztcbmNvbnN0IFRPS0VOID0gJ3Rva2VuLWRtLTEnO1xuXG5jb25zdCByZXNwdWVzdGFzUmVhbDogUmVzdWx0YWRvUmVzdW1lbiA9IHtcbiAgICByZXN1bWVuRXN0YWRvOiAnb2snLCBjb2RSZWE6IDEsIGNvZE5vUmVhOiBudWxsLFxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6ICd2YWNpbycsIGNvZFJlYVN1cDogbnVsbCwgY29kTm9SZWFTdXA6IG51bGwsXG59O1xuY29uc3QgcmVzcHVlc3Rhc05vUmVhOiBSZXN1bHRhZG9SZXN1bWVuID0ge1xuICAgIHJlc3VtZW5Fc3RhZG86ICdubyByZWEnLCBjb2RSZWE6IG51bGwsIGNvZE5vUmVhOiAzLFxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6ICd2YWNpbycsIGNvZFJlYVN1cDogbnVsbCwgY29kTm9SZWFTdXA6IG51bGwsXG59O1xuY29uc3QgcmVzcHVlc3Rhc1N1cDogUmVzdWx0YWRvUmVzdW1lbiA9IHtcbiAgICByZXN1bWVuRXN0YWRvOiAnb2snLCBjb2RSZWE6IDEsIGNvZE5vUmVhOiBudWxsLFxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6ICdubyByZWEnLCBjb2RSZWFTdXA6IG51bGwsIGNvZE5vUmVhU3VwOiA3MSxcbn07XG5cbmZ1bmN0aW9uIGZpbGFUZW0oZW5jOiBzdHJpbmcpOiBGaWxhIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgZW5jLCBqc29uX2VuY3Vlc3RhOiBudWxsLCBmZWNoYV9tb2RpZl9lbmN1ZXN0YTogbnVsbCxcbiAgICAgICAgcmVzdW1lbl9lc3RhZG86ICd2YWNpbycsIG5vcmVhOiBudWxsLCByZWE6IG51bGwsXG4gICAgICAgIHJlc3VtZW5fZXN0YWRvX3N1cDogJ3ZhY2lvJywgbm9yZWFfc3VwOiBudWxsLCByZWFfc3VwOiBudWxsLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGZpbGFUYXJlYXNUZW0oZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcsIGNhcmdhZG9EbTogc3RyaW5nIHwgbnVsbCA9IFRPS0VOKTogRmlsYSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3BlcmF0aXZvOiBPUEVSQVRJVk8sIGVuYywgdGFyZWEsIGVzdGFkbzogJ0MnLCBjYXJnYWRvX2RtOiBjYXJnYWRvRG0sIG9wZXJhY2lvbjogbnVsbCxcbiAgICAgICAgZG1fcmVzdW1lbl9lc3RhZG86ICd2YWNpbycsIGRtX25vcmVhOiBudWxsLCBkbV9yZWE6IG51bGwsXG4gICAgICAgIGRtX3Jlc3VtZW5fZXN0YWRvX3N1cDogJ3ZhY2lvJywgZG1fbm9yZWFfc3VwOiBudWxsLCBkbV9yZWFfc3VwOiBudWxsLFxuICAgIH07XG59XG5cbmRlc2NyaWJlKCdkbWVuY3UgLSBpbXBhY3RvIGRlIHJlYSAvIG5vIHJlYSBlbiBsYSBiYXNlJywgKCkgPT4ge1xuXG4gICAgZGVzY3JpYmUoJ3RlbSAoY29uc3VsdGFVcGRhdGVUZW0pJywgKCkgPT4ge1xuICAgICAgICBmdW5jdGlvbiBhcGxpY2FyKHJlc3B1ZXN0YXM6IFJlc3VsdGFkb1Jlc3VtZW4sIHRhcmVhOiBJZFRhcmVhLCBlbmM6IHN0cmluZyA9IEVOQykge1xuICAgICAgICAgICAgdmFyIHRlbSA9IG5ldyBUYWJsYUZhbHNhKCd0ZW0nLCBbZmlsYVRlbShFTkMpLCBmaWxhVGVtKE9UUkFfRU5DKV0pO1xuICAgICAgICAgICAgdmFyIGNvbnN1bHRhID0gY29uc3VsdGFVcGRhdGVUZW0oT1BFUkFUSVZPLCBlbmMsIHJlc3B1ZXN0YXMsIHRhcmVhKTtcbiAgICAgICAgICAgIHZhciBhZmVjdGFkYXMgPSB0ZW0udXBkYXRlKGNvbnN1bHRhLnNxbCwgY29uc3VsdGEucGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiB7IHRlbSwgYWZlY3RhZGFzLCBjb25zdWx0YSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaXQoJ3VuYSBlbmN1ZXN0YSByZWFsaXphZGEgZ3VhcmRhIHJlc3VtZW4geSBjw7NkaWdvIGRlIHJlYSwgeSBkZWphIG5vcmVhIGVuIG51bGwnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyB0ZW0sIGFmZWN0YWRhcyB9ID0gYXBsaWNhcihyZXNwdWVzdGFzUmVhbCwgJ2VuY3UnKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZmVjdGFkYXMsIDEpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5yZXN1bWVuX2VzdGFkbywgJ29rJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGVtLmZpbGFzWzBdLnJlYSwgMSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGVtLmZpbGFzWzBdLm5vcmVhLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCd1bmEgbm8gcmVhIGd1YXJkYSBlbCBjw7NkaWdvIGRlIG5vIHJlYSB5IGRlamEgcmVhIGVuIG51bGwnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyB0ZW0gfSA9IGFwbGljYXIocmVzcHVlc3Rhc05vUmVhLCAnZW5jdScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5yZXN1bWVuX2VzdGFkbywgJ25vIHJlYScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5ub3JlYSwgMyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGVtLmZpbGFzWzBdLnJlYSwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2kgbGEgZW5jdWVzdGEgYW50ZXMgZXJhIG5vIHJlYSB5IGFob3JhIGVzIHJlYSwgc2UgYm9ycmEgbGEgbm8gcmVhJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHRlbSA9IG5ldyBUYWJsYUZhbHNhKCd0ZW0nLCBbeyAuLi5maWxhVGVtKEVOQyksIG5vcmVhOiAzLCByZXN1bWVuX2VzdGFkbzogJ25vIHJlYScgfV0pO1xuICAgICAgICAgICAgdmFyIGNvbnN1bHRhID0gY29uc3VsdGFVcGRhdGVUZW0oT1BFUkFUSVZPLCBFTkMsIHJlc3B1ZXN0YXNSZWFsLCAnZW5jdScpO1xuICAgICAgICAgICAgdGVtLnVwZGF0ZShjb25zdWx0YS5zcWwsIGNvbnN1bHRhLnBhcmFtcyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGVtLmZpbGFzWzBdLm5vcmVhLCBudWxsKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZW0uZmlsYXNbMF0ucmVhLCAxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdwYXJhIGxhIHRhcmVhIHN1cGUgZ3VhcmRhIGxhcyBjb2x1bW5hcyBfc3VwIHkgbm8gdG9jYSBsYXMgZGUgbGEgZW5jdWVzdGEnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyB0ZW0gfSA9IGFwbGljYXIocmVzcHVlc3Rhc1N1cCwgJ3N1cGUnKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZW0uZmlsYXNbMF0ucmVzdW1lbl9lc3RhZG9fc3VwLCAnbm8gcmVhJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGVtLmZpbGFzWzBdLm5vcmVhX3N1cCwgNzEpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5yZWFfc3VwLCBudWxsKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZW0uZmlsYXNbMF0ucmVzdW1lbl9lc3RhZG8sICd2YWNpbycpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5yZWEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3BhcmEgdW5hIHRhcmVhIHF1ZSBubyBlcyBzdXBlIG5vIHRvY2EgbGFzIGNvbHVtbmFzIF9zdXAnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyB0ZW0gfSA9IGFwbGljYXIocmVzcHVlc3Rhc1N1cCwgJ2VuY3UnKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZW0uZmlsYXNbMF0ucmVzdW1lbl9lc3RhZG9fc3VwLCAndmFjaW8nKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZW0uZmlsYXNbMF0ubm9yZWFfc3VwLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdndWFyZGEgbGFzIHJlc3B1ZXN0YXMgeSBsYSBmZWNoYSBkZSBtb2RpZmljYWNpw7NuJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHsgdGVtIH0gPSBhcGxpY2FyKHJlc3B1ZXN0YXNSZWFsLCAnZW5jdScpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0ZW0uZmlsYXNbMF0uanNvbl9lbmN1ZXN0YSwgcmVzcHVlc3Rhc1JlYWwpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5mZWNoYV9tb2RpZl9lbmN1ZXN0YSwgdGVtLmFob3JhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzw7NsbyBtb2RpZmljYSBsYSBlbmN1ZXN0YSBpbmRpY2FkYScsICgpID0+IHtcbiAgICAgICAgICAgIHZhciB7IHRlbSB9ID0gYXBsaWNhcihyZXNwdWVzdGFzUmVhbCwgJ2VuY3UnKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodGVtLmZpbGFzWzFdLCBmaWxhVGVtKE9UUkFfRU5DKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnbm8gYWZlY3RhIG5pbmd1bmEgZmlsYSBzaSBsYSBlbmN1ZXN0YSBubyBleGlzdGUnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyBhZmVjdGFkYXMgfSA9IGFwbGljYXIocmVzcHVlc3Rhc1JlYWwsICdlbmN1JywgJzk5OTknKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZmVjdGFkYXMsIDApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdndWFyZGFyRW5jdWVzdGFFblRlbSAoZWplY3V0YSBsYSBjb25zdWx0YSBzb2JyZSBlbCBjbGllbnRlKScsICgpID0+IHtcbiAgICAgICAgZnVuY3Rpb24gY2xpZW50ZVNvYnJlKHRlbTogVGFibGFGYWxzYSk6IENsaWVudGVQYXJhVGVtIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcXVlcnk6IChzcWw6IHN0cmluZywgcGFyYW1zOiBQYXJhbWV0cm9TcWxbXSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hVbmlxdWVSb3c6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dDb3VudCA9IHRlbS51cGRhdGUoc3FsLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd0NvdW50ICE9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlIGVzcGVyYWJhIHVuYSBmaWxhIHkgc2UgYWN0dWFsaXphcm9uICR7cm93Q291bnR9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByb3dDb3VudCB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaXQoJ2ltcGFjdGEgZWwgcmVzdWx0YWRvIGVuIGxhIFRFTScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHZhciB0ZW0gPSBuZXcgVGFibGFGYWxzYSgndGVtJywgW2ZpbGFUZW0oRU5DKSwgZmlsYVRlbShPVFJBX0VOQyldKTtcbiAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKHsgY2xpZW50OiBjbGllbnRlU29icmUodGVtKSB9LCBPUEVSQVRJVk8sIEVOQywgcmVzcHVlc3Rhc05vUmVhLCAnZW5jdScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlbS5maWxhc1swXS5ub3JlYSwgMyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGVtLmZpbGFzWzBdLnJlc3VtZW5fZXN0YWRvLCAnbm8gcmVhJyk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHRlbS5maWxhc1sxXSwgZmlsYVRlbShPVFJBX0VOQykpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2ZhbGxhIHNpIGxhIGVuY3Vlc3RhIG5vIGV4aXN0ZSBlbiBsYSBURU0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGVtID0gbmV3IFRhYmxhRmFsc2EoJ3RlbScsIFtmaWxhVGVtKE9UUkFfRU5DKV0pO1xuICAgICAgICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICAgICAgICAgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oeyBjbGllbnQ6IGNsaWVudGVTb2JyZSh0ZW0pIH0sIE9QRVJBVElWTywgRU5DLCByZXNwdWVzdGFzUmVhbCwgJ2VuY3UnKSxcbiAgICAgICAgICAgICAgICAvc2UgZXNwZXJhYmEgdW5hIGZpbGEvXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0YXJlYXNfdGVtIChjb25zdWx0YVVwZGF0ZVRhcmVhc1RlbVBvckRlc2NhcmdhKScsICgpID0+IHtcbiAgICAgICAgZnVuY3Rpb24gYXBsaWNhcihyZXNwdWVzdGFzOiBSZXN1bHRhZG9SZXN1bWVuLCB0YXJlYTogSWRUYXJlYSwgb3B0czogeyB0b2tlbj86IHN0cmluZywgcGFzYUFEZXNjYXJnYXI/OiBib29sZWFuLCBmaWxhcz86IEZpbGFbXSB9ID0ge30pIHtcbiAgICAgICAgICAgIHZhciBmaWxhcyA9IG9wdHMuZmlsYXMgPz8gW2ZpbGFUYXJlYXNUZW0oRU5DLCAnZW5jdScpLCBmaWxhVGFyZWFzVGVtKEVOQywgJ3N1cGUnKSwgZmlsYVRhcmVhc1RlbShPVFJBX0VOQywgJ2VuY3UnKV07XG4gICAgICAgICAgICB2YXIgdGFyZWFzVGVtID0gbmV3IFRhYmxhRmFsc2EoJ3RhcmVhc190ZW0nLCBmaWxhcyk7XG4gICAgICAgICAgICB2YXIgY29uc3VsdGEgPSBjb25zdWx0YVVwZGF0ZVRhcmVhc1RlbVBvckRlc2NhcmdhKHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgaWRFbmM6IEVOQywgdGFyZWEsIHRva2VuOiBvcHRzLnRva2VuID8/IFRPS0VOLFxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogcmVzcHVlc3RhcywgcGFzYUFEZXNjYXJnYXI6IG9wdHMucGFzYUFEZXNjYXJnYXIgPz8gZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGFmZWN0YWRhcyA9IHRhcmVhc1RlbS51cGRhdGUoY29uc3VsdGEuc3FsLCBjb25zdWx0YS5wYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHsgdGFyZWFzVGVtLCBhZmVjdGFkYXMgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0KCd1bmEgZW5jdWVzdGEgcmVhbGl6YWRhIGd1YXJkYSBlbiBkbV8qIGVsIHJlc3VtZW4geSBlbCBjw7NkaWdvIGRlIHJlYScsICgpID0+IHtcbiAgICAgICAgICAgIHZhciB7IHRhcmVhc1RlbSwgYWZlY3RhZGFzIH0gPSBhcGxpY2FyKHJlc3B1ZXN0YXNSZWFsLCAnZW5jdScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFmZWN0YWRhcywgMSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGFyZWFzVGVtLmZpbGFzWzBdLmRtX3Jlc3VtZW5fZXN0YWRvLCAnb2snKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0YXJlYXNUZW0uZmlsYXNbMF0uZG1fcmVhLCAxKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0YXJlYXNUZW0uZmlsYXNbMF0uZG1fbm9yZWEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3VuYSBubyByZWEgZ3VhcmRhIGVuIGRtXyogZWwgY8OzZGlnbyBkZSBubyByZWEnLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyB0YXJlYXNUZW0gfSA9IGFwbGljYXIocmVzcHVlc3Rhc05vUmVhLCAnZW5jdScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRhcmVhc1RlbS5maWxhc1swXS5kbV9yZXN1bWVuX2VzdGFkbywgJ25vIHJlYScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRhcmVhc1RlbS5maWxhc1swXS5kbV9ub3JlYSwgMyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGFyZWFzVGVtLmZpbGFzWzBdLmRtX3JlYSwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncGFyYSBsYSB0YXJlYSBzdXBlIGd1YXJkYSBkbV8qX3N1cCB5IG5vIHRvY2EgbG9zIGRlIGxhIGVuY3Vlc3RhJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHsgdGFyZWFzVGVtIH0gPSBhcGxpY2FyKHJlc3B1ZXN0YXNTdXAsICdzdXBlJyk7XG4gICAgICAgICAgICB2YXIgc3VwZSA9IHRhcmVhc1RlbS5maWxhc1sxXTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdXBlLmRtX3Jlc3VtZW5fZXN0YWRvX3N1cCwgJ25vIHJlYScpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN1cGUuZG1fbm9yZWFfc3VwLCA3MSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3VwZS5kbV9yZXN1bWVuX2VzdGFkbywgJ3ZhY2lvJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3VwZS5kbV9yZWEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Bhc2EgbGEgdGFyZWEgYSBkZXNjYXJnYWRhIHkgbGliZXJhIGVsIHRva2VuIGRlbCBkaXNwb3NpdGl2bycsICgpID0+IHtcbiAgICAgICAgICAgIHZhciB7IHRhcmVhc1RlbSB9ID0gYXBsaWNhcihyZXNwdWVzdGFzUmVhbCwgJ2VuY3UnKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0YXJlYXNUZW0uZmlsYXNbMF0uZXN0YWRvLCAnRCcpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRhcmVhc1RlbS5maWxhc1swXS5jYXJnYWRvX2RtLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzw7NsbyBtb2RpZmljYSBsYSB0YXJlYSBkZSBsYSBlbmN1ZXN0YSBpbmRpY2FkYScsICgpID0+IHtcbiAgICAgICAgICAgIHZhciB7IHRhcmVhc1RlbSB9ID0gYXBsaWNhcihyZXNwdWVzdGFzUmVhbCwgJ2VuY3UnKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodGFyZWFzVGVtLmZpbGFzWzFdLCBmaWxhVGFyZWFzVGVtKEVOQywgJ3N1cGUnKSk7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHRhcmVhc1RlbS5maWxhc1syXSwgZmlsYVRhcmVhc1RlbShPVFJBX0VOQywgJ2VuY3UnKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2kgZWwgZGlzcG9zaXRpdm8geWEgbm8gZXMgZWwgZHVlw7FvIGRlIGxhIGVuY3Vlc3RhIChvdHJvIHRva2VuKSBubyBtb2RpZmljYSBuYWRhJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGZpbGFzID0gW2ZpbGFUYXJlYXNUZW0oRU5DLCAnZW5jdScsICd0b2tlbi1kZS1vdHJvLWRtJyldO1xuICAgICAgICAgICAgdmFyIHsgdGFyZWFzVGVtLCBhZmVjdGFkYXMgfSA9IGFwbGljYXIocmVzcHVlc3Rhc1JlYWwsICdlbmN1JywgeyBmaWxhcyB9KTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZmVjdGFkYXMsIDApO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0YXJlYXNUZW0uZmlsYXNbMF0sIGZpbGFUYXJlYXNUZW0oRU5DLCAnZW5jdScsICd0b2tlbi1kZS1vdHJvLWRtJykpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3NpIGxhIGVuY3Vlc3RhIHlhIG5vIGVzdMOhIGNhcmdhZGEgZW4gbmluZ8O6biBkaXNwb3NpdGl2byBubyBtb2RpZmljYSBuYWRhJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGZpbGFzID0gW2ZpbGFUYXJlYXNUZW0oRU5DLCAnZW5jdScsIG51bGwpXTtcbiAgICAgICAgICAgIHZhciB7IGFmZWN0YWRhcyB9ID0gYXBsaWNhcihyZXNwdWVzdGFzUmVhbCwgJ2VuY3UnLCB7IGZpbGFzIH0pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFmZWN0YWRhcywgMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY29uIGNhbWJpbyBkZSBtb2RvIG8gZGUgdXN1YXJpbyBtYXJjYSBsYSBvcGVyYWNpw7NuIGNvbW8gZGVzY2FyZ2FyJywgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIHsgdGFyZWFzVGVtIH0gPSBhcGxpY2FyKHJlc3B1ZXN0YXNSZWFsLCAnZW5jdScsIHsgcGFzYUFEZXNjYXJnYXI6IHRydWUgfSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGFyZWFzVGVtLmZpbGFzWzBdLm9wZXJhY2lvbiwgJ2Rlc2NhcmdhcicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3NpbiBjYW1iaW8gZGUgbW9kbyBuaSBkZSB1c3VhcmlvIG5vIG1vZGlmaWNhIGxhIG9wZXJhY2nDs24nLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeyB0YXJlYXNUZW0gfSA9IGFwbGljYXIocmVzcHVlc3Rhc1JlYWwsICdlbmN1JywgeyBwYXNhQURlc2NhcmdhcjogZmFsc2UgfSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGFyZWFzVGVtLmZpbGFzWzBdLm9wZXJhY2lvbiwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|