@@ -23,7 +23,6 @@ import { nodeFromJSON } from '../snap/nodeFromJSON';
23
23
import { PRIORITY_INDEX } from '../snap/indexes/PriorityIndex' ;
24
24
import { Node } from '../snap/Node' ;
25
25
import { ChildrenNode } from '../snap/ChildrenNode' ;
26
- import { SyncTree } from '../SyncTree' ;
27
26
import { Indexable } from './misc' ;
28
27
29
28
/**
@@ -49,65 +48,17 @@ export const generateWithValues = function(
49
48
* @return {!(string|number|boolean) }
50
49
*/
51
50
export const resolveDeferredValue = function (
52
- value : { [ k : string ] : unknown } | string | number | boolean ,
53
- existing : Node ,
54
- serverValues : { [ k : string ] : unknown }
51
+ value : { [ k : string ] : any } | string | number | boolean ,
52
+ serverValues : { [ k : string ] : any }
55
53
) : string | number | boolean {
56
54
if ( ! value || typeof value !== 'object' ) {
57
55
return value as string | number | boolean ;
58
- }
59
- assert ( '.sv' in value , 'Unexpected leaf node or priority contents' ) ;
60
-
61
- if ( typeof value [ '.sv' ] === 'string' ) {
62
- return resolveScalarDeferredValue ( value [ '.sv' ] , existing , serverValues ) ;
63
- } else if ( typeof value [ '.sv' ] === 'object' ) {
64
- return resolveComplexDeferredValue ( value [ '.sv' ] , existing , serverValues ) ;
65
56
} else {
66
57
assert ( false , 'Unexpected server value: ' + JSON . stringify ( value , null , 2 ) ) ;
58
+ return serverValues [ value [ '.sv' ] ] ;
67
59
}
68
60
} ;
69
61
70
- const resolveScalarDeferredValue = function (
71
- op : string ,
72
- existing : Node ,
73
- serverValues : { [ k : string ] : unknown }
74
- ) : string | number | boolean {
75
- switch ( op ) {
76
- case 'timestamp' :
77
- return serverValues [ 'timestamp' ] as string | number | boolean ;
78
- default :
79
- assert ( false , 'Unexpected server value: ' + op ) ;
80
- }
81
- } ;
82
-
83
- const resolveComplexDeferredValue = function (
84
- op : object ,
85
- existing : Node ,
86
- unused : { [ k : string ] : unknown }
87
- ) : string | number | boolean {
88
- if ( ! op . hasOwnProperty ( 'increment' ) ) {
89
- assert ( false , 'Unexpected server value: ' + JSON . stringify ( op , null , 2 ) ) ;
90
- }
91
- const delta = op [ 'increment' ] ;
92
- if ( typeof delta !== 'number' ) {
93
- assert ( false , 'Unexpected increment value: ' + delta ) ;
94
- }
95
-
96
- // Incrementing a non-number sets the value to the incremented amount
97
- if ( ! existing . isLeafNode ( ) ) {
98
- return delta ;
99
- }
100
-
101
- const leaf = existing as LeafNode ;
102
- const existingVal = leaf . getValue ( ) ;
103
- if ( typeof existingVal !== 'number' ) {
104
- return delta ;
105
- }
106
-
107
- // No need to do over/underflow arithmetic here because JS only handles floats under the covers
108
- return existingVal + delta ;
109
- } ;
110
-
111
62
/**
112
63
* Recursively replace all deferred values and priorities in the tree with the
113
64
* specified generated replacement values.
@@ -117,19 +68,13 @@ const resolveComplexDeferredValue = function(
117
68
*/
118
69
export const resolveDeferredValueTree = function (
119
70
tree : SparseSnapshotTree ,
120
- syncTree : SyncTree ,
121
- serverValues : Indexable
71
+ serverValues : Object
122
72
) : SparseSnapshotTree {
123
73
const resolvedTree = new SparseSnapshotTree ( ) ;
124
- tree . forEachTree ( new Path ( '' ) , ( path , node ) => {
125
- const existing = syncTree . calcCompleteEventCache ( path ) ;
126
- assert (
127
- existing !== null && typeof existing !== 'undefined' ,
128
- 'Expected ChildrenNode.EMPTY_NODE for nulls'
129
- ) ;
74
+ tree . forEachTree ( new Path ( '' ) , function ( path , node ) {
130
75
resolvedTree . remember (
131
76
path ,
132
- resolveDeferredValueSnapshot ( node , existing , serverValues )
77
+ resolveDeferredValueSnapshot ( node , serverValues )
133
78
) ;
134
79
} ) ;
135
80
return resolvedTree ;
@@ -145,29 +90,20 @@ export const resolveDeferredValueTree = function(
145
90
*/
146
91
export const resolveDeferredValueSnapshot = function (
147
92
node : Node ,
148
- existing : Node ,
149
- serverValues : Indexable
93
+ serverValues : Object
150
94
) : Node {
151
95
const rawPri = node . getPriority ( ) . val ( ) as
152
96
| Indexable
153
97
| boolean
154
98
| null
155
99
| number
156
100
| string ;
157
- const priority = resolveDeferredValue (
158
- rawPri ,
159
- existing . getPriority ( ) ,
160
- serverValues
161
- ) ;
101
+ const priority = resolveDeferredValue ( rawPri , serverValues ) ;
162
102
let newNode : Node ;
163
103
164
104
if ( node . isLeafNode ( ) ) {
165
105
const leafNode = node as LeafNode ;
166
- const value = resolveDeferredValue (
167
- leafNode . getValue ( ) ,
168
- existing ,
169
- serverValues
170
- ) ;
106
+ const value = resolveDeferredValue ( leafNode . getValue ( ) , serverValues ) ;
171
107
if (
172
108
value !== leafNode . getValue ( ) ||
173
109
priority !== leafNode . getPriority ( ) . val ( )
@@ -185,7 +121,6 @@ export const resolveDeferredValueSnapshot = function(
185
121
childrenNode . forEachChild ( PRIORITY_INDEX , ( childName , childNode ) => {
186
122
const newChildNode = resolveDeferredValueSnapshot (
187
123
childNode ,
188
- existing . getImmediateChild ( childName ) ,
189
124
serverValues
190
125
) ;
191
126
if ( newChildNode !== childNode ) {
0 commit comments