encode.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  3. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  4. _Object$defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = _default;
  8. var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/typeof"));
  9. var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
  10. var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
  11. var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
  12. var _startsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"));
  13. var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
  14. var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
  15. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  16. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  17. var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
  18. var _ParsePolygon = _interopRequireDefault(require("./ParsePolygon"));
  19. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  20. var _ParseOp = require("./ParseOp");
  21. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  22. /**
  23. * Copyright (c) 2015-present, Parse, LLC.
  24. * All rights reserved.
  25. *
  26. * This source code is licensed under the BSD-style license found in the
  27. * LICENSE file in the root directory of this source tree. An additional grant
  28. * of patent rights can be found in the PATENTS file in the same directory.
  29. *
  30. * @flow
  31. */
  32. function encode(value
  33. /*: mixed*/
  34. , disallowObjects
  35. /*: boolean*/
  36. , forcePointers
  37. /*: boolean*/
  38. , seen
  39. /*: Array<mixed>*/
  40. , offline
  41. /*: boolean*/
  42. )
  43. /*: any*/
  44. {
  45. if (value instanceof _ParseObject.default) {
  46. if (disallowObjects) {
  47. throw new Error('Parse Objects not allowed here');
  48. }
  49. var seenEntry = value.id ? value.className + ':' + value.id : value;
  50. if (forcePointers || !seen || (0, _indexOf.default)(seen).call(seen, seenEntry) > -1 || value.dirty() || (0, _keys.default)(value._getServerData()).length < 1) {
  51. var _context;
  52. if (offline && (0, _startsWith.default)(_context = value._getId()).call(_context, 'local')) {
  53. return value.toOfflinePointer();
  54. }
  55. return value.toPointer();
  56. }
  57. seen = (0, _concat.default)(seen).call(seen, seenEntry);
  58. return value._toFullJSON(seen, offline);
  59. }
  60. if (value instanceof _ParseOp.Op || value instanceof _ParseACL.default || value instanceof _ParseGeoPoint.default || value instanceof _ParsePolygon.default || value instanceof _ParseRelation.default) {
  61. return value.toJSON();
  62. }
  63. if (value instanceof _ParseFile.default) {
  64. if (!value.url()) {
  65. throw new Error('Tried to encode an unsaved file.');
  66. }
  67. return value.toJSON();
  68. }
  69. if (Object.prototype.toString.call(value) === '[object Date]') {
  70. if (isNaN(value)) {
  71. throw new Error('Tried to encode an invalid date.');
  72. }
  73. return {
  74. __type: 'Date',
  75. iso: value
  76. /*: any*/
  77. .toJSON()
  78. };
  79. }
  80. if (Object.prototype.toString.call(value) === '[object RegExp]' && typeof value.source === 'string') {
  81. return value.source;
  82. }
  83. if ((0, _isArray.default)(value)) {
  84. return (0, _map.default)(value).call(value, function (v) {
  85. return encode(v, disallowObjects, forcePointers, seen, offline);
  86. });
  87. }
  88. if (value && (0, _typeof2.default)(value) === 'object') {
  89. var output = {};
  90. for (var k in value) {
  91. output[k] = encode(value[k], disallowObjects, forcePointers, seen, offline);
  92. }
  93. return output;
  94. }
  95. return value;
  96. }
  97. function _default(value
  98. /*: mixed*/
  99. , disallowObjects
  100. /*:: ?: boolean*/
  101. , forcePointers
  102. /*:: ?: boolean*/
  103. , seen
  104. /*:: ?: Array<mixed>*/
  105. , offline
  106. /*:: ?: boolean*/
  107. )
  108. /*: any*/
  109. {
  110. return encode(value, !!disallowObjects, !!forcePointers, seen || [], offline);
  111. }