schemaFields.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.transformToParse = exports.transformToGraphQL = void 0;
  6. var _node = _interopRequireDefault(require("parse/node"));
  7. function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
  8. function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
  9. function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
  10. function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
  11. function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
  12. function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
  13. const transformToParse = (graphQLSchemaFields, existingFields) => {
  14. if (!graphQLSchemaFields) {
  15. return {};
  16. }
  17. let parseSchemaFields = {};
  18. const reducerGenerator = type => (parseSchemaFields, field) => {
  19. if (type === 'Remove') {
  20. if (existingFields[field.name]) {
  21. return _objectSpread(_objectSpread({}, parseSchemaFields), {}, {
  22. [field.name]: {
  23. __op: 'Delete'
  24. }
  25. });
  26. } else {
  27. return parseSchemaFields;
  28. }
  29. }
  30. if (graphQLSchemaFields.remove && graphQLSchemaFields.remove.find(removeField => removeField.name === field.name)) {
  31. return parseSchemaFields;
  32. }
  33. if (parseSchemaFields[field.name] || existingFields && existingFields[field.name]) {
  34. throw new _node.default.Error(_node.default.Error.INVALID_KEY_NAME, `Duplicated field name: ${field.name}`);
  35. }
  36. if (type === 'Relation' || type === 'Pointer') {
  37. return _objectSpread(_objectSpread({}, parseSchemaFields), {}, {
  38. [field.name]: {
  39. type,
  40. targetClass: field.targetClassName
  41. }
  42. });
  43. }
  44. return _objectSpread(_objectSpread({}, parseSchemaFields), {}, {
  45. [field.name]: {
  46. type
  47. }
  48. });
  49. };
  50. if (graphQLSchemaFields.addStrings) {
  51. parseSchemaFields = graphQLSchemaFields.addStrings.reduce(reducerGenerator('String'), parseSchemaFields);
  52. }
  53. if (graphQLSchemaFields.addNumbers) {
  54. parseSchemaFields = graphQLSchemaFields.addNumbers.reduce(reducerGenerator('Number'), parseSchemaFields);
  55. }
  56. if (graphQLSchemaFields.addBooleans) {
  57. parseSchemaFields = graphQLSchemaFields.addBooleans.reduce(reducerGenerator('Boolean'), parseSchemaFields);
  58. }
  59. if (graphQLSchemaFields.addArrays) {
  60. parseSchemaFields = graphQLSchemaFields.addArrays.reduce(reducerGenerator('Array'), parseSchemaFields);
  61. }
  62. if (graphQLSchemaFields.addObjects) {
  63. parseSchemaFields = graphQLSchemaFields.addObjects.reduce(reducerGenerator('Object'), parseSchemaFields);
  64. }
  65. if (graphQLSchemaFields.addDates) {
  66. parseSchemaFields = graphQLSchemaFields.addDates.reduce(reducerGenerator('Date'), parseSchemaFields);
  67. }
  68. if (graphQLSchemaFields.addFiles) {
  69. parseSchemaFields = graphQLSchemaFields.addFiles.reduce(reducerGenerator('File'), parseSchemaFields);
  70. }
  71. if (graphQLSchemaFields.addGeoPoint) {
  72. parseSchemaFields = [graphQLSchemaFields.addGeoPoint].reduce(reducerGenerator('GeoPoint'), parseSchemaFields);
  73. }
  74. if (graphQLSchemaFields.addPolygons) {
  75. parseSchemaFields = graphQLSchemaFields.addPolygons.reduce(reducerGenerator('Polygon'), parseSchemaFields);
  76. }
  77. if (graphQLSchemaFields.addBytes) {
  78. parseSchemaFields = graphQLSchemaFields.addBytes.reduce(reducerGenerator('Bytes'), parseSchemaFields);
  79. }
  80. if (graphQLSchemaFields.addPointers) {
  81. parseSchemaFields = graphQLSchemaFields.addPointers.reduce(reducerGenerator('Pointer'), parseSchemaFields);
  82. }
  83. if (graphQLSchemaFields.addRelations) {
  84. parseSchemaFields = graphQLSchemaFields.addRelations.reduce(reducerGenerator('Relation'), parseSchemaFields);
  85. }
  86. if (existingFields && graphQLSchemaFields.remove) {
  87. parseSchemaFields = graphQLSchemaFields.remove.reduce(reducerGenerator('Remove'), parseSchemaFields);
  88. }
  89. return parseSchemaFields;
  90. };
  91. exports.transformToParse = transformToParse;
  92. const transformToGraphQL = parseSchemaFields => {
  93. return Object.keys(parseSchemaFields).map(name => ({
  94. name,
  95. type: parseSchemaFields[name].type,
  96. targetClassName: parseSchemaFields[name].targetClass
  97. }));
  98. };
  99. exports.transformToGraphQL = transformToGraphQL;
  100. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInRyYW5zZm9ybVRvUGFyc2UiLCJncmFwaFFMU2NoZW1hRmllbGRzIiwiZXhpc3RpbmdGaWVsZHMiLCJwYXJzZVNjaGVtYUZpZWxkcyIsInJlZHVjZXJHZW5lcmF0b3IiLCJ0eXBlIiwiZmllbGQiLCJuYW1lIiwiX19vcCIsInJlbW92ZSIsImZpbmQiLCJyZW1vdmVGaWVsZCIsIlBhcnNlIiwiRXJyb3IiLCJJTlZBTElEX0tFWV9OQU1FIiwidGFyZ2V0Q2xhc3MiLCJ0YXJnZXRDbGFzc05hbWUiLCJhZGRTdHJpbmdzIiwicmVkdWNlIiwiYWRkTnVtYmVycyIsImFkZEJvb2xlYW5zIiwiYWRkQXJyYXlzIiwiYWRkT2JqZWN0cyIsImFkZERhdGVzIiwiYWRkRmlsZXMiLCJhZGRHZW9Qb2ludCIsImFkZFBvbHlnb25zIiwiYWRkQnl0ZXMiLCJhZGRQb2ludGVycyIsImFkZFJlbGF0aW9ucyIsImV4cG9ydHMiLCJ0cmFuc2Zvcm1Ub0dyYXBoUUwiLCJtYXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvR3JhcGhRTC90cmFuc2Zvcm1lcnMvc2NoZW1hRmllbGRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcblxuY29uc3QgdHJhbnNmb3JtVG9QYXJzZSA9IChncmFwaFFMU2NoZW1hRmllbGRzLCBleGlzdGluZ0ZpZWxkcykgPT4ge1xuICBpZiAoIWdyYXBoUUxTY2hlbWFGaWVsZHMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgcGFyc2VTY2hlbWFGaWVsZHMgPSB7fTtcblxuICBjb25zdCByZWR1Y2VyR2VuZXJhdG9yID0gdHlwZSA9PiAocGFyc2VTY2hlbWFGaWVsZHMsIGZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdSZW1vdmUnKSB7XG4gICAgICBpZiAoZXhpc3RpbmdGaWVsZHNbZmllbGQubmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wYXJzZVNjaGVtYUZpZWxkcyxcbiAgICAgICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgICAgIF9fb3A6ICdEZWxldGUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VTY2hlbWFGaWVsZHM7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGdyYXBoUUxTY2hlbWFGaWVsZHMucmVtb3ZlICYmXG4gICAgICBncmFwaFFMU2NoZW1hRmllbGRzLnJlbW92ZS5maW5kKHJlbW92ZUZpZWxkID0+IHJlbW92ZUZpZWxkLm5hbWUgPT09IGZpZWxkLm5hbWUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gcGFyc2VTY2hlbWFGaWVsZHM7XG4gICAgfVxuICAgIGlmIChwYXJzZVNjaGVtYUZpZWxkc1tmaWVsZC5uYW1lXSB8fCAoZXhpc3RpbmdGaWVsZHMgJiYgZXhpc3RpbmdGaWVsZHNbZmllbGQubmFtZV0pKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgYER1cGxpY2F0ZWQgZmllbGQgbmFtZTogJHtmaWVsZC5uYW1lfWApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ1JlbGF0aW9uJyB8fCB0eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBhcnNlU2NoZW1hRmllbGRzLFxuICAgICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHRhcmdldENsYXNzOiBmaWVsZC50YXJnZXRDbGFzc05hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyc2VTY2hlbWFGaWVsZHMsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcblxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRTdHJpbmdzKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZFN0cmluZ3MucmVkdWNlKFxuICAgICAgcmVkdWNlckdlbmVyYXRvcignU3RyaW5nJyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkTnVtYmVycykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGROdW1iZXJzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ051bWJlcicpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZEJvb2xlYW5zKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZEJvb2xlYW5zLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ0Jvb2xlYW4nKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRBcnJheXMpIHtcbiAgICBwYXJzZVNjaGVtYUZpZWxkcyA9IGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkQXJyYXlzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ0FycmF5JyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkT2JqZWN0cykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRPYmplY3RzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ09iamVjdCcpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZERhdGVzKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZERhdGVzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ0RhdGUnKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRGaWxlcykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRGaWxlcy5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdGaWxlJyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkR2VvUG9pbnQpIHtcbiAgICBwYXJzZVNjaGVtYUZpZWxkcyA9IFtncmFwaFFMU2NoZW1hRmllbGRzLmFkZEdlb1BvaW50XS5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdHZW9Qb2ludCcpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvbHlnb25zKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvbHlnb25zLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ1BvbHlnb24nKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRCeXRlcykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRCeXRlcy5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdCeXRlcycpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvaW50ZXJzKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvaW50ZXJzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ1BvaW50ZXInKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRSZWxhdGlvbnMpIHtcbiAgICBwYXJzZVNjaGVtYUZpZWxkcyA9IGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkUmVsYXRpb25zLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ1JlbGF0aW9uJyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGV4aXN0aW5nRmllbGRzICYmIGdyYXBoUUxTY2hlbWFGaWVsZHMucmVtb3ZlKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLnJlbW92ZS5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdSZW1vdmUnKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZVNjaGVtYUZpZWxkcztcbn07XG5cbmNvbnN0IHRyYW5zZm9ybVRvR3JhcGhRTCA9IHBhcnNlU2NoZW1hRmllbGRzID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcnNlU2NoZW1hRmllbGRzKS5tYXAobmFtZSA9PiAoe1xuICAgIG5hbWUsXG4gICAgdHlwZTogcGFyc2VTY2hlbWFGaWVsZHNbbmFtZV0udHlwZSxcbiAgICB0YXJnZXRDbGFzc05hbWU6IHBhcnNlU2NoZW1hRmllbGRzW25hbWVdLnRhcmdldENsYXNzLFxuICB9KSk7XG59O1xuXG5leHBvcnQgeyB0cmFuc2Zvcm1Ub1BhcnNlLCB0cmFuc2Zvcm1Ub0dyYXBoUUwgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQStCLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBWCxDQUFBLEVBQUFJLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFmLENBQUEsYUFBQUksQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMs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