File tree Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ import { BacktraceConfiguration } from './BacktraceConfiguration.js';
1111import { BacktraceClientBuilder } from './builder/BacktraceClientBuilder.js' ;
1212import { BacktraceClientSetup } from './builder/BacktraceClientSetup.js' ;
1313import { getStackTraceConverter } from './converters/getStackTraceConverter.js' ;
14+ import { BrowserBacktraceStorage } from './storage/BrowserBacktraceStorage.js' ;
1415
1516export 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 (
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments