encode.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = _default;
  6. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  7. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  8. var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
  9. var _ParsePolygon = _interopRequireDefault(require("./ParsePolygon"));
  10. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  11. var _ParseOp = require("./ParseOp");
  12. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  13. function _interopRequireDefault(obj) {
  14. return obj && obj.__esModule ? obj : {
  15. default: obj
  16. };
  17. }
  18. /**
  19. * @flow
  20. */
  21. function encode(value /*: mixed*/, disallowObjects /*: boolean*/, forcePointers /*: boolean*/, seen /*: Array<mixed>*/, offline /*: boolean*/) /*: any*/{
  22. if (value instanceof _ParseObject.default) {
  23. if (disallowObjects) {
  24. throw new Error('Parse Objects not allowed here');
  25. }
  26. const seenEntry = value.id ? value.className + ':' + value.id : value;
  27. if (forcePointers || !seen || seen.indexOf(seenEntry) > -1 || value.dirty() || Object.keys(value._getServerData()).length < 1) {
  28. if (offline && value._getId().startsWith('local')) {
  29. return value.toOfflinePointer();
  30. }
  31. return value.toPointer();
  32. }
  33. seen = seen.concat(seenEntry);
  34. return value._toFullJSON(seen, offline);
  35. }
  36. if (value instanceof _ParseOp.Op || value instanceof _ParseACL.default || value instanceof _ParseGeoPoint.default || value instanceof _ParsePolygon.default || value instanceof _ParseRelation.default) {
  37. return value.toJSON();
  38. }
  39. if (value instanceof _ParseFile.default) {
  40. if (!value.url()) {
  41. throw new Error('Tried to encode an unsaved file.');
  42. }
  43. return value.toJSON();
  44. }
  45. if (Object.prototype.toString.call(value) === '[object Date]') {
  46. if (isNaN(value)) {
  47. throw new Error('Tried to encode an invalid date.');
  48. }
  49. return {
  50. __type: 'Date',
  51. iso: value /*: any*/.toJSON()
  52. };
  53. }
  54. if (Object.prototype.toString.call(value) === '[object RegExp]' && typeof value.source === 'string') {
  55. return value.source;
  56. }
  57. if (Array.isArray(value)) {
  58. return value.map(v => {
  59. return encode(v, disallowObjects, forcePointers, seen, offline);
  60. });
  61. }
  62. if (value && typeof value === 'object') {
  63. const output = {};
  64. for (const k in value) {
  65. output[k] = encode(value[k], disallowObjects, forcePointers, seen, offline);
  66. }
  67. return output;
  68. }
  69. return value;
  70. }
  71. function _default(value /*: mixed*/, disallowObjects /*:: ?: boolean*/, forcePointers /*:: ?: boolean*/, seen /*:: ?: Array<mixed>*/, offline /*:: ?: boolean*/) /*: any*/{
  72. return encode(value, !!disallowObjects, !!forcePointers, seen || [], offline);
  73. }