docs: function(propertyA, propertyB, opts) {
    opts = opts || {}
    const typeA = identify(propertyA);
    const typeB = identify(propertyB);
  
    // Simple value comparison
    if (typeA === types.string || typeA === types.number || typeA === types.boolean || typeA === types.function) {
      return propertyA === propertyB;
    }
    else if (typeA === types.array) {
      return propertyA.sort().toString() === propertyB.sort().toString();
    }
    else if (typeA === types.date) {
      return propertyA.valueOf() === propertyB.valueOf();
    }
    else if (typeA === types.object) {
      return compareObjectWithKeys(propertyA, propertyB)
    }
    else if (typeA === types.class) {
      if (opts.classComparator) {
        opts.classComparator(propertyA, propertyB);
      } else if (propertyA.constructor.name !== propertyB.constructor.name) {
        return false;
      }
      return compareObjectWithKeys(propertyA, propertyB)
    }
    return typeA === typeB;
  }