valtech-components 2.0.451 → 2.0.453

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.
Files changed (61) hide show
  1. package/esm2022/lib/components/organisms/tabbed-content/tabbed-content.component.mjs +170 -0
  2. package/esm2022/lib/components/organisms/tabbed-content/types.mjs +2 -0
  3. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +11 -11
  4. package/esm2022/lib/components/templates/page-template/page-template.component.mjs +3 -5
  5. package/esm2022/lib/services/auth/auth-state.service.mjs +173 -0
  6. package/esm2022/lib/services/auth/auth.service.mjs +454 -0
  7. package/esm2022/lib/services/auth/config.mjs +76 -0
  8. package/esm2022/lib/services/auth/guards.mjs +194 -0
  9. package/esm2022/lib/services/auth/index.mjs +70 -0
  10. package/esm2022/lib/services/auth/interceptor.mjs +98 -0
  11. package/esm2022/lib/services/auth/storage.service.mjs +141 -0
  12. package/esm2022/lib/services/auth/sync.service.mjs +149 -0
  13. package/esm2022/lib/services/auth/token.service.mjs +113 -0
  14. package/esm2022/lib/services/auth/types.mjs +29 -0
  15. package/esm2022/lib/services/firebase/config.mjs +108 -0
  16. package/esm2022/lib/services/firebase/firebase.service.mjs +288 -0
  17. package/esm2022/lib/services/firebase/firestore-collection.mjs +254 -0
  18. package/esm2022/lib/services/firebase/firestore.service.mjs +509 -0
  19. package/esm2022/lib/services/firebase/index.mjs +49 -0
  20. package/esm2022/lib/services/firebase/messaging.service.mjs +512 -0
  21. package/esm2022/lib/services/firebase/shared-config.mjs +138 -0
  22. package/esm2022/lib/services/firebase/storage.service.mjs +422 -0
  23. package/esm2022/lib/services/firebase/types.mjs +8 -0
  24. package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
  25. package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
  26. package/esm2022/lib/services/link-processor.service.mjs +61 -43
  27. package/esm2022/lib/services/modal/modal.service.mjs +8 -9
  28. package/esm2022/lib/services/navigation.service.mjs +11 -11
  29. package/esm2022/public-api.mjs +23 -4
  30. package/fesm2022/valtech-components.mjs +4599 -102
  31. package/fesm2022/valtech-components.mjs.map +1 -1
  32. package/lib/components/organisms/tabbed-content/tabbed-content.component.d.ts +65 -0
  33. package/lib/components/organisms/tabbed-content/types.d.ts +53 -0
  34. package/lib/components/templates/page-content/page-content.component.d.ts +3 -0
  35. package/lib/services/auth/auth-state.service.d.ts +85 -0
  36. package/lib/services/auth/auth.service.d.ts +146 -0
  37. package/lib/services/auth/config.d.ts +38 -0
  38. package/lib/services/auth/guards.d.ts +123 -0
  39. package/lib/services/auth/index.d.ts +63 -0
  40. package/lib/services/auth/interceptor.d.ts +22 -0
  41. package/lib/services/auth/storage.service.d.ts +48 -0
  42. package/lib/services/auth/sync.service.d.ts +49 -0
  43. package/lib/services/auth/token.service.d.ts +51 -0
  44. package/lib/services/auth/types.d.ts +315 -0
  45. package/lib/services/firebase/config.d.ts +49 -0
  46. package/lib/services/firebase/firebase.service.d.ts +140 -0
  47. package/lib/services/firebase/firestore-collection.d.ts +175 -0
  48. package/lib/services/firebase/firestore.service.d.ts +304 -0
  49. package/lib/services/firebase/index.d.ts +39 -0
  50. package/lib/services/firebase/messaging.service.d.ts +263 -0
  51. package/lib/services/firebase/shared-config.d.ts +126 -0
  52. package/lib/services/firebase/storage.service.d.ts +206 -0
  53. package/lib/services/firebase/types.d.ts +281 -0
  54. package/lib/services/firebase/utils/path-builder.d.ts +132 -0
  55. package/lib/services/firebase/utils/query-builder.d.ts +210 -0
  56. package/lib/services/modal/modal.service.d.ts +2 -0
  57. package/lib/services/navigation.service.d.ts +4 -4
  58. package/package.json +3 -1
  59. package/public-api.d.ts +9 -0
  60. package/fesm2022/valtech-components-simple-modal-content.component-DQhEgUmS.mjs +0 -136
  61. package/fesm2022/valtech-components-simple-modal-content.component-DQhEgUmS.mjs.map +0 -1
@@ -0,0 +1,175 @@
1
+ import { Observable } from 'rxjs';
2
+ import { FirestoreService } from './firestore.service';
3
+ import { FirestoreDocument, PaginatedResult, QueryOptions } from './types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Opciones de configuración para una colección.
7
+ */
8
+ export interface CollectionOptions {
9
+ /**
10
+ * Si true, usa soft delete (marca deletedAt en lugar de eliminar).
11
+ * Default: false
12
+ */
13
+ softDelete?: boolean;
14
+ /**
15
+ * Si true, maneja automáticamente createdAt/updatedAt.
16
+ * Default: true
17
+ */
18
+ timestamps?: boolean;
19
+ }
20
+ /**
21
+ * Referencia a una sub-colección tipada.
22
+ */
23
+ export interface SubCollectionRef<T extends FirestoreDocument> {
24
+ getById(id: string): Promise<T | null>;
25
+ getAll(options?: QueryOptions): Promise<T[]>;
26
+ watch(id: string): Observable<T | null>;
27
+ watchAll(options?: QueryOptions): Observable<T[]>;
28
+ create(data: Omit<T, 'id' | 'createdAt' | 'updatedAt'>): Promise<T>;
29
+ update(id: string, data: Partial<T>): Promise<void>;
30
+ delete(id: string): Promise<void>;
31
+ }
32
+ /**
33
+ * Factory para crear instancias de colección tipadas.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * @Injectable({ providedIn: 'root' })
38
+ * export class UsersService {
39
+ * private users = inject(FirestoreCollectionFactory).create<User>('users');
40
+ *
41
+ * getAll = () => this.users.getAll();
42
+ * getById = (id: string) => this.users.getById(id);
43
+ * create = (data: Omit<User, 'id'>) => this.users.create(data);
44
+ *
45
+ * // Métodos personalizados
46
+ * async getActiveUsers(): Promise<User[]> {
47
+ * return this.users.query({
48
+ * where: [{ field: 'active', operator: '==', value: true }]
49
+ * });
50
+ * }
51
+ * }
52
+ * ```
53
+ */
54
+ export declare class FirestoreCollectionFactory {
55
+ private firestore;
56
+ constructor(firestore: FirestoreService);
57
+ /**
58
+ * Crea una instancia de colección tipada.
59
+ *
60
+ * @param collectionPath - Ruta de la colección en Firestore
61
+ * @param options - Opciones de configuración
62
+ * @returns Instancia de TypedCollection
63
+ */
64
+ create<T extends FirestoreDocument>(collectionPath: string, options?: CollectionOptions): TypedCollection<T>;
65
+ static ɵfac: i0.ɵɵFactoryDeclaration<FirestoreCollectionFactory, never>;
66
+ static ɵprov: i0.ɵɵInjectableDeclaration<FirestoreCollectionFactory>;
67
+ }
68
+ /**
69
+ * Colección tipada con métodos CRUD.
70
+ *
71
+ * NO usa inject() - recibe FirestoreService por constructor.
72
+ * Esto evita el error NG0203.
73
+ */
74
+ export declare class TypedCollection<T extends FirestoreDocument> {
75
+ private firestore;
76
+ private collectionPath;
77
+ private readonly options;
78
+ constructor(firestore: FirestoreService, collectionPath: string, options?: CollectionOptions);
79
+ /**
80
+ * Obtiene un documento por ID.
81
+ */
82
+ getById(id: string): Promise<T | null>;
83
+ /**
84
+ * Obtiene todos los documentos de la colección.
85
+ */
86
+ getAll(options?: QueryOptions): Promise<T[]>;
87
+ /**
88
+ * Ejecuta una query personalizada.
89
+ */
90
+ query(options: QueryOptions): Promise<T[]>;
91
+ /**
92
+ * Obtiene documentos con paginación.
93
+ */
94
+ paginate(options: QueryOptions & {
95
+ limit: number;
96
+ }): Promise<PaginatedResult<T>>;
97
+ /**
98
+ * Obtiene el primer documento que coincida con la query.
99
+ */
100
+ getFirst(options?: QueryOptions): Promise<T | null>;
101
+ /**
102
+ * Cuenta los documentos que coinciden con la query.
103
+ * Nota: Esto carga todos los documentos, usar con cuidado en colecciones grandes.
104
+ */
105
+ count(options?: QueryOptions): Promise<number>;
106
+ /**
107
+ * Verifica si un documento existe.
108
+ */
109
+ exists(id: string): Promise<boolean>;
110
+ /**
111
+ * Suscribe a cambios de un documento.
112
+ */
113
+ watch(id: string): Observable<T | null>;
114
+ /**
115
+ * Suscribe a cambios de la colección.
116
+ */
117
+ watchAll(options?: QueryOptions): Observable<T[]>;
118
+ /**
119
+ * Suscribe a una query personalizada.
120
+ */
121
+ watchQuery(options: QueryOptions): Observable<T[]>;
122
+ /**
123
+ * Crea un nuevo documento con ID auto-generado.
124
+ */
125
+ create(data: Omit<T, 'id' | 'createdAt' | 'updatedAt'>): Promise<T>;
126
+ /**
127
+ * Crea un documento con ID específico.
128
+ */
129
+ createWithId(id: string, data: Omit<T, 'id'>): Promise<void>;
130
+ /**
131
+ * Actualiza campos de un documento.
132
+ */
133
+ update(id: string, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<void>;
134
+ /**
135
+ * Elimina un documento.
136
+ * Si softDelete está habilitado, marca como eliminado en lugar de borrar.
137
+ */
138
+ delete(id: string): Promise<void>;
139
+ /**
140
+ * Restaura un documento soft-deleted.
141
+ */
142
+ restore(id: string): Promise<void>;
143
+ /**
144
+ * Obtiene una referencia a una sub-colección.
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * // En UsersService
149
+ * getUserDocuments(userId: string) {
150
+ * return this.users.subcollection<Document>(userId, 'documents');
151
+ * }
152
+ *
153
+ * // Uso
154
+ * const docs = await users.getUserDocuments('user123').getAll();
155
+ * ```
156
+ */
157
+ subcollection<S extends FirestoreDocument>(parentId: string, subcollectionName: string): SubCollectionRef<S>;
158
+ /**
159
+ * Aplica filtros por defecto a las queries.
160
+ */
161
+ private applyDefaultFilters;
162
+ /**
163
+ * Genera un nuevo ID sin crear el documento.
164
+ */
165
+ generateId(): string;
166
+ /**
167
+ * Obtiene la ruta de la colección.
168
+ */
169
+ getPath(): string;
170
+ }
171
+ /**
172
+ * @deprecated Use FirestoreCollectionFactory.create() instead.
173
+ * Type alias for backwards compatibility.
174
+ */
175
+ export type FirestoreCollection<T extends FirestoreDocument> = TypedCollection<T>;
@@ -0,0 +1,304 @@
1
+ import { Firestore, FieldValue } from '@angular/fire/firestore';
2
+ import { Observable } from 'rxjs';
3
+ import { FirestoreDocument, PaginatedResult, QueryOptions } from './types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Servicio para operaciones CRUD en Firestore.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * interface User extends FirestoreDocument {
11
+ * name: string;
12
+ * email: string;
13
+ * role: 'admin' | 'user';
14
+ * }
15
+ *
16
+ * @Component({...})
17
+ * export class UsersComponent {
18
+ * private firestore = inject(FirestoreService);
19
+ *
20
+ * // Lectura one-time
21
+ * async loadUser(id: string) {
22
+ * const user = await this.firestore.getDoc<User>('users', id);
23
+ * }
24
+ *
25
+ * // Subscripción real-time
26
+ * users$ = this.firestore.collectionChanges<User>('users', {
27
+ * where: [{ field: 'role', operator: '==', value: 'admin' }],
28
+ * orderBy: [{ field: 'name', direction: 'asc' }]
29
+ * });
30
+ *
31
+ * // Crear documento
32
+ * async createUser(data: Omit<User, 'id'>) {
33
+ * const user = await this.firestore.addDoc<User>('users', data);
34
+ * }
35
+ * }
36
+ * ```
37
+ */
38
+ export declare class FirestoreService {
39
+ private firestore;
40
+ constructor(firestore: Firestore);
41
+ /**
42
+ * Obtiene un documento por ID (lectura única).
43
+ *
44
+ * @param collectionPath - Ruta de la colección
45
+ * @param docId - ID del documento
46
+ * @returns Documento o null si no existe
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const user = await firestoreService.getDoc<User>('users', 'abc123');
51
+ * if (user) {
52
+ * console.log(user.name);
53
+ * }
54
+ * ```
55
+ */
56
+ getDoc<T extends FirestoreDocument>(collectionPath: string, docId: string): Promise<T | null>;
57
+ /**
58
+ * Obtiene múltiples documentos con opciones de query.
59
+ *
60
+ * @param collectionPath - Ruta de la colección
61
+ * @param options - Opciones de query (where, orderBy, limit)
62
+ * @returns Array de documentos
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * // Todos los usuarios activos ordenados por nombre
67
+ * const users = await firestoreService.getDocs<User>('users', {
68
+ * where: [{ field: 'active', operator: '==', value: true }],
69
+ * orderBy: [{ field: 'name', direction: 'asc' }],
70
+ * limit: 50
71
+ * });
72
+ * ```
73
+ */
74
+ getDocs<T extends FirestoreDocument>(collectionPath: string, options?: QueryOptions): Promise<T[]>;
75
+ /**
76
+ * Obtiene documentos con paginación basada en cursores.
77
+ *
78
+ * @param collectionPath - Ruta de la colección
79
+ * @param options - Opciones de query (debe incluir limit)
80
+ * @returns Resultado paginado con cursor para la siguiente página
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * // Primera página
85
+ * const page1 = await firestoreService.getPaginated<User>('users', {
86
+ * orderBy: [{ field: 'createdAt', direction: 'desc' }],
87
+ * limit: 10
88
+ * });
89
+ *
90
+ * // Siguiente página
91
+ * if (page1.hasMore) {
92
+ * const page2 = await firestoreService.getPaginated<User>('users', {
93
+ * orderBy: [{ field: 'createdAt', direction: 'desc' }],
94
+ * limit: 10,
95
+ * startAfter: page1.lastDoc
96
+ * });
97
+ * }
98
+ * ```
99
+ */
100
+ getPaginated<T extends FirestoreDocument>(collectionPath: string, options: QueryOptions & {
101
+ limit: number;
102
+ }): Promise<PaginatedResult<T>>;
103
+ /**
104
+ * Verifica si un documento existe.
105
+ *
106
+ * @param collectionPath - Ruta de la colección
107
+ * @param docId - ID del documento
108
+ * @returns true si el documento existe
109
+ */
110
+ exists(collectionPath: string, docId: string): Promise<boolean>;
111
+ /**
112
+ * Suscribe a cambios de un documento (real-time).
113
+ *
114
+ * @param collectionPath - Ruta de la colección
115
+ * @param docId - ID del documento
116
+ * @returns Observable que emite cuando el documento cambia
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * // En el componente
121
+ * user$ = this.firestoreService.docChanges<User>('users', this.userId);
122
+ *
123
+ * // En el template
124
+ * @if (user$ | async; as user) {
125
+ * <p>{{ user.name }}</p>
126
+ * }
127
+ * ```
128
+ */
129
+ docChanges<T extends FirestoreDocument>(collectionPath: string, docId: string): Observable<T | null>;
130
+ /**
131
+ * Suscribe a cambios de una colección (real-time).
132
+ *
133
+ * @param collectionPath - Ruta de la colección
134
+ * @param options - Opciones de query
135
+ * @returns Observable que emite cuando la colección cambia
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * // Usuarios activos en tiempo real
140
+ * activeUsers$ = this.firestoreService.collectionChanges<User>('users', {
141
+ * where: [{ field: 'status', operator: '==', value: 'online' }]
142
+ * });
143
+ * ```
144
+ */
145
+ collectionChanges<T extends FirestoreDocument>(collectionPath: string, options?: QueryOptions): Observable<T[]>;
146
+ /**
147
+ * Agrega un documento con ID auto-generado.
148
+ *
149
+ * @param collectionPath - Ruta de la colección
150
+ * @param data - Datos del documento (sin id, createdAt, updatedAt)
151
+ * @returns Documento creado con su ID
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * const newUser = await firestoreService.addDoc<User>('users', {
156
+ * name: 'John Doe',
157
+ * email: 'john@example.com',
158
+ * role: 'user'
159
+ * });
160
+ * console.log('Created user with ID:', newUser.id);
161
+ * ```
162
+ */
163
+ addDoc<T extends FirestoreDocument>(collectionPath: string, data: Omit<T, 'id' | 'createdAt' | 'updatedAt'>): Promise<T>;
164
+ /**
165
+ * Crea o sobrescribe un documento con ID específico.
166
+ *
167
+ * @param collectionPath - Ruta de la colección
168
+ * @param docId - ID del documento
169
+ * @param data - Datos del documento
170
+ * @param options - Opciones (merge: true para merge en lugar de sobrescribir)
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * // Sobrescribir completamente
175
+ * await firestoreService.setDoc<User>('users', 'user123', userData);
176
+ *
177
+ * // Merge con datos existentes
178
+ * await firestoreService.setDoc<User>('users', 'user123', { name: 'New Name' }, { merge: true });
179
+ * ```
180
+ */
181
+ setDoc<T extends FirestoreDocument>(collectionPath: string, docId: string, data: Omit<T, 'id'>, options?: {
182
+ merge?: boolean;
183
+ }): Promise<void>;
184
+ /**
185
+ * Actualiza campos específicos de un documento.
186
+ *
187
+ * @param collectionPath - Ruta de la colección
188
+ * @param docId - ID del documento
189
+ * @param data - Campos a actualizar
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * await firestoreService.updateDoc<User>('users', 'user123', {
194
+ * name: 'Updated Name',
195
+ * lastLogin: new Date()
196
+ * });
197
+ * ```
198
+ */
199
+ updateDoc<T extends FirestoreDocument>(collectionPath: string, docId: string, data: Partial<Omit<T, 'id' | 'createdAt'>>): Promise<void>;
200
+ /**
201
+ * Elimina un documento.
202
+ *
203
+ * @param collectionPath - Ruta de la colección
204
+ * @param docId - ID del documento
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * await firestoreService.deleteDoc('users', 'user123');
209
+ * ```
210
+ */
211
+ deleteDoc(collectionPath: string, docId: string): Promise<void>;
212
+ /**
213
+ * Ejecuta múltiples operaciones de escritura de forma atómica.
214
+ *
215
+ * @param operations - Función que recibe el batch y agrega operaciones
216
+ *
217
+ * @example
218
+ * ```typescript
219
+ * await firestoreService.batch((batch) => {
220
+ * batch.set('users/user1', { name: 'User 1' });
221
+ * batch.update('users/user2', { status: 'inactive' });
222
+ * batch.delete('users/user3');
223
+ * });
224
+ * ```
225
+ */
226
+ batch(operations: (batch: {
227
+ set: <T>(path: string, data: T) => void;
228
+ update: <T>(path: string, data: Partial<T>) => void;
229
+ delete: (path: string) => void;
230
+ }) => void): Promise<void>;
231
+ /**
232
+ * Construye una ruta a partir de un template.
233
+ *
234
+ * @param template - Template con placeholders {param}
235
+ * @param params - Valores para los placeholders
236
+ * @returns Ruta construida
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * const path = firestoreService.buildPath('users/{userId}/documents/{docId}', {
241
+ * userId: 'user123',
242
+ * docId: 'doc456'
243
+ * });
244
+ * // => 'users/user123/documents/doc456'
245
+ * ```
246
+ */
247
+ buildPath(template: string, params: Record<string, string>): string;
248
+ /**
249
+ * Genera un ID único para un documento (sin crearlo).
250
+ *
251
+ * @param collectionPath - Ruta de la colección
252
+ * @returns ID único generado por Firestore
253
+ */
254
+ generateId(collectionPath: string): string;
255
+ /**
256
+ * Retorna un valor de timestamp del servidor.
257
+ * Usar en campos de fecha para que Firestore asigne el timestamp.
258
+ */
259
+ serverTimestamp(): FieldValue;
260
+ /**
261
+ * Retorna un valor para agregar elementos a un array.
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * await firestoreService.updateDoc('users', 'user123', {
266
+ * tags: firestoreService.arrayUnion('new-tag')
267
+ * });
268
+ * ```
269
+ */
270
+ arrayUnion(...elements: unknown[]): FieldValue;
271
+ /**
272
+ * Retorna un valor para remover elementos de un array.
273
+ */
274
+ arrayRemove(...elements: unknown[]): FieldValue;
275
+ /**
276
+ * Retorna un valor para incrementar un campo numérico.
277
+ *
278
+ * @example
279
+ * ```typescript
280
+ * await firestoreService.updateDoc('users', 'user123', {
281
+ * loginCount: firestoreService.increment(1)
282
+ * });
283
+ * ```
284
+ */
285
+ increment(n: number): FieldValue;
286
+ /**
287
+ * Construye los QueryConstraints a partir de QueryOptions
288
+ */
289
+ private buildQueryConstraints;
290
+ /**
291
+ * Mapea un DocumentSnapshot a nuestro tipo
292
+ */
293
+ private mapDocument;
294
+ /**
295
+ * Convierte Timestamps de Firestore a Date de JavaScript
296
+ */
297
+ private convertTimestamps;
298
+ /**
299
+ * Divide una ruta de documento en colección e ID
300
+ */
301
+ private splitPath;
302
+ static ɵfac: i0.ɵɵFactoryDeclaration<FirestoreService, never>;
303
+ static ɵprov: i0.ɵɵInjectableDeclaration<FirestoreService>;
304
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Firebase Services
3
+ *
4
+ * Servicios reutilizables para integración con Firebase.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // En main.ts
9
+ * import { provideValtechFirebase } from 'valtech-components';
10
+ *
11
+ * bootstrapApplication(AppComponent, {
12
+ * providers: [
13
+ * provideValtechFirebase({
14
+ * firebase: environment.firebase,
15
+ * persistence: true,
16
+ * }),
17
+ * ],
18
+ * });
19
+ *
20
+ * // En componentes
21
+ * import { FirebaseService, FirestoreService } from 'valtech-components';
22
+ *
23
+ * @Component({...})
24
+ * export class MyComponent {
25
+ * private firebase = inject(FirebaseService);
26
+ * private firestore = inject(FirestoreService);
27
+ * }
28
+ * ```
29
+ */
30
+ export * from './types';
31
+ export { VALTECH_FIREBASE_CONFIG, hasEmulators, provideValtechFirebase } from './config';
32
+ export { APP_IDS, FIREBASE_PROJECTS, SHARED_EMULATOR_CONFIG, collections, createFirebaseConfig, isEmulatorMode, storagePaths, type AppId, type CreateFirebaseConfigOptions, } from './shared-config';
33
+ export { FirebaseService } from './firebase.service';
34
+ export { FirestoreService } from './firestore.service';
35
+ export { CollectionOptions, FirestoreCollection, FirestoreCollectionFactory, SubCollectionRef, TypedCollection, } from './firestore-collection';
36
+ export { QueryBuilder, query } from './utils/query-builder';
37
+ export { buildPath, extractPathParams, getCollectionPath, getDocumentId, isCollectionPath, isDocumentPath, isValidPath, joinPath, } from './utils/path-builder';
38
+ export { StorageService } from './storage.service';
39
+ export { MessagingService } from './messaging.service';