equals.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = equals;
  6. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  7. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  8. var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
  9. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  10. function equals(a, b) {
  11. var toString = Object.prototype.toString;
  12. if (toString.call(a) === '[object Date]' || toString.call(b) === '[object Date]') {
  13. var dateA = new Date(a);
  14. var dateB = new Date(b);
  15. return +dateA === +dateB;
  16. }
  17. if (typeof a !== typeof b) {
  18. return false;
  19. }
  20. if (!a || typeof a !== 'object') {
  21. return a === b;
  22. }
  23. if (Array.isArray(a) || Array.isArray(b)) {
  24. if (!Array.isArray(a) || !Array.isArray(b)) {
  25. return false;
  26. }
  27. if (a.length !== b.length) {
  28. return false;
  29. }
  30. for (var i = a.length; i--;) {
  31. if (!equals(a[i], b[i])) {
  32. return false;
  33. }
  34. }
  35. return true;
  36. }
  37. if (a instanceof _ParseACL.default || a instanceof _ParseFile.default || a instanceof _ParseGeoPoint.default || a instanceof _ParseObject.default) {
  38. return a.equals(b);
  39. }
  40. if (b instanceof _ParseObject.default) {
  41. if (a.__type === 'Object' || a.__type === 'Pointer') {
  42. return a.objectId === b.id && a.className === b.className;
  43. }
  44. }
  45. if (Object.keys(a).length !== Object.keys(b).length) {
  46. return false;
  47. }
  48. for (var k in a) {
  49. if (!equals(a[k], b[k])) {
  50. return false;
  51. }
  52. }
  53. return true;
  54. }