-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathBacktraceClientBuilder.ts
64 lines (56 loc) · 2.97 KB
/
BacktraceClientBuilder.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { BacktraceCoreClientBuilder } from '@backtrace/sdk-core';
import { Platform } from 'react-native';
import { NativeAttributeProvider } from '../attributes/NativeAttributeProvider';
import { ReactNativeAttributeProvider } from '../attributes/ReactNativeAttributeProvider';
import { BacktraceClient } from '../BacktraceClient';
import { AppStateBreadcrumbSubscriber } from '../breadcrumbs/events/AppStateBreadcrumbSubscriber';
import { DimensionChangeBreadcrumbSubscriber } from '../breadcrumbs/events/DimensionChangeBreadcrumbSubscriber';
import { WebRequestEventSubscriber } from '../breadcrumbs/events/WebRequestEventSubscriber';
import { DebuggerHelper } from '../common/DebuggerHelper';
import { ReactNativeFileSystem } from '../storage';
import type { BacktraceClientSetup } from './BacktraceClientSetup';
export class BacktraceClientBuilder extends BacktraceCoreClientBuilder<BacktraceClientSetup> {
constructor(clientSetup: BacktraceClientSetup) {
super(clientSetup);
this.addAttributeProvider(new ReactNativeAttributeProvider());
if (!DebuggerHelper.isNativeBridgeEnabled()) {
return;
}
if (Platform.OS !== 'android' && Platform.OS !== 'ios') {
return;
}
const attributeProviders = Platform.select({
ios: [
new NativeAttributeProvider('BacktraceApplicationAttributeProvider', 'scoped'),
new NativeAttributeProvider('BacktraceDeviceAttributeProvider', 'scoped'),
new NativeAttributeProvider('BacktraceSystemAttributeProvider', 'scoped'),
new NativeAttributeProvider('BacktraceMemoryUsageAttributeProvider', 'dynamic'),
new NativeAttributeProvider('BacktraceCpuAttributeProvider', 'dynamic'),
],
android: [
new NativeAttributeProvider('BacktraceApplicationAttributeProvider', 'scoped'),
new NativeAttributeProvider('BacktraceDeviceAttributeProvider', 'scoped'),
new NativeAttributeProvider('BacktraceSystemAttributeProvider', 'scoped'),
new NativeAttributeProvider('MemoryInformationAttributeProvider', 'dynamic'),
new NativeAttributeProvider('ProcessAttributeProvider', 'dynamic'),
],
default: [],
});
for (const provider of attributeProviders) {
this.addAttributeProvider(provider);
}
this.useFileSystem(new ReactNativeFileSystem());
this.useBreadcrumbSubscriber(new AppStateBreadcrumbSubscriber());
this.useBreadcrumbSubscriber(new DimensionChangeBreadcrumbSubscriber());
this.useBreadcrumbSubscriber(new WebRequestEventSubscriber());
}
public useFileSystem(fileSystem: ReactNativeFileSystem): this {
super.useFileSystem(fileSystem);
return this;
}
public build(): BacktraceClient {
const instance = new BacktraceClient(this.clientSetup);
instance.initialize();
return instance;
}
}