parse-server 9.7.0-alpha.11 → 9.7.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,13 +8,21 @@ exports.createComplexityValidationPlugin = createComplexityValidationPlugin;
8
8
  var _graphql = require("graphql");
9
9
  var _logger = _interopRequireDefault(require("../../logger"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- function calculateQueryComplexity(operation, fragments) {
11
+ function calculateQueryComplexity(operation, fragments, limits = {}) {
12
12
  let maxDepth = 0;
13
13
  let totalFields = 0;
14
+ const fragmentCache = new Map();
15
+ const {
16
+ maxDepth: allowedMaxDepth,
17
+ maxFields: allowedMaxFields
18
+ } = limits;
14
19
  function visitSelectionSet(selectionSet, depth, visitedFragments) {
15
20
  if (!selectionSet) {
16
21
  return;
17
22
  }
23
+ if (allowedMaxFields !== undefined && allowedMaxFields !== -1 && totalFields > allowedMaxFields || allowedMaxDepth !== undefined && allowedMaxDepth !== -1 && maxDepth > allowedMaxDepth) {
24
+ return;
25
+ }
18
26
  for (const selection of selectionSet.selections) {
19
27
  if (selection.kind === 'Field') {
20
28
  totalFields++;
@@ -29,14 +37,36 @@ function calculateQueryComplexity(operation, fragments) {
29
37
  visitSelectionSet(selection.selectionSet, depth, visitedFragments);
30
38
  } else if (selection.kind === 'FragmentSpread') {
31
39
  const name = selection.name.value;
40
+ if (fragmentCache.has(name)) {
41
+ const cached = fragmentCache.get(name);
42
+ totalFields += cached.fields;
43
+ const adjustedDepth = depth + cached.maxDepthDelta;
44
+ if (adjustedDepth > maxDepth) {
45
+ maxDepth = adjustedDepth;
46
+ }
47
+ continue;
48
+ }
32
49
  if (visitedFragments.has(name)) {
33
50
  continue;
34
51
  }
35
52
  const fragment = fragments[name];
36
53
  if (fragment) {
37
- const branchVisited = new Set(visitedFragments);
38
- branchVisited.add(name);
39
- visitSelectionSet(fragment.selectionSet, depth, branchVisited);
54
+ if (allowedMaxFields !== undefined && allowedMaxFields !== -1 && totalFields > allowedMaxFields || allowedMaxDepth !== undefined && allowedMaxDepth !== -1 && maxDepth > allowedMaxDepth) {
55
+ continue;
56
+ }
57
+ visitedFragments.add(name);
58
+ const savedFields = totalFields;
59
+ const savedMaxDepth = maxDepth;
60
+ maxDepth = depth;
61
+ visitSelectionSet(fragment.selectionSet, depth, visitedFragments);
62
+ const fieldsContribution = totalFields - savedFields;
63
+ const maxDepthDelta = maxDepth - depth;
64
+ fragmentCache.set(name, {
65
+ fields: fieldsContribution,
66
+ maxDepthDelta
67
+ });
68
+ maxDepth = Math.max(savedMaxDepth, maxDepth);
69
+ visitedFragments.delete(name);
40
70
  }
41
71
  }
42
72
  }
@@ -75,7 +105,10 @@ function createComplexityValidationPlugin(getConfig) {
75
105
  const {
76
106
  depth,
77
107
  fields
78
- } = calculateQueryComplexity(requestContext.operation, fragments);
108
+ } = calculateQueryComplexity(requestContext.operation, fragments, {
109
+ maxDepth: graphQLDepth,
110
+ maxFields: graphQLFields
111
+ });
79
112
  if (graphQLDepth !== -1 && depth > graphQLDepth) {
80
113
  const message = `GraphQL query depth of ${depth} exceeds maximum allowed depth of ${graphQLDepth}`;
81
114
  _logger.default.warn(message);
@@ -102,4 +135,4 @@ function createComplexityValidationPlugin(getConfig) {
102
135
  })
103
136
  };
104
137
  }
105
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eSIsIm9wZXJhdGlvbiIsImZyYWdtZW50cyIsIm1heERlcHRoIiwidG90YWxGaWVsZHMiLCJ2aXNpdFNlbGVjdGlvblNldCIsInNlbGVjdGlvblNldCIsImRlcHRoIiwidmlzaXRlZEZyYWdtZW50cyIsInNlbGVjdGlvbiIsInNlbGVjdGlvbnMiLCJraW5kIiwibmV3RGVwdGgiLCJuYW1lIiwidmFsdWUiLCJoYXMiLCJmcmFnbWVudCIsImJyYW5jaFZpc2l0ZWQiLCJTZXQiLCJhZGQiLCJmaWVsZHMiLCJjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiIsImdldENvbmZpZyIsInJlcXVlc3REaWRTdGFydCIsInJlcXVlc3RDb250ZXh0IiwiZGlkUmVzb2x2ZU9wZXJhdGlvbiIsImF1dGgiLCJjb250ZXh0VmFsdWUiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJjb25maWciLCJncmFwaFFMRGVwdGgiLCJncmFwaFFMRmllbGRzIiwiZGVmaW5pdGlvbiIsImRvY3VtZW50IiwiZGVmaW5pdGlvbnMiLCJtZXNzYWdlIiwibG9nZ2VyIiwid2FybiIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvaGVscGVycy9xdWVyeUNvbXBsZXhpdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhRTEVycm9yIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eShvcGVyYXRpb24sIGZyYWdtZW50cykge1xuICBsZXQgbWF4RGVwdGggPSAwO1xuICBsZXQgdG90YWxGaWVsZHMgPSAwO1xuXG4gIGZ1bmN0aW9uIHZpc2l0U2VsZWN0aW9uU2V0KHNlbGVjdGlvblNldCwgZGVwdGgsIHZpc2l0ZWRGcmFnbWVudHMpIHtcbiAgICBpZiAoIXNlbGVjdGlvblNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25TZXQuc2VsZWN0aW9ucykge1xuICAgICAgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRmllbGQnKSB7XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGNvbnN0IG5ld0RlcHRoID0gZGVwdGggKyAxO1xuICAgICAgICBpZiAobmV3RGVwdGggPiBtYXhEZXB0aCkge1xuICAgICAgICAgIG1heERlcHRoID0gbmV3RGVwdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgICB2aXNpdFNlbGVjdGlvblNldChzZWxlY3Rpb24uc2VsZWN0aW9uU2V0LCBuZXdEZXB0aCwgdmlzaXRlZEZyYWdtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmtpbmQgPT09ICdJbmxpbmVGcmFnbWVudCcpIHtcbiAgICAgICAgdmlzaXRTZWxlY3Rpb25TZXQoc2VsZWN0aW9uLnNlbGVjdGlvblNldCwgZGVwdGgsIHZpc2l0ZWRGcmFnbWVudHMpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZyYWdtZW50U3ByZWFkJykge1xuICAgICAgICBjb25zdCBuYW1lID0gc2VsZWN0aW9uLm5hbWUudmFsdWU7XG4gICAgICAgIGlmICh2aXNpdGVkRnJhZ21lbnRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnRzW25hbWVdO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICBjb25zdCBicmFuY2hWaXNpdGVkID0gbmV3IFNldCh2aXNpdGVkRnJhZ21lbnRzKTtcbiAgICAgICAgICBicmFuY2hWaXNpdGVkLmFkZChuYW1lKTtcbiAgICAgICAgICB2aXNpdFNlbGVjdGlvblNldChmcmFnbWVudC5zZWxlY3Rpb25TZXQsIGRlcHRoLCBicmFuY2hWaXNpdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZpc2l0U2VsZWN0aW9uU2V0KG9wZXJhdGlvbi5zZWxlY3Rpb25TZXQsIDAsIG5ldyBTZXQoKSk7XG5cbiAgcmV0dXJuIHsgZGVwdGg6IG1heERlcHRoLCBmaWVsZHM6IHRvdGFsRmllbGRzIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBsZXhpdHlWYWxpZGF0aW9uUGx1Z2luKGdldENvbmZpZykge1xuICByZXR1cm4ge1xuICAgIHJlcXVlc3REaWRTdGFydDogKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuICAgICAgZGlkUmVzb2x2ZU9wZXJhdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhdXRoID0gcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlPy5hdXRoO1xuICAgICAgICBpZiAoYXV0aD8uaXNNYXN0ZXIgfHwgYXV0aD8uaXNNYWludGVuYW5jZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZ3JhcGhRTERlcHRoLCBncmFwaFFMRmllbGRzIH0gPSBjb25maWc7XG4gICAgICAgIGlmIChncmFwaFFMRGVwdGggPT09IC0xICYmIGdyYXBoUUxGaWVsZHMgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiByZXF1ZXN0Q29udGV4dC5kb2N1bWVudC5kZWZpbml0aW9ucykge1xuICAgICAgICAgIGlmIChkZWZpbml0aW9uLmtpbmQgPT09ICdGcmFnbWVudERlZmluaXRpb24nKSB7XG4gICAgICAgICAgICBmcmFnbWVudHNbZGVmaW5pdGlvbi5uYW1lLnZhbHVlXSA9IGRlZmluaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkZXB0aCwgZmllbGRzIH0gPSBjYWxjdWxhdGVRdWVyeUNvbXBsZXhpdHkoXG4gICAgICAgICAgcmVxdWVzdENvbnRleHQub3BlcmF0aW9uLFxuICAgICAgICAgIGZyYWdtZW50c1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChncmFwaFFMRGVwdGggIT09IC0xICYmIGRlcHRoID4gZ3JhcGhRTERlcHRoKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBHcmFwaFFMIHF1ZXJ5IGRlcHRoIG9mICR7ZGVwdGh9IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGRlcHRoIG9mICR7Z3JhcGhRTERlcHRofWA7XG4gICAgICAgICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcihtZXNzYWdlLCB7XG4gICAgICAgICAgICBleHRlbnNpb25zOiB7XG4gICAgICAgICAgICAgIGh0dHA6IHsgc3RhdHVzOiA0MDAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JhcGhRTEZpZWxkcyAhPT0gLTEgJiYgZmllbGRzID4gZ3JhcGhRTEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTnVtYmVyIG9mIEdyYXBoUUwgZmllbGRzICgke2ZpZWxkc30pIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkICgke2dyYXBoUUxGaWVsZHN9KWA7XG4gICAgICAgICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcihtZXNzYWdlLCB7XG4gICAgICAgICAgICBleHRlbnNpb25zOiB7XG4gICAgICAgICAgICAgIGh0dHA6IHsgc3RhdHVzOiA0MDAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gIH07XG59XG5cbmV4cG9ydCB7IGNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eSwgY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFrQyxTQUFBRSx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVsQyxTQUFTRyx3QkFBd0JBLENBQUNDLFNBQVMsRUFBRUMsU0FBUyxFQUFFO0VBQ3RELElBQUlDLFFBQVEsR0FBRyxDQUFDO0VBQ2hCLElBQUlDLFdBQVcsR0FBRyxDQUFDO0VBRW5CLFNBQVNDLGlCQUFpQkEsQ0FBQ0MsWUFBWSxFQUFFQyxLQUFLLEVBQUVDLGdCQUFnQixFQUFFO0lBQ2hFLElBQUksQ0FBQ0YsWUFBWSxFQUFFO01BQ2pCO0lBQ0Y7SUFDQSxLQUFLLE1BQU1HLFNBQVMsSUFBSUgsWUFBWSxDQUFDSSxVQUFVLEVBQUU7TUFDL0MsSUFBSUQsU0FBUyxDQUFDRSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQzlCUCxXQUFXLEVBQUU7UUFDYixNQUFNUSxRQUFRLEdBQUdMLEtBQUssR0FBRyxDQUFDO1FBQzFCLElBQUlLLFFBQVEsR0FBR1QsUUFBUSxFQUFFO1VBQ3ZCQSxRQUFRLEdBQUdTLFFBQVE7UUFDckI7UUFDQSxJQUFJSCxTQUFTLENBQUNILFlBQVksRUFBRTtVQUMxQkQsaUJBQWlCLENBQUNJLFNBQVMsQ0FBQ0gsWUFBWSxFQUFFTSxRQUFRLEVBQUVKLGdCQUFnQixDQUFDO1FBQ3ZFO01BQ0YsQ0FBQyxNQUFNLElBQUlDLFNBQVMsQ0FBQ0UsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1FBQzlDTixpQkFBaUIsQ0FBQ0ksU0FBUyxDQUFDSCxZQUFZLEVBQUVDLEtBQUssRUFBRUMsZ0JBQWdCLENBQUM7TUFDcEUsQ0FBQyxNQUFNLElBQUlDLFNBQVMsQ0FBQ0UsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1FBQzlDLE1BQU1FLElBQUksR0FBR0osU0FBUyxDQUFDSSxJQUFJLENBQUNDLEtBQUs7UUFDakMsSUFBSU4sZ0JBQWdCLENBQUNPLEdBQUcsQ0FBQ0YsSUFBSSxDQUFDLEVBQUU7VUFDOUI7UUFDRjtRQUNBLE1BQU1HLFFBQVEsR0FBR2QsU0FBUyxDQUFDVyxJQUFJLENBQUM7UUFDaEMsSUFBSUcsUUFBUSxFQUFFO1VBQ1osTUFBTUMsYUFBYSxHQUFHLElBQUlDLEdBQUcsQ0FBQ1YsZ0JBQWdCLENBQUM7VUFDL0NTLGFBQWEsQ0FBQ0UsR0FBRyxDQUFDTixJQUFJLENBQUM7VUFDdkJSLGlCQUFpQixDQUFDVyxRQUFRLENBQUNWLFlBQVksRUFBRUMsS0FBSyxFQUFFVSxhQUFhLENBQUM7UUFDaEU7TUFDRjtJQUNGO0VBQ0Y7RUFFQVosaUJBQWlCLENBQUNKLFNBQVMsQ0FBQ0ssWUFBWSxFQUFFLENBQUMsRUFBRSxJQUFJWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBRXZELE9BQU87SUFBRVgsS0FBSyxFQUFFSixRQUFRO0lBQUVpQixNQUFNLEVBQUVoQjtFQUFZLENBQUM7QUFDakQ7QUFFQSxTQUFTaUIsZ0NBQWdDQSxDQUFDQyxTQUFTLEVBQUU7RUFDbkQsT0FBTztJQUNMQyxlQUFlLEVBQUdDLGNBQWMsS0FBTTtNQUNwQ0MsbUJBQW1CLEVBQUUsTUFBQUEsQ0FBQSxLQUFZO1FBQy9CLE1BQU1DLElBQUksR0FBR0YsY0FBYyxDQUFDRyxZQUFZLEVBQUVELElBQUk7UUFDOUMsSUFBSUEsSUFBSSxFQUFFRSxRQUFRLElBQUlGLElBQUksRUFBRUcsYUFBYSxFQUFFO1VBQ3pDO1FBQ0Y7UUFFQSxNQUFNQyxNQUFNLEdBQUdSLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQ1EsTUFBTSxFQUFFO1VBQ1g7UUFDRjtRQUVBLE1BQU07VUFBRUMsWUFBWTtVQUFFQztRQUFjLENBQUMsR0FBR0YsTUFBTTtRQUM5QyxJQUFJQyxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUlDLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUMvQztRQUNGO1FBRUEsTUFBTTlCLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNK0IsVUFBVSxJQUFJVCxjQUFjLENBQUNVLFFBQVEsQ0FBQ0MsV0FBVyxFQUFFO1VBQzVELElBQUlGLFVBQVUsQ0FBQ3RCLElBQUksS0FBSyxvQkFBb0IsRUFBRTtZQUM1Q1QsU0FBUyxDQUFDK0IsVUFBVSxDQUFDcEIsSUFBSSxDQUFDQyxLQUFLLENBQUMsR0FBR21CLFVBQVU7VUFDL0M7UUFDRjtRQUVBLE1BQU07VUFBRTFCLEtBQUs7VUFBRWE7UUFBTyxDQUFDLEdBQUdwQix3QkFBd0IsQ0FDaER3QixjQUFjLENBQUN2QixTQUFTLEVBQ3hCQyxTQUNGLENBQUM7UUFFRCxJQUFJNkIsWUFBWSxLQUFLLENBQUMsQ0FBQyxJQUFJeEIsS0FBSyxHQUFHd0IsWUFBWSxFQUFFO1VBQy9DLE1BQU1LLE9BQU8sR0FBRywwQkFBMEI3QixLQUFLLHFDQUFxQ3dCLFlBQVksRUFBRTtVQUNsR00sZUFBTSxDQUFDQyxJQUFJLENBQUNGLE9BQU8sQ0FBQztVQUNwQixNQUFNLElBQUlHLHFCQUFZLENBQUNILE9BQU8sRUFBRTtZQUM5QkksVUFBVSxFQUFFO2NBQ1ZDLElBQUksRUFBRTtnQkFBRUMsTUFBTSxFQUFFO2NBQUk7WUFDdEI7VUFDRixDQUFDLENBQUM7UUFDSjtRQUVBLElBQUlWLGFBQWEsS0FBSyxDQUFDLENBQUMsSUFBSVosTUFBTSxHQUFHWSxhQUFhLEVBQUU7VUFDbEQsTUFBTUksT0FBTyxHQUFHLDZCQUE2QmhCLE1BQU0sOEJBQThCWSxhQUFhLEdBQUc7VUFDakdLLGVBQU0sQ0FBQ0MsSUFBSSxDQUFDRixPQUFPLENBQUM7VUFDcEIsTUFBTSxJQUFJRyxxQkFBWSxDQUFDSCxPQUFPLEVBQUU7WUFDOUJJLFVBQVUsRUFBRTtjQUNWQyxJQUFJLEVBQUU7Z0JBQUVDLE1BQU0sRUFBRTtjQUFJO1lBQ3RCO1VBQ0YsQ0FBQyxDQUFDO1FBQ0o7TUFDRjtJQUNGLENBQUM7RUFDSCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
138
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eSIsIm9wZXJhdGlvbiIsImZyYWdtZW50cyIsImxpbWl0cyIsIm1heERlcHRoIiwidG90YWxGaWVsZHMiLCJmcmFnbWVudENhY2hlIiwiTWFwIiwiYWxsb3dlZE1heERlcHRoIiwibWF4RmllbGRzIiwiYWxsb3dlZE1heEZpZWxkcyIsInZpc2l0U2VsZWN0aW9uU2V0Iiwic2VsZWN0aW9uU2V0IiwiZGVwdGgiLCJ2aXNpdGVkRnJhZ21lbnRzIiwidW5kZWZpbmVkIiwic2VsZWN0aW9uIiwic2VsZWN0aW9ucyIsImtpbmQiLCJuZXdEZXB0aCIsIm5hbWUiLCJ2YWx1ZSIsImhhcyIsImNhY2hlZCIsImdldCIsImZpZWxkcyIsImFkanVzdGVkRGVwdGgiLCJtYXhEZXB0aERlbHRhIiwiZnJhZ21lbnQiLCJhZGQiLCJzYXZlZEZpZWxkcyIsInNhdmVkTWF4RGVwdGgiLCJmaWVsZHNDb250cmlidXRpb24iLCJzZXQiLCJNYXRoIiwibWF4IiwiZGVsZXRlIiwiU2V0IiwiY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4iLCJnZXRDb25maWciLCJyZXF1ZXN0RGlkU3RhcnQiLCJyZXF1ZXN0Q29udGV4dCIsImRpZFJlc29sdmVPcGVyYXRpb24iLCJhdXRoIiwiY29udGV4dFZhbHVlIiwiaXNNYXN0ZXIiLCJpc01haW50ZW5hbmNlIiwiY29uZmlnIiwiZ3JhcGhRTERlcHRoIiwiZ3JhcGhRTEZpZWxkcyIsImRlZmluaXRpb24iLCJkb2N1bWVudCIsImRlZmluaXRpb25zIiwibWVzc2FnZSIsImxvZ2dlciIsIndhcm4iLCJHcmFwaFFMRXJyb3IiLCJleHRlbnNpb25zIiwiaHR0cCIsInN0YXR1cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvcXVlcnlDb21wbGV4aXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoUUxFcnJvciB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi8uLi9sb2dnZXInO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVRdWVyeUNvbXBsZXhpdHkob3BlcmF0aW9uLCBmcmFnbWVudHMsIGxpbWl0cyA9IHt9KSB7XG4gIGxldCBtYXhEZXB0aCA9IDA7XG4gIGxldCB0b3RhbEZpZWxkcyA9IDA7XG4gIGNvbnN0IGZyYWdtZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHsgbWF4RGVwdGg6IGFsbG93ZWRNYXhEZXB0aCwgbWF4RmllbGRzOiBhbGxvd2VkTWF4RmllbGRzIH0gPSBsaW1pdHM7XG5cbiAgZnVuY3Rpb24gdmlzaXRTZWxlY3Rpb25TZXQoc2VsZWN0aW9uU2V0LCBkZXB0aCwgdmlzaXRlZEZyYWdtZW50cykge1xuICAgIGlmICghc2VsZWN0aW9uU2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChhbGxvd2VkTWF4RmllbGRzICE9PSB1bmRlZmluZWQgJiYgYWxsb3dlZE1heEZpZWxkcyAhPT0gLTEgJiYgdG90YWxGaWVsZHMgPiBhbGxvd2VkTWF4RmllbGRzKSB8fFxuICAgICAgKGFsbG93ZWRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIGFsbG93ZWRNYXhEZXB0aCAhPT0gLTEgJiYgbWF4RGVwdGggPiBhbGxvd2VkTWF4RGVwdGgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uLmtpbmQgPT09ICdGaWVsZCcpIHtcbiAgICAgICAgdG90YWxGaWVsZHMrKztcbiAgICAgICAgY29uc3QgbmV3RGVwdGggPSBkZXB0aCArIDE7XG4gICAgICAgIGlmIChuZXdEZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgbWF4RGVwdGggPSBuZXdEZXB0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICAgIHZpc2l0U2VsZWN0aW9uU2V0KHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQsIG5ld0RlcHRoLCB2aXNpdGVkRnJhZ21lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0lubGluZUZyYWdtZW50Jykge1xuICAgICAgICB2aXNpdFNlbGVjdGlvblNldChzZWxlY3Rpb24uc2VsZWN0aW9uU2V0LCBkZXB0aCwgdmlzaXRlZEZyYWdtZW50cyk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRnJhZ21lbnRTcHJlYWQnKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzZWxlY3Rpb24ubmFtZS52YWx1ZTtcbiAgICAgICAgaWYgKGZyYWdtZW50Q2FjaGUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgY2FjaGVkID0gZnJhZ21lbnRDYWNoZS5nZXQobmFtZSk7XG4gICAgICAgICAgdG90YWxGaWVsZHMgKz0gY2FjaGVkLmZpZWxkcztcbiAgICAgICAgICBjb25zdCBhZGp1c3RlZERlcHRoID0gZGVwdGggKyBjYWNoZWQubWF4RGVwdGhEZWx0YTtcbiAgICAgICAgICBpZiAoYWRqdXN0ZWREZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgICBtYXhEZXB0aCA9IGFkanVzdGVkRGVwdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aXNpdGVkRnJhZ21lbnRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnRzW25hbWVdO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoYWxsb3dlZE1heEZpZWxkcyAhPT0gdW5kZWZpbmVkICYmIGFsbG93ZWRNYXhGaWVsZHMgIT09IC0xICYmIHRvdGFsRmllbGRzID4gYWxsb3dlZE1heEZpZWxkcykgfHxcbiAgICAgICAgICAgIChhbGxvd2VkTWF4RGVwdGggIT09IHVuZGVmaW5lZCAmJiBhbGxvd2VkTWF4RGVwdGggIT09IC0xICYmIG1heERlcHRoID4gYWxsb3dlZE1heERlcHRoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZpc2l0ZWRGcmFnbWVudHMuYWRkKG5hbWUpO1xuICAgICAgICAgIGNvbnN0IHNhdmVkRmllbGRzID0gdG90YWxGaWVsZHM7XG4gICAgICAgICAgY29uc3Qgc2F2ZWRNYXhEZXB0aCA9IG1heERlcHRoO1xuICAgICAgICAgIG1heERlcHRoID0gZGVwdGg7XG4gICAgICAgICAgdmlzaXRTZWxlY3Rpb25TZXQoZnJhZ21lbnQuc2VsZWN0aW9uU2V0LCBkZXB0aCwgdmlzaXRlZEZyYWdtZW50cyk7XG4gICAgICAgICAgY29uc3QgZmllbGRzQ29udHJpYnV0aW9uID0gdG90YWxGaWVsZHMgLSBzYXZlZEZpZWxkcztcbiAgICAgICAgICBjb25zdCBtYXhEZXB0aERlbHRhID0gbWF4RGVwdGggLSBkZXB0aDtcbiAgICAgICAgICBmcmFnbWVudENhY2hlLnNldChuYW1lLCB7IGZpZWxkczogZmllbGRzQ29udHJpYnV0aW9uLCBtYXhEZXB0aERlbHRhIH0pO1xuICAgICAgICAgIG1heERlcHRoID0gTWF0aC5tYXgoc2F2ZWRNYXhEZXB0aCwgbWF4RGVwdGgpO1xuICAgICAgICAgIHZpc2l0ZWRGcmFnbWVudHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmlzaXRTZWxlY3Rpb25TZXQob3BlcmF0aW9uLnNlbGVjdGlvblNldCwgMCwgbmV3IFNldCgpKTtcblxuICByZXR1cm4geyBkZXB0aDogbWF4RGVwdGgsIGZpZWxkczogdG90YWxGaWVsZHMgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4oZ2V0Q29uZmlnKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdERpZFN0YXJ0OiAocmVxdWVzdENvbnRleHQpID0+ICh7XG4gICAgICBkaWRSZXNvbHZlT3BlcmF0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGggPSByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWU/LmF1dGg7XG4gICAgICAgIGlmIChhdXRoPy5pc01hc3RlciB8fCBhdXRoPy5pc01haW50ZW5hbmNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBncmFwaFFMRGVwdGgsIGdyYXBoUUxGaWVsZHMgfSA9IGNvbmZpZztcbiAgICAgICAgaWYgKGdyYXBoUUxEZXB0aCA9PT0gLTEgJiYgZ3JhcGhRTEZpZWxkcyA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIHJlcXVlc3RDb250ZXh0LmRvY3VtZW50LmRlZmluaXRpb25zKSB7XG4gICAgICAgICAgaWYgKGRlZmluaXRpb24ua2luZCA9PT0gJ0ZyYWdtZW50RGVmaW5pdGlvbicpIHtcbiAgICAgICAgICAgIGZyYWdtZW50c1tkZWZpbml0aW9uLm5hbWUudmFsdWVdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRlcHRoLCBmaWVsZHMgfSA9IGNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eShcbiAgICAgICAgICByZXF1ZXN0Q29udGV4dC5vcGVyYXRpb24sXG4gICAgICAgICAgZnJhZ21lbnRzLFxuICAgICAgICAgIHsgbWF4RGVwdGg6IGdyYXBoUUxEZXB0aCwgbWF4RmllbGRzOiBncmFwaFFMRmllbGRzIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZ3JhcGhRTERlcHRoICE9PSAtMSAmJiBkZXB0aCA+IGdyYXBoUUxEZXB0aCkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgR3JhcGhRTCBxdWVyeSBkZXB0aCBvZiAke2RlcHRofSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBkZXB0aCBvZiAke2dyYXBoUUxEZXB0aH1gO1xuICAgICAgICAgIGxvZ2dlci53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBHcmFwaFFMRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICAgICAgICBodHRwOiB7IHN0YXR1czogNDAwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyYXBoUUxGaWVsZHMgIT09IC0xICYmIGZpZWxkcyA+IGdyYXBoUUxGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYE51bWJlciBvZiBHcmFwaFFMIGZpZWxkcyAoJHtmaWVsZHN9KSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCAoJHtncmFwaFFMRmllbGRzfSlgO1xuICAgICAgICAgIGxvZ2dlci53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBHcmFwaFFMRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICAgICAgICBodHRwOiB7IHN0YXR1czogNDAwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pLFxuICB9O1xufVxuXG5leHBvcnQgeyBjYWxjdWxhdGVRdWVyeUNv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TUFBTSxHQUFHUixTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUNRLE1BQU0sRUFBRTtVQUNYO1FBQ0Y7UUFFQSxNQUFNO1VBQUVDLFlBQVk7VUFBRUM7UUFBYyxDQUFDLEdBQUdGLE1BQU07UUFDOUMsSUFBSUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxJQUFJQyxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDL0M7UUFDRjtRQUVBLE1BQU0vQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssTUFBTWdELFVBQVUsSUFBSVQsY0FBYyxDQUFDVSxRQUFRLENBQUNDLFdBQVcsRUFBRTtVQUM1RCxJQUFJRixVQUFVLENBQUNoQyxJQUFJLEtBQUssb0JBQW9CLEVBQUU7WUFDNUNoQixTQUFTLENBQUNnRCxVQUFVLENBQUM5QixJQUFJLENBQUNDLEtBQUssQ0FBQyxHQUFHNkIsVUFBVTtVQUMvQztRQUNGO1FBRUEsTUFBTTtVQUFFckMsS0FBSztVQUFFWTtRQUFPLENBQUMsR0FBR3pCLHdCQUF3QixDQUNoRHlDLGNBQWMsQ0FBQ3hDLFNBQVMsRUFDeEJDLFNBQVMsRUFDVDtVQUFFRSxRQUFRLEVBQUU0QyxZQUFZO1VBQUV2QyxTQUFTLEVBQUV3QztRQUFjLENBQ3JELENBQUM7UUFFRCxJQUFJRCxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUluQyxLQUFLLEdBQUdtQyxZQUFZLEVBQUU7VUFDL0MsTUFBTUssT0FBTyxHQUFHLDBCQUEwQnhDLEtBQUsscUNBQXFDbUMsWUFBWSxFQUFFO1VBQ2xHTSxlQUFNLENBQUNDLElBQUksQ0FBQ0YsT0FBTyxDQUFDO1VBQ3BCLE1BQU0sSUFBSUcscUJBQVksQ0FBQ0gsT0FBTyxFQUFFO1lBQzlCSSxVQUFVLEVBQUU7Y0FDVkMsSUFBSSxFQUFFO2dCQUFFQyxNQUFNLEVBQUU7Y0FBSTtZQUN0QjtVQUNGLENBQUMsQ0FBQztRQUNKO1FBRUEsSUFBSVYsYUFBYSxLQUFLLENBQUMsQ0FBQyxJQUFJeEIsTUFBTSxHQUFHd0IsYUFBYSxFQUFFO1VBQ2xELE1BQU1JLE9BQU8sR0FBRyw2QkFBNkI1QixNQUFNLDhCQUE4QndCLGFBQWEsR0FBRztVQUNqR0ssZUFBTSxDQUFDQyxJQUFJLENBQUNGLE9BQU8sQ0FBQztVQUNwQixNQUFNLElBQUlHLHFCQUFZLENBQUNILE9BQU8sRUFBRTtZQUM5QkksVUFBVSxFQUFFO2NBQ1ZDLElBQUksRUFBRTtnQkFBRUMsTUFBTSxFQUFFO2NBQUk7WUFDdEI7VUFDRixDQUFDLENBQUM7UUFDSjtNQUNGO0lBQ0YsQ0FBQztFQUNILENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.7.0-alpha.11",
3
+ "version": "9.7.0-alpha.12",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {