parse-server 6.0.0-alpha.2 → 6.0.0-alpha.21

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.
Files changed (191) hide show
  1. package/README.md +45 -17
  2. package/lib/AccountLockout.js +11 -26
  3. package/lib/Adapters/AdapterLoader.js +8 -14
  4. package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
  5. package/lib/Adapters/Auth/AuthAdapter.js +7 -16
  6. package/lib/Adapters/Auth/OAuth1Client.js +32 -57
  7. package/lib/Adapters/Auth/apple.js +6 -22
  8. package/lib/Adapters/Auth/facebook.js +7 -37
  9. package/lib/Adapters/Auth/gcenter.js +8 -37
  10. package/lib/Adapters/Auth/github.js +7 -10
  11. package/lib/Adapters/Auth/google.js +11 -34
  12. package/lib/Adapters/Auth/gpgames.js +5 -8
  13. package/lib/Adapters/Auth/httpsRequest.js +1 -7
  14. package/lib/Adapters/Auth/index.js +20 -65
  15. package/lib/Adapters/Auth/instagram.js +5 -9
  16. package/lib/Adapters/Auth/janraincapture.js +8 -12
  17. package/lib/Adapters/Auth/janrainengage.js +7 -11
  18. package/lib/Adapters/Auth/keycloak.js +5 -19
  19. package/lib/Adapters/Auth/ldap.js +1 -15
  20. package/lib/Adapters/Auth/line.js +7 -10
  21. package/lib/Adapters/Auth/linkedin.js +7 -12
  22. package/lib/Adapters/Auth/meetup.js +7 -10
  23. package/lib/Adapters/Auth/microsoft.js +7 -10
  24. package/lib/Adapters/Auth/oauth2.js +6 -18
  25. package/lib/Adapters/Auth/phantauth.js +8 -10
  26. package/lib/Adapters/Auth/qq.js +7 -13
  27. package/lib/Adapters/Auth/spotify.js +7 -14
  28. package/lib/Adapters/Auth/twitter.js +5 -15
  29. package/lib/Adapters/Auth/vkontakte.js +9 -15
  30. package/lib/Adapters/Auth/wechat.js +7 -10
  31. package/lib/Adapters/Auth/weibo.js +7 -11
  32. package/lib/Adapters/Cache/CacheAdapter.js +4 -12
  33. package/lib/Adapters/Cache/InMemoryCache.js +5 -19
  34. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
  35. package/lib/Adapters/Cache/LRUCache.js +1 -11
  36. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
  37. package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
  38. package/lib/Adapters/Cache/SchemaCache.js +1 -6
  39. package/lib/Adapters/Email/MailAdapter.js +2 -7
  40. package/lib/Adapters/Files/FilesAdapter.js +7 -21
  41. package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
  42. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  43. package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
  44. package/lib/Adapters/Logger/WinstonLogger.js +3 -30
  45. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
  46. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
  47. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
  48. package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
  49. package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
  50. package/lib/Adapters/Push/PushAdapter.js +2 -8
  51. package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
  52. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
  53. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
  54. package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
  55. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
  56. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
  57. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
  58. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
  59. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  60. package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
  61. package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
  62. package/lib/Auth.js +54 -121
  63. package/lib/ClientSDK.js +3 -11
  64. package/lib/Config.js +69 -113
  65. package/lib/Controllers/AdaptableController.js +6 -18
  66. package/lib/Controllers/AnalyticsController.js +1 -9
  67. package/lib/Controllers/CacheController.js +3 -23
  68. package/lib/Controllers/DatabaseController.js +147 -345
  69. package/lib/Controllers/FilesController.js +5 -34
  70. package/lib/Controllers/HooksController.js +1 -51
  71. package/lib/Controllers/LiveQueryController.js +4 -23
  72. package/lib/Controllers/LoggerController.js +15 -54
  73. package/lib/Controllers/ParseGraphQLController.js +49 -104
  74. package/lib/Controllers/PushController.js +20 -59
  75. package/lib/Controllers/SchemaController.js +154 -344
  76. package/lib/Controllers/UserController.js +11 -72
  77. package/lib/Controllers/index.js +19 -68
  78. package/lib/Controllers/types.js +1 -1
  79. package/lib/Deprecator/Deprecations.js +1 -8
  80. package/lib/Deprecator/Deprecator.js +9 -18
  81. package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
  82. package/lib/GraphQL/ParseGraphQLServer.js +2 -29
  83. package/lib/GraphQL/helpers/objectsMutations.js +2 -12
  84. package/lib/GraphQL/helpers/objectsQueries.js +18 -76
  85. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
  86. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
  87. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
  88. package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
  89. package/lib/GraphQL/loaders/filesMutations.js +2 -19
  90. package/lib/GraphQL/loaders/functionsMutations.js +6 -17
  91. package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
  92. package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
  93. package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
  94. package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
  95. package/lib/GraphQL/loaders/schemaMutations.js +1 -20
  96. package/lib/GraphQL/loaders/schemaQueries.js +1 -14
  97. package/lib/GraphQL/loaders/schemaTypes.js +2 -6
  98. package/lib/GraphQL/loaders/usersMutations.js +6 -28
  99. package/lib/GraphQL/loaders/usersQueries.js +4 -26
  100. package/lib/GraphQL/parseGraphQLUtils.js +6 -19
  101. package/lib/GraphQL/transformers/className.js +1 -4
  102. package/lib/GraphQL/transformers/constraintType.js +1 -20
  103. package/lib/GraphQL/transformers/inputType.js +1 -20
  104. package/lib/GraphQL/transformers/mutation.js +6 -51
  105. package/lib/GraphQL/transformers/outputType.js +1 -20
  106. package/lib/GraphQL/transformers/query.js +6 -42
  107. package/lib/GraphQL/transformers/schemaFields.js +7 -34
  108. package/lib/KeyPromiseQueue.js +1 -12
  109. package/lib/LiveQuery/Client.js +1 -25
  110. package/lib/LiveQuery/Id.js +1 -7
  111. package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
  112. package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
  113. package/lib/LiveQuery/ParsePubSub.js +1 -12
  114. package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
  115. package/lib/LiveQuery/QueryTools.js +14 -116
  116. package/lib/LiveQuery/RequestSchema.js +1 -1
  117. package/lib/LiveQuery/SessionTokenCache.js +1 -17
  118. package/lib/LiveQuery/Subscription.js +4 -18
  119. package/lib/LiveQuery/equalObjects.js +2 -14
  120. package/lib/Options/Definitions.js +79 -10
  121. package/lib/Options/docs.js +23 -3
  122. package/lib/Options/index.js +4 -12
  123. package/lib/Options/parsers.js +1 -18
  124. package/lib/Page.js +1 -9
  125. package/lib/ParseMessageQueue.js +1 -10
  126. package/lib/ParseServer.js +144 -182
  127. package/lib/ParseServerRESTController.js +6 -33
  128. package/lib/PromiseRouter.js +16 -50
  129. package/lib/Push/PushQueue.js +3 -15
  130. package/lib/Push/PushWorker.js +7 -32
  131. package/lib/Push/utils.js +9 -38
  132. package/lib/RestQuery.js +105 -242
  133. package/lib/RestWrite.js +212 -377
  134. package/lib/Routers/AggregateRouter.js +14 -51
  135. package/lib/Routers/AnalyticsRouter.js +2 -8
  136. package/lib/Routers/AudiencesRouter.js +1 -15
  137. package/lib/Routers/ClassesRouter.js +3 -53
  138. package/lib/Routers/CloudCodeRouter.js +1 -19
  139. package/lib/Routers/FeaturesRouter.js +1 -10
  140. package/lib/Routers/FilesRouter.js +29 -76
  141. package/lib/Routers/FunctionsRouter.js +5 -28
  142. package/lib/Routers/GlobalConfigRouter.js +4 -18
  143. package/lib/Routers/GraphQLRouter.js +1 -14
  144. package/lib/Routers/HooksRouter.js +1 -29
  145. package/lib/Routers/IAPValidationRouter.js +6 -29
  146. package/lib/Routers/InstallationsRouter.js +2 -12
  147. package/lib/Routers/LogsRouter.js +4 -16
  148. package/lib/Routers/PagesRouter.js +69 -129
  149. package/lib/Routers/PublicAPIRouter.js +3 -62
  150. package/lib/Routers/PurgeRouter.js +1 -15
  151. package/lib/Routers/PushRouter.js +2 -18
  152. package/lib/Routers/RolesRouter.js +1 -7
  153. package/lib/Routers/SchemasRouter.js +4 -34
  154. package/lib/Routers/SecurityRouter.js +1 -12
  155. package/lib/Routers/SessionsRouter.js +3 -19
  156. package/lib/Routers/UsersRouter.js +58 -155
  157. package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
  158. package/lib/SchemaMigrations/Migrations.js +2 -8
  159. package/lib/Security/Check.js +8 -16
  160. package/lib/Security/CheckGroup.js +4 -11
  161. package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
  162. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
  163. package/lib/Security/CheckGroups/CheckGroups.js +1 -4
  164. package/lib/Security/CheckRunner.js +22 -41
  165. package/lib/StatusHandler.js +12 -69
  166. package/lib/TestUtils.js +1 -6
  167. package/lib/Utils.js +27 -66
  168. package/lib/batch.js +17 -28
  169. package/lib/cache.js +1 -3
  170. package/lib/cli/definitions/parse-live-query-server.js +1 -3
  171. package/lib/cli/definitions/parse-server.js +1 -3
  172. package/lib/cli/parse-live-query-server.js +1 -6
  173. package/lib/cli/parse-server.js +11 -21
  174. package/lib/cli/utils/commander.js +13 -51
  175. package/lib/cli/utils/runner.js +1 -14
  176. package/lib/cloud-code/Parse.Cloud.js +71 -92
  177. package/lib/cryptoUtils.js +11 -19
  178. package/lib/defaults.js +2 -14
  179. package/lib/deprecated.js +1 -2
  180. package/lib/index.js +16 -34
  181. package/lib/logger.js +6 -13
  182. package/lib/middlewares.js +147 -151
  183. package/lib/password.js +6 -10
  184. package/lib/request.js +173 -2
  185. package/lib/requiredParameter.js +1 -3
  186. package/lib/rest.js +19 -41
  187. package/lib/triggers.js +54 -252
  188. package/lib/vendor/mongodbUrl.js +125 -305
  189. package/package.json +22 -19
  190. package/lib/cloud-code/HTTPResponse.js +0 -73
  191. package/lib/cloud-code/httpRequest.js +0 -192
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Client = void 0;
7
-
8
7
  var _logger = _interopRequireDefault(require("../logger"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  const dafaultFields = ['className', 'objectId', 'updatedAt', 'createdAt', 'ACL'];
13
-
14
10
  class Client {
15
11
  constructor(id, parseWebSocket, hasMasterKey = false, sessionToken, installationId) {
16
12
  this.id = id;
@@ -29,13 +25,10 @@ class Client {
29
25
  this.pushDelete = this._pushEvent('delete');
30
26
  this.pushLeave = this._pushEvent('leave');
31
27
  }
32
-
33
28
  static pushResponse(parseWebSocket, message) {
34
29
  _logger.default.verbose('Push Response : %j', message);
35
-
36
30
  parseWebSocket.send(message);
37
31
  }
38
-
39
32
  static pushError(parseWebSocket, code, error, reconnect = true, requestId = null) {
40
33
  Client.pushResponse(parseWebSocket, JSON.stringify({
41
34
  op: 'error',
@@ -45,19 +38,15 @@ class Client {
45
38
  requestId
46
39
  }));
47
40
  }
48
-
49
41
  addSubscriptionInfo(requestId, subscriptionInfo) {
50
42
  this.subscriptionInfos.set(requestId, subscriptionInfo);
51
43
  }
52
-
53
44
  getSubscriptionInfo(requestId) {
54
45
  return this.subscriptionInfos.get(requestId);
55
46
  }
56
-
57
47
  deleteSubscriptionInfo(requestId) {
58
48
  return this.subscriptionInfos.delete(requestId);
59
49
  }
60
-
61
50
  _pushEvent(type) {
62
51
  return function (subscriptionId, parseObjectJSON, parseOriginalObjectJSON) {
63
52
  const response = {
@@ -65,50 +54,37 @@ class Client {
65
54
  clientId: this.id,
66
55
  installationId: this.installationId
67
56
  };
68
-
69
57
  if (typeof subscriptionId !== 'undefined') {
70
58
  response['requestId'] = subscriptionId;
71
59
  }
72
-
73
60
  if (typeof parseObjectJSON !== 'undefined') {
74
61
  let fields;
75
-
76
62
  if (this.subscriptionInfos.has(subscriptionId)) {
77
63
  fields = this.subscriptionInfos.get(subscriptionId).fields;
78
64
  }
79
-
80
65
  response['object'] = this._toJSONWithFields(parseObjectJSON, fields);
81
-
82
66
  if (parseOriginalObjectJSON) {
83
67
  response['original'] = this._toJSONWithFields(parseOriginalObjectJSON, fields);
84
68
  }
85
69
  }
86
-
87
70
  Client.pushResponse(this.parseWebSocket, JSON.stringify(response));
88
71
  };
89
72
  }
90
-
91
73
  _toJSONWithFields(parseObjectJSON, fields) {
92
74
  if (!fields) {
93
75
  return parseObjectJSON;
94
76
  }
95
-
96
77
  const limitedParseObject = {};
97
-
98
78
  for (const field of dafaultFields) {
99
79
  limitedParseObject[field] = parseObjectJSON[field];
100
80
  }
101
-
102
81
  for (const field of fields) {
103
82
  if (field in parseObjectJSON) {
104
83
  limitedParseObject[field] = parseObjectJSON[field];
105
84
  }
106
85
  }
107
-
108
86
  return limitedParseObject;
109
87
  }
110
-
111
88
  }
112
-
113
89
  exports.Client = Client;
114
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvQ2xpZW50LmpzIl0sIm5hbWVzIjpbImRhZmF1bHRGaWVsZHMiLCJDbGllbnQiLCJjb25zdHJ1Y3RvciIsImlkIiwicGFyc2VXZWJTb2NrZXQiLCJoYXNNYXN0ZXJLZXkiLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsInJvbGVzIiwic3Vic2NyaXB0aW9uSW5mb3MiLCJNYXAiLCJwdXNoQ29ubmVjdCIsIl9wdXNoRXZlbnQiLCJwdXNoU3Vic2NyaWJlIiwicHVzaFVuc3Vic2NyaWJlIiwicHVzaENyZWF0ZSIsInB1c2hFbnRlciIsInB1c2hVcGRhdGUiLCJwdXNoRGVsZXRlIiwicHVzaExlYXZlIiwicHVzaFJlc3BvbnNlIiwibWVzc2FnZSIsImxvZ2dlciIsInZlcmJvc2UiLCJzZW5kIiwicHVzaEVycm9yIiwiY29kZSIsImVycm9yIiwicmVjb25uZWN0IiwicmVxdWVzdElkIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wIiwiYWRkU3Vic2NyaXB0aW9uSW5mbyIsInN1YnNjcmlwdGlvbkluZm8iLCJzZXQiLCJnZXRTdWJzY3JpcHRpb25JbmZvIiwiZ2V0IiwiZGVsZXRlU3Vic2NyaXB0aW9uSW5mbyIsImRlbGV0ZSIsInR5cGUiLCJzdWJzY3JpcHRpb25JZCIsInBhcnNlT2JqZWN0SlNPTiIsInBhcnNlT3JpZ2luYWxPYmplY3RKU09OIiwicmVzcG9uc2UiLCJjbGllbnRJZCIsImZpZWxkcyIsImhhcyIsIl90b0pTT05XaXRoRmllbGRzIiwibGltaXRlZFBhcnNlT2JqZWN0IiwiZmllbGQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUtBLE1BQU1BLGFBQWEsR0FBRyxDQUFDLFdBQUQsRUFBYyxVQUFkLEVBQTBCLFdBQTFCLEVBQXVDLFdBQXZDLEVBQW9ELEtBQXBELENBQXRCOztBQUVBLE1BQU1DLE1BQU4sQ0FBYTtBQWtCWEMsRUFBQUEsV0FBVyxDQUNUQyxFQURTLEVBRVRDLGNBRlMsRUFHVEMsWUFBcUIsR0FBRyxLQUhmLEVBSVRDLFlBSlMsRUFLVEMsY0FMUyxFQU1UO0FBQ0EsU0FBS0osRUFBTCxHQUFVQSxFQUFWO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQkEsY0FBdEI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CQSxZQUFwQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0JBLFlBQXBCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQkEsY0FBdEI7QUFDQSxTQUFLQyxLQUFMLEdBQWEsRUFBYjtBQUNBLFNBQUtDLGlCQUFMLEdBQXlCLElBQUlDLEdBQUosRUFBekI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtDLFVBQUwsQ0FBZ0IsV0FBaEIsQ0FBbkI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQUtELFVBQUwsQ0FBZ0IsWUFBaEIsQ0FBckI7QUFDQSxTQUFLRSxlQUFMLEdBQXVCLEtBQUtGLFVBQUwsQ0FBZ0IsY0FBaEIsQ0FBdkI7QUFDQSxTQUFLRyxVQUFMLEdBQWtCLEtBQUtILFVBQUwsQ0FBZ0IsUUFBaEIsQ0FBbEI7QUFDQSxTQUFLSSxTQUFMLEdBQWlCLEtBQUtKLFVBQUwsQ0FBZ0IsT0FBaEIsQ0FBakI7QUFDQSxTQUFLSyxVQUFMLEdBQWtCLEtBQUtMLFVBQUwsQ0FBZ0IsUUFBaEIsQ0FBbEI7QUFDQSxTQUFLTSxVQUFMLEdBQWtCLEtBQUtOLFVBQUwsQ0FBZ0IsUUFBaEIsQ0FBbEI7QUFDQSxTQUFLTyxTQUFMLEdBQWlCLEtBQUtQLFVBQUwsQ0FBZ0IsT0FBaEIsQ0FBakI7QUFDRDs7QUFFa0IsU0FBWlEsWUFBWSxDQUFDaEIsY0FBRCxFQUFzQmlCLE9BQXRCLEVBQThDO0FBQy9EQyxvQkFBT0MsT0FBUCxDQUFlLG9CQUFmLEVBQXFDRixPQUFyQzs7QUFDQWpCLElBQUFBLGNBQWMsQ0FBQ29CLElBQWYsQ0FBb0JILE9BQXBCO0FBQ0Q7O0FBRWUsU0FBVEksU0FBUyxDQUNkckIsY0FEYyxFQUVkc0IsSUFGYyxFQUdkQyxLQUhjLEVBSWRDLFNBQWtCLEdBQUcsSUFKUCxFQUtkQyxTQUF3QixHQUFHLElBTGIsRUFNUjtBQUNONUIsSUFBQUEsTUFBTSxDQUFDbUIsWUFBUCxDQUNFaEIsY0FERixFQUVFMEIsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFDYkMsTUFBQUEsRUFBRSxFQUFFLE9BRFM7QUFFYkwsTUFBQUEsS0FGYTtBQUdiRCxNQUFBQSxJQUhhO0FBSWJFLE1BQUFBLFNBSmE7QUFLYkMsTUFBQUE7QUFMYSxLQUFmLENBRkY7QUFVRDs7QUFFREksRUFBQUEsbUJBQW1CLENBQUNKLFNBQUQsRUFBb0JLLGdCQUFwQixFQUFpRDtBQUNsRSxTQUFLekIsaUJBQUwsQ0FBdUIwQixHQUF2QixDQUEyQk4sU0FBM0IsRUFBc0NLLGdCQUF0QztBQUNEOztBQUVERSxFQUFBQSxtQkFBbUIsQ0FBQ1AsU0FBRCxFQUF5QjtBQUMxQyxXQUFPLEtBQUtwQixpQkFBTCxDQUF1QjRCLEdBQXZCLENBQTJCUixTQUEzQixDQUFQO0FBQ0Q7O0FBRURTLEVBQUFBLHNCQUFzQixDQUFDVCxTQUFELEVBQTBCO0FBQzlDLFdBQU8sS0FBS3BCLGlCQUFMLENBQXVCOEIsTUFBdkIsQ0FBOEJWLFNBQTlCLENBQVA7QUFDRDs7QUFFRGpCLEVBQUFBLFVBQVUsQ0FBQzRCLElBQUQsRUFBeUI7QUFDakMsV0FBTyxVQUNMQyxjQURLLEVBRUxDLGVBRkssRUFHTEMsdUJBSEssRUFJQztBQUNOLFlBQU1DLFFBQWlCLEdBQUc7QUFDeEJaLFFBQUFBLEVBQUUsRUFBRVEsSUFEb0I7QUFFeEJLLFFBQUFBLFFBQVEsRUFBRSxLQUFLMUMsRUFGUztBQUd4QkksUUFBQUEsY0FBYyxFQUFFLEtBQUtBO0FBSEcsT0FBMUI7O0FBS0EsVUFBSSxPQUFPa0MsY0FBUCxLQUEwQixXQUE5QixFQUEyQztBQUN6Q0csUUFBQUEsUUFBUSxDQUFDLFdBQUQsQ0FBUixHQUF3QkgsY0FBeEI7QUFDRDs7QUFDRCxVQUFJLE9BQU9DLGVBQVAsS0FBMkIsV0FBL0IsRUFBNEM7QUFDMUMsWUFBSUksTUFBSjs7QUFDQSxZQUFJLEtBQUtyQyxpQkFBTCxDQUF1QnNDLEdBQXZCLENBQTJCTixjQUEzQixDQUFKLEVBQWdEO0FBQzlDSyxVQUFBQSxNQUFNLEdBQUcsS0FBS3JDLGlCQUFMLENBQXVCNEIsR0FBdkIsQ0FBMkJJLGNBQTNCLEVBQTJDSyxNQUFwRDtBQUNEOztBQUNERixRQUFBQSxRQUFRLENBQUMsUUFBRCxDQUFSLEdBQXFCLEtBQUtJLGlCQUFMLENBQXVCTixlQUF2QixFQUF3Q0ksTUFBeEMsQ0FBckI7O0FBQ0EsWUFBSUgsdUJBQUosRUFBNkI7QUFDM0JDLFVBQUFBLFFBQVEsQ0FBQyxVQUFELENBQVIsR0FBdUIsS0FBS0ksaUJBQUwsQ0FBdUJMLHVCQUF2QixFQUFnREcsTUFBaEQsQ0FBdkI7QUFDRDtBQUNGOztBQUNEN0MsTUFBQUEsTUFBTSxDQUFDbUIsWUFBUCxDQUFvQixLQUFLaEIsY0FBekIsRUFBeUMwQixJQUFJLENBQUNDLFNBQUwsQ0FBZWEsUUFBZixDQUF6QztBQUNELEtBeEJEO0FBeUJEOztBQUVESSxFQUFBQSxpQkFBaUIsQ0FBQ04sZUFBRCxFQUF1QkksTUFBdkIsRUFBeUQ7QUFDeEUsUUFBSSxDQUFDQSxNQUFMLEVBQWE7QUFDWCxhQUFPSixlQUFQO0FBQ0Q7O0FBQ0QsVUFBTU8sa0JBQWtCLEdBQUcsRUFBM0I7O0FBQ0EsU0FBSyxNQUFNQyxLQUFYLElBQW9CbEQsYUFBcEIsRUFBbUM7QUFDakNpRCxNQUFBQSxrQkFBa0IsQ0FBQ0MsS0FBRCxDQUFsQixHQUE0QlIsZUFBZSxDQUFDUSxLQUFELENBQTNDO0FBQ0Q7O0FBQ0QsU0FBSyxNQUFNQSxLQUFYLElBQW9CSixNQUFwQixFQUE0QjtBQUMxQixVQUFJSSxLQUFLLElBQUlSLGVBQWIsRUFBOEI7QUFDNUJPLFFBQUFBLGtCQUFrQixDQUFDQyxLQUFELENBQWxCLEdBQTRCUixlQUFlLENBQUNRLEtBQUQsQ0FBM0M7QUFDRDtBQUNGOztBQUNELFdBQU9ELGtCQUFQO0FBQ0Q7O0FBeEhVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5pbXBvcnQgdHlwZSB7IEZsYXR0ZW5lZE9iamVjdERhdGEgfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5leHBvcnQgdHlwZSBNZXNzYWdlID0geyBbYXR0cjogc3RyaW5nXTogYW55IH07XG5cbmNvbnN0IGRhZmF1bHRGaWVsZHMgPSBbJ2NsYXNzTmFtZScsICdvYmplY3RJZCcsICd1cGRhdGVkQXQnLCAnY3JlYXRlZEF0JywgJ0FDTCddO1xuXG5jbGFzcyBDbGllbnQge1xuICBpZDogbnVtYmVyO1xuICBwYXJzZVdlYlNvY2tldDogYW55O1xuICBoYXNNYXN0ZXJLZXk6IGJvb2xlYW47XG4gIHNlc3Npb25Ub2tlbjogc3RyaW5nO1xuICBpbnN0YWxsYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gIHN1YnNjcmlwdGlvbkluZm9zOiBPYmplY3Q7XG4gIHB1c2hDb25uZWN0OiBGdW5jdGlvbjtcbiAgcHVzaFN1YnNjcmliZTogRnVuY3Rpb247XG4gIHB1c2hVbnN1YnNjcmliZTogRnVuY3Rpb247XG4gIHB1c2hDcmVhdGU6IEZ1bmN0aW9uO1xuICBwdXNoRW50ZXI6IEZ1bmN0aW9uO1xuICBwdXNoVXBkYXRlOiBGdW5jdGlvbjtcbiAgcHVzaERlbGV0ZTogRnVuY3Rpb247XG4gIHB1c2hMZWF2ZTogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IG51bWJlcixcbiAgICBwYXJzZVdlYlNvY2tldDogYW55LFxuICAgIGhhc01hc3RlcktleTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxuICAgIGluc3RhbGxhdGlvbklkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMucGFyc2VXZWJTb2NrZXQgPSBwYXJzZVdlYlNvY2tldDtcbiAgICB0aGlzLmhhc01hc3RlcktleSA9IGhhc01hc3RlcktleTtcbiAgICB0aGlzLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcbiAgICB0aGlzLmluc3RhbGxhdGlvbklkID0gaW5zdGFsbGF0aW9uSWQ7XG4gICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uSW5mb3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5wdXNoQ29ubmVjdCA9IHRoaXMuX3B1c2hFdmVudCgnY29ubmVjdGVkJyk7XG4gICAgdGhpcy5wdXNoU3Vic2NyaWJlID0gdGhpcy5fcHVzaEV2ZW50KCdzdWJzY3JpYmVkJyk7XG4gICAgdGhpcy5wdXNoVW5zdWJzY3JpYmUgPSB0aGlzLl9wdXNoRXZlbnQoJ3Vuc3Vic2NyaWJlZCcpO1xuICAgIHRoaXMucHVzaENyZWF0ZSA9IHRoaXMuX3B1c2hFdmVudCgnY3JlYXRlJyk7XG4gICAgdGhpcy5wdXNoRW50ZXIgPSB0aGlzLl9wdXNoRXZlbnQoJ2VudGVyJyk7XG4gICAgdGhpcy5wdXNoVXBkYXRlID0gdGhpcy5fcHVzaEV2ZW50KCd1cGRhdGUnKTtcbiAgICB0aGlzLnB1c2hEZWxldGUgPSB0aGlzLl9wdXNoRXZlbnQoJ2RlbGV0ZScpO1xuICAgIHRoaXMucHVzaExlYXZlID0gdGhpcy5fcHVzaEV2ZW50KCdsZWF2ZScpO1xuICB9XG5cbiAgc3RhdGljIHB1c2hSZXNwb25zZShwYXJzZVdlYlNvY2tldDogYW55LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ1B1c2ggUmVzcG9uc2UgOiAlaicsIG1lc3NhZ2UpO1xuICAgIHBhcnNlV2ViU29ja2V0LnNlbmQobWVzc2FnZSk7XG4gIH1cblxuICBzdGF0aWMgcHVzaEVycm9yKFxuICAgIHBhcnNlV2ViU29ja2V0OiBhbnksXG4gICAgY29kZTogbnVtYmVyLFxuICAgIGVycm9yOiBzdHJpbmcsXG4gICAgcmVjb25uZWN0OiBib29sZWFuID0gdHJ1ZSxcbiAgICByZXF1ZXN0SWQ6IG51bWJlciB8IHZvaWQgPSBudWxsXG4gICk6IHZvaWQge1xuICAgIENsaWVudC5wdXNoUmVzcG9uc2UoXG4gICAgICBwYXJzZVdlYlNvY2tldCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgb3A6ICdlcnJvcicsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBjb2RlLFxuICAgICAgICByZWNvbm5lY3QsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFkZFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkOiBudW1iZXIsIHN1YnNjcmlwdGlvbkluZm86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uSW5mb3Muc2V0KHJlcXVlc3RJZCwgc3Vic2NyaXB0aW9uSW5mbyk7XG4gIH1cblxuICBnZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5nZXQocmVxdWVzdElkKTtcbiAgfVxuXG4gIGRlbGV0ZVN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5kZWxldGUocmVxdWVzdElkKTtcbiAgfVxuXG4gIF9wdXNoRXZlbnQodHlwZTogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiBmdW5jdGlvbiAoXG4gICAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyLFxuICAgICAgcGFyc2VPYmplY3RKU09OOiBhbnksXG4gICAgICBwYXJzZU9yaWdpbmFsT2JqZWN0SlNPTjogYW55XG4gICAgKTogdm9pZCB7XG4gICAgICBjb25zdCByZXNwb25zZTogTWVzc2FnZSA9IHtcbiAgICAgICAgb3A6IHR5cGUsXG4gICAgICAgIGNsaWVudElkOiB0aGlzLmlkLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogdGhpcy5pbnN0YWxsYXRpb25JZCxcbiAgICAgIH07XG4gICAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbklkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXNwb25zZVsncmVxdWVzdElkJ10gPSBzdWJzY3JpcHRpb25JZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGFyc2VPYmplY3RKU09OICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgZmllbGRzO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25JbmZvcy5oYXMoc3Vic2NyaXB0aW9uSWQpKSB7XG4gICAgICAgICAgZmllbGRzID0gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5nZXQoc3Vic2NyaXB0aW9uSWQpLmZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICByZXNwb25zZVsnb2JqZWN0J10gPSB0aGlzLl90b0pTT05XaXRoRmllbGRzKHBhcnNlT2JqZWN0SlNPTiwgZmllbGRzKTtcbiAgICAgICAgaWYgKHBhcnNlT3JpZ2luYWxPYmplY3RKU09OKSB7XG4gICAgICAgICAgcmVzcG9uc2VbJ29yaWdpbmFsJ10gPSB0aGlzLl90b0pTT05XaXRoRmllbGRzKHBhcnNlT3JpZ2luYWxPYmplY3RKU09OLCBmaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBDbGllbnQucHVzaFJlc3BvbnNlKHRoaXMucGFyc2VXZWJTb2NrZXQsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSk7XG4gICAgfTtcbiAgfVxuXG4gIF90b0pTT05XaXRoRmllbGRzKHBhcnNlT2JqZWN0SlNPTjogYW55LCBmaWVsZHM6IGFueSk6IEZsYXR0ZW5lZE9iamVjdERhdGEge1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4gcGFyc2VPYmplY3RKU09OO1xuICAgIH1cbiAgICBjb25zdCBsaW1pdGVkUGFyc2VPYmplY3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGRhZmF1bHRGaWVsZHMpIHtcbiAgICAgIGxpbWl0ZWRQYXJzZU9iamVjdFtmaWVsZF0gPSBwYXJzZU9iamVjdEpTT05bZmllbGRdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkIGluIHBhcnNlT2JqZWN0SlNPTikge1xuICAgICAgICBsaW1pdGVkUGFyc2VPYmplY3RbZmllbGRdID0gcGFyc2VPYmplY3RKU09OW2ZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbWl0ZWRQYXJzZU9iamVjdDtcbiAgfVxufVxuXG5leHBvcnQgeyBDbGllbnQgfTtcbiJdfQ==
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkYWZhdWx0RmllbGRzIiwiQ2xpZW50IiwiY29uc3RydWN0b3IiLCJpZCIsInBhcnNlV2ViU29ja2V0IiwiaGFzTWFzdGVyS2V5Iiwic2Vzc2lvblRva2VuIiwiaW5zdGFsbGF0aW9uSWQiLCJyb2xlcyIsInN1YnNjcmlwdGlvbkluZm9zIiwiTWFwIiwicHVzaENvbm5lY3QiLCJfcHVzaEV2ZW50IiwicHVzaFN1YnNjcmliZSIsInB1c2hVbnN1YnNjcmliZSIsInB1c2hDcmVhdGUiLCJwdXNoRW50ZXIiLCJwdXNoVXBkYXRlIiwicHVzaERlbGV0ZSIsInB1c2hMZWF2ZSIsInB1c2hSZXNwb25zZSIsIm1lc3NhZ2UiLCJsb2dnZXIiLCJ2ZXJib3NlIiwic2VuZCIsInB1c2hFcnJvciIsImNvZGUiLCJlcnJvciIsInJlY29ubmVjdCIsInJlcXVlc3RJZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcCIsImFkZFN1YnNjcmlwdGlvbkluZm8iLCJzdWJzY3JpcHRpb25JbmZvIiwic2V0IiwiZ2V0U3Vic2NyaXB0aW9uSW5mbyIsImdldCIsImRlbGV0ZVN1YnNjcmlwdGlvbkluZm8iLCJkZWxldGUiLCJ0eXBlIiwic3Vic2NyaXB0aW9uSWQiLCJwYXJzZU9iamVjdEpTT04iLCJwYXJzZU9yaWdpbmFsT2JqZWN0SlNPTiIsInJlc3BvbnNlIiwiY2xpZW50SWQiLCJmaWVsZHMiLCJoYXMiLCJfdG9KU09OV2l0aEZpZWxkcyIsImxpbWl0ZWRQYXJzZU9iamVjdCIsImZpZWxkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0xpdmVRdWVyeS9DbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5pbXBvcnQgdHlwZSB7IEZsYXR0ZW5lZE9iamVjdERhdGEgfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5leHBvcnQgdHlwZSBNZXNzYWdlID0geyBbYXR0cjogc3RyaW5nXTogYW55IH07XG5cbmNvbnN0IGRhZmF1bHRGaWVsZHMgPSBbJ2NsYXNzTmFtZScsICdvYmplY3RJZCcsICd1cGRhdGVkQXQnLCAnY3JlYXRlZEF0JywgJ0FDTCddO1xuXG5jbGFzcyBDbGllbnQge1xuICBpZDogbnVtYmVyO1xuICBwYXJzZVdlYlNvY2tldDogYW55O1xuICBoYXNNYXN0ZXJLZXk6IGJvb2xlYW47XG4gIHNlc3Npb25Ub2tlbjogc3RyaW5nO1xuICBpbnN0YWxsYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gIHN1YnNjcmlwdGlvbkluZm9zOiBPYmplY3Q7XG4gIHB1c2hDb25uZWN0OiBGdW5jdGlvbjtcbiAgcHVzaFN1YnNjcmliZTogRnVuY3Rpb247XG4gIHB1c2hVbnN1YnNjcmliZTogRnVuY3Rpb247XG4gIHB1c2hDcmVhdGU6IEZ1bmN0aW9uO1xuICBwdXNoRW50ZXI6IEZ1bmN0aW9uO1xuICBwdXNoVXBkYXRlOiBGdW5jdGlvbjtcbiAgcHVzaERlbGV0ZTogRnVuY3Rpb247XG4gIHB1c2hMZWF2ZTogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IG51bWJlcixcbiAgICBwYXJzZVdlYlNvY2tldDogYW55LFxuICAgIGhhc01hc3RlcktleTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxuICAgIGluc3RhbGxhdGlvbklkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMucGFyc2VXZWJTb2NrZXQgPSBwYXJzZVdlYlNvY2tldDtcbiAgICB0aGlzLmhhc01hc3RlcktleSA9IGhhc01hc3RlcktleTtcbiAgICB0aGlzLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcbiAgICB0aGlzLmluc3RhbGxhdGlvbklkID0gaW5zdGFsbGF0aW9uSWQ7XG4gICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uSW5mb3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5wdXNoQ29ubmVjdCA9IHRoaXMuX3B1c2hFdmVudCgnY29ubmVjdGVkJyk7XG4gICAgdGhpcy5wdXNoU3Vic2NyaWJlID0gdGhpcy5fcHVzaEV2ZW50KCdzdWJzY3JpYmVkJyk7XG4gICAgdGhpcy5wdXNoVW5zdWJzY3JpYmUgPSB0aGlzLl9wdXNoRXZlbnQoJ3Vuc3Vic2NyaWJlZCcpO1xuICAgIHRoaXMucHVzaENyZWF0ZSA9IHRoaXMuX3B1c2hFdmVudCgnY3JlYXRlJyk7XG4gICAgdGhpcy5wdXNoRW50ZXIgPSB0aGlzLl9wdXNoRXZlbnQoJ2VudGVyJyk7XG4gICAgdGhpcy5wdXNoVXBkYXRlID0gdGhpcy5fcHVzaEV2ZW50KCd1cGRhdGUnKTtcbiAgICB0aGlzLnB1c2hEZWxldGUgPSB0aGlzLl9wdXNoRXZlbnQoJ2RlbGV0ZScpO1xuICAgIHRoaXMucHVzaExlYXZlID0gdGhpcy5fcHVzaEV2ZW50KCdsZWF2ZScpO1xuICB9XG5cbiAgc3RhdGljIHB1c2hSZXNwb25zZShwYXJzZVdlYlNvY2tldDogYW55LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ1B1c2ggUmVzcG9uc2UgOiAlaicsIG1lc3NhZ2UpO1xuICAgIHBhcnNlV2ViU29ja2V0LnNlbmQobWVzc2FnZSk7XG4gIH1cblxuICBzdGF0aWMgcHVzaEVycm9yKFxuICAgIHBhcnNlV2ViU29ja2V0OiBhbnksXG4gICAgY29kZTogbnVtYmVyLFxuICAgIGVycm9yOiBzdHJpbmcsXG4gICAgcmVjb25uZWN0OiBib29sZWFuID0gdHJ1ZSxcbiAgICByZXF1ZXN0SWQ6IG51bWJlciB8IHZvaWQgPSBudWxsXG4gICk6IHZvaWQge1xuICAgIENsaWVudC5wdXNoUmVzcG9uc2UoXG4gICAgICBwYXJzZVdlYlNvY2tldCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgb3A6ICdlcnJvcicsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBjb2RlLFxuICAgICAgICByZWNvbm5lY3QsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFkZFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkOiBudW1iZXIsIHN1YnNjcmlwdGlvbkluZm86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uSW5mb3Muc2V0KHJlcXVlc3RJZCwgc3Vic2NyaXB0aW9uSW5mbyk7XG4gIH1cblxuICBnZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5nZXQocmVxdWVzdElkKTtcbiAgfVxuXG4gIGRlbGV0ZVN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5kZWxldGUocmVxdWVzdElkKTtcbiAgfVxuXG4gIF9wdXNoRXZlbnQodHlwZTogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiBmdW5jdGlvbiAoXG4gICAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyLFxuICAgICAgcGFyc2VPYmplY3RKU09OOiBhbnksXG4gICAgICBwYXJzZU9yaWdpbmFsT2JqZWN0SlNPTjogYW55XG4gICAgKTogdm9pZCB7XG4gICAgICBjb25zdCByZXNwb25zZTogTWVzc2FnZSA9IHtcbiAgICAgICAgb3A6IHR5cGUsXG4gICAgICAgIGNsaWVudElkOiB0aGlzLmlkLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogdGhpcy5pbnN0YWxsYXRpb25JZCxcbiAgICAgIH07XG4gICAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbklkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXNwb25zZVsncmVxdWVzdElkJ10gPSBzdWJzY3JpcHRpb25JZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGFyc2VPYmplY3RKU09OICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgZmllbGRzO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25JbmZvcy5oYXMoc3Vic2NyaXB0aW9uSWQpKSB7XG4gICAgICAgICAgZmllbGRzID0gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5nZXQoc3Vic2NyaXB0aW9uSWQpLmZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICByZXNwb25zZVsnb2JqZWN0J10gPSB0aGlzLl90b0pTT05XaXRoRmllbGRzKHBhcnNlT2JqZWN0SlNPTiwgZmllbGRzKTtcbiAgICAgICAgaWYgKHBhcnNlT3JpZ2luYWxPYmplY3RKU09OKSB7XG4gICAgICAgICAgcmVzcG9uc2VbJ29yaWdpbmFsJ10gPSB0aGlzLl90b0pTT05XaXRoRmllbGRzKHBhcnNlT3JpZ2luYWxPYmplY3RKU09OLCBmaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBDbGllbnQucHVzaFJlc3BvbnNlKHRoaXMucGFyc2VXZWJTb2NrZXQsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSk7XG4gICAgfTtcbiAgfVxuXG4gIF90b0pTT05XaXRoRmllbGRzKHBhcnNlT2JqZWN0SlNPTjogYW55LCBmaWVsZHM6IGFueSk6IEZsYXR0ZW5lZE9iamVjdERhdGEge1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4gcGFyc2VPYmplY3RKU09OO1xuICAgIH1cbiAgICBjb25zdCBsaW1pdGVkUGFyc2VPYmplY3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGRhZmF1bHRGaWVsZHMpIHtcbiAgICAgIGxpbWl0ZWRQYXJzZU9iamVjdFtmaWVsZF0gPSBwYXJzZU9iamVjdEpTT05bZmllbGRdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkIGluIHBhcnNlT2JqZWN0SlNPTikge1xuICAgICAgICBsaW1pdGVkUGFyc2VPYmplY3RbZmllbGRdID0gcGFyc2VPYmplY3RKU09OW2ZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu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
@@ -5,22 +5,16 @@ class Id {
5
5
  this.className = className;
6
6
  this.objectId = objectId;
7
7
  }
8
-
9
8
  toString() {
10
9
  return this.className + ':' + this.objectId;
11
10
  }
12
-
13
11
  static fromString(str) {
14
12
  var split = str.split(':');
15
-
16
13
  if (split.length !== 2) {
17
14
  throw new TypeError('Cannot create Id object from this string');
18
15
  }
19
-
20
16
  return new Id(split[0], split[1]);
21
17
  }
22
-
23
18
  }
24
-
25
19
  module.exports = Id;
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvSWQuanMiXSwibmFtZXMiOlsiSWQiLCJjb25zdHJ1Y3RvciIsImNsYXNzTmFtZSIsIm9iamVjdElkIiwidG9TdHJpbmciLCJmcm9tU3RyaW5nIiwic3RyIiwic3BsaXQiLCJsZW5ndGgiLCJUeXBlRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEVBQU4sQ0FBUztBQUlQQyxFQUFBQSxXQUFXLENBQUNDLFNBQUQsRUFBb0JDLFFBQXBCLEVBQXNDO0FBQy9DLFNBQUtELFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7QUFDRDs7QUFDREMsRUFBQUEsUUFBUSxHQUFXO0FBQ2pCLFdBQU8sS0FBS0YsU0FBTCxHQUFpQixHQUFqQixHQUF1QixLQUFLQyxRQUFuQztBQUNEOztBQUVnQixTQUFWRSxVQUFVLENBQUNDLEdBQUQsRUFBYztBQUM3QixRQUFJQyxLQUFLLEdBQUdELEdBQUcsQ0FBQ0MsS0FBSixDQUFVLEdBQVYsQ0FBWjs7QUFDQSxRQUFJQSxLQUFLLENBQUNDLE1BQU4sS0FBaUIsQ0FBckIsRUFBd0I7QUFDdEIsWUFBTSxJQUFJQyxTQUFKLENBQWMsMENBQWQsQ0FBTjtBQUNEOztBQUNELFdBQU8sSUFBSVQsRUFBSixDQUFPTyxLQUFLLENBQUMsQ0FBRCxDQUFaLEVBQWlCQSxLQUFLLENBQUMsQ0FBRCxDQUF0QixDQUFQO0FBQ0Q7O0FBbEJNOztBQXFCVEcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCWCxFQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIElkIHtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIG9iamVjdElkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY2xhc3NOYW1lOiBzdHJpbmcsIG9iamVjdElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICB0aGlzLm9iamVjdElkID0gb2JqZWN0SWQ7XG4gIH1cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc05hbWUgKyAnOicgKyB0aGlzLm9iamVjdElkO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICB2YXIgc3BsaXQgPSBzdHIuc3BsaXQoJzonKTtcbiAgICBpZiAoc3BsaXQubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY3JlYXRlIElkIG9iamVjdCBmcm9tIHRoaXMgc3RyaW5nJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSWQoc3BsaXRbMF0sIHNwbGl0WzFdKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IElkO1xuIl19
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJZCIsImNvbnN0cnVjdG9yIiwiY2xhc3NOYW1lIiwib2JqZWN0SWQiLCJ0b1N0cmluZyIsImZyb21TdHJpbmciLCJzdHIiLCJzcGxpdCIsImxlbmd0aCIsIlR5cGVFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvTGl2ZVF1ZXJ5L0lkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIElkIHtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIG9iamVjdElkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY2xhc3NOYW1lOiBzdHJpbmcsIG9iamVjdElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICB0aGlzLm9iamVjdElkID0gb2JqZWN0SWQ7XG4gIH1cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc05hbWUgKyAnOicgKyB0aGlzLm9iamVjdElkO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICB2YXIgc3BsaXQgPSBzdHIuc3BsaXQoJzonKTtcbiAgICBpZiAoc3BsaXQubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY3JlYXRlIElkIG9iamVjdCBmcm9tIHRoaXMgc3RyaW5nJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSWQoc3BsaXRbMF0sIHNwbGl0WzFdKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IElkO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEVBQUUsQ0FBQztFQUlQQyxXQUFXLENBQUNDLFNBQWlCLEVBQUVDLFFBQWdCLEVBQUU7SUFDL0MsSUFBSSxDQUFDRCxTQUFTLEdBQUdBLFNBQVM7SUFDMUIsSUFBSSxDQUFDQyxRQUFRLEdBQUdBLFFBQVE7RUFDMUI7RUFDQUMsUUFBUSxHQUFXO0lBQ2pCLE9BQU8sSUFBSSxDQUFDRixTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQ0MsUUFBUTtFQUM3QztFQUVBLE9BQU9FLFVBQVUsQ0FBQ0MsR0FBVyxFQUFFO0lBQzdCLElBQUlDLEtBQUssR0FBR0QsR0FBRyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCLElBQUlBLEtBQUssQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN0QixNQUFNLElBQUlDLFNBQVMsQ0FBQywwQ0FBMEMsQ0FBQztJQUNqRTtJQUNBLE9BQU8sSUFBSVQsRUFBRSxDQUFDTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQztBQUNGO0FBRUFHLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHWCxFQUFFIn0=
@@ -4,57 +4,51 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ParseCloudCodePublisher = void 0;
7
-
8
7
  var _ParsePubSub = require("./ParsePubSub");
9
-
10
8
  var _node = _interopRequireDefault(require("parse/node"));
11
-
12
9
  var _logger = _interopRequireDefault(require("../logger"));
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  class ParseCloudCodePublisher {
17
12
  // config object of the publisher, right now it only contains the redisURL,
18
13
  // but we may extend it later.
19
14
  constructor(config = {}) {
20
15
  this.parsePublisher = _ParsePubSub.ParsePubSub.createPublisher(config);
21
16
  }
22
-
17
+ async connect() {
18
+ if (typeof this.parsePublisher.connect === 'function') {
19
+ if (this.parsePublisher.isOpen) {
20
+ return;
21
+ }
22
+ return Promise.resolve(this.parsePublisher.connect());
23
+ }
24
+ }
23
25
  onCloudCodeAfterSave(request) {
24
26
  this._onCloudCodeMessage(_node.default.applicationId + 'afterSave', request);
25
27
  }
26
-
27
28
  onCloudCodeAfterDelete(request) {
28
29
  this._onCloudCodeMessage(_node.default.applicationId + 'afterDelete', request);
29
30
  }
30
-
31
31
  onClearCachedRoles(user) {
32
32
  this.parsePublisher.publish(_node.default.applicationId + 'clearCache', JSON.stringify({
33
33
  userId: user.id
34
34
  }));
35
- } // Request is the request object from cloud code functions. request.object is a ParseObject.
36
-
35
+ }
37
36
 
37
+ // Request is the request object from cloud code functions. request.object is a ParseObject.
38
38
  _onCloudCodeMessage(type, request) {
39
- _logger.default.verbose('Raw request from cloud code current : %j | original : %j', request.object, request.original); // We need the full JSON which includes className
40
-
41
-
39
+ _logger.default.verbose('Raw request from cloud code current : %j | original : %j', request.object, request.original);
40
+ // We need the full JSON which includes className
42
41
  const message = {
43
42
  currentParseObject: request.object._toFullJSON()
44
43
  };
45
-
46
44
  if (request.original) {
47
45
  message.originalParseObject = request.original._toFullJSON();
48
46
  }
49
-
50
47
  if (request.classLevelPermissions) {
51
48
  message.classLevelPermissions = request.classLevelPermissions;
52
49
  }
53
-
54
50
  this.parsePublisher.publish(type, JSON.stringify(message));
55
51
  }
56
-
57
52
  }
58
-
59
53
  exports.ParseCloudCodePublisher = ParseCloudCodePublisher;
60
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvUGFyc2VDbG91ZENvZGVQdWJsaXNoZXIuanMiXSwibmFtZXMiOlsiUGFyc2VDbG91ZENvZGVQdWJsaXNoZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInBhcnNlUHVibGlzaGVyIiwiUGFyc2VQdWJTdWIiLCJjcmVhdGVQdWJsaXNoZXIiLCJvbkNsb3VkQ29kZUFmdGVyU2F2ZSIsInJlcXVlc3QiLCJfb25DbG91ZENvZGVNZXNzYWdlIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwib25DbG91ZENvZGVBZnRlckRlbGV0ZSIsIm9uQ2xlYXJDYWNoZWRSb2xlcyIsInVzZXIiLCJwdWJsaXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsInVzZXJJZCIsImlkIiwidHlwZSIsImxvZ2dlciIsInZlcmJvc2UiLCJvYmplY3QiLCJvcmlnaW5hbCIsIm1lc3NhZ2UiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJfdG9GdWxsSlNPTiIsIm9yaWdpbmFsUGFyc2VPYmplY3QiLCJjbGFzc0xldmVsUGVybWlzc2lvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLHVCQUFOLENBQThCO0FBRzVCO0FBQ0E7QUFDQUMsRUFBQUEsV0FBVyxDQUFDQyxNQUFXLEdBQUcsRUFBZixFQUFtQjtBQUM1QixTQUFLQyxjQUFMLEdBQXNCQyx5QkFBWUMsZUFBWixDQUE0QkgsTUFBNUIsQ0FBdEI7QUFDRDs7QUFFREksRUFBQUEsb0JBQW9CLENBQUNDLE9BQUQsRUFBcUI7QUFDdkMsU0FBS0MsbUJBQUwsQ0FBeUJDLGNBQU1DLGFBQU4sR0FBc0IsV0FBL0MsRUFBNERILE9BQTVEO0FBQ0Q7O0FBRURJLEVBQUFBLHNCQUFzQixDQUFDSixPQUFELEVBQXFCO0FBQ3pDLFNBQUtDLG1CQUFMLENBQXlCQyxjQUFNQyxhQUFOLEdBQXNCLGFBQS9DLEVBQThESCxPQUE5RDtBQUNEOztBQUVESyxFQUFBQSxrQkFBa0IsQ0FBQ0MsSUFBRCxFQUFxQjtBQUNyQyxTQUFLVixjQUFMLENBQW9CVyxPQUFwQixDQUNFTCxjQUFNQyxhQUFOLEdBQXNCLFlBRHhCLEVBRUVLLElBQUksQ0FBQ0MsU0FBTCxDQUFlO0FBQUVDLE1BQUFBLE1BQU0sRUFBRUosSUFBSSxDQUFDSztBQUFmLEtBQWYsQ0FGRjtBQUlELEdBdEIyQixDQXdCNUI7OztBQUNBVixFQUFBQSxtQkFBbUIsQ0FBQ1csSUFBRCxFQUFlWixPQUFmLEVBQW1DO0FBQ3BEYSxvQkFBT0MsT0FBUCxDQUNFLDBEQURGLEVBRUVkLE9BQU8sQ0FBQ2UsTUFGVixFQUdFZixPQUFPLENBQUNnQixRQUhWLEVBRG9ELENBTXBEOzs7QUFDQSxVQUFNQyxPQUFPLEdBQUc7QUFDZEMsTUFBQUEsa0JBQWtCLEVBQUVsQixPQUFPLENBQUNlLE1BQVIsQ0FBZUksV0FBZjtBQUROLEtBQWhCOztBQUdBLFFBQUluQixPQUFPLENBQUNnQixRQUFaLEVBQXNCO0FBQ3BCQyxNQUFBQSxPQUFPLENBQUNHLG1CQUFSLEdBQThCcEIsT0FBTyxDQUFDZ0IsUUFBUixDQUFpQkcsV0FBakIsRUFBOUI7QUFDRDs7QUFDRCxRQUFJbkIsT0FBTyxDQUFDcUIscUJBQVosRUFBbUM7QUFDakNKLE1BQUFBLE9BQU8sQ0FBQ0kscUJBQVIsR0FBZ0NyQixPQUFPLENBQUNxQixxQkFBeEM7QUFDRDs7QUFDRCxTQUFLekIsY0FBTCxDQUFvQlcsT0FBcEIsQ0FBNEJLLElBQTVCLEVBQWtDSixJQUFJLENBQUNDLFNBQUwsQ0FBZVEsT0FBZixDQUFsQztBQUNEOztBQTFDMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZVB1YlN1YiB9IGZyb20gJy4vUGFyc2VQdWJTdWInO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jbGFzcyBQYXJzZUNsb3VkQ29kZVB1Ymxpc2hlciB7XG4gIHBhcnNlUHVibGlzaGVyOiBPYmplY3Q7XG5cbiAgLy8gY29uZmlnIG9iamVjdCBvZiB0aGUgcHVibGlzaGVyLCByaWdodCBub3cgaXQgb25seSBjb250YWlucyB0aGUgcmVkaXNVUkwsXG4gIC8vIGJ1dCB3ZSBtYXkgZXh0ZW5kIGl0IGxhdGVyLlxuICBjb25zdHJ1Y3Rvcihjb25maWc6IGFueSA9IHt9KSB7XG4gICAgdGhpcy5wYXJzZVB1Ymxpc2hlciA9IFBhcnNlUHViU3ViLmNyZWF0ZVB1Ymxpc2hlcihjb25maWcpO1xuICB9XG5cbiAgb25DbG91ZENvZGVBZnRlclNhdmUocmVxdWVzdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DbG91ZENvZGVNZXNzYWdlKFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJTYXZlJywgcmVxdWVzdCk7XG4gIH1cblxuICBvbkNsb3VkQ29kZUFmdGVyRGVsZXRlKHJlcXVlc3Q6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2xvdWRDb2RlTWVzc2FnZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyRGVsZXRlJywgcmVxdWVzdCk7XG4gIH1cblxuICBvbkNsZWFyQ2FjaGVkUm9sZXModXNlcjogUGFyc2UuT2JqZWN0KSB7XG4gICAgdGhpcy5wYXJzZVB1Ymxpc2hlci5wdWJsaXNoKFxuICAgICAgUGFyc2UuYXBwbGljYXRpb25JZCArICdjbGVhckNhY2hlJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgdXNlcklkOiB1c2VyLmlkIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlcXVlc3QgaXMgdGhlIHJlcXVlc3Qgb2JqZWN0IGZyb20gY2xvdWQgY29kZSBmdW5jdGlvbnMuIHJlcXVlc3Qub2JqZWN0IGlzIGEgUGFyc2VPYmplY3QuXG4gIF9vbkNsb3VkQ29kZU1lc3NhZ2UodHlwZTogc3RyaW5nLCByZXF1ZXN0OiBhbnkpOiB2b2lkIHtcbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgICdSYXcgcmVxdWVzdCBmcm9tIGNsb3VkIGNvZGUgY3VycmVudCA6ICVqIHwgb3JpZ2luYWwgOiAlaicsXG4gICAgICByZXF1ZXN0Lm9iamVjdCxcbiAgICAgIHJlcXVlc3Qub3JpZ2luYWxcbiAgICApO1xuICAgIC8vIFdlIG5lZWQgdGhlIGZ1bGwgSlNPTiB3aGljaCBpbmNsdWRlcyBjbGFzc05hbWVcbiAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgY3VycmVudFBhcnNlT2JqZWN0OiByZXF1ZXN0Lm9iamVjdC5fdG9GdWxsSlNPTigpLFxuICAgIH07XG4gICAgaWYgKHJlcXVlc3Qub3JpZ2luYWwpIHtcbiAgICAgIG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCA9IHJlcXVlc3Qub3JpZ2luYWwuX3RvRnVsbEpTT04oKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xhc3NMZXZlbFBlcm1pc3Npb25zKSB7XG4gICAgICBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IHJlcXVlc3QuY2xhc3NMZXZlbFBlcm1pc3Npb25zO1xuICAgIH1cbiAgICB0aGlzLnBhcnNlUHVibGlzaGVyLnB1Ymxpc2godHlwZSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuICB9XG59XG5cbmV4cG9ydCB7IFBhcnNlQ2xvdWRDb2RlUHVibGlzaGVyIH07XG4iXX0=
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZUNsb3VkQ29kZVB1Ymxpc2hlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicGFyc2VQdWJsaXNoZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVB1Ymxpc2hlciIsImNvbm5lY3QiLCJpc09wZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9uQ2xvdWRDb2RlQWZ0ZXJTYXZlIiwicmVxdWVzdCIsIl9vbkNsb3VkQ29kZU1lc3NhZ2UiLCJQYXJzZSIsImFwcGxpY2F0aW9uSWQiLCJvbkNsb3VkQ29kZUFmdGVyRGVsZXRlIiwib25DbGVhckNhY2hlZFJvbGVzIiwidXNlciIsInB1Ymxpc2giLCJKU09OIiwic3RyaW5naWZ5IiwidXNlcklkIiwiaWQiLCJ0eXBlIiwibG9nZ2VyIiwidmVyYm9zZSIsIm9iamVjdCIsIm9yaWdpbmFsIiwibWVzc2FnZSIsImN1cnJlbnRQYXJzZU9iamVjdCIsIl90b0Z1bGxKU09OIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvUGFyc2VDbG91ZENvZGVQdWJsaXNoZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VQdWJTdWIgfSBmcm9tICcuL1BhcnNlUHViU3ViJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY2xhc3MgUGFyc2VDbG91ZENvZGVQdWJsaXNoZXIge1xuICBwYXJzZVB1Ymxpc2hlcjogT2JqZWN0O1xuXG4gIC8vIGNvbmZpZyBvYmplY3Qgb2YgdGhlIHB1Ymxpc2hlciwgcmlnaHQgbm93IGl0IG9ubHkgY29udGFpbnMgdGhlIHJlZGlzVVJMLFxuICAvLyBidXQgd2UgbWF5IGV4dGVuZCBpdCBsYXRlci5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBhbnkgPSB7fSkge1xuICAgIHRoaXMucGFyc2VQdWJsaXNoZXIgPSBQYXJzZVB1YlN1Yi5jcmVhdGVQdWJsaXNoZXIoY29uZmlnKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBhcnNlUHVibGlzaGVyLmNvbm5lY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh0aGlzLnBhcnNlUHVibGlzaGVyLmlzT3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMucGFyc2VQdWJsaXNoZXIuY29ubmVjdCgpKTtcbiAgICB9XG4gIH1cblxuICBvbkNsb3VkQ29kZUFmdGVyU2F2ZShyZXF1ZXN0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNsb3VkQ29kZU1lc3NhZ2UoUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlclNhdmUnLCByZXF1ZXN0KTtcbiAgfVxuXG4gIG9uQ2xvdWRDb2RlQWZ0ZXJEZWxldGUocmVxdWVzdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DbG91ZENvZGVNZXNzYWdlKFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJEZWxldGUnLCByZXF1ZXN0KTtcbiAgfVxuXG4gIG9uQ2xlYXJDYWNoZWRSb2xlcyh1c2VyOiBQYXJzZS5PYmplY3QpIHtcbiAgICB0aGlzLnBhcnNlUHVibGlzaGVyLnB1Ymxpc2goXG4gICAgICBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2NsZWFyQ2FjaGUnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyB1c2VySWQ6IHVzZXIuaWQgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gUmVxdWVzdCBpcyB0aGUgcmVxdWVzdCBvYmplY3QgZnJvbSBjbG91ZCBjb2RlIGZ1bmN0aW9ucy4gcmVxdWVzdC5vYmplY3QgaXMgYSBQYXJzZU9iamVjdC5cbiAgX29uQ2xvdWRDb2RlTWVzc2FnZSh0eXBlOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSk6IHZvaWQge1xuICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgJ1JhdyByZXF1ZXN0IGZyb20gY2xvdWQgY29kZSBjdXJyZW50IDogJWogfCBvcmlnaW5hbCA6ICVqJyxcbiAgICAgIHJlcXVlc3Qub2JqZWN0LFxuICAgICAgcmVxdWVzdC5vcmlnaW5hbFxuICAgICk7XG4gICAgLy8gV2UgbmVlZCB0aGUgZnVsbCBKU09OIHdoaWNoIGluY2x1ZGVzIGNsYXNzTmFtZVxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICBjdXJyZW50UGFyc2VPYmplY3Q6IHJlcXVlc3Qub2JqZWN0Ll90b0Z1bGxKU09OKCksXG4gICAgfTtcbiAgICBpZiAocmVxdWVzdC5vcmlnaW5hbCkge1xuICAgICAgbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0ID0gcmVxdWVzdC5vcmlnaW5hbC5fdG9GdWxsSlNPTigpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jbGFzc0xldmVsUGVybWlzc2lvbnMpIHtcbiAgICAgIG1lc3NhZ2UuY2xhc3NMZXZlbFBlcm1pc3Npb25zID0gcmVxdWVzdC5jbGFzc0xldmVsUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIHRoaXMucGFyc2VQdWJsaXNoZXIucHVibGlzaCh0eXBlLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VDbG91ZENvZGVQdWJsaXNoZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQStCO0FBRS9CLE1BQU1BLHVCQUF1QixDQUFDO0VBRzVCO0VBQ0E7RUFDQUMsV0FBVyxDQUFDQyxNQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDNUIsSUFBSSxDQUFDQyxjQUFjLEdBQUdDLHdCQUFXLENBQUNDLGVBQWUsQ0FBQ0gsTUFBTSxDQUFDO0VBQzNEO0VBRUEsTUFBTUksT0FBTyxHQUFHO0lBQ2QsSUFBSSxPQUFPLElBQUksQ0FBQ0gsY0FBYyxDQUFDRyxPQUFPLEtBQUssVUFBVSxFQUFFO01BQ3JELElBQUksSUFBSSxDQUFDSCxjQUFjLENBQUNJLE1BQU0sRUFBRTtRQUM5QjtNQUNGO01BQ0EsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDTixjQUFjLENBQUNHLE9BQU8sRUFBRSxDQUFDO0lBQ3ZEO0VBQ0Y7RUFFQUksb0JBQW9CLENBQUNDLE9BQVksRUFBUTtJQUN2QyxJQUFJLENBQUNDLG1CQUFtQixDQUFDQyxhQUFLLENBQUNDLGFBQWEsR0FBRyxXQUFXLEVBQUVILE9BQU8sQ0FBQztFQUN0RTtFQUVBSSxzQkFBc0IsQ0FBQ0osT0FBWSxFQUFRO0lBQ3pDLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNDLGFBQUssQ0FBQ0MsYUFBYSxHQUFHLGFBQWEsRUFBRUgsT0FBTyxDQUFDO0VBQ3hFO0VBRUFLLGtCQUFrQixDQUFDQyxJQUFrQixFQUFFO0lBQ3JDLElBQUksQ0FBQ2QsY0FBYyxDQUFDZSxPQUFPLENBQ3pCTCxhQUFLLENBQUNDLGFBQWEsR0FBRyxZQUFZLEVBQ2xDSyxJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUFFQyxNQUFNLEVBQUVKLElBQUksQ0FBQ0s7SUFBRyxDQUFDLENBQUMsQ0FDcEM7RUFDSDs7RUFFQTtFQUNBVixtQkFBbUIsQ0FBQ1csSUFBWSxFQUFFWixPQUFZLEVBQVE7SUFDcERhLGVBQU0sQ0FBQ0MsT0FBTyxDQUNaLDBEQUEwRCxFQUMxRGQsT0FBTyxDQUFDZSxNQUFNLEVBQ2RmLE9BQU8sQ0FBQ2dCLFFBQVEsQ0FDakI7SUFDRDtJQUNBLE1BQU1DLE9BQU8sR0FBRztNQUNkQyxrQkFBa0IsRUFBRWxCLE9BQU8sQ0FBQ2UsTUFBTSxDQUFDSSxXQUFXO0lBQ2hELENBQUM7SUFDRCxJQUFJbkIsT0FBTyxDQUFDZ0IsUUFBUSxFQUFFO01BQ3BCQyxPQUFPLENBQUNHLG1CQUFtQixHQUFHcEIsT0FBTyxDQUFDZ0IsUUFBUSxDQUFDRyxXQUFXLEVBQUU7SUFDOUQ7SUFDQSxJQUFJbkIsT0FBTyxDQUFDcUIscUJBQXFCLEVBQUU7TUFDakNKLE9BQU8sQ0FBQ0kscUJBQXFCLEdBQUdyQixPQUFPLENBQUNxQixxQkFBcUI7SUFDL0Q7SUFDQSxJQUFJLENBQUM3QixjQUFjLENBQUNlLE9BQU8sQ0FBQ0ssSUFBSSxFQUFFSixJQUFJLENBQUNDLFNBQVMsQ0FBQ1EsT0FBTyxDQUFDLENBQUM7RUFDNUQ7QUFDRjtBQUFDIn0=