@beiguancyc/parse-server 9.9.0-ruixiang.1

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 (251) hide show
  1. package/LICENSE +176 -0
  2. package/NOTICE +10 -0
  3. package/README.md +1311 -0
  4. package/bin/parse-live-query-server +3 -0
  5. package/bin/parse-server +3 -0
  6. package/lib/AccountLockout.js +149 -0
  7. package/lib/Adapters/AdapterLoader.js +60 -0
  8. package/lib/Adapters/Analytics/AnalyticsAdapter.js +32 -0
  9. package/lib/Adapters/Auth/AuthAdapter.js +132 -0
  10. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +119 -0
  11. package/lib/Adapters/Auth/OAuth1Client.js +204 -0
  12. package/lib/Adapters/Auth/apple.js +125 -0
  13. package/lib/Adapters/Auth/facebook.js +187 -0
  14. package/lib/Adapters/Auth/gcenter.js +217 -0
  15. package/lib/Adapters/Auth/github.js +125 -0
  16. package/lib/Adapters/Auth/google.js +122 -0
  17. package/lib/Adapters/Auth/gpgames.js +125 -0
  18. package/lib/Adapters/Auth/httpsRequest.js +41 -0
  19. package/lib/Adapters/Auth/index.js +248 -0
  20. package/lib/Adapters/Auth/instagram.js +118 -0
  21. package/lib/Adapters/Auth/janraincapture.js +85 -0
  22. package/lib/Adapters/Auth/janrainengage.js +57 -0
  23. package/lib/Adapters/Auth/keycloak.js +168 -0
  24. package/lib/Adapters/Auth/ldap.js +193 -0
  25. package/lib/Adapters/Auth/line.js +125 -0
  26. package/lib/Adapters/Auth/linkedin.js +117 -0
  27. package/lib/Adapters/Auth/meetup.js +44 -0
  28. package/lib/Adapters/Auth/mfa.js +334 -0
  29. package/lib/Adapters/Auth/microsoft.js +111 -0
  30. package/lib/Adapters/Auth/oauth2.js +115 -0
  31. package/lib/Adapters/Auth/phantauth.js +53 -0
  32. package/lib/Adapters/Auth/qq.js +113 -0
  33. package/lib/Adapters/Auth/spotify.js +115 -0
  34. package/lib/Adapters/Auth/twitter.js +197 -0
  35. package/lib/Adapters/Auth/utils.js +28 -0
  36. package/lib/Adapters/Auth/vkontakte.js +55 -0
  37. package/lib/Adapters/Auth/wechat.js +110 -0
  38. package/lib/Adapters/Auth/weibo.js +141 -0
  39. package/lib/Adapters/Cache/CacheAdapter.js +40 -0
  40. package/lib/Adapters/Cache/InMemoryCache.js +61 -0
  41. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +34 -0
  42. package/lib/Adapters/Cache/LRUCache.js +35 -0
  43. package/lib/Adapters/Cache/NullCacheAdapter.js +26 -0
  44. package/lib/Adapters/Cache/RedisCacheAdapter.js +109 -0
  45. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  46. package/lib/Adapters/Email/MailAdapter.js +32 -0
  47. package/lib/Adapters/Files/FilesAdapter.js +129 -0
  48. package/lib/Adapters/Files/GridFSBucketAdapter.js +280 -0
  49. package/lib/Adapters/Files/GridStoreAdapter.js +5 -0
  50. package/lib/Adapters/Logger/LoggerAdapter.js +27 -0
  51. package/lib/Adapters/Logger/WinstonLogger.js +107 -0
  52. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +63 -0
  53. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +55 -0
  54. package/lib/Adapters/PubSub/EventEmitterPubSub.js +53 -0
  55. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  56. package/lib/Adapters/PubSub/RedisPubSub.js +49 -0
  57. package/lib/Adapters/Push/PushAdapter.js +40 -0
  58. package/lib/Adapters/Storage/Mongo/MongoCollection.js +212 -0
  59. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +334 -0
  60. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +1047 -0
  61. package/lib/Adapters/Storage/Mongo/MongoTransform.js +1397 -0
  62. package/lib/Adapters/Storage/Postgres/PostgresClient.js +38 -0
  63. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +73 -0
  64. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +2409 -0
  65. package/lib/Adapters/Storage/Postgres/sql/array/add-unique.sql +11 -0
  66. package/lib/Adapters/Storage/Postgres/sql/array/add.sql +11 -0
  67. package/lib/Adapters/Storage/Postgres/sql/array/contains-all-regex.sql +14 -0
  68. package/lib/Adapters/Storage/Postgres/sql/array/contains-all.sql +14 -0
  69. package/lib/Adapters/Storage/Postgres/sql/array/contains.sql +11 -0
  70. package/lib/Adapters/Storage/Postgres/sql/array/remove.sql +11 -0
  71. package/lib/Adapters/Storage/Postgres/sql/index.js +32 -0
  72. package/lib/Adapters/Storage/Postgres/sql/misc/json-object-set-keys.sql +19 -0
  73. package/lib/Adapters/Storage/StorageAdapter.js +2 -0
  74. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  75. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  76. package/lib/Auth.js +687 -0
  77. package/lib/AuthDataLock.js +53 -0
  78. package/lib/ClientSDK.js +39 -0
  79. package/lib/Config.js +879 -0
  80. package/lib/Controllers/AdaptableController.js +72 -0
  81. package/lib/Controllers/AnalyticsController.js +43 -0
  82. package/lib/Controllers/CacheController.js +71 -0
  83. package/lib/Controllers/DatabaseController.js +1685 -0
  84. package/lib/Controllers/FilesController.js +122 -0
  85. package/lib/Controllers/HooksController.js +254 -0
  86. package/lib/Controllers/LiveQueryController.js +72 -0
  87. package/lib/Controllers/LoggerController.js +222 -0
  88. package/lib/Controllers/ParseGraphQLController.js +294 -0
  89. package/lib/Controllers/PushController.js +224 -0
  90. package/lib/Controllers/SchemaController.js +1563 -0
  91. package/lib/Controllers/UserController.js +364 -0
  92. package/lib/Controllers/index.js +251 -0
  93. package/lib/Controllers/types.js +2 -0
  94. package/lib/Deprecator/Deprecations.js +100 -0
  95. package/lib/Deprecator/Deprecator.js +140 -0
  96. package/lib/Error.js +50 -0
  97. package/lib/FileUrlValidator.js +69 -0
  98. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  99. package/lib/GraphQL/ParseGraphQLServer.js +241 -0
  100. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  101. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  102. package/lib/GraphQL/helpers/queryComplexity.js +138 -0
  103. package/lib/GraphQL/loaders/configMutations.js +87 -0
  104. package/lib/GraphQL/loaders/configQueries.js +79 -0
  105. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  106. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  107. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1099 -0
  108. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  109. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  110. package/lib/GraphQL/loaders/functionsMutations.js +77 -0
  111. package/lib/GraphQL/loaders/parseClassMutations.js +267 -0
  112. package/lib/GraphQL/loaders/parseClassQueries.js +126 -0
  113. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  114. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  115. package/lib/GraphQL/loaders/schemaMutations.js +161 -0
  116. package/lib/GraphQL/loaders/schemaQueries.js +80 -0
  117. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  118. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  119. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  120. package/lib/GraphQL/parseGraphQLUtils.js +71 -0
  121. package/lib/GraphQL/transformers/className.js +14 -0
  122. package/lib/GraphQL/transformers/constraintType.js +53 -0
  123. package/lib/GraphQL/transformers/inputType.js +51 -0
  124. package/lib/GraphQL/transformers/mutation.js +280 -0
  125. package/lib/GraphQL/transformers/outputType.js +51 -0
  126. package/lib/GraphQL/transformers/query.js +237 -0
  127. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  128. package/lib/InstallationDedup.js +178 -0
  129. package/lib/KeyPromiseQueue.js +48 -0
  130. package/lib/LiveQuery/Client.js +90 -0
  131. package/lib/LiveQuery/Id.js +20 -0
  132. package/lib/LiveQuery/ParseCloudCodePublisher.js +54 -0
  133. package/lib/LiveQuery/ParseLiveQueryServer.js +1071 -0
  134. package/lib/LiveQuery/ParsePubSub.js +37 -0
  135. package/lib/LiveQuery/ParseWebSocketServer.js +66 -0
  136. package/lib/LiveQuery/QueryTools.js +443 -0
  137. package/lib/LiveQuery/RequestSchema.js +161 -0
  138. package/lib/LiveQuery/SessionTokenCache.js +51 -0
  139. package/lib/LiveQuery/Subscription.js +47 -0
  140. package/lib/LiveQuery/equalObjects.js +50 -0
  141. package/lib/Options/Definitions.js +1599 -0
  142. package/lib/Options/docs.js +389 -0
  143. package/lib/Options/index.js +12 -0
  144. package/lib/Options/parsers.js +89 -0
  145. package/lib/Page.js +44 -0
  146. package/lib/ParseMessageQueue.js +24 -0
  147. package/lib/ParseServer.js +632 -0
  148. package/lib/ParseServerRESTController.js +173 -0
  149. package/lib/PromiseRouter.js +208 -0
  150. package/lib/Push/PushQueue.js +67 -0
  151. package/lib/Push/PushWorker.js +101 -0
  152. package/lib/Push/utils.js +129 -0
  153. package/lib/RestQuery.js +1208 -0
  154. package/lib/RestWrite.js +1671 -0
  155. package/lib/Routers/AggregateRouter.js +150 -0
  156. package/lib/Routers/AnalyticsRouter.js +26 -0
  157. package/lib/Routers/AudiencesRouter.js +54 -0
  158. package/lib/Routers/ClassesRouter.js +191 -0
  159. package/lib/Routers/CloudCodeRouter.js +87 -0
  160. package/lib/Routers/FeaturesRouter.js +72 -0
  161. package/lib/Routers/FilesRouter.js +772 -0
  162. package/lib/Routers/FunctionsRouter.js +341 -0
  163. package/lib/Routers/GlobalConfigRouter.js +123 -0
  164. package/lib/Routers/GraphQLRouter.js +41 -0
  165. package/lib/Routers/HooksRouter.js +121 -0
  166. package/lib/Routers/IAPValidationRouter.js +113 -0
  167. package/lib/Routers/InstallationsRouter.js +46 -0
  168. package/lib/Routers/LogsRouter.js +57 -0
  169. package/lib/Routers/PagesRouter.js +676 -0
  170. package/lib/Routers/PurgeRouter.js +45 -0
  171. package/lib/Routers/PushRouter.js +75 -0
  172. package/lib/Routers/RolesRouter.js +33 -0
  173. package/lib/Routers/SchemasRouter.js +118 -0
  174. package/lib/Routers/SecurityRouter.js +34 -0
  175. package/lib/Routers/SessionsRouter.js +126 -0
  176. package/lib/Routers/UsersRouter.js +733 -0
  177. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  178. package/lib/SchemaMigrations/Migrations.js +30 -0
  179. package/lib/Security/Check.js +109 -0
  180. package/lib/Security/CheckGroup.js +44 -0
  181. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  182. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +160 -0
  183. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  184. package/lib/Security/CheckRunner.js +213 -0
  185. package/lib/SharedRest.js +34 -0
  186. package/lib/StatusHandler.js +329 -0
  187. package/lib/TestUtils.js +87 -0
  188. package/lib/Utils.js +577 -0
  189. package/lib/batch.js +185 -0
  190. package/lib/cache.js +12 -0
  191. package/lib/cli/definitions/parse-live-query-server.js +9 -0
  192. package/lib/cli/definitions/parse-server.js +9 -0
  193. package/lib/cli/parse-live-query-server.js +14 -0
  194. package/lib/cli/parse-server.js +101 -0
  195. package/lib/cli/utils/commander.js +132 -0
  196. package/lib/cli/utils/runner.js +53 -0
  197. package/lib/cloud-code/Parse.Cloud.js +797 -0
  198. package/lib/cloud-code/Parse.Server.js +21 -0
  199. package/lib/cryptoUtils.js +54 -0
  200. package/lib/defaults.js +58 -0
  201. package/lib/deprecated.js +12 -0
  202. package/lib/index.js +89 -0
  203. package/lib/logger.js +40 -0
  204. package/lib/middlewares.js +810 -0
  205. package/lib/password.js +40 -0
  206. package/lib/request.js +175 -0
  207. package/lib/requiredParameter.js +11 -0
  208. package/lib/rest.js +264 -0
  209. package/lib/triggers.js +949 -0
  210. package/lib/vendor/README.md +8 -0
  211. package/lib/vendor/mongodbUrl.js +1012 -0
  212. package/package.json +172 -0
  213. package/postinstall.js +38 -0
  214. package/public/custom_json.html +17 -0
  215. package/public/custom_json.json +23 -0
  216. package/public/custom_page.html +15 -0
  217. package/public/de/email_verification_link_expired.html +24 -0
  218. package/public/de/email_verification_link_invalid.html +21 -0
  219. package/public/de/email_verification_send_fail.html +21 -0
  220. package/public/de/email_verification_send_success.html +19 -0
  221. package/public/de/email_verification_success.html +18 -0
  222. package/public/de/password_reset.html +65 -0
  223. package/public/de/password_reset_link_invalid.html +19 -0
  224. package/public/de/password_reset_success.html +18 -0
  225. package/public/de-AT/email_verification_link_expired.html +24 -0
  226. package/public/de-AT/email_verification_link_invalid.html +21 -0
  227. package/public/de-AT/email_verification_send_fail.html +21 -0
  228. package/public/de-AT/email_verification_send_success.html +19 -0
  229. package/public/de-AT/email_verification_success.html +18 -0
  230. package/public/de-AT/password_reset.html +65 -0
  231. package/public/de-AT/password_reset_link_invalid.html +19 -0
  232. package/public/de-AT/password_reset_success.html +18 -0
  233. package/public/email_verification_link_expired.html +24 -0
  234. package/public/email_verification_link_invalid.html +21 -0
  235. package/public/email_verification_send_fail.html +21 -0
  236. package/public/email_verification_send_success.html +19 -0
  237. package/public/email_verification_success.html +18 -0
  238. package/public/password_reset.html +65 -0
  239. package/public/password_reset_link_invalid.html +19 -0
  240. package/public/password_reset_success.html +18 -0
  241. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  242. package/types/@types/deepcopy/index.d.ts +5 -0
  243. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  244. package/types/Options/index.d.ts +320 -0
  245. package/types/ParseServer.d.ts +65 -0
  246. package/types/eslint.config.mjs +30 -0
  247. package/types/index.d.ts +21 -0
  248. package/types/logger.d.ts +2 -0
  249. package/types/tests.ts +44 -0
  250. package/types/tsconfig.json +24 -0
  251. package/views/choose_password +215 -0
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformQueryInputToParse = exports.transformQueryConstraintInputToParse = void 0;
7
+ var _graphqlRelay = require("graphql-relay");
8
+ const parseQueryMap = {
9
+ OR: '$or',
10
+ AND: '$and',
11
+ NOR: '$nor'
12
+ };
13
+ const parseConstraintMap = {
14
+ equalTo: '$eq',
15
+ notEqualTo: '$ne',
16
+ lessThan: '$lt',
17
+ lessThanOrEqualTo: '$lte',
18
+ greaterThan: '$gt',
19
+ greaterThanOrEqualTo: '$gte',
20
+ in: '$in',
21
+ notIn: '$nin',
22
+ exists: '$exists',
23
+ inQueryKey: '$select',
24
+ notInQueryKey: '$dontSelect',
25
+ inQuery: '$inQuery',
26
+ notInQuery: '$notInQuery',
27
+ containedBy: '$containedBy',
28
+ contains: '$all',
29
+ matchesRegex: '$regex',
30
+ options: '$options',
31
+ text: '$text',
32
+ search: '$search',
33
+ term: '$term',
34
+ language: '$language',
35
+ caseSensitive: '$caseSensitive',
36
+ diacriticSensitive: '$diacriticSensitive',
37
+ nearSphere: '$nearSphere',
38
+ maxDistance: '$maxDistance',
39
+ maxDistanceInRadians: '$maxDistanceInRadians',
40
+ maxDistanceInMiles: '$maxDistanceInMiles',
41
+ maxDistanceInKilometers: '$maxDistanceInKilometers',
42
+ within: '$within',
43
+ box: '$box',
44
+ geoWithin: '$geoWithin',
45
+ polygon: '$polygon',
46
+ centerSphere: '$centerSphere',
47
+ geoIntersects: '$geoIntersects',
48
+ point: '$point'
49
+ };
50
+ const transformQueryConstraintInputToParse = (constraints, parentFieldName, className, parentConstraints, parseClasses) => {
51
+ const fields = parseClasses[className].fields;
52
+ if (parentFieldName === 'id' && className) {
53
+ Object.keys(constraints).forEach(constraintName => {
54
+ const constraintValue = constraints[constraintName];
55
+ if (typeof constraintValue === 'string') {
56
+ const globalIdObject = (0, _graphqlRelay.fromGlobalId)(constraintValue);
57
+ if (globalIdObject.type === className) {
58
+ constraints[constraintName] = globalIdObject.id;
59
+ }
60
+ } else if (Array.isArray(constraintValue)) {
61
+ constraints[constraintName] = constraintValue.map(value => {
62
+ const globalIdObject = (0, _graphqlRelay.fromGlobalId)(value);
63
+ if (globalIdObject.type === className) {
64
+ return globalIdObject.id;
65
+ }
66
+ return value;
67
+ });
68
+ }
69
+ });
70
+ parentConstraints.objectId = constraints;
71
+ delete parentConstraints.id;
72
+ }
73
+ Object.keys(constraints).forEach(fieldName => {
74
+ let fieldValue = constraints[fieldName];
75
+ if (parseConstraintMap[fieldName]) {
76
+ constraints[parseConstraintMap[fieldName]] = constraints[fieldName];
77
+ delete constraints[fieldName];
78
+ }
79
+ /**
80
+ * If we have a key-value pair, we need to change the way the constraint is structured.
81
+ *
82
+ * Example:
83
+ * From:
84
+ * {
85
+ * "someField": {
86
+ * "lessThan": {
87
+ * "key":"foo.bar",
88
+ * "value": 100
89
+ * },
90
+ * "greaterThan": {
91
+ * "key":"foo.bar",
92
+ * "value": 10
93
+ * }
94
+ * }
95
+ * }
96
+ *
97
+ * To:
98
+ * {
99
+ * "someField.foo.bar": {
100
+ * "$lt": 100,
101
+ * "$gt": 10
102
+ * }
103
+ * }
104
+ */
105
+ if (fieldValue.key && fieldValue.value !== undefined && parentConstraints && parentFieldName) {
106
+ delete parentConstraints[parentFieldName];
107
+ parentConstraints[`${parentFieldName}.${fieldValue.key}`] = {
108
+ ...parentConstraints[`${parentFieldName}.${fieldValue.key}`],
109
+ [parseConstraintMap[fieldName]]: fieldValue.value
110
+ };
111
+ } else if (fields[parentFieldName] && (fields[parentFieldName].type === 'Pointer' || fields[parentFieldName].type === 'Relation')) {
112
+ const {
113
+ targetClass
114
+ } = fields[parentFieldName];
115
+ if (fieldName === 'exists') {
116
+ if (fields[parentFieldName].type === 'Relation') {
117
+ const whereTarget = fieldValue ? 'where' : 'notWhere';
118
+ if (constraints[whereTarget]) {
119
+ if (constraints[whereTarget].objectId) {
120
+ constraints[whereTarget].objectId = {
121
+ ...constraints[whereTarget].objectId,
122
+ $exists: fieldValue
123
+ };
124
+ } else {
125
+ constraints[whereTarget].objectId = {
126
+ $exists: fieldValue
127
+ };
128
+ }
129
+ } else {
130
+ const parseWhereTarget = fieldValue ? '$inQuery' : '$notInQuery';
131
+ parentConstraints[parentFieldName][parseWhereTarget] = {
132
+ where: {
133
+ objectId: {
134
+ $exists: true
135
+ }
136
+ },
137
+ className: targetClass
138
+ };
139
+ }
140
+ delete constraints.$exists;
141
+ } else {
142
+ parentConstraints[parentFieldName].$exists = fieldValue;
143
+ }
144
+ return;
145
+ }
146
+ switch (fieldName) {
147
+ case 'have':
148
+ parentConstraints[parentFieldName].$inQuery = {
149
+ where: fieldValue,
150
+ className: targetClass
151
+ };
152
+ transformQueryInputToParse(parentConstraints[parentFieldName].$inQuery.where, targetClass, parseClasses);
153
+ break;
154
+ case 'haveNot':
155
+ parentConstraints[parentFieldName].$notInQuery = {
156
+ where: fieldValue,
157
+ className: targetClass
158
+ };
159
+ transformQueryInputToParse(parentConstraints[parentFieldName].$notInQuery.where, targetClass, parseClasses);
160
+ break;
161
+ }
162
+ delete constraints[fieldName];
163
+ return;
164
+ }
165
+ switch (fieldName) {
166
+ case 'point':
167
+ if (typeof fieldValue === 'object' && !fieldValue.__type) {
168
+ fieldValue.__type = 'GeoPoint';
169
+ }
170
+ break;
171
+ case 'nearSphere':
172
+ if (typeof fieldValue === 'object' && !fieldValue.__type) {
173
+ fieldValue.__type = 'GeoPoint';
174
+ }
175
+ break;
176
+ case 'box':
177
+ if (typeof fieldValue === 'object' && fieldValue.bottomLeft && fieldValue.upperRight) {
178
+ fieldValue = [{
179
+ __type: 'GeoPoint',
180
+ ...fieldValue.bottomLeft
181
+ }, {
182
+ __type: 'GeoPoint',
183
+ ...fieldValue.upperRight
184
+ }];
185
+ constraints[parseConstraintMap[fieldName]] = fieldValue;
186
+ }
187
+ break;
188
+ case 'polygon':
189
+ if (Array.isArray(fieldValue)) {
190
+ fieldValue.forEach(geoPoint => {
191
+ if (typeof geoPoint === 'object' && !geoPoint.__type) {
192
+ geoPoint.__type = 'GeoPoint';
193
+ }
194
+ });
195
+ }
196
+ break;
197
+ case 'centerSphere':
198
+ if (typeof fieldValue === 'object' && fieldValue.center && fieldValue.distance) {
199
+ fieldValue = [{
200
+ __type: 'GeoPoint',
201
+ ...fieldValue.center
202
+ }, fieldValue.distance];
203
+ constraints[parseConstraintMap[fieldName]] = fieldValue;
204
+ }
205
+ break;
206
+ }
207
+ if (typeof fieldValue === 'object') {
208
+ if (fieldName === 'where') {
209
+ transformQueryInputToParse(fieldValue, className, parseClasses);
210
+ } else {
211
+ transformQueryConstraintInputToParse(fieldValue, fieldName, className, constraints, parseClasses);
212
+ }
213
+ }
214
+ });
215
+ };
216
+ exports.transformQueryConstraintInputToParse = transformQueryConstraintInputToParse;
217
+ const transformQueryInputToParse = (constraints, className, parseClasses) => {
218
+ if (!constraints || typeof constraints !== 'object') {
219
+ return;
220
+ }
221
+ Object.keys(constraints).forEach(fieldName => {
222
+ const fieldValue = constraints[fieldName];
223
+ if (parseQueryMap[fieldName]) {
224
+ delete constraints[fieldName];
225
+ fieldName = parseQueryMap[fieldName];
226
+ constraints[fieldName] = fieldValue;
227
+ fieldValue.forEach(fieldValueItem => {
228
+ transformQueryInputToParse(fieldValueItem, className, parseClasses);
229
+ });
230
+ return;
231
+ } else {
232
+ transformQueryConstraintInputToParse(fieldValue, fieldName, className, constraints, parseClasses);
233
+ }
234
+ });
235
+ };
236
+ exports.transformQueryInputToParse = transformQueryInputToParse;
237
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFJlbGF5IiwicmVxdWlyZSIsInBhcnNlUXVlcnlNYXAiLCJPUiIsIkFORCIsIk5PUiIsInBhcnNlQ29uc3RyYWludE1hcCIsImVxdWFsVG8iLCJub3RFcXVhbFRvIiwibGVzc1RoYW4iLCJsZXNzVGhhbk9yRXF1YWxUbyIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlclRoYW5PckVxdWFsVG8iLCJpbiIsIm5vdEluIiwiZXhpc3RzIiwiaW5RdWVyeUtleSIsIm5vdEluUXVlcnlLZXkiLCJpblF1ZXJ5Iiwibm90SW5RdWVyeSIsImNvbnRhaW5lZEJ5IiwiY29udGFpbnMiLCJtYXRjaGVzUmVnZXgiLCJvcHRpb25zIiwidGV4dCIsInNlYXJjaCIsInRlcm0iLCJsYW5ndWFnZSIsImNhc2VTZW5zaXRpdmUiLCJkaWFjcml0aWNTZW5zaXRpdmUiLCJuZWFyU3BoZXJlIiwibWF4RGlzdGFuY2UiLCJtYXhEaXN0YW5jZUluUmFkaWFucyIsIm1heERpc3RhbmNlSW5NaWxlcyIsIm1heERpc3RhbmNlSW5LaWxvbWV0ZXJzIiwid2l0aGluIiwiYm94IiwiZ2VvV2l0aGluIiwicG9seWdvbiIsImNlbnRlclNwaGVyZSIsImdlb0ludGVyc2VjdHMiLCJwb2ludCIsInRyYW5zZm9ybVF1ZXJ5Q29uc3RyYWludElucHV0VG9QYXJzZSIsImNvbnN0cmFpbnRzIiwicGFyZW50RmllbGROYW1lIiwiY2xhc3NOYW1lIiwicGFyZW50Q29uc3RyYWludHMiLCJwYXJzZUNsYXNzZXMiLCJmaWVsZHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImNvbnN0cmFpbnROYW1lIiwiY29uc3RyYWludFZhbHVlIiwiZ2xvYmFsSWRPYmplY3QiLCJmcm9tR2xvYmFsSWQiLCJ0eXBlIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJ2YWx1ZSIsIm9iamVjdElkIiwiZmllbGROYW1lIiwiZmllbGRWYWx1ZSIsImtleSIsInVuZGVmaW5lZCIsInRhcmdldENsYXNzIiwid2hlcmVUYXJnZXQiLCIkZXhpc3RzIiwicGFyc2VXaGVyZVRhcmdldCIsIndoZXJlIiwiJGluUXVlcnkiLCJ0cmFuc2Zvcm1RdWVyeUlucHV0VG9QYXJzZSIsIiRub3RJblF1ZXJ5IiwiX190eXBlIiwiYm90dG9tTGVmdCIsInVwcGVyUmlnaHQiLCJnZW9Qb2ludCIsImNlbnRlciIsImRpc3RhbmNlIiwiZXhwb3J0cyIsImZpZWxkVmFsdWVJdGVtIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvdHJhbnNmb3JtZXJzL3F1ZXJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21HbG9iYWxJZCB9IGZyb20gJ2dyYXBocWwtcmVsYXknO1xuXG5jb25zdCBwYXJzZVF1ZXJ5TWFwID0ge1xuICBPUjogJyRvcicsXG4gIEFORDogJyRhbmQnLFxuICBOT1I6ICckbm9yJyxcbn07XG5cbmNvbnN0IHBhcnNlQ29uc3RyYWludE1hcCA9IHtcbiAgZXF1YWxUbzogJyRlcScsXG4gIG5vdEVxdWFsVG86ICckbmUnLFxuICBsZXNzVGhhbjogJyRsdCcsXG4gIGxlc3NUaGFuT3JFcXVhbFRvOiAnJGx0ZScsXG4gIGdyZWF0ZXJUaGFuOiAnJGd0JyxcbiAgZ3JlYXRlclRoYW5PckVxdWFsVG86ICckZ3RlJyxcbiAgaW46ICckaW4nLFxuICBub3RJbjogJyRuaW4nLFxuICBleGlzdHM6ICckZXhpc3RzJyxcbiAgaW5RdWVyeUtleTogJyRzZWxlY3QnLFxuICBub3RJblF1ZXJ5S2V5OiAnJGRvbnRTZWxlY3QnLFxuICBpblF1ZXJ5OiAnJGluUXVlcnknLFxuICBub3RJblF1ZXJ5OiAnJG5vdEluUXVlcnknLFxuICBjb250YWluZWRCeTogJyRjb250YWluZWRCeScsXG4gIGNvbnRhaW5zOiAnJGFsbCcsXG4gIG1hdGNoZXNSZWdleDogJyRyZWdleCcsXG4gIG9wdGlvbnM6ICckb3B0aW9ucycsXG4gIHRleHQ6ICckdGV4dCcsXG4gIHNlYXJjaDogJyRzZWFyY2gnLFxuICB0ZXJtOiAnJHRlcm0nLFxuICBsYW5ndWFnZTogJyRsYW5ndWFnZScsXG4gIGNhc2VTZW5zaXRpdmU6ICckY2FzZVNlbnNpdGl2ZScsXG4gIGRpYWNyaXRpY1NlbnNpdGl2ZTogJyRkaWFjcml0aWNTZW5zaXRpdmUnLFxuICBuZWFyU3BoZXJlOiAnJG5lYXJTcGhlcmUnLFxuICBtYXhEaXN0YW5jZTogJyRtYXhEaXN0YW5jZScsXG4gIG1heERpc3RhbmNlSW5SYWRpYW5zOiAnJG1heERpc3RhbmNlSW5SYWRpYW5zJyxcbiAgbWF4RGlzdGFuY2VJbk1pbGVzOiAnJG1heERpc3RhbmNlSW5NaWxlcycsXG4gIG1heERpc3RhbmNlSW5LaWxvbWV0ZXJzOiAnJG1heERpc3RhbmNlSW5LaWxvbWV0ZXJzJyxcbiAgd2l0aGluOiAnJHdpdGhpbicsXG4gIGJveDogJyRib3gnLFxuICBnZW9XaXRoaW46ICckZ2VvV2l0aGluJyxcbiAgcG9seWdvbjogJyRwb2x5Z29uJyxcbiAgY2VudGVyU3BoZXJlOiAnJGNlbnRlclNwaGVyZScsXG4gIGdlb0ludGVyc2VjdHM6ICckZ2VvSW50ZXJzZWN0cycsXG4gIHBvaW50OiAnJHBvaW50Jyxcbn07XG5cbmNvbnN0IHRyYW5zZm9ybVF1ZXJ5Q29uc3RyYWludElucHV0VG9QYXJzZSA9IChcbiAgY29uc3RyYWludHMsXG4gIHBhcmVudEZpZWxkTmFtZSxcbiAgY2xhc3NOYW1lLFxuICBwYXJlbnRDb25zdHJhaW50cyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgY29uc3QgZmllbGRzID0gcGFyc2VDbGFzc2VzW2NsYXNzTmFtZV0uZmllbGRzO1xuICBpZiAocGFyZW50RmllbGROYW1lID09PSAnaWQnICYmIGNsYXNzTmFtZSkge1xuICAgIE9iamVjdC5rZXlzKGNvbnN0cmFpbnRzKS5mb3JFYWNoKGNvbnN0cmFpbnROYW1lID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRWYWx1ZSA9IGNvbnN0cmFpbnRzW2NvbnN0cmFpbnROYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgY29uc3RyYWludFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBnbG9iYWxJZE9iamVjdCA9IGZyb21HbG9iYWxJZChjb25zdHJhaW50VmFsdWUpO1xuXG4gICAgICAgIGlmIChnbG9iYWxJZE9iamVjdC50eXBlID09PSBjbGFzc05hbWUpIHtcbiAgICAgICAgICBjb25zdHJhaW50c1tjb25zdHJhaW50TmFtZV0gPSBnbG9iYWxJZE9iamVjdC5pZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnN0cmFpbnRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3RyYWludHNbY29uc3RyYWludE5hbWVdID0gY29uc3RyYWludFZhbHVlLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09IGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcGFyZW50Q29uc3RyYWludHMub2JqZWN0SWQgPSBjb25zdHJhaW50cztcbiAgICBkZWxldGUgcGFyZW50Q29uc3RyYWludHMuaWQ7XG4gIH1cbiAgT2JqZWN0LmtleXMoY29uc3RyYWludHMpLmZvckVhY2goZmllbGROYW1lID0+IHtcbiAgICBsZXQgZmllbGRWYWx1ZSA9IGNvbnN0cmFpbnRzW2ZpZWxkTmFtZV07XG4gICAgaWYgKHBhcnNlQ29uc3RyYWludE1hcFtmaWVsZE5hbWVdKSB7XG4gICAgICBjb25zdHJhaW50c1twYXJzZUNvbnN0cmFpbnRNYXBbZmllbGROYW1lXV0gPSBjb25zdHJhaW50c1tmaWVsZE5hbWVdO1xuICAgICAgZGVsZXRlIGNvbnN0cmFpbnRzW2ZpZWxkTmFtZV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmUgYSBrZXktdmFsdWUgcGFpciwgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHdheSB0aGUgY29uc3RyYWludCBpcyBzdHJ1Y3R1cmVkLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiAgIEZyb206XG4gICAgICogICB7XG4gICAgICogICAgIFwic29tZUZpZWxkXCI6IHtcbiAgICAgKiAgICAgICBcImxlc3NUaGFuXCI6IHtcbiAgICAgKiAgICAgICAgIFwia2V5XCI6XCJmb28uYmFyXCIsXG4gICAgICogICAgICAgICBcInZhbHVlXCI6IDEwMFxuICAgICAqICAgICAgIH0sXG4gICAgICogICAgICAgXCJncmVhdGVyVGhhblwiOiB7XG4gICAgICogICAgICAgICBcImtleVwiOlwiZm9vLmJhclwiLFxuICAgICAqICAgICAgICAgXCJ2YWx1ZVwiOiAxMFxuICAgICAqICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBUbzpcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgXCJzb21lRmllbGQuZm9vLmJhclwiOiB7XG4gICAgICogICAgICAgXCIkbHRcIjogMTAwLFxuICAgICAqICAgICAgIFwiJGd0XCI6IDEwXG4gICAgICogICAgICB9XG4gICAgICogICB9XG4gICAgICovXG4gICAgaWYgKGZpZWxkVmFsdWUua2V5ICYmIGZpZWxkVmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRDb25zdHJhaW50cyAmJiBwYXJlbnRGaWVsZE5hbWUpIHtcbiAgICAgIGRlbGV0ZSBwYXJlbnRDb25zdHJhaW50c1twYXJlbnRGaWVsZE5hbWVdO1xuICAgICAgcGFyZW50Q29uc3RyYWludHNbYCR7cGFyZW50RmllbGROYW1lfS4ke2ZpZWxkVmFsdWUua2V5fWBdID0ge1xuICAgICAgICAuLi5wYXJlbnRDb25zdHJhaW50c1tgJHtwYXJlbnRGaWVsZE5hbWV9LiR7ZmllbGRWYWx1ZS5rZXl9YF0sXG4gICAgICAgIFtwYXJzZUNvbnN0cmFpbnRNYXBbZmllbGROYW1lXV06IGZpZWxkVmFsdWUudmFsdWUsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmaWVsZHNbcGFyZW50RmllbGROYW1lXSAmJlxuICAgICAgKGZpZWxkc1twYXJlbnRGaWVsZE5hbWVdLnR5cGUgPT09ICdQb2ludGVyJyB8fCBmaWVsZHNbcGFyZW50RmllbGROYW1lXS50eXBlID09PSAnUmVsYXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3QgeyB0YXJnZXRDbGFzcyB9ID0gZmllbGRzW3BhcmVudEZpZWxkTmFtZV07XG4gICAgICBpZiAoZmllbGROYW1lID09PSAnZXhpc3RzJykge1xuICAgICAgICBpZiAoZmllbGRzW3BhcmVudEZpZWxkTmFtZV0udHlwZSA9PT0gJ1JlbGF0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHdoZXJlVGFyZ2V0ID0gZmllbGRWYWx1ZSA/ICd3aGVyZScgOiAnbm90V2hlcmUnO1xuICAgICAgICAgIGlmIChjb25zdHJhaW50c1t3aGVyZVRhcmdldF0pIHtcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50c1t3aGVyZVRhcmdldF0ub2JqZWN0SWQpIHtcbiAgICAgICAgICAgICAgY29uc3RyYWludHNbd2hlcmVUYXJnZXRdLm9iamVjdElkID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbnN0cmFpbnRzW3doZXJlVGFyZ2V0XS5vYmplY3RJZCxcbiAgICAgICAgICAgICAgICAkZXhpc3RzOiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3RyYWludHNbd2hlcmVUYXJnZXRdLm9iamVjdElkID0ge1xuICAgICAgICAgICAgICAgICRleGlzdHM6IGZpZWxkVmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlV2hlcmVUYXJnZXQgPSBmaWVsZFZhbHVlID8gJyRpblF1ZXJ5JyA6ICckbm90SW5RdWVyeSc7XG4gICAgICAgICAgICBwYXJlbnRDb25zdHJhaW50c1twYXJlbnRGaWVsZE5hbWVdW3BhcnNlV2hlcmVUYXJnZXRdID0ge1xuICAgICAgICAgICAgICB3aGVyZTogeyBvYmplY3RJZDogeyAkZXhpc3RzOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBjb25zdHJhaW50cy4kZXhpc3RzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudENvbnN0cmFpbnRzW3BhcmVudEZpZWxkTmFtZV0uJGV4aXN0cyA9IGZpZWxkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChmaWVsZE5hbWUpIHtcbiAgICAgICAgY2FzZSAnaGF2ZSc6XG4gICAgICAgICAgcGFyZW50Q29uc3RyYWludHNbcGFyZW50RmllbGROYW1lXS4kaW5RdWVyeSA9IHtcbiAgICAgICAgICAgIHdoZXJlOiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlKFxuICAgICAgICAgICAgcGFyZW50Q29uc3RyYWludHNbcGFyZW50RmllbGROYW1lXS4kaW5RdWVyeS53aGVyZSxcbiAgICAgICAgICAgIHRhcmdldENsYXNzLFxuICAgICAgICAgICAgcGFyc2VDbGFzc2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGF2ZU5vdCc6XG4gICAgICAgICAgcGFyZW50Q29uc3RyYWludHNbcGFyZW50RmllbGROYW1lXS4kbm90SW5RdWVyeSA9IHtcbiAgICAgICAgICAgIHdoZXJlOiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlKFxuICAgICAgICAgICAgcGFyZW50Q29uc3RyYWludHNbcGFyZW50RmllbGROYW1lXS4kbm90SW5RdWVyeS53aGVyZSxcbiAgICAgICAgICAgIHRhcmdldENsYXNzLFxuICAgICAgICAgICAgcGFyc2VDbGFzc2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjb25zdHJhaW50c1tmaWVsZE5hbWVdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGZpZWxkTmFtZSkge1xuICAgICAgY2FzZSAncG9pbnQnOlxuICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnICYmICFmaWVsZFZhbHVlLl9fdHlwZSkge1xuICAgICAgICAgIGZpZWxkVmFsdWUuX190eXBlID0gJ0dlb1BvaW50JztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25lYXJTcGhlcmUnOlxuICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnICYmICFmaWVsZFZhbHVlLl9fdHlwZSkge1xuICAgICAgICAgIGZpZWxkVmFsdWUuX190eXBlID0gJ0dlb1BvaW50JztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JveCc6XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgZmllbGRWYWx1ZS5ib3R0b21MZWZ0ICYmIGZpZWxkVmFsdWUudXBwZXJSaWdodCkge1xuICAgICAgICAgIGZpZWxkVmFsdWUgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9fdHlwZTogJ0dlb1BvaW50JyxcbiAgICAgICAgICAgICAgLi4uZmllbGRWYWx1ZS5ib3R0b21MZWZ0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgX190eXBlOiAnR2VvUG9pbnQnLFxuICAgICAgICAgICAgICAuLi5maWVsZFZhbHVlLnVwcGVyUmlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3RyYWludHNbcGFyc2VDb25zdHJhaW50TWFwW2ZpZWxkTmFtZV1dID0gZmllbGRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZFZhbHVlKSkge1xuICAgICAgICAgIGZpZWxkVmFsdWUuZm9yRWFjaChnZW9Qb2ludCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGdlb1BvaW50ID09PSAnb2JqZWN0JyAmJiAhZ2VvUG9pbnQuX190eXBlKSB7XG4gICAgICAgICAgICAgIGdlb1BvaW50Ll9fdHlwZSA9ICdHZW9Qb2ludCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZW50ZXJTcGhlcmUnOlxuICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnICYmIGZpZWxkVmFsdWUuY2VudGVyICYmIGZpZWxkVmFsdWUuZGlzdGFuY2UpIHtcbiAgICAgICAgICBmaWVsZFZhbHVlID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBfX3R5cGU6ICdHZW9Qb2ludCcsXG4gICAgICAgICAgICAgIC4uLmZpZWxkVmFsdWUuY2VudGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWUuZGlzdGFuY2UsXG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdHJhaW50c1twYXJzZUNvbnN0cmFpbnRNYXBbZmllbGROYW1lXV0gPSBmaWVsZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoZmllbGROYW1lID09PSAnd2hlcmUnKSB7XG4gICAgICAgIHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlKGZpZWxkVmFsdWUsIGNsYXNzTmFtZSwgcGFyc2VDbGFzc2VzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybVF1ZXJ5Q29uc3RyYWludElucHV0VG9QYXJzZShcbiAgICAgICAgICBmaWVsZFZhbHVlLFxuICAgICAgICAgIGZpZWxkTmFtZSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgcGFyc2VDbGFzc2VzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlID0gKGNvbnN0cmFpbnRzLCBjbGFzc05hbWUsIHBhcnNlQ2xhc3NlcykgPT4ge1xuICBpZiAoIWNvbnN0cmFpbnRzIHx8IHR5cGVvZiBjb25zdHJhaW50cyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBPYmplY3Qua2V5cyhjb25zdHJhaW50cykuZm9yRWFjaChmaWVsZE5hbWUgPT4ge1xuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBjb25zdHJhaW50c1tmaWVsZE5hbWVdO1xuXG4gICAgaWYgKHBhcnNlUXVlcnlNYXBbZmllbGROYW1lXSkge1xuICAgICAgZGVsZXRlIGNvbnN0cmFpbnRzW2ZpZWxkTmFtZV07XG4gICAgICBmaWVsZE5hbWUgPSBwYXJzZVF1ZXJ5TWFwW2ZpZWxkTmFtZV07XG4gICAgICBjb25zdHJhaW50c1tmaWVsZE5hbWVdID0gZmllbGRWYWx1ZTtcbiAgICAgIGZpZWxkVmFsdWUuZm9yRWFjaChmaWVsZFZhbHVlSXRlbSA9PiB7XG4gICAgICAgIHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlKGZpZWxkVmFsdWVJdGVtLCBjbGFzc05hbWUsIHBhcnNlQ2xhc3Nlcyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmb3JtUXVlcnlDb25zdHJhaW50SW5wdXRUb1BhcnNlKFxuICAgICAgICBmaWVsZFZhbHVlLFxuICAgICAgICBmaWVsZE5hbWUsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgIHBhcnNlQ2xhc3Nlc1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IHsgdHJhbnNmb3JtUXVlcnlDb25zdHJhaW50SW5wdXRUb1BhcnNlLCB0cmFuc2Zvcm1RdWVyeUlucHV0VG9QYXJzZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFFQSxNQUFNQyxhQUFhLEdBQUc7RUFDcEJDLEVBQUUsRUFBRSxLQUFLO0VBQ1RDLEdBQUcsRUFBRSxNQUFNO0VBQ1hDLEdBQUcsRUFBRTtBQUNQLENBQUM7QUFFRCxNQUFNQyxrQkFBa0IsR0FBRztFQUN6QkMsT0FBTyxFQUFFLEtBQUs7RUFDZEMsVUFBVSxFQUFFLEtBQUs7RUFDakJDLFFBQVEsRUFBRSxLQUFLO0VBQ2ZDLGlCQUFpQixFQUFFLE1BQU07RUFDekJDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxvQkFBb0IsRUFBRSxNQUFNO0VBQzVCQyxFQUFFLEVBQUUsS0FBSztFQUNUQyxLQUFLLEVBQUUsTUFBTTtFQUNiQyxNQUFNLEVBQUUsU0FBUztFQUNqQkMsVUFBVSxFQUFFLFNBQVM7RUFDckJDLGFBQWEsRUFBRSxhQUFhO0VBQzVCQyxPQUFPLEVBQUUsVUFBVTtFQUNuQkMsVUFBVSxFQUFFLGFBQWE7RUFDekJDLFdBQVcsRUFBRSxjQUFjO0VBQzNCQyxRQUFRLEVBQUUsTUFBTTtFQUNoQkMsWUFBWSxFQUFFLFFBQVE7RUFDdEJDLE9BQU8sRUFBRSxVQUFVO0VBQ25CQyxJQUFJLEVBQUUsT0FBTztFQUNiQyxNQUFNLEVBQUUsU0FBUztFQUNqQkMsSUFBSSxFQUFFLE9BQU87RUFDYkMsUUFBUSxFQUFFLFdBQVc7RUFDckJDLGFBQWEsRUFBRSxnQkFBZ0I7RUFDL0JDLGtCQUFrQixFQUFFLHFCQUFxQjtFQUN6Q0MsVUFBVSxFQUFFLGFBQWE7RUFDekJDLFdBQVcsRUFBRSxjQUFjO0VBQzNCQyxvQkFBb0IsRUFBRSx1QkFBdUI7RUFDN0NDLGtCQUFrQixFQUFFLHFCQUFxQjtFQUN6Q0MsdUJBQXVCLEVBQUUsMEJBQTBCO0VBQ25EQyxNQUFNLEVBQUUsU0FBUztFQUNqQkMsR0FBRyxFQUFFLE1BQU07RUFDWEMsU0FBUyxFQUFFLFlBQVk7RUFDdkJDLE9BQU8sRUFBRSxVQUFVO0VBQ25CQyxZQUFZLEVBQUUsZUFBZTtFQUM3QkMsYUFBYSxFQUFFLGdCQUFnQjtFQUMvQkMsS0FBSyxFQUFFO0FBQ1QsQ0FBQztBQUVELE1BQU1DLG9DQUFvQyxHQUFHQSxDQUMzQ0MsV0FBVyxFQUNYQyxlQUFlLEVBQ2ZDLFNBQVMsRUFDVEMsaUJBQWlCLEVBQ2pCQyxZQUFZLEtBQ1Q7RUFDSCxNQUFNQyxNQUFNLEdBQUdELFlBQVksQ0FBQ0YsU0FBUyxDQUFDLENBQUNHLE1BQU07RUFDN0MsSUFBSUosZUFBZSxLQUFLLElBQUksSUFBSUMsU0FBUyxFQUFFO0lBQ3pDSSxNQUFNLENBQUNDLElBQUksQ0FBQ1AsV0FBVyxDQUFDLENBQUNRLE9BQU8sQ0FBQ0MsY0FBYyxJQUFJO01BQ2pELE1BQU1DLGVBQWUsR0FBR1YsV0FBVyxDQUFDUyxjQUFjLENBQUM7TUFDbkQsSUFBSSxPQUFPQyxlQUFlLEtBQUssUUFBUSxFQUFFO1FBQ3ZDLE1BQU1DLGNBQWMsR0FBRyxJQUFBQywwQkFBWSxFQUFDRixlQUFlLENBQUM7UUFFcEQsSUFBSUMsY0FBYyxDQUFDRSxJQUFJLEtBQUtYLFNBQVMsRUFBRTtVQUNyQ0YsV0FBVyxDQUFDUyxjQUFjLENBQUMsR0FBR0UsY0FBYyxDQUFDRyxFQUFFO1FBQ2pEO01BQ0YsQ0FBQyxNQUFNLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTixlQUFlLENBQUMsRUFBRTtRQUN6Q1YsV0FBVyxDQUFDUyxjQUFjLENBQUMsR0FBR0MsZUFBZSxDQUFDTyxHQUFHLENBQUNDLEtBQUssSUFBSTtVQUN6RCxNQUFNUCxjQUFjLEdBQUcsSUFBQUMsMEJBQVksRUFBQ00sS0FBSyxDQUFDO1VBRTFDLElBQUlQLGNBQWMsQ0FBQ0UsSUFBSSxLQUFLWCxTQUFTLEVBQUU7WUFDckMsT0FBT1MsY0FBYyxDQUFDRyxFQUFFO1VBQzFCO1VBRUEsT0FBT0ksS0FBSztRQUNkLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQyxDQUFDO0lBQ0ZmLGlCQUFpQixDQUFDZ0IsUUFBUSxHQUFHbkIsV0FBVztJQUN4QyxPQUFPRyxpQkFBaUIsQ0FBQ1csRUFBRTtFQUM3QjtFQUNBUixNQUFNLENBQUNDLElBQUksQ0FBQ1AsV0FBVyxDQUFDLENBQUNRLE9BQU8sQ0FBQ1ksU0FBUyxJQUFJO0lBQzVDLElBQUlDLFVBQVUsR0FBR3JCLFdBQVcsQ0FBQ29CLFNBQVMsQ0FBQztJQUN2QyxJQUFJekQsa0JBQWtCLENBQUN5RCxTQUFTLENBQUMsRUFBRTtNQUNqQ3BCLFdBQVcsQ0FBQ3JDLGtCQUFrQixDQUFDeUQsU0FBUyxDQUFDLENBQUMsR0FBR3BCLFdBQVcsQ0FBQ29CLFNBQVMsQ0FBQztNQUNuRSxPQUFPcEIsV0FBVyxDQUFDb0IsU0FBUyxDQUFDO0lBQy9CO0lBQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNJLElBQUlDLFVBQVUsQ0FBQ0MsR0FBRyxJQUFJRCxVQUFVLENBQUNILEtBQUssS0FBS0ssU0FBUyxJQUFJcEIsaUJBQWlCLElBQUlGLGVBQWUsRUFBRTtNQUM1RixPQUFPRSxpQkFBaUIsQ0FBQ0YsZUFBZSxDQUFDO01BQ3pDRSxpQkFBaUIsQ0FBQyxHQUFHRixlQUFlLElBQUlvQixVQUFVLENBQUNDLEdBQUcsRUFBRSxDQUFDLEdBQUc7UUFDMUQsR0FBR25CLGlCQUFpQixDQUFDLEdBQUdGLGVBQWUsSUFBSW9CLFVBQVUsQ0FBQ0MsR0FBRyxFQUFFLENBQUM7UUFDNUQsQ0FBQzNELGtCQUFrQixDQUFDeUQsU0FBUyxDQUFDLEdBQUdDLFVBQVUsQ0FBQ0g7TUFDOUMsQ0FBQztJQUNILENBQUMsTUFBTSxJQUNMYixNQUFNLENBQUNKLGVBQWUsQ0FBQyxLQUN0QkksTUFBTSxDQUFDSixlQUFlLENBQUMsQ0FBQ1ksSUFBSSxLQUFLLFNBQVMsSUFBSVIsTUFBTSxDQUFDSixlQUFlLENBQUMsQ0FBQ1ksSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUMzRjtNQUNBLE1BQU07UUFBRVc7TUFBWSxDQUFDLEdBQUduQixNQUFNLENBQUNKLGVBQWUsQ0FBQztNQUMvQyxJQUFJbUIsU0FBUyxLQUFLLFFBQVEsRUFBRTtRQUMxQixJQUFJZixNQUFNLENBQUNKLGVBQWUsQ0FBQyxDQUFDWSxJQUFJLEtBQUssVUFBVSxFQUFFO1VBQy9DLE1BQU1ZLFdBQVcsR0FBR0osVUFBVSxHQUFHLE9BQU8sR0FBRyxVQUFVO1VBQ3JELElBQUlyQixXQUFXLENBQUN5QixXQUFXLENBQUMsRUFBRTtZQUM1QixJQUFJekIsV0FBVyxDQUFDeUIsV0FBVyxDQUFDLENBQUNOLFFBQVEsRUFBRTtjQUNyQ25CLFdBQVcsQ0FBQ3lCLFdBQVcsQ0FBQyxDQUFDTixRQUFRLEdBQUc7Z0JBQ2xDLEdBQUduQixXQUFXLENBQUN5QixXQUFXLENBQUMsQ0FBQ04sUUFBUTtnQkFDcENPLE9BQU8sRUFBRUw7Y0FDWCxDQUFDO1lBQ0gsQ0FBQyxNQUFNO2NBQ0xyQixXQUFXLENBQUN5QixXQUFXLENBQUMsQ0FBQ04sUUFBUSxHQUFHO2dCQUNsQ08sT0FBTyxFQUFFTDtjQUNYLENBQUM7WUFDSDtVQUNGLENBQUMsTUFBTTtZQUNMLE1BQU1NLGdCQUFnQixHQUFHTixVQUFVLEdBQUcsVUFBVSxHQUFHLGFBQWE7WUFDaEVsQixpQkFBaUIsQ0FBQ0YsZUFBZSxDQUFDLENBQUMwQixnQkFBZ0IsQ0FBQyxHQUFHO2NBQ3JEQyxLQUFLLEVBQUU7Z0JBQUVULFFBQVEsRUFBRTtrQkFBRU8sT0FBTyxFQUFFO2dCQUFLO2NBQUUsQ0FBQztjQUN0Q3hCLFNBQVMsRUFBRXNCO1lBQ2IsQ0FBQztVQUNIO1VBQ0EsT0FBT3hCLFdBQVcsQ0FBQzBCLE9BQU87UUFDNUIsQ0FBQyxNQUFNO1VBQ0x2QixpQkFBaUIsQ0FBQ0YsZUFBZSxDQUFDLENBQUN5QixPQUFPLEdBQUdMLFVBQVU7UUFDekQ7UUFDQTtNQUNGO01BQ0EsUUFBUUQsU0FBUztRQUNmLEtBQUssTUFBTTtVQUNUakIsaUJBQWlCLENBQUNGLGVBQWUsQ0FBQyxDQUFDNEIsUUFBUSxHQUFHO1lBQzVDRCxLQUFLLEVBQUVQLFVBQVU7WUFDakJuQixTQUFTLEVBQUVzQjtVQUNiLENBQUM7VUFDRE0sMEJBQTBCLENBQ3hCM0IsaUJBQWlCLENBQUNGLGVBQWUsQ0FBQyxDQUFDNEIsUUFBUSxDQUFDRCxLQUFLLEVBQ2pESixXQUFXLEVBQ1hwQixZQUNGLENBQUM7VUFDRDtRQUNGLEtBQUssU0FBUztVQUNaRCxpQkFBaUIsQ0FBQ0YsZUFBZSxDQUFDLENBQUM4QixXQUFXLEdBQUc7WUFDL0NILEtBQUssRUFBRVAsVUFBVTtZQUNqQm5CLFNBQVMsRUFBRXNCO1VBQ2IsQ0FBQztVQUNETSwwQkFBMEIsQ0FDeEIzQixpQkFBaUIsQ0FBQ0YsZUFBZSxDQUFDLENBQUM4QixXQUFXLENBQUNILEtBQUssRUFDcERKLFdBQVcsRUFDWHBCLFlBQ0YsQ0FBQztVQUNEO01BQ0o7TUFDQSxPQUFPSixXQUFXLENBQUNvQixTQUFTLENBQUM7TUFDN0I7SUFDRjtJQUNBLFFBQVFBLFNBQVM7TUFDZixLQUFLLE9BQU87UUFDVixJQUFJLE9BQU9DLFVBQVUsS0FBSyxRQUFRLElBQUksQ0FBQ0EsVUFBVSxDQUFDVyxNQUFNLEVBQUU7VUFDeERYLFVBQVUsQ0FBQ1csTUFBTSxHQUFHLFVBQVU7UUFDaEM7UUFDQTtNQUNGLEtBQUssWUFBWTtRQUNmLElBQUksT0FBT1gsVUFBVSxLQUFLLFFBQVEsSUFBSSxDQUFDQSxVQUFVLENBQUNXLE1BQU0sRUFBRTtVQUN4RFgsVUFBVSxDQUFDVyxNQUFNLEdBQUcsVUFBVTtRQUNoQztRQUNBO01BQ0YsS0FBSyxLQUFLO1FBQ1IsSUFBSSxPQUFPWCxVQUFVLEtBQUssUUFBUSxJQUFJQSxVQUFVLENBQUNZLFVBQVUsSUFBSVosVUFBVSxDQUFDYSxVQUFVLEVBQUU7VUFDcEZiLFVBQVUsR0FBRyxDQUNYO1lBQ0VXLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLEdBQUdYLFVBQVUsQ0FBQ1k7VUFDaEIsQ0FBQyxFQUNEO1lBQ0VELE1BQU0sRUFBRSxVQUFVO1lBQ2xCLEdBQUdYLFVBQVUsQ0FBQ2E7VUFDaEIsQ0FBQyxDQUNGO1VBQ0RsQyxXQUFXLENBQUNyQyxrQkFBa0IsQ0FBQ3lELFNBQVMsQ0FBQyxDQUFDLEdBQUdDLFVBQVU7UUFDekQ7UUFDQTtNQUNGLEtBQUssU0FBUztRQUNaLElBQUlOLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSyxVQUFVLENBQUMsRUFBRTtVQUM3QkEsVUFBVSxDQUFDYixPQUFPLENBQUMyQixRQUFRLElBQUk7WUFDN0IsSUFBSSxPQUFPQSxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0gsTUFBTSxFQUFFO2NBQ3BERyxRQUFRLENBQUNILE1BQU0sR0FBRyxVQUFVO1lBQzlCO1VBQ0YsQ0FBQyxDQUFDO1FBQ0o7UUFDQTtNQUNGLEtBQUssY0FBYztRQUNqQixJQUFJLE9BQU9YLFVBQVUsS0FBSyxRQUFRLElBQUlBLFVBQVUsQ0FBQ2UsTUFBTSxJQUFJZixVQUFVLENBQUNnQixRQUFRLEVBQUU7VUFDOUVoQixVQUFVLEdBQUcsQ0FDWDtZQUNFVyxNQUFNLEVBQUUsVUFBVTtZQUNsQixHQUFHWCxVQUFVLENBQUNlO1VBQ2hCLENBQUMsRUFDRGYsVUFBVSxDQUFDZ0IsUUFBUSxDQUNwQjtVQUNEckMsV0FBVyxDQUFDckMsa0JBQWtCLENBQUN5RCxTQUFTLENBQUMsQ0FBQyxHQUFHQyxVQUFVO1FBQ3pEO1FBQ0E7SUFDSjtJQUNBLElBQUksT0FBT0EsVUFBVSxLQUFLLFFBQVEsRUFBRTtNQUNsQyxJQUFJRCxTQUFTLEtBQUssT0FBTyxFQUFFO1FBQ3pCVSwwQkFBMEIsQ0FBQ1QsVUFBVSxFQUFFbkIsU0FBUyxFQUFFRSxZQUFZLENBQUM7TUFDakUsQ0FBQyxNQUFNO1FBQ0xMLG9DQUFvQyxDQUNsQ3NCLFVBQVUsRUFDVkQsU0FBUyxFQUNUbEIsU0FBUyxFQUNURixXQUFXLEVBQ1hJLFlBQ0YsQ0FBQztNQUNIO0lBQ0Y7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBQUNrQyxPQUFBLENBQUF2QyxvQ0FBQSxHQUFBQSxvQ0FBQTtBQUVGLE1BQU0rQiwwQkFBMEIsR0FBR0EsQ0FBQzlCLFdBQVcsRUFBRUUsU0FBUyxFQUFFRSxZQUFZLEtBQUs7RUFDM0UsSUFBSSxDQUFDSixXQUFXLElBQUksT0FBT0EsV0FBVyxLQUFLLFFBQVEsRUFBRTtJQUNuRDtFQUNGO0VBRUFNLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUCxXQUFXLENBQUMsQ0FBQ1EsT0FBTyxDQUFDWSxTQUFTLElBQUk7SUFDNUMsTUFBTUMsVUFBVSxHQUFHckIsV0FBVyxDQUFDb0IsU0FBUyxDQUFDO0lBRXpDLElBQUk3RCxhQUFhLENBQUM2RCxTQUFTLENBQUMsRUFBRTtNQUM1QixPQUFPcEIsV0FBVyxDQUFDb0IsU0FBUyxDQUFDO01BQzdCQSxTQUFTLEdBQUc3RCxhQUFhLENBQUM2RCxTQUFTLENBQUM7TUFDcENwQixXQUFXLENBQUNvQixTQUFTLENBQUMsR0FBR0MsVUFBVTtNQUNuQ0EsVUFBVSxDQUFDYixPQUFPLENBQUMrQixjQUFjLElBQUk7UUFDbkNULDBCQUEwQixDQUFDUyxjQUFjLEVBQUVyQyxTQUFTLEVBQUVFLFlBQVksQ0FBQztNQUNyRSxDQUFDLENBQUM7TUFDRjtJQUNGLENBQUMsTUFBTTtNQUNMTCxvQ0FBb0MsQ0FDbENzQixVQUFVLEVBQ1ZELFNBQVMsRUFDVGxCLFNBQVMsRUFDVEYsV0FBVyxFQUNYSSxZQUNGLENBQUM7SUFDSDtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7QUFBQ2tDLE9BQUEsQ0FBQVIsMEJBQUEsR0FBQUEsMEJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformToParse = exports.transformToGraphQL = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ const transformToParse = (graphQLSchemaFields, existingFields) => {
10
+ if (!graphQLSchemaFields) {
11
+ return {};
12
+ }
13
+ let parseSchemaFields = {};
14
+ const reducerGenerator = type => (parseSchemaFields, field) => {
15
+ if (type === 'Remove') {
16
+ if (existingFields[field.name]) {
17
+ return {
18
+ ...parseSchemaFields,
19
+ [field.name]: {
20
+ __op: 'Delete'
21
+ }
22
+ };
23
+ } else {
24
+ return parseSchemaFields;
25
+ }
26
+ }
27
+ if (graphQLSchemaFields.remove && graphQLSchemaFields.remove.find(removeField => removeField.name === field.name)) {
28
+ return parseSchemaFields;
29
+ }
30
+ if (parseSchemaFields[field.name] || existingFields && existingFields[field.name]) {
31
+ throw new _node.default.Error(_node.default.Error.INVALID_KEY_NAME, `Duplicated field name: ${field.name}`);
32
+ }
33
+ if (type === 'Relation' || type === 'Pointer') {
34
+ return {
35
+ ...parseSchemaFields,
36
+ [field.name]: {
37
+ type,
38
+ targetClass: field.targetClassName
39
+ }
40
+ };
41
+ }
42
+ return {
43
+ ...parseSchemaFields,
44
+ [field.name]: {
45
+ type
46
+ }
47
+ };
48
+ };
49
+ if (graphQLSchemaFields.addStrings) {
50
+ parseSchemaFields = graphQLSchemaFields.addStrings.reduce(reducerGenerator('String'), parseSchemaFields);
51
+ }
52
+ if (graphQLSchemaFields.addNumbers) {
53
+ parseSchemaFields = graphQLSchemaFields.addNumbers.reduce(reducerGenerator('Number'), parseSchemaFields);
54
+ }
55
+ if (graphQLSchemaFields.addBooleans) {
56
+ parseSchemaFields = graphQLSchemaFields.addBooleans.reduce(reducerGenerator('Boolean'), parseSchemaFields);
57
+ }
58
+ if (graphQLSchemaFields.addArrays) {
59
+ parseSchemaFields = graphQLSchemaFields.addArrays.reduce(reducerGenerator('Array'), parseSchemaFields);
60
+ }
61
+ if (graphQLSchemaFields.addObjects) {
62
+ parseSchemaFields = graphQLSchemaFields.addObjects.reduce(reducerGenerator('Object'), parseSchemaFields);
63
+ }
64
+ if (graphQLSchemaFields.addDates) {
65
+ parseSchemaFields = graphQLSchemaFields.addDates.reduce(reducerGenerator('Date'), parseSchemaFields);
66
+ }
67
+ if (graphQLSchemaFields.addFiles) {
68
+ parseSchemaFields = graphQLSchemaFields.addFiles.reduce(reducerGenerator('File'), parseSchemaFields);
69
+ }
70
+ if (graphQLSchemaFields.addGeoPoint) {
71
+ parseSchemaFields = [graphQLSchemaFields.addGeoPoint].reduce(reducerGenerator('GeoPoint'), parseSchemaFields);
72
+ }
73
+ if (graphQLSchemaFields.addPolygons) {
74
+ parseSchemaFields = graphQLSchemaFields.addPolygons.reduce(reducerGenerator('Polygon'), parseSchemaFields);
75
+ }
76
+ if (graphQLSchemaFields.addBytes) {
77
+ parseSchemaFields = graphQLSchemaFields.addBytes.reduce(reducerGenerator('Bytes'), parseSchemaFields);
78
+ }
79
+ if (graphQLSchemaFields.addPointers) {
80
+ parseSchemaFields = graphQLSchemaFields.addPointers.reduce(reducerGenerator('Pointer'), parseSchemaFields);
81
+ }
82
+ if (graphQLSchemaFields.addRelations) {
83
+ parseSchemaFields = graphQLSchemaFields.addRelations.reduce(reducerGenerator('Relation'), parseSchemaFields);
84
+ }
85
+ if (existingFields && graphQLSchemaFields.remove) {
86
+ parseSchemaFields = graphQLSchemaFields.remove.reduce(reducerGenerator('Remove'), parseSchemaFields);
87
+ }
88
+ return parseSchemaFields;
89
+ };
90
+ exports.transformToParse = transformToParse;
91
+ const transformToGraphQL = parseSchemaFields => {
92
+ return Object.keys(parseSchemaFields).map(name => ({
93
+ name,
94
+ type: parseSchemaFields[name].type,
95
+ targetClassName: parseSchemaFields[name].targetClass
96
+ }));
97
+ };
98
+ exports.transformToGraphQL = transformToGraphQL;
99
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidHJhbnNmb3JtVG9QYXJzZSIsImdyYXBoUUxTY2hlbWFGaWVsZHMiLCJleGlzdGluZ0ZpZWxkcyIsInBhcnNlU2NoZW1hRmllbGRzIiwicmVkdWNlckdlbmVyYXRvciIsInR5cGUiLCJmaWVsZCIsIm5hbWUiLCJfX29wIiwicmVtb3ZlIiwiZmluZCIsInJlbW92ZUZpZWxkIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfS0VZX05BTUUiLCJ0YXJnZXRDbGFzcyIsInRhcmdldENsYXNzTmFtZSIsImFkZFN0cmluZ3MiLCJyZWR1Y2UiLCJhZGROdW1iZXJzIiwiYWRkQm9vbGVhbnMiLCJhZGRBcnJheXMiLCJhZGRPYmplY3RzIiwiYWRkRGF0ZXMiLCJhZGRGaWxlcyIsImFkZEdlb1BvaW50IiwiYWRkUG9seWdvbnMiLCJhZGRCeXRlcyIsImFkZFBvaW50ZXJzIiwiYWRkUmVsYXRpb25zIiwiZXhwb3J0cyIsInRyYW5zZm9ybVRvR3JhcGhRTCIsIk9iamVjdCIsImtleXMiLCJtYXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvR3JhcGhRTC90cmFuc2Zvcm1lcnMvc2NoZW1hRmllbGRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcblxuY29uc3QgdHJhbnNmb3JtVG9QYXJzZSA9IChncmFwaFFMU2NoZW1hRmllbGRzLCBleGlzdGluZ0ZpZWxkcykgPT4ge1xuICBpZiAoIWdyYXBoUUxTY2hlbWFGaWVsZHMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgcGFyc2VTY2hlbWFGaWVsZHMgPSB7fTtcblxuICBjb25zdCByZWR1Y2VyR2VuZXJhdG9yID0gdHlwZSA9PiAocGFyc2VTY2hlbWFGaWVsZHMsIGZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdSZW1vdmUnKSB7XG4gICAgICBpZiAoZXhpc3RpbmdGaWVsZHNbZmllbGQubmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wYXJzZVNjaGVtYUZpZWxkcyxcbiAgICAgICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgICAgIF9fb3A6ICdEZWxldGUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VTY2hlbWFGaWVsZHM7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGdyYXBoUUxTY2hlbWFGaWVsZHMucmVtb3ZlICYmXG4gICAgICBncmFwaFFMU2NoZW1hRmllbGRzLnJlbW92ZS5maW5kKHJlbW92ZUZpZWxkID0+IHJlbW92ZUZpZWxkLm5hbWUgPT09IGZpZWxkLm5hbWUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gcGFyc2VTY2hlbWFGaWVsZHM7XG4gICAgfVxuICAgIGlmIChwYXJzZVNjaGVtYUZpZWxkc1tmaWVsZC5uYW1lXSB8fCAoZXhpc3RpbmdGaWVsZHMgJiYgZXhpc3RpbmdGaWVsZHNbZmllbGQubmFtZV0pKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgYER1cGxpY2F0ZWQgZmllbGQgbmFtZTogJHtmaWVsZC5uYW1lfWApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ1JlbGF0aW9uJyB8fCB0eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBhcnNlU2NoZW1hRmllbGRzLFxuICAgICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHRhcmdldENsYXNzOiBmaWVsZC50YXJnZXRDbGFzc05hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyc2VTY2hlbWFGaWVsZHMsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcblxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRTdHJpbmdzKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZFN0cmluZ3MucmVkdWNlKFxuICAgICAgcmVkdWNlckdlbmVyYXRvcignU3RyaW5nJyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkTnVtYmVycykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGROdW1iZXJzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ051bWJlcicpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZEJvb2xlYW5zKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZEJvb2xlYW5zLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ0Jvb2xlYW4nKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRBcnJheXMpIHtcbiAgICBwYXJzZVNjaGVtYUZpZWxkcyA9IGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkQXJyYXlzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ0FycmF5JyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkT2JqZWN0cykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRPYmplY3RzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ09iamVjdCcpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZERhdGVzKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZERhdGVzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ0RhdGUnKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRGaWxlcykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRGaWxlcy5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdGaWxlJyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkR2VvUG9pbnQpIHtcbiAgICBwYXJzZVNjaGVtYUZpZWxkcyA9IFtncmFwaFFMU2NoZW1hRmllbGRzLmFkZEdlb1BvaW50XS5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdHZW9Qb2ludCcpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvbHlnb25zKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvbHlnb25zLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ1BvbHlnb24nKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRCeXRlcykge1xuICAgIHBhcnNlU2NoZW1hRmllbGRzID0gZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRCeXRlcy5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdCeXRlcycpLFxuICAgICAgcGFyc2VTY2hlbWFGaWVsZHNcbiAgICApO1xuICB9XG4gIGlmIChncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvaW50ZXJzKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLmFkZFBvaW50ZXJzLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ1BvaW50ZXInKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuICBpZiAoZ3JhcGhRTFNjaGVtYUZpZWxkcy5hZGRSZWxhdGlvbnMpIHtcbiAgICBwYXJzZVNjaGVtYUZpZWxkcyA9IGdyYXBoUUxTY2hlbWFGaWVsZHMuYWRkUmVsYXRpb25zLnJlZHVjZShcbiAgICAgIHJlZHVjZXJHZW5lcmF0b3IoJ1JlbGF0aW9uJyksXG4gICAgICBwYXJzZVNjaGVtYUZpZWxkc1xuICAgICk7XG4gIH1cbiAgaWYgKGV4aXN0aW5nRmllbGRzICYmIGdyYXBoUUxTY2hlbWFGaWVsZHMucmVtb3ZlKSB7XG4gICAgcGFyc2VTY2hlbWFGaWVsZHMgPSBncmFwaFFMU2NoZW1hRmllbGRzLnJlbW92ZS5yZWR1Y2UoXG4gICAgICByZWR1Y2VyR2VuZXJhdG9yKCdSZW1vdmUnKSxcbiAgICAgIHBhcnNlU2NoZW1hRmllbGRzXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZVNjaGVtYUZpZWxkcztcbn07XG5cbmNvbnN0IHRyYW5zZm9ybVRvR3JhcGhRTCA9IHBhcnNlU2NoZW1hRmllbGRzID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcnNlU2NoZW1hRmllbGRzKS5tYXAobmFtZSA9PiAoe1xuICAgIG5hbWUsXG4gICAgdHlwZTogcGFyc2VTY2hlbWFGaWVsZHNbbmFtZV0udHlwZSxcbiAgICB0YXJnZXRDbGFzc05hbWU6IHBhcnNlU2NoZW1hRmllbGRzW25hbWVdLnRhcmdldENsYXNzLFxuICB9KSk7XG59O1xuXG5leHBvcnQgeyB0cmFuc2Zvcm1Ub1BhcnNlLCB0cmFuc2Zvcm1Ub0dyYXBoUUwgfTtcbiJd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
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.applyDuplicateDeviceTokenMerge = applyDuplicateDeviceTokenMerge;
7
+ exports.default = void 0;
8
+ exports.removeConflictingDeviceToken = removeConflictingDeviceToken;
9
+ var _node = _interopRequireDefault(require("parse/node"));
10
+ var _logger = _interopRequireDefault(require("./logger"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ const CLASS_NAME = '_Installation';
13
+ function logResult(action, count, err) {
14
+ if (err && err.code === _node.default.Error.OBJECT_NOT_FOUND) {
15
+ _logger.default.verbose(`Installation dedup ${action} matched no rows; nothing to do.`);
16
+ return;
17
+ }
18
+ if (err && err.code === _node.default.Error.OPERATION_FORBIDDEN) {
19
+ _logger.default.warn(`Installation dedup ${action} skipped: caller has no permission to ${action} the conflicting row(s). The conflicting row remains.`);
20
+ return;
21
+ }
22
+ if (err) {
23
+ _logger.default.error(`Installation dedup ${action} failed: ${err.message || err}`);
24
+ return;
25
+ }
26
+ _logger.default.verbose(`Installation dedup ${action} applied to ${count == null ? 'matching' : count} conflicting row(s).`);
27
+ }
28
+ async function performAction({
29
+ database,
30
+ query,
31
+ action,
32
+ fieldToClear,
33
+ runOptions,
34
+ many,
35
+ validSchemaController
36
+ }) {
37
+ if (action === 'delete') {
38
+ return database.destroy(CLASS_NAME, query, runOptions, validSchemaController);
39
+ }
40
+ if (action === 'update') {
41
+ return database.update(CLASS_NAME, query, {
42
+ [fieldToClear]: {
43
+ __op: 'Delete'
44
+ }
45
+ }, {
46
+ ...runOptions,
47
+ many
48
+ }, false, false, validSchemaController);
49
+ }
50
+ throw new Error(`Unknown installation dedup action: ${action}`);
51
+ }
52
+
53
+ /**
54
+ * Removes or updates `_Installation` rows that hold a `deviceToken` matching the query,
55
+ * allowing the caller to claim that `deviceToken` exclusively. Used when a new or updated
56
+ * install collides with one or more existing rows on `deviceToken`.
57
+ *
58
+ * @param {Object} options
59
+ * @param {DatabaseController} options.database
60
+ * @param {Object} options.query e.g. { deviceToken: 'X', installationId: { $ne: 'I' } }
61
+ * @param {'delete'|'update'} options.action
62
+ * @param {boolean} options.enforceAuth
63
+ * @param {Object} options.runOptions RestWrite.runOptions
64
+ * @param {SchemaController} options.validSchemaController
65
+ */
66
+ async function removeConflictingDeviceToken({
67
+ database,
68
+ query,
69
+ action,
70
+ enforceAuth,
71
+ runOptions,
72
+ validSchemaController
73
+ }) {
74
+ const opts = enforceAuth ? runOptions : {};
75
+ try {
76
+ await performAction({
77
+ database,
78
+ query,
79
+ action,
80
+ fieldToClear: 'deviceToken',
81
+ runOptions: opts,
82
+ many: true,
83
+ validSchemaController
84
+ });
85
+ logResult(action, null, null);
86
+ } catch (err) {
87
+ if (err && err.code === _node.default.Error.OBJECT_NOT_FOUND) {
88
+ logResult(action, 0, err);
89
+ return;
90
+ }
91
+ if (err && err.code === _node.default.Error.OPERATION_FORBIDDEN) {
92
+ logResult(action, null, err);
93
+ return;
94
+ }
95
+ logResult(action, null, err);
96
+ throw err;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Resolves a merge conflict between two `_Installation` rows that together represent the
102
+ * same install: one matched by `installationId`/`objectId` (`idMatch`), and another holding
103
+ * the same `deviceToken` but no `installationId` (`deviceTokenMatch`). The `mergePriority`
104
+ * determines which row survives; the loser receives the configured `action`. Returns the
105
+ * survivor's `objectId` so the save flow can target it.
106
+ *
107
+ * @param {Object} options
108
+ * @param {DatabaseController} options.database
109
+ * @param {{ objectId: string, installationId?: string, deviceToken?: string }} options.idMatch
110
+ * @param {{ objectId: string, deviceToken?: string }} options.deviceTokenMatch
111
+ * @param {'delete'|'update'} options.action
112
+ * @param {'deviceToken'|'installationId'} options.mergePriority
113
+ * @param {boolean} options.enforceAuth
114
+ * @param {Object} options.runOptions
115
+ * @param {SchemaController} options.validSchemaController
116
+ * @returns {Promise<string>} survivor's objectId
117
+ */
118
+ async function applyDuplicateDeviceTokenMerge({
119
+ database,
120
+ idMatch,
121
+ deviceTokenMatch,
122
+ action,
123
+ mergePriority,
124
+ enforceAuth,
125
+ runOptions,
126
+ validSchemaController
127
+ }) {
128
+ // Self-merge guard: when both matches resolve to the same row, there's
129
+ // nothing to clean up. Skip the action so we don't destroy/update the row
130
+ // we're about to return as the survivor.
131
+ if (idMatch.objectId === deviceTokenMatch.objectId) {
132
+ return idMatch.objectId;
133
+ }
134
+ const opts = enforceAuth ? runOptions : {};
135
+ let loser;
136
+ let survivorId;
137
+ let fieldToClear;
138
+ if (mergePriority === 'deviceToken') {
139
+ loser = idMatch;
140
+ survivorId = deviceTokenMatch.objectId;
141
+ fieldToClear = 'installationId';
142
+ } else if (mergePriority === 'installationId') {
143
+ loser = deviceTokenMatch;
144
+ survivorId = idMatch.objectId;
145
+ fieldToClear = 'deviceToken';
146
+ } else {
147
+ throw new Error(`Unknown installation dedup mergePriority: ${mergePriority}`);
148
+ }
149
+ try {
150
+ await performAction({
151
+ database,
152
+ query: {
153
+ objectId: loser.objectId
154
+ },
155
+ action,
156
+ fieldToClear,
157
+ runOptions: opts,
158
+ many: false,
159
+ validSchemaController
160
+ });
161
+ logResult(action, 1, null);
162
+ } catch (err) {
163
+ if (err && err.code === _node.default.Error.OBJECT_NOT_FOUND) {
164
+ logResult(action, 0, err);
165
+ } else if (err && err.code === _node.default.Error.OPERATION_FORBIDDEN) {
166
+ logResult(action, null, err);
167
+ } else {
168
+ logResult(action, null, err);
169
+ throw err;
170
+ }
171
+ }
172
+ return survivorId;
173
+ }
174
+ var _default = exports.default = {
175
+ removeConflictingDeviceToken,
176
+ applyDuplicateDeviceTokenMerge
177
+ };
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkNMQVNTX05BTUUiLCJsb2dSZXN1bHQiLCJhY3Rpb24iLCJjb3VudCIsImVyciIsImNvZGUiLCJQYXJzZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsImxvZ2dlciIsInZlcmJvc2UiLCJPUEVSQVRJT05fRk9SQklEREVOIiwid2FybiIsImVycm9yIiwibWVzc2FnZSIsInBlcmZvcm1BY3Rpb24iLCJkYXRhYmFzZSIsInF1ZXJ5IiwiZmllbGRUb0NsZWFyIiwicnVuT3B0aW9ucyIsIm1hbnkiLCJ2YWxpZFNjaGVtYUNvbnRyb2xsZXIiLCJkZXN0cm95IiwidXBkYXRlIiwiX19vcCIsInJlbW92ZUNvbmZsaWN0aW5nRGV2aWNlVG9rZW4iLCJlbmZvcmNlQXV0aCIsIm9wdHMiLCJhcHBseUR1cGxpY2F0ZURldmljZVRva2VuTWVyZ2UiLCJpZE1hdGNoIiwiZGV2aWNlVG9rZW5NYXRjaCIsIm1lcmdlUHJpb3JpdHkiLCJvYmplY3RJZCIsImxvc2VyIiwic3Vydml2b3JJZCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9JbnN0YWxsYXRpb25EZWR1cC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuY29uc3QgQ0xBU1NfTkFNRSA9ICdfSW5zdGFsbGF0aW9uJztcblxuZnVuY3Rpb24gbG9nUmVzdWx0KGFjdGlvbiwgY291bnQsIGVycikge1xuICBpZiAoZXJyICYmIGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EKSB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYEluc3RhbGxhdGlvbiBkZWR1cCAke2FjdGlvbn0gbWF0Y2hlZCBubyByb3dzOyBub3RoaW5nIHRvIGRvLmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZXJyICYmIGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICBgSW5zdGFsbGF0aW9uIGRlZHVwICR7YWN0aW9ufSBza2lwcGVkOiBjYWxsZXIgaGFzIG5vIHBlcm1pc3Npb24gdG8gJHthY3Rpb259IHRoZSBjb25mbGljdGluZyByb3cocykuIFRoZSBjb25mbGljdGluZyByb3cgcmVtYWlucy5gXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgSW5zdGFsbGF0aW9uIGRlZHVwICR7YWN0aW9ufSBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dnZXIudmVyYm9zZShcbiAgICBgSW5zdGFsbGF0aW9uIGRlZHVwICR7YWN0aW9ufSBhcHBsaWVkIHRvICR7Y291bnQgPT0gbnVsbCA/ICdtYXRjaGluZycgOiBjb3VudH0gY29uZmxpY3Rpbmcgcm93KHMpLmBcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUFjdGlvbih7XG4gIGRhdGFiYXNlLFxuICBxdWVyeSxcbiAgYWN0aW9uLFxuICBmaWVsZFRvQ2xlYXIsXG4gIHJ1bk9wdGlvbnMsXG4gIG1hbnksXG4gIHZhbGlkU2NoZW1hQ29udHJvbGxlcixcbn0pIHtcbiAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICByZXR1cm4gZGF0YWJhc2UuZGVzdHJveShDTEFTU19OQU1FLCBxdWVyeSwgcnVuT3B0aW9ucywgdmFsaWRTY2hlbWFDb250cm9sbGVyKTtcbiAgfVxuICBpZiAoYWN0aW9uID09PSAndXBkYXRlJykge1xuICAgIHJldHVybiBkYXRhYmFzZS51cGRhdGUoXG4gICAgICBDTEFTU19OQU1FLFxuICAgICAgcXVlcnksXG4gICAgICB7IFtmaWVsZFRvQ2xlYXJdOiB7IF9fb3A6ICdEZWxldGUnIH0gfSxcbiAgICAgIHsgLi4ucnVuT3B0aW9ucywgbWFueSB9LFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIHZhbGlkU2NoZW1hQ29udHJvbGxlclxuICAgICk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGluc3RhbGxhdGlvbiBkZWR1cCBhY3Rpb246ICR7YWN0aW9ufWApO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgb3IgdXBkYXRlcyBgX0luc3RhbGxhdGlvbmAgcm93cyB0aGF0IGhvbGQgYSBgZGV2aWNlVG9rZW5gIG1hdGNoaW5nIHRoZSBxdWVyeSxcbiAqIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gY2xhaW0gdGhhdCBgZGV2aWNlVG9rZW5gIGV4Y2x1c2l2ZWx5LiBVc2VkIHdoZW4gYSBuZXcgb3IgdXBkYXRlZFxuICogaW5zdGFsbCBjb2xsaWRlcyB3aXRoIG9uZSBvciBtb3JlIGV4aXN0aW5nIHJvd3Mgb24gYGRldmljZVRva2VuYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtEYXRhYmFzZUNvbnRyb2xsZXJ9IG9wdGlvbnMuZGF0YWJhc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnF1ZXJ5IGUuZy4geyBkZXZpY2VUb2tlbjogJ1gnLCBpbnN0YWxsYXRpb25JZDogeyAkbmU6ICdJJyB9IH1cbiAqIEBwYXJhbSB7J2RlbGV0ZSd8J3VwZGF0ZSd9IG9wdGlvbnMuYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuZW5mb3JjZUF1dGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnJ1bk9wdGlvbnMgUmVzdFdyaXRlLnJ1bk9wdGlvbnNcbiAqIEBwYXJhbSB7U2NoZW1hQ29udHJvbGxlcn0gb3B0aW9ucy52YWxpZFNjaGVtYUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUNvbmZsaWN0aW5nRGV2aWNlVG9rZW4oe1xuICBkYXRhYmFzZSxcbiAgcXVlcnksXG4gIGFjdGlvbixcbiAgZW5mb3JjZUF1dGgsXG4gIHJ1bk9wdGlvbnMsXG4gIHZhbGlkU2NoZW1hQ29udHJvbGxlcixcbn0pIHtcbiAgY29uc3Qgb3B0cyA9IGVuZm9yY2VBdXRoID8gcnVuT3B0aW9ucyA6IHt9O1xuICB0cnkge1xuICAgIGF3YWl0IHBlcmZvcm1BY3Rpb24oe1xuICAgICAgZGF0YWJhc2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGFjdGlvbixcbiAgICAgIGZpZWxkVG9DbGVhcjogJ2RldmljZVRva2VuJyxcbiAgICAgIHJ1bk9wdGlvbnM6IG9wdHMsXG4gICAgICBtYW55OiB0cnVlLFxuICAgICAgdmFsaWRTY2hlbWFDb250cm9sbGVyLFxuICAgIH0pO1xuICAgIGxvZ1Jlc3VsdChhY3Rpb24sIG51bGwsIG51bGwpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dSZXN1bHQoYWN0aW9uLCAwLCBlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOKSB7XG4gICAgICBsb2dSZXN1bHQoYWN0aW9uLCBudWxsLCBlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dSZXN1bHQoYWN0aW9uLCBudWxsLCBlcnIpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgbWVyZ2UgY29uZmxpY3QgYmV0d2VlbiB0d28gYF9JbnN0YWxsYXRpb25gIHJvd3MgdGhhdCB0b2dldGhlciByZXByZXNlbnQgdGhlXG4gKiBzYW1lIGluc3RhbGw6IG9uZSBtYXRjaGVkIGJ5IGBpbnN0YWxsYXRpb25JZGAvYG9iamVjdElkYCAoYGlkTWF0Y2hgKSwgYW5kIGFub3RoZXIgaG9sZGluZ1xuICogdGhlIHNhbWUgYGRldmljZVRva2VuYCBidXQgbm8gYGluc3RhbGxhdGlvbklkYCAoYGRldmljZVRva2VuTWF0Y2hgKS4gVGhlIGBtZXJnZVByaW9yaXR5YFxuICogZGV0ZXJtaW5lcyB3aGljaCByb3cgc3Vydml2ZXM7IHRoZSBsb3NlciByZWNlaXZlcyB0aGUgY29uZmlndXJlZCBgYWN0aW9uYC4gUmV0dXJucyB0aGVcbiAqIHN1cnZpdm9yJ3MgYG9iamVjdElkYCBzbyB0aGUgc2F2ZSBmbG93IGNhbiB0YXJnZXQgaXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7RGF0YWJhc2VDb250cm9sbGVyfSBvcHRpb25zLmRhdGFiYXNlXG4gKiBAcGFyYW0ge3sgb2JqZWN0SWQ6IHN0cmluZywgaW5zdGFsbGF0aW9uSWQ/OiBzdHJpbmcsIGRldmljZVRva2VuPzogc3RyaW5nIH19IG9wdGlvbnMuaWRNYXRjaFxuICogQHBhcmFtIHt7IG9iamVjdElkOiBzdHJpbmcsIGRldmljZVRva2VuPzogc3RyaW5nIH19IG9wdGlvbnMuZGV2aWNlVG9rZW5NYXRjaFxuICogQHBhcmFtIHsnZGVsZXRlJ3wndXBkYXRlJ30gb3B0aW9ucy5hY3Rpb25cbiAqIEBwYXJhbSB7J2RldmljZVRva2VuJ3wnaW5zdGFsbGF0aW9uSWQnfSBvcHRpb25zLm1lcmdlUHJpb3JpdHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5lbmZvcmNlQXV0aFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMucnVuT3B0aW9uc1xuICogQHBhcmFtIHtTY2hlbWFDb250cm9sbGVyfSBvcHRpb25zLnZhbGlkU2NoZW1hQ29udHJvbGxlclxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gc3Vydml2b3IncyBvYmplY3RJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlEdXBsaWNhdGVEZXZpY2VUb2tlbk1lcmdlKHtcbiAgZGF0YWJhc2UsXG4gIGlkTWF0Y2gsXG4gIGRldmljZVRva2VuTWF0Y2gsXG4gIGFjdGlvbixcbiAgbWVyZ2VQcmlvcml0eSxcbiAgZW5mb3JjZUF1dGgsXG4gIHJ1bk9wdGlvbnMsXG4gIHZhbGlkU2NoZW1hQ29udHJvbGxlcixcbn0pIHtcbiAgLy8gU2VsZi1tZXJnZSBndWFyZDogd2hlbiBib3RoIG1hdGNoZXMgcmVzb2x2ZSB0byB0aGUgc2FtZSByb3csIHRoZXJlJ3NcbiAgLy8gbm90aGluZyB0byBjbGVhbiB1cC4gU2tpcCB0aGUgYWN0aW9uIHNvIHdlIGRvbid0IGRlc3Ryb3kvdXBkYXRlIHRoZSByb3dcbiAgLy8gd2UncmUgYWJvdXQgdG8gcmV0dXJuIGFzIHRoZSBzdXJ2aXZvci5cbiAgaWYgKGlkTWF0Y2gub2JqZWN0SWQgPT09IGRldmljZVRva2VuTWF0Y2gub2JqZWN0SWQpIHtcbiAgICByZXR1cm4gaWRNYXRjaC5vYmplY3RJZDtcbiAgfVxuICBjb25zdCBvcHRzID0gZW5mb3JjZUF1dGggPyBydW5PcHRpb25zIDoge307XG4gIGxldCBsb3NlcjtcbiAgbGV0IHN1cnZpdm9ySWQ7XG4gIGxldCBmaWVsZFRvQ2xlYXI7XG4gIGlmIChtZXJnZVByaW9yaXR5ID09PSAnZGV2aWNlVG9rZW4nKSB7XG4gICAgbG9zZXIgPSBpZE1hdGNoO1xuICAgIHN1cnZpdm9ySWQgPSBkZXZpY2VUb2tlbk1hdGNoLm9iamVjdElkO1xuICAgIGZpZWxkVG9DbGVhciA9ICdpbnN0YWxsYXRpb25JZCc7XG4gIH0gZWxzZSBpZiAobWVyZ2VQcmlvcml0eSA9PT0gJ2luc3RhbGxhdGlvbklkJykge1xuICAgIGxvc2VyID0gZGV2aWNlVG9rZW5NYXRjaDtcbiAgICBzdXJ2aXZvcklkID0gaWRNYXRjaC5vYmplY3RJZDtcbiAgICBmaWVsZFRvQ2xlYXIgPSAnZGV2aWNlVG9rZW4nO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBpbnN0YWxsYXRpb24gZGVkdXAgbWVyZ2VQcmlvcml0eTogJHttZXJnZVByaW9yaXR5fWApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwZXJmb3JtQWN0aW9uKHtcbiAgICAgIGRhdGFiYXNlLFxuICAgICAgcXVlcnk6IHsgb2JqZWN0SWQ6IGxvc2VyLm9iamVjdElkIH0sXG4gICAgICBhY3Rpb24sXG4gICAgICBmaWVsZFRvQ2xlYXIsXG4gICAgICBydW5PcHRpb25zOiBvcHRzLFxuICAgICAgbWFueTogZmFsc2UsXG4gICAgICB2YWxpZFNjaGVtYUNvbnRyb2xsZXIsXG4gICAgfSk7XG4gICAgbG9nUmVzdWx0KGFjdGlvbiwgMSwgbnVsbCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQpIHtcbiAgICAgIGxvZ1Jlc3VsdChhY3Rpb24sIDAsIGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4pIHtcbiAgICAgIGxvZ1Jlc3VsdChhY3Rpb24sIG51bGwsIGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ1Jlc3VsdChhY3Rpb24sIG51bGwsIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdXJ2aXZvcklkO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbW92ZUNvbmZsaWN0aW5nRGV2aWNlVG9rZW4sXG4gIGFwcGx5RHVwbGljYXRlRGV2aWNlVG9rZW5NZXJnZSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQThCLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRTlCLE1BQU1HLFVBQVUsR0FBRyxlQUFlO0FBRWxDLFNBQVNDLFNBQVNBLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxHQUFHLEVBQUU7RUFDckMsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUksS0FBS0MsYUFBSyxDQUFDQyxLQUFLLENBQUNDLGdCQUFnQixFQUFFO0lBQ3BEQyxlQUFNLENBQUNDLE9BQU8sQ0FBQyxzQkFBc0JSLE1BQU0sa0NBQWtDLENBQUM7SUFDOUU7RUFDRjtFQUNBLElBQUlFLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxJQUFJLEtBQUtDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDSSxtQkFBbUIsRUFBRTtJQUN2REYsZUFBTSxDQUFDRyxJQUFJLENBQ1Qsc0JBQXNCVixNQUFNLHlDQUF5Q0EsTUFBTSx1REFDN0UsQ0FBQztJQUNEO0VBQ0Y7RUFDQSxJQUFJRSxHQUFHLEVBQUU7SUFDUEssZUFBTSxDQUFDSSxLQUFLLENBQUMsc0JBQXNCWCxNQUFNLFlBQVlFLEdBQUcsQ0FBQ1UsT0FBTyxJQUFJVixHQUFHLEVBQUUsQ0FBQztJQUMxRTtFQUNGO0VBQ0FLLGVBQU0sQ0FBQ0MsT0FBTyxDQUNaLHNCQUFzQlIsTUFBTSxlQUFlQyxLQUFLLElBQUksSUFBSSxHQUFHLFVBQVUsR0FBR0EsS0FBSyxzQkFDL0UsQ0FBQztBQUNIO0FBRUEsZUFBZVksYUFBYUEsQ0FBQztFQUMzQkMsUUFBUTtFQUNSQyxLQUFLO0VBQ0xmLE1BQU07RUFDTmdCLFlBQVk7RUFDWkMsVUFBVTtFQUNWQyxJQUFJO0VBQ0pDO0FBQ0YsQ0FBQyxFQUFFO0VBQ0QsSUFBSW5CLE1BQU0sS0FBSyxRQUFRLEVBQUU7SUFDdkIsT0FBT2MsUUFBUSxDQUFDTSxPQUFPLENBQUN0QixVQUFVLEVBQUVpQixLQUFLLEVBQUVFLFVBQVUsRUFBRUUscUJBQXFCLENBQUM7RUFDL0U7RUFDQSxJQUFJbkIsTUFBTSxLQUFLLFFBQVEsRUFBRTtJQUN2QixPQUFPYyxRQUFRLENBQUNPLE1BQU0sQ0FDcEJ2QixVQUFVLEVBQ1ZpQixLQUFLLEVBQ0w7TUFBRSxDQUFDQyxZQUFZLEdBQUc7UUFBRU0sSUFBSSxFQUFFO01BQVM7SUFBRSxDQUFDLEVBQ3RDO01BQUUsR0FBR0wsVUFBVTtNQUFFQztJQUFLLENBQUMsRUFDdkIsS0FBSyxFQUNMLEtBQUssRUFDTEMscUJBQ0YsQ0FBQztFQUNIO0VBQ0EsTUFBTSxJQUFJZCxLQUFLLENBQUMsc0NBQXNDTCxNQUFNLEVBQUUsQ0FBQztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLGVBQWV1Qiw0QkFBNEJBLENBQUM7RUFDakRULFFBQVE7RUFDUkMsS0FBSztFQUNMZixNQUFNO0VBQ053QixXQUFXO0VBQ1hQLFVBQVU7RUFDVkU7QUFDRixDQUFDLEVBQUU7RUFDRCxNQUFNTSxJQUFJLEdBQUdELFdBQVcsR0FBR1AsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUMxQyxJQUFJO0lBQ0YsTUFBTUosYUFBYSxDQUFDO01BQ2xCQyxRQUFRO01BQ1JDLEtBQUs7TUFDTGYsTUFBTTtNQUNOZ0IsWUFBWSxFQUFFLGFBQWE7TUFDM0JDLFVBQVUsRUFBRVEsSUFBSTtNQUNoQlAsSUFBSSxFQUFFLElBQUk7TUFDVkM7SUFDRixDQUFDLENBQUM7SUFDRnBCLFNBQVMsQ0FBQ0MsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7RUFDL0IsQ0FBQyxDQUFDLE9BQU9FLEdBQUcsRUFBRTtJQUNaLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxJQUFJLEtBQUtDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRTtNQUNwRFAsU0FBUyxDQUFDQyxNQUFNLEVBQUUsQ0FBQyxFQUFFRSxHQUFHLENBQUM7TUFDekI7SUFDRjtJQUNBLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxJQUFJLEtBQUtDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDSSxtQkFBbUIsRUFBRTtNQUN2RFYsU0FBUyxDQUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFRSxHQUFHLENBQUM7TUFDNUI7SUFDRjtJQUNBSCxTQUFTLENBQUNDLE1BQU0sRUFBRSxJQUFJLEVBQUVFLEdBQUcsQ0FBQztJQUM1QixNQUFNQSxHQUFHO0VBQ1g7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxlQUFld0IsOEJBQThCQSxDQUFDO0VBQ25EWixRQUFRO0VBQ1JhLE9BQU87RUFDUEMsZ0JBQWdCO0VBQ2hCNUIsTUFBTTtFQUNONkIsYUFBYTtFQUNiTCxXQUFXO0VBQ1hQLFVBQVU7RUFDVkU7QUFDRixDQUFDLEVBQUU7RUFDRDtFQUNBO0VBQ0E7RUFDQSxJQUFJUSxPQUFPLENBQUNHLFFBQVEsS0FBS0YsZ0JBQWdCLENBQUNFLFFBQVEsRUFBRTtJQUNsRCxPQUFPSCxPQUFPLENBQUNHLFFBQVE7RUFDekI7RUFDQSxNQUFNTCxJQUFJLEdBQUdELFdBQVcsR0FBR1AsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUMxQyxJQUFJYyxLQUFLO0VBQ1QsSUFBSUMsVUFBVTtFQUNkLElBQUloQixZQUFZO0VBQ2hCLElBQUlhLGFBQWEsS0FBSyxhQUFhLEVBQUU7SUFDbkNFLEtBQUssR0FBR0osT0FBTztJQUNmSyxVQUFVLEdBQUdKLGdCQUFnQixDQUFDRSxRQUFRO0lBQ3RDZCxZQUFZLEdBQUcsZ0JBQWdCO0VBQ2pDLENBQUMsTUFBTSxJQUFJYSxhQUFhLEtBQUssZ0JBQWdCLEVBQUU7SUFDN0NFLEtBQUssR0FBR0gsZ0JBQWdCO0lBQ3hCSSxVQUFVLEdBQUdMLE9BQU8sQ0FBQ0csUUFBUTtJQUM3QmQsWUFBWSxHQUFHLGFBQWE7RUFDOUIsQ0FBQyxNQUFNO0lBQ0wsTUFBTSxJQUFJWCxLQUFLLENBQUMsNkNBQTZDd0IsYUFBYSxFQUFFLENBQUM7RUFDL0U7RUFFQSxJQUFJO0lBQ0YsTUFBTWhCLGFBQWEsQ0FBQztNQUNsQkMsUUFBUTtNQUNSQyxLQUFLLEVBQUU7UUFBRWUsUUFBUSxFQUFFQyxLQUFLLENBQUNEO01BQVMsQ0FBQztNQUNuQzlCLE1BQU07TUFDTmdCLFlBQVk7TUFDWkMsVUFBVSxFQUFFUSxJQUFJO01BQ2hCUCxJQUFJLEVBQUUsS0FBSztNQUNYQztJQUNGLENBQUMsQ0FBQztJQUNGcEIsU0FBUyxDQUFDQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUM1QixDQUFDLENBQUMsT0FBT0UsR0FBRyxFQUFFO0lBQ1osSUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUksS0FBS0MsYUFBSyxDQUFDQyxLQUFLLENBQUNDLGdCQUFnQixFQUFFO01BQ3BEUCxTQUFTLENBQUNDLE1BQU0sRUFBRSxDQUFDLEVBQUVFLEdBQUcsQ0FBQztJQUMzQixDQUFDLE1BQU0sSUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUksS0FBS0MsYUFBSyxDQUFDQyxLQUFLLENBQUNJLG1CQUFtQixFQUFFO01BQzlEVixTQUFTLENBQUNDLE1BQU0sRUFBRSxJQUFJLEVBQUVFLEdBQUcsQ0FBQztJQUM5QixDQUFDLE1BQU07TUFDTEgsU0FBUyxDQUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFRSxHQUFHLENBQUM7TUFDNUIsTUFBTUEsR0FBRztJQUNYO0VBQ0Y7RUFDQSxPQUFPOEIsVUFBVTtBQUNuQjtBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxDQUFBckMsT0FBQSxHQUVjO0VBQ2IwQiw0QkFBNEI7RUFDNUJHO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.KeyPromiseQueue = void 0;
7
+ // KeyPromiseQueue is a simple promise queue
8
+ // used to queue operations per key basis.
9
+ // Once the tail promise in the key-queue fulfills,
10
+ // the chain on that key will be cleared.
11
+ class KeyPromiseQueue {
12
+ constructor() {
13
+ this.queue = {};
14
+ }
15
+ enqueue(key, operation) {
16
+ const tuple = this.beforeOp(key);
17
+ const toAwait = tuple[1];
18
+ const nextOperation = toAwait.then(operation);
19
+ const wrappedOperation = nextOperation.then(result => {
20
+ this.afterOp(key);
21
+ return result;
22
+ });
23
+ tuple[1] = wrappedOperation;
24
+ return wrappedOperation;
25
+ }
26
+ beforeOp(key) {
27
+ let tuple = this.queue[key];
28
+ if (!tuple) {
29
+ tuple = [0, Promise.resolve()];
30
+ this.queue[key] = tuple;
31
+ }
32
+ tuple[0]++;
33
+ return tuple;
34
+ }
35
+ afterOp(key) {
36
+ const tuple = this.queue[key];
37
+ if (!tuple) {
38
+ return;
39
+ }
40
+ tuple[0]--;
41
+ if (tuple[0] <= 0) {
42
+ delete this.queue[key];
43
+ return;
44
+ }
45
+ }
46
+ }
47
+ exports.KeyPromiseQueue = KeyPromiseQueue;
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLZXlQcm9taXNlUXVldWUiLCJjb25zdHJ1Y3RvciIsInF1ZXVlIiwiZW5xdWV1ZSIsImtleSIsIm9wZXJhdGlvbiIsInR1cGxlIiwiYmVmb3JlT3AiLCJ0b0F3YWl0IiwibmV4dE9wZXJhdGlvbiIsInRoZW4iLCJ3cmFwcGVkT3BlcmF0aW9uIiwicmVzdWx0IiwiYWZ0ZXJPcCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9LZXlQcm9taXNlUXVldWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gS2V5UHJvbWlzZVF1ZXVlIGlzIGEgc2ltcGxlIHByb21pc2UgcXVldWVcbi8vIHVzZWQgdG8gcXVldWUgb3BlcmF0aW9ucyBwZXIga2V5IGJhc2lzLlxuLy8gT25jZSB0aGUgdGFpbCBwcm9taXNlIGluIHRoZSBrZXktcXVldWUgZnVsZmlsbHMsXG4vLyB0aGUgY2hhaW4gb24gdGhhdCBrZXkgd2lsbCBiZSBjbGVhcmVkLlxuZXhwb3J0IGNsYXNzIEtleVByb21pc2VRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSB7fTtcbiAgfVxuXG4gIGVucXVldWUoa2V5LCBvcGVyYXRpb24pIHtcbiAgICBjb25zdCB0dXBsZSA9IHRoaXMuYmVmb3JlT3Aoa2V5KTtcbiAgICBjb25zdCB0b0F3YWl0ID0gdHVwbGVbMV07XG4gICAgY29uc3QgbmV4dE9wZXJhdGlvbiA9IHRvQXdhaXQudGhlbihvcGVyYXRpb24pO1xuICAgIGNvbnN0IHdyYXBwZWRPcGVyYXRpb24gPSBuZXh0T3BlcmF0aW9uLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuYWZ0ZXJPcChrZXkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICB0dXBsZVsxXSA9IHdyYXBwZWRPcGVyYXRpb247XG4gICAgcmV0dXJuIHdyYXBwZWRPcGVyYXRpb247XG4gIH1cblxuICBiZWZvcmVPcChrZXkpIHtcbiAgICBsZXQgdHVwbGUgPSB0aGlzLnF1ZXVlW2tleV07XG4gICAgaWYgKCF0dXBsZSkge1xuICAgICAgdHVwbGUgPSBbMCwgUHJvbWlzZS5yZXNvbHZlKCldO1xuICAgICAgdGhpcy5xdWV1ZVtrZXldID0gdHVwbGU7XG4gICAgfVxuICAgIHR1cGxlWzBdKys7XG4gICAgcmV0dXJuIHR1cGxlO1xuICB9XG5cbiAgYWZ0ZXJPcChrZXkpIHtcbiAgICBjb25zdCB0dXBsZSA9IHRoaXMucXVldWVba2V5XTtcbiAgICBpZiAoIXR1cGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHR1cGxlWzBdLS07XG4gICAgaWYgKHR1cGxlWzBdIDw9IDApIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnF1ZXVlW2tleV07XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsZUFBZSxDQUFDO0VBQzNCQyxXQUFXQSxDQUFBLEVBQUc7SUFDWixJQUFJLENBQUNDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDakI7RUFFQUMsT0FBT0EsQ0FBQ0MsR0FBRyxFQUFFQyxTQUFTLEVBQUU7SUFDdEIsTUFBTUMsS0FBSyxHQUFHLElBQUksQ0FBQ0MsUUFBUSxDQUFDSCxHQUFHLENBQUM7SUFDaEMsTUFBTUksT0FBTyxHQUFHRixLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU1HLGFBQWEsR0FBR0QsT0FBTyxDQUFDRSxJQUFJLENBQUNMLFNBQVMsQ0FBQztJQUM3QyxNQUFNTSxnQkFBZ0IsR0FBR0YsYUFBYSxDQUFDQyxJQUFJLENBQUNFLE1BQU0sSUFBSTtNQUNwRCxJQUFJLENBQUNDLE9BQU8sQ0FBQ1QsR0FBRyxDQUFDO01BQ2pCLE9BQU9RLE1BQU07SUFDZixDQUFDLENBQUM7SUFDRk4sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHSyxnQkFBZ0I7SUFDM0IsT0FBT0EsZ0JBQWdCO0VBQ3pCO0VBRUFKLFFBQVFBLENBQUNILEdBQUcsRUFBRTtJQUNaLElBQUlFLEtBQUssR0FBRyxJQUFJLENBQUNKLEtBQUssQ0FBQ0UsR0FBRyxDQUFDO0lBQzNCLElBQUksQ0FBQ0UsS0FBSyxFQUFFO01BQ1ZBLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRVEsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQzlCLElBQUksQ0FBQ2IsS0FBSyxDQUFDRSxHQUFHLENBQUMsR0FBR0UsS0FBSztJQUN6QjtJQUNBQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDVixPQUFPQSxLQUFLO0VBQ2Q7RUFFQU8sT0FBT0EsQ0FBQ1QsR0FBRyxFQUFFO0lBQ1gsTUFBTUUsS0FBSyxHQUFHLElBQUksQ0FBQ0osS0FBSyxDQUFDRSxHQUFHLENBQUM7SUFDN0IsSUFBSSxDQUFDRSxLQUFLLEVBQUU7TUFDVjtJQUNGO0lBQ0FBLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNWLElBQUlBLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDakIsT0FBTyxJQUFJLENBQUNKLEtBQUssQ0FBQ0UsR0FBRyxDQUFDO01BQ3RCO0lBQ0Y7RUFDRjtBQUNGO0FBQUNZLE9BQUEsQ0FBQWhCLGVBQUEsR0FBQUEsZUFBQSIsImlnbm9yZUxpc3QiOltdfQ==