ngx-redi-core 0.0.0-watch
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/Helper/index.d.ts +5 -0
- package/Helper/package.json +3 -0
- package/Helper/public-api.d.ts +3 -0
- package/Helper/src/helpers/bag-data-subject.service.d.ts +43 -0
- package/Helper/src/helpers/csv.service.d.ts +33 -0
- package/Helper/src/helpers/data-subject.service.d.ts +32 -0
- package/Helper/src/models/interfaces/data-subject.interface.d.ts +6 -0
- package/README.md +24 -0
- package/RediDragDrop/index.d.ts +5 -0
- package/RediDragDrop/package.json +3 -0
- package/RediDragDrop/public-api.d.ts +4 -0
- package/RediDragDrop/src/models/classes/proceso-archivo-csv.d.ts +29 -0
- package/RediDragDrop/src/models/directives/drag-drop.directive.d.ts +43 -0
- package/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.d.ts +188 -0
- package/RediDragDrop/src/modules/redi-drag-drop.module.d.ts +13 -0
- package/RediGrid/index.d.ts +5 -0
- package/RediGrid/package.json +3 -0
- package/RediGrid/public-api.d.ts +4 -0
- package/RediGrid/src/models/interfaces/cell.d.ts +37 -0
- package/RediGrid/src/models/interfaces/data-grid.d.ts +30 -0
- package/RediGrid/src/modules/redi-grid/redi-grid.component.d.ts +92 -0
- package/RediGrid/src/modules/redi-grid.module.d.ts +14 -0
- package/RediTable/index.d.ts +5 -0
- package/RediTable/package.json +3 -0
- package/RediTable/public-api.d.ts +6 -0
- package/RediTable/src/components/filter-data/filter-data.component.d.ts +23 -0
- package/RediTable/src/components/redi-table/redi-table.component.d.ts +139 -0
- package/RediTable/src/models/interfaces/column-definition.d.ts +18 -0
- package/RediTable/src/models/interfaces/data-table.d.ts +24 -0
- package/RediTable/src/models/interfaces/filter-item.d.ts +5 -0
- package/RediTable/src/models/interfaces/row-action.d.ts +24 -0
- package/RediTable/src/models/types/event-table.type.d.ts +5 -0
- package/Security/index.d.ts +5 -0
- package/Security/package.json +3 -0
- package/Security/public-api.d.ts +6 -0
- package/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.d.ts +39 -0
- package/Security/src/modules/security-web-intercept/models/secure-factory.model.d.ts +10 -0
- package/Security/src/modules/security-web-intercept/services/cifrado-basico.service.d.ts +14 -0
- package/Security/src/modules/security-web-intercept/services/cifrado.service.d.ts +21 -0
- package/Security/src/modules/security-web-intercept/services/reflection.service.d.ts +58 -0
- package/Security/src/modules/security.module.d.ts +11 -0
- package/esm2022/Helper/ngx-redi-core-Helper.mjs +5 -0
- package/esm2022/Helper/public-api.mjs +4 -0
- package/esm2022/Helper/src/helpers/bag-data-subject.service.mjs +61 -0
- package/esm2022/Helper/src/helpers/csv.service.mjs +69 -0
- package/esm2022/Helper/src/helpers/data-subject.service.mjs +34 -0
- package/esm2022/Helper/src/models/interfaces/data-subject.interface.mjs +2 -0
- package/esm2022/RediDragDrop/ngx-redi-core-RediDragDrop.mjs +5 -0
- package/esm2022/RediDragDrop/public-api.mjs +5 -0
- package/esm2022/RediDragDrop/src/models/classes/proceso-archivo-csv.mjs +132 -0
- package/esm2022/RediDragDrop/src/models/directives/drag-drop.directive.mjs +95 -0
- package/esm2022/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.mjs +369 -0
- package/esm2022/RediDragDrop/src/modules/redi-drag-drop.module.mjs +34 -0
- package/esm2022/RediGrid/ngx-redi-core-RediGrid.mjs +5 -0
- package/esm2022/RediGrid/public-api.mjs +5 -0
- package/esm2022/RediGrid/src/models/interfaces/cell.mjs +2 -0
- package/esm2022/RediGrid/src/models/interfaces/data-grid.mjs +2 -0
- package/esm2022/RediGrid/src/modules/redi-grid/redi-grid.component.mjs +159 -0
- package/esm2022/RediGrid/src/modules/redi-grid.module.mjs +34 -0
- package/esm2022/RediTable/ngx-redi-core-RediTable.mjs +5 -0
- package/esm2022/RediTable/public-api.mjs +9 -0
- package/esm2022/RediTable/src/components/filter-data/filter-data.component.mjs +84 -0
- package/esm2022/RediTable/src/components/redi-table/redi-table.component.mjs +404 -0
- package/esm2022/RediTable/src/models/interfaces/column-definition.mjs +2 -0
- package/esm2022/RediTable/src/models/interfaces/data-table.mjs +2 -0
- package/esm2022/RediTable/src/models/interfaces/filter-item.mjs +2 -0
- package/esm2022/RediTable/src/models/interfaces/row-action.mjs +2 -0
- package/esm2022/RediTable/src/models/types/event-table.type.mjs +2 -0
- package/esm2022/Security/ngx-redi-core-Security.mjs +5 -0
- package/esm2022/Security/public-api.mjs +7 -0
- package/esm2022/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.mjs +88 -0
- package/esm2022/Security/src/modules/security-web-intercept/models/secure-factory.model.mjs +27 -0
- package/esm2022/Security/src/modules/security-web-intercept/services/cifrado-basico.service.mjs +51 -0
- package/esm2022/Security/src/modules/security-web-intercept/services/cifrado.service.mjs +33 -0
- package/esm2022/Security/src/modules/security-web-intercept/services/reflection.service.mjs +122 -0
- package/esm2022/Security/src/modules/security.module.mjs +23 -0
- package/esm2022/ngx-redi-core.mjs +5 -0
- package/esm2022/public-api.mjs +8 -0
- package/fesm2022/ngx-redi-core-Helper.mjs +166 -0
- package/fesm2022/ngx-redi-core-Helper.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-RediDragDrop.mjs +628 -0
- package/fesm2022/ngx-redi-core-RediDragDrop.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-RediGrid.mjs +196 -0
- package/fesm2022/ngx-redi-core-RediGrid.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-RediTable.mjs +496 -0
- package/fesm2022/ngx-redi-core-RediTable.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-Security.mjs +339 -0
- package/fesm2022/ngx-redi-core-Security.mjs.map +1 -0
- package/fesm2022/ngx-redi-core.mjs +14 -0
- package/fesm2022/ngx-redi-core.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +57 -0
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Componentes */
|
|
2
|
+
export * from './src/components/redi-table/redi-table.component';
|
|
3
|
+
/** Modelos */
|
|
4
|
+
export * from './src/models/interfaces/column-definition';
|
|
5
|
+
export * from './src/models/interfaces/data-table';
|
|
6
|
+
export * from './src/models/interfaces/row-action';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AfterViewInit, ElementRef, EventEmitter } from '@angular/core';
|
|
2
|
+
import { MatListOption } from '@angular/material/list';
|
|
3
|
+
import { FilterItem } from '../../models/interfaces/filter-item';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class FilterDataComponent implements AfterViewInit {
|
|
6
|
+
set filtrosColumnas(value: Array<FilterItem>);
|
|
7
|
+
_refFiltro: Array<FilterItem>;
|
|
8
|
+
filtros: Array<FilterItem>;
|
|
9
|
+
allItemControl: MatListOption;
|
|
10
|
+
filterEnd: EventEmitter<boolean>;
|
|
11
|
+
control: ElementRef;
|
|
12
|
+
constructor();
|
|
13
|
+
ngAfterViewInit(): void;
|
|
14
|
+
selectedChange(): void;
|
|
15
|
+
setAllCheck(value: boolean): void;
|
|
16
|
+
isAllChecked(filters: Array<FilterItem>): boolean;
|
|
17
|
+
changeFilter(): void;
|
|
18
|
+
aplicarFiltros(): void;
|
|
19
|
+
cancelarFiltro(): void;
|
|
20
|
+
loadData(): void;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FilterDataComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilterDataComponent, "filter-data", never, { "filtrosColumnas": { "alias": "filtrosColumnas"; "required": false; }; }, { "filterEnd": "filterEnd"; }, never, never, true, never>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/** Librerías angular */
|
|
2
|
+
import { ElementRef, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
3
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
4
|
+
import { MatSort, SortDirection } from '@angular/material/sort';
|
|
5
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
6
|
+
import { MatMenuTrigger } from '@angular/material/menu';
|
|
7
|
+
/** Modelo */
|
|
8
|
+
import { DataTable } from '../../models/interfaces/data-table';
|
|
9
|
+
import { ColumnDefinition } from '../../models/interfaces/column-definition';
|
|
10
|
+
import { RowAction } from '../../models/interfaces/row-action';
|
|
11
|
+
import { FilterDataComponent } from '../filter-data/filter-data.component';
|
|
12
|
+
import { CsvService } from 'ngx-redi-core/Helper';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
/**
|
|
15
|
+
* Componente que muestra los datos en una tabla
|
|
16
|
+
* @decorators ´@Component´
|
|
17
|
+
*/
|
|
18
|
+
export declare class RediTableComponent<T extends object> implements OnChanges {
|
|
19
|
+
private csv;
|
|
20
|
+
/**
|
|
21
|
+
* Propiedad que indica si se pueden seleccionar las filas
|
|
22
|
+
*/
|
|
23
|
+
seleccionarFilas: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Propiedad que indica si se habilitan los filtros para la tabla
|
|
26
|
+
*/
|
|
27
|
+
filtrarDatos: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Propiedad que indica si se paginan los datos
|
|
30
|
+
*/
|
|
31
|
+
paginar: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Propiedad que indica si se habilita el ordenamiento de datos
|
|
34
|
+
*/
|
|
35
|
+
ordenarDatos: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Datos y configuración de la tabla
|
|
38
|
+
*/
|
|
39
|
+
set dataTable(data: DataTable<T>);
|
|
40
|
+
get dataTable(): DataTable<T>;
|
|
41
|
+
/**
|
|
42
|
+
* Origen interno de datos para la tabla
|
|
43
|
+
*/
|
|
44
|
+
private internalTable;
|
|
45
|
+
dataSource: MatTableDataSource<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Objeto de la vista para el ordenamiento
|
|
48
|
+
*/
|
|
49
|
+
sort: MatSort;
|
|
50
|
+
/**
|
|
51
|
+
* Objeto de la vista para la paginación
|
|
52
|
+
*/
|
|
53
|
+
paginator: MatPaginator;
|
|
54
|
+
/**
|
|
55
|
+
* Contiene las columnas que se mostraran en la tabla
|
|
56
|
+
*/
|
|
57
|
+
columnas: Array<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Contiene los datos de las columnas
|
|
60
|
+
*/
|
|
61
|
+
datosColumna: Array<ColumnDefinition>;
|
|
62
|
+
componenteFiltro: FilterDataComponent;
|
|
63
|
+
inputFiltro: ElementRef;
|
|
64
|
+
/**
|
|
65
|
+
* Crea un nuevo componente Tabla
|
|
66
|
+
*/
|
|
67
|
+
constructor(csv: CsvService);
|
|
68
|
+
closeMenu(header: HTMLTableCellElement): void;
|
|
69
|
+
openMenu(header: HTMLTableCellElement): void;
|
|
70
|
+
/**
|
|
71
|
+
* Eventos que se ejecutan al iniciar
|
|
72
|
+
*/
|
|
73
|
+
private actualizarTabla;
|
|
74
|
+
/**
|
|
75
|
+
* Construye los datos de las columnas para la tabla
|
|
76
|
+
*/
|
|
77
|
+
private construirDatosColumna;
|
|
78
|
+
private generateFilterData;
|
|
79
|
+
/**
|
|
80
|
+
* Activa las columnas que se van a mostrar
|
|
81
|
+
*/
|
|
82
|
+
private mostrarColumnas;
|
|
83
|
+
/**
|
|
84
|
+
* Método que ejecuta los cambios en la selección de filas
|
|
85
|
+
* @param currentValue - Valor actual
|
|
86
|
+
*/
|
|
87
|
+
private changeSelection;
|
|
88
|
+
/**
|
|
89
|
+
* Método que valida los cambios en los datos de entrada
|
|
90
|
+
* @param changer - Cambios realizados en la vista
|
|
91
|
+
*/
|
|
92
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
93
|
+
private actualizarSeleccion;
|
|
94
|
+
private actualizarFiltro;
|
|
95
|
+
private reasignarPaginacion;
|
|
96
|
+
private actualizarPaginacion;
|
|
97
|
+
/**
|
|
98
|
+
* Método que aplica el filtro a los datos de la tabla
|
|
99
|
+
* @param filtro - Evento de filtrado
|
|
100
|
+
*/
|
|
101
|
+
applyFilter(filtro: string): void;
|
|
102
|
+
private limpiarColumnas;
|
|
103
|
+
/**
|
|
104
|
+
* Método que indica si se debe mostrar la columna de acciones
|
|
105
|
+
* @returns True si se debe mostrar las acciones
|
|
106
|
+
*/
|
|
107
|
+
verAcciones(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Método que inicializa el Paginador
|
|
110
|
+
*/
|
|
111
|
+
private inicializarPaginador;
|
|
112
|
+
/**
|
|
113
|
+
* Indica si el ordenamiento esta activo
|
|
114
|
+
*/
|
|
115
|
+
ordenamientoActivo(): boolean;
|
|
116
|
+
asignarOrden(column: ColumnDefinition, orden: SortDirection): void;
|
|
117
|
+
/** Alterna la selección de registros de la tabla */
|
|
118
|
+
alternarSeleccion(): void;
|
|
119
|
+
/**
|
|
120
|
+
* Indica si todo el contenido esta seleccionado
|
|
121
|
+
* @returns True si todo el contenido esta seleccionado
|
|
122
|
+
*/
|
|
123
|
+
todoSeleccionado(): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Obtiene el estado de la etiqueta de seleccionado
|
|
126
|
+
* @param fila - Fila que se validara
|
|
127
|
+
* @returns Estado de selección en modo texto
|
|
128
|
+
*/
|
|
129
|
+
validarEtiqueta(fila?: any): string;
|
|
130
|
+
descargarCsv(archivo: string, soloSeleccionados?: boolean): void;
|
|
131
|
+
onRowSelect(event: T): void;
|
|
132
|
+
onRowClick: EventEmitter<T>;
|
|
133
|
+
protected deshabilitarAccion(action: RowAction<T>, element: any): boolean;
|
|
134
|
+
stopPropagation(clickEvent: MouseEvent): void;
|
|
135
|
+
cambioFiltro(menu: MatMenuTrigger, isChange: boolean, columna: ColumnDefinition): void;
|
|
136
|
+
customParameter(data: T, filter: string): boolean;
|
|
137
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RediTableComponent<any>, never>;
|
|
138
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RediTableComponent<any>, "redi-table", never, { "seleccionarFilas": { "alias": "seleccionarFilas"; "required": false; }; "filtrarDatos": { "alias": "filtrarDatos"; "required": false; }; "paginar": { "alias": "paginar"; "required": false; }; "ordenarDatos": { "alias": "ordenarDatos"; "required": false; }; "dataTable": { "alias": "dataTable"; "required": false; }; }, { "onRowClick": "onRowClick"; }, never, never, true, never>;
|
|
139
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FilterItem } from "./filter-item";
|
|
2
|
+
/**
|
|
3
|
+
* Interface que define una columna
|
|
4
|
+
*/
|
|
5
|
+
export interface ColumnDefinition {
|
|
6
|
+
/**
|
|
7
|
+
Contiene la etiqueta para la columna
|
|
8
|
+
*/
|
|
9
|
+
etiqueta: string;
|
|
10
|
+
/**
|
|
11
|
+
* Contiene el identificador de la columna
|
|
12
|
+
*/
|
|
13
|
+
identificador: string;
|
|
14
|
+
filters: Array<FilterItem>;
|
|
15
|
+
isSort: boolean;
|
|
16
|
+
sortDirection: string;
|
|
17
|
+
haveFilters: boolean;
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ColumnDefinition } from './column-definition';
|
|
2
|
+
import { RowAction } from './row-action';
|
|
3
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
4
|
+
/**
|
|
5
|
+
* Interfaz que define la estructura de configuración y datos para una tabla
|
|
6
|
+
*/
|
|
7
|
+
export interface DataTable<T> {
|
|
8
|
+
/**
|
|
9
|
+
* Contiene el arreglo con los datos
|
|
10
|
+
*/
|
|
11
|
+
dataSource: Array<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Contiene la definición de las columnas que se mostraran en la tabla
|
|
14
|
+
*/
|
|
15
|
+
columnas: Array<ColumnDefinition>;
|
|
16
|
+
/**
|
|
17
|
+
* Contiene las acciones a realizar para los datos de la tabla
|
|
18
|
+
*/
|
|
19
|
+
acciones: Array<RowAction<T>>;
|
|
20
|
+
/**
|
|
21
|
+
* Contiene los elementos seleccionados
|
|
22
|
+
*/
|
|
23
|
+
seleccion: SelectionModel<T>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { eventTable } from '../types/event-table.type';
|
|
3
|
+
/**
|
|
4
|
+
* Interface que define una acción en el row
|
|
5
|
+
*/
|
|
6
|
+
export interface RowAction<T> {
|
|
7
|
+
/**
|
|
8
|
+
* Contiene el icono para la acción
|
|
9
|
+
*/
|
|
10
|
+
icono: string;
|
|
11
|
+
/**
|
|
12
|
+
* Contiene la función o acción a realizar con los datos
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Emitter
|
|
16
|
+
*/
|
|
17
|
+
emiter: EventEmitter<eventTable<T>>;
|
|
18
|
+
deshabilitar?: boolean;
|
|
19
|
+
desabilitarActionPorValores?: DeshabilitaAction;
|
|
20
|
+
}
|
|
21
|
+
export interface DeshabilitaAction {
|
|
22
|
+
columnaRef: string;
|
|
23
|
+
valoresADeshabilitar: Array<string>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './src/modules/security.module';
|
|
2
|
+
export * from './src/modules/security-web-intercept/interceptors/redi-secure.interceptor';
|
|
3
|
+
export * from './src/modules/security-web-intercept/models/secure-factory.model';
|
|
4
|
+
export * from './src/modules/security-web-intercept/services/cifrado.service';
|
|
5
|
+
export * from './src/modules/security-web-intercept/services/reflection.service';
|
|
6
|
+
export * from './src/modules/security-web-intercept/services/cifrado-basico.service';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpContextToken } from '@angular/common/http';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { ReflectionService } from '../services/reflection.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/** Request token para el contexto Http */
|
|
7
|
+
export declare const REQUEST_TOKEN: HttpContextToken<unknown>;
|
|
8
|
+
/** Response token para el contexto Http */
|
|
9
|
+
export declare const RESPONSE_TOKEN: HttpContextToken<unknown>;
|
|
10
|
+
/**
|
|
11
|
+
* Interceptor de seguridad que cifra y descifra información sensible en las peticiones Web
|
|
12
|
+
* @decorator `@Injectable()`
|
|
13
|
+
*/
|
|
14
|
+
export declare class RediSecureInterceptor implements HttpInterceptor {
|
|
15
|
+
private readonly reflectionService;
|
|
16
|
+
constructor(reflectionService: ReflectionService);
|
|
17
|
+
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
|
|
18
|
+
/**
|
|
19
|
+
* Regresa una respuesta HTTP descifrada
|
|
20
|
+
* @param request - Petición web
|
|
21
|
+
* @param response - Respuesta web a descifrar
|
|
22
|
+
* @returns Respuesta http descifrada
|
|
23
|
+
*/
|
|
24
|
+
private descifrarResponse;
|
|
25
|
+
/**
|
|
26
|
+
* Cifra los datos de la petición interceptada y regresa una nueva petición con los datos cifrados
|
|
27
|
+
* @param request - Petición Http
|
|
28
|
+
* @returns - Petición con datos cifrados
|
|
29
|
+
*/
|
|
30
|
+
private cifrarRequest;
|
|
31
|
+
/**
|
|
32
|
+
* Realiza el cifrado de la petición cuando los datos a cifrar se mandan en la URL
|
|
33
|
+
* @param request - Petición HTTP
|
|
34
|
+
* @returns StringQueryParams cifrados en URL
|
|
35
|
+
*/
|
|
36
|
+
private cifrarPeticionUrl;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RediSecureInterceptor, never>;
|
|
38
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RediSecureInterceptor>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Fabrica de decoradores para del modulo de seguridad
|
|
4
|
+
* @param cipher Indica el algoritmo de cifrado
|
|
5
|
+
*/
|
|
6
|
+
export declare function secure(cipher?: string): (target: unknown, propertyKey?: string) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Token para decorador de seguridad
|
|
9
|
+
*/
|
|
10
|
+
export declare const TOKEN_SECURE: string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as CryptoJS from 'crypto-js';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class CifradoBasicoService {
|
|
4
|
+
secretPass: string;
|
|
5
|
+
llave: CryptoJS.lib.WordArray;
|
|
6
|
+
llave_tamanio: number;
|
|
7
|
+
vector: CryptoJS.lib.WordArray;
|
|
8
|
+
vector_tamanio: number;
|
|
9
|
+
iterations: number;
|
|
10
|
+
encrypt_dos(msg: string): string;
|
|
11
|
+
decrypt_dos(transitmessage: string): string;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CifradoBasicoService, never>;
|
|
13
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CifradoBasicoService>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Servicio de cifrado y descifrado de información
|
|
4
|
+
* @decorator `@Injectable()`
|
|
5
|
+
*/
|
|
6
|
+
export declare class CifradoService {
|
|
7
|
+
/**
|
|
8
|
+
* Método que realiza el cifrado de los datos tipo Texto
|
|
9
|
+
* @param data - Texto a cifrar
|
|
10
|
+
* @returns Datos cifrados en modo tex
|
|
11
|
+
*/
|
|
12
|
+
cifrar(data: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Método que descifra el texto
|
|
15
|
+
* @params data - Texto a descifrar
|
|
16
|
+
* @returns Texto descifrado
|
|
17
|
+
*/
|
|
18
|
+
descifrar(data: string): string;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CifradoService, never>;
|
|
20
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CifradoService>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CifradoService } from './cifrado.service';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ReflectionService {
|
|
4
|
+
private readonly cifradoService;
|
|
5
|
+
constructor(cifradoService: CifradoService);
|
|
6
|
+
/**
|
|
7
|
+
* Valida si la propiedad de un objeto es segura
|
|
8
|
+
* @param data - Objeto a validar
|
|
9
|
+
* @param key - Propiedad del objeto a validar
|
|
10
|
+
* @returns True si es una propiedad segura
|
|
11
|
+
*/
|
|
12
|
+
private isValidDecorator;
|
|
13
|
+
/**
|
|
14
|
+
* Valida si la propiedad tiene el decorador de seguridad
|
|
15
|
+
* @param data - Entidad objetivo
|
|
16
|
+
* @param key - Nombre de la propiedad
|
|
17
|
+
*/
|
|
18
|
+
private propertyHasDecorator;
|
|
19
|
+
/**
|
|
20
|
+
* Valida si un objeto es seguro
|
|
21
|
+
* @param data - Objeto a validar
|
|
22
|
+
* @returns True si existe el decorador @Secure
|
|
23
|
+
*/
|
|
24
|
+
private hasDecorator;
|
|
25
|
+
/**
|
|
26
|
+
* Valida si es un objeto y no esta nulo
|
|
27
|
+
* @param object - Objeto a validar
|
|
28
|
+
* @returns True si es un objeto valido
|
|
29
|
+
*/
|
|
30
|
+
private isValidObject;
|
|
31
|
+
/**
|
|
32
|
+
* Cifra los datos especificados
|
|
33
|
+
* @param datos - Datos a cifrar
|
|
34
|
+
* @returns Regresa el objeto con los datos cifrados
|
|
35
|
+
*/
|
|
36
|
+
cifrarDatos(datos: unknown): any;
|
|
37
|
+
/**
|
|
38
|
+
* Descifra los datos a partir de una definición
|
|
39
|
+
* @param datos - Datos a descifrar
|
|
40
|
+
* @param definition - Definición de los datos con los decoradores seguros
|
|
41
|
+
* @returns Datos descifrados
|
|
42
|
+
*/
|
|
43
|
+
descifrarDatos(datos: unknown, definition: unknown): any;
|
|
44
|
+
/**
|
|
45
|
+
* Cifra el texto especificado
|
|
46
|
+
* @param datos - Contiene los datos que se cifraran
|
|
47
|
+
* @returns Datos cifrados
|
|
48
|
+
*/
|
|
49
|
+
private cifrarTexto;
|
|
50
|
+
/**
|
|
51
|
+
* Descifra el texto proporcionado
|
|
52
|
+
* @param datos - Contiene los datos que se descifraran
|
|
53
|
+
* @returns Datos descifrados
|
|
54
|
+
*/
|
|
55
|
+
private decifrarTexto;
|
|
56
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ReflectionService, never>;
|
|
57
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ReflectionService>;
|
|
58
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/common";
|
|
3
|
+
/**
|
|
4
|
+
* Modulo de seguridad
|
|
5
|
+
* @decorators `@NgModule`
|
|
6
|
+
*/
|
|
7
|
+
export declare class SecurityModule {
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SecurityModule, never>;
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SecurityModule, never, [typeof i1.CommonModule], never>;
|
|
10
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SecurityModule>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJlZGktY29yZS1IZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL0hlbHBlci9uZ3gtcmVkaS1jb3JlLUhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './src/helpers/csv.service';
|
|
2
|
+
export * from './src/helpers/data-subject.service';
|
|
3
|
+
export * from './src/helpers/bag-data-subject.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvSGVscGVyL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NyYy9oZWxwZXJzL2Nzdi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvaGVscGVycy9kYXRhLXN1YmplY3Quc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2hlbHBlcnMvYmFnLWRhdGEtc3ViamVjdC5zZXJ2aWNlJzsiXX0=
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { DataSubjectService } from './data-subject.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Servicio para compartir datos entre micro-fronts
|
|
6
|
+
* @decorators `@Injectable`
|
|
7
|
+
*/
|
|
8
|
+
export class BagDataSubjectService {
|
|
9
|
+
/**
|
|
10
|
+
* Crea un nuevo servicio de datos compartido
|
|
11
|
+
*/
|
|
12
|
+
constructor() {
|
|
13
|
+
this.subjects = {};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Obtiene el subjet dada un identificador
|
|
17
|
+
* @param subject Identificador
|
|
18
|
+
* @returns Servicio de datos
|
|
19
|
+
*/
|
|
20
|
+
getSubject(subject) {
|
|
21
|
+
let result = Reflect.get(this.subjects, subject);
|
|
22
|
+
if (!result) {
|
|
23
|
+
result = new DataSubjectService();
|
|
24
|
+
Reflect.defineProperty(this.subjects, subject, { value: result });
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Asigna los datos a un servicio mediante su identificador
|
|
30
|
+
* @param subject Identificador del servicio
|
|
31
|
+
* @param data Datos a emitir
|
|
32
|
+
*/
|
|
33
|
+
setData(subject, data) {
|
|
34
|
+
return this.getSubject(subject).broadcast(data);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Obtiene el ultimo dato del servicio especificando su identificador
|
|
38
|
+
* @param subject Identificador del servicio
|
|
39
|
+
* @returns Dato
|
|
40
|
+
*/
|
|
41
|
+
getData(subject) {
|
|
42
|
+
return this.getSubject(subject).data;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Obtiene el observable especificando el servicio
|
|
46
|
+
* @param subject Identificador del servicio
|
|
47
|
+
* @returns Observable<T>
|
|
48
|
+
*/
|
|
49
|
+
getObservable(subject) {
|
|
50
|
+
return this.getSubject(subject).observer;
|
|
51
|
+
}
|
|
52
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: BagDataSubjectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
53
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: BagDataSubjectService, providedIn: 'root' }); }
|
|
54
|
+
}
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: BagDataSubjectService, decorators: [{
|
|
56
|
+
type: Injectable,
|
|
57
|
+
args: [{
|
|
58
|
+
providedIn: 'root'
|
|
59
|
+
}]
|
|
60
|
+
}], ctorParameters: () => [] });
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFnLWRhdGEtc3ViamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZGktY29yZS9IZWxwZXIvc3JjL2hlbHBlcnMvYmFnLWRhdGEtc3ViamVjdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRzVEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFaEM7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFJLE9BQWU7UUFDbEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixFQUFLLENBQUM7WUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxPQUFPLE1BQStCLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPLENBQUksT0FBZSxFQUFFLElBQU87UUFDeEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFJLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBSSxPQUFlO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUksT0FBZTtRQUNyQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBeUIsQ0FBQztJQUM1RCxDQUFDOzhHQWhEVSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhU3ViamVjdFNlcnZpY2UgfSBmcm9tICcuL2RhdGEtc3ViamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2lvIHBhcmEgY29tcGFydGlyIGRhdG9zIGVudHJlIG1pY3JvLWZyb250c1xyXG4gKiBAZGVjb3JhdG9ycyBgQEluamVjdGFibGVgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYWdEYXRhU3ViamVjdFNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhIHVuIG51ZXZvIHNlcnZpY2lvIGRlIGRhdG9zIGNvbXBhcnRpZG9cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc3ViamVjdHMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgc3ViamV0IGRhZGEgdW4gaWRlbnRpZmljYWRvclxyXG4gICAqIEBwYXJhbSBzdWJqZWN0IElkZW50aWZpY2Fkb3JcclxuICAgKiBAcmV0dXJucyBTZXJ2aWNpbyBkZSBkYXRvc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRTdWJqZWN0PFQ+KHN1YmplY3Q6IHN0cmluZyk6IERhdGFTdWJqZWN0U2VydmljZTxUPiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gUmVmbGVjdC5nZXQodGhpcy5zdWJqZWN0cywgc3ViamVjdCk7XHJcbiAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICByZXN1bHQgPSBuZXcgRGF0YVN1YmplY3RTZXJ2aWNlPFQ+KCk7XHJcbiAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGhpcy5zdWJqZWN0cywgc3ViamVjdCwgeyB2YWx1ZTogcmVzdWx0IH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRhU3ViamVjdFNlcnZpY2U8VD47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc2lnbmEgbG9zIGRhdG9zIGEgdW4gc2VydmljaW8gbWVkaWFudGUgc3UgaWRlbnRpZmljYWRvclxyXG4gICAqIEBwYXJhbSBzdWJqZWN0IElkZW50aWZpY2Fkb3IgZGVsIHNlcnZpY2lvXHJcbiAgICogQHBhcmFtIGRhdGEgRGF0b3MgYSBlbWl0aXJcclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGF0YTxUPihzdWJqZWN0OiBzdHJpbmcsIGRhdGE6IFQpOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmdldFN1YmplY3Q8VD4oc3ViamVjdCkuYnJvYWRjYXN0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCB1bHRpbW8gZGF0byBkZWwgc2VydmljaW8gZXNwZWNpZmljYW5kbyBzdSBpZGVudGlmaWNhZG9yXHJcbiAgICogQHBhcmFtIHN1YmplY3QgSWRlbnRpZmljYWRvciBkZWwgc2VydmljaW9cclxuICAgKiBAcmV0dXJucyBEYXRvXHJcbiAgICovXHJcbiAgcHVibGljIGdldERhdGE8VD4oc3ViamVjdDogc3RyaW5nKTogVCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KHN1YmplY3QpLmRhdGEgYXMgVDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgb2JzZXJ2YWJsZSBlc3BlY2lmaWNhbmRvIGVsIHNlcnZpY2lvXHJcbiAgICogQHBhcmFtIHN1YmplY3QgSWRlbnRpZmljYWRvciBkZWwgc2VydmljaW9cclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFQ+XHJcbiAgICovXHJcbiAgcHVibGljIGdldE9ic2VydmFibGU8VD4oc3ViamVjdDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KHN1YmplY3QpLm9ic2VydmVyIGFzIE9ic2VydmFibGU8VD47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYmpldG8gY29udGVuZWRvciBkZSBsb3Mgc3ViamVjdHNcclxuICAgKi9cclxuICBwcml2YXRlIHN1YmplY3RzOiBvYmplY3Q7XHJcbn0iXX0=
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Servicio que provee métodos para trabajar con datos CSV
|
|
5
|
+
*/
|
|
6
|
+
export class CsvService {
|
|
7
|
+
/**
|
|
8
|
+
* Genera el texto CSV a partir de un archivo
|
|
9
|
+
* @param data- Datos a construir
|
|
10
|
+
* @returns CSV texto
|
|
11
|
+
*/
|
|
12
|
+
generarCsv(data) {
|
|
13
|
+
const datos = data.map(d => {
|
|
14
|
+
return Object.values(d)
|
|
15
|
+
.filter(p => this.tipoSerializable(p))
|
|
16
|
+
.map(v => v.includes(',') ? `"${v}"` : v);
|
|
17
|
+
});
|
|
18
|
+
return datos.map(d => { return Object.values(d).join(','); }).join('\n');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Método que indica si la propiedad es serializable
|
|
22
|
+
* @param propiedad - Propiedad a validar
|
|
23
|
+
* @returns True si es una propiedad serializable
|
|
24
|
+
*/
|
|
25
|
+
tipoSerializable(propiedad) {
|
|
26
|
+
return typeof (propiedad) !== 'object' &&
|
|
27
|
+
typeof (propiedad) !== 'function';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Descarga el CSV a partir de los datos establecidos
|
|
31
|
+
* @param archivo - Nombre del archivo a descargar
|
|
32
|
+
* @param data - Arreglo de datos a descargar
|
|
33
|
+
*/
|
|
34
|
+
descargarCsv(archivo, data) {
|
|
35
|
+
const blob = new Blob([BOM_CSV, this.generarCsv(data)], { type: TYPE_CSV });
|
|
36
|
+
const link = this.generarLink(archivo, blob);
|
|
37
|
+
document.body.appendChild(link);
|
|
38
|
+
link.click();
|
|
39
|
+
document.body.removeChild(link);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Genera el link para el blob y archivo establecidos
|
|
43
|
+
* @param archivo - Nombre del archivo a descargar
|
|
44
|
+
* @param blob - Contenido del blob
|
|
45
|
+
* @returns link
|
|
46
|
+
*/
|
|
47
|
+
generarLink(archivo, blob) {
|
|
48
|
+
const link = document.createElement('a');
|
|
49
|
+
if (link.download !== undefined) {
|
|
50
|
+
link.setAttribute('href', URL.createObjectURL(blob));
|
|
51
|
+
link.setAttribute('download', archivo);
|
|
52
|
+
link.style.visibility = 'hidden';
|
|
53
|
+
}
|
|
54
|
+
return link;
|
|
55
|
+
}
|
|
56
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CsvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CsvService, providedIn: 'root' }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CsvService, decorators: [{
|
|
60
|
+
type: Injectable,
|
|
61
|
+
args: [{
|
|
62
|
+
providedIn: 'root'
|
|
63
|
+
}]
|
|
64
|
+
}] });
|
|
65
|
+
/** Tipo MIME CSV + Encode */
|
|
66
|
+
const TYPE_CSV = 'text/csv;charset=utf-8;';
|
|
67
|
+
/** BOM CSV */
|
|
68
|
+
const BOM_CSV = new Uint8Array([0xEF, 0xBB, 0xBF]);
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL0hlbHBlci9zcmMvaGVscGVycy9jc3Yuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUMzQzs7R0FFRztBQUlILE1BQU0sT0FBTyxVQUFVO0lBQ3JCOzs7O1NBSUs7SUFDRSxVQUFVLENBQWUsSUFBYztRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQUMsU0FBa0I7UUFDekMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUTtZQUNwQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFlLE9BQWUsRUFBRSxJQUFjO1FBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFdBQVcsQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUM3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBc0IsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQXBEVSxVQUFVO2tIQUFWLFVBQVUsY0FGVCxNQUFNOzsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUF5REQsNkJBQTZCO0FBQzdCLE1BQU0sUUFBUSxHQUFHLHlCQUF5QixDQUFDO0FBQzNDLGNBQWM7QUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuLyoqXHJcbiAqIFNlcnZpY2lvIHF1ZSBwcm92ZWUgbcOpdG9kb3MgcGFyYSB0cmFiYWphciBjb24gZGF0b3MgQ1NWXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3ZTZXJ2aWNlIHtcclxuICAvKipcclxuICAgICAqIEdlbmVyYSBlbCB0ZXh0byBDU1YgYSBwYXJ0aXIgZGUgdW4gYXJjaGl2b1xyXG4gICAgICogQHBhcmFtIGRhdGEtIERhdG9zIGEgY29uc3RydWlyXHJcbiAgICAgKiBAcmV0dXJucyBDU1YgdGV4dG9cclxuICAgICAqL1xyXG4gIHB1YmxpYyBnZW5lcmFyQ3N2PFQgZXh0ZW5kcyB7fT4oZGF0YTogQXJyYXk8VD4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0b3MgPSBkYXRhLm1hcChkID0+IHtcclxuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZClcclxuICAgICAgICAuZmlsdGVyKHAgPT4gdGhpcy50aXBvU2VyaWFsaXphYmxlKHApKVxyXG4gICAgICAgIC5tYXAodiA9PiAodiBhcyBzdHJpbmcpLmluY2x1ZGVzKCcsJykgPyBgXCIke3Z9XCJgIDogdik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRvcy5tYXAoZCA9PiB7IHJldHVybiBPYmplY3QudmFsdWVzKGQpLmpvaW4oJywnKTsgfSkuam9pbignXFxuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSBpbmRpY2Egc2kgbGEgcHJvcGllZGFkIGVzIHNlcmlhbGl6YWJsZVxyXG4gICAqIEBwYXJhbSBwcm9waWVkYWQgLSBQcm9waWVkYWQgYSB2YWxpZGFyXHJcbiAgICogQHJldHVybnMgVHJ1ZSBzaSBlcyB1bmEgcHJvcGllZGFkIHNlcmlhbGl6YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdGlwb1NlcmlhbGl6YWJsZShwcm9waWVkYWQ6IHVua25vd24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgKHByb3BpZWRhZCkgIT09ICdvYmplY3QnICYmXHJcbiAgICAgIHR5cGVvZiAocHJvcGllZGFkKSAhPT0gJ2Z1bmN0aW9uJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc2NhcmdhIGVsIENTViBhIHBhcnRpciBkZSBsb3MgZGF0b3MgZXN0YWJsZWNpZG9zXHJcbiAgICogQHBhcmFtIGFyY2hpdm8gLSBOb21icmUgZGVsIGFyY2hpdm8gYSBkZXNjYXJnYXJcclxuICAgKiBAcGFyYW0gZGF0YSAtIEFycmVnbG8gZGUgZGF0b3MgYSBkZXNjYXJnYXJcclxuICAgKi9cclxuICBwdWJsaWMgZGVzY2FyZ2FyQ3N2PFQgZXh0ZW5kcyB7fT4oYXJjaGl2bzogc3RyaW5nLCBkYXRhOiBBcnJheTxUPik6IHZvaWQge1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtCT01fQ1NWLCB0aGlzLmdlbmVyYXJDc3YoZGF0YSldLCB7IHR5cGU6IFRZUEVfQ1NWIH0pO1xyXG4gICAgY29uc3QgbGluayA9IHRoaXMuZ2VuZXJhckxpbmsoYXJjaGl2bywgYmxvYik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYSBlbCBsaW5rIHBhcmEgZWwgYmxvYiB5IGFyY2hpdm8gZXN0YWJsZWNpZG9zXHJcbiAgICogQHBhcmFtIGFyY2hpdm8gLSBOb21icmUgZGVsIGFyY2hpdm8gYSBkZXNjYXJnYXJcclxuICAgKiBAcGFyYW0gYmxvYiAtIENvbnRlbmlkbyBkZWwgYmxvYlxyXG4gICAqIEByZXR1cm5zIGxpbmtcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXJMaW5rKGFyY2hpdm86IHN0cmluZywgYmxvYjogQmxvYik6IEhUTUxBbmNob3JFbGVtZW50IHtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XHJcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGFyY2hpdm8pO1xyXG4gICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgIH1cclxuICAgIHJldHVybiBsaW5rO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8qKiBUaXBvIE1JTUUgQ1NWICsgRW5jb2RlICovXHJcbmNvbnN0IFRZUEVfQ1NWID0gJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JztcclxuLyoqIEJPTSBDU1YgKi9cclxuY29uc3QgQk9NX0NTViA9IG5ldyBVaW50OEFycmF5KFsweEVGLCAweEJCLCAweEJGXSk7XHJcbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Servicio para compartir datos
|
|
6
|
+
* @decorators `@Injectable`
|
|
7
|
+
*/
|
|
8
|
+
export class DataSubjectService {
|
|
9
|
+
/**
|
|
10
|
+
* Crea un nuevo servicio de Datos compartidos
|
|
11
|
+
*/
|
|
12
|
+
constructor() {
|
|
13
|
+
this.data = {};
|
|
14
|
+
this.subject = new Subject();
|
|
15
|
+
this.observer = this.subject.asObservable();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Emite los datos a los subscriptores
|
|
19
|
+
* @param data Datos a emitir
|
|
20
|
+
*/
|
|
21
|
+
broadcast(data) {
|
|
22
|
+
this.data = data;
|
|
23
|
+
this.subject.next(data);
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DataSubjectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DataSubjectService, providedIn: 'root' }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DataSubjectService, decorators: [{
|
|
29
|
+
type: Injectable,
|
|
30
|
+
args: [{
|
|
31
|
+
providedIn: 'root'
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: () => [] });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zdWJqZWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL0hlbHBlci9zcmMvaGVscGVycy9kYXRhLXN1YmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRzNDOzs7R0FHRztBQUlILE1BQU0sT0FBTyxrQkFBa0I7SUFDN0I7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBTyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQU9EOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxJQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7OEdBdEJVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRGF0YVN1YmplY3QgfSBmcm9tICcuLi9tb2RlbHMvaW50ZXJmYWNlcy9kYXRhLXN1YmplY3QuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNpbyBwYXJhIGNvbXBhcnRpciBkYXRvc1xyXG4gKiBAZGVjb3JhdG9ycyBgQEluamVjdGFibGVgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhU3ViamVjdFNlcnZpY2U8VD4gaW1wbGVtZW50cyBEYXRhU3ViamVjdDxUPiB7XHJcbiAgLyoqXHJcbiAgICogQ3JlYSB1biBudWV2byBzZXJ2aWNpbyBkZSBEYXRvcyBjb21wYXJ0aWRvc1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5kYXRhID0ge30gYXMgVDtcclxuICAgIHRoaXMuc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICB0aGlzLm9ic2VydmVyID0gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udGllbmUgZWwgc3ViamVjdCBxdWUgZW1pdGUgZGF0b3NcclxuICAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHN1YmplY3Q6IFN1YmplY3Q8VD47XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRlIGxvcyBkYXRvcyBhIGxvcyBzdWJzY3JpcHRvcmVzXHJcbiAgICogQHBhcmFtIGRhdGEgRGF0b3MgYSBlbWl0aXJcclxuICAgKi9cclxuICBwdWJsaWMgYnJvYWRjYXN0KGRhdGE6IFQpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLnN1YmplY3QubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRpZW5lIGVsIHVsdGltbyBkYXRvIGVtaXRpZG9cclxuICAgKi9cclxuICBwdWJsaWMgZGF0YTogVDtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSAgcXVlIG5vdGlmaWNhIGxvcyBjYW1iaW9zXHJcbiAgICovXHJcbiAgcHVibGljIG9ic2VydmVyOiBPYnNlcnZhYmxlPFQ+O1xyXG59Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zdWJqZWN0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvSGVscGVyL3NyYy9tb2RlbHMvaW50ZXJmYWNlcy9kYXRhLXN1YmplY3QuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN1YmplY3Q8VD4ge1xyXG4gICAgYnJvYWRjYXN0KGRhdGE6VCk6dm9pZDtcclxuICAgIGRhdGE6VDtcclxuICAgIG9ic2VydmVyOk9ic2VydmFibGU8VD47XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJlZGktY29yZS1SZWRpRHJhZ0Ryb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL1JlZGlEcmFnRHJvcC9uZ3gtcmVkaS1jb3JlLVJlZGlEcmFnRHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|