unsavedChildren.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = unsavedChildren;
  6. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  7. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  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. if (obj instanceof _ParseObject.default) {
  32. if (!obj.id && shouldThrow) {
  33. throw new Error('Cannot create a pointer to an unsaved Object.');
  34. }
  35. var _identifier = obj.className + ':' + obj._getId();
  36. if (!encountered.objects[_identifier]) {
  37. encountered.objects[_identifier] = obj.dirty() ? obj : true;
  38. var attributes = obj.attributes;
  39. for (var attr in attributes) {
  40. if (typeof attributes[attr] === 'object') {
  41. traverse(attributes[attr], encountered, !allowDeepUnsaved, allowDeepUnsaved);
  42. }
  43. }
  44. }
  45. return;
  46. }
  47. if (obj instanceof _ParseFile.default) {
  48. if (!obj.url() && encountered.files.indexOf(obj) < 0) {
  49. encountered.files.push(obj);
  50. }
  51. return;
  52. }
  53. if (obj instanceof _ParseRelation.default) {
  54. return;
  55. }
  56. if (Array.isArray(obj)) {
  57. obj.forEach(function (el) {
  58. if (typeof el === 'object') {
  59. traverse(el, encountered, shouldThrow, allowDeepUnsaved);
  60. }
  61. });
  62. }
  63. for (var k in obj) {
  64. if (typeof obj[k] === 'object') {
  65. traverse(obj[k], encountered, shouldThrow, allowDeepUnsaved);
  66. }
  67. }
  68. }