@umituz/react-native-firebase 1.13.4 → 1.13.6
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/package.json +2 -11
- package/src/index.ts +0 -7
- package/src/crashlytics/index.ts +0 -9
- package/src/crashlytics/infrastructure/adapters/index.ts +0 -8
- package/src/crashlytics/infrastructure/adapters/native-crashlytics.adapter.ts +0 -84
- package/src/crashlytics/infrastructure/services/FirebaseCrashlyticsService.ts +0 -93
- package/src/crashlytics/infrastructure/services/crashlytics-error.service.ts +0 -67
- package/src/crashlytics/infrastructure/services/crashlytics-initializer.service.ts +0 -31
- package/src/crashlytics/infrastructure/services/crashlytics-user.service.ts +0 -91
- package/src/crashlytics/infrastructure/services/index.ts +0 -11
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-firebase",
|
|
3
|
-
"version": "1.13.
|
|
4
|
-
"description": "Unified Firebase package for React Native apps - Centralized initialization and core services (Auth, Firestore, Analytics
|
|
3
|
+
"version": "1.13.6",
|
|
4
|
+
"description": "Unified Firebase package for React Native apps - Centralized initialization and core services (Auth, Firestore, Analytics).",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
7
7
|
"scripts": {
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
"database",
|
|
22
22
|
"repository",
|
|
23
23
|
"analytics",
|
|
24
|
-
"crashlytics",
|
|
25
24
|
"ddd",
|
|
26
25
|
"domain-driven-design"
|
|
27
26
|
],
|
|
@@ -32,20 +31,12 @@
|
|
|
32
31
|
"url": "https://github.com/umituz/react-native-firebase"
|
|
33
32
|
},
|
|
34
33
|
"peerDependencies": {
|
|
35
|
-
"@react-native-firebase/analytics": ">=18.0.0",
|
|
36
|
-
"@react-native-firebase/app": ">=18.0.0",
|
|
37
|
-
"@react-native-firebase/crashlytics": ">=18.0.0",
|
|
38
|
-
"@react-native-firebase/firestore": ">=18.0.0",
|
|
39
34
|
"expo-apple-authentication": ">=6.0.0",
|
|
40
35
|
"firebase": ">=10.0.0",
|
|
41
36
|
"react": ">=18.2.0",
|
|
42
37
|
"react-native": ">=0.74.0"
|
|
43
38
|
},
|
|
44
39
|
"devDependencies": {
|
|
45
|
-
"@react-native-firebase/analytics": "^19.0.0",
|
|
46
|
-
"@react-native-firebase/app": "^19.0.0",
|
|
47
|
-
"@react-native-firebase/crashlytics": "^19.0.0",
|
|
48
|
-
"@react-native-firebase/firestore": "^19.0.0",
|
|
49
40
|
"@types/react": "~19.1.10",
|
|
50
41
|
"firebase": "^12.6.0",
|
|
51
42
|
"react": "19.1.0",
|
package/src/index.ts
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* - Auth
|
|
8
8
|
* - Firestore
|
|
9
9
|
* - Analytics
|
|
10
|
-
* - Crashlytics
|
|
11
10
|
*
|
|
12
11
|
* Usage:
|
|
13
12
|
* import { initializeFirebase, getFirebaseApp } from '@umituz/react-native-firebase';
|
|
@@ -65,9 +64,3 @@ export * from './firestore';
|
|
|
65
64
|
|
|
66
65
|
export * from './analytics';
|
|
67
66
|
|
|
68
|
-
// =============================================================================
|
|
69
|
-
// CRASHLYTICS MODULE
|
|
70
|
-
// =============================================================================
|
|
71
|
-
|
|
72
|
-
export * from './crashlytics';
|
|
73
|
-
|
package/src/crashlytics/index.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Firebase Crashlytics Module
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export { firebaseCrashlyticsService } from './infrastructure/services/FirebaseCrashlyticsService';
|
|
6
|
-
export type { ICrashlyticsService } from './infrastructure/services/FirebaseCrashlyticsService';
|
|
7
|
-
export { crashlyticsInitializerService } from './infrastructure/services/crashlytics-initializer.service';
|
|
8
|
-
export { crashlyticsErrorService } from './infrastructure/services/crashlytics-error.service';
|
|
9
|
-
export { crashlyticsUserService } from './infrastructure/services/crashlytics-user.service';
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Native Crashlytics Adapter
|
|
3
|
-
* Single Responsibility: Handle Firebase Crashlytics native implementation
|
|
4
|
-
* Uses React Native Firebase v23+ modular API
|
|
5
|
-
*
|
|
6
|
-
* NOTE: This adapter uses optional import to support Expo Go.
|
|
7
|
-
* Native modules are only available in development builds or standalone apps.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
// Optional import - will be null in Expo Go
|
|
11
|
-
let nativeCrashlytics: any = null;
|
|
12
|
-
try {
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
14
|
-
nativeCrashlytics = require('@react-native-firebase/crashlytics');
|
|
15
|
-
} catch {
|
|
16
|
-
// Native module not available (e.g., Expo Go)
|
|
17
|
-
// Silent fail - crashlytics is optional
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type CrashlyticsInstance = any;
|
|
21
|
-
|
|
22
|
-
export interface NativeCrashlyticsAdapter {
|
|
23
|
-
getCrashlytics(): CrashlyticsInstance;
|
|
24
|
-
setUserId(crashlytics: CrashlyticsInstance, userId: string): Promise<void>;
|
|
25
|
-
setAttributes(crashlytics: CrashlyticsInstance, attributes: Record<string, string>): Promise<void>;
|
|
26
|
-
recordError(crashlytics: CrashlyticsInstance, error: Error): Promise<void>;
|
|
27
|
-
log(crashlytics: CrashlyticsInstance, message: string): Promise<void>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
declare const __DEV__: boolean;
|
|
31
|
-
|
|
32
|
-
export const nativeCrashlyticsAdapter: NativeCrashlyticsAdapter | null = nativeCrashlytics
|
|
33
|
-
? {
|
|
34
|
-
getCrashlytics(): CrashlyticsInstance {
|
|
35
|
-
return nativeCrashlytics.getCrashlytics();
|
|
36
|
-
},
|
|
37
|
-
async setUserId(crashlytics: CrashlyticsInstance, userId: string): Promise<void> {
|
|
38
|
-
try {
|
|
39
|
-
await nativeCrashlytics.setUserId(crashlytics, userId);
|
|
40
|
-
} catch (error) {
|
|
41
|
-
/* eslint-disable-next-line no-console */
|
|
42
|
-
if (__DEV__) {
|
|
43
|
-
console.warn('[Crashlytics] Failed to set user ID:', error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
async setAttributes(
|
|
48
|
-
crashlytics: CrashlyticsInstance,
|
|
49
|
-
attributes: Record<string, string>,
|
|
50
|
-
): Promise<void> {
|
|
51
|
-
try {
|
|
52
|
-
// Set each attribute individually using the modular API
|
|
53
|
-
for (const [key, value] of Object.entries(attributes)) {
|
|
54
|
-
await nativeCrashlytics.setAttribute(crashlytics, key, value);
|
|
55
|
-
}
|
|
56
|
-
} catch (error) {
|
|
57
|
-
/* eslint-disable-next-line no-console */
|
|
58
|
-
if (__DEV__) {
|
|
59
|
-
console.warn('[Crashlytics] Failed to set attributes:', error);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
async recordError(crashlytics: CrashlyticsInstance, error: Error): Promise<void> {
|
|
64
|
-
try {
|
|
65
|
-
await nativeCrashlytics.recordError(crashlytics, error);
|
|
66
|
-
} catch (err) {
|
|
67
|
-
/* eslint-disable-next-line no-console */
|
|
68
|
-
if (__DEV__) {
|
|
69
|
-
console.warn('[Crashlytics] Failed to record error:', err);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
async log(crashlytics: CrashlyticsInstance, message: string): Promise<void> {
|
|
74
|
-
try {
|
|
75
|
-
await nativeCrashlytics.log(crashlytics, message);
|
|
76
|
-
} catch (error) {
|
|
77
|
-
/* eslint-disable-next-line no-console */
|
|
78
|
-
if (__DEV__) {
|
|
79
|
-
console.warn('[Crashlytics] Failed to log message:', error);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
}
|
|
84
|
-
: null;
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Firebase Crashlytics Service
|
|
3
|
-
* Single Responsibility: Orchestrate Crashlytics operations
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { crashlyticsInitializerService } from './crashlytics-initializer.service';
|
|
7
|
-
import { crashlyticsErrorService } from './crashlytics-error.service';
|
|
8
|
-
import { crashlyticsUserService } from './crashlytics-user.service';
|
|
9
|
-
import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
|
|
10
|
-
|
|
11
|
-
export interface ICrashlyticsService {
|
|
12
|
-
init(userId?: string, attributes?: Record<string, string>): Promise<void>;
|
|
13
|
-
logError(error: Error, context?: string): Promise<void>;
|
|
14
|
-
log(message: string): Promise<void>;
|
|
15
|
-
setAttribute(key: string, value: string): Promise<void>;
|
|
16
|
-
setAttributes(attributes: Record<string, string>): Promise<void>;
|
|
17
|
-
clearUserData(): Promise<void>;
|
|
18
|
-
destroy(): Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
class FirebaseCrashlyticsService implements ICrashlyticsService {
|
|
22
|
-
private attributes: Record<string, string> = {};
|
|
23
|
-
private crashlytics: CrashlyticsInstance | null = null;
|
|
24
|
-
private isDestroyed = false;
|
|
25
|
-
|
|
26
|
-
async init(userId?: string, attributes?: Record<string, string>): Promise<void> {
|
|
27
|
-
if (this.isDestroyed) {
|
|
28
|
-
/* eslint-disable-next-line no-console */
|
|
29
|
-
if (__DEV__) {
|
|
30
|
-
console.warn('[Crashlytics] Cannot initialize destroyed service');
|
|
31
|
-
}
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
this.crashlytics = crashlyticsInitializerService.initialize();
|
|
37
|
-
|
|
38
|
-
if (this.crashlytics) {
|
|
39
|
-
if (userId) {
|
|
40
|
-
await crashlyticsUserService.setUserId(this.crashlytics, userId);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (attributes) {
|
|
44
|
-
await this.setAttributes(attributes);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
} catch (err) {
|
|
48
|
-
/* eslint-disable-next-line no-console */
|
|
49
|
-
if (__DEV__) {
|
|
50
|
-
console.warn('[Crashlytics] Init failed:', err);
|
|
51
|
-
}
|
|
52
|
-
} finally {
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
async logError(error: Error, context?: string): Promise<void> {
|
|
57
|
-
if (this.isDestroyed) return;
|
|
58
|
-
await crashlyticsErrorService.logError(this.crashlytics, error, context);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async log(message: string): Promise<void> {
|
|
62
|
-
if (this.isDestroyed) return;
|
|
63
|
-
await crashlyticsErrorService.log(this.crashlytics, message);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async setAttribute(key: string, value: string): Promise<void> {
|
|
67
|
-
if (this.isDestroyed) return;
|
|
68
|
-
this.attributes[key] = value;
|
|
69
|
-
await crashlyticsUserService.setAttribute(this.crashlytics, key, value);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async setAttributes(attributes: Record<string, string>): Promise<void> {
|
|
73
|
-
if (this.isDestroyed) return;
|
|
74
|
-
await crashlyticsUserService.setAttributes(this.crashlytics, attributes);
|
|
75
|
-
Object.assign(this.attributes, attributes);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async clearUserData(): Promise<void> {
|
|
79
|
-
if (this.isDestroyed) return;
|
|
80
|
-
await crashlyticsUserService.clearUserData(this.crashlytics);
|
|
81
|
-
this.attributes = {};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async destroy(): Promise<void> {
|
|
85
|
-
if (this.isDestroyed) return;
|
|
86
|
-
|
|
87
|
-
await this.clearUserData();
|
|
88
|
-
this.crashlytics = null;
|
|
89
|
-
this.isDestroyed = true;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export const firebaseCrashlyticsService = new FirebaseCrashlyticsService();
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crashlytics Error Service
|
|
3
|
-
* Single Responsibility: Handle error logging operations
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { nativeCrashlyticsAdapter } from '../adapters/native-crashlytics.adapter';
|
|
7
|
-
import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
|
|
8
|
-
|
|
9
|
-
export class CrashlyticsErrorService {
|
|
10
|
-
/**
|
|
11
|
-
* Log error to Crashlytics
|
|
12
|
-
*/
|
|
13
|
-
async logError(
|
|
14
|
-
crashlytics: CrashlyticsInstance | null,
|
|
15
|
-
error: Error,
|
|
16
|
-
context?: string,
|
|
17
|
-
): Promise<void> {
|
|
18
|
-
try {
|
|
19
|
-
/* eslint-disable-next-line no-console */
|
|
20
|
-
if (__DEV__) {
|
|
21
|
-
console.error(`[Crashlytics] Error${context ? ` in ${context}` : ''}:`, error);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (!crashlytics || !nativeCrashlyticsAdapter) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (context) {
|
|
29
|
-
await nativeCrashlyticsAdapter.log(crashlytics, `Context: ${context}`);
|
|
30
|
-
}
|
|
31
|
-
await nativeCrashlyticsAdapter.log(
|
|
32
|
-
crashlytics,
|
|
33
|
-
`Error: ${error.name} - ${error.message}`,
|
|
34
|
-
);
|
|
35
|
-
await nativeCrashlyticsAdapter.recordError(crashlytics, error);
|
|
36
|
-
} catch (err) {
|
|
37
|
-
/* eslint-disable-next-line no-console */
|
|
38
|
-
if (__DEV__) {
|
|
39
|
-
console.warn('[Crashlytics] Failed to log error:', err);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Log message to Crashlytics
|
|
46
|
-
*/
|
|
47
|
-
async log(crashlytics: CrashlyticsInstance | null, message: string): Promise<void> {
|
|
48
|
-
try {
|
|
49
|
-
if (!crashlytics || !nativeCrashlyticsAdapter) {
|
|
50
|
-
/* eslint-disable-next-line no-console */
|
|
51
|
-
if (__DEV__) {
|
|
52
|
-
console.log(`[Crashlytics] ${message}`);
|
|
53
|
-
}
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
await nativeCrashlyticsAdapter.log(crashlytics, message);
|
|
58
|
-
} catch (err) {
|
|
59
|
-
/* eslint-disable-next-line no-console */
|
|
60
|
-
if (__DEV__) {
|
|
61
|
-
console.warn('[Crashlytics] Failed to log message:', err);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export const crashlyticsErrorService = new CrashlyticsErrorService();
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crashlytics Initializer Service
|
|
3
|
-
* Single Responsibility: Handle Crashlytics initialization logic
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { nativeCrashlyticsAdapter } from '../adapters/native-crashlytics.adapter';
|
|
7
|
-
import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
|
|
8
|
-
|
|
9
|
-
export class CrashlyticsInitializerService {
|
|
10
|
-
/**
|
|
11
|
-
* Initialize Crashlytics instance
|
|
12
|
-
* Returns null if Crashlytics is not available (e.g., on web)
|
|
13
|
-
*/
|
|
14
|
-
initialize(): CrashlyticsInstance | null {
|
|
15
|
-
if (!nativeCrashlyticsAdapter) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
try {
|
|
20
|
-
return nativeCrashlyticsAdapter.getCrashlytics();
|
|
21
|
-
} catch (error) {
|
|
22
|
-
/* eslint-disable-next-line no-console */
|
|
23
|
-
if (__DEV__) {
|
|
24
|
-
console.warn('[Crashlytics] Initialization failed:', error);
|
|
25
|
-
}
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const crashlyticsInitializerService = new CrashlyticsInitializerService();
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crashlytics User Service
|
|
3
|
-
* Single Responsibility: Handle user-related Crashlytics operations
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { nativeCrashlyticsAdapter } from '../adapters/native-crashlytics.adapter';
|
|
7
|
-
import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
|
|
8
|
-
|
|
9
|
-
export class CrashlyticsUserService {
|
|
10
|
-
/**
|
|
11
|
-
* Set user ID
|
|
12
|
-
*/
|
|
13
|
-
async setUserId(crashlytics: CrashlyticsInstance | null, userId: string): Promise<void> {
|
|
14
|
-
try {
|
|
15
|
-
if (!crashlytics || !nativeCrashlyticsAdapter) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
await nativeCrashlyticsAdapter.setUserId(crashlytics, userId);
|
|
20
|
-
} catch (err) {
|
|
21
|
-
/* eslint-disable-next-line no-console */
|
|
22
|
-
if (__DEV__) {
|
|
23
|
-
console.warn('[Crashlytics] Failed to set user ID:', err);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Set attribute
|
|
30
|
-
*/
|
|
31
|
-
async setAttribute(
|
|
32
|
-
crashlytics: CrashlyticsInstance | null,
|
|
33
|
-
key: string,
|
|
34
|
-
value: string,
|
|
35
|
-
): Promise<void> {
|
|
36
|
-
try {
|
|
37
|
-
if (!crashlytics || !nativeCrashlyticsAdapter) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
await nativeCrashlyticsAdapter.setAttributes(crashlytics, { [key]: value });
|
|
42
|
-
} catch (err) {
|
|
43
|
-
/* eslint-disable-next-line no-console */
|
|
44
|
-
if (__DEV__) {
|
|
45
|
-
console.warn('[Crashlytics] Failed to set attribute:', err);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Set multiple attributes
|
|
52
|
-
*/
|
|
53
|
-
async setAttributes(
|
|
54
|
-
crashlytics: CrashlyticsInstance | null,
|
|
55
|
-
attributes: Record<string, string>,
|
|
56
|
-
): Promise<void> {
|
|
57
|
-
try {
|
|
58
|
-
if (!crashlytics || !nativeCrashlyticsAdapter) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
await nativeCrashlyticsAdapter.setAttributes(crashlytics, attributes);
|
|
63
|
-
} catch (err) {
|
|
64
|
-
/* eslint-disable-next-line no-console */
|
|
65
|
-
if (__DEV__) {
|
|
66
|
-
console.warn('[Crashlytics] Failed to set attributes:', err);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Clear user data
|
|
73
|
-
*/
|
|
74
|
-
async clearUserData(crashlytics: CrashlyticsInstance | null): Promise<void> {
|
|
75
|
-
try {
|
|
76
|
-
if (!crashlytics || !nativeCrashlyticsAdapter) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
await nativeCrashlyticsAdapter.setUserId(crashlytics, '');
|
|
81
|
-
await nativeCrashlyticsAdapter.setAttributes(crashlytics, {});
|
|
82
|
-
} catch (err) {
|
|
83
|
-
/* eslint-disable-next-line no-console */
|
|
84
|
-
if (__DEV__) {
|
|
85
|
-
console.warn('[Crashlytics] Failed to clear user data:', err);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export const crashlyticsUserService = new CrashlyticsUserService();
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crashlytics Infrastructure Services
|
|
3
|
-
* Public API exports
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export { firebaseCrashlyticsService } from './FirebaseCrashlyticsService';
|
|
7
|
-
export type { ICrashlyticsService } from './FirebaseCrashlyticsService';
|
|
8
|
-
export { crashlyticsInitializerService } from './crashlytics-initializer.service';
|
|
9
|
-
export { crashlyticsErrorService } from './crashlytics-error.service';
|
|
10
|
-
export { crashlyticsUserService } from './crashlytics-user.service';
|
|
11
|
-
|