ngx-dsxlibrary 1.0.61 → 1.0.62
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/fesm2022/ngx-dsxlibrary.mjs +115 -36
- package/fesm2022/ngx-dsxlibrary.mjs.map +1 -1
- package/index.d.ts +295 -254
- package/ngx-dsxlibrary-1.0.62.tgz +0 -0
- package/package.json +5 -5
- package/ngx-dsxlibrary-1.0.61.tgz +0 -0
|
@@ -465,19 +465,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImpor
|
|
|
465
465
|
|
|
466
466
|
/**
|
|
467
467
|
* Servicio para gestionar los parámetros de seguridad de la aplicación.
|
|
468
|
-
* Permite cargar los parámetros desde la API, mantenerlos en memoria, y
|
|
469
|
-
*
|
|
468
|
+
* Permite cargar los parámetros desde la API, mantenerlos en memoria, acceder y comparar valores de forma segura.
|
|
469
|
+
* Utiliza tipado genérico para los nombres de parámetros y cache interno para optimizar consultas repetidas.
|
|
470
|
+
*
|
|
471
|
+
* @template T Tipo de los nombres de parámetros permitidos (usualmente un union type de string)
|
|
470
472
|
*/
|
|
471
473
|
class ParameterValuesService {
|
|
472
|
-
/**
|
|
474
|
+
/**
|
|
475
|
+
* Parámetros iniciales inyectados mediante INITIAL_PARAMETERS.
|
|
476
|
+
* Se usan para validar y mapear los parámetros recibidos de la API.
|
|
477
|
+
*/
|
|
473
478
|
initialParameters = inject(INITIAL_PARAMETERS);
|
|
474
|
-
/**
|
|
479
|
+
/**
|
|
480
|
+
* Cache interno para optimizar la comparación de valores de parámetros.
|
|
481
|
+
* La clave es una combinación de nombre e índice, el valor es el resultado de la consulta.
|
|
482
|
+
*/
|
|
483
|
+
parameterCache = new Map();
|
|
484
|
+
alertedParams = new Set();
|
|
485
|
+
/**
|
|
486
|
+
* Servicio que contiene el método getParameterSecurity() para obtener los parámetros desde la API.
|
|
487
|
+
*/
|
|
475
488
|
apiService = inject(SecurityService);
|
|
476
|
-
/**
|
|
477
|
-
|
|
478
|
-
|
|
489
|
+
/**
|
|
490
|
+
* Señal reactiva que contiene los parámetros cargados y permite actualizaciones automáticas.
|
|
491
|
+
*/
|
|
492
|
+
_dataParameter = signal(this.initializeData(), ...(ngDevMode ? [{ debugName: "_dataParameter" }] : []));
|
|
493
|
+
/**
|
|
494
|
+
* Flag que indica si ya se cargaron los parámetros desde la API.
|
|
495
|
+
*/
|
|
479
496
|
_loaded = false;
|
|
480
|
-
/**
|
|
497
|
+
/**
|
|
498
|
+
* Inicializa los datos de parámetros usando los valores inyectados.
|
|
499
|
+
* @returns Array de parámetros iniciales tipados
|
|
500
|
+
*/
|
|
501
|
+
initializeData() {
|
|
502
|
+
return this.initialParameters.map((param) => this.createMyParameterValue(param.parameterName, param.values));
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Crea una instancia de MyParameterValues tipada y segura.
|
|
506
|
+
* @param parameterName Nombre del parámetro
|
|
507
|
+
* @param values Valores asociados al parámetro
|
|
508
|
+
* @returns Objeto MyParameterValues
|
|
509
|
+
*/
|
|
510
|
+
createMyParameterValue(parameterName, values) {
|
|
511
|
+
return {
|
|
512
|
+
parameterName,
|
|
513
|
+
values: [...values],
|
|
514
|
+
};
|
|
515
|
+
}
|
|
481
516
|
/**
|
|
482
517
|
* Devuelve los parámetros actuales como un array de solo lectura.
|
|
483
518
|
*/
|
|
@@ -496,7 +531,6 @@ class ParameterValuesService {
|
|
|
496
531
|
}
|
|
497
532
|
this._dataParameter.set(values);
|
|
498
533
|
}
|
|
499
|
-
/** ===================== MÉTODOS PRINCIPALES ===================== */
|
|
500
534
|
/**
|
|
501
535
|
* Carga los parámetros desde la API.
|
|
502
536
|
* Si ya se cargaron y force=false, devuelve la copia en memoria.
|
|
@@ -530,7 +564,53 @@ class ParameterValuesService {
|
|
|
530
564
|
refreshParameters() {
|
|
531
565
|
return this.loadParameters(true);
|
|
532
566
|
}
|
|
533
|
-
/**
|
|
567
|
+
/**
|
|
568
|
+
* Crea una copia segura y mutable de los parámetros actuales.
|
|
569
|
+
* @returns Array de parámetros
|
|
570
|
+
*/
|
|
571
|
+
createSafeCopy() {
|
|
572
|
+
return this.dataParameter.map((item) => this.createMyParameterValue(item.parameterName, [...item.values]));
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Mapea los parámetros recibidos de la API a objetos tipados y seguros.
|
|
576
|
+
* @param apiParameters Parámetros recibidos desde la API
|
|
577
|
+
* @returns Array de MyParameterValues
|
|
578
|
+
*/
|
|
579
|
+
mapToMyParameterValues(apiParameters) {
|
|
580
|
+
const initialNames = this.initialParameters.map((p) => p.parameterName);
|
|
581
|
+
return apiParameters
|
|
582
|
+
.filter((param) => initialNames.includes(param.parameterName))
|
|
583
|
+
.map((param) => {
|
|
584
|
+
// Función de conversión type-safe
|
|
585
|
+
return this.convertToTypedParameter(param);
|
|
586
|
+
})
|
|
587
|
+
.filter((param) => param !== null);
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Convierte un parámetro de la API a un objeto tipado, validando el nombre.
|
|
591
|
+
* @param param Parámetro recibido de la API
|
|
592
|
+
* @returns Objeto MyParameterValues o null si no es válido
|
|
593
|
+
*/
|
|
594
|
+
convertToTypedParameter(param) {
|
|
595
|
+
const initialParam = this.initialParameters.find((p) => p.parameterName === param.parameterName);
|
|
596
|
+
if (!initialParam) {
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
// Conversión segura con verificación
|
|
600
|
+
if (this.isValidParameterName(param.parameterName)) {
|
|
601
|
+
return this.createMyParameterValue(param.parameterName, param.parameterValues?.map((v) => v.value) ?? []);
|
|
602
|
+
}
|
|
603
|
+
return null;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Verifica si un nombre de parámetro es válido según los parámetros iniciales.
|
|
607
|
+
* @param name Nombre a validar
|
|
608
|
+
* @returns true si es válido
|
|
609
|
+
*/
|
|
610
|
+
isValidParameterName(name) {
|
|
611
|
+
// Verifica que el nombre esté en los parámetros iniciales
|
|
612
|
+
return this.initialParameters.some((param) => param.parameterName === name);
|
|
613
|
+
}
|
|
534
614
|
/**
|
|
535
615
|
* Valida que los parámetros devueltos por la API coincidan con los iniciales.
|
|
536
616
|
* Muestra errores o advertencias en consola si existen diferencias.
|
|
@@ -549,21 +629,6 @@ class ParameterValuesService {
|
|
|
549
629
|
console.warn(`Cantidad distinta: iniciales=${initialNames.length}, api=${apiNames.length}`);
|
|
550
630
|
}
|
|
551
631
|
}
|
|
552
|
-
/**
|
|
553
|
-
* Transforma un array de ParameterSecurity en MyParameterValues
|
|
554
|
-
* @param apiParameters Parámetros recibidos desde la API
|
|
555
|
-
* @returns Array de MyParameterValues
|
|
556
|
-
*/
|
|
557
|
-
mapToMyParameterValues(apiParameters) {
|
|
558
|
-
const initialNames = this.initialParameters.map((p) => p.parameterName);
|
|
559
|
-
return apiParameters
|
|
560
|
-
.filter((param) => initialNames.includes(param.parameterName))
|
|
561
|
-
.map((param) => ({
|
|
562
|
-
parameterName: param.parameterName,
|
|
563
|
-
values: param.parameterValues?.map((v) => v.value) ?? [],
|
|
564
|
-
}));
|
|
565
|
-
}
|
|
566
|
-
/** ===================== HELPERS SEGUROS ===================== */
|
|
567
632
|
/**
|
|
568
633
|
* Obtiene un valor específico de un parámetro.
|
|
569
634
|
* Devuelve `defaultValue` si no existe o el índice es inválido.
|
|
@@ -580,14 +645,35 @@ class ParameterValuesService {
|
|
|
580
645
|
return param.values[index];
|
|
581
646
|
}
|
|
582
647
|
/**
|
|
583
|
-
* Compara un valor específico con un valor esperado.
|
|
648
|
+
* Compara un valor específico con un valor esperado, usando cache para optimizar llamadas repetidas.
|
|
584
649
|
* @param parameterName Nombre del parámetro
|
|
585
650
|
* @param expectedValue Valor esperado
|
|
586
651
|
* @param index Índice del valor dentro del array (default: 0)
|
|
587
652
|
* @returns true si coincide, false en caso contrario
|
|
588
653
|
*/
|
|
589
654
|
isParameterValue(parameterName, expectedValue, index = 0) {
|
|
590
|
-
|
|
655
|
+
const cacheKey = `${String(parameterName)}_${index}`;
|
|
656
|
+
// Validación: si el parámetro no existe, muestra mensaje solo una vez y corta el flujo
|
|
657
|
+
const paramExists = this.dataParameter.some((p) => p.parameterName === parameterName);
|
|
658
|
+
if (!paramExists) {
|
|
659
|
+
if (!this.alertedParams.has(parameterName)) {
|
|
660
|
+
window.alert(`Error: El parámetro '${parameterName}' no existe.`);
|
|
661
|
+
this.alertedParams.add(parameterName);
|
|
662
|
+
}
|
|
663
|
+
return false;
|
|
664
|
+
}
|
|
665
|
+
if (!this.parameterCache.has(cacheKey)) {
|
|
666
|
+
//console.log('Parametro: ' + parameterName);
|
|
667
|
+
const value = this.getValue(parameterName, index);
|
|
668
|
+
this.parameterCache.set(cacheKey, value);
|
|
669
|
+
}
|
|
670
|
+
return this.parameterCache.get(cacheKey) === expectedValue;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Limpia el cache interno de comparaciones de parámetros.
|
|
674
|
+
*/
|
|
675
|
+
clearParameterCache() {
|
|
676
|
+
this.parameterCache.clear();
|
|
591
677
|
}
|
|
592
678
|
/**
|
|
593
679
|
* Verifica si un parámetro tiene al menos un valor.
|
|
@@ -617,7 +703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImpor
|
|
|
617
703
|
}] });
|
|
618
704
|
|
|
619
705
|
class NavbarDsxComponent {
|
|
620
|
-
_securityService = inject(SecurityService);
|
|
706
|
+
//private _securityService = inject(SecurityService);
|
|
621
707
|
_parameterSecurityService = inject(ParameterValuesService);
|
|
622
708
|
_alertaService = inject(AlertaService);
|
|
623
709
|
logoWidth = input('300', ...(ngDevMode ? [{ debugName: "logoWidth" }] : []));
|
|
@@ -662,7 +748,7 @@ class NavbarDsxComponent {
|
|
|
662
748
|
console.error('Error al actualizar parámetros de SeguridadIT', err);
|
|
663
749
|
this._alertaService.toastrAlerts(3, 'SeguridadIT', 'Error al actualizar parámetros!', 2);
|
|
664
750
|
},
|
|
665
|
-
complete: () =>
|
|
751
|
+
complete: () => this._parameterSecurityService.clearParameterCache(),
|
|
666
752
|
});
|
|
667
753
|
}
|
|
668
754
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NavbarDsxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -1043,13 +1129,6 @@ function createInitialCache(cacheKeys) {
|
|
|
1043
1129
|
return Object.fromEntries(Object.values(cacheKeys).map((key) => [key, false]));
|
|
1044
1130
|
}
|
|
1045
1131
|
|
|
1046
|
-
const INITIAL_PARAMETERS_FOR_TYPE = [
|
|
1047
|
-
'pCreate',
|
|
1048
|
-
'pRead',
|
|
1049
|
-
'pUpdate',
|
|
1050
|
-
'pDelete',
|
|
1051
|
-
];
|
|
1052
|
-
|
|
1053
1132
|
class DsxAddToolsModule {
|
|
1054
1133
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: DsxAddToolsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1055
1134
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: DsxAddToolsModule, imports: [JsonValuesDebujComponent], exports: [CommonModule,
|