valtech-components 2.0.417 → 2.0.418
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/esm2022/public-api.mjs +4 -2
- package/fesm2022/valtech-components.mjs +4 -2607
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/esm2022/lib/services/firebase/config.mjs +0 -108
- package/esm2022/lib/services/firebase/firebase.service.mjs +0 -285
- package/esm2022/lib/services/firebase/firestore-collection.mjs +0 -266
- package/esm2022/lib/services/firebase/firestore.service.mjs +0 -508
- package/esm2022/lib/services/firebase/index.mjs +0 -46
- package/esm2022/lib/services/firebase/messaging.service.mjs +0 -503
- package/esm2022/lib/services/firebase/storage.service.mjs +0 -421
- package/esm2022/lib/services/firebase/types.mjs +0 -8
- package/esm2022/lib/services/firebase/utils/path-builder.mjs +0 -195
- package/esm2022/lib/services/firebase/utils/query-builder.mjs +0 -302
- package/lib/services/firebase/config.d.ts +0 -49
- package/lib/services/firebase/firebase.service.d.ts +0 -140
- package/lib/services/firebase/firestore-collection.d.ts +0 -195
- package/lib/services/firebase/firestore.service.d.ts +0 -303
- package/lib/services/firebase/index.d.ts +0 -38
- package/lib/services/firebase/messaging.service.d.ts +0 -254
- package/lib/services/firebase/storage.service.d.ts +0 -204
- package/lib/services/firebase/types.d.ts +0 -281
- package/lib/services/firebase/utils/path-builder.d.ts +0 -132
- package/lib/services/firebase/utils/query-builder.d.ts +0 -210
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path Builder
|
|
3
|
-
*
|
|
4
|
-
* Utilidades para construir rutas de Firestore con templates.
|
|
5
|
-
* Soporta rutas multi-nivel y anidadas.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Construye una ruta de Firestore reemplazando placeholders.
|
|
9
|
-
*
|
|
10
|
-
* @param template - Template con placeholders en formato {param}
|
|
11
|
-
* @param params - Objeto con los valores a reemplazar
|
|
12
|
-
* @returns Ruta construida
|
|
13
|
-
* @throws Error si faltan parámetros requeridos
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* // Ruta simple
|
|
18
|
-
* buildPath('users/{userId}', { userId: 'abc123' });
|
|
19
|
-
* // => 'users/abc123'
|
|
20
|
-
*
|
|
21
|
-
* // Ruta anidada
|
|
22
|
-
* buildPath('users/{userId}/documents/{docId}', {
|
|
23
|
-
* userId: 'abc123',
|
|
24
|
-
* docId: 'doc456'
|
|
25
|
-
* });
|
|
26
|
-
* // => 'users/abc123/documents/doc456'
|
|
27
|
-
*
|
|
28
|
-
* // Múltiples niveles
|
|
29
|
-
* buildPath('orgs/{orgId}/teams/{teamId}/members/{memberId}', {
|
|
30
|
-
* orgId: 'org1',
|
|
31
|
-
* teamId: 'team2',
|
|
32
|
-
* memberId: 'member3'
|
|
33
|
-
* });
|
|
34
|
-
* // => 'orgs/org1/teams/team2/members/member3'
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export function buildPath(template, params) {
|
|
38
|
-
let result = template;
|
|
39
|
-
// Encontrar todos los placeholders
|
|
40
|
-
const placeholders = template.match(/\{([^}]+)\}/g);
|
|
41
|
-
if (!placeholders) {
|
|
42
|
-
return template;
|
|
43
|
-
}
|
|
44
|
-
for (const placeholder of placeholders) {
|
|
45
|
-
const key = placeholder.slice(1, -1); // Remover { y }
|
|
46
|
-
const value = params[key];
|
|
47
|
-
if (value === undefined || value === null) {
|
|
48
|
-
throw new Error(`Parámetro requerido '${key}' no proporcionado para la ruta: ${template}`);
|
|
49
|
-
}
|
|
50
|
-
if (typeof value !== 'string' || value.trim() === '') {
|
|
51
|
-
throw new Error(`El parámetro '${key}' debe ser un string no vacío`);
|
|
52
|
-
}
|
|
53
|
-
// Validar que no contenga caracteres inválidos para Firestore
|
|
54
|
-
if (value.includes('/')) {
|
|
55
|
-
throw new Error(`El parámetro '${key}' no puede contener '/'`);
|
|
56
|
-
}
|
|
57
|
-
result = result.replace(placeholder, value);
|
|
58
|
-
}
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Extrae los nombres de los parámetros de un template de ruta.
|
|
63
|
-
*
|
|
64
|
-
* @param template - Template de ruta
|
|
65
|
-
* @returns Array con los nombres de los parámetros
|
|
66
|
-
*
|
|
67
|
-
* @example
|
|
68
|
-
* ```typescript
|
|
69
|
-
* extractParams('users/{userId}/documents/{docId}');
|
|
70
|
-
* // => ['userId', 'docId']
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export function extractPathParams(template) {
|
|
74
|
-
const matches = template.match(/\{([^}]+)\}/g);
|
|
75
|
-
if (!matches)
|
|
76
|
-
return [];
|
|
77
|
-
return matches.map((m) => m.slice(1, -1));
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Valida que una ruta de Firestore sea válida.
|
|
81
|
-
*
|
|
82
|
-
* @param path - Ruta a validar
|
|
83
|
-
* @returns true si la ruta es válida
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```typescript
|
|
87
|
-
* isValidPath('users/abc123'); // true
|
|
88
|
-
* isValidPath('users/abc123/documents'); // true
|
|
89
|
-
* isValidPath('users//documents'); // false (segmento vacío)
|
|
90
|
-
* isValidPath(''); // false (vacío)
|
|
91
|
-
* ```
|
|
92
|
-
*/
|
|
93
|
-
export function isValidPath(path) {
|
|
94
|
-
if (!path || path.trim() === '')
|
|
95
|
-
return false;
|
|
96
|
-
const segments = path.split('/');
|
|
97
|
-
// No puede tener segmentos vacíos
|
|
98
|
-
if (segments.some((s) => s.trim() === ''))
|
|
99
|
-
return false;
|
|
100
|
-
// No puede empezar o terminar con /
|
|
101
|
-
if (path.startsWith('/') || path.endsWith('/'))
|
|
102
|
-
return false;
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Obtiene la ruta de la colección padre de un documento.
|
|
107
|
-
*
|
|
108
|
-
* @param documentPath - Ruta completa del documento
|
|
109
|
-
* @returns Ruta de la colección padre
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* ```typescript
|
|
113
|
-
* getCollectionPath('users/abc123');
|
|
114
|
-
* // => 'users'
|
|
115
|
-
*
|
|
116
|
-
* getCollectionPath('users/abc123/documents/doc456');
|
|
117
|
-
* // => 'users/abc123/documents'
|
|
118
|
-
* ```
|
|
119
|
-
*/
|
|
120
|
-
export function getCollectionPath(documentPath) {
|
|
121
|
-
const segments = documentPath.split('/');
|
|
122
|
-
if (segments.length < 2) {
|
|
123
|
-
throw new Error(`Ruta de documento inválida: ${documentPath}`);
|
|
124
|
-
}
|
|
125
|
-
return segments.slice(0, -1).join('/');
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Obtiene el ID del documento de una ruta.
|
|
129
|
-
*
|
|
130
|
-
* @param documentPath - Ruta completa del documento
|
|
131
|
-
* @returns ID del documento
|
|
132
|
-
*
|
|
133
|
-
* @example
|
|
134
|
-
* ```typescript
|
|
135
|
-
* getDocumentId('users/abc123');
|
|
136
|
-
* // => 'abc123'
|
|
137
|
-
*
|
|
138
|
-
* getDocumentId('users/abc123/documents/doc456');
|
|
139
|
-
* // => 'doc456'
|
|
140
|
-
* ```
|
|
141
|
-
*/
|
|
142
|
-
export function getDocumentId(documentPath) {
|
|
143
|
-
const segments = documentPath.split('/');
|
|
144
|
-
if (segments.length < 2 || segments.length % 2 !== 0) {
|
|
145
|
-
throw new Error(`Ruta de documento inválida: ${documentPath}`);
|
|
146
|
-
}
|
|
147
|
-
return segments[segments.length - 1];
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Verifica si una ruta apunta a un documento (número par de segmentos).
|
|
151
|
-
*
|
|
152
|
-
* @param path - Ruta a verificar
|
|
153
|
-
* @returns true si es una ruta de documento
|
|
154
|
-
*
|
|
155
|
-
* @example
|
|
156
|
-
* ```typescript
|
|
157
|
-
* isDocumentPath('users/abc123'); // true
|
|
158
|
-
* isDocumentPath('users'); // false (colección)
|
|
159
|
-
* isDocumentPath('users/abc123/documents'); // false (colección)
|
|
160
|
-
* ```
|
|
161
|
-
*/
|
|
162
|
-
export function isDocumentPath(path) {
|
|
163
|
-
const segments = path.split('/').filter((s) => s.trim() !== '');
|
|
164
|
-
return segments.length > 0 && segments.length % 2 === 0;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Verifica si una ruta apunta a una colección (número impar de segmentos).
|
|
168
|
-
*
|
|
169
|
-
* @param path - Ruta a verificar
|
|
170
|
-
* @returns true si es una ruta de colección
|
|
171
|
-
*/
|
|
172
|
-
export function isCollectionPath(path) {
|
|
173
|
-
const segments = path.split('/').filter((s) => s.trim() !== '');
|
|
174
|
-
return segments.length > 0 && segments.length % 2 !== 0;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Combina una ruta base con segmentos adicionales.
|
|
178
|
-
*
|
|
179
|
-
* @param basePath - Ruta base
|
|
180
|
-
* @param segments - Segmentos adicionales
|
|
181
|
-
* @returns Ruta combinada
|
|
182
|
-
*
|
|
183
|
-
* @example
|
|
184
|
-
* ```typescript
|
|
185
|
-
* joinPath('users', 'abc123', 'documents');
|
|
186
|
-
* // => 'users/abc123/documents'
|
|
187
|
-
* ```
|
|
188
|
-
*/
|
|
189
|
-
export function joinPath(...segments) {
|
|
190
|
-
return segments
|
|
191
|
-
.filter((s) => s && s.trim() !== '')
|
|
192
|
-
.map((s) => s.replace(/^\/+|\/+$/g, '')) // Remover / al inicio y final
|
|
193
|
-
.join('/');
|
|
194
|
-
}
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS91dGlscy9wYXRoLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBOEI7SUFDeEUsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBRXRCLG1DQUFtQztJQUNuQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXBELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ3RELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcsb0NBQW9DLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixHQUFHLCtCQUErQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxJQUFJLEtBQUssQ0FBQyxRQUFRLENB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QUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFHLFFBQWtCO0lBQzVDLE9BQU8sUUFBUTtTQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtTQUN0RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXRoIEJ1aWxkZXJcbiAqXG4gKiBVdGlsaWRhZGVzIHBhcmEgY29uc3RydWlyIHJ1dGFzIGRlIEZpcmVzdG9yZSBjb24gdGVtcGxhdGVzLlxuICogU29wb3J0YSBydXRhcyBtdWx0aS1uaXZlbCB5IGFuaWRhZGFzLlxuICovXG5cbi8qKlxuICogQ29uc3RydXllIHVuYSBydXRhIGRlIEZpcmVzdG9yZSByZWVtcGxhemFuZG8gcGxhY2Vob2xkZXJzLlxuICpcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRlbXBsYXRlIGNvbiBwbGFjZWhvbGRlcnMgZW4gZm9ybWF0byB7cGFyYW19XG4gKiBAcGFyYW0gcGFyYW1zIC0gT2JqZXRvIGNvbiBsb3MgdmFsb3JlcyBhIHJlZW1wbGF6YXJcbiAqIEByZXR1cm5zIFJ1dGEgY29uc3RydWlkYVxuICogQHRocm93cyBFcnJvciBzaSBmYWx0YW4gcGFyw6FtZXRyb3MgcmVxdWVyaWRvc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBSdXRhIHNpbXBsZVxuICogYnVpbGRQYXRoKCd1c2Vycy97dXNlcklkfScsIHsgdXNlcklkOiAnYWJjMTIzJyB9KTtcbiAqIC8vID0+ICd1c2Vycy9hYmMxMjMnXG4gKlxuICogLy8gUnV0YSBhbmlkYWRhXG4gKiBidWlsZFBhdGgoJ3VzZXJzL3t1c2VySWR9L2RvY3VtZW50cy97ZG9jSWR9Jywge1xuICogICB1c2VySWQ6ICdhYmMxMjMnLFxuICogICBkb2NJZDogJ2RvYzQ1NidcbiAqIH0pO1xuICogLy8gPT4gJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMvZG9jNDU2J1xuICpcbiAqIC8vIE3Dumx0aXBsZXMgbml2ZWxlc1xuICogYnVpbGRQYXRoKCdvcmdzL3tvcmdJZH0vdGVhbXMve3RlYW1JZH0vbWVtYmVycy97bWVtYmVySWR9Jywge1xuICogICBvcmdJZDogJ29yZzEnLFxuICogICB0ZWFtSWQ6ICd0ZWFtMicsXG4gKiAgIG1lbWJlcklkOiAnbWVtYmVyMydcbiAqIH0pO1xuICogLy8gPT4gJ29yZ3Mvb3JnMS90ZWFtcy90ZWFtMi9tZW1iZXJzL21lbWJlcjMnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGF0aCh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gdGVtcGxhdGU7XG5cbiAgLy8gRW5jb250cmFyIHRvZG9zIGxvcyBwbGFjZWhvbGRlcnNcbiAgY29uc3QgcGxhY2Vob2xkZXJzID0gdGVtcGxhdGUubWF0Y2goL1xceyhbXn1dKylcXH0vZyk7XG5cbiAgaWYgKCFwbGFjZWhvbGRlcnMpIHtcbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBmb3IgKGNvbnN0IHBsYWNlaG9sZGVyIG9mIHBsYWNlaG9sZGVycykge1xuICAgIGNvbnN0IGtleSA9IHBsYWNlaG9sZGVyLnNsaWNlKDEsIC0xKTsgLy8gUmVtb3ZlciB7IHkgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXLDoW1ldHJvIHJlcXVlcmlkbyAnJHtrZXl9JyBubyBwcm9wb3JjaW9uYWRvIHBhcmEgbGEgcnV0YTogJHt0ZW1wbGF0ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsIHBhcsOhbWV0cm8gJyR7a2V5fScgZGViZSBzZXIgdW4gc3RyaW5nIG5vIHZhY8Otb2ApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXIgcXVlIG5vIGNvbnRlbmdhIGNhcmFjdGVyZXMgaW52w6FsaWRvcyBwYXJhIEZpcmVzdG9yZVxuICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsIHBhcsOhbWV0cm8gJyR7a2V5fScgbm8gcHVlZGUgY29udGVuZXIgJy8nYCk7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocGxhY2Vob2xkZXIsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0cmFlIGxvcyBub21icmVzIGRlIGxvcyBwYXLDoW1ldHJvcyBkZSB1biB0ZW1wbGF0ZSBkZSBydXRhLlxuICpcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRlbXBsYXRlIGRlIHJ1dGFcbiAqIEByZXR1cm5zIEFycmF5IGNvbiBsb3Mgbm9tYnJlcyBkZSBsb3MgcGFyw6FtZXRyb3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXh0cmFjdFBhcmFtcygndXNlcnMve3VzZXJJZH0vZG9jdW1lbnRzL3tkb2NJZH0nKTtcbiAqIC8vID0+IFsndXNlcklkJywgJ2RvY0lkJ11cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFBhdGhQYXJhbXModGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHRlbXBsYXRlLm1hdGNoKC9cXHsoW159XSspXFx9L2cpO1xuICBpZiAoIW1hdGNoZXMpIHJldHVybiBbXTtcbiAgcmV0dXJuIG1hdGNoZXMubWFwKChtKSA9PiBtLnNsaWNlKDEsIC0xKSk7XG59XG5cbi8qKlxuICogVmFsaWRhIHF1ZSB1bmEgcnV0YSBkZSBGaXJlc3RvcmUgc2VhIHbDoWxpZGEuXG4gKlxuICogQHBhcmFtIHBhdGggLSBSdXRhIGEgdmFsaWRhclxuICogQHJldHVybnMgdHJ1ZSBzaSBsYSBydXRhIGVzIHbDoWxpZGFcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNWYWxpZFBhdGgoJ3VzZXJzL2FiYzEyMycpOyAgICAgICAgICAgLy8gdHJ1ZVxuICogaXNWYWxpZFBhdGgoJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMnKTsgLy8gdHJ1ZVxuICogaXNWYWxpZFBhdGgoJ3VzZXJzLy9kb2N1bWVudHMnKTsgICAgICAgLy8gZmFsc2UgKHNlZ21lbnRvIHZhY8OtbylcbiAqIGlzVmFsaWRQYXRoKCcnKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbHNlICh2YWPDrW8pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIXBhdGggfHwgcGF0aC50cmltKCkgPT09ICcnKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJyk7XG5cbiAgLy8gTm8gcHVlZGUgdGVuZXIgc2VnbWVudG9zIHZhY8Otb3NcbiAgaWYgKHNlZ21lbnRzLnNvbWUoKHMpID0+IHMudHJpbSgpID09PSAnJykpIHJldHVybiBmYWxzZTtcblxuICAvLyBObyBwdWVkZSBlbXBlemFyIG8gdGVybWluYXIgY29uIC9cbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpIHx8IHBhdGguZW5kc1dpdGgoJy8nKSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIE9idGllbmUgbGEgcnV0YSBkZSBsYSBjb2xlY2Npw7NuIHBhZHJlIGRlIHVuIGRvY3VtZW50by5cbiAqXG4gKiBAcGFyYW0gZG9jdW1lbnRQYXRoIC0gUnV0YSBjb21wbGV0YSBkZWwgZG9jdW1lbnRvXG4gKiBAcmV0dXJucyBSdXRhIGRlIGxhIGNvbGVjY2nDs24gcGFkcmVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZ2V0Q29sbGVjdGlvblBhdGgoJ3VzZXJzL2FiYzEyMycpO1xuICogLy8gPT4gJ3VzZXJzJ1xuICpcbiAqIGdldENvbGxlY3Rpb25QYXRoKCd1c2Vycy9hYmMxMjMvZG9jdW1lbnRzL2RvYzQ1NicpO1xuICogLy8gPT4gJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbGxlY3Rpb25QYXRoKGRvY3VtZW50UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBkb2N1bWVudFBhdGguc3BsaXQoJy8nKTtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1dGEgZGUgZG9jdW1lbnRvIGludsOhbGlkYTogJHtkb2N1bWVudFBhdGh9YCk7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogT2J0aWVuZSBlbCBJRCBkZWwgZG9jdW1lbnRvIGRlIHVuYSBydXRhLlxuICpcbiAqIEBwYXJhbSBkb2N1bWVudFBhdGggLSBSdXRhIGNvbXBsZXRhIGRlbCBkb2N1bWVudG9cbiAqIEByZXR1cm5zIElEIGRlbCBkb2N1bWVudG9cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZ2V0RG9jdW1lbnRJZCgndXNlcnMvYWJjMTIzJyk7XG4gKiAvLyA9PiAnYWJjMTIzJ1xuICpcbiAqIGdldERvY3VtZW50SWQoJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMvZG9jNDU2Jyk7XG4gKiAvLyA9PiAnZG9jNDU2J1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREb2N1bWVudElkKGRvY3VtZW50UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBkb2N1bWVudFBhdGguc3BsaXQoJy8nKTtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIgfHwgc2VnbWVudHMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUnV0YSBkZSBkb2N1bWVudG8gaW52w6FsaWRhOiAke2RvY3VtZW50UGF0aH1gKTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG59XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgdW5hIHJ1dGEgYXB1bnRhIGEgdW4gZG9jdW1lbnRvIChuw7ptZXJvIHBhciBkZSBzZWdtZW50b3MpLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gUnV0YSBhIHZlcmlmaWNhclxuICogQHJldHVybnMgdHJ1ZSBzaSBlcyB1bmEgcnV0YSBkZSBkb2N1bWVudG9cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNEb2N1bWVudFBhdGgoJ3VzZXJzL2FiYzEyMycpOyAgICAgICAgICAgLy8gdHJ1ZVxuICogaXNEb2N1bWVudFBhdGgoJ3VzZXJzJyk7ICAgICAgICAgICAgICAgICAgLy8gZmFsc2UgKGNvbGVjY2nDs24pXG4gKiBpc0RvY3VtZW50UGF0aCgndXNlcnMvYWJjMTIzL2RvY3VtZW50cycpOyAvLyBmYWxzZSAoY29sZWNjacOzbilcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb2N1bWVudFBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcy50cmltKCkgIT09ICcnKTtcbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDAgJiYgc2VnbWVudHMubGVuZ3RoICUgMiA9PT0gMDtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSB1bmEgcnV0YSBhcHVudGEgYSB1bmEgY29sZWNjacOzbiAobsO6bWVybyBpbXBhciBkZSBzZWdtZW50b3MpLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gUnV0YSBhIHZlcmlmaWNhclxuICogQHJldHVybnMgdHJ1ZSBzaSBlcyB1bmEgcnV0YSBkZSBjb2xlY2Npw7NuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25QYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMudHJpbSgpICE9PSAnJyk7XG4gIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwICYmIHNlZ21lbnRzLmxlbmd0aCAlIDIgIT09IDA7XG59XG5cbi8qKlxuICogQ29tYmluYSB1bmEgcnV0YSBiYXNlIGNvbiBzZWdtZW50b3MgYWRpY2lvbmFsZXMuXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIC0gUnV0YSBiYXNlXG4gKiBAcGFyYW0gc2VnbWVudHMgLSBTZWdtZW50b3MgYWRpY2lvbmFsZXNcbiAqIEByZXR1cm5zIFJ1dGEgY29tYmluYWRhXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGpvaW5QYXRoKCd1c2VycycsICdhYmMxMjMnLCAnZG9jdW1lbnRzJyk7XG4gKiAvLyA9PiAndXNlcnMvYWJjMTIzL2RvY3VtZW50cydcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pblBhdGgoLi4uc2VnbWVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNlZ21lbnRzXG4gICAgLmZpbHRlcigocykgPT4gcyAmJiBzLnRyaW0oKSAhPT0gJycpXG4gICAgLm1hcCgocykgPT4gcy5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykpIC8vIFJlbW92ZXIgLyBhbCBpbmljaW8geSBmaW5hbFxuICAgIC5qb2luKCcvJyk7XG59XG4iXX0=
|
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Query Builder
|
|
3
|
-
*
|
|
4
|
-
* Builder fluido para construir queries de Firestore de manera legible.
|
|
5
|
-
* Alternativa más expresiva a pasar objetos QueryOptions directamente.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Builder fluido para queries de Firestore.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* // Construir query con builder
|
|
13
|
-
* const options = new QueryBuilder()
|
|
14
|
-
* .where('status', '==', 'active')
|
|
15
|
-
* .where('age', '>=', 18)
|
|
16
|
-
* .orderBy('createdAt', 'desc')
|
|
17
|
-
* .limit(10)
|
|
18
|
-
* .build();
|
|
19
|
-
*
|
|
20
|
-
* // Usar con FirestoreService
|
|
21
|
-
* const users = await firestoreService.getDocs<User>('users', options);
|
|
22
|
-
*
|
|
23
|
-
* // O con método estático
|
|
24
|
-
* const options2 = QueryBuilder.create()
|
|
25
|
-
* .where('category', '==', 'electronics')
|
|
26
|
-
* .orderBy('price', 'asc')
|
|
27
|
-
* .build();
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export class QueryBuilder {
|
|
31
|
-
constructor() {
|
|
32
|
-
this.whereConditions = [];
|
|
33
|
-
this.orderByConditions = [];
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Crea una nueva instancia del builder (método estático alternativo).
|
|
37
|
-
*/
|
|
38
|
-
static create() {
|
|
39
|
-
return new QueryBuilder();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Agrega una condición where.
|
|
43
|
-
*
|
|
44
|
-
* @param field - Campo a filtrar
|
|
45
|
-
* @param operator - Operador de comparación
|
|
46
|
-
* @param value - Valor a comparar
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* builder.where('status', '==', 'active')
|
|
51
|
-
* builder.where('price', '>=', 100)
|
|
52
|
-
* builder.where('tags', 'array-contains', 'featured')
|
|
53
|
-
* builder.where('category', 'in', ['electronics', 'books'])
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
where(field, operator, value) {
|
|
57
|
-
this.whereConditions.push({ field, operator, value });
|
|
58
|
-
return this;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Shortcut para where con operador '=='.
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* builder.whereEquals('status', 'active')
|
|
66
|
-
* // equivalente a: builder.where('status', '==', 'active')
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
whereEquals(field, value) {
|
|
70
|
-
return this.where(field, '==', value);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Shortcut para where con operador '!='.
|
|
74
|
-
*/
|
|
75
|
-
whereNotEquals(field, value) {
|
|
76
|
-
return this.where(field, '!=', value);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Shortcut para where con operador '>'.
|
|
80
|
-
*/
|
|
81
|
-
whereGreaterThan(field, value) {
|
|
82
|
-
return this.where(field, '>', value);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Shortcut para where con operador '>='.
|
|
86
|
-
*/
|
|
87
|
-
whereGreaterOrEqual(field, value) {
|
|
88
|
-
return this.where(field, '>=', value);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Shortcut para where con operador '<'.
|
|
92
|
-
*/
|
|
93
|
-
whereLessThan(field, value) {
|
|
94
|
-
return this.where(field, '<', value);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Shortcut para where con operador '<='.
|
|
98
|
-
*/
|
|
99
|
-
whereLessOrEqual(field, value) {
|
|
100
|
-
return this.where(field, '<=', value);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Shortcut para where con operador 'array-contains'.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* builder.whereArrayContains('tags', 'featured')
|
|
108
|
-
* ```
|
|
109
|
-
*/
|
|
110
|
-
whereArrayContains(field, value) {
|
|
111
|
-
return this.where(field, 'array-contains', value);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Shortcut para where con operador 'array-contains-any'.
|
|
115
|
-
*
|
|
116
|
-
* @example
|
|
117
|
-
* ```typescript
|
|
118
|
-
* builder.whereArrayContainsAny('tags', ['featured', 'new'])
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
|
-
whereArrayContainsAny(field, values) {
|
|
122
|
-
return this.where(field, 'array-contains-any', values);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Shortcut para where con operador 'in'.
|
|
126
|
-
*
|
|
127
|
-
* @example
|
|
128
|
-
* ```typescript
|
|
129
|
-
* builder.whereIn('status', ['active', 'pending'])
|
|
130
|
-
* ```
|
|
131
|
-
*/
|
|
132
|
-
whereIn(field, values) {
|
|
133
|
-
return this.where(field, 'in', values);
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Shortcut para where con operador 'not-in'.
|
|
137
|
-
*/
|
|
138
|
-
whereNotIn(field, values) {
|
|
139
|
-
return this.where(field, 'not-in', values);
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Agrega ordenamiento por un campo.
|
|
143
|
-
*
|
|
144
|
-
* @param field - Campo por el cual ordenar
|
|
145
|
-
* @param direction - Dirección: 'asc' o 'desc' (default: 'asc')
|
|
146
|
-
*
|
|
147
|
-
* @example
|
|
148
|
-
* ```typescript
|
|
149
|
-
* builder.orderBy('createdAt', 'desc')
|
|
150
|
-
* builder.orderBy('name') // asc por defecto
|
|
151
|
-
* ```
|
|
152
|
-
*/
|
|
153
|
-
orderBy(field, direction = 'asc') {
|
|
154
|
-
this.orderByConditions.push({ field, direction });
|
|
155
|
-
return this;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Shortcut para orderBy descendente.
|
|
159
|
-
*/
|
|
160
|
-
orderByDesc(field) {
|
|
161
|
-
return this.orderBy(field, 'desc');
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Shortcut para orderBy ascendente.
|
|
165
|
-
*/
|
|
166
|
-
orderByAsc(field) {
|
|
167
|
-
return this.orderBy(field, 'asc');
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Limita el número de resultados.
|
|
171
|
-
*
|
|
172
|
-
* @param count - Número máximo de documentos
|
|
173
|
-
*
|
|
174
|
-
* @example
|
|
175
|
-
* ```typescript
|
|
176
|
-
* builder.limit(10)
|
|
177
|
-
* ```
|
|
178
|
-
*/
|
|
179
|
-
limit(count) {
|
|
180
|
-
if (count <= 0) {
|
|
181
|
-
throw new Error('El límite debe ser mayor a 0');
|
|
182
|
-
}
|
|
183
|
-
this.limitValue = count;
|
|
184
|
-
return this;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Cursor para paginación: empezar después de un documento.
|
|
188
|
-
*
|
|
189
|
-
* @param cursor - Documento o snapshot desde donde continuar
|
|
190
|
-
*
|
|
191
|
-
* @example
|
|
192
|
-
* ```typescript
|
|
193
|
-
* // Primera página
|
|
194
|
-
* const page1 = await service.getPaginated('users', builder.limit(10).build());
|
|
195
|
-
*
|
|
196
|
-
* // Siguiente página
|
|
197
|
-
* const page2 = await service.getPaginated('users',
|
|
198
|
-
* builder.startAfter(page1.lastDoc).limit(10).build()
|
|
199
|
-
* );
|
|
200
|
-
* ```
|
|
201
|
-
*/
|
|
202
|
-
startAfter(cursor) {
|
|
203
|
-
this.startAfterValue = cursor;
|
|
204
|
-
return this;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Cursor para paginación: empezar en un documento.
|
|
208
|
-
*/
|
|
209
|
-
startAt(cursor) {
|
|
210
|
-
this.startAtValue = cursor;
|
|
211
|
-
return this;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Cursor para paginación: terminar antes de un documento.
|
|
215
|
-
*/
|
|
216
|
-
endBefore(cursor) {
|
|
217
|
-
this.endBeforeValue = cursor;
|
|
218
|
-
return this;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Cursor para paginación: terminar en un documento.
|
|
222
|
-
*/
|
|
223
|
-
endAt(cursor) {
|
|
224
|
-
this.endAtValue = cursor;
|
|
225
|
-
return this;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Construye el objeto QueryOptions.
|
|
229
|
-
*
|
|
230
|
-
* @returns QueryOptions para usar con FirestoreService
|
|
231
|
-
*/
|
|
232
|
-
build() {
|
|
233
|
-
const options = {};
|
|
234
|
-
if (this.whereConditions.length > 0) {
|
|
235
|
-
options.where = [...this.whereConditions];
|
|
236
|
-
}
|
|
237
|
-
if (this.orderByConditions.length > 0) {
|
|
238
|
-
options.orderBy = [...this.orderByConditions];
|
|
239
|
-
}
|
|
240
|
-
if (this.limitValue !== undefined) {
|
|
241
|
-
options.limit = this.limitValue;
|
|
242
|
-
}
|
|
243
|
-
if (this.startAfterValue !== undefined) {
|
|
244
|
-
options.startAfter = this.startAfterValue;
|
|
245
|
-
}
|
|
246
|
-
if (this.startAtValue !== undefined) {
|
|
247
|
-
options.startAt = this.startAtValue;
|
|
248
|
-
}
|
|
249
|
-
if (this.endBeforeValue !== undefined) {
|
|
250
|
-
options.endBefore = this.endBeforeValue;
|
|
251
|
-
}
|
|
252
|
-
if (this.endAtValue !== undefined) {
|
|
253
|
-
options.endAt = this.endAtValue;
|
|
254
|
-
}
|
|
255
|
-
return options;
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Resetea el builder para reutilización.
|
|
259
|
-
*/
|
|
260
|
-
reset() {
|
|
261
|
-
this.whereConditions = [];
|
|
262
|
-
this.orderByConditions = [];
|
|
263
|
-
this.limitValue = undefined;
|
|
264
|
-
this.startAfterValue = undefined;
|
|
265
|
-
this.startAtValue = undefined;
|
|
266
|
-
this.endBeforeValue = undefined;
|
|
267
|
-
this.endAtValue = undefined;
|
|
268
|
-
return this;
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Clona el builder actual.
|
|
272
|
-
*/
|
|
273
|
-
clone() {
|
|
274
|
-
const cloned = new QueryBuilder();
|
|
275
|
-
cloned.whereConditions = [...this.whereConditions];
|
|
276
|
-
cloned.orderByConditions = [...this.orderByConditions];
|
|
277
|
-
cloned.limitValue = this.limitValue;
|
|
278
|
-
cloned.startAfterValue = this.startAfterValue;
|
|
279
|
-
cloned.startAtValue = this.startAtValue;
|
|
280
|
-
cloned.endBeforeValue = this.endBeforeValue;
|
|
281
|
-
cloned.endAtValue = this.endAtValue;
|
|
282
|
-
return cloned;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Función helper para crear un QueryBuilder.
|
|
287
|
-
*
|
|
288
|
-
* @example
|
|
289
|
-
* ```typescript
|
|
290
|
-
* import { query } from 'valtech-components';
|
|
291
|
-
*
|
|
292
|
-
* const options = query()
|
|
293
|
-
* .where('status', '==', 'active')
|
|
294
|
-
* .orderBy('createdAt', 'desc')
|
|
295
|
-
* .limit(10)
|
|
296
|
-
* .build();
|
|
297
|
-
* ```
|
|
298
|
-
*/
|
|
299
|
-
export function query() {
|
|
300
|
-
return new QueryBuilder();
|
|
301
|
-
}
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2UvdXRpbHMvcXVlcnktYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFDVSxvQkFBZSxHQUFrQixFQUFFLENBQUM7UUFDcEMsc0JBQWlCLEdBQW9CLEVBQUUsQ0FBQztJQThSbEQsQ0FBQztJQXZSQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxNQUFNO1FBQ1gsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILEtBQUssQ0FBQyxLQUFhLEVBQUUsUUFBdUIsRUFBRSxLQUFjO1FBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsV0FBVyxDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBYztRQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsS0FBYztRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FB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Q0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxLQUFLO0lBQ25CLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBRdWVyeSBCdWlsZGVyXG4gKlxuICogQnVpbGRlciBmbHVpZG8gcGFyYSBjb25zdHJ1aXIgcXVlcmllcyBkZSBGaXJlc3RvcmUgZGUgbWFuZXJhIGxlZ2libGUuXG4gKiBBbHRlcm5hdGl2YSBtw6FzIGV4cHJlc2l2YSBhIHBhc2FyIG9iamV0b3MgUXVlcnlPcHRpb25zIGRpcmVjdGFtZW50ZS5cbiAqL1xuXG5pbXBvcnQgeyBPcmRlckJ5Q2xhdXNlLCBPcmRlckRpcmVjdGlvbiwgUXVlcnlPcHRpb25zLCBXaGVyZUNsYXVzZSwgV2hlcmVPcGVyYXRvciB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBCdWlsZGVyIGZsdWlkbyBwYXJhIHF1ZXJpZXMgZGUgRmlyZXN0b3JlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDb25zdHJ1aXIgcXVlcnkgY29uIGJ1aWxkZXJcbiAqIGNvbnN0IG9wdGlvbnMgPSBuZXcgUXVlcnlCdWlsZGVyKClcbiAqICAgLndoZXJlKCdzdGF0dXMnLCAnPT0nLCAnYWN0aXZlJylcbiAqICAgLndoZXJlKCdhZ2UnLCAnPj0nLCAxOClcbiAqICAgLm9yZGVyQnkoJ2NyZWF0ZWRBdCcsICdkZXNjJylcbiAqICAgLmxpbWl0KDEwKVxuICogICAuYnVpbGQoKTtcbiAqXG4gKiAvLyBVc2FyIGNvbiBGaXJlc3RvcmVTZXJ2aWNlXG4gKiBjb25zdCB1c2VycyA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0RG9jczxVc2VyPigndXNlcnMnLCBvcHRpb25zKTtcbiAqXG4gKiAvLyBPIGNvbiBtw6l0b2RvIGVzdMOhdGljb1xuICogY29uc3Qgb3B0aW9uczIgPSBRdWVyeUJ1aWxkZXIuY3JlYXRlKClcbiAqICAgLndoZXJlKCdjYXRlZ29yeScsICc9PScsICdlbGVjdHJvbmljcycpXG4gKiAgIC5vcmRlckJ5KCdwcmljZScsICdhc2MnKVxuICogICAuYnVpbGQoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUXVlcnlCdWlsZGVyIHtcbiAgcHJpdmF0ZSB3aGVyZUNvbmRpdGlvbnM6IFdoZXJlQ2xhdXNlW10gPSBbXTtcbiAgcHJpdmF0ZSBvcmRlckJ5Q29uZGl0aW9uczogT3JkZXJCeUNsYXVzZVtdID0gW107XG4gIHByaXZhdGUgbGltaXRWYWx1ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBzdGFydEFmdGVyVmFsdWU/OiB1bmtub3duO1xuICBwcml2YXRlIHN0YXJ0QXRWYWx1ZT86IHVua25vd247XG4gIHByaXZhdGUgZW5kQmVmb3JlVmFsdWU/OiB1bmtub3duO1xuICBwcml2YXRlIGVuZEF0VmFsdWU/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBudWV2YSBpbnN0YW5jaWEgZGVsIGJ1aWxkZXIgKG3DqXRvZG8gZXN0w6F0aWNvIGFsdGVybmF0aXZvKS5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUoKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFF1ZXJ5QnVpbGRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFncmVnYSB1bmEgY29uZGljacOzbiB3aGVyZS5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gQ2FtcG8gYSBmaWx0cmFyXG4gICAqIEBwYXJhbSBvcGVyYXRvciAtIE9wZXJhZG9yIGRlIGNvbXBhcmFjacOzblxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWxvciBhIGNvbXBhcmFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci53aGVyZSgnc3RhdHVzJywgJz09JywgJ2FjdGl2ZScpXG4gICAqIGJ1aWxkZXIud2hlcmUoJ3ByaWNlJywgJz49JywgMTAwKVxuICAgKiBidWlsZGVyLndoZXJlKCd0YWdzJywgJ2FycmF5LWNvbnRhaW5zJywgJ2ZlYXR1cmVkJylcbiAgICogYnVpbGRlci53aGVyZSgnY2F0ZWdvcnknLCAnaW4nLCBbJ2VsZWN0cm9uaWNzJywgJ2Jvb2tzJ10pXG4gICAqIGBgYFxuICAgKi9cbiAgd2hlcmUoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsIHZhbHVlOiB1bmtub3duKTogUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLndoZXJlQ29uZGl0aW9ucy5wdXNoKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnPT0nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGJ1aWxkZXIud2hlcmVFcXVhbHMoJ3N0YXR1cycsICdhY3RpdmUnKVxuICAgKiAvLyBlcXVpdmFsZW50ZSBhOiBidWlsZGVyLndoZXJlKCdzdGF0dXMnLCAnPT0nLCAnYWN0aXZlJylcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZUVxdWFscyhmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICc9PScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnIT0nLlxuICAgKi9cbiAgd2hlcmVOb3RFcXVhbHMoZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndoZXJlKGZpZWxkLCAnIT0nLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSB3aGVyZSBjb24gb3BlcmFkb3IgJz4nLlxuICAgKi9cbiAgd2hlcmVHcmVhdGVyVGhhbihmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICc+JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHBhcmEgd2hlcmUgY29uIG9wZXJhZG9yICc+PScuXG4gICAqL1xuICB3aGVyZUdyZWF0ZXJPckVxdWFsKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy53aGVyZShmaWVsZCwgJz49JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHBhcmEgd2hlcmUgY29uIG9wZXJhZG9yICc8Jy5cbiAgICovXG4gIHdoZXJlTGVzc1RoYW4oZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndoZXJlKGZpZWxkLCAnPCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnPD0nLlxuICAgKi9cbiAgd2hlcmVMZXNzT3JFcXVhbChmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICc8PScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnYXJyYXktY29udGFpbnMnLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGJ1aWxkZXIud2hlcmVBcnJheUNvbnRhaW5zKCd0YWdzJywgJ2ZlYXR1cmVkJylcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZUFycmF5Q29udGFpbnMoZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndoZXJlKGZpZWxkLCAnYXJyYXktY29udGFpbnMnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSB3aGVyZSBjb24gb3BlcmFkb3IgJ2FycmF5LWNvbnRhaW5zLWFueScuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci53aGVyZUFycmF5Q29udGFpbnNBbnkoJ3RhZ3MnLCBbJ2ZlYXR1cmVkJywgJ25ldyddKVxuICAgKiBgYGBcbiAgICovXG4gIHdoZXJlQXJyYXlDb250YWluc0FueShmaWVsZDogc3RyaW5nLCB2YWx1ZXM6IHVua25vd25bXSk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICdhcnJheS1jb250YWlucy1hbnknLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHBhcmEgd2hlcmUgY29uIG9wZXJhZG9yICdpbicuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci53aGVyZUluKCdzdGF0dXMnLCBbJ2FjdGl2ZScsICdwZW5kaW5nJ10pXG4gICAqIGBgYFxuICAgKi9cbiAgd2hlcmVJbihmaWVsZDogc3RyaW5nLCB2YWx1ZXM6IHVua25vd25bXSk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICdpbicsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSB3aGVyZSBjb24gb3BlcmFkb3IgJ25vdC1pbicuXG4gICAqL1xuICB3aGVyZU5vdEluKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogdW5rbm93bltdKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy53aGVyZShmaWVsZCwgJ25vdC1pbicsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIG9yZGVuYW1pZW50byBwb3IgdW4gY2FtcG8uXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIENhbXBvIHBvciBlbCBjdWFsIG9yZGVuYXJcbiAgICogQHBhcmFtIGRpcmVjdGlvbiAtIERpcmVjY2nDs246ICdhc2MnIG8gJ2Rlc2MnIChkZWZhdWx0OiAnYXNjJylcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBidWlsZGVyLm9yZGVyQnkoJ2NyZWF0ZWRBdCcsICdkZXNjJylcbiAgICogYnVpbGRlci5vcmRlckJ5KCduYW1lJykgLy8gYXNjIHBvciBkZWZlY3RvXG4gICAqIGBgYFxuICAgKi9cbiAgb3JkZXJCeShmaWVsZDogc3RyaW5nLCBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uID0gJ2FzYycpOiBRdWVyeUJ1aWxkZXIge1xuICAgIHRoaXMub3JkZXJCeUNvbmRpdGlvbnMucHVzaCh7IGZpZWxkLCBkaXJlY3Rpb24gfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSBvcmRlckJ5IGRlc2NlbmRlbnRlLlxuICAgKi9cbiAgb3JkZXJCeURlc2MoZmllbGQ6IHN0cmluZyk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJCeShmaWVsZCwgJ2Rlc2MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIG9yZGVyQnkgYXNjZW5kZW50ZS5cbiAgICovXG4gIG9yZGVyQnlBc2MoZmllbGQ6IHN0cmluZyk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJCeShmaWVsZCwgJ2FzYycpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbWl0YSBlbCBuw7ptZXJvIGRlIHJlc3VsdGFkb3MuXG4gICAqXG4gICAqIEBwYXJhbSBjb3VudCAtIE7Dum1lcm8gbcOheGltbyBkZSBkb2N1bWVudG9zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci5saW1pdCgxMClcbiAgICogYGBgXG4gICAqL1xuICBsaW1pdChjb3VudDogbnVtYmVyKTogUXVlcnlCdWlsZGVyIHtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbCBsw61taXRlIGRlYmUgc2VyIG1heW9yIGEgMCcpO1xuICAgIH1cbiAgICB0aGlzLmxpbWl0VmFsdWUgPSBjb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXJzb3IgcGFyYSBwYWdpbmFjacOzbjogZW1wZXphciBkZXNwdcOpcyBkZSB1biBkb2N1bWVudG8uXG4gICAqXG4gICAqIEBwYXJhbSBjdXJzb3IgLSBEb2N1bWVudG8gbyBzbmFwc2hvdCBkZXNkZSBkb25kZSBjb250aW51YXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQcmltZXJhIHDDoWdpbmFcbiAgICogY29uc3QgcGFnZTEgPSBhd2FpdCBzZXJ2aWNlLmdldFBhZ2luYXRlZCgndXNlcnMnLCBidWlsZGVyLmxpbWl0KDEwKS5idWlsZCgpKTtcbiAgICpcbiAgICogLy8gU2lndWllbnRlIHDDoWdpbmFcbiAgICogY29uc3QgcGFnZTIgPSBhd2FpdCBzZXJ2aWNlLmdldFBhZ2luYXRlZCgndXNlcnMnLFxuICAgKiAgIGJ1aWxkZXIuc3RhcnRBZnRlcihwYWdlMS5sYXN0RG9jKS5saW1pdCgxMCkuYnVpbGQoKVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIHN0YXJ0QWZ0ZXIoY3Vyc29yOiB1bmtub3duKTogUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLnN0YXJ0QWZ0ZXJWYWx1ZSA9IGN1cnNvcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXJzb3IgcGFyYSBwYWdpbmFjacOzbjogZW1wZXphciBlbiB1biBkb2N1bWVudG8uXG4gICAqL1xuICBzdGFydEF0KGN1cnNvcjogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgdGhpcy5zdGFydEF0VmFsdWUgPSBjdXJzb3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3Vyc29yIHBhcmEgcGFnaW5hY2nDs246IHRlcm1pbmFyIGFudGVzIGRlIHVuIGRvY3VtZW50by5cbiAgICovXG4gIGVuZEJlZm9yZShjdXJzb3I6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHRoaXMuZW5kQmVmb3JlVmFsdWUgPSBjdXJzb3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3Vyc29yIHBhcmEgcGFnaW5hY2nDs246IHRlcm1pbmFyIGVuIHVuIGRvY3VtZW50by5cbiAgICovXG4gIGVuZEF0KGN1cnNvcjogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgdGhpcy5lbmRBdFZhbHVlID0gY3Vyc29yO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBlbCBvYmpldG8gUXVlcnlPcHRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBRdWVyeU9wdGlvbnMgcGFyYSB1c2FyIGNvbiBGaXJlc3RvcmVTZXJ2aWNlXG4gICAqL1xuICBidWlsZCgpOiBRdWVyeU9wdGlvbnMge1xuICAgIGNvbnN0IG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHRoaXMud2hlcmVDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIG9wdGlvbnMud2hlcmUgPSBbLi4udGhpcy53aGVyZUNvbmRpdGlvbnNdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9yZGVyQnlDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIG9wdGlvbnMub3JkZXJCeSA9IFsuLi50aGlzLm9yZGVyQnlDb25kaXRpb25zXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5saW1pdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSB0aGlzLmxpbWl0VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnRBZnRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnRBZnRlciA9IHRoaXMuc3RhcnRBZnRlclZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0QXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLnN0YXJ0QXQgPSB0aGlzLnN0YXJ0QXRWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmRCZWZvcmVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmVuZEJlZm9yZSA9IHRoaXMuZW5kQmVmb3JlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kQXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmVuZEF0ID0gdGhpcy5lbmRBdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0ZWEgZWwgYnVpbGRlciBwYXJhIHJldXRpbGl6YWNpw7NuLlxuICAgKi9cbiAgcmVzZXQoKTogUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLndoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgIHRoaXMub3JkZXJCeUNvbmRpdGlvbnMgPSBbXTtcbiAgICB0aGlzLmxpbWl0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydEFmdGVyVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydEF0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbmRCZWZvcmVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVuZEF0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmEgZWwgYnVpbGRlciBhY3R1YWwuXG4gICAqL1xuICBjbG9uZSgpOiBRdWVyeUJ1aWxkZXIge1xuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBRdWVyeUJ1aWxkZXIoKTtcbiAgICBjbG9uZWQud2hlcmVDb25kaXRpb25zID0gWy4uLnRoaXMud2hlcmVDb25kaXRpb25zXTtcbiAgICBjbG9uZWQub3JkZXJCeUNvbmRpdGlvbnMgPSBbLi4udGhpcy5vcmRlckJ5Q29uZGl0aW9uc107XG4gICAgY2xvbmVkLmxpbWl0VmFsdWUgPSB0aGlzLmxpbWl0VmFsdWU7XG4gICAgY2xvbmVkLnN0YXJ0QWZ0ZXJWYWx1ZSA9IHRoaXMuc3RhcnRBZnRlclZhbHVlO1xuICAgIGNsb25lZC5zdGFydEF0VmFsdWUgPSB0aGlzLnN0YXJ0QXRWYWx1ZTtcbiAgICBjbG9uZWQuZW5kQmVmb3JlVmFsdWUgPSB0aGlzLmVuZEJlZm9yZVZhbHVlO1xuICAgIGNsb25lZC5lbmRBdFZhbHVlID0gdGhpcy5lbmRBdFZhbHVlO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jacOzbiBoZWxwZXIgcGFyYSBjcmVhciB1biBRdWVyeUJ1aWxkZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHF1ZXJ5IH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCBvcHRpb25zID0gcXVlcnkoKVxuICogICAud2hlcmUoJ3N0YXR1cycsICc9PScsICdhY3RpdmUnKVxuICogICAub3JkZXJCeSgnY3JlYXRlZEF0JywgJ2Rlc2MnKVxuICogICAubGltaXQoMTApXG4gKiAgIC5idWlsZCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeSgpOiBRdWVyeUJ1aWxkZXIge1xuICByZXR1cm4gbmV3IFF1ZXJ5QnVpbGRlcigpO1xufVxuIl19
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Firebase Configuration
|
|
3
|
-
*
|
|
4
|
-
* Configuración e inicialización de Firebase para aplicaciones Angular.
|
|
5
|
-
* Usa provideValtechFirebase() en el bootstrap de tu aplicación.
|
|
6
|
-
*/
|
|
7
|
-
import { EnvironmentProviders, InjectionToken } from '@angular/core';
|
|
8
|
-
import { ValtechFirebaseConfig } from './types';
|
|
9
|
-
/**
|
|
10
|
-
* Token de inyección para la configuración de Firebase.
|
|
11
|
-
* Usado internamente por los servicios de Firebase.
|
|
12
|
-
*/
|
|
13
|
-
export declare const VALTECH_FIREBASE_CONFIG: InjectionToken<ValtechFirebaseConfig>;
|
|
14
|
-
/**
|
|
15
|
-
* Provee Firebase a la aplicación Angular.
|
|
16
|
-
*
|
|
17
|
-
* @param config - Configuración de Firebase
|
|
18
|
-
* @returns EnvironmentProviders para usar en bootstrapApplication
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* // main.ts
|
|
23
|
-
* import { bootstrapApplication } from '@angular/platform-browser';
|
|
24
|
-
* import { provideValtechFirebase } from 'valtech-components';
|
|
25
|
-
* import { environment } from './environments/environment';
|
|
26
|
-
*
|
|
27
|
-
* bootstrapApplication(AppComponent, {
|
|
28
|
-
* providers: [
|
|
29
|
-
* provideValtechFirebase({
|
|
30
|
-
* firebase: environment.firebase,
|
|
31
|
-
* persistence: true,
|
|
32
|
-
* emulator: environment.useEmulators ? {
|
|
33
|
-
* firestore: { host: 'localhost', port: 8080 },
|
|
34
|
-
* auth: { host: 'localhost', port: 9099 },
|
|
35
|
-
* storage: { host: 'localhost', port: 9199 },
|
|
36
|
-
* } : undefined,
|
|
37
|
-
* }),
|
|
38
|
-
* ],
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export declare function provideValtechFirebase(config: ValtechFirebaseConfig): EnvironmentProviders;
|
|
43
|
-
/**
|
|
44
|
-
* Verifica si los emuladores están configurados.
|
|
45
|
-
*
|
|
46
|
-
* @param config - Configuración de Firebase
|
|
47
|
-
* @returns true si hay al menos un emulador configurado
|
|
48
|
-
*/
|
|
49
|
-
export declare function hasEmulators(config: ValtechFirebaseConfig): boolean;
|