dmencu 3.2.20 → 3.2.21
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/dist/client/unlogged/calculos-encuesta.d.ts +7 -0
- package/dist/client/unlogged/calculos-encuesta.js +139 -0
- package/dist/client/unlogged/helpers-casilleros.d.ts +14 -0
- package/dist/client/unlogged/helpers-casilleros.js +129 -0
- package/dist/server/server/procedures-dmencu.js +141 -28
- package/dist/server/server/table-rea.js +9 -5
- package/dist/server/server/table-rea_sup.js +8 -4
- package/dist/test/test-ejemplo.d.ts +1 -0
- package/dist/test/test-ejemplo.js +29 -0
- package/dist/test/test-rea-no-rea.d.ts +1 -0
- package/dist/test/test-rea-no-rea.js +589 -0
- package/dist/test/test.d.ts +2 -0
- package/dist/test/test.js +15 -0
- package/dist/unlogged/bypass-formulario.d.ts +198 -0
- package/dist/unlogged/bypass-formulario.js +1226 -0
- package/dist/unlogged/calculos-encuesta.d.ts +7 -0
- package/dist/unlogged/calculos-encuesta.js +213 -0
- package/dist/unlogged/helpers-casilleros.d.ts +14 -0
- package/dist/unlogged/helpers-casilleros.js +129 -0
- package/dist/unlogged/redux-formulario.d.ts +440 -0
- package/dist/unlogged/redux-formulario.js +324 -0
- package/dist/unlogged/render-config.d.ts +52 -0
- package/dist/unlogged/render-config.js +161 -0
- package/dist/unlogged/tipos.d.ts +575 -0
- package/dist/unlogged/tipos.js +21 -0
- package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +198 -0
- package/dist/unlogged/unlogged/bypass-formulario copy.js +1226 -0
- package/dist/unlogged/unlogged/calculos-encuesta.d.ts +7 -0
- package/dist/unlogged/unlogged/calculos-encuesta.js +213 -0
- package/dist/unlogged/unlogged/helpers-casilleros.d.ts +14 -0
- package/dist/unlogged/unlogged/helpers-casilleros.js +130 -0
- package/dist/unlogged/unlogged/helpers.d.ts +14 -0
- package/dist/unlogged/unlogged/helpers.js +129 -0
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MapeoTipoItem, Respuestas, TipoCondicion, UnidadAnalisis } from "./tipos";
|
|
2
|
+
export type EvaluadorExpresion = (condicionJs: string, respuestas: Respuestas) => boolean;
|
|
3
|
+
export type ResultadoBusqueda = {
|
|
4
|
+
codigo: number | null;
|
|
5
|
+
resultado: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function buscarReaNoReaEnRespuestas<T extends TipoCondicion>(unidadAnalisis: UnidadAnalisis, respuestas: Respuestas, lista: MapeoTipoItem[T][], tipo: T, tarea: string, evaluarExpresion?: EvaluadorExpresion): ResultadoBusqueda;
|
|
@@ -0,0 +1,213 @@
|
|
|
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"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.buscarReaNoReaEnRespuestas = buscarReaNoReaEnRespuestas;
|
|
13
|
+
const estrategiasCondicion = {
|
|
14
|
+
'rea': {
|
|
15
|
+
getCondicion: (item) => item.condicion_js,
|
|
16
|
+
getVariable: () => null,
|
|
17
|
+
getValor: () => null,
|
|
18
|
+
getCodigo: (item) => item.rea,
|
|
19
|
+
getResultado: (item) => item.es_positiva,
|
|
20
|
+
getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
|
|
21
|
+
},
|
|
22
|
+
'no_rea': {
|
|
23
|
+
getCondicion: () => null,
|
|
24
|
+
getVariable: (item) => item.variable,
|
|
25
|
+
getValor: (item) => item.valor,
|
|
26
|
+
getCodigo: (item) => item.no_rea,
|
|
27
|
+
getResultado: () => true,
|
|
28
|
+
getTarea: (_item) => null,
|
|
29
|
+
},
|
|
30
|
+
'rea_sup': {
|
|
31
|
+
getCondicion: (item) => item.condicion_js,
|
|
32
|
+
getVariable: () => null,
|
|
33
|
+
getValor: () => null,
|
|
34
|
+
getCodigo: (item) => item.rea_sup,
|
|
35
|
+
getResultado: (item) => item.es_positiva,
|
|
36
|
+
getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
|
|
37
|
+
},
|
|
38
|
+
'no_rea_sup': {
|
|
39
|
+
getCondicion: () => null,
|
|
40
|
+
getVariable: (item) => item.variable_sup,
|
|
41
|
+
getValor: (item) => item.valor_sup,
|
|
42
|
+
getCodigo: (item) => item.no_rea_sup,
|
|
43
|
+
getResultado: () => true,
|
|
44
|
+
getTarea: (_item) => null,
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
// Caché en memoria para no volver a analizar la estructura teórica en cada cambio de input
|
|
48
|
+
const cacheDiccionarioRutas = new WeakMap();
|
|
49
|
+
/**
|
|
50
|
+
* Mapea toda la estructura de UAs produciendo un diccionario O(1):
|
|
51
|
+
* { "viviendas" -> Set("viviendas", "hogares", "personas", "visitas"), "hogares" -> Set("hogares", "personas") }
|
|
52
|
+
*/
|
|
53
|
+
function obtenerDiccionarioRutas(uaRaiz) {
|
|
54
|
+
let mapa = cacheDiccionarioRutas.get(uaRaiz);
|
|
55
|
+
if (mapa)
|
|
56
|
+
return mapa;
|
|
57
|
+
mapa = new Map();
|
|
58
|
+
function mapearNodo(nodo) {
|
|
59
|
+
const descendientes = new Set();
|
|
60
|
+
if (nodo === null || nodo === void 0 ? void 0 : nodo.unidad_analisis) {
|
|
61
|
+
descendientes.add(nodo.unidad_analisis);
|
|
62
|
+
}
|
|
63
|
+
const hijas = nodo === null || nodo === void 0 ? void 0 : nodo.hijas;
|
|
64
|
+
if (hijas) {
|
|
65
|
+
for (const key in hijas) {
|
|
66
|
+
const descHija = mapearNodo(hijas[key]);
|
|
67
|
+
descHija.forEach((d) => descendientes.add(d));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (nodo === null || nodo === void 0 ? void 0 : nodo.unidad_analisis) {
|
|
71
|
+
mapa.set(nodo.unidad_analisis, descendientes);
|
|
72
|
+
}
|
|
73
|
+
return descendientes;
|
|
74
|
+
}
|
|
75
|
+
mapearNodo(uaRaiz);
|
|
76
|
+
cacheDiccionarioRutas.set(uaRaiz, mapa);
|
|
77
|
+
return mapa;
|
|
78
|
+
}
|
|
79
|
+
function itemCumpleCondicion(item, respuestas, estrategia, evaluarExpresion) {
|
|
80
|
+
const condicion = estrategia.getCondicion(item);
|
|
81
|
+
if (condicion !== null) {
|
|
82
|
+
if (!evaluarExpresion) {
|
|
83
|
+
throw new Error('Se requiere evaluarExpresion para evaluar una condicion JS');
|
|
84
|
+
}
|
|
85
|
+
return evaluarExpresion(condicion, respuestas);
|
|
86
|
+
}
|
|
87
|
+
const variable = estrategia.getVariable(item);
|
|
88
|
+
const valor = estrategia.getValor(item);
|
|
89
|
+
return !!variable && variable in respuestas && respuestas[variable] == valor;
|
|
90
|
+
}
|
|
91
|
+
function fusionarRespuestasPlanas(contextoAcumulado, respuestas) {
|
|
92
|
+
const res = Object.assign({}, contextoAcumulado);
|
|
93
|
+
for (const key in respuestas) {
|
|
94
|
+
const val = respuestas[key];
|
|
95
|
+
if (!Array.isArray(val)) {
|
|
96
|
+
res[key] = val;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return res;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Recolecta el contexto completo de TODAS las instancias de targetUaNombre en la encuesta.
|
|
103
|
+
* Usa el diccionario precalculado para filtrar ramas en O(1) sin hacer recursión innecesaria.
|
|
104
|
+
*/
|
|
105
|
+
function obtenerTodasLasInstanciasDeUa(unidadAnalisis, respuestas, targetUaNombre, diccionarioRutas, contextoAcumulado = {}) {
|
|
106
|
+
const contextoActual = fusionarRespuestasPlanas(contextoAcumulado, respuestas);
|
|
107
|
+
if ((unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.unidad_analisis) === targetUaNombre) {
|
|
108
|
+
return { completa: true, instancias: [contextoActual] };
|
|
109
|
+
}
|
|
110
|
+
const hijas = unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.hijas;
|
|
111
|
+
if (!hijas) {
|
|
112
|
+
return { completa: false, instancias: [] };
|
|
113
|
+
}
|
|
114
|
+
const instanciasResultantes = [];
|
|
115
|
+
for (const key in hijas) {
|
|
116
|
+
const uaHija = hijas[key];
|
|
117
|
+
const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
|
|
118
|
+
if (!nombreUaHija)
|
|
119
|
+
continue;
|
|
120
|
+
// CONSULTA DICCIONARIO O(1): ¿Esta rama contiene a la UA que buscamos?
|
|
121
|
+
const descendientesDeHija = diccionarioRutas.get(nombreUaHija);
|
|
122
|
+
if (!descendientesDeHija || !descendientesDeHija.has(targetUaNombre)) {
|
|
123
|
+
continue; // Ignora ramas como 'visitas' instantáneamente
|
|
124
|
+
}
|
|
125
|
+
const arregloHijas = respuestas[nombreUaHija];
|
|
126
|
+
// Integridad estructural: rama válida pero sin array o vacío
|
|
127
|
+
if (!Array.isArray(arregloHijas) || arregloHijas.length === 0) {
|
|
128
|
+
return { completa: false, instancias: [] };
|
|
129
|
+
}
|
|
130
|
+
for (let i = 0; i < arregloHijas.length; i++) {
|
|
131
|
+
const respuestasHija = arregloHijas[i];
|
|
132
|
+
const res = obtenerTodasLasInstanciasDeUa(uaHija, respuestasHija, targetUaNombre, diccionarioRutas, contextoActual);
|
|
133
|
+
if (!res.completa) {
|
|
134
|
+
return { completa: false, instancias: [] };
|
|
135
|
+
}
|
|
136
|
+
for (let j = 0; j < res.instancias.length; j++) {
|
|
137
|
+
instanciasResultantes.push(res.instancias[j]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
completa: instanciasResultantes.length > 0,
|
|
143
|
+
instancias: instanciasResultantes,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function buscarRecursivo(uaRaiz, respuestasRaiz, unidadAnalisisActual, respuestasActuales, listaOrdenada, tipo, tarea, evaluarExpresion, diccionarioRutas) {
|
|
147
|
+
const estrategia = estrategiasCondicion[tipo];
|
|
148
|
+
for (let i = 0; i < listaOrdenada.length; i++) {
|
|
149
|
+
const item = listaOrdenada[i];
|
|
150
|
+
const itemTarea = estrategia.getTarea(item);
|
|
151
|
+
if (itemTarea && itemTarea !== tarea) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (itemCumpleCondicion(item, respuestasActuales, estrategia, evaluarExpresion)) {
|
|
155
|
+
const resultado = estrategia.getResultado(item);
|
|
156
|
+
const esReaPositiva = (tipo === 'rea' || tipo === 'rea_sup') && resultado === true;
|
|
157
|
+
if (esReaPositiva) {
|
|
158
|
+
const nombreUaActual = unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.unidad_analisis;
|
|
159
|
+
if (nombreUaActual) {
|
|
160
|
+
const resInstancias = obtenerTodasLasInstanciasDeUa(uaRaiz, respuestasRaiz, nombreUaActual, diccionarioRutas);
|
|
161
|
+
if (!resInstancias.completa) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (resInstancias.instancias.length > 1) {
|
|
165
|
+
let todasCumplen = true;
|
|
166
|
+
for (let k = 0; k < resInstancias.instancias.length; k++) {
|
|
167
|
+
if (!itemCumpleCondicion(item, resInstancias.instancias[k], estrategia, evaluarExpresion)) {
|
|
168
|
+
todasCumplen = false;
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!todasCumplen) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
codigo: estrategia.getCodigo(item),
|
|
180
|
+
resultado,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const hijas = unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.hijas;
|
|
185
|
+
if (hijas) {
|
|
186
|
+
for (const key in hijas) {
|
|
187
|
+
const uaHija = hijas[key];
|
|
188
|
+
const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
|
|
189
|
+
if (nombreUaHija && Array.isArray(respuestasActuales[nombreUaHija])) {
|
|
190
|
+
const arregloHijas = respuestasActuales[nombreUaHija];
|
|
191
|
+
for (let i = 0; i < arregloHijas.length; i++) {
|
|
192
|
+
const respuestasHija = arregloHijas[i];
|
|
193
|
+
const res = buscarRecursivo(uaRaiz, respuestasRaiz, uaHija, Object.assign({}, respuestasActuales, respuestasHija), listaOrdenada, tipo, tarea, evaluarExpresion, diccionarioRutas);
|
|
194
|
+
if (res.codigo !== null) {
|
|
195
|
+
return res;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return { codigo: null, resultado: false };
|
|
202
|
+
}
|
|
203
|
+
function buscarReaNoReaEnRespuestas(unidadAnalisis, respuestas, lista, tipo, tarea, evaluarExpresion) {
|
|
204
|
+
if (!estrategiasCondicion[tipo]) {
|
|
205
|
+
throw new Error(`Tipo de condición desconocido: ${tipo}`);
|
|
206
|
+
}
|
|
207
|
+
// Obtiene o crea el diccionario de rutas para la estructura recibida
|
|
208
|
+
const diccionarioRutas = obtenerDiccionarioRutas(unidadAnalisis);
|
|
209
|
+
const listaOrdenada = [...lista].sort((a, b) => { var _a, _b; return ((_a = a.orden) !== null && _a !== void 0 ? _a : 0) - ((_b = b.orden) !== null && _b !== void 0 ? _b : 0); });
|
|
210
|
+
return buscarRecursivo(unidadAnalisis, respuestas, unidadAnalisis, respuestas, listaOrdenada, tipo, tarea, evaluarExpresion, diccionarioRutas);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3Vsb3MtZW5jdWVzdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvY2FsY3Vsb3MtZW5jdWVzdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUEwUkEsZ0VBNEJDO0lBbFRELE1BQU0sb0JBQW9CLEdBU3RCO1FBQ0EsS0FBSyxFQUFFO1lBQ0gsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFZLENBQUMsWUFBWTtZQUNsRCxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNwQixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQVksQ0FBQyxHQUFHO1lBQ3RDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBWSxDQUFDLFdBQVc7WUFDakQsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUMsSUFBWSxDQUFDLEtBQUssbUNBQUksSUFBSSxDQUFBLEVBQUE7U0FDbEQ7UUFDRCxRQUFRLEVBQUU7WUFDTixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUN4QixXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWMsQ0FBQyxRQUFRO1lBQy9DLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBYyxDQUFDLEtBQUs7WUFDekMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFjLENBQUMsTUFBTTtZQUMzQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUN4QixRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUk7U0FDNUI7UUFDRCxTQUFTLEVBQUU7WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWUs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ZW0sIE5vUmVhLCBOb1JlYVN1cCwgUmVhLCBSZWFTdXAsIFJlc3B1ZXN0YXMsIFRpcG9Db25kaWNpb24sIFVuaWRhZEFuYWxpc2lzLCBWYWxvciB9IGZyb20gXCIuL3RpcG9zXCI7XG5cbmV4cG9ydCB0eXBlIEV2YWx1YWRvckV4cHJlc2lvbiA9IChjb25kaWNpb25Kczogc3RyaW5nLCByZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiBib29sZWFuO1xuXG5jb25zdCBlc3RyYXRlZ2lhc0NvbmRpY2lvbjoge1xuICAgIFtLIGluIFRpcG9Db25kaWNpb25dOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBnZXRDb2RpZ286IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBudW1iZXI7XG4gICAgICAgIGdldFJlc3VsdGFkbzogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IGJvb2xlYW47XG4gICAgICAgIGdldFRhcmVhOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICB9XG59ID0ge1xuICAgICdyZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkuY29uZGljaW9uX2pzLFxuICAgICAgICBnZXRWYXJpYWJsZTogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFsb3I6ICgpID0+IG51bGwsXG4gICAgICAgIGdldENvZGlnbzogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkucmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWEpLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFyaWFibGU6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkudmFyaWFibGUsXG4gICAgICAgIGdldFZhbG9yOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWEpLnZhbG9yLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkubm9fcmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86ICgpID0+IHRydWUsXG4gICAgICAgIGdldFRhcmVhOiAoX2l0ZW0pID0+IG51bGwsXG4gICAgfSxcbiAgICAncmVhX3N1cCc6IHtcbiAgICAgICAgZ2V0Q29uZGljaW9uOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5jb25kaWNpb25fanMsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoKSA9PiBudWxsLFxuICAgICAgICBnZXRWYWxvcjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0Q29kaWdvOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5yZWFfc3VwLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWFTdXApLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYVN1cCkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWFfc3VwJzoge1xuICAgICAgICBnZXRDb25kaWNpb246ICgpID0+IG51bGwsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWFTdXApLnZhcmlhYmxlX3N1cCxcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkudmFsb3Jfc3VwLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkubm9fcmVhX3N1cCxcbiAgICAgICAgZ2V0UmVzdWx0YWRvOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRUYXJlYTogKF9pdGVtKSA9PiBudWxsLFxuICAgIH1cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3VsdGFkb0J1c3F1ZWRhID0ge1xuICAgIGNvZGlnbzogbnVtYmVyIHwgbnVsbDtcbiAgICByZXN1bHRhZG86IGJvb2xlYW47XG59O1xuXG4vLyBDYWNow6kgZW4gbWVtb3JpYSBwYXJhIG5vIHZvbHZlciBhIGFuYWxpemFyIGxhIGVzdHJ1Y3R1cmEgdGXDs3JpY2EgZW4gY2FkYSBjYW1iaW8gZGUgaW5wdXRcbmNvbnN0IGNhY2hlRGljY2lvbmFyaW9SdXRhcyA9IG5ldyBXZWFrTWFwPFVuaWRhZEFuYWxpc2lzLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+KCk7XG5cbi8qKlxuICogTWFwZWEgdG9kYSBsYSBlc3RydWN0dXJhIGRlIFVBcyBwcm9kdWNpZW5kbyB1biBkaWNjaW9uYXJpbyBPKDEpOlxuICogeyBcInZpdmllbmRhc1wiIC0+IFNldChcInZpdmllbmRhc1wiLCBcImhvZ2FyZXNcIiwgXCJwZXJzb25hc1wiLCBcInZpc2l0YXNcIiksIFwiaG9nYXJlc1wiIC0+IFNldChcImhvZ2FyZXNcIiwgXCJwZXJzb25hc1wiKSB9XG4gKi9cbmZ1bmN0aW9uIG9idGVuZXJEaWNjaW9uYXJpb1J1dGFzKHVhUmFpejogVW5pZGFkQW5hbGlzaXMpOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4ge1xuICAgIGxldCBtYXBhID0gY2FjaGVEaWNjaW9uYXJpb1J1dGFzLmdldCh1YVJhaXopO1xuICAgIGlmIChtYXBhKSByZXR1cm4gbWFwYTtcblxuICAgIG1hcGEgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgICBmdW5jdGlvbiBtYXBlYXJOb2RvKG5vZG86IFVuaWRhZEFuYWxpc2lzKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBkZXNjZW5kaWVudGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGlmIChub2RvPy51bmlkYWRfYW5hbGlzaXMpIHtcbiAgICAgICAgICAgIGRlc2NlbmRpZW50ZXMuYWRkKG5vZG8udW5pZGFkX2FuYWxpc2lzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoaWphcyA9IG5vZG8/LmhpamFzO1xuICAgICAgICBpZiAoaGlqYXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhpamFzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY0hpamEgPSBtYXBlYXJOb2RvKGhpamFzW2tleSBhcyBJZFVuaWRhZEFuYWxpc2lzXSEpO1xuICAgICAgICAgICAgICAgIGRlc2NIaWphLmZvckVhY2goKGQpID0+IGRlc2NlbmRpZW50ZXMuYWRkKGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kbz8udW5pZGFkX2FuYWxpc2lzKSB7XG4gICAgICAgICAgICBtYXBhIS5zZXQobm9kby51bmlkYWRfYW5hbGlzaXMsIGRlc2NlbmRpZW50ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjZW5kaWVudGVzO1xuICAgIH1cblxuICAgIG1hcGVhck5vZG8odWFSYWl6KTtcbiAgICBjYWNoZURpY2Npb25hcmlvUnV0YXMuc2V0KHVhUmFpeiwgbWFwYSk7XG4gICAgcmV0dXJuIG1hcGE7XG59XG5cbmZ1bmN0aW9uIGl0ZW1DdW1wbGVDb25kaWNpb248VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIGl0ZW06IE1hcGVvVGlwb0l0ZW1bVF0sXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICBlc3RyYXRlZ2lhOiB0eXBlb2YgZXN0cmF0ZWdpYXNDb25kaWNpb25bVF0sXG4gICAgZXZhbHVhckV4cHJlc2lvbjogRXZhbHVhZG9yRXhwcmVzaW9uIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgICBjb25zdCBjb25kaWNpb24gPSBlc3RyYXRlZ2lhLmdldENvbmRpY2lvbihpdGVtKTtcbiAgICBpZiAoY29uZGljaW9uICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghZXZhbHVhckV4cHJlc2lvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZSByZXF1aWVyZSBldmFsdWFyRXhwcmVzaW9uIHBhcmEgZXZhbHVhciB1bmEgY29uZGljaW9uIEpTJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2YWx1YXJFeHByZXNpb24oY29uZGljaW9uLCByZXNwdWVzdGFzKTtcbiAgICB9XG4gICAgY29uc3QgdmFyaWFibGUgPSBlc3RyYXRlZ2lhLmdldFZhcmlhYmxlKGl0ZW0pO1xuICAgIGNvbnN0IHZhbG9yID0gZXN0cmF0ZWdpYS5nZXRWYWxvcihpdGVtKTtcbiAgICByZXR1cm4gISF2YXJpYWJsZSAmJiB2YXJpYWJsZSBpbiByZXNwdWVzdGFzICYmIHJlc3B1ZXN0YXNbdmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gdmFsb3I7XG59XG5cbmZ1bmN0aW9uIGZ1c2lvbmFyUmVzcHVlc3Rhc1BsYW5hcyhjb250ZXh0b0FjdW11bGFkbzogUmVzcHVlc3RhcywgcmVzcHVlc3RhczogUmVzcHVlc3Rhcyk6IFJlc3B1ZXN0YXMge1xuICAgIGNvbnN0IHJlczogUmVzcHVlc3RhcyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHRvQWN1bXVsYWRvKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByZXNwdWVzdGFzKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHJlc3B1ZXN0YXNba2V5IGFzIElkVmFyaWFibGVdO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgcmVzW2tleSBhcyBJZFZhcmlhYmxlXSA9IHZhbCBhcyBWYWxvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG50eXBlIFJlc3VsdGFkb0luc3RhbmNpYXMgPSB7XG4gICAgY29tcGxldGE6IGJvb2xlYW47XG4gICAgaW5zdGFuY2lhczogUmVzcHVlc3Rhc1tdO1xufTtcblxuLyoqXG4gKiBSZWNvbGVjdGEgZWwgY29udGV4dG8gY29tcGxldG8gZGUgVE9EQVMgbGFzIGluc3RhbmNpYXMgZGUgdGFyZ2V0VWFOb21icmUgZW4gbGEgZW5jdWVzdGEuXG4gKiBVc2EgZWwgZGljY2lvbmFyaW8gcHJlY2FsY3VsYWRvIHBhcmEgZmlsdHJhciByYW1hcyBlbiBPKDEpIHNpbiBoYWNlciByZWN1cnNpw7NuIGlubmVjZXNhcmlhLlxuICovXG5mdW5jdGlvbiBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICB0YXJnZXRVYU5vbWJyZTogc3RyaW5nLFxuICAgIGRpY2Npb25hcmlvUnV0YXM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PixcbiAgICBjb250ZXh0b0FjdW11bGFkbyA9IHt9IGFzIFJlc3B1ZXN0YXNcbik6IFJlc3VsdGFkb0luc3RhbmNpYXMge1xuICAgIGNvbnN0IGNvbnRleHRvQWN0dWFsID0gZnVzaW9uYXJSZXNwdWVzdGFzUGxhbmFzKGNvbnRleHRvQWN1bXVsYWRvLCByZXNwdWVzdGFzKTtcblxuICAgIGlmICh1bmlkYWRBbmFsaXNpcz8udW5pZGFkX2FuYWxpc2lzID09PSB0YXJnZXRVYU5vbWJyZSkge1xuICAgICAgICByZXR1cm4geyBjb21wbGV0YTogdHJ1ZSwgaW5zdGFuY2lhczogW2NvbnRleHRvQWN0dWFsXSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGhpamFzID0gdW5pZGFkQW5hbGlzaXM/LmhpamFzO1xuICAgIGlmICghaGlqYXMpIHtcbiAgICAgICAgcmV0dXJuIHsgY29tcGxldGE6IGZhbHNlLCBpbnN0YW5jaWFzOiBbXSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNpYXNSZXN1bHRhbnRlczogUmVzcHVlc3Rhc1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBoaWphcykge1xuICAgICAgICBjb25zdCB1YUhpamEgPSBoaWphc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc107XG4gICAgICAgIGNvbnN0IG5vbWJyZVVhSGlqYSA9IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzO1xuICAgICAgICBpZiAoIW5vbWJyZVVhSGlqYSkgY29udGludWU7XG5cbiAgICAgICAgLy8gQ09OU1VMVEEgRElDQ0lPTkFSSU8gTygxKTogwr9Fc3RhIHJhbWEgY29udGllbmUgYSBsYSBVQSBxdWUgYnVzY2Ftb3M/XG4gICAgICAgIGNvbnN0IGRlc2NlbmRpZW50ZXNEZUhpamEgPSBkaWNjaW9uYXJpb1J1dGFzLmdldChub21icmVVYUhpamEpO1xuICAgICAgICBpZiAoIWRlc2NlbmRpZW50ZXNEZUhpamEgfHwgIWRlc2NlbmRpZW50ZXNEZUhpamEuaGFzKHRhcmdldFVhTm9tYnJlKSkge1xuICAgICAgICAgICAgY29udGludWU7IC8vIElnbm9yYSByYW1hcyBjb21vICd2aXNpdGFzJyBpbnN0YW50w6FuZWFtZW50ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyZWdsb0hpamFzID0gcmVzcHVlc3Rhc1tub21icmVVYUhpamEgYXMgSWRWYXJpYWJsZV07XG5cbiAgICAgICAgLy8gSW50ZWdyaWRhZCBlc3RydWN0dXJhbDogcmFtYSB2w6FsaWRhIHBlcm8gc2luIGFycmF5IG8gdmFjw61vXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJlZ2xvSGlqYXMpIHx8IGFycmVnbG9IaWphcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbXBsZXRhOiBmYWxzZSwgaW5zdGFuY2lhczogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyZWdsb0hpamFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzSGlqYSA9IGFycmVnbG9IaWphc1tpXSBhcyBSZXNwdWVzdGFzO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gb2J0ZW5lclRvZGFzTGFzSW5zdGFuY2lhc0RlVWEoXG4gICAgICAgICAgICAgICAgdWFIaWphLFxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWphLFxuICAgICAgICAgICAgICAgIHRhcmdldFVhTm9tYnJlLFxuICAgICAgICAgICAgICAgIGRpY2Npb25hcmlvUnV0YXMsXG4gICAgICAgICAgICAgICAgY29udGV4dG9BY3R1YWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXJlcy5jb21wbGV0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbXBsZXRhOiBmYWxzZSwgaW5zdGFuY2lhczogW10gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzLmluc3RhbmNpYXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jaWFzUmVzdWx0YW50ZXMucHVzaChyZXMuaW5zdGFuY2lhc1tqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjb21wbGV0YTogaW5zdGFuY2lhc1Jlc3VsdGFudGVzLmxlbmd0aCA+IDAsXG4gICAgICAgIGluc3RhbmNpYXM6IGluc3RhbmNpYXNSZXN1bHRhbnRlcyxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBidXNjYXJSZWN1cnNpdm88VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIHVhUmFpejogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMsXG4gICAgdW5pZGFkQW5hbGlzaXNBY3R1YWw6IFVuaWRhZEFuYWxpc2lzLFxuICAgIHJlc3B1ZXN0YXNBY3R1YWxlczogUmVzcHVlc3RhcyxcbiAgICBsaXN0YU9yZGVuYWRhOiBNYXBlb1RpcG9JdGVtW1RdW10sXG4gICAgdGlwbzogVCxcbiAgICB0YXJlYTogc3RyaW5nLFxuICAgIGV2YWx1YXJFeHByZXNpb246IEV2YWx1YWRvckV4cHJlc2lvbiB8IHVuZGVmaW5lZCxcbiAgICBkaWNjaW9uYXJpb1J1dGFzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj5cbik6IFJlc3VsdGFkb0J1c3F1ZWRhIHtcblxuICAgIGNvbnN0IGVzdHJhdGVnaWEgPSBlc3RyYXRlZ2lhc0NvbmRpY2lvblt0aXBvXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGFPcmRlbmFkYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gbGlzdGFPcmRlbmFkYVtpXTtcbiAgICAgICAgY29uc3QgaXRlbVRhcmVhID0gZXN0cmF0ZWdpYS5nZXRUYXJlYShpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW1UYXJlYSAmJiBpdGVtVGFyZWEgIT09IHRhcmVhKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtQ3VtcGxlQ29uZGljaW9uKGl0ZW0sIHJlc3B1ZXN0YXNBY3R1YWxlcywgZXN0cmF0ZWdpYSwgZXZhbHVhckV4cHJlc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdGFkbyA9IGVzdHJhdGVnaWEuZ2V0UmVzdWx0YWRvKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgZXNSZWFQb3NpdGl2YSA9ICh0aXBvID09PSAncmVhJyB8fCB0aXBvID09PSAncmVhX3N1cCcpICYmIHJlc3VsdGFkbyA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGVzUmVhUG9zaXRpdmEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub21icmVVYUFjdHVhbCA9IHVuaWRhZEFuYWxpc2lzQWN0dWFsPy51bmlkYWRfYW5hbGlzaXM7XG4gICAgICAgICAgICAgICAgaWYgKG5vbWJyZVVhQWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0luc3RhbmNpYXMgPSBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlVWFBY3R1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWNjaW9uYXJpb1J1dGFzXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNJbnN0YW5jaWFzLmNvbXBsZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNJbnN0YW5jaWFzLmluc3RhbmNpYXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvZGFzQ3VtcGxlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJlc0luc3RhbmNpYXMuaW5zdGFuY2lhcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbUN1bXBsZUNvbmRpY2lvbihpdGVtLCByZXNJbnN0YW5jaWFzLmluc3RhbmNpYXNba10sIGVzdHJhdGVnaWEsIGV2YWx1YXJFeHByZXNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGFzQ3VtcGxlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9kYXNDdW1wbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kaWdvOiBlc3RyYXRlZ2lhLmdldENvZGlnbyhpdGVtKSxcbiAgICAgICAgICAgICAgICByZXN1bHRhZG8sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGlqYXMgPSB1bmlkYWRBbmFsaXNpc0FjdHVhbD8uaGlqYXM7XG4gICAgaWYgKGhpamFzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhpamFzKSB7XG4gICAgICAgICAgICBjb25zdCB1YUhpamEgPSBoaWphc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc107XG4gICAgICAgICAgICBjb25zdCBub21icmVVYUhpamEgPSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcztcbiAgICAgICAgICAgIGlmIChub21icmVVYUhpamEgJiYgQXJyYXkuaXNBcnJheShyZXNwdWVzdGFzQWN0dWFsZXNbbm9tYnJlVWFIaWphIGFzIElkVmFyaWFibGVdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmVnbG9IaWphcyA9IHJlc3B1ZXN0YXNBY3R1YWxlc1tub21icmVVYUhpamEgYXMgSWRWYXJpYWJsZV0gYXMgdW5rbm93biBhcyBSZXNwdWVzdGFzW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJlZ2xvSGlqYXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcHVlc3Rhc0hpamEgPSBhcnJlZ2xvSGlqYXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1c2NhclJlY3Vyc2l2byhcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxuICAgICAgICAgICAgICAgICAgICAgICAgdWFIaWphLFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcmVzcHVlc3Rhc0FjdHVhbGVzLCByZXNwdWVzdGFzSGlqYSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YU9yZGVuYWRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGlwbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhckV4cHJlc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY2Npb25hcmlvUnV0YXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RpZ28gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RpZ286IG51bGwsIHJlc3VsdGFkbzogZmFsc2UgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1c2NhclJlYU5vUmVhRW5SZXNwdWVzdGFzPFQgZXh0ZW5kcyBUaXBvQ29uZGljaW9uPihcbiAgICB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICBsaXN0YTogTWFwZW9UaXBvSXRlbVtUXVtdLFxuICAgIHRpcG86IFQsXG4gICAgdGFyZWE6IHN0cmluZyxcbiAgICBldmFsdWFyRXhwcmVzaW9uPzogRXZhbHVhZG9yRXhwcmVzaW9uXG4pOiBSZXN1bHRhZG9CdXNxdWVkYSB7XG5cbiAgICBpZiAoIWVzdHJhdGVnaWFzQ29uZGljaW9uW3RpcG9dKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGlwbyBkZSBjb25kaWNpw7NuIGRlc2Nvbm9jaWRvOiAke3RpcG99YCk7XG4gICAgfVxuXG4gICAgLy8gT2J0aWVuZSBvIGNyZWEgZWwgZGljY2lvbmFyaW8gZGUgcnV0YXMgcGFyYSBsYSBlc3RydWN0dXJhIHJlY2liaWRhXG4gICAgY29uc3QgZGljY2lvbmFyaW9SdXRhcyA9IG9idGVuZXJEaWNjaW9uYXJpb1J1dGFzKHVuaWRhZEFuYWxpc2lzKTtcblxuICAgIGNvbnN0IGxpc3RhT3JkZW5hZGEgPSBbLi4ubGlzdGFdLnNvcnQoKGEsIGIpID0+IChhLm9yZGVuID8/IDApIC0gKGIub3JkZW4gPz8gMCkpO1xuICAgIHJldHVybiBidXNjYXJSZWN1cnNpdm8oXG4gICAgICAgIHVuaWRhZEFuYWxpc2lzLFxuICAgICAgICByZXNwdWVzdGFzLFxuICAgICAgICB1bmlkYWRBbmFsaXNpcyxcbiAgICAgICAgcmVzcHVlc3RhcyxcbiAgICAgICAgbGlzdGFPcmRlbmFkYSxcbiAgICAgICAgdGlwbyxcbiAgICAgICAgdGFyZWEsXG4gICAgICAgIGV2YWx1YXJFeHByZXNpb24sXG4gICAgICAgIGRpY2Npb25hcmlvUnV0YXNcbiAgICApO1xufSJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const helpersCasilleros: {
|
|
2
|
+
null2zero(posibleNull: any): any;
|
|
3
|
+
div0err(numerador: number, denominador: number, pk: string): number;
|
|
4
|
+
funs: {
|
|
5
|
+
blanco(x: any): boolean;
|
|
6
|
+
hoy(): string;
|
|
7
|
+
fecha_valida(x: string): boolean;
|
|
8
|
+
mesanio_valido(x: string): boolean;
|
|
9
|
+
informado(x: any): boolean;
|
|
10
|
+
nsnc(x: any): boolean;
|
|
11
|
+
par(x: number): boolean;
|
|
12
|
+
edad_mes_annio_valido(edad: number, mesAnnio: string, fechaRealizacionDDMMYYYY: string): boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,130 @@
|
|
|
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", "best-globals"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.helpersCasilleros = void 0;
|
|
13
|
+
const best_globals_1 = require("best-globals");
|
|
14
|
+
exports.helpersCasilleros = {
|
|
15
|
+
null2zero(posibleNull) {
|
|
16
|
+
if (posibleNull == null) {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
return posibleNull;
|
|
20
|
+
},
|
|
21
|
+
div0err(numerador, denominador, pk) {
|
|
22
|
+
if (denominador == 0) {
|
|
23
|
+
throw new Error("Error en " + pk + " division por cero de " + numerador);
|
|
24
|
+
}
|
|
25
|
+
return numerador / denominador;
|
|
26
|
+
},
|
|
27
|
+
funs: {
|
|
28
|
+
blanco(x) {
|
|
29
|
+
return x !== 0 && !x;
|
|
30
|
+
},
|
|
31
|
+
hoy() {
|
|
32
|
+
return best_globals_1.date.today().toDmy();
|
|
33
|
+
},
|
|
34
|
+
fecha_valida(x) {
|
|
35
|
+
var formato_valido = /^([1-9]|0[1-9]|[12]\d|3[01])\/([1-9]|0[1-9]|1[012])\/20\d\d$/.test(x);
|
|
36
|
+
var xDate;
|
|
37
|
+
var conversionOk;
|
|
38
|
+
conversionOk = true;
|
|
39
|
+
if (formato_valido) {
|
|
40
|
+
const [d, m, y] = x.split('/');
|
|
41
|
+
try {
|
|
42
|
+
xDate = new Date(`${y}/${m}/${d}`);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
conversionOk = false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
;
|
|
49
|
+
//faltaria validar que no sea una fecha futura y que sea una fecha en el rango del operativo
|
|
50
|
+
return formato_valido && conversionOk;
|
|
51
|
+
},
|
|
52
|
+
mesanio_valido(x) {
|
|
53
|
+
var formato_valido = /^([1-9]|0[1-9]|1[012])\/(19|20)\d\d$/.test(x);
|
|
54
|
+
return formato_valido;
|
|
55
|
+
},
|
|
56
|
+
informado(x) {
|
|
57
|
+
return x !== undefined && x !== null && (!(x instanceof Array) || x.length !== 0)
|
|
58
|
+
&& (!(x instanceof Object) || Object.keys(x).length !== 0);
|
|
59
|
+
},
|
|
60
|
+
nsnc(x) {
|
|
61
|
+
return x == -9;
|
|
62
|
+
},
|
|
63
|
+
par(x) {
|
|
64
|
+
return x % 2 == 0;
|
|
65
|
+
},
|
|
66
|
+
edad_mes_annio_valido(edad, mesAnnio, fechaRealizacionDDMMYYYY) {
|
|
67
|
+
var mesesDiferencia = (d1, d2) => {
|
|
68
|
+
var months;
|
|
69
|
+
months = (d2.getFullYear() - d1.getFullYear()) * 12;
|
|
70
|
+
months -= d1.getMonth();
|
|
71
|
+
months += d2.getMonth();
|
|
72
|
+
return months <= 0 ? 0 : months;
|
|
73
|
+
};
|
|
74
|
+
var partesRealizacion = fechaRealizacionDDMMYYYY.split("/");
|
|
75
|
+
//@ts-ignore las partes corresponden a una fecha válida
|
|
76
|
+
var today = best_globals_1.date.ymd(Number(partesRealizacion[2]), Number(partesRealizacion[1]), Number(partesRealizacion[0]));
|
|
77
|
+
var partesMesAnnio = mesAnnio.split('/');
|
|
78
|
+
//@ts-ignore las partes corresponden a una fecha válida
|
|
79
|
+
var nacimiento = best_globals_1.date.ymd(Number(partesMesAnnio[1]), Number(partesMesAnnio[0]), 1);
|
|
80
|
+
//@ts-ignore RealDate es Date y se puede restar
|
|
81
|
+
var diferenciaMeses = mesesDiferencia(nacimiento, today);
|
|
82
|
+
var edadDecimales = diferenciaMeses / 12; //ej 36.5
|
|
83
|
+
return (Math.floor(edadDecimales) == edad || //misma edad
|
|
84
|
+
edadDecimales == edad + 1 //mes de tolerancia
|
|
85
|
+
);
|
|
86
|
+
},
|
|
87
|
+
//copiar_campo_ua_rama(respuestasOrigen:Respuestas[], posicion:number, variableOrigen: IdVariable, camino:string, condicion:boolean){
|
|
88
|
+
// return condicion?(respuestasOrigen && respuestasOrigen[posicion-1] && respuestasOrigen[posicion-1][`${camino}`][variableOrigen]):null
|
|
89
|
+
// return condicion?eval(`respuestasOrigen[${posicion-1}].`+camino+'.'+variableOrigen):null;
|
|
90
|
+
//}
|
|
91
|
+
/*
|
|
92
|
+
dbo:{
|
|
93
|
+
datoFamiliar(encu:string,hog:number,per:number, dato:string){
|
|
94
|
+
var xpersonas=personas;
|
|
95
|
+
return encu==enc && hog==hogar && informado(xpersonas) && per<= xpersonas.length && per>=1 && !!xpersonas[per-1][dato]? xpersonas[per-1][dato]:null
|
|
96
|
+
},
|
|
97
|
+
edadfamiliar(encu:string,hog:number,per:number){
|
|
98
|
+
var xpersonas=personas;
|
|
99
|
+
return datoFamiliar(encu:string,hog:number,per:number,'edad')
|
|
100
|
+
},
|
|
101
|
+
existeindividual(encu:string,hog:number,per:number){
|
|
102
|
+
var xpersonas=personas;
|
|
103
|
+
return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1 && !!personas[per-1]['entreaind']
|
|
104
|
+
},
|
|
105
|
+
existemiembro(encu:string,hog:number,per:number){
|
|
106
|
+
var xpersonas=personas;
|
|
107
|
+
return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1
|
|
108
|
+
},
|
|
109
|
+
nroconyuges(encu:string,hog:number){
|
|
110
|
+
var xpersonas=personas
|
|
111
|
+
return xpersonas.filter( per->per.p4==2).length
|
|
112
|
+
},
|
|
113
|
+
nrojefes(encu:string,hog:number,per:number){
|
|
114
|
+
return personas.filter( per->per.p4==1).length
|
|
115
|
+
},
|
|
116
|
+
parentescofamiliar(encu:string,hog:number,per:number){
|
|
117
|
+
return datoFamiliar(encu:string,hog:number,per:number,'p4')
|
|
118
|
+
},
|
|
119
|
+
sexofamiliar(encu:string,hog:number,per:number){
|
|
120
|
+
var xpersonas=personas;
|
|
121
|
+
return encu==enc && hog==hogar && !!xpersonas && per<= xpersonas.length && per>=1 && !!xpersonas[per-1].sexo? xpersonas[per-1]['sexo']:null
|
|
122
|
+
},
|
|
123
|
+
sitconyjefe(encu:string,hog:number){
|
|
124
|
+
return datoFamiliar(encu:string,hog:number,1,'p5')
|
|
125
|
+
}
|
|
126
|
+
} */
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1jYXNpbGxlcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VubG9nZ2VkL2hlbHBlcnMtY2FzaWxsZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFDQSwrQ0FBb0M7SUFFdkIsUUFBQSxpQkFBaUIsR0FBRztRQUM3QixTQUFTLENBQUMsV0FBZ0I7WUFDdEIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLENBQUMsU0FBaUIsRUFBRSxXQUFtQixFQUFFLEVBQVU7WUFDdEQsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsT0FBTyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLEVBQUU7WUFDRixNQUFNLENBQUMsQ0FBTTtnQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDeEIsQ0FBQztZQUNELEdBQUc7Z0JBQ0MsT0FBTyxtQkFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQy9CLENBQUM7WUFDRCxZQUFZLENBQUMsQ0FBUztnQkFDbEIsSUFBSSxjQUFjLEdBQUcsOERBQThELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUMzRixJQUFJLEtBQVcsQ0FBQztnQkFDaEIsSUFBSSxZQUFxQixDQUFDO2dCQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENB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Q0FBQyxJQUFJLElBQUksSUFBSSxZQUFZO29CQUNqRCxhQUFhLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxtQkFBbUI7aUJBQ2hELENBQUE7WUFDTCxDQUFDO1lBQ0QscUlBQXFJO1lBQ3JJLDJJQUEySTtZQUMzSSwrRkFBK0Y7WUFDL0YsR0FBRztZQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFtQ0k7U0FDUDtLQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgZGF0ZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTsiXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const helpersCasilleros: {
|
|
2
|
+
null2zero(posibleNull: any): any;
|
|
3
|
+
div0err(numerador: number, denominador: number, pk: string): number;
|
|
4
|
+
funs: {
|
|
5
|
+
blanco(x: any): boolean;
|
|
6
|
+
hoy(): any;
|
|
7
|
+
fecha_valida(x: string): boolean;
|
|
8
|
+
mesanio_valido(x: string): boolean;
|
|
9
|
+
informado(x: any): boolean;
|
|
10
|
+
nsnc(x: any): boolean;
|
|
11
|
+
par(x: number): boolean;
|
|
12
|
+
edad_mes_annio_valido(edad: number, mesAnnio: string, fechaRealizacionDDMMYYYY: string): boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
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"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.helpersCasilleros = void 0;
|
|
13
|
+
exports.helpersCasilleros = {
|
|
14
|
+
null2zero(posibleNull) {
|
|
15
|
+
if (posibleNull == null) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
return posibleNull;
|
|
19
|
+
},
|
|
20
|
+
div0err(numerador, denominador, pk) {
|
|
21
|
+
if (denominador == 0) {
|
|
22
|
+
throw new Error("Error en " + pk + " division por cero de " + numerador);
|
|
23
|
+
}
|
|
24
|
+
return numerador / denominador;
|
|
25
|
+
},
|
|
26
|
+
funs: {
|
|
27
|
+
blanco(x) {
|
|
28
|
+
return x !== 0 && !x;
|
|
29
|
+
},
|
|
30
|
+
hoy() {
|
|
31
|
+
return date.today().toDmy();
|
|
32
|
+
},
|
|
33
|
+
fecha_valida(x) {
|
|
34
|
+
var formato_valido = /^([1-9]|0[1-9]|[12]\d|3[01])\/([1-9]|0[1-9]|1[012])\/20\d\d$/.test(x);
|
|
35
|
+
var xDate;
|
|
36
|
+
var conversionOk;
|
|
37
|
+
conversionOk = true;
|
|
38
|
+
if (formato_valido) {
|
|
39
|
+
const [d, m, y] = x.split('/');
|
|
40
|
+
try {
|
|
41
|
+
xDate = new Date(`${y}/${m}/${d}`);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
conversionOk = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
;
|
|
48
|
+
//faltaria validar que no sea una fecha futura y que sea una fecha en el rango del operativo
|
|
49
|
+
return formato_valido && conversionOk;
|
|
50
|
+
},
|
|
51
|
+
mesanio_valido(x) {
|
|
52
|
+
var formato_valido = /^([1-9]|0[1-9]|1[012])\/(19|20)\d\d$/.test(x);
|
|
53
|
+
return formato_valido;
|
|
54
|
+
},
|
|
55
|
+
informado(x) {
|
|
56
|
+
return x !== undefined && x !== null && (!(x instanceof Array) || x.length !== 0)
|
|
57
|
+
&& (!(x instanceof Object) || Object.keys(x).length !== 0);
|
|
58
|
+
},
|
|
59
|
+
nsnc(x) {
|
|
60
|
+
return x == -9;
|
|
61
|
+
},
|
|
62
|
+
par(x) {
|
|
63
|
+
return x % 2 == 0;
|
|
64
|
+
},
|
|
65
|
+
edad_mes_annio_valido(edad, mesAnnio, fechaRealizacionDDMMYYYY) {
|
|
66
|
+
var mesesDiferencia = (d1, d2) => {
|
|
67
|
+
var months;
|
|
68
|
+
months = (d2.getFullYear() - d1.getFullYear()) * 12;
|
|
69
|
+
months -= d1.getMonth();
|
|
70
|
+
months += d2.getMonth();
|
|
71
|
+
return months <= 0 ? 0 : months;
|
|
72
|
+
};
|
|
73
|
+
var partesRealizacion = fechaRealizacionDDMMYYYY.split("/");
|
|
74
|
+
//@ts-ignore las partes corresponden a una fecha válida
|
|
75
|
+
var today = date.ymd(Number(partesRealizacion[2]), Number(partesRealizacion[1]), Number(partesRealizacion[0]));
|
|
76
|
+
var partesMesAnnio = mesAnnio.split('/');
|
|
77
|
+
//@ts-ignore las partes corresponden a una fecha válida
|
|
78
|
+
var nacimiento = date.ymd(Number(partesMesAnnio[1]), Number(partesMesAnnio[0]), 1);
|
|
79
|
+
//@ts-ignore RealDate es Date y se puede restar
|
|
80
|
+
var diferenciaMeses = mesesDiferencia(nacimiento, today);
|
|
81
|
+
var edadDecimales = diferenciaMeses / 12; //ej 36.5
|
|
82
|
+
return (Math.floor(edadDecimales) == edad || //misma edad
|
|
83
|
+
edadDecimales == edad + 1 //mes de tolerancia
|
|
84
|
+
);
|
|
85
|
+
},
|
|
86
|
+
//copiar_campo_ua_rama(respuestasOrigen:Respuestas[], posicion:number, variableOrigen: IdVariable, camino:string, condicion:boolean){
|
|
87
|
+
// return condicion?(respuestasOrigen && respuestasOrigen[posicion-1] && respuestasOrigen[posicion-1][`${camino}`][variableOrigen]):null
|
|
88
|
+
// return condicion?eval(`respuestasOrigen[${posicion-1}].`+camino+'.'+variableOrigen):null;
|
|
89
|
+
//}
|
|
90
|
+
/*
|
|
91
|
+
dbo:{
|
|
92
|
+
datoFamiliar(encu:string,hog:number,per:number, dato:string){
|
|
93
|
+
var xpersonas=personas;
|
|
94
|
+
return encu==enc && hog==hogar && informado(xpersonas) && per<= xpersonas.length && per>=1 && !!xpersonas[per-1][dato]? xpersonas[per-1][dato]:null
|
|
95
|
+
},
|
|
96
|
+
edadfamiliar(encu:string,hog:number,per:number){
|
|
97
|
+
var xpersonas=personas;
|
|
98
|
+
return datoFamiliar(encu:string,hog:number,per:number,'edad')
|
|
99
|
+
},
|
|
100
|
+
existeindividual(encu:string,hog:number,per:number){
|
|
101
|
+
var xpersonas=personas;
|
|
102
|
+
return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1 && !!personas[per-1]['entreaind']
|
|
103
|
+
},
|
|
104
|
+
existemiembro(encu:string,hog:number,per:number){
|
|
105
|
+
var xpersonas=personas;
|
|
106
|
+
return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1
|
|
107
|
+
},
|
|
108
|
+
nroconyuges(encu:string,hog:number){
|
|
109
|
+
var xpersonas=personas
|
|
110
|
+
return xpersonas.filter( per->per.p4==2).length
|
|
111
|
+
},
|
|
112
|
+
nrojefes(encu:string,hog:number,per:number){
|
|
113
|
+
return personas.filter( per->per.p4==1).length
|
|
114
|
+
},
|
|
115
|
+
parentescofamiliar(encu:string,hog:number,per:number){
|
|
116
|
+
return datoFamiliar(encu:string,hog:number,per:number,'p4')
|
|
117
|
+
},
|
|
118
|
+
sexofamiliar(encu:string,hog:number,per:number){
|
|
119
|
+
var xpersonas=personas;
|
|
120
|
+
return encu==enc && hog==hogar && !!xpersonas && per<= xpersonas.length && per>=1 && !!xpersonas[per-1].sexo? xpersonas[per-1]['sexo']:null
|
|
121
|
+
},
|
|
122
|
+
sitconyjefe(encu:string,hog:number){
|
|
123
|
+
return datoFamiliar(encu:string,hog:number,1,'p5')
|
|
124
|
+
}
|
|
125
|
+
} */
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUNhLFFBQUEsaUJBQWlCLEdBQUc7UUFDN0IsU0FBUyxDQUFDLFdBQWdCO1lBQ3RCLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsQ0FBQztZQUNiLENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQWlCLEVBQUUsV0FBbUIsRUFBRSxFQUFVO1lBQ3RELElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUNELE9BQU8sU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxFQUFFO1lBQ0YsTUFBTSxDQUFDLENBQU07Z0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7WUFDRCxHQUFHO2dCQUNDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQy9CLENBQUM7WUFDRCxZQUFZLENBQUMsQ0FBUztnQkFDbEIsSUFBSSxjQUFjLEdBQUcsOERBQThELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUMzRixJQUFJLEtBQVcsQ0FBQztnQkFDaEIsSUFBSSxZQUFxQixDQUFDO2dCQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FB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QUFJLElBQUksR0FBRyxDQUFDLENBQUMsbUJBQW1CO2lCQUNoRCxDQUFBO1lBQ0wsQ0FBQztZQUNELHFJQUFxSTtZQUNySSwySUFBMkk7WUFDM0ksK0ZBQStGO1lBQy9GLEdBQUc7WUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBbUNJO1NBQ1A7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTsiXX0=
|
package/package.json
CHANGED