parse-server 2.8.4 → 8.6.2

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 (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = exports.definitions = void 0;
7
+ var _utils = require("@graphql-tools/utils");
8
+ var _FunctionsRouter = require("../../Routers/FunctionsRouter");
9
+ const definitions = exports.definitions = `
10
+ directive @resolve(to: String) on FIELD_DEFINITION
11
+ directive @mock(with: Any!) on FIELD_DEFINITION
12
+ `;
13
+ const load = parseGraphQLSchema => {
14
+ parseGraphQLSchema.graphQLSchemaDirectivesDefinitions = definitions;
15
+ const resolveDirective = schema => (0, _utils.mapSchema)(schema, {
16
+ [_utils.MapperKind.OBJECT_FIELD]: fieldConfig => {
17
+ const directive = (0, _utils.getDirective)(schema, fieldConfig, 'resolve')?.[0];
18
+ if (directive) {
19
+ const {
20
+ to: targetCloudFunction
21
+ } = directive;
22
+ fieldConfig.resolve = async (_source, args, context, gqlInfo) => {
23
+ try {
24
+ const {
25
+ config,
26
+ auth,
27
+ info
28
+ } = context;
29
+ const functionName = targetCloudFunction || gqlInfo.fieldName;
30
+ return (await _FunctionsRouter.FunctionsRouter.handleCloudFunction({
31
+ params: {
32
+ functionName
33
+ },
34
+ config,
35
+ auth,
36
+ info,
37
+ body: args
38
+ })).response.result;
39
+ } catch (e) {
40
+ parseGraphQLSchema.handleError(e);
41
+ }
42
+ };
43
+ }
44
+ return fieldConfig;
45
+ }
46
+ });
47
+ const mockDirective = schema => (0, _utils.mapSchema)(schema, {
48
+ [_utils.MapperKind.OBJECT_FIELD]: fieldConfig => {
49
+ const directive = (0, _utils.getDirective)(schema, fieldConfig, 'mock')?.[0];
50
+ if (directive) {
51
+ const {
52
+ with: mockValue
53
+ } = directive;
54
+ fieldConfig.resolve = async () => mockValue;
55
+ }
56
+ return fieldConfig;
57
+ }
58
+ });
59
+ parseGraphQLSchema.graphQLSchemaDirectives = schema => mockDirective(resolveDirective(schema));
60
+ };
61
+ exports.load = load;
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX0Z1bmN0aW9uc1JvdXRlciIsImRlZmluaXRpb25zIiwiZXhwb3J0cyIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zIiwicmVzb2x2ZURpcmVjdGl2ZSIsInNjaGVtYSIsIm1hcFNjaGVtYSIsIk1hcHBlcktpbmQiLCJPQkpFQ1RfRklFTEQiLCJmaWVsZENvbmZpZyIsImRpcmVjdGl2ZSIsImdldERpcmVjdGl2ZSIsInRvIiwidGFyZ2V0Q2xvdWRGdW5jdGlvbiIsInJlc29sdmUiLCJfc291cmNlIiwiYXJncyIsImNvbnRleHQiLCJncWxJbmZvIiwiY29uZmlnIiwiYXV0aCIsImluZm8iLCJmdW5jdGlvbk5hbWUiLCJmaWVsZE5hbWUiLCJGdW5jdGlvbnNSb3V0ZXIiLCJoYW5kbGVDbG91ZEZ1bmN0aW9uIiwicGFyYW1zIiwiYm9keSIsInJlc3BvbnNlIiwicmVzdWx0IiwiZSIsImhhbmRsZUVycm9yIiwibW9ja0RpcmVjdGl2ZSIsIndpdGgiLCJtb2NrVmFsdWUiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2xvYWRlcnMvc2NoZW1hRGlyZWN0aXZlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXBTY2hlbWEsIGdldERpcmVjdGl2ZSwgTWFwcGVyS2luZCB9IGZyb20gJ0BncmFwaHFsLXRvb2xzL3V0aWxzJztcbmltcG9ydCB7IEZ1bmN0aW9uc1JvdXRlciB9IGZyb20gJy4uLy4uL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcblxuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zID0gYFxuICBkaXJlY3RpdmUgQHJlc29sdmUodG86IFN0cmluZykgb24gRklFTERfREVGSU5JVElPTlxuICBkaXJlY3RpdmUgQG1vY2sod2l0aDogQW55ISkgb24gRklFTERfREVGSU5JVElPTlxuYDtcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG5cbiAgY29uc3QgcmVzb2x2ZURpcmVjdGl2ZSA9IHNjaGVtYSA9PlxuICAgIG1hcFNjaGVtYShzY2hlbWEsIHtcbiAgICAgIFtNYXBwZXJLaW5kLk9CSkVDVF9GSUVMRF06IGZpZWxkQ29uZmlnID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHNjaGVtYSwgZmllbGRDb25maWcsICdyZXNvbHZlJyk/LlswXTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSkge1xuICAgICAgICAgIGNvbnN0IHsgdG86IHRhcmdldENsb3VkRnVuY3Rpb24gfSA9IGRpcmVjdGl2ZTtcbiAgICAgICAgICBmaWVsZENvbmZpZy5yZXNvbHZlID0gYXN5bmMgKF9zb3VyY2UsIGFyZ3MsIGNvbnRleHQsIGdxbEluZm8pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0gPSBjb250ZXh0O1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0YXJnZXRDbG91ZEZ1bmN0aW9uIHx8IGdxbEluZm8uZmllbGROYW1lO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGF3YWl0IEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgICBib2R5OiBhcmdzLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICkucmVzcG9uc2UucmVzdWx0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEuaGFuZGxlRXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRDb25maWc7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIGNvbnN0IG1vY2tEaXJlY3RpdmUgPSBzY2hlbWEgPT5cbiAgICBtYXBTY2hlbWEoc2NoZW1hLCB7XG4gICAgICBbTWFwcGVyS2luZC5PQkpFQ1RfRklFTERdOiBmaWVsZENvbmZpZyA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZShzY2hlbWEsIGZpZWxkQ29uZmlnLCAnbW9jaycpPy5bMF07XG4gICAgICAgIGlmIChkaXJlY3RpdmUpIHtcbiAgICAgICAgICBjb25zdCB7IHdpdGg6IG1vY2tWYWx1ZSB9ID0gZGlyZWN0aXZlO1xuICAgICAgICAgIGZpZWxkQ29uZmlnLnJlc29sdmUgPSBhc3luYyAoKSA9PiBtb2NrVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkQ29uZmlnO1xuICAgICAgfSxcbiAgICB9KTtcblxuICBwYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXMgPSBzY2hlbWEgPT4gbW9ja0RpcmVjdGl2ZShyZXNvbHZlRGlyZWN0aXZlKHNjaGVtYSkpO1xufTtcbmV4cG9ydCB7IGxvYWQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUVPLE1BQU1FLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUc7QUFDM0I7QUFDQTtBQUNBLENBQUM7QUFFRCxNQUFNRSxJQUFJLEdBQUdDLGtCQUFrQixJQUFJO0VBQ2pDQSxrQkFBa0IsQ0FBQ0Msa0NBQWtDLEdBQUdKLFdBQVc7RUFFbkUsTUFBTUssZ0JBQWdCLEdBQUdDLE1BQU0sSUFDN0IsSUFBQUMsZ0JBQVMsRUFBQ0QsTUFBTSxFQUFFO0lBQ2hCLENBQUNFLGlCQUFVLENBQUNDLFlBQVksR0FBR0MsV0FBVyxJQUFJO01BQ3hDLE1BQU1DLFNBQVMsR0FBRyxJQUFBQyxtQkFBWSxFQUFDTixNQUFNLEVBQUVJLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkUsSUFBSUMsU0FBUyxFQUFFO1FBQ2IsTUFBTTtVQUFFRSxFQUFFLEVBQUVDO1FBQW9CLENBQUMsR0FBR0gsU0FBUztRQUM3Q0QsV0FBVyxDQUFDSyxPQUFPLEdBQUcsT0FBT0MsT0FBTyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxLQUFLO1VBQy9ELElBQUk7WUFDRixNQUFNO2NBQUVDLE1BQU07Y0FBRUMsSUFBSTtjQUFFQztZQUFLLENBQUMsR0FBR0osT0FBTztZQUN0QyxNQUFNSyxZQUFZLEdBQUdULG1CQUFtQixJQUFJSyxPQUFPLENBQUNLLFNBQVM7WUFDN0QsT0FBTyxDQUNMLE1BQU1DLGdDQUFlLENBQUNDLG1CQUFtQixDQUFDO2NBQ3hDQyxNQUFNLEVBQUU7Z0JBQ05KO2NBQ0YsQ0FBQztjQUNESCxNQUFNO2NBQ05DLElBQUk7Y0FDSkMsSUFBSTtjQUNKTSxJQUFJLEVBQUVYO1lBQ1IsQ0FBQyxDQUFDLEVBQ0ZZLFFBQVEsQ0FBQ0MsTUFBTTtVQUNuQixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO1lBQ1Y1QixrQkFBa0IsQ0FBQzZCLFdBQVcsQ0FBQ0QsQ0FBQyxDQUFDO1VBQ25DO1FBQ0YsQ0FBQztNQUNIO01BQ0EsT0FBT3JCLFdBQVc7SUFDcEI7RUFDRixDQUFDLENBQUM7RUFFSixNQUFNdUIsYUFBYSxHQUFHM0IsTUFBTSxJQUMxQixJQUFBQyxnQkFBUyxFQUFDRCxNQUFNLEVBQUU7SUFDaEIsQ0FBQ0UsaUJBQVUsQ0FBQ0MsWUFBWSxHQUFHQyxXQUFXLElBQUk7TUFDeEMsTUFBTUMsU0FBUyxHQUFHLElBQUFDLG1CQUFZLEVBQUNOLE1BQU0sRUFBRUksV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNoRSxJQUFJQyxTQUFTLEVBQUU7UUFDYixNQUFNO1VBQUV1QixJQUFJLEVBQUVDO1FBQVUsQ0FBQyxHQUFHeEIsU0FBUztRQUNyQ0QsV0FBVyxDQUFDSyxPQUFPLEdBQUcsWUFBWW9CLFNBQVM7TUFDN0M7TUFDQSxPQUFPekIsV0FBVztJQUNwQjtFQUNGLENBQUMsQ0FBQztFQUVKUCxrQkFBa0IsQ0FBQ2lDLHVCQUF1QixHQUFHOUIsTUFBTSxJQUFJMkIsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hHLENBQUM7QUFBQ0wsT0FBQSxDQUFBQyxJQUFBLEdBQUFBLElBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ var _graphql = require("graphql");
9
+ var _deepcopy = _interopRequireDefault(require("deepcopy"));
10
+ var _graphqlRelay = require("graphql-relay");
11
+ var schemaTypes = _interopRequireWildcard(require("./schemaTypes"));
12
+ var _schemaFields = require("../transformers/schemaFields");
13
+ var _parseGraphQLUtils = require("../parseGraphQLUtils");
14
+ var _schemaQueries = require("./schemaQueries");
15
+ var _Error = require("../../Error");
16
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
+ const load = parseGraphQLSchema => {
19
+ const createClassMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
20
+ name: 'CreateClass',
21
+ description: 'The createClass mutation can be used to create the schema for a new object class.',
22
+ inputFields: {
23
+ name: schemaTypes.CLASS_NAME_ATT,
24
+ schemaFields: {
25
+ description: "These are the schema's fields of the object class.",
26
+ type: schemaTypes.SCHEMA_FIELDS_INPUT
27
+ }
28
+ },
29
+ outputFields: {
30
+ class: {
31
+ description: 'This is the created class.',
32
+ type: new _graphql.GraphQLNonNull(schemaTypes.CLASS)
33
+ }
34
+ },
35
+ mutateAndGetPayload: async (args, context) => {
36
+ try {
37
+ const {
38
+ name,
39
+ schemaFields
40
+ } = (0, _deepcopy.default)(args);
41
+ const {
42
+ config,
43
+ auth
44
+ } = context;
45
+ (0, _parseGraphQLUtils.enforceMasterKeyAccess)(auth, config);
46
+ if (auth.isReadOnly) {
47
+ throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to create a schema.", config);
48
+ }
49
+ const schema = await config.database.loadSchema({
50
+ clearCache: true
51
+ });
52
+ const parseClass = await schema.addClassIfNotExists(name, (0, _schemaFields.transformToParse)(schemaFields));
53
+ return {
54
+ class: {
55
+ name: parseClass.className,
56
+ schemaFields: (0, _schemaFields.transformToGraphQL)(parseClass.fields)
57
+ }
58
+ };
59
+ } catch (e) {
60
+ parseGraphQLSchema.handleError(e);
61
+ }
62
+ }
63
+ });
64
+ parseGraphQLSchema.addGraphQLType(createClassMutation.args.input.type.ofType, true, true);
65
+ parseGraphQLSchema.addGraphQLType(createClassMutation.type, true, true);
66
+ parseGraphQLSchema.addGraphQLMutation('createClass', createClassMutation, true, true);
67
+ const updateClassMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
68
+ name: 'UpdateClass',
69
+ description: 'The updateClass mutation can be used to update the schema for an existing object class.',
70
+ inputFields: {
71
+ name: schemaTypes.CLASS_NAME_ATT,
72
+ schemaFields: {
73
+ description: "These are the schema's fields of the object class.",
74
+ type: schemaTypes.SCHEMA_FIELDS_INPUT
75
+ }
76
+ },
77
+ outputFields: {
78
+ class: {
79
+ description: 'This is the updated class.',
80
+ type: new _graphql.GraphQLNonNull(schemaTypes.CLASS)
81
+ }
82
+ },
83
+ mutateAndGetPayload: async (args, context) => {
84
+ try {
85
+ const {
86
+ name,
87
+ schemaFields
88
+ } = (0, _deepcopy.default)(args);
89
+ const {
90
+ config,
91
+ auth
92
+ } = context;
93
+ (0, _parseGraphQLUtils.enforceMasterKeyAccess)(auth, config);
94
+ if (auth.isReadOnly) {
95
+ throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update a schema.", config);
96
+ }
97
+ const schema = await config.database.loadSchema({
98
+ clearCache: true
99
+ });
100
+ const existingParseClass = await (0, _schemaQueries.getClass)(name, schema);
101
+ const parseClass = await schema.updateClass(name, (0, _schemaFields.transformToParse)(schemaFields, existingParseClass.fields), undefined, undefined, config.database);
102
+ return {
103
+ class: {
104
+ name: parseClass.className,
105
+ schemaFields: (0, _schemaFields.transformToGraphQL)(parseClass.fields)
106
+ }
107
+ };
108
+ } catch (e) {
109
+ parseGraphQLSchema.handleError(e);
110
+ }
111
+ }
112
+ });
113
+ parseGraphQLSchema.addGraphQLType(updateClassMutation.args.input.type.ofType, true, true);
114
+ parseGraphQLSchema.addGraphQLType(updateClassMutation.type, true, true);
115
+ parseGraphQLSchema.addGraphQLMutation('updateClass', updateClassMutation, true, true);
116
+ const deleteClassMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
117
+ name: 'DeleteClass',
118
+ description: 'The deleteClass mutation can be used to delete an existing object class.',
119
+ inputFields: {
120
+ name: schemaTypes.CLASS_NAME_ATT
121
+ },
122
+ outputFields: {
123
+ class: {
124
+ description: 'This is the deleted class.',
125
+ type: new _graphql.GraphQLNonNull(schemaTypes.CLASS)
126
+ }
127
+ },
128
+ mutateAndGetPayload: async (args, context) => {
129
+ try {
130
+ const {
131
+ name
132
+ } = (0, _deepcopy.default)(args);
133
+ const {
134
+ config,
135
+ auth
136
+ } = context;
137
+ (0, _parseGraphQLUtils.enforceMasterKeyAccess)(auth, config);
138
+ if (auth.isReadOnly) {
139
+ throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to delete a schema.", config);
140
+ }
141
+ const schema = await config.database.loadSchema({
142
+ clearCache: true
143
+ });
144
+ const existingParseClass = await (0, _schemaQueries.getClass)(name, schema);
145
+ await config.database.deleteSchema(name);
146
+ return {
147
+ class: {
148
+ name: existingParseClass.className,
149
+ schemaFields: (0, _schemaFields.transformToGraphQL)(existingParseClass.fields)
150
+ }
151
+ };
152
+ } catch (e) {
153
+ parseGraphQLSchema.handleError(e);
154
+ }
155
+ }
156
+ });
157
+ parseGraphQLSchema.addGraphQLType(deleteClassMutation.args.input.type.ofType, true, true);
158
+ parseGraphQLSchema.addGraphQLType(deleteClassMutation.type, true, true);
159
+ parseGraphQLSchema.addGraphQLMutation('deleteClass', deleteClassMutation, true, true);
160
+ };
161
+ exports.load = load;
162
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWwiLCJfZGVlcGNvcHkiLCJfZ3JhcGhxbFJlbGF5Iiwic2NoZW1hVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9zY2hlbWFGaWVsZHMiLCJfcGFyc2VHcmFwaFFMVXRpbHMiLCJfc2NoZW1hUXVlcmllcyIsIl9FcnJvciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJjcmVhdGVDbGFzc011dGF0aW9uIiwibXV0YXRpb25XaXRoQ2xpZW50TXV0YXRpb25JZCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImlucHV0RmllbGRzIiwiQ0xBU1NfTkFNRV9BVFQiLCJzY2hlbWFGaWVsZHMiLCJ0eXBlIiwiU0NIRU1BX0ZJRUxEU19JTlBVVCIsIm91dHB1dEZpZWxkcyIsImNsYXNzIiwiR3JhcGhRTE5vbk51bGwiLCJDTEFTUyIsIm11dGF0ZUFuZEdldFBheWxvYWQiLCJhcmdzIiwiY29udGV4dCIsImRlZXBjb3B5IiwiY29uZmlnIiwiYXV0aCIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJpc1JlYWRPbmx5IiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJQYXJzZSIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsInNjaGVtYSIsImRhdGFiYXNlIiwibG9hZFNjaGVtYSIsImNsZWFyQ2FjaGUiLCJwYXJzZUNsYXNzIiwiYWRkQ2xhc3NJZk5vdEV4aXN0cyIsInRyYW5zZm9ybVRvUGFyc2UiLCJjbGFzc05hbWUiLCJ0cmFuc2Zvcm1Ub0dyYXBoUUwiLCJmaWVsZHMiLCJoYW5kbGVFcnJvciIsImFkZEdyYXBoUUxUeXBlIiwiaW5wdXQiLCJvZlR5cGUiLCJhZGRHcmFwaFFMTXV0YXRpb24iLCJ1cGRhdGVDbGFzc011dGF0aW9uIiwiZXhpc3RpbmdQYXJzZUNsYXNzIiwiZ2V0Q2xhc3MiLCJ1cGRhdGVDbGFzcyIsInVuZGVmaW5lZCIsImRlbGV0ZUNsYXNzTXV0YXRpb24iLCJkZWxldGVTY2hlbWEiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9zY2hlbWFNdXRhdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgR3JhcGhRTE5vbk51bGwgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5pbXBvcnQgeyBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkIH0gZnJvbSAnZ3JhcGhxbC1yZWxheSc7XG5pbXBvcnQgKiBhcyBzY2hlbWFUeXBlcyBmcm9tICcuL3NjaGVtYVR5cGVzJztcbmltcG9ydCB7IHRyYW5zZm9ybVRvUGFyc2UsIHRyYW5zZm9ybVRvR3JhcGhRTCB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9zY2hlbWFGaWVsZHMnO1xuaW1wb3J0IHsgZW5mb3JjZU1hc3RlcktleUFjY2VzcyB9IGZyb20gJy4uL3BhcnNlR3JhcGhRTFV0aWxzJztcbmltcG9ydCB7IGdldENsYXNzIH0gZnJvbSAnLi9zY2hlbWFRdWVyaWVzJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEVycm9yIH0gZnJvbSAnLi4vLi4vRXJyb3InO1xuXG5jb25zdCBsb2FkID0gcGFyc2VHcmFwaFFMU2NoZW1hID0+IHtcbiAgY29uc3QgY3JlYXRlQ2xhc3NNdXRhdGlvbiA9IG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQoe1xuICAgIG5hbWU6ICdDcmVhdGVDbGFzcycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVGhlIGNyZWF0ZUNsYXNzIG11dGF0aW9uIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgc2NoZW1hIGZvciBhIG5ldyBvYmplY3QgY2xhc3MuJyxcbiAgICBpbnB1dEZpZWxkczoge1xuICAgICAgbmFtZTogc2NoZW1hVHlwZXMuQ0xBU1NfTkFNRV9BVFQsXG4gICAgICBzY2hlbWFGaWVsZHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlc2UgYXJlIHRoZSBzY2hlbWEncyBmaWVsZHMgb2YgdGhlIG9iamVjdCBjbGFzcy5cIixcbiAgICAgICAgdHlwZTogc2NoZW1hVHlwZXMuU0NIRU1BX0ZJRUxEU19JTlBVVCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvdXRwdXRGaWVsZHM6IHtcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgY3JlYXRlZCBjbGFzcy4nLFxuICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoc2NoZW1hVHlwZXMuQ0xBU1MpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIHNjaGVtYUZpZWxkcyB9ID0gZGVlcGNvcHkoYXJncyk7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoIH0gPSBjb250ZXh0O1xuXG4gICAgICAgIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MoYXV0aCwgY29uZmlnKTtcblxuICAgICAgICBpZiAoYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgc2NoZW1hLlwiLFxuICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKHsgY2xlYXJDYWNoZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VDbGFzcyA9IGF3YWl0IHNjaGVtYS5hZGRDbGFzc0lmTm90RXhpc3RzKG5hbWUsIHRyYW5zZm9ybVRvUGFyc2Uoc2NoZW1hRmllbGRzKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIG5hbWU6IHBhcnNlQ2xhc3MuY2xhc3NOYW1lLFxuICAgICAgICAgICAgc2NoZW1hRmllbGRzOiB0cmFuc2Zvcm1Ub0dyYXBoUUwocGFyc2VDbGFzcy5maWVsZHMpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY3JlYXRlQ2xhc3NNdXRhdGlvbi5hcmdzLmlucHV0LnR5cGUub2ZUeXBlLCB0cnVlLCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNyZWF0ZUNsYXNzTXV0YXRpb24udHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMTXV0YXRpb24oJ2NyZWF0ZUNsYXNzJywgY3JlYXRlQ2xhc3NNdXRhdGlvbiwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgY29uc3QgdXBkYXRlQ2xhc3NNdXRhdGlvbiA9IG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQoe1xuICAgIG5hbWU6ICdVcGRhdGVDbGFzcycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVGhlIHVwZGF0ZUNsYXNzIG11dGF0aW9uIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBvYmplY3QgY2xhc3MuJyxcbiAgICBpbnB1dEZpZWxkczoge1xuICAgICAgbmFtZTogc2NoZW1hVHlwZXMuQ0xBU1NfTkFNRV9BVFQsXG4gICAgICBzY2hlbWFGaWVsZHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlc2UgYXJlIHRoZSBzY2hlbWEncyBmaWVsZHMgb2YgdGhlIG9iamVjdCBjbGFzcy5cIixcbiAgICAgICAgdHlwZTogc2NoZW1hVHlwZXMuU0NIRU1BX0ZJRUxEU19JTlBVVCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvdXRwdXRGaWVsZHM6IHtcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgdXBkYXRlZCBjbGFzcy4nLFxuICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoc2NoZW1hVHlwZXMuQ0xBU1MpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIHNjaGVtYUZpZWxkcyB9ID0gZGVlcGNvcHkoYXJncyk7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoIH0gPSBjb250ZXh0O1xuXG4gICAgICAgIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MoYXV0aCwgY29uZmlnKTtcblxuICAgICAgICBpZiAoYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gdXBkYXRlIGEgc2NoZW1hLlwiLFxuICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKHsgY2xlYXJDYWNoZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJzZUNsYXNzID0gYXdhaXQgZ2V0Q2xhc3MobmFtZSwgc2NoZW1hKTtcbiAgICAgICAgY29uc3QgcGFyc2VDbGFzcyA9IGF3YWl0IHNjaGVtYS51cGRhdGVDbGFzcyhcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHRyYW5zZm9ybVRvUGFyc2Uoc2NoZW1hRmllbGRzLCBleGlzdGluZ1BhcnNlQ2xhc3MuZmllbGRzKSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbmZpZy5kYXRhYmFzZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBuYW1lOiBwYXJzZUNsYXNzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHNjaGVtYUZpZWxkczogdHJhbnNmb3JtVG9HcmFwaFFMKHBhcnNlQ2xhc3MuZmllbGRzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEuaGFuZGxlRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKHVwZGF0ZUNsYXNzTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZSh1cGRhdGVDbGFzc011dGF0aW9uLnR5cGUsIHRydWUsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTE11dGF0aW9uKCd1cGRhdGVDbGFzcycsIHVwZGF0ZUNsYXNzTXV0YXRpb24sIHRydWUsIHRydWUpO1xuXG4gIGNvbnN0IGRlbGV0ZUNsYXNzTXV0YXRpb24gPSBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkKHtcbiAgICBuYW1lOiAnRGVsZXRlQ2xhc3MnLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlIGRlbGV0ZUNsYXNzIG11dGF0aW9uIGNhbiBiZSB1c2VkIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBvYmplY3QgY2xhc3MuJyxcbiAgICBpbnB1dEZpZWxkczoge1xuICAgICAgbmFtZTogc2NoZW1hVHlwZXMuQ0xBU1NfTkFNRV9BVFQsXG4gICAgfSxcbiAgICBvdXRwdXRGaWVsZHM6IHtcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgZGVsZXRlZCBjbGFzcy4nLFxuICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoc2NoZW1hVHlwZXMuQ0xBU1MpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG5hbWUgfSA9IGRlZXBjb3B5KGFyZ3MpO1xuICAgICAgICBjb25zdCB7IGNvbmZpZywgYXV0aCB9ID0gY29udGV4dDtcblxuICAgICAgICBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKGF1dGgsIGNvbmZpZyk7XG5cbiAgICAgICAgaWYgKGF1dGguaXNSZWFkT25seSkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIHNjaGVtYS5cIixcbiAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCBjb25maWcuZGF0YWJhc2UubG9hZFNjaGVtYSh7IGNsZWFyQ2FjaGU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGFyc2VDbGFzcyA9IGF3YWl0IGdldENsYXNzKG5hbWUsIHNjaGVtYSk7XG4gICAgICAgIGF3YWl0IGNvbmZpZy5kYXRhYmFzZS5kZWxldGVTY2hlbWEobmFtZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIG5hbWU6IGV4aXN0aW5nUGFyc2VDbGFzcy5jbGFzc05hbWUsXG4gICAgICAgICAgICBzY2hlbWFGaWVsZHM6IHRyYW5zZm9ybVRvR3JhcGhRTChleGlzdGluZ1BhcnNlQ2xhc3MuZmllbGRzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEuaGFuZGxlRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGRlbGV0ZUNsYXNzTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShkZWxldGVDbGFzc011dGF0aW9uLnR5cGUsIHRydWUsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTE11dGF0aW9uKCdkZWxldGVDbGFzcycsIGRlbGV0ZUNsYXNzTXV0YXRpb24sIHRydWUsIHRydWUpO1xufTtcblxuZXhwb3J0IHsgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxhQUFBLEdBQUFOLE9B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
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = exports.getClass = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ var _deepcopy = _interopRequireDefault(require("deepcopy"));
9
+ var _graphql = require("graphql");
10
+ var _schemaFields = require("../transformers/schemaFields");
11
+ var schemaTypes = _interopRequireWildcard(require("./schemaTypes"));
12
+ var _parseGraphQLUtils = require("../parseGraphQLUtils");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const getClass = async (name, schema) => {
16
+ try {
17
+ return await schema.getOneSchema(name, true);
18
+ } catch (e) {
19
+ if (e === undefined) {
20
+ throw new _node.default.Error(_node.default.Error.INVALID_CLASS_NAME, `Class ${name} does not exist.`);
21
+ } else {
22
+ throw new _node.default.Error(_node.default.Error.INTERNAL_SERVER_ERROR, 'Database adapter error.');
23
+ }
24
+ }
25
+ };
26
+ exports.getClass = getClass;
27
+ const load = parseGraphQLSchema => {
28
+ parseGraphQLSchema.addGraphQLQuery('class', {
29
+ description: 'The class query can be used to retrieve an existing object class.',
30
+ args: {
31
+ name: schemaTypes.CLASS_NAME_ATT
32
+ },
33
+ type: new _graphql.GraphQLNonNull(schemaTypes.CLASS),
34
+ resolve: async (_source, args, context) => {
35
+ try {
36
+ const {
37
+ name
38
+ } = (0, _deepcopy.default)(args);
39
+ const {
40
+ config,
41
+ auth
42
+ } = context;
43
+ (0, _parseGraphQLUtils.enforceMasterKeyAccess)(auth, config);
44
+ const schema = await config.database.loadSchema({
45
+ clearCache: true
46
+ });
47
+ const parseClass = await getClass(name, schema);
48
+ return {
49
+ name: parseClass.className,
50
+ schemaFields: (0, _schemaFields.transformToGraphQL)(parseClass.fields)
51
+ };
52
+ } catch (e) {
53
+ parseGraphQLSchema.handleError(e);
54
+ }
55
+ }
56
+ }, true, true);
57
+ parseGraphQLSchema.addGraphQLQuery('classes', {
58
+ description: 'The classes query can be used to retrieve the existing object classes.',
59
+ type: new _graphql.GraphQLNonNull(new _graphql.GraphQLList(new _graphql.GraphQLNonNull(schemaTypes.CLASS))),
60
+ resolve: async (_source, _args, context) => {
61
+ try {
62
+ const {
63
+ config,
64
+ auth
65
+ } = context;
66
+ (0, _parseGraphQLUtils.enforceMasterKeyAccess)(auth, config);
67
+ const schema = await config.database.loadSchema({
68
+ clearCache: true
69
+ });
70
+ return (await schema.getAllClasses(true)).map(parseClass => ({
71
+ name: parseClass.className,
72
+ schemaFields: (0, _schemaFields.transformToGraphQL)(parseClass.fields)
73
+ }));
74
+ } catch (e) {
75
+ parseGraphQLSchema.handleError(e);
76
+ }
77
+ }
78
+ }, true, true);
79
+ };
80
+ exports.load = load;
81
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2RlZXBjb3B5IiwiX2dyYXBocWwiLCJfc2NoZW1hRmllbGRzIiwic2NoZW1hVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9wYXJzZUdyYXBoUUxVdGlscyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldENsYXNzIiwibmFtZSIsInNjaGVtYSIsImdldE9uZVNjaGVtYSIsInVuZGVmaW5lZCIsIlBhcnNlIiwiRXJyb3IiLCJJTlZBTElEX0NMQVNTX05BTUUiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJleHBvcnRzIiwibG9hZCIsInBhcnNlR3JhcGhRTFNjaGVtYSIsImFkZEdyYXBoUUxRdWVyeSIsImRlc2NyaXB0aW9uIiwiYXJncyIsIkNMQVNTX05BTUVfQVRUIiwidHlwZSIsIkdyYXBoUUxOb25OdWxsIiwiQ0xBU1MiLCJyZXNvbHZlIiwiX3NvdXJjZSIsImNvbnRleHQiLCJkZWVwY29weSIsImNvbmZpZyIsImF1dGgiLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZGF0YWJhc2UiLCJsb2FkU2NoZW1hIiwiY2xlYXJDYWNoZSIsInBhcnNlQ2xhc3MiLCJjbGFzc05hbWUiLCJzY2hlbWFGaWVsZHMiLCJ0cmFuc2Zvcm1Ub0dyYXBoUUwiLCJmaWVsZHMiLCJoYW5kbGVFcnJvciIsIkdyYXBoUUxMaXN0IiwiX2FyZ3MiLCJnZXRBbGxDbGFzc2VzIiwibWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9zY2hlbWFRdWVyaWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5pbXBvcnQgeyBHcmFwaFFMTm9uTnVsbCwgR3JhcGhRTExpc3QgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IHRyYW5zZm9ybVRvR3JhcGhRTCB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9zY2hlbWFGaWVsZHMnO1xuaW1wb3J0ICogYXMgc2NoZW1hVHlwZXMgZnJvbSAnLi9zY2hlbWFUeXBlcyc7XG5pbXBvcnQgeyBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIH0gZnJvbSAnLi4vcGFyc2VHcmFwaFFMVXRpbHMnO1xuXG5jb25zdCBnZXRDbGFzcyA9IGFzeW5jIChuYW1lLCBzY2hlbWEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgc2NoZW1hLmdldE9uZVNjaGVtYShuYW1lLCB0cnVlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0NMQVNTX05BTUUsIGBDbGFzcyAke25hbWV9IGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnRGF0YWJhc2UgYWRhcHRlciBlcnJvci4nKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGxvYWQgPSBwYXJzZUdyYXBoUUxTY2hlbWEgPT4ge1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFF1ZXJ5KFxuICAgICdjbGFzcycsXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdUaGUgY2xhc3MgcXVlcnkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgYW4gZXhpc3Rpbmcgb2JqZWN0IGNsYXNzLicsXG4gICAgICBhcmdzOiB7XG4gICAgICAgIG5hbWU6IHNjaGVtYVR5cGVzLkNMQVNTX05BTUVfQVRULFxuICAgICAgfSxcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChzY2hlbWFUeXBlcy5DTEFTUyksXG4gICAgICByZXNvbHZlOiBhc3luYyAoX3NvdXJjZSwgYXJncywgY29udGV4dCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZGVlcGNvcHkoYXJncyk7XG4gICAgICAgICAgY29uc3QgeyBjb25maWcsIGF1dGggfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKGF1dGgsIGNvbmZpZyk7XG5cbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCBjb25maWcuZGF0YWJhc2UubG9hZFNjaGVtYSh7IGNsZWFyQ2FjaGU6IHRydWUgfSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VDbGFzcyA9IGF3YWl0IGdldENsYXNzKG5hbWUsIHNjaGVtYSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHBhcnNlQ2xhc3MuY2xhc3NOYW1lLFxuICAgICAgICAgICAgc2NoZW1hRmllbGRzOiB0cmFuc2Zvcm1Ub0dyYXBoUUwocGFyc2VDbGFzcy5maWVsZHMpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEuaGFuZGxlRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICB0cnVlLFxuICAgIHRydWVcbiAgKTtcblxuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFF1ZXJ5KFxuICAgICdjbGFzc2VzJyxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBjbGFzc2VzIHF1ZXJ5IGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBleGlzdGluZyBvYmplY3QgY2xhc3Nlcy4nLFxuICAgICAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoc2NoZW1hVHlwZXMuQ0xBU1MpKSksXG4gICAgICByZXNvbHZlOiBhc3luYyAoX3NvdXJjZSwgX2FyZ3MsIGNvbnRleHQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGNvbmZpZywgYXV0aCB9ID0gY29udGV4dDtcblxuICAgICAgICAgIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MoYXV0aCwgY29uZmlnKTtcblxuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKHsgY2xlYXJDYWNoZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gKGF3YWl0IHNjaGVtYS5nZXRBbGxDbGFzc2VzKHRydWUpKS5tYXAocGFyc2VDbGFzcyA9PiAoe1xuICAgICAgICAgICAgbmFtZTogcGFyc2VDbGFzcy5jbGFzc05hbWUsXG4gICAgICAgICAgICBzY2hlbWFGaWVsZHM6IHRyYW5zZm9ybVRvR3JhcGhRTChwYXJzZUNsYXNzLmZpZWxkcyksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmhhbmRsZUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gICAgdHJ1ZSxcbiAgICB0cnVlXG4gICk7XG59O1xuXG5leHBvcnQgeyBnZXRDbGFzcywgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBTixPQUFBO0FBQThELFNBQUFLLHdCQUFBRSxDQUFBLEVBQUFDLENB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QUFFO1FBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU1DLFVBQVUsR0FBRyxNQUFNN0IsUUFBUSxDQUFDQyxJQUFJLEVBQUVDLE1BQU0sQ0FBQztRQUMvQyxPQUFPO1VBQ0xELElBQUksRUFBRTRCLFVBQVUsQ0FBQ0MsU0FBUztVQUMxQkMsWUFBWSxFQUFFLElBQUFDLGdDQUFrQixFQUFDSCxVQUFVLENBQUNJLE1BQU07UUFDcEQsQ0FBQztNQUNILENBQUMsQ0FBQyxPQUFPcEQsQ0FBQyxFQUFFO1FBQ1Y4QixrQkFBa0IsQ0FBQ3VCLFdBQVcsQ0FBQ3JELENBQUMsQ0FBQztNQUNuQztJQUNGO0VBQ0YsQ0FBQyxFQUNELElBQUksRUFDSixJQUNGLENBQUM7RUFFRDhCLGtCQUFrQixDQUFDQyxlQUFlLENBQ2hDLFNBQVMsRUFDVDtJQUNFQyxXQUFXLEVBQUUsd0VBQXdFO0lBQ3JGRyxJQUFJLEVBQUUsSUFBSUMsdUJBQWMsQ0FBQyxJQUFJa0Isb0JBQVcsQ0FBQyxJQUFJbEIsdUJBQWMsQ0FBQ3ZDLFdBQVcsQ0FBQ3dDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEZDLE9BQU8sRUFBRSxNQUFBQSxDQUFPQyxPQUFPLEVBQUVnQixLQUFLLEVBQUVmLE9BQU8sS0FBSztNQUMxQyxJQUFJO1FBQ0YsTUFBTTtVQUFFRSxNQUFNO1VBQUVDO1FBQUssQ0FBQyxHQUFHSCxPQUFPO1FBRWhDLElBQUFJLHlDQUFzQixFQUFDRCxJQUFJLEVBQUVELE1BQU0sQ0FBQztRQUVwQyxNQUFNckIsTUFBTSxHQUFHLE1BQU1xQixNQUFNLENBQUNHLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDO1VBQUVDLFVBQVUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsTUFBTTFCLE1BQU0sQ0FBQ21DLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRUMsR0FBRyxDQUFDVCxVQUFVLEtBQUs7VUFDM0Q1QixJQUFJLEVBQUU0QixVQUFVLENBQUNDLFNBQVM7VUFDMUJDLFlBQVksRUFBRSxJQUFBQyxnQ0FBa0IsRUFBQ0gsVUFBVSxDQUFDSSxNQUFNO1FBQ3BELENBQUMsQ0FBQyxDQUFDO01BQ0wsQ0FBQyxDQUFDLE9BQU9wRCxDQUFDLEVBQUU7UUFDVjhCLGtCQUFrQixDQUFDdUIsV0FBVyxDQUFDckQsQ0FBQyxDQUFDO01BQ25DO0lBQ0Y7RUFDRixDQUFDLEVBQ0QsSUFBSSxFQUNKLElBQ0YsQ0FBQztBQUNILENBQUM7QUFBQzRCLE9BQUEsQ0FBQUMsSUFBQSxHQUFBQSxJQUFBIiwiaWdub3JlTGlzdCI6W119