@@ -3,33 +3,17 @@ import {fromBase64} from '../../../../util/base64/fromBase64';
33import { ITimestampStruct , ts , VectorClock } from '../../../../json-crdt-patch/clock' ;
44import { Model } from '../../../model' ;
55import { SESSION } from '../../../../json-crdt-patch/constants' ;
6- import {
7- JsonCrdtNode ,
8- ObjectJsonCrdtNode ,
9- ArrayJsonCrdtNode ,
10- ArrayJsonCrdtChunk ,
11- JsonCrdtRgaTombstone ,
12- ValueJsonCrdtNode ,
13- StringJsonCrdtNode ,
14- StringJsonCrdtChunk ,
15- ConstantJsonCrdtNode ,
16- BinaryJsonCrdtNode ,
17- BinaryJsonCrdtChunk ,
18- JsonCrdtSnapshot ,
19- JsonCrdtLogicalTimestamp ,
20- JsonCrdtTimestamp ,
21- TupleJsonCrdtNode ,
22- } from './types' ;
6+ import * as types from './types' ;
237
248export class Decoder {
25- public decode ( { time, root} : JsonCrdtSnapshot ) : Model {
9+ public decode ( { time, root} : types . JsonCrdtSnapshot ) : Model {
2610 const isServerClock = typeof time === 'number' ;
2711 const doc = isServerClock ? Model . withServerClock ( time ) : Model . withLogicalClock ( this . cClock ( time ) ) ;
2812 this . cRoot ( doc , root ) ;
2913 return doc ;
3014 }
3115
32- protected cClock ( timestamps : JsonCrdtLogicalTimestamp [ ] ) : VectorClock {
16+ protected cClock ( timestamps : types . JsonCrdtLogicalTimestamp [ ] ) : VectorClock {
3317 const [ stamp ] = timestamps ;
3418 const vectorClock = new VectorClock ( stamp [ 0 ] , stamp [ 1 ] ) ;
3519 const length = timestamps . length ;
@@ -41,18 +25,18 @@ export class Decoder {
4125 return vectorClock ;
4226 }
4327
44- protected cTs ( stamp : JsonCrdtTimestamp ) : ITimestampStruct {
28+ protected cTs ( stamp : types . JsonCrdtTimestamp ) : ITimestampStruct {
4529 const isServerClock = typeof stamp === 'number' ;
4630 return isServerClock ? ts ( SESSION . SERVER , stamp ) : ts ( stamp [ 0 ] , stamp [ 1 ] ) ;
4731 }
4832
49- protected cRoot ( doc : Model , { node} : ValueJsonCrdtNode ) : void {
33+ protected cRoot ( doc : Model , { node} : types . ValueJsonCrdtNode ) : void {
5034 const val = node ? this . cNode ( doc , node ) : new nodes . ConNode ( doc . clock . tick ( 0 ) , null ) ;
5135 const root = new nodes . RootNode ( doc , val . id ) ;
5236 doc . root = root ;
5337 }
5438
55- protected cNode ( doc : Model , node : JsonCrdtNode ) : nodes . JsonNode {
39+ protected cNode ( doc : Model , node : types . JsonCrdtNode ) : nodes . JsonNode {
5640 switch ( node . type ) {
5741 case 'obj' :
5842 return this . cObj ( doc , node ) ;
@@ -62,17 +46,17 @@ export class Decoder {
6246 return this . cStr ( doc , node ) ;
6347 case 'val' :
6448 return this . cVal ( doc , node ) ;
65- case 'const ' :
66- return this . cConst ( doc , node ) ;
49+ case 'con ' :
50+ return this . cCon ( doc , node ) ;
6751 case 'tup' :
68- return this . cTup ( doc , node ) ;
52+ return this . cVec ( doc , node ) ;
6953 case 'bin' :
7054 return this . cBin ( doc , node ) ;
7155 }
7256 throw new Error ( 'UNKNOWN_NODE' ) ;
7357 }
7458
75- protected cObj ( doc : Model , node : ObjectJsonCrdtNode ) : nodes . ObjNode {
59+ protected cObj ( doc : Model , node : types . ObjectJsonCrdtNode ) : nodes . ObjNode {
7660 const id = this . cTs ( node . id ) ;
7761 const obj = new nodes . ObjNode ( doc , id ) ;
7862 const keys = Object . keys ( node . keys ) ;
@@ -84,7 +68,7 @@ export class Decoder {
8468 return obj ;
8569 }
8670
87- protected cTup ( doc : Model , node : TupleJsonCrdtNode ) : nodes . VecNode {
71+ protected cVec ( doc : Model , node : types . TupleJsonCrdtNode ) : nodes . VecNode {
8872 const id = this . cTs ( node . id ) ;
8973 const obj = new nodes . VecNode ( doc , id ) ;
9074 const elements = obj . elements ;
@@ -99,7 +83,7 @@ export class Decoder {
9983 return obj ;
10084 }
10185
102- protected cArr ( doc : Model , node : ArrayJsonCrdtNode ) : nodes . ArrNode {
86+ protected cArr ( doc : Model , node : types . ArrayJsonCrdtNode ) : nodes . ArrNode {
10387 const id = this . cTs ( node . id ) ;
10488 const rga = new nodes . ArrNode ( doc , id ) ;
10589 const chunks = node . chunks ;
@@ -110,10 +94,10 @@ export class Decoder {
11094 rga . ingest ( length , ( ) => {
11195 const c = chunks [ i ++ ] ;
11296 const id = self . cTs ( c . id ) ;
113- if ( typeof ( c as JsonCrdtRgaTombstone ) . span === 'number' )
114- return new nodes . ArrChunk ( id , ( c as JsonCrdtRgaTombstone ) . span , undefined ) ;
97+ if ( typeof ( c as types . JsonCrdtRgaTombstone ) . span === 'number' )
98+ return new nodes . ArrChunk ( id , ( c as types . JsonCrdtRgaTombstone ) . span , undefined ) ;
11599 else {
116- const ids = ( c as ArrayJsonCrdtChunk ) . nodes . map ( ( n ) => this . cNode ( doc , n ) . id ) ;
100+ const ids = ( c as types . ArrayJsonCrdtChunk ) . nodes . map ( ( n ) => this . cNode ( doc , n ) . id ) ;
117101 return new nodes . ArrChunk ( id , ids . length , ids ) ;
118102 }
119103 } ) ;
@@ -122,7 +106,7 @@ export class Decoder {
122106 return rga ;
123107 }
124108
125- protected cStr ( doc : Model , node : StringJsonCrdtNode ) : nodes . StrNode {
109+ protected cStr ( doc : Model , node : types . StringJsonCrdtNode ) : nodes . StrNode {
126110 const id = this . cTs ( node . id ) ;
127111 const rga = new nodes . StrNode ( id ) ;
128112 const chunks = node . chunks ;
@@ -133,10 +117,10 @@ export class Decoder {
133117 rga . ingest ( length , ( ) => {
134118 const c = chunks [ i ++ ] ;
135119 const id = self . cTs ( c . id ) ;
136- if ( typeof ( c as JsonCrdtRgaTombstone ) . span === 'number' )
137- return new nodes . StrChunk ( id , ( c as JsonCrdtRgaTombstone ) . span , '' ) ;
120+ if ( typeof ( c as types . JsonCrdtRgaTombstone ) . span === 'number' )
121+ return new nodes . StrChunk ( id , ( c as types . JsonCrdtRgaTombstone ) . span , '' ) ;
138122 else {
139- const value = ( c as StringJsonCrdtChunk ) . value ;
123+ const value = ( c as types . StringJsonCrdtChunk ) . value ;
140124 return new nodes . StrChunk ( id , value . length , value ) ;
141125 }
142126 } ) ;
@@ -145,7 +129,7 @@ export class Decoder {
145129 return rga ;
146130 }
147131
148- protected cBin ( doc : Model , node : BinaryJsonCrdtNode ) : nodes . BinNode {
132+ protected cBin ( doc : Model , node : types . BinaryJsonCrdtNode ) : nodes . BinNode {
149133 const id = this . cTs ( node . id ) ;
150134 const rga = new nodes . BinNode ( id ) ;
151135 const chunks = node . chunks ;
@@ -156,10 +140,10 @@ export class Decoder {
156140 rga . ingest ( length , ( ) => {
157141 const c = chunks [ i ++ ] ;
158142 const id = self . cTs ( c . id ) ;
159- if ( typeof ( c as JsonCrdtRgaTombstone ) . span === 'number' )
160- return new nodes . BinChunk ( id , ( c as JsonCrdtRgaTombstone ) . span , undefined ) ;
143+ if ( typeof ( c as types . JsonCrdtRgaTombstone ) . span === 'number' )
144+ return new nodes . BinChunk ( id , ( c as types . JsonCrdtRgaTombstone ) . span , undefined ) ;
161145 else {
162- const value = ( c as BinaryJsonCrdtChunk ) . value ;
146+ const value = ( c as types . BinaryJsonCrdtChunk ) . value ;
163147 const buf = fromBase64 ( value ) ;
164148 return new nodes . BinChunk ( id , buf . length , buf ) ;
165149 }
@@ -169,17 +153,17 @@ export class Decoder {
169153 return rga ;
170154 }
171155
172- protected cVal ( doc : Model , node : ValueJsonCrdtNode ) : nodes . ValNode {
156+ protected cVal ( doc : Model , node : types . ValueJsonCrdtNode ) : nodes . ValNode {
173157 const id = this . cTs ( node . id ) ;
174158 const val = this . cNode ( doc , node . node ) ;
175159 const obj = new nodes . ValNode ( doc , id , val . id ) ;
176160 doc . index . set ( id , obj ) ;
177161 return obj ;
178162 }
179163
180- protected cConst ( doc : Model , node : ConstantJsonCrdtNode ) : nodes . ConNode {
164+ protected cCon ( doc : Model , node : types . ConstantJsonCrdtNode ) : nodes . ConNode {
181165 const id = this . cTs ( node . id ) ;
182- const val = node . timestamp ? this . cTs ( node . value as JsonCrdtLogicalTimestamp ) : node . value ;
166+ const val = node . timestamp ? this . cTs ( node . value as types . JsonCrdtLogicalTimestamp ) : node . value ;
183167 const obj = new nodes . ConNode ( id , val ) ;
184168 doc . index . set ( id , obj ) ;
185169 return obj ;
0 commit comments