parse-server 9.10.0-alpha.7 → 9.10.0

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.
@@ -4,8 +4,47 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ exports.findGeoIndexField = findGeoIndexField;
7
8
  const mongodb = require('mongodb');
8
9
  const Collection = mongodb.Collection;
10
+
11
+ // Query operators that require a geospatial index and therefore trigger
12
+ // on-demand `2d` index creation. `$geoWithin` / `$geoIntersects` are intentionally
13
+ // excluded: they can run as a collection scan and never raise a "no index" error.
14
+ const GEO_INDEX_QUERY_OPERATORS = ['$nearSphere', '$near', '$geoNear'];
15
+
16
+ // Find the field in a Mongo query document that is constrained by a geo operator
17
+ // requiring a geospatial index. Returns the field name (e.g. 'location'), or
18
+ // undefined if none is found. Used as the reliable source of truth for on-demand
19
+ // geo index creation, since the MongoDB error message that used to carry the field
20
+ // name (`... field=<name> ...`) was dropped in MongoDB 8.3+.
21
+ //
22
+ // A geo-near expression must be top-level or inside `$and`: MongoDB rejects it inside
23
+ // `$or` / `$nor` ("geo $near must be top-level expr") and forbids more than one per
24
+ // query ("Too many geoNear expressions"). So there is at most one field to find, and
25
+ // `$and` is the only combinator we need to recurse into.
26
+ function findGeoIndexField(query) {
27
+ if (!query || typeof query !== 'object') {
28
+ return undefined;
29
+ }
30
+ for (const field of Object.keys(query)) {
31
+ const value = query[field];
32
+ // Recurse into `$and`, which holds an array of sub-queries.
33
+ if (field === '$and' && Array.isArray(value)) {
34
+ for (const subQuery of value) {
35
+ const found = findGeoIndexField(subQuery);
36
+ if (found) {
37
+ return found;
38
+ }
39
+ }
40
+ continue;
41
+ }
42
+ if (value && typeof value === 'object' && GEO_INDEX_QUERY_OPERATORS.some(op => Object.prototype.hasOwnProperty.call(value, op))) {
43
+ return field;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
9
48
  class MongoCollection {
10
49
  constructor(mongoCollection) {
11
50
  this._mongoCollection = mongoCollection;
@@ -53,8 +92,12 @@ class MongoCollection {
53
92
  if (error.code != 17007 && !error.message.match(/unable to find index for .geoNear/)) {
54
93
  throw error;
55
94
  }
56
- // Figure out what key needs an index
57
- const key = error.message.match(/field=([A-Za-z_0-9]+) /)[1];
95
+ // Figure out which field needs a geo index.
96
+ // Older MongoDB embeds the field name in the error message (`... field=<name> ...`);
97
+ // MongoDB 8.3+ shortened the message to `unable to find index for $geoNear query`
98
+ // and no longer includes it, so fall back to reading the field from the query itself.
99
+ const messageMatch = error.message.match(/field=([A-Za-z_0-9]+) /);
100
+ const key = messageMatch && messageMatch[1] || findGeoIndexField(query);
58
101
  if (!key) {
59
102
  throw error;
60
103
  }
@@ -209,4 +252,4 @@ class MongoCollection {
209
252
  }
210
253
  }
211
254
  exports.default = MongoCollection;
212
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb25nb2RiIiwicmVxdWlyZSIsIkNvbGxlY3Rpb24iLCJNb25nb0NvbGxlY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm1vbmdvQ29sbGVjdGlvbiIsIl9tb25nb0NvbGxlY3Rpb24iLCJmaW5kIiwicXVlcnkiLCJza2lwIiwibGltaXQiLCJzb3J0Iiwia2V5cyIsIm1heFRpbWVNUyIsImJhdGNoU2l6ZSIsInJlYWRQcmVmZXJlbmNlIiwiaGludCIsImNhc2VJbnNlbnNpdGl2ZSIsImV4cGxhaW4iLCJjb21tZW50IiwiJHNjb3JlIiwic2NvcmUiLCIkbWV0YSIsIl9yYXdGaW5kIiwiY2F0Y2giLCJlcnJvciIsImNvZGUiLCJtZXNzYWdlIiwibWF0Y2giLCJrZXkiLCJpbmRleCIsImNyZWF0ZUluZGV4IiwidGhlbiIsImNhc2VJbnNlbnNpdGl2ZUNvbGxhdGlvbiIsImxvY2FsZSIsInN0cmVuZ3RoIiwiZmluZE9wZXJhdGlvbiIsInByb2plY3QiLCJjb2xsYXRpb24iLCJ0b0FycmF5IiwiY291bnQiLCJPYmplY3QiLCJsZW5ndGgiLCJlc3RpbWF0ZWREb2N1bWVudENvdW50IiwiY291bnRPcGVyYXRpb24iLCJjb3VudERvY3VtZW50cyIsImRpc3RpbmN0IiwiZmllbGQiLCJhZ2dyZWdhdGUiLCJwaXBlbGluZSIsImluc2VydE9uZSIsIm9iamVjdCIsInNlc3Npb24iLCJ1cHNlcnRPbmUiLCJ1cGRhdGUiLCJ1cGRhdGVPbmUiLCJ1cHNlcnQiLCJ1cGRhdGVNYW55IiwiZGVsZXRlTWFueSIsIl9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZCIsImluZGV4UmVxdWVzdCIsInVuaXF1ZSIsImJhY2tncm91bmQiLCJzcGFyc2UiLCJkcm9wIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQWRhcHRlcnMvU3RvcmFnZS9Nb25nby9Nb25nb0NvbGxlY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbW9uZ29kYiA9IHJlcXVpcmUoJ21vbmdvZGInKTtcbmNvbnN0IENvbGxlY3Rpb24gPSBtb25nb2RiLkNvbGxlY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vbmdvQ29sbGVjdGlvbiB7XG4gIF9tb25nb0NvbGxlY3Rpb246IENvbGxlY3Rpb247XG5cbiAgY29uc3RydWN0b3IobW9uZ29Db2xsZWN0aW9uOiBDb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uID0gbW9uZ29Db2xsZWN0aW9uO1xuICB9XG5cbiAgLy8gRG9lcyBhIGZpbmQgd2l0aCBcInNtYXJ0IGluZGV4aW5nXCIuXG4gIC8vIEN1cnJlbnRseSB0aGlzIGp1c3QgbWVhbnMsIGlmIGl0IG5lZWRzIGEgZ2VvaW5kZXggYW5kIHRoZXJlIGlzXG4gIC8vIG5vbmUsIHRoZW4gYnVpbGQgdGhlIGdlb2luZGV4LlxuICAvLyBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIGEgbG90IGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGF0J3MgYSBnb29kXG4gIC8vIGlkZWEuIE9yIGV2ZW4gaWYgdGhpcyBiZWhhdmlvciBpcyBhIGdvb2QgaWRlYS5cbiAgZmluZChcbiAgICBxdWVyeSxcbiAgICB7XG4gICAgICBza2lwLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgICAga2V5cyxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIGJhdGNoU2l6ZSxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIGV4cGxhaW4sXG4gICAgICBjb21tZW50LFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBTdXBwb3J0IGZvciBGdWxsIFRleHQgU2VhcmNoIC0gJHRleHRcbiAgICBpZiAoa2V5cyAmJiBrZXlzLiRzY29yZSkge1xuICAgICAgZGVsZXRlIGtleXMuJHNjb3JlO1xuICAgICAga2V5cy5zY29yZSA9IHsgJG1ldGE6ICd0ZXh0U2NvcmUnIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7XG4gICAgICBza2lwLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgICAga2V5cyxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIGJhdGNoU2l6ZSxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIGV4cGxhaW4sXG4gICAgICBjb21tZW50LFxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciBcIm5vIGdlb2luZGV4XCIgZXJyb3JcbiAgICAgIGlmIChlcnJvci5jb2RlICE9IDE3MDA3ICYmICFlcnJvci5tZXNzYWdlLm1hdGNoKC91bmFibGUgdG8gZmluZCBpbmRleCBmb3IgLmdlb05lYXIvKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBrZXkgbmVlZHMgYW4gaW5kZXhcbiAgICAgIGNvbnN0IGtleSA9IGVycm9yLm1lc3NhZ2UubWF0Y2goL2ZpZWxkPShbQS1aYS16XzAtOV0rKSAvKVsxXTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSB7fTtcbiAgICAgIGluZGV4W2tleV0gPSAnMmQnO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uXG4gICAgICAgICAgLmNyZWF0ZUluZGV4KGluZGV4KVxuICAgICAgICAgIC8vIFJldHJ5LCBidXQganVzdCBvbmNlLlxuICAgICAgICAgIC50aGVuKCgpID0+XG4gICAgICAgICAgICB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7XG4gICAgICAgICAgICAgIHNraXAsXG4gICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICBtYXhUaW1lTVMsXG4gICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgcmVhZFByZWZlcmVuY2UsXG4gICAgICAgICAgICAgIGhpbnQsXG4gICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgZXhwbGFpbixcbiAgICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXRpb24gdG8gc3VwcG9ydCBjYXNlIGluc2Vuc2l0aXZlIHF1ZXJpZXNcbiAgICovXG4gIHN0YXRpYyBjYXNlSW5zZW5zaXRpdmVDb2xsYXRpb24oKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxlOiAnZW5fVVMnLCBzdHJlbmd0aDogMiB9O1xuICB9XG5cbiAgX3Jhd0ZpbmQoXG4gICAgcXVlcnksXG4gICAge1xuICAgICAgc2tpcCxcbiAgICAgIGxpbWl0LFxuICAgICAgc29ydCxcbiAgICAgIGtleXMsXG4gICAgICBtYXhUaW1lTVMsXG4gICAgICBiYXRjaFNpemUsXG4gICAgICByZWFkUHJlZmVyZW5jZSxcbiAgICAgIGhpbnQsXG4gICAgICBjYXNlSW5zZW5zaXRpdmUsXG4gICAgICBleHBsYWluLFxuICAgICAgY29tbWVudCxcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgbGV0IGZpbmRPcGVyYXRpb24gPSB0aGlzLl9tb25nb0NvbGxlY3Rpb24uZmluZChxdWVyeSwge1xuICAgICAgc2tpcCxcbiAgICAgIGxpbWl0LFxuICAgICAgc29ydCxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNvbW1lbnQsXG4gICAgICBiYXRjaFNpemUsXG4gICAgfSk7XG5cbiAgICBpZiAoa2V5cykge1xuICAgICAgZmluZE9wZXJhdGlvbiA9IGZpbmRPcGVyYXRpb24ucHJvamVjdChrZXlzKTtcbiAgICB9XG5cbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBmaW5kT3BlcmF0aW9uID0gZmluZE9wZXJhdGlvbi5jb2xsYXRpb24oTW9uZ29Db2xsZWN0aW9uLmNhc2VJbnNlbnNpdGl2ZUNvbGxhdGlvbigpKTtcbiAgICB9XG5cbiAgICBpZiAobWF4VGltZU1TKSB7XG4gICAgICBmaW5kT3BlcmF0aW9uID0gZmluZE9wZXJhdGlvbi5tYXhUaW1lTVMobWF4VGltZU1TKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwbGFpbiA/IGZpbmRPcGVyYXRpb24uZXhwbGFpbihleHBsYWluKSA6IGZpbmRPcGVyYXRpb24udG9BcnJheSgpO1xuICB9XG5cbiAgY291bnQocXVlcnksIHsgc2tpcCwgbGltaXQsIHNvcnQsIG1heFRpbWVNUywgcmVhZFByZWZlcmVuY2UsIGhpbnQsIGNvbW1lbnQgfSA9IHt9KSB7XG4gICAgLy8gSWYgcXVlcnkgaXMgZW1wdHksIHRoZW4gdXNlIGVzdGltYXRlZERvY3VtZW50Q291bnQgaW5zdGVhZC5cbiAgICAvLyBUaGlzIGlzIGR1ZSB0byBjb3VudERvY3VtZW50cyBwZXJmb3JtaW5nIGEgc2NhbixcbiAgICAvLyB3aGljaCBncmVhdGx5IGluY3JlYXNlcyBleGVjdXRpb24gdGltZSB3aGVuIGJlaW5nIHJ1biBvbiBsYXJnZSBjb2xsZWN0aW9ucy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvbW9uZ29vc2UvaXNzdWVzLzY3MTMgZm9yIG1vcmUgaW5mbyByZWdhcmRpbmcgdGhpcyBwcm9ibGVtLlxuICAgIGlmICh0eXBlb2YgcXVlcnkgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmVzdGltYXRlZERvY3VtZW50Q291bnQoe1xuICAgICAgICBtYXhUaW1lTVMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudE9wZXJhdGlvbiA9IHRoaXMuX21vbmdvQ29sbGVjdGlvbi5jb3VudERvY3VtZW50cyhxdWVyeSwge1xuICAgICAgc2tpcCxcbiAgICAgIGxpbWl0LFxuICAgICAgc29ydCxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNvbW1lbnQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY291bnRPcGVyYXRpb247XG4gIH1cblxuICBkaXN0aW5jdChmaWVsZCwgcXVlcnkpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmRpc3RpbmN0KGZpZWxkLCBxdWVyeSk7XG4gIH1cblxuICBhZ2dyZWdhdGUocGlwZWxpbmUsIHsgbWF4VGltZU1TLCBiYXRjaFNpemUsIHJlYWRQcmVmZXJlbmNlLCBoaW50LCBleHBsYWluLCBjb21tZW50IH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb25cbiAgICAgIC5hZ2dyZWdhdGUocGlwZWxpbmUsIHsgbWF4VGltZU1TLCBiYXRjaFNpemUsIHJlYWRQcmVmZXJlbmNlLCBoaW50LCBleHBsYWluLCBjb21tZW50IH0pXG4gICAgICAudG9BcnJheSgpO1xuICB9XG5cbiAgaW5zZXJ0T25lKG9iamVjdCwgc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24uaW5zZXJ0T25lKG9iamVjdCwgeyBzZXNzaW9uIH0pO1xuICB9XG5cbiAgLy8gQXRvbWljYWxseSB1cGRhdGVzIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGZvciBhIHNpbmdsZSAoZmlyc3QpIG9iamVjdCB0aGF0IG1hdGNoZWQgdGhlIHF1ZXJ5XG4gIC8vIElmIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBtYXRjaGVzIHRoZSBxdWVyeSAtIGRvZXMgaW5zZXJ0XG4gIC8vIFBvc3RncmVzIE5vdGU6IGBJTlNFUlQgLi4uIE9OIENPTkZMSUNUIFVQREFURWAgdGhhdCBpcyBhdmFpbGFibGUgc2luY2UgOS41LlxuICB1cHNlcnRPbmUocXVlcnksIHVwZGF0ZSwgc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24udXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUsIHtcbiAgICAgIHVwc2VydDogdHJ1ZSxcbiAgICAgIHNlc3Npb24sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVPbmUocXVlcnksIHVwZGF0ZSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24udXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUpO1xuICB9XG5cbiAgdXBkYXRlTWFueShxdWVyeSwgdXBkYXRlLCBzZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi51cGRhdGVNYW55KHF1ZXJ5LCB1cGRhdGUsIHsgc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkocXVlcnksIHNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmRlbGV0ZU1hbnkocXVlcnksIHsgc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIF9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZChpbmRleFJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmNyZWF0ZUluZGV4KGluZGV4UmVxdWVzdCwge1xuICAgICAgdW5pcXVlOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZDogdHJ1ZSxcbiAgICAgIHNwYXJzZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGRyb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi5kcm9wKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1DLFVBQVUsR0FBR0YsT0FBTyxDQUFDRSxVQUFVO0FBRXRCLE1BQU1DLGVBQWUsQ0FBQztFQUduQ0MsV0FBV0EsQ0FBQ0MsZUFBMkIsRUFBRTtJQUN2QyxJQUFJLENBQUNDLGdCQUFnQixHQUFHRCxlQUFlO0VBQ3pDOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQUUsSUFBSUEsQ0FDRkMsS0FBSyxFQUNMO0lBQ0VDLElBQUk7SUFDSkMsS0FBSztJQUNMQyxJQUFJO0lBQ0pDLElBQUk7SUFDSkMsU0FBUztJQUNUQyxTQUFTO0lBQ1RDLGNBQWM7SUFDZEMsSUFBSTtJQUNKQyxlQUFlO0lBQ2ZDLE9BQU87SUFDUEM7RUFDRixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ047SUFDQTtJQUNBLElBQUlQLElBQUksSUFBSUEsSUFBSSxDQUFDUSxNQUFNLEVBQUU7TUFDdkIsT0FBT1IsSUFBSSxDQUFDUSxNQUFNO01BQ2xCUixJQUFJLENBQUNTLEtBQUssR0FBRztRQUFFQyxLQUFLLEVBQUU7TUFBWSxDQUFDO0lBQ3JDO0lBQ0EsT0FBTyxJQUFJLENBQUNDLFFBQVEsQ0FBQ2YsS0FBSyxFQUFFO01BQzFCQyxJQUFJO01BQ0pDLEtBQUs7TUFDTEMsSUFBSTtNQUNKQyxJQUFJO01BQ0pDLFNBQVM7TUFDVEMsU0FBUztNQUNUQyxjQUFjO01BQ2RDLElBQUk7TUFDSkMsZUFBZTtNQUNmQyxPQUFPO01BQ1BDO0lBQ0YsQ0FBQyxDQUFDLENBQUNLLEtBQUssQ0FBQ0MsS0FBSyxJQUFJO01BQ2hCO01BQ0EsSUFBSUEsS0FBSyxDQUFDQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUNELEtBQUssQ0FBQ0UsT0FBTyxDQUFDQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsRUFBRTtRQUNwRixNQUFNSCxLQUFLO01BQ2I7TUFDQTtNQUNBLE1BQU1JLEdBQUcsR0FBR0osS0FBSyxDQUFDRSxPQUFPLENBQUNDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM1RCxJQUFJLENBQUNDLEdBQUcsRUFBRTtRQUNSLE1BQU1KLEtBQUs7TUFDYjtNQUVBLElBQUlLLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDZEEsS0FBSyxDQUFDRCxHQUFHLENBQUMsR0FBRyxJQUFJO01BQ2pCLE9BQ0UsSUFBSSxDQUFDdkIsZ0JBQWdCLENBQ2xCeUIsV0FBVyxDQUFDRCxLQUFLO01BQ2xCO01BQUEsQ0FDQ0UsSUFBSSxDQUFDLE1BQ0osSUFBSSxDQUFDVCxRQUFRLENBQUNmLEtBQUssRUFBRTtRQUNuQkMsSUFBSTtRQUNKQyxLQUFLO1FBQ0xDLElBQUk7UUFDSkMsSUFBSTtRQUNKQyxTQUFTO1FBQ1RDLFNBQVM7UUFDVEMsY0FBYztRQUNkQyxJQUFJO1FBQ0pDLGVBQWU7UUFDZkMsT0FBTztRQUNQQztNQUNGLENBQUMsQ0FDSCxDQUFDO0lBRVAsQ0FBQyxDQUFDO0VBQ0o7O0VBRUE7QUFDRjtBQUNBO0VBQ0UsT0FBT2Msd0JBQXdCQSxDQUFBLEVBQUc7SUFDaEMsT0FBTztNQUFFQyxNQUFNLEVBQUUsT0FBTztNQUFFQyxRQUFRLEVBQUU7SUFBRSxDQUFDO0VBQ3pDO0VBRUFaLFFBQVFBLENBQ05mLEtBQUssRUFDTDtJQUNFQyxJQUFJO0lBQ0pDLEtBQUs7SUFDTEMsSUFBSTtJQUNKQyxJQUFJO0lBQ0pDLFNBQVM7SUFDVEMsU0FBUztJQUNUQyxjQUFjO0lBQ2RDLElBQUk7SUFDSkMsZUFBZTtJQUNmQyxPQUFPO0lBQ1BDO0VBQ0YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNOO0lBQ0EsSUFBSWlCLGFBQWEsR0FBRyxJQUFJLENBQUM5QixnQkFBZ0IsQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLEVBQUU7TUFDcERDLElBQUk7TUFDSkMsS0FBSztNQUNMQyxJQUFJO01BQ0pJLGNBQWM7TUFDZEMsSUFBSTtNQUNKRyxPQUFPO01BQ1BMO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsSUFBSUYsSUFBSSxFQUFFO01BQ1J3QixhQUFhLEdBQUdBLGFBQWEsQ0FBQ0MsT0FBTyxDQUFDekIsSUFBSSxDQUFDO0lBQzdDO0lBRUEsSUFBSUssZUFBZSxFQUFFO01BQ25CbUIsYUFBYSxHQUFHQSxhQUFhLENBQUNFLFNBQVMsQ0FBQ25DLGVBQWUsQ0FBQzhCLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNyRjtJQUVBLElBQUlwQixTQUFTLEVBQUU7TUFDYnVCLGFBQWEsR0FBR0EsYUFBYSxDQUFDdkIsU0FBUyxDQUFDQSxTQUFTLENBQUM7SUFDcEQ7SUFFQSxPQUFPSyxPQUFPLEdBQUdrQixhQUFhLENBQUNsQixPQUFPLENBQUNBLE9BQU8sQ0FBQyxHQUFHa0IsYUFBYSxDQUFDRyxPQUFPLENBQUMsQ0FBQztFQUMzRTtFQUVBQyxLQUFLQSxDQUFDaEMsS0FBSyxFQUFFO0lBQUVDLElBQUk7SUFBRUMsS0FBSztJQUFFQyxJQUFJO0lBQUVFLFNBQVM7SUFBRUUsY0FBYztJQUFFQyxJQUFJO0lBQUVHO0VBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ2pGO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsSUFBSSxPQUFPWCxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUNpQyxNQUFNLENBQUM3QixJQUFJLENBQUNKLEtBQUssQ0FBQyxDQUFDa0MsTUFBTSxFQUFFO01BQzNELE9BQU8sSUFBSSxDQUFDcEMsZ0JBQWdCLENBQUNxQyxzQkFBc0IsQ0FBQztRQUNsRDlCO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7SUFFQSxNQUFNK0IsY0FBYyxHQUFHLElBQUksQ0FBQ3RDLGdCQUFnQixDQUFDdUMsY0FBYyxDQUFDckMsS0FBSyxFQUFFO01BQ2pFQyxJQUFJO01BQ0pDLEtBQUs7TUFDTEMsSUFBSTtNQUNKRSxTQUFTO01BQ1RFLGNBQWM7TUFDZEMsSUFBSTtNQUNKRztJQUNGLENBQUMsQ0FBQztJQUVGLE9BQU95QixjQUFjO0VBQ3ZCO0VBRUFFLFFBQVFBLENBQUNDLEtBQUssRUFBRXZDLEtBQUssRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQ0YsZ0JBQWdCLENBQUN3QyxRQUFRLENBQUNDLEtBQUssRUFBRXZDLEtBQUssQ0FBQztFQUNyRDtFQUVBd0MsU0FBU0EsQ0FBQ0MsUUFBUSxFQUFFO0lBQUVwQyxTQUFTO0lBQUVDLFNBQVM7SUFBRUMsY0FBYztJQUFFQyxJQUFJO0lBQUVFLE9BQU87SUFBRUM7RUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDekYsT0FBTyxJQUFJLENBQUNiLGdCQUFnQixDQUN6QjBDLFNBQVMsQ0FBQ0MsUUFBUSxFQUFFO01BQUVwQyxTQUFTO01BQUVDLFNBQVM7TUFBRUMsY0FBYztNQUFFQyxJQUFJO01BQUVFLE9BQU87TUFBRUM7SUFBUSxDQUFDLENBQUMsQ0FDckZvQixPQUFPLENBQUMsQ0FBQztFQUNkO0VBRUFXLFNBQVNBLENBQUNDLE1BQU0sRUFBRUMsT0FBTyxFQUFFO0lBQ3pCLE9BQU8sSUFBSSxDQUFDOUMsZ0JBQWdCLENBQUM0QyxTQUFTLENBQUNDLE1BQU0sRUFBRTtNQUFFQztJQUFRLENBQUMsQ0FBQztFQUM3RDs7RUFFQTtFQUNBO0VBQ0E7RUFDQUMsU0FBU0EsQ0FBQzdDLEtBQUssRUFBRThDLE1BQU0sRUFBRUYsT0FBTyxFQUFFO0lBQ2hDLE9BQU8sSUFBSSxDQUFDOUMsZ0JBQWdCLENBQUNpRCxTQUFTLENBQUMvQyxLQUFLLEVBQUU4QyxNQUFNLEVBQUU7TUFDcERFLE1BQU0sRUFBRSxJQUFJO01BQ1pKO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQUcsU0FBU0EsQ0FBQy9DLEtBQUssRUFBRThDLE1BQU0sRUFBRTtJQUN2QixPQUFPLElBQUksQ0FBQ2hELGdCQUFnQixDQUFDaUQsU0FBUyxDQUFDL0MsS0FBSyxFQUFFOEMsTUFBTSxDQUFDO0VBQ3ZEO0VBRUFHLFVBQVVBLENBQUNqRCxLQUFLLEVBQUU4QyxNQUFNLEVBQUVGLE9BQU8sRUFBRTtJQUNqQyxPQUFPLElBQUksQ0FBQzlDLGdCQUFnQixDQUFDbUQsVUFBVSxDQUFDakQsS0FBSyxFQUFFOEMsTUFBTSxFQUFFO01BQUVGO0lBQVEsQ0FBQyxDQUFDO0VBQ3JFO0VBRUFNLFVBQVVBLENBQUNsRCxLQUFLLEVBQUU0QyxPQUFPLEVBQUU7SUFDekIsT0FBTyxJQUFJLENBQUM5QyxnQkFBZ0IsQ0FBQ29ELFVBQVUsQ0FBQ2xELEtBQUssRUFBRTtNQUFFNEM7SUFBUSxDQUFDLENBQUM7RUFDN0Q7RUFFQU8sb0NBQW9DQSxDQUFDQyxZQUFZLEVBQUU7SUFDakQsT0FBTyxJQUFJLENBQUN0RCxnQkFBZ0IsQ0FBQ3lCLFdBQVcsQ0FBQzZCLFlBQVksRUFBRTtNQUNyREMsTUFBTSxFQUFFLElBQUk7TUFDWkMsVUFBVSxFQUFFLElBQUk7TUFDaEJDLE1BQU0sRUFBRTtJQUNWLENBQUMsQ0FBQztFQUNKO0VBRUFDLElBQUlBLENBQUEsRUFBRztJQUNMLE9BQU8sSUFBSSxDQUFDMUQsZ0JBQWdCLENBQUMwRCxJQUFJLENBQUMsQ0FBQztFQUNyQztBQUNGO0FBQUNDLE9BQUEsQ0FBQUMsT0FBQSxHQUFBL0QsZUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb25nb2RiIiwicmVxdWlyZSIsIkNvbGxlY3Rpb24iLCJHRU9fSU5ERVhfUVVFUllfT1BFUkFUT1JTIiwiZmluZEdlb0luZGV4RmllbGQiLCJxdWVyeSIsInVuZGVmaW5lZCIsImZpZWxkIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwiQXJyYXkiLCJpc0FycmF5Iiwic3ViUXVlcnkiLCJmb3VuZCIsInNvbWUiLCJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk1vbmdvQ29sbGVjdGlvbiIsImNvbnN0cnVjdG9yIiwibW9uZ29Db2xsZWN0aW9uIiwiX21vbmdvQ29sbGVjdGlvbiIsImZpbmQiLCJza2lwIiwibGltaXQiLCJzb3J0IiwibWF4VGltZU1TIiwiYmF0Y2hTaXplIiwicmVhZFByZWZlcmVuY2UiLCJoaW50IiwiY2FzZUluc2Vuc2l0aXZlIiwiZXhwbGFpbiIsImNvbW1lbnQiLCIkc2NvcmUiLCJzY29yZSIsIiRtZXRhIiwiX3Jhd0ZpbmQiLCJjYXRjaCIsImVycm9yIiwiY29kZSIsIm1lc3NhZ2UiLCJtYXRjaCIsIm1lc3NhZ2VNYXRjaCIsImtleSIsImluZGV4IiwiY3JlYXRlSW5kZXgiLCJ0aGVuIiwiY2FzZUluc2Vuc2l0aXZlQ29sbGF0aW9uIiwibG9jYWxlIiwic3RyZW5ndGgiLCJmaW5kT3BlcmF0aW9uIiwicHJvamVjdCIsImNvbGxhdGlvbiIsInRvQXJyYXkiLCJjb3VudCIsImxlbmd0aCIsImVzdGltYXRlZERvY3VtZW50Q291bnQiLCJjb3VudE9wZXJhdGlvbiIsImNvdW50RG9jdW1lbnRzIiwiZGlzdGluY3QiLCJhZ2dyZWdhdGUiLCJwaXBlbGluZSIsImluc2VydE9uZSIsIm9iamVjdCIsInNlc3Npb24iLCJ1cHNlcnRPbmUiLCJ1cGRhdGUiLCJ1cGRhdGVPbmUiLCJ1cHNlcnQiLCJ1cGRhdGVNYW55IiwiZGVsZXRlTWFueSIsIl9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZCIsImluZGV4UmVxdWVzdCIsInVuaXF1ZSIsImJhY2tncm91bmQiLCJzcGFyc2UiLCJkcm9wIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQWRhcHRlcnMvU3RvcmFnZS9Nb25nby9Nb25nb0NvbGxlY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbW9uZ29kYiA9IHJlcXVpcmUoJ21vbmdvZGInKTtcbmNvbnN0IENvbGxlY3Rpb24gPSBtb25nb2RiLkNvbGxlY3Rpb247XG5cbi8vIFF1ZXJ5IG9wZXJhdG9ycyB0aGF0IHJlcXVpcmUgYSBnZW9zcGF0aWFsIGluZGV4IGFuZCB0aGVyZWZvcmUgdHJpZ2dlclxuLy8gb24tZGVtYW5kIGAyZGAgaW5kZXggY3JlYXRpb24uIGAkZ2VvV2l0aGluYCAvIGAkZ2VvSW50ZXJzZWN0c2AgYXJlIGludGVudGlvbmFsbHlcbi8vIGV4Y2x1ZGVkOiB0aGV5IGNhbiBydW4gYXMgYSBjb2xsZWN0aW9uIHNjYW4gYW5kIG5ldmVyIHJhaXNlIGEgXCJubyBpbmRleFwiIGVycm9yLlxuY29uc3QgR0VPX0lOREVYX1FVRVJZX09QRVJBVE9SUyA9IFsnJG5lYXJTcGhlcmUnLCAnJG5lYXInLCAnJGdlb05lYXInXTtcblxuLy8gRmluZCB0aGUgZmllbGQgaW4gYSBNb25nbyBxdWVyeSBkb2N1bWVudCB0aGF0IGlzIGNvbnN0cmFpbmVkIGJ5IGEgZ2VvIG9wZXJhdG9yXG4vLyByZXF1aXJpbmcgYSBnZW9zcGF0aWFsIGluZGV4LiBSZXR1cm5zIHRoZSBmaWVsZCBuYW1lIChlLmcuICdsb2NhdGlvbicpLCBvclxuLy8gdW5kZWZpbmVkIGlmIG5vbmUgaXMgZm91bmQuIFVzZWQgYXMgdGhlIHJlbGlhYmxlIHNvdXJjZSBvZiB0cnV0aCBmb3Igb24tZGVtYW5kXG4vLyBnZW8gaW5kZXggY3JlYXRpb24sIHNpbmNlIHRoZSBNb25nb0RCIGVycm9yIG1lc3NhZ2UgdGhhdCB1c2VkIHRvIGNhcnJ5IHRoZSBmaWVsZFxuLy8gbmFtZSAoYC4uLiBmaWVsZD08bmFtZT4gLi4uYCkgd2FzIGRyb3BwZWQgaW4gTW9uZ29EQiA4LjMrLlxuLy9cbi8vIEEgZ2VvLW5lYXIgZXhwcmVzc2lvbiBtdXN0IGJlIHRvcC1sZXZlbCBvciBpbnNpZGUgYCRhbmRgOiBNb25nb0RCIHJlamVjdHMgaXQgaW5zaWRlXG4vLyBgJG9yYCAvIGAkbm9yYCAoXCJnZW8gJG5lYXIgbXVzdCBiZSB0b3AtbGV2ZWwgZXhwclwiKSBhbmQgZm9yYmlkcyBtb3JlIHRoYW4gb25lIHBlclxuLy8gcXVlcnkgKFwiVG9vIG1hbnkgZ2VvTmVhciBleHByZXNzaW9uc1wiKS4gU28gdGhlcmUgaXMgYXQgbW9zdCBvbmUgZmllbGQgdG8gZmluZCwgYW5kXG4vLyBgJGFuZGAgaXMgdGhlIG9ubHkgY29tYmluYXRvciB3ZSBuZWVkIHRvIHJlY3Vyc2UgaW50by5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kR2VvSW5kZXhGaWVsZChxdWVyeSkge1xuICBpZiAoIXF1ZXJ5IHx8IHR5cGVvZiBxdWVyeSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LmtleXMocXVlcnkpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBxdWVyeVtmaWVsZF07XG4gICAgLy8gUmVjdXJzZSBpbnRvIGAkYW5kYCwgd2hpY2ggaG9sZHMgYW4gYXJyYXkgb2Ygc3ViLXF1ZXJpZXMuXG4gICAgaWYgKGZpZWxkID09PSAnJGFuZCcgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3Qgc3ViUXVlcnkgb2YgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kR2VvSW5kZXhGaWVsZChzdWJRdWVyeSk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICBHRU9fSU5ERVhfUVVFUllfT1BFUkFUT1JTLnNvbWUob3AgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBvcCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vbmdvQ29sbGVjdGlvbiB7XG4gIF9tb25nb0NvbGxlY3Rpb246IENvbGxlY3Rpb247XG5cbiAgY29uc3RydWN0b3IobW9uZ29Db2xsZWN0aW9uOiBDb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uID0gbW9uZ29Db2xsZWN0aW9uO1xuICB9XG5cbiAgLy8gRG9lcyBhIGZpbmQgd2l0aCBcInNtYXJ0IGluZGV4aW5nXCIuXG4gIC8vIEN1cnJlbnRseSB0aGlzIGp1c3QgbWVhbnMsIGlmIGl0IG5lZWRzIGEgZ2VvaW5kZXggYW5kIHRoZXJlIGlzXG4gIC8vIG5vbmUsIHRoZW4gYnVpbGQgdGhlIGdlb2luZGV4LlxuICAvLyBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIGEgbG90IGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGF0J3MgYSBnb29kXG4gIC8vIGlkZWEuIE9yIGV2ZW4gaWYgdGhpcyBiZWhhdmlvciBpcyBhIGdvb2QgaWRlYS5cbiAgZmluZChcbiAgICBxdWVyeSxcbiAgICB7XG4gICAgICBza2lwLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgICAga2V5cyxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIGJhdGNoU2l6ZSxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIGV4cGxhaW4sXG4gICAgICBjb21tZW50LFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBTdXBwb3J0IGZvciBGdWxsIFRleHQgU2VhcmNoIC0gJHRleHRcbiAgICBpZiAoa2V5cyAmJiBrZXlzLiRzY29yZSkge1xuICAgICAgZGVsZXRlIGtleXMuJHNjb3JlO1xuICAgICAga2V5cy5zY29yZSA9IHsgJG1ldGE6ICd0ZXh0U2NvcmUnIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7XG4gICAgICBza2lwLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgICAga2V5cyxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIGJhdGNoU2l6ZSxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIGV4cGxhaW4sXG4gICAgICBjb21tZW50LFxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciBcIm5vIGdlb2luZGV4XCIgZXJyb3JcbiAgICAgIGlmIChlcnJvci5jb2RlICE9IDE3MDA3ICYmICFlcnJvci5tZXNzYWdlLm1hdGNoKC91bmFibGUgdG8gZmluZCBpbmRleCBmb3IgLmdlb05lYXIvKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggZmllbGQgbmVlZHMgYSBnZW8gaW5kZXguXG4gICAgICAvLyBPbGRlciBNb25nb0RCIGVtYmVkcyB0aGUgZmllbGQgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZSAoYC4uLiBmaWVsZD08bmFtZT4gLi4uYCk7XG4gICAgICAvLyBNb25nb0RCIDguMysgc2hvcnRlbmVkIHRoZSBtZXNzYWdlIHRvIGB1bmFibGUgdG8gZmluZCBpbmRleCBmb3IgJGdlb05lYXIgcXVlcnlgXG4gICAgICAvLyBhbmQgbm8gbG9uZ2VyIGluY2x1ZGVzIGl0LCBzbyBmYWxsIGJhY2sgdG8gcmVhZGluZyB0aGUgZmllbGQgZnJvbSB0aGUgcXVlcnkgaXRzZWxmLlxuICAgICAgY29uc3QgbWVzc2FnZU1hdGNoID0gZXJyb3IubWVzc2FnZS5tYXRjaCgvZmllbGQ9KFtBLVphLXpfMC05XSspIC8pO1xuICAgICAgY29uc3Qga2V5ID0gKG1lc3NhZ2VNYXRjaCAmJiBtZXNzYWdlTWF0Y2hbMV0pIHx8IGZpbmRHZW9JbmRleEZpZWxkKHF1ZXJ5KTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSB7fTtcbiAgICAgIGluZGV4W2tleV0gPSAnMmQnO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uXG4gICAgICAgICAgLmNyZWF0ZUluZGV4KGluZGV4KVxuICAgICAgICAgIC8vIFJldHJ5LCBidXQganVzdCBvbmNlLlxuICAgICAgICAgIC50aGVuKCgpID0+XG4gICAgICAgICAgICB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7XG4gICAgICAgICAgICAgIHNraXAsXG4gICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICBtYXhUaW1lTVMsXG4gICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgcmVhZFByZWZlcmVuY2UsXG4gICAgICAgICAgICAgIGhpbnQsXG4gICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgZXhwbGFpbixcbiAgICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXRpb24gdG8gc3VwcG9ydCBjYXNlIGluc2Vuc2l0aXZlIHF1ZXJpZXNcbiAgICovXG4gIHN0YXRpYyBjYXNlSW5zZW5zaXRpdmVDb2xsYXRpb24oKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxlOiAnZW5fVVMnLCBzdHJlbmd0aDogMiB9O1xuICB9XG5cbiAgX3Jhd0ZpbmQoXG4gICAgcXVlcnksXG4gICAge1xuICAgICAgc2tpcCxcbiAgICAgIGxpbWl0LFxuICAgICAgc29ydCxcbiAgICAgIGtleXMsXG4gICAgICBtYXhUaW1lTVMsXG4gICAgICBiYXRjaFNpemUsXG4gICAgICByZWFkUHJlZmVyZW5jZSxcbiAgICAgIGhpbnQsXG4gICAgICBjYXNlSW5zZW5zaXRpdmUsXG4gICAgICBleHBsYWluLFxuICAgICAgY29tbWVudCxcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgbGV0IGZpbmRPcGVyYXRpb24gPSB0aGlzLl9tb25nb0NvbGxlY3Rpb24uZmluZChxdWVyeSwge1xuICAgICAgc2tpcCxcbiAgICAgIGxpbWl0LFxuICAgICAgc29ydCxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNvbW1lbnQsXG4gICAgICBiYXRjaFNpemUsXG4gICAgfSk7XG5cbiAgICBpZiAoa2V5cykge1xuICAgICAgZmluZE9wZXJhdGlvbiA9IGZpbmRPcGVyYXRpb24ucHJvamVjdChrZXlzKTtcbiAgICB9XG5cbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBmaW5kT3BlcmF0aW9uID0gZmluZE9wZXJhdGlvbi5jb2xsYXRpb24oTW9uZ29Db2xsZWN0aW9uLmNhc2VJbnNlbnNpdGl2ZUNvbGxhdGlvbigpKTtcbiAgICB9XG5cbiAgICBpZiAobWF4VGltZU1TKSB7XG4gICAgICBmaW5kT3BlcmF0aW9uID0gZmluZE9wZXJhdGlvbi5tYXhUaW1lTVMobWF4VGltZU1TKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwbGFpbiA/IGZpbmRPcGVyYXRpb24uZXhwbGFpbihleHBsYWluKSA6IGZpbmRPcGVyYXRpb24udG9BcnJheSgpO1xuICB9XG5cbiAgY291bnQocXVlcnksIHsgc2tpcCwgbGltaXQsIHNvcnQsIG1heFRpbWVNUywgcmVhZFByZWZlcmVuY2UsIGhpbnQsIGNvbW1lbnQgfSA9IHt9KSB7XG4gICAgLy8gSWYgcXVlcnkgaXMgZW1wdHksIHRoZW4gdXNlIGVzdGltYXRlZERvY3VtZW50Q291bnQgaW5zdGVhZC5cbiAgICAvLyBUaGlzIGlzIGR1ZSB0byBjb3VudERvY3VtZW50cyBwZXJmb3JtaW5nIGEgc2NhbixcbiAgICAvLyB3aGljaCBncmVhdGx5IGluY3JlYXNlcyBleGVjdXRpb24gdGltZSB3aGVuIGJlaW5nIHJ1biBvbiBsYXJnZSBjb2xsZWN0aW9ucy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvbW9uZ29vc2UvaXNzdWVzLzY3MTMgZm9yIG1vcmUgaW5mbyByZWdhcmRpbmcgdGhpcyBwcm9ibGVtLlxuICAgIGlmICh0eXBlb2YgcXVlcnkgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmVzdGltYXRlZERvY3VtZW50Q291bnQoe1xuICAgICAgICBtYXhUaW1lTVMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudE9wZXJhdGlvbiA9IHRoaXMuX21vbmdvQ29sbGVjdGlvbi5jb3VudERvY3VtZW50cyhxdWVyeSwge1xuICAgICAgc2tpcCxcbiAgICAgIGxpbWl0LFxuICAgICAgc29ydCxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNvbW1lbnQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY291bnRPcGVyYXRpb247XG4gIH1cblxuICBkaXN0aW5jdChmaWVsZCwgcXVlcnkpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmRpc3RpbmN0KGZpZWxkLCBxdWVyeSk7XG4gIH1cblxuICBhZ2dyZWdhdGUocGlwZWxpbmUsIHsgbWF4VGltZU1TLCBiYXRjaFNpemUsIHJlYWRQcmVmZXJlbmNlLCBoaW50LCBleHBsYWluLCBjb21tZW50IH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb25cbiAgICAgIC5hZ2dyZWdhdGUocGlwZWxpbmUsIHsgbWF4VGltZU1TLCBiYXRjaFNpemUsIHJlYWRQcmVmZXJlbmNlLCBoaW50LCBleHBsYWluLCBjb21tZW50IH0pXG4gICAgICAudG9BcnJheSgpO1xuICB9XG5cbiAgaW5zZXJ0T25lKG9iamVjdCwgc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24uaW5zZXJ0T25lKG9iamVjdCwgeyBzZXNzaW9uIH0pO1xuICB9XG5cbiAgLy8gQXRvbWljYWxseSB1cGRhdGVzIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGZvciBhIHNpbmdsZSAoZmlyc3QpIG9iamVjdCB0aGF0IG1hdGNoZWQgdGhlIHF1ZXJ5XG4gIC8vIElmIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBtYXRjaGVzIHRoZSBxdWVyeSAtIGRvZXMgaW5zZXJ0XG4gIC8vIFBvc3RncmVzIE5vdGU6IGBJTlNFUlQgLi4uIE9OIENPTkZMSUNUIFVQREFURWAgdGhhdCBpcyBhdmFpbGFibGUgc2luY2UgOS41LlxuICB1cHNlcnRPbmUocXVlcnksIHVwZGF0ZSwgc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24udXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUsIHtcbiAgICAgIHVwc2VydDogdHJ1ZSxcbiAgICAgIHNlc3Npb24sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVPbmUocXVlcnksIHVwZGF0ZSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24udXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUpO1xuICB9XG5cbiAgdXBkYXRlTWFueShxdWVyeSwgdXBkYXRlLCBzZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi51cGRhdGVNYW55KHF1ZXJ5LCB1cGRhdGUsIHsgc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkocXVlcnksIHNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmRlbGV0ZU1hbnkocXVlcnksIHsgc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIF9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZChpbmRleFJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmNyZWF0ZUluZGV4KGluZGV4UmVxdWVzdCwge1xuICAgICAgdW5pcXVlOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZDogdHJ1ZSxcbiAgICAgIHNwYXJzZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGRyb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi5kcm9wKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLE1BQU1BLE9BQU8sR0FBR0MsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNsQyxNQUFNQyxVQUFVLEdBQUdGLE9BQU8sQ0FBQ0UsVUFBVTs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQzs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQUNDLEtBQUssRUFBRTtFQUN2QyxJQUFJLENBQUNBLEtBQUssSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO0lBQ3ZDLE9BQU9DLFNBQVM7RUFDbEI7RUFDQSxLQUFLLE1BQU1DLEtBQUssSUFBSUMsTUFBTSxDQUFDQyxJQUFJLENBQUNKLEtBQUssQ0FBQyxFQUFFO0lBQ3RDLE1BQU1LLEtBQUssR0FBR0wsS0FBSyxDQUFDRSxLQUFLLENBQUM7SUFDMUI7SUFDQSxJQUFJQSxLQUFLLEtBQUssTUFBTSxJQUFJSSxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDLEVBQUU7TUFDNUMsS0FBSyxNQUFNRyxRQUFRLElBQUlILEtBQUssRUFBRTtRQUM1QixNQUFNSSxLQUFLLEdBQUdWLGlCQUFpQixDQUFD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.10.0-alpha.7",
3
+ "version": "9.10.0",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {