Skip to content

Commit b875f4e

Browse files
committed
browser: add BrowserBacktraceStorage implementation [INT-355]
1 parent efb9d91 commit b875f4e

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

packages/browser/src/BacktraceClient.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { BacktraceConfiguration } from './BacktraceConfiguration.js';
1111
import { BacktraceClientBuilder } from './builder/BacktraceClientBuilder.js';
1212
import { BacktraceClientSetup } from './builder/BacktraceClientSetup.js';
1313
import { getStackTraceConverter } from './converters/getStackTraceConverter.js';
14+
import { BrowserBacktraceStorage } from './storage/BrowserBacktraceStorage.js';
1415

1516
export class BacktraceClient<O extends BacktraceConfiguration = BacktraceConfiguration> extends BacktraceCoreClient<O> {
1617
private readonly _disposeController: AbortController = new AbortController();
@@ -23,6 +24,10 @@ export class BacktraceClient<O extends BacktraceConfiguration = BacktraceConfigu
2324
debugIdMapProvider: new VariableDebugIdMapProvider(window as DebugIdContainer),
2425
sessionProvider: new BacktraceBrowserSessionProvider(),
2526
...clientSetup,
27+
database: {
28+
storage: new BrowserBacktraceStorage(),
29+
...clientSetup.database,
30+
},
2631
});
2732

2833
this.captureUnhandledErrors(
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { BacktraceStorageModule } from '@backtrace/sdk-core';
2+
3+
export class BrowserBacktraceStorage implements BacktraceStorageModule {
4+
constructor(private readonly _storage = window.localStorage) {}
5+
6+
public async set(key: string, value: string): Promise<boolean> {
7+
return this.setSync(key, value);
8+
}
9+
10+
public async remove(key: string): Promise<boolean> {
11+
return this.removeSync(key);
12+
}
13+
14+
public async get(key: string): Promise<string | undefined> {
15+
return this.getSync(key);
16+
}
17+
18+
public async has(key: string): Promise<boolean> {
19+
return this.hasSync(key);
20+
}
21+
22+
public setSync(key: string, value: string): boolean {
23+
try {
24+
this._storage.setItem(key, value);
25+
return true;
26+
} catch {
27+
return false;
28+
}
29+
}
30+
31+
public removeSync(key: string): boolean {
32+
try {
33+
this._storage.removeItem(key);
34+
return true;
35+
} catch {
36+
return false;
37+
}
38+
}
39+
40+
public getSync(key: string): string | undefined {
41+
try {
42+
return this._storage.getItem(key) ?? undefined;
43+
} catch {
44+
return undefined;
45+
}
46+
}
47+
48+
public hasSync(key: string): boolean {
49+
return key in this._storage;
50+
}
51+
52+
public async *keys(): AsyncGenerator<string> {
53+
for (const key of Object.keys(this._storage)) {
54+
yield key;
55+
}
56+
}
57+
58+
public *keysSync(): Generator<string> {
59+
for (const key of Object.keys(this._storage)) {
60+
yield key;
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)