@@ -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 . JsonCrdtVerboseDocument ) : 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 . JsonCrdtVerboseLogicalTimestamp [ ] ) : 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 . JsonCrdtVerboseTimestamp ) : 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 {
50- const val = node ? this . cNode ( doc , node ) : new nodes . ConNode ( doc . clock . tick ( 0 ) , null ) ;
33+ protected cRoot ( doc : Model , { value } : types . JsonCrdtVerboseVal ) : void {
34+ const val = value ? this . cNode ( doc , value ) : 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,44 +46,45 @@ 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 ) ;
67- case 'tup ' :
68- return this . cTup ( doc , node ) ;
49+ case 'con ' :
50+ return this . cCon ( doc , node ) ;
51+ case 'vec ' :
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 . JsonCrdtVerboseObj ) : nodes . ObjNode {
7660 const id = this . cTs ( node . id ) ;
7761 const obj = new nodes . ObjNode ( doc , id ) ;
78- const keys = Object . keys ( node . keys ) ;
62+ const map = node . map ;
63+ const keys = Object . keys ( map ) ;
7964 for ( const key of keys ) {
80- const keyNode = node . keys [ key ] ;
65+ const keyNode = map [ key ] ;
8166 obj . put ( key , this . cNode ( doc , keyNode ) . id ) ;
8267 }
8368 doc . index . set ( id , obj ) ;
8469 return obj ;
8570 }
8671
87- protected cTup ( doc : Model , node : TupleJsonCrdtNode ) : nodes . VecNode {
72+ protected cVec ( doc : Model , node : types . JsonCrdtVerboseVec ) : nodes . VecNode {
8873 const id = this . cTs ( node . id ) ;
8974 const obj = new nodes . VecNode ( doc , id ) ;
9075 const elements = obj . elements ;
91- const components = node . components ;
92- const length = components . length ;
76+ const map = node . map ;
77+ const length = map . length ;
9378 for ( let i = 0 ; i < length ; i ++ ) {
94- const component = components [ i ] ;
79+ const component = map [ i ] ;
9580 if ( ! component ) elements . push ( undefined ) ;
9681 else elements . push ( this . cNode ( doc , component ) . id ) ;
9782 }
9883 doc . index . set ( id , obj ) ;
9984 return obj ;
10085 }
10186
102- protected cArr ( doc : Model , node : ArrayJsonCrdtNode ) : nodes . ArrNode {
87+ protected cArr ( doc : Model , node : types . JsonCrdtVerboseArr ) : nodes . ArrNode {
10388 const id = this . cTs ( node . id ) ;
10489 const rga = new nodes . ArrNode ( doc , id ) ;
10590 const chunks = node . chunks ;
@@ -110,10 +95,10 @@ export class Decoder {
11095 rga . ingest ( length , ( ) => {
11196 const c = chunks [ i ++ ] ;
11297 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 ) ;
98+ if ( typeof ( c as types . JsonCrdtVerboseTombstone ) . span === 'number' )
99+ return new nodes . ArrChunk ( id , ( c as types . JsonCrdtVerboseTombstone ) . span , undefined ) ;
115100 else {
116- const ids = ( c as ArrayJsonCrdtChunk ) . nodes . map ( ( n ) => this . cNode ( doc , n ) . id ) ;
101+ const ids = ( c as types . JsonCrdtVerboseArrChunk ) . value . map ( ( n ) => this . cNode ( doc , n ) . id ) ;
117102 return new nodes . ArrChunk ( id , ids . length , ids ) ;
118103 }
119104 } ) ;
@@ -122,7 +107,7 @@ export class Decoder {
122107 return rga ;
123108 }
124109
125- protected cStr ( doc : Model , node : StringJsonCrdtNode ) : nodes . StrNode {
110+ protected cStr ( doc : Model , node : types . JsonCrdtVerboseStr ) : nodes . StrNode {
126111 const id = this . cTs ( node . id ) ;
127112 const rga = new nodes . StrNode ( id ) ;
128113 const chunks = node . chunks ;
@@ -133,10 +118,10 @@ export class Decoder {
133118 rga . ingest ( length , ( ) => {
134119 const c = chunks [ i ++ ] ;
135120 const id = self . cTs ( c . id ) ;
136- if ( typeof ( c as JsonCrdtRgaTombstone ) . span === 'number' )
137- return new nodes . StrChunk ( id , ( c as JsonCrdtRgaTombstone ) . span , '' ) ;
121+ if ( typeof ( c as types . JsonCrdtVerboseTombstone ) . span === 'number' )
122+ return new nodes . StrChunk ( id , ( c as types . JsonCrdtVerboseTombstone ) . span , '' ) ;
138123 else {
139- const value = ( c as StringJsonCrdtChunk ) . value ;
124+ const value = ( c as types . JsonCrdtVerboseStrChunk ) . value ;
140125 return new nodes . StrChunk ( id , value . length , value ) ;
141126 }
142127 } ) ;
@@ -145,7 +130,7 @@ export class Decoder {
145130 return rga ;
146131 }
147132
148- protected cBin ( doc : Model , node : BinaryJsonCrdtNode ) : nodes . BinNode {
133+ protected cBin ( doc : Model , node : types . JsonCrdtVerboseBin ) : nodes . BinNode {
149134 const id = this . cTs ( node . id ) ;
150135 const rga = new nodes . BinNode ( id ) ;
151136 const chunks = node . chunks ;
@@ -156,10 +141,10 @@ export class Decoder {
156141 rga . ingest ( length , ( ) => {
157142 const c = chunks [ i ++ ] ;
158143 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 ) ;
144+ if ( typeof ( c as types . JsonCrdtVerboseTombstone ) . span === 'number' )
145+ return new nodes . BinChunk ( id , ( c as types . JsonCrdtVerboseTombstone ) . span , undefined ) ;
161146 else {
162- const value = ( c as BinaryJsonCrdtChunk ) . value ;
147+ const value = ( c as types . JsonCrdtVerboseBinChunk ) . value ;
163148 const buf = fromBase64 ( value ) ;
164149 return new nodes . BinChunk ( id , buf . length , buf ) ;
165150 }
@@ -169,17 +154,17 @@ export class Decoder {
169154 return rga ;
170155 }
171156
172- protected cVal ( doc : Model , node : ValueJsonCrdtNode ) : nodes . ValNode {
157+ protected cVal ( doc : Model , node : types . JsonCrdtVerboseVal ) : nodes . ValNode {
173158 const id = this . cTs ( node . id ) ;
174- const val = this . cNode ( doc , node . node ) ;
159+ const val = this . cNode ( doc , node . value ) ;
175160 const obj = new nodes . ValNode ( doc , id , val . id ) ;
176161 doc . index . set ( id , obj ) ;
177162 return obj ;
178163 }
179164
180- protected cConst ( doc : Model , node : ConstantJsonCrdtNode ) : nodes . ConNode {
165+ protected cCon ( doc : Model , node : types . JsonCrdtVerboseCon ) : nodes . ConNode {
181166 const id = this . cTs ( node . id ) ;
182- const val = node . timestamp ? this . cTs ( node . value as JsonCrdtLogicalTimestamp ) : node . value ;
167+ const val = node . timestamp ? this . cTs ( node . value as types . JsonCrdtVerboseLogicalTimestamp ) : node . value ;
183168 const obj = new nodes . ConNode ( id , val ) ;
184169 doc . index . set ( id , obj ) ;
185170 return obj ;
0 commit comments