@@ -3,27 +3,12 @@ import { autorun, reaction, mobx, untracked, globalContext, Editor } from '@alil
33import { NodeSchema } from '@alilc/lowcode-types' ;
44import { History as ShellHistory } from '@alilc/lowcode-shell' ;
55
6- // TODO: cache to localStorage
7-
8- export interface Serialization < T = any > {
9- serialize ( data : NodeSchema ) : T ;
10- unserialize ( data : T ) : NodeSchema ;
11- }
12-
13- let currentSerialization : Serialization < any > = {
14- serialize ( data : NodeSchema ) : string {
15- return JSON . stringify ( data ) ;
16- } ,
17- unserialize ( data : string ) {
18- return JSON . parse ( data ) ;
19- } ,
20- } ;
21-
22- export function setSerialization ( serialization : Serialization ) {
23- currentSerialization = serialization ;
6+ export interface Serialization < K = NodeSchema , T = string > {
7+ serialize ( data : K ) : T ;
8+ unserialize ( data : T ) : K ;
249}
2510
26- export class History {
11+ export class History < T = NodeSchema > {
2712 private session : Session ;
2813
2914 private records : Session [ ] ;
@@ -34,16 +19,29 @@ export class History {
3419
3520 private asleep = false ;
3621
37- constructor ( logger : ( ) => any , private redoer : ( data : NodeSchema ) => void , private timeGap : number = 1000 ) {
22+ private currentSerialization : Serialization < T , string > = {
23+ serialize ( data : T ) : string {
24+ return JSON . stringify ( data ) ;
25+ } ,
26+ unserialize ( data : string ) {
27+ return JSON . parse ( data ) ;
28+ } ,
29+ } ;
30+
31+ setSerialization ( serialization : Serialization < T , string > ) {
32+ this . currentSerialization = serialization ;
33+ }
34+
35+ constructor ( dataFn : ( ) => T , private redoer : ( data : T ) => void , private timeGap : number = 1000 ) {
3836 this . session = new Session ( 0 , null , this . timeGap ) ;
3937 this . records = [ this . session ] ;
4038
4139 reaction ( ( ) => {
42- return logger ( ) ;
43- } , ( data ) => {
40+ return dataFn ( ) ;
41+ } , ( data : T ) => {
4442 if ( this . asleep ) return ;
4543 untracked ( ( ) => {
46- const log = currentSerialization . serialize ( data ) ;
44+ const log = this . currentSerialization . serialize ( data ) ;
4745 if ( this . session . isActive ( ) ) {
4846 this . session . log ( log ) ;
4947 } else {
@@ -98,9 +96,9 @@ export class History {
9896
9997 this . sleep ( ) ;
10098 try {
101- this . redoer ( currentSerialization . unserialize ( hotData ) ) ;
99+ this . redoer ( this . currentSerialization . unserialize ( hotData ) ) ;
102100 this . emitter . emit ( 'cursor' , hotData ) ;
103- } catch ( e ) {
101+ } catch ( e ) /* istanbul ignore next */ {
104102 console . error ( e ) ;
105103 }
106104
@@ -201,7 +199,7 @@ export class History {
201199 }
202200}
203201
204- class Session {
202+ export class Session {
205203 private _data : any ;
206204
207205 private activeTimer : any ;
0 commit comments