1
- import { parseData } from '@stenodb/utils'
2
- import { plainToClass } from 'class-transformer'
1
+ import { dataTransformer , entityTransformer } from '@stenodb/utils'
3
2
import type { Steno } from '../types.js'
3
+ import type { BaseLogger } from '@stenodb/logger'
4
+ import type { DataTransformer , EntityTransformer } from '@stenodb/utils'
4
5
5
6
export class BrowserStorage < T > {
6
7
name : string
7
8
storage : Storage
8
- entity : Steno . Entity < T >
9
+ logger : BaseLogger | undefined
10
+
11
+ entityTransformer : EntityTransformer < T >
12
+ dataTransformer : DataTransformer < T >
9
13
10
14
data : T | null = null
11
15
initialData : T | null = null
@@ -18,34 +22,32 @@ export class BrowserStorage<T> {
18
22
) {
19
23
this . name = name
20
24
this . storage = storage
21
- this . entity = entity
25
+ this . entityTransformer = entityTransformer ( entity )
26
+ this . dataTransformer = dataTransformer ( this . entityTransformer )
22
27
23
28
if ( initialData ) {
24
29
this . initialData = initialData
25
30
}
26
31
}
27
32
28
- plainData ( data : T | string | null = this . data ) : T | null {
29
- if ( ! data ) return null
30
-
31
- const parsedData =
32
- typeof data === 'string' ? parseData < T > ( data ) . toJSON ( ) : data
33
-
34
- return plainToClass ( this . entity , parsedData )
33
+ registerLogger ( logger : BaseLogger ) : void {
34
+ this . logger = logger
35
35
}
36
36
37
37
read ( ) : void {
38
38
const data = this . storage . getItem ( this . name )
39
- this . data = data ? this . plainData ( data ) : null
39
+ this . data = this . dataTransformer . toJSON ( data )
40
+ this . logger ?. info ( 'Read data:' , this . data )
40
41
}
41
42
42
43
write ( ) : void {
43
- this . storage . setItem ( this . name , parseData ( this . data ) . toString ( ) )
44
+ this . storage . setItem ( this . name , this . dataTransformer . toString ( this . data ) )
45
+ this . logger ?. info ( 'Write data:' , this . data )
44
46
}
45
47
46
48
reset ( ) : void {
47
49
if ( ! this . initialData ) return
48
- this . data = plainToClass ( this . entity , this . initialData )
50
+ this . data = this . entityTransformer ( this . initialData )
49
51
this . write ( )
50
52
}
51
53
0 commit comments