@@ -10,11 +10,11 @@ import {ArrNode, BinNode, ConNode, JsonNode, ObjNode, StrNode, ValNode, VecNode}
1010 * @param b The second JSON CRDT node.
1111 * @returns True if the schemas and values are equal, false otherwise.
1212 */
13- export const equalSchema = < A extends JsonNode < any > > ( a : A , b : unknown ) : b is A => {
13+ export const equalSchema = < A extends JsonNode < any > > ( a : A , b : unknown , compareContent : boolean ) : b is A => {
1414 if ( a === b ) return true ;
15- if ( a instanceof ConNode ) return b instanceof ConNode && deepEqual ( a . val , b . val ) ;
16- else if ( a instanceof ValNode ) return b instanceof ValNode && equalSchema ( a . node ( ) , b . node ( ) ) ;
17- else if ( a instanceof StrNode ) return b instanceof StrNode && a . length ( ) === b . length ( ) && a . view ( ) === b . view ( ) ;
15+ if ( a instanceof ConNode ) return b instanceof ConNode && ( ! compareContent || deepEqual ( a . val , b . val ) ) ;
16+ else if ( a instanceof ValNode ) return b instanceof ValNode && equalSchema ( a . node ( ) , b . node ( ) , compareContent ) ;
17+ else if ( a instanceof StrNode ) return b instanceof StrNode && ( ! compareContent || ( a . length ( ) === b . length ( ) && a . view ( ) === b . view ( ) ) ) ;
1818 else if ( a instanceof ObjNode ) {
1919 if ( ! ( b instanceof ObjNode ) ) return false ;
2020 const keys1 = a . keys ;
@@ -24,22 +24,22 @@ export const equalSchema = <A extends JsonNode<any>>(a: A, b: unknown): b is A =
2424 if ( length1 !== length2 ) return false ;
2525 for ( const key of keys1 . keys ( ) ) {
2626 if ( ! keys2 . has ( key ) ) return false ;
27- if ( ! equalSchema ( a . get ( key ) , b . get ( key ) ) ) return false ;
27+ if ( ! equalSchema ( a . get ( key ) , b . get ( key ) , compareContent ) ) return false ;
2828 }
2929 return true ;
3030 } else if ( a instanceof ArrNode ) {
3131 if ( ! ( b instanceof ArrNode ) ) return false ;
3232 const length = a . length ( ) ;
3333 if ( length !== b . length ( ) ) return false ;
34- for ( let i = 0 ; i < length ; i ++ ) if ( ! equalSchema ( a . getNode ( i ) ! , b . getNode ( i ) ) ) return false ;
34+ for ( let i = 0 ; i < length ; i ++ ) if ( ! equalSchema ( a . getNode ( i ) ! , b . getNode ( i ) , compareContent ) ) return false ;
3535 return true ;
3636 } else if ( a instanceof VecNode ) {
3737 if ( ! ( b instanceof VecNode ) ) return false ;
3838 const length = a . length ( ) ;
3939 if ( length !== b . length ( ) ) return false ;
40- for ( let i = 0 ; i < length ; i ++ ) if ( ! equalSchema ( a . get ( i ) , b . get ( i ) ) ) return false ;
40+ for ( let i = 0 ; i < length ; i ++ ) if ( ! equalSchema ( a . get ( i ) , b . get ( i ) , compareContent ) ) return false ;
4141 return true ;
4242 } else if ( a instanceof BinNode )
43- return b instanceof BinNode && a . length ( ) === b . length ( ) && deepEqual ( a . view ( ) , b . view ( ) ) ;
43+ return b instanceof BinNode && ( ! compareContent || ( a . length ( ) === b . length ( ) && deepEqual ( a . view ( ) , b . view ( ) ) ) ) ;
4444 return false ;
4545} ;
0 commit comments