repo_description: A fast, local first, reactive Database for JavaScript Applications https://rxdb.info/
repo_topics: angular browser-database couchdb crdt database firebase graphql indexeddb ionic local-first localstorage nodejs nosql postgres pouchdb react-native realtime realtime-database rxdb sqlite
code: import {
      deepEqual,
      flatClone
  } from '../plugins/utils/index.ts';
  import { stripAttachmentsDataFromDocument } from '../rx-storage-helper.ts';
  import type { RxConflictHandler, RxDocumentData } from '../types';
  
  export const defaultConflictHandler: RxConflictHandler<any> = {
      isEqual(a, b, _ctx) {
          a = addAttachmentsIfNotExists(a);
          b = addAttachmentsIfNotExists(b);
  
          /**
           * If the documents are deep equal,
           * we have no conflict.
           * On your custom conflict handler you might only
           * check some properties, like the updatedAt time,
           * for better performance, because deepEqual is expensive.
          */
          const ret = deepEqual(
              stripAttachmentsDataFromDocument(a),
              stripAttachmentsDataFromDocument(b)
          );
  
          return ret;
      },
      resolve(i) {
          /**
           * The default conflict handler will always
           * drop the fork state and use the master state instead.
           */
          return i.realMasterState;
      }
  };
  
  
  function addAttachmentsIfNotExists<T>(d: RxDocumentData<T>): RxDocumentData<T> {
      if (!d._attachments) {
          d = flatClone(d);
          d._attachments = {};
      }
      return d;
  }
  