unsavedChildren.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = unsavedChildren;
  6. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  7. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  8. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  9. function unsavedChildren(obj, allowDeepUnsaved) {
  10. var encountered = {
  11. objects: {},
  12. files: []
  13. };
  14. var identifier = obj.className + ':' + obj._getId();
  15. encountered.objects[identifier] = obj.dirty() ? obj : true;
  16. var attributes = obj.attributes;
  17. for (var attr in attributes) {
  18. if (typeof attributes[attr] === 'object') {
  19. traverse(attributes[attr], encountered, false, !!allowDeepUnsaved);
  20. }
  21. }
  22. var unsaved = [];
  23. for (var id in encountered.objects) {
  24. if (id !== identifier && encountered.objects[id] !== true) {
  25. unsaved.push(encountered.objects[id]);
  26. }
  27. }
  28. return unsaved.concat(encountered.files);
  29. }
  30. function traverse(obj, encountered, shouldThrow, allowDeepUnsaved) {
  31. var ParseObject = _CoreManager.default.getParseObject();
  32. if (obj instanceof ParseObject) {
  33. if (!obj.id && shouldThrow) {
  34. throw new Error('Cannot create a pointer to an unsaved Object.');
  35. }
  36. var identifier = obj.className + ':' + obj._getId();
  37. if (!encountered.objects[identifier]) {
  38. encountered.objects[identifier] = obj.dirty() ? obj : true;
  39. var attributes = obj.attributes;
  40. for (var attr in attributes) {
  41. if (typeof attributes[attr] === 'object') {
  42. traverse(attributes[attr], encountered, !allowDeepUnsaved, allowDeepUnsaved);
  43. }
  44. }
  45. }
  46. return;
  47. }
  48. if (obj instanceof _ParseFile.default) {
  49. if (!obj.url() && encountered.files.indexOf(obj) < 0) {
  50. encountered.files.push(obj);
  51. }
  52. return;
  53. }
  54. if (obj instanceof _ParseRelation.default) {
  55. return;
  56. }
  57. if (Array.isArray(obj)) {
  58. obj.forEach(function (el) {
  59. if (typeof el === 'object') {
  60. traverse(el, encountered, shouldThrow, allowDeepUnsaved);
  61. }
  62. });
  63. }
  64. for (var k in obj) {
  65. if (typeof obj[k] === 'object') {
  66. traverse(obj[k], encountered, shouldThrow, allowDeepUnsaved);
  67. }
  68. }
  69. }