@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
package/lib/batch.js ADDED
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+
3
+ const Parse = require('parse/node').Parse;
4
+ const path = require('path');
5
+ // These methods handle batch requests.
6
+ const batchPath = '/batch';
7
+
8
+ // Mounts a batch-handler onto a PromiseRouter.
9
+ function mountOnto(router) {
10
+ router.route('POST', batchPath, req => {
11
+ return handleBatch(router, req);
12
+ });
13
+ }
14
+ function parseURL(urlString) {
15
+ try {
16
+ return new URL(urlString);
17
+ } catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ function makeBatchRoutingPathFunction(originalUrl, serverURL, publicServerURL) {
22
+ serverURL = serverURL ? parseURL(serverURL) : undefined;
23
+ publicServerURL = publicServerURL ? parseURL(publicServerURL) : undefined;
24
+ const apiPrefixLength = originalUrl.length - batchPath.length;
25
+ let apiPrefix = originalUrl.slice(0, apiPrefixLength);
26
+ const makeRoutablePath = function (requestPath) {
27
+ // The routablePath is the path minus the api prefix
28
+ if (requestPath.slice(0, apiPrefix.length) != apiPrefix) {
29
+ throw new Parse.Error(Parse.Error.INVALID_JSON, 'cannot route batch path ' + requestPath);
30
+ }
31
+ return path.posix.join('/', requestPath.slice(apiPrefix.length));
32
+ };
33
+ if (serverURL && publicServerURL && serverURL.pathname != publicServerURL.pathname) {
34
+ const localPath = serverURL.pathname;
35
+ const publicPath = publicServerURL.pathname;
36
+
37
+ // Override the api prefix
38
+ apiPrefix = localPath;
39
+ return function (requestPath) {
40
+ // Figure out which server url was used by figuring out which
41
+ // path more closely matches requestPath
42
+ const startsWithLocal = requestPath.startsWith(localPath);
43
+ const startsWithPublic = requestPath.startsWith(publicPath);
44
+ const pathLengthToUse = startsWithLocal && startsWithPublic ? Math.max(localPath.length, publicPath.length) : startsWithLocal ? localPath.length : publicPath.length;
45
+ const newPath = path.posix.join('/', localPath, '/', requestPath.slice(pathLengthToUse));
46
+
47
+ // Use the method for local routing
48
+ return makeRoutablePath(newPath);
49
+ };
50
+ }
51
+ return makeRoutablePath;
52
+ }
53
+
54
+ // Returns a promise for a {response} object.
55
+ // TODO: pass along auth correctly
56
+ async function handleBatch(router, req) {
57
+ if (!Array.isArray(req.body?.requests)) {
58
+ throw new Parse.Error(Parse.Error.INVALID_JSON, 'requests must be an array');
59
+ }
60
+ const batchRequestLimit = req.config?.requestComplexity?.batchRequestLimit ?? -1;
61
+ if (batchRequestLimit > -1 && !req.auth?.isMaster && !req.auth?.isMaintenance && req.body.requests.length > batchRequestLimit) {
62
+ throw new Parse.Error(Parse.Error.INVALID_JSON, `Batch request contains ${req.body.requests.length} sub-requests, which exceeds the limit of ${batchRequestLimit}.`);
63
+ }
64
+ for (const restRequest of req.body.requests) {
65
+ if (!restRequest || typeof restRequest !== 'object' || typeof restRequest.path !== 'string') {
66
+ throw new Parse.Error(Parse.Error.INVALID_JSON, 'batch request path must be a string');
67
+ }
68
+ }
69
+
70
+ // The batch paths are all from the root of our domain.
71
+ // That means they include the API prefix, that the API is mounted
72
+ // to. However, our promise router does not route the api prefix. So
73
+ // we need to figure out the API prefix, so that we can strip it
74
+ // from all the subrequests.
75
+ if (!req.originalUrl.endsWith(batchPath)) {
76
+ throw 'internal routing problem - expected url to end with batch';
77
+ }
78
+ const makeRoutablePath = makeBatchRoutingPathFunction(req.originalUrl, req.config.serverURL, req.config.publicServerURL);
79
+
80
+ // Enforce rate limits for each batch sub-request by invoking the
81
+ // rate limit handler. This ensures sub-requests consume tokens from
82
+ // the same window state as direct requests.
83
+ const rateLimits = req.config.rateLimits || [];
84
+ for (const restRequest of req.body.requests) {
85
+ const routablePath = makeRoutablePath(restRequest.path);
86
+ if ((restRequest.method || 'GET').toUpperCase() === 'POST' && routablePath === batchPath) {
87
+ throw new Parse.Error(Parse.Error.INVALID_JSON, 'nested batch requests are not allowed');
88
+ }
89
+ for (const limit of rateLimits) {
90
+ const pathExp = limit.path.regexp || limit.path;
91
+ if (!pathExp.test(routablePath)) {
92
+ continue;
93
+ }
94
+ const info = {
95
+ ...req.info
96
+ };
97
+ if (routablePath === '/login') {
98
+ delete info.sessionToken;
99
+ }
100
+ const fakeReq = {
101
+ ip: req.ip || req.config?.ip || '127.0.0.1',
102
+ method: (restRequest.method || 'GET').toUpperCase(),
103
+ _batchOriginalMethod: 'POST',
104
+ config: req.config,
105
+ auth: req.auth,
106
+ info
107
+ };
108
+ const fakeRes = {
109
+ setHeader() {}
110
+ };
111
+ try {
112
+ await limit.handler(fakeReq, fakeRes, err => {
113
+ if (err) {
114
+ throw err;
115
+ }
116
+ });
117
+ } catch {
118
+ throw new Parse.Error(Parse.Error.CONNECTION_FAILED, limit.errorResponseMessage || 'Too many requests');
119
+ }
120
+ }
121
+ }
122
+ const batch = transactionRetries => {
123
+ let initialPromise = Promise.resolve();
124
+ if (req.body?.transaction === true) {
125
+ initialPromise = req.config.database.createTransactionalSession();
126
+ }
127
+ return initialPromise.then(() => {
128
+ const promises = req.body?.requests.map(restRequest => {
129
+ const routablePath = makeRoutablePath(restRequest.path);
130
+
131
+ // Construct a request that we can send to a handler
132
+ const request = {
133
+ body: restRequest.body,
134
+ config: req.config,
135
+ auth: req.auth,
136
+ info: req.info
137
+ };
138
+ return router.tryRouteRequest(restRequest.method, routablePath, request).then(response => {
139
+ return {
140
+ success: response.response
141
+ };
142
+ }, error => {
143
+ return {
144
+ error: {
145
+ code: error.code,
146
+ error: error.message
147
+ }
148
+ };
149
+ });
150
+ });
151
+ return Promise.all(promises).then(results => {
152
+ if (req.body?.transaction === true) {
153
+ if (results.find(result => typeof result.error === 'object')) {
154
+ return req.config.database.abortTransactionalSession().then(() => {
155
+ return Promise.reject({
156
+ response: results
157
+ });
158
+ });
159
+ } else {
160
+ return req.config.database.commitTransactionalSession().then(() => {
161
+ return {
162
+ response: results
163
+ };
164
+ });
165
+ }
166
+ } else {
167
+ return {
168
+ response: results
169
+ };
170
+ }
171
+ }).catch(error => {
172
+ if (error && error.response && error.response.find(errorItem => typeof errorItem.error === 'object' && errorItem.error.code === 251) && transactionRetries > 0) {
173
+ return batch(transactionRetries - 1);
174
+ }
175
+ throw error;
176
+ });
177
+ });
178
+ };
179
+ return batch(5);
180
+ }
181
+ module.exports = {
182
+ mountOnto,
183
+ makeBatchRoutingPathFunction
184
+ };
185
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJwYXRoIiwiYmF0Y2hQYXRoIiwibW91bnRPbnRvIiwicm91dGVyIiwicm91dGUiLCJyZXEiLCJoYW5kbGVCYXRjaCIsInBhcnNlVVJMIiwidXJsU3RyaW5nIiwiVVJMIiwidW5kZWZpbmVkIiwibWFrZUJhdGNoUm91dGluZ1BhdGhGdW5jdGlvbiIsIm9yaWdpbmFsVXJsIiwic2VydmVyVVJMIiwicHVibGljU2VydmVyVVJMIiwiYXBpUHJlZml4TGVuZ3RoIiwibGVuZ3RoIiwiYXBpUHJlZml4Iiwic2xpY2UiLCJtYWtlUm91dGFibGVQYXRoIiwicmVxdWVzdFBhdGgiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsInBvc2l4Iiwiam9pbiIsInBhdGhuYW1lIiwibG9jYWxQYXRoIiwicHVibGljUGF0aCIsInN0YXJ0c1dpdGhMb2NhbCIsInN0YXJ0c1dpdGgiLCJzdGFydHNXaXRoUHVibGljIiwicGF0aExlbmd0aFRvVXNlIiwiTWF0aCIsIm1heCIsIm5ld1BhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJib2R5IiwicmVxdWVzdHMiLCJiYXRjaFJlcXVlc3RMaW1pdCIsImNvbmZpZyIsInJlcXVlc3RDb21wbGV4aXR5IiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc3RSZXF1ZXN0IiwiZW5kc1dpdGgiLCJyYXRlTGltaXRzIiwicm91dGFibGVQYXRoIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJsaW1pdCIsInBhdGhFeHAiLCJyZWdleHAiLCJ0ZXN0IiwiaW5mbyIsInNlc3Npb25Ub2tlbiIsImZha2VSZXEiLCJpcCIsIl9iYXRjaE9yaWdpbmFsTWV0aG9kIiwiZmFrZVJlcyIsInNldEhlYWRlciIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwiYmF0Y2giLCJ0cmFuc2FjdGlvblJldHJpZXMiLCJpbml0aWFsUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhbnNhY3Rpb24iLCJkYXRhYmFzZSIsImNyZWF0ZVRyYW5zYWN0aW9uYWxTZXNzaW9uIiwidGhlbiIsInByb21pc2VzIiwibWFwIiwicmVxdWVzdCIsInRyeVJvdXRlUmVxdWVzdCIsInJlc3BvbnNlIiwic3VjY2VzcyIsImVycm9yIiwiY29kZSIsIm1lc3NhZ2UiLCJhbGwiLCJyZXN1bHRzIiwiZmluZCIsInJlc3VsdCIsImFib3J0VHJhbnNhY3Rpb25hbFNlc3Npb24iLCJyZWplY3QiLCJjb21taXRUcmFuc2FjdGlvbmFsU2Vzc2lvbiIsImNhdGNoIiwiZXJyb3JJdGVtIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXRjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4vLyBUaGVzZSBtZXRob2RzIGhhbmRsZSBiYXRjaCByZXF1ZXN0cy5cbmNvbnN0IGJhdGNoUGF0aCA9ICcvYmF0Y2gnO1xuXG4vLyBNb3VudHMgYSBiYXRjaC1oYW5kbGVyIG9udG8gYSBQcm9taXNlUm91dGVyLlxuZnVuY3Rpb24gbW91bnRPbnRvKHJvdXRlcikge1xuICByb3V0ZXIucm91dGUoJ1BPU1QnLCBiYXRjaFBhdGgsIHJlcSA9PiB7XG4gICAgcmV0dXJuIGhhbmRsZUJhdGNoKHJvdXRlciwgcmVxKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHVybFN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUJhdGNoUm91dGluZ1BhdGhGdW5jdGlvbihvcmlnaW5hbFVybCwgc2VydmVyVVJMLCBwdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgc2VydmVyVVJMID0gc2VydmVyVVJMID8gcGFyc2VVUkwoc2VydmVyVVJMKSA6IHVuZGVmaW5lZDtcbiAgcHVibGljU2VydmVyVVJMID0gcHVibGljU2VydmVyVVJMID8gcGFyc2VVUkwocHVibGljU2VydmVyVVJMKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBhcGlQcmVmaXhMZW5ndGggPSBvcmlnaW5hbFVybC5sZW5ndGggLSBiYXRjaFBhdGgubGVuZ3RoO1xuICBsZXQgYXBpUHJlZml4ID0gb3JpZ2luYWxVcmwuc2xpY2UoMCwgYXBpUHJlZml4TGVuZ3RoKTtcblxuICBjb25zdCBtYWtlUm91dGFibGVQYXRoID0gZnVuY3Rpb24gKHJlcXVlc3RQYXRoKSB7XG4gICAgLy8gVGhlIHJvdXRhYmxlUGF0aCBpcyB0aGUgcGF0aCBtaW51cyB0aGUgYXBpIHByZWZpeFxuICAgIGlmIChyZXF1ZXN0UGF0aC5zbGljZSgwLCBhcGlQcmVmaXgubGVuZ3RoKSAhPSBhcGlQcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdjYW5ub3Qgcm91dGUgYmF0Y2ggcGF0aCAnICsgcmVxdWVzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKCcvJywgcmVxdWVzdFBhdGguc2xpY2UoYXBpUHJlZml4Lmxlbmd0aCkpO1xuICB9O1xuXG4gIGlmIChzZXJ2ZXJVUkwgJiYgcHVibGljU2VydmVyVVJMICYmIHNlcnZlclVSTC5wYXRobmFtZSAhPSBwdWJsaWNTZXJ2ZXJVUkwucGF0aG5hbWUpIHtcbiAgICBjb25zdCBsb2NhbFBhdGggPSBzZXJ2ZXJVUkwucGF0aG5hbWU7XG4gICAgY29uc3QgcHVibGljUGF0aCA9IHB1YmxpY1NlcnZlclVSTC5wYXRobmFtZTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBhcGkgcHJlZml4XG4gICAgYXBpUHJlZml4ID0gbG9jYWxQYXRoO1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVxdWVzdFBhdGgpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggc2VydmVyIHVybCB3YXMgdXNlZCBieSBmaWd1cmluZyBvdXQgd2hpY2hcbiAgICAgIC8vIHBhdGggbW9yZSBjbG9zZWx5IG1hdGNoZXMgcmVxdWVzdFBhdGhcbiAgICAgIGNvbnN0IHN0YXJ0c1dpdGhMb2NhbCA9IHJlcXVlc3RQYXRoLnN0YXJ0c1dpdGgobG9jYWxQYXRoKTtcbiAgICAgIGNvbnN0IHN0YXJ0c1dpdGhQdWJsaWMgPSByZXF1ZXN0UGF0aC5zdGFydHNXaXRoKHB1YmxpY1BhdGgpO1xuICAgICAgY29uc3QgcGF0aExlbmd0aFRvVXNlID1cbiAgICAgICAgc3RhcnRzV2l0aExvY2FsICYmIHN0YXJ0c1dpdGhQdWJsaWNcbiAgICAgICAgICA/IE1hdGgubWF4KGxvY2FsUGF0aC5sZW5ndGgsIHB1YmxpY1BhdGgubGVuZ3RoKVxuICAgICAgICAgIDogc3RhcnRzV2l0aExvY2FsXG4gICAgICAgICAgICA/IGxvY2FsUGF0aC5sZW5ndGhcbiAgICAgICAgICAgIDogcHVibGljUGF0aC5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLnBvc2l4LmpvaW4oJy8nLCBsb2NhbFBhdGgsICcvJywgcmVxdWVzdFBhdGguc2xpY2UocGF0aExlbmd0aFRvVXNlKSk7XG5cbiAgICAgIC8vIFVzZSB0aGUgbWV0aG9kIGZvciBsb2NhbCByb3V0aW5nXG4gICAgICByZXR1cm4gbWFrZVJvdXRhYmxlUGF0aChuZXdQYXRoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG1ha2VSb3V0YWJsZVBhdGg7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZX0gb2JqZWN0LlxuLy8gVE9ETzogcGFzcyBhbG9uZyBhdXRoIGNvcnJlY3RseVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQmF0Y2gocm91dGVyLCByZXEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlcS5ib2R5Py5yZXF1ZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAncmVxdWVzdHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG4gIGNvbnN0IGJhdGNoUmVxdWVzdExpbWl0ID0gcmVxLmNvbmZpZz8ucmVxdWVzdENvbXBsZXhpdHk/LmJhdGNoUmVxdWVzdExpbWl0ID8/IC0xO1xuICBpZiAoYmF0Y2hSZXF1ZXN0TGltaXQgPiAtMSAmJiAhcmVxLmF1dGg/LmlzTWFzdGVyICYmICFyZXEuYXV0aD8uaXNNYWludGVuYW5jZSAmJiByZXEuYm9keS5yZXF1ZXN0cy5sZW5ndGggPiBiYXRjaFJlcXVlc3RMaW1pdCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfSlNPTixcbiAgICAgIGBCYXRjaCByZXF1ZXN0IGNvbnRhaW5zICR7cmVxLmJvZHkucmVxdWVzdHMubGVuZ3RofSBzdWItcmVxdWVzdHMsIHdoaWNoIGV4Y2VlZHMgdGhlIGxpbWl0IG9mICR7YmF0Y2hSZXF1ZXN0TGltaXR9LmBcbiAgICApO1xuICB9XG4gIGZvciAoY29uc3QgcmVzdFJlcXVlc3Qgb2YgcmVxLmJvZHkucmVxdWVzdHMpIHtcbiAgICBpZiAoIXJlc3RSZXF1ZXN0IHx8IHR5cGVvZiByZXN0UmVxdWVzdCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlc3RSZXF1ZXN0LnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnYmF0Y2ggcmVxdWVzdCBwYXRoIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgYmF0Y2ggcGF0aHMgYXJlIGFsbCBmcm9tIHRoZSByb290IG9mIG91ciBkb21haW4uXG4gIC8vIFRoYXQgbWVhbnMgdGhleSBpbmNsdWRlIHRoZSBBUEkgcHJlZml4LCB0aGF0IHRoZSBBUEkgaXMgbW91bnRlZFxuICAvLyB0by4gSG93ZXZlciwgb3VyIHByb21pc2Ugcm91dGVyIGRvZXMgbm90IHJvdXRlIHRoZSBhcGkgcHJlZml4LiBTb1xuICAvLyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEFQSSBwcmVmaXgsIHNvIHRoYXQgd2UgY2FuIHN0cmlwIGl0XG4gIC8vIGZyb20gYWxsIHRoZSBzdWJyZXF1ZXN0cy5cbiAgaWYgKCFyZXEub3JpZ2luYWxVcmwuZW5kc1dpdGgoYmF0Y2hQYXRoKSkge1xuICAgIHRocm93ICdpbnRlcm5hbCByb3V0aW5nIHByb2JsZW0gLSBleHBlY3RlZCB1cmwgdG8gZW5kIHdpdGggYmF0Y2gnO1xuICB9XG5cbiAgY29uc3QgbWFrZVJvdXRhYmxlUGF0aCA9IG1ha2VCYXRjaFJvdXRpbmdQYXRoRnVuY3Rpb24oXG4gICAgcmVxLm9yaWdpbmFsVXJsLFxuICAgIHJlcS5jb25maWcuc2VydmVyVVJMLFxuICAgIHJlcS5jb25maWcucHVibGljU2VydmVyVVJMXG4gICk7XG5cbiAgLy8gRW5mb3JjZSByYXRlIGxpbWl0cyBmb3IgZWFjaCBiYXRjaCBzdWItcmVxdWVzdCBieSBpbnZva2luZyB0aGVcbiAgLy8gcmF0ZSBsaW1pdCBoYW5kbGVyLiBUaGlzIGVuc3VyZXMgc3ViLXJlcXVlc3RzIGNvbnN1bWUgdG9rZW5zIGZyb21cbiAgLy8gdGhlIHNhbWUgd2luZG93IHN0YXRlIGFzIGRpcmVjdCByZXF1ZXN0cy5cbiAgY29uc3QgcmF0ZUxpbWl0cyA9IHJlcS5jb25maWcucmF0ZUxpbWl0cyB8fCBbXTtcbiAgZm9yIChjb25zdCByZXN0UmVxdWVzdCBvZiByZXEuYm9keS5yZXF1ZXN0cykge1xuICAgIGNvbnN0IHJvdXRhYmxlUGF0aCA9IG1ha2VSb3V0YWJsZVBhdGgocmVzdFJlcXVlc3QucGF0aCk7XG4gICAgaWYgKChyZXN0UmVxdWVzdC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCkgPT09ICdQT1NUJyAmJiByb3V0YWJsZVBhdGggPT09IGJhdGNoUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ25lc3RlZCBiYXRjaCByZXF1ZXN0cyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaW1pdCBvZiByYXRlTGltaXRzKSB7XG4gICAgICBjb25zdCBwYXRoRXhwID0gbGltaXQucGF0aC5yZWdleHAgfHwgbGltaXQucGF0aDtcbiAgICAgIGlmICghcGF0aEV4cC50ZXN0KHJvdXRhYmxlUGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmZvID0geyAuLi5yZXEuaW5mbyB9O1xuICAgICAgaWYgKHJvdXRhYmxlUGF0aCA9PT0gJy9sb2dpbicpIHtcbiAgICAgICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgY29uc3QgZmFrZVJlcSA9IHtcbiAgICAgICAgaXA6IHJlcS5pcCB8fCByZXEuY29uZmlnPy5pcCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgICAgbWV0aG9kOiAocmVzdFJlcXVlc3QubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBfYmF0Y2hPcmlnaW5hbE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICBpbmZvLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZha2VSZXMgPSB7IHNldEhlYWRlcigpIHt9IH07XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBsaW1pdC5oYW5kbGVyKGZha2VSZXEsIGZha2VSZXMsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELFxuICAgICAgICAgIGxpbWl0LmVycm9yUmVzcG9uc2VNZXNzYWdlIHx8ICdUb28gbWFueSByZXF1ZXN0cydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBiYXRjaCA9IHRyYW5zYWN0aW9uUmV0cmllcyA9PiB7XG4gICAgbGV0IGluaXRpYWxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKHJlcS5ib2R5Py50cmFuc2FjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdGlhbFByb21pc2UgPSByZXEuY29uZmlnLmRhdGFiYXNlLmNyZWF0ZVRyYW5zYWN0aW9uYWxTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSByZXEuYm9keT8ucmVxdWVzdHMubWFwKHJlc3RSZXF1ZXN0ID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGFibGVQYXRoID0gbWFrZVJvdXRhYmxlUGF0aChyZXN0UmVxdWVzdC5wYXRoKTtcblxuICAgICAgICAvLyBDb25zdHJ1Y3QgYSByZXF1ZXN0IHRoYXQgd2UgY2FuIHNlbmQgdG8gYSBoYW5kbGVyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgYm9keTogcmVzdFJlcXVlc3QuYm9keSxcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgYXV0aDogcmVxLmF1dGgsXG4gICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJvdXRlci50cnlSb3V0ZVJlcXVlc3QocmVzdFJlcXVlc3QubWV0aG9kLCByb3V0YWJsZVBhdGgsIHJlcXVlc3QpLnRoZW4oXG4gICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogcmVzcG9uc2UucmVzcG9uc2UgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB7IGNvZGU6IGVycm9yLmNvZGUsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAocmVxLmJvZHk/LnRyYW5zYWN0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5maW5kKHJlc3VsdCA9PiB0eXBlb2YgcmVzdWx0LmVycm9yID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHJlc3BvbnNlOiByZXN1bHRzIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlLmNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3VsdHMgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXN1bHRzIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yICYmXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZmluZChcbiAgICAgICAgICAgICAgZXJyb3JJdGVtID0+IHR5cGVvZiBlcnJvckl0ZW0uZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9ySXRlbS5lcnJvci5jb2RlID09PSAyNTFcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uUmV0cmllcyA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBiYXRjaCh0cmFuc2FjdGlvblJldHJpZXMgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gYmF0Y2goNSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3VudE9udG8sXG4gIG1ha2VCYXRjaFJvdXRpbmdQYXRoRnVuY3Rpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtBQUNBLE1BQU1FLFNBQVMsR0FBRyxRQUFROztBQUUxQjtBQUNBLFNBQVNDLFNBQVNBLENBQUNDLE1BQU0sRUFBRTtFQUN6QkEsTUFBTSxDQUFDQyxLQUFLLENBQUMsTUFBTSxFQUFFSCxTQUFTLEVBQUVJLEdBQUcsSUFBSTtJQUNyQyxPQUFPQyxXQUFXLENBQUNILE1BQU0sRUFBRUUsR0FBRyxDQUFDO0VBQ2pDLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0UsUUFBUUEsQ0FBQ0MsU0FBUyxFQUFFO0VBQzNCLElBQUk7SUFDRixPQUFPLElBQUlDLEdBQUcsQ0FBQ0QsU0FBUyxDQUFDO0VBQzNCLENBQUMsQ0FBQyxNQUFNO0lBQ04sT0FBT0UsU0FBUztFQUNsQjtBQUNGO0FBRUEsU0FBU0MsNEJBQTRCQSxDQUFDQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFO0VBQzdFRCxTQUFTLEdBQUdBLFNBQVMsR0FBR04sUUFBUSxDQUFDTSxTQUFTLENBQUMsR0FBR0gsU0FBUztFQUN2REksZUFBZSxHQUFHQSxlQUFlLEdB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QUFJO2NBQUVELEtBQUssRUFBRUEsS0FBSyxDQUFDRTtZQUFRO1VBQUUsQ0FBQztRQUM5RCxDQUNGLENBQUM7TUFDSCxDQUFDLENBQUM7TUFFRixPQUFPZCxPQUFPLENBQUNlLEdBQUcsQ0FBQ1QsUUFBUSxDQUFDLENBQ3pCRCxJQUFJLENBQUNXLE9BQU8sSUFBSTtRQUNmLElBQUloRixHQUFHLENBQUNnQyxJQUFJLEVBQUVrQyxXQUFXLEtBQUssSUFBSSxFQUFFO1VBQ2xDLElBQUljLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDQyxNQUFNLElBQUksT0FBT0EsTUFBTSxDQUFDTixLQUFLLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDNUQsT0FBTzVFLEdBQUcsQ0FBQ21DLE1BQU0sQ0FBQ2dDLFFBQVEsQ0FBQ2dCLHlCQUF5QixDQUFDLENBQUMsQ0FBQ2QsSUFBSSxDQUFDLE1BQU07Y0FDaEUsT0FBT0wsT0FBTyxDQUFDb0IsTUFBTSxDQUFDO2dCQUFFVixRQUFRLEVBQUVNO2NBQVEsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQztVQUNKLENBQUMsTUFBTTtZQUNMLE9BQU9oRixHQUFHLENBQUNtQyxNQUFNLENBQUNnQyxRQUFRLENBQUNrQiwwQkFBMEIsQ0FBQyxDQUFDLENBQUNoQixJQUFJLENBQUMsTUFBTTtjQUNqRSxPQUFPO2dCQUFFSyxRQUFRLEVBQUVNO2NBQVEsQ0FBQztZQUM5QixDQUFDLENBQUM7VUFDSjtRQUNGLENBQUMsTUFBTTtVQUNMLE9BQU87WUFBRU4sUUFBUSxFQUFFTTtVQUFRLENBQUM7UUFDOUI7TUFDRixDQUFDLENBQUMsQ0FDRE0sS0FBSyxDQUFDVixLQUFLLElBQUk7UUFDZCxJQUNFQSxLQUFLLElBQ0xBLEtBQUssQ0FBQ0YsUUFBUSxJQUNkRSxLQUFLLENBQUNGLFFBQVEsQ0FBQ08sSUFBSSxDQUNqQk0sU0FBUyxJQUFJLE9BQU9BLFNBQVMsQ0FBQ1gsS0FBSyxLQUFLLFFBQVEsSUFBSVcsU0FBUyxDQUFDWCxLQUFLLENBQUNDLElBQUksS0FBSyxHQUMvRSxDQUFDLElBQ0RmLGtCQUFrQixHQUFHLENBQUMsRUFDdEI7VUFDQSxPQUFPRCxLQUFLLENBQUNDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN0QztRQUNBLE1BQU1jLEtBQUs7TUFDYixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDSixDQUFDO0VBQ0QsT0FBT2YsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUVBMkIsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZjVGLFNBQVM7RUFDVFM7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
package/lib/cache.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.AppCache = void 0;
7
+ var _InMemoryCache = require("./Adapters/Cache/InMemoryCache");
8
+ var AppCache = exports.AppCache = new _InMemoryCache.InMemoryCache({
9
+ ttl: NaN
10
+ });
11
+ var _default = exports.default = AppCache;
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSW5NZW1vcnlDYWNoZSIsInJlcXVpcmUiLCJBcHBDYWNoZSIsImV4cG9ydHMiLCJJbk1lbW9yeUNhY2hlIiwidHRsIiwiTmFOIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2NhY2hlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluTWVtb3J5Q2FjaGUgfSBmcm9tICcuL0FkYXB0ZXJzL0NhY2hlL0luTWVtb3J5Q2FjaGUnO1xuXG5leHBvcnQgdmFyIEFwcENhY2hlID0gbmV3IEluTWVtb3J5Q2FjaGUoeyB0dGw6IE5hTiB9KTtcbmV4cG9ydCBkZWZhdWx0IEFwcENhY2hlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxjQUFBLEdBQUFDLE9BQUE7QUFFTyxJQUFJQyxRQUFRLEdBQUFDLE9BQUEsQ0FBQUQsUUFBQSxHQUFHLElBQUlFLDRCQUFhLENBQUM7RUFBRUMsR0FBRyxFQUFFQztBQUFJLENBQUMsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FBQUosT0FBQSxDQUFBSyxPQUFBLEdBQ3ZDTixRQUFRIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const LiveQueryServerOptions = require('../../Options/Definitions').LiveQueryServerOptions;
8
+ var _default = exports.default = LiveQueryServerOptions;
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMaXZlUXVlcnlTZXJ2ZXJPcHRpb25zIiwicmVxdWlyZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2RlZmluaXRpb25zL3BhcnNlLWxpdmUtcXVlcnktc2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExpdmVRdWVyeVNlcnZlck9wdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9PcHRpb25zL0RlZmluaXRpb25zJykuTGl2ZVF1ZXJ5U2VydmVyT3B0aW9ucztcbmV4cG9ydCBkZWZhdWx0IExpdmVRdWVyeVNlcnZlck9wdGlvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLHNCQUFzQixHQUFHQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQ0Qsc0JBQXNCO0FBQUMsSUFBQUUsUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FDNUVKLHNCQUFzQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const ParseServerDefinitions = require('../../Options/Definitions').ParseServerOptions;
8
+ var _default = exports.default = ParseServerDefinitions;
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZVNlcnZlckRlZmluaXRpb25zIiwicmVxdWlyZSIsIlBhcnNlU2VydmVyT3B0aW9ucyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2RlZmluaXRpb25zL3BhcnNlLXNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBQYXJzZVNlcnZlckRlZmluaXRpb25zID0gcmVxdWlyZSgnLi4vLi4vT3B0aW9ucy9EZWZpbml0aW9ucycpLlBhcnNlU2VydmVyT3B0aW9ucztcbmV4cG9ydCBkZWZhdWx0IFBhcnNlU2VydmVyRGVmaW5pdGlvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLHNCQUFzQixHQUFHQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQ0Msa0JBQWtCO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FDeEVMLHNCQUFzQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _parseLiveQueryServer = _interopRequireDefault(require("./definitions/parse-live-query-server"));
4
+ var _runner = _interopRequireDefault(require("./utils/runner"));
5
+ var _index = require("../index");
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ (0, _runner.default)({
8
+ definitions: _parseLiveQueryServer.default,
9
+ start: function (program, options, logOptions) {
10
+ logOptions();
11
+ _index.ParseServer.createLiveQueryServer(undefined, options);
12
+ }
13
+ });
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGFyc2VMaXZlUXVlcnlTZXJ2ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ydW5uZXIiLCJfaW5kZXgiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJydW5uZXIiLCJkZWZpbml0aW9ucyIsInN0YXJ0IiwicHJvZ3JhbSIsIm9wdGlvbnMiLCJsb2dPcHRpb25zIiwiUGFyc2VTZXJ2ZXIiLCJjcmVhdGVMaXZlUXVlcnlTZXJ2ZXIiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3BhcnNlLWxpdmUtcXVlcnktc2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZpbml0aW9ucyBmcm9tICcuL2RlZmluaXRpb25zL3BhcnNlLWxpdmUtcXVlcnktc2VydmVyJztcbmltcG9ydCBydW5uZXIgZnJvbSAnLi91dGlscy9ydW5uZXInO1xuaW1wb3J0IHsgUGFyc2VTZXJ2ZXIgfSBmcm9tICcuLi9pbmRleCc7XG5cbnJ1bm5lcih7XG4gIGRlZmluaXRpb25zLFxuICBzdGFydDogZnVuY3Rpb24gKHByb2dyYW0sIG9wdGlvbnMsIGxvZ09wdGlvbnMpIHtcbiAgICBsb2dPcHRpb25zKCk7XG4gICAgUGFyc2VTZXJ2ZXIuY3JlYXRlTGl2ZVF1ZXJ5U2VydmVyKHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gIH0sXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxxQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQXVDLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXZDLElBQUFHLGVBQU0sRUFBQztFQUNMQyxXQUFXLEVBQVhBLDZCQUFXO0VBQ1hDLEtBQUssRUFBRSxTQUFBQSxDQUFVQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFO0lBQzdDQSxVQUFVLENBQUMsQ0FBQztJQUNaQyxrQkFBVyxDQUFDQyxxQkFBcUIsQ0FBQ0MsU0FBUyxFQUFFSixPQUFPLENBQUM7RUFDdkQ7QUFDRixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _index = _interopRequireDefault(require("../index"));
4
+ var _parseServer = _interopRequireDefault(require("./definitions/parse-server"));
5
+ var _cluster = _interopRequireDefault(require("cluster"));
6
+ var _os = _interopRequireDefault(require("os"));
7
+ var _runner = _interopRequireDefault(require("./utils/runner"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /* eslint-disable no-console */
10
+
11
+ const help = function () {
12
+ console.log(' Get Started guide:');
13
+ console.log('');
14
+ console.log(' Please have a look at the get started guide!');
15
+ console.log(' http://docs.parseplatform.org/parse-server/guide/');
16
+ console.log('');
17
+ console.log('');
18
+ console.log(' Usage with npm start');
19
+ console.log('');
20
+ console.log(' $ npm start -- path/to/config.json');
21
+ console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
22
+ console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
23
+ console.log('');
24
+ console.log('');
25
+ console.log(' Usage:');
26
+ console.log('');
27
+ console.log(' $ parse-server path/to/config.json');
28
+ console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
29
+ console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
30
+ console.log('');
31
+ };
32
+ (0, _runner.default)({
33
+ definitions: _parseServer.default,
34
+ help,
35
+ usage: '[options] <path/to/configuration.json>',
36
+ start: function (program, options, logOptions) {
37
+ if (!options.appId || !options.masterKey) {
38
+ program.outputHelp();
39
+ console.error('');
40
+ console.error('\u001b[31mERROR: appId and masterKey are required\u001b[0m');
41
+ console.error('');
42
+ process.exit(1);
43
+ }
44
+ if (options['liveQuery.classNames']) {
45
+ options.liveQuery = options.liveQuery || {};
46
+ options.liveQuery.classNames = options['liveQuery.classNames'];
47
+ delete options['liveQuery.classNames'];
48
+ }
49
+ if (options['liveQuery.redisURL']) {
50
+ options.liveQuery = options.liveQuery || {};
51
+ options.liveQuery.redisURL = options['liveQuery.redisURL'];
52
+ delete options['liveQuery.redisURL'];
53
+ }
54
+ if (options['liveQuery.redisOptions']) {
55
+ options.liveQuery = options.liveQuery || {};
56
+ options.liveQuery.redisOptions = options['liveQuery.redisOptions'];
57
+ delete options['liveQuery.redisOptions'];
58
+ }
59
+ if (options.cluster) {
60
+ const numCPUs = typeof options.cluster === 'number' ? options.cluster : _os.default.cpus().length;
61
+ if (_cluster.default.isMaster) {
62
+ logOptions();
63
+ for (let i = 0; i < numCPUs; i++) {
64
+ _cluster.default.fork();
65
+ }
66
+ _cluster.default.on('exit', (worker, code) => {
67
+ console.log(`worker ${worker.process.pid} died (${code})... Restarting`);
68
+ _cluster.default.fork();
69
+ });
70
+ } else {
71
+ _index.default.startApp(options).then(() => {
72
+ printSuccessMessage();
73
+ }).catch(e => {
74
+ console.error(e);
75
+ process.exit(1);
76
+ });
77
+ }
78
+ } else {
79
+ _index.default.startApp(options).then(() => {
80
+ logOptions();
81
+ console.log('');
82
+ printSuccessMessage();
83
+ }).catch(e => {
84
+ console.error(e);
85
+ process.exit(1);
86
+ });
87
+ }
88
+ function printSuccessMessage() {
89
+ console.log('[' + process.pid + '] parse-server running on ' + options.serverURL);
90
+ if (options.mountGraphQL) {
91
+ console.log('[' + process.pid + '] GraphQL running on http://localhost:' + options.port + options.graphQLPath);
92
+ }
93
+ if (options.mountPlayground) {
94
+ console.log('[' + process.pid + '] Playground running on http://localhost:' + options.port + options.playgroundPath);
95
+ }
96
+ }
97
+ }
98
+ });
99
+
100
+ /* eslint-enable no-console */
101
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXJzZVNlcnZlciIsIl9jbHVzdGVyIiwiX29zIiwiX3J1bm5lciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhlbHAiLCJjb25zb2xlIiwibG9nIiwicnVubmVyIiwiZGVmaW5pdGlvbnMiLCJ1c2FnZSIsInN0YXJ0IiwicHJvZ3JhbSIsIm9wdGlvbnMiLCJsb2dPcHRpb25zIiwiYXBwSWQiLCJtYXN0ZXJLZXkiLCJvdXRwdXRIZWxwIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImxpdmVRdWVyeSIsImNsYXNzTmFtZXMiLCJyZWRpc1VSTCIsInJlZGlzT3B0aW9ucyIsImNsdXN0ZXIiLCJudW1DUFVzIiwib3MiLCJjcHVzIiwibGVuZ3RoIiwiaXNNYXN0ZXIiLCJpIiwiZm9yayIsIm9uIiwid29ya2VyIiwiY29kZSIsInBpZCIsIlBhcnNlU2VydmVyIiwic3RhcnRBcHAiLCJ0aGVuIiwicHJpbnRTdWNjZXNzTWVzc2FnZSIsImNhdGNoIiwic2VydmVyVVJMIiwibW91bnRHcmFwaFFMIiwicG9ydCIsImdyYXBoUUxQYXRoIiwibW91bnRQbGF5Z3JvdW5kIiwicGxheWdyb3VuZFBhdGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3BhcnNlLXNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgUGFyc2VTZXJ2ZXIgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IGRlZmluaXRpb25zIGZyb20gJy4vZGVmaW5pdGlvbnMvcGFyc2Utc2VydmVyJztcbmltcG9ydCBjbHVzdGVyIGZyb20gJ2NsdXN0ZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBydW5uZXIgZnJvbSAnLi91dGlscy9ydW5uZXInO1xuXG5jb25zdCBoZWxwID0gZnVuY3Rpb24gKCkge1xuICBjb25zb2xlLmxvZygnICBHZXQgU3RhcnRlZCBndWlkZTonKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICAgIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgZ2V0IHN0YXJ0ZWQgZ3VpZGUhJyk7XG4gIGNvbnNvbGUubG9nKCcgICAgaHR0cDovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcGFyc2Utc2VydmVyL2d1aWRlLycpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coJyAgVXNhZ2Ugd2l0aCBucG0gc3RhcnQnKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICAgICQgbnBtIHN0YXJ0IC0tIHBhdGgvdG8vY29uZmlnLmpzb24nKTtcbiAgY29uc29sZS5sb2coJyAgICAkIG5wbSBzdGFydCAtLSAtLWFwcElkIEFQUF9JRCAtLW1hc3RlcktleSBNQVNURVJfS0VZIC0tc2VydmVyVVJMIHNlcnZlclVSTCcpO1xuICBjb25zb2xlLmxvZygnICAgICQgbnBtIHN0YXJ0IC0tIC0tYXBwSWQgQVBQX0lEIC0tbWFzdGVyS2V5IE1BU1RFUl9LRVkgLS1zZXJ2ZXJVUkwgc2VydmVyVVJMJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICBVc2FnZTonKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICAgICQgcGFyc2Utc2VydmVyIHBhdGgvdG8vY29uZmlnLmpzb24nKTtcbiAgY29uc29sZS5sb2coJyAgICAkIHBhcnNlLXNlcnZlciAtLSAtLWFwcElkIEFQUF9JRCAtLW1hc3RlcktleSBNQVNURVJfS0VZIC0tc2VydmVyVVJMIHNlcnZlclVSTCcpO1xuICBjb25zb2xlLmxvZygnICAgICQgcGFyc2Utc2VydmVyIC0tIC0tYXBwSWQgQVBQX0lEIC0tbWFzdGVyS2V5IE1BU1RFUl9LRVkgLS1zZXJ2ZXJVUkwgc2VydmVyVVJMJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbn07XG5cbnJ1bm5lcih7XG4gIGRlZmluaXRpb25zLFxuICBoZWxwLFxuICB1c2FnZTogJ1tvcHRpb25zXSA8cGF0aC90by9jb25maWd1cmF0aW9uLmpzb24+JyxcbiAgc3RhcnQ6IGZ1bmN0aW9uIChwcm9ncmFtLCBvcHRpb25zLCBsb2dPcHRpb25zKSB7XG5cbiAgICBpZiAoIW9wdGlvbnMuYXBwSWQgfHwgIW9wdGlvbnMubWFzdGVyS2V5KSB7XG4gICAgICBwcm9ncmFtLm91dHB1dEhlbHAoKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgY29uc29sZS5lcnJvcignXFx1MDAxYlszMW1FUlJPUjogYXBwSWQgYW5kIG1hc3RlcktleSBhcmUgcmVxdWlyZWRcXHUwMDFiWzBtJyk7XG4gICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uc1snbGl2ZVF1ZXJ5LmNsYXNzTmFtZXMnXSkge1xuICAgICAgb3B0aW9ucy5saXZlUXVlcnkgPSBvcHRpb25zLmxpdmVRdWVyeSB8fCB7fTtcbiAgICAgIG9wdGlvbnMubGl2ZVF1ZXJ5LmNsYXNzTmFtZXMgPSBvcHRpb25zWydsaXZlUXVlcnkuY2xhc3NOYW1lcyddO1xuICAgICAgZGVsZXRlIG9wdGlvbnNbJ2xpdmVRdWVyeS5jbGFzc05hbWVzJ107XG4gICAgfVxuICAgIGlmIChvcHRpb25zWydsaXZlUXVlcnkucmVkaXNVUkwnXSkge1xuICAgICAgb3B0aW9ucy5saXZlUXVlcnkgPSBvcHRpb25zLmxpdmVRdWVyeSB8fCB7fTtcbiAgICAgIG9wdGlvbnMubGl2ZVF1ZXJ5LnJlZGlzVVJMID0gb3B0aW9uc1snbGl2ZVF1ZXJ5LnJlZGlzVVJMJ107XG4gICAgICBkZWxldGUgb3B0aW9uc1snbGl2ZVF1ZXJ5LnJlZGlzVVJMJ107XG4gICAgfVxuICAgIGlmIChvcHRpb25zWydsaXZlUXVlcnkucmVkaXNPcHRpb25zJ10pIHtcbiAgICAgIG9wdGlvbnMubGl2ZVF1ZXJ5ID0gb3B0aW9ucy5saXZlUXVlcnkgfHwge307XG4gICAgICBvcHRpb25zLmxpdmVRdWVyeS5yZWRpc09wdGlvbnMgPSBvcHRpb25zWydsaXZlUXVlcnkucmVkaXNPcHRpb25zJ107XG4gICAgICBkZWxldGUgb3B0aW9uc1snbGl2ZVF1ZXJ5LnJlZGlzT3B0aW9ucyddO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXIpIHtcbiAgICAgIGNvbnN0IG51bUNQVXMgPSB0eXBlb2Ygb3B0aW9ucy5jbHVzdGVyID09PSAnbnVtYmVyJyA/IG9wdGlvbnMuY2x1c3RlciA6IG9zLmNwdXMoKS5sZW5ndGg7XG4gICAgICBpZiAoY2x1c3Rlci5pc01hc3Rlcikge1xuICAgICAgICBsb2dPcHRpb25zKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ1BVczsgaSsrKSB7XG4gICAgICAgICAgY2x1c3Rlci5mb3JrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2x1c3Rlci5vbignZXhpdCcsICh3b3JrZXIsIGNvZGUpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgd29ya2VyICR7d29ya2VyLnByb2Nlc3MucGlkfSBkaWVkICgke2NvZGV9KS4uLiBSZXN0YXJ0aW5nYCk7XG4gICAgICAgICAgY2x1c3Rlci5mb3JrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUGFyc2VTZXJ2ZXIuc3RhcnRBcHAob3B0aW9ucylcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBQYXJzZVNlcnZlci5zdGFydEFwcChvcHRpb25zKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgbG9nT3B0aW9ucygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJpbnRTdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbJyArIHByb2Nlc3MucGlkICsgJ10gcGFyc2Utc2VydmVyIHJ1bm5pbmcgb24gJyArIG9wdGlvbnMuc2VydmVyVVJMKTtcbiAgICAgIGlmIChvcHRpb25zLm1vdW50R3JhcGhRTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnWycgK1xuICAgICAgICAgICAgcHJvY2Vzcy5waWQgK1xuICAgICAgICAgICAgJ10gR3JhcGhRTCBydW5uaW5nIG9uIGh0dHA6Ly9sb2NhbGhvc3Q6JyArXG4gICAgICAgICAgICBvcHRpb25zLnBvcnQgK1xuICAgICAgICAgICAgb3B0aW9ucy5ncmFwaFFMUGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubW91bnRQbGF5Z3JvdW5kKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdbJyArXG4gICAgICAgICAgICBwcm9jZXNzLnBpZCArXG4gICAgICAgICAgICAnXSBQbGF5Z3JvdW5kIHJ1bm5pbmcgb24gaHR0cDovL2xvY2FsaG9zdDonICtcbiAgICAgICAgICAgIG9wdGlvbnMucG9ydCArXG4gICAgICAgICAgICBvcHRpb25zLnBsYXlncm91bmRQYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuIl0sIm1hcHBpbmdz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
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _commander = require("commander");
8
+ var _path = _interopRequireDefault(require("path"));
9
+ var _Deprecator = _interopRequireDefault(require("../../Deprecator/Deprecator"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /* eslint-disable no-console */
12
+
13
+ let _definitions;
14
+ let _reverseDefinitions;
15
+ let _defaults;
16
+ _commander.Command.prototype.loadDefinitions = function (definitions) {
17
+ _definitions = definitions;
18
+ Object.keys(definitions).reduce((program, opt) => {
19
+ if (typeof definitions[opt] == 'object') {
20
+ const additionalOptions = definitions[opt];
21
+ if (additionalOptions.required === true) {
22
+ return program.option(`--${opt} <${opt}>`, additionalOptions.help, additionalOptions.action);
23
+ } else {
24
+ return program.option(`--${opt} [${opt}]`, additionalOptions.help, additionalOptions.action);
25
+ }
26
+ }
27
+ return program.option(`--${opt} [${opt}]`);
28
+ }, this);
29
+ _reverseDefinitions = Object.keys(definitions).reduce((object, key) => {
30
+ let value = definitions[key];
31
+ if (typeof value == 'object') {
32
+ value = value.env;
33
+ }
34
+ if (value) {
35
+ object[value] = key;
36
+ }
37
+ return object;
38
+ }, {});
39
+ _defaults = Object.keys(definitions).reduce((defs, opt) => {
40
+ if (_definitions[opt].default !== undefined) {
41
+ defs[opt] = _definitions[opt].default;
42
+ }
43
+ return defs;
44
+ }, {});
45
+
46
+ /* istanbul ignore next */
47
+ this.on('--help', function () {
48
+ console.log(' Configure From Environment:');
49
+ console.log('');
50
+ Object.keys(_reverseDefinitions).forEach(key => {
51
+ console.log(` $ ${key}='${_reverseDefinitions[key]}'`);
52
+ });
53
+ console.log('');
54
+ });
55
+ };
56
+ function parseEnvironment(env = {}) {
57
+ return Object.keys(_reverseDefinitions).reduce((options, key) => {
58
+ if (env[key]) {
59
+ const originalKey = _reverseDefinitions[key];
60
+ let action = option => option;
61
+ if (typeof _definitions[originalKey] === 'object') {
62
+ action = _definitions[originalKey].action || action;
63
+ }
64
+ options[_reverseDefinitions[key]] = action(env[key]);
65
+ }
66
+ return options;
67
+ }, {});
68
+ }
69
+ function parseConfigFile(program) {
70
+ let options = {};
71
+ if (program.args.length > 0) {
72
+ let jsonPath = program.args[0];
73
+ jsonPath = _path.default.resolve(jsonPath);
74
+ const jsonConfig = require(jsonPath);
75
+ if (jsonConfig.apps) {
76
+ if (jsonConfig.apps.length > 1) {
77
+ throw 'Multiple apps are not supported';
78
+ }
79
+ options = jsonConfig.apps[0];
80
+ } else {
81
+ options = jsonConfig;
82
+ }
83
+ Object.keys(options).forEach(key => {
84
+ const value = options[key];
85
+ if (!_definitions[key]) {
86
+ throw `error: unknown option ${key}`;
87
+ }
88
+ const action = _definitions[key].action;
89
+ if (action) {
90
+ options[key] = action(value);
91
+ }
92
+ });
93
+ console.log(`Configuration loaded from ${jsonPath}`);
94
+ }
95
+ return options;
96
+ }
97
+ _commander.Command.prototype.setValuesIfNeeded = function (options) {
98
+ Object.keys(options).forEach(key => {
99
+ if (!Object.prototype.hasOwnProperty.call(this, key)) {
100
+ this[key] = options[key];
101
+ }
102
+ });
103
+ };
104
+ _commander.Command.prototype._parse = _commander.Command.prototype.parse;
105
+ _commander.Command.prototype.parse = function (args, env) {
106
+ this._parse(args);
107
+ // Parse the environment first
108
+ const envOptions = parseEnvironment(env);
109
+ const fromFile = parseConfigFile(this);
110
+ // Load the env if not passed from command line
111
+ this.setValuesIfNeeded(envOptions);
112
+ // Load from file to override
113
+ this.setValuesIfNeeded(fromFile);
114
+ // Scan for deprecated Parse Server options
115
+ _Deprecator.default.scanParseServerOptions(this);
116
+ // Last set the defaults
117
+ this.setValuesIfNeeded(_defaults);
118
+ };
119
+ _commander.Command.prototype.getOptions = function () {
120
+ return Object.keys(_definitions).reduce((options, key) => {
121
+ if (typeof this[key] !== 'undefined') {
122
+ options[key] = this[key];
123
+ }
124
+ return options;
125
+ }, {});
126
+ };
127
+ const commander = new _commander.Command();
128
+ commander.storeOptionsAsProperties();
129
+ commander.allowExcessArguments();
130
+ var _default = exports.default = commander;
131
+ /* eslint-enable no-console */
132
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZGVyIiwicmVxdWlyZSIsIl9wYXRoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9EZXByZWNhdG9yIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2RlZmluaXRpb25zIiwiX3JldmVyc2VEZWZpbml0aW9ucyIsIl9kZWZhdWx0cyIsIkNvbW1hbmQiLCJwcm90b3R5cGUiLCJsb2FkRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJwcm9ncmFtIiwib3B0IiwiYWRkaXRpb25hbE9wdGlvbnMiLCJyZXF1aXJlZCIsIm9wdGlvbiIsImhlbHAiLCJhY3Rpb24iLCJvYmplY3QiLCJrZXkiLCJ2YWx1ZSIsImVudiIsImRlZnMiLCJ1bmRlZmluZWQiLCJvbiIsImNvbnNvbGUiLCJsb2ciLCJmb3JFYWNoIiwicGFyc2VFbnZpcm9ubWVudCIsIm9wdGlvbnMiLCJvcmlnaW5hbEtleSIsInBhcnNlQ29uZmlnRmlsZSIsImFyZ3MiLCJsZW5ndGgiLCJqc29uUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwianNvbkNvbmZpZyIsImFwcHMiLCJzZXRWYWx1ZXNJZk5lZWRlZCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9wYXJzZSIsInBhcnNlIiwiZW52T3B0aW9ucyIsImZyb21GaWxlIiwiRGVwcmVjYXRvciIsInNjYW5QYXJzZVNlcnZlck9wdGlvbnMiLCJnZXRPcHRpb25zIiwiY29tbWFuZGVyIiwic3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL3V0aWxzL2NvbW1hbmRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IERlcHJlY2F0b3IgZnJvbSAnLi4vLi4vRGVwcmVjYXRvci9EZXByZWNhdG9yJztcblxubGV0IF9kZWZpbml0aW9ucztcbmxldCBfcmV2ZXJzZURlZmluaXRpb25zO1xubGV0IF9kZWZhdWx0cztcblxuQ29tbWFuZC5wcm90b3R5cGUubG9hZERlZmluaXRpb25zID0gZnVuY3Rpb24gKGRlZmluaXRpb25zKSB7XG4gIF9kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zO1xuXG4gIE9iamVjdC5rZXlzKGRlZmluaXRpb25zKS5yZWR1Y2UoKHByb2dyYW0sIG9wdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbnNbb3B0XSA9PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgYWRkaXRpb25hbE9wdGlvbnMgPSBkZWZpbml0aW9uc1tvcHRdO1xuICAgICAgaWYgKGFkZGl0aW9uYWxPcHRpb25zLnJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBwcm9ncmFtLm9wdGlvbihcbiAgICAgICAgICBgLS0ke29wdH0gPCR7b3B0fT5gLFxuICAgICAgICAgIGFkZGl0aW9uYWxPcHRpb25zLmhlbHAsXG4gICAgICAgICAgYWRkaXRpb25hbE9wdGlvbnMuYWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJvZ3JhbS5vcHRpb24oXG4gICAgICAgICAgYC0tJHtvcHR9IFske29wdH1dYCxcbiAgICAgICAgICBhZGRpdGlvbmFsT3B0aW9ucy5oZWxwLFxuICAgICAgICAgIGFkZGl0aW9uYWxPcHRpb25zLmFjdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvZ3JhbS5vcHRpb24oYC0tJHtvcHR9IFske29wdH1dYCk7XG4gIH0sIHRoaXMpO1xuXG4gIF9yZXZlcnNlRGVmaW5pdGlvbnMgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9ucykucmVkdWNlKChvYmplY3QsIGtleSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGRlZmluaXRpb25zW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5lbnY7XG4gICAgfVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgb2JqZWN0W3ZhbHVlXSA9IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSwge30pO1xuXG4gIF9kZWZhdWx0cyA9IE9iamVjdC5rZXlzKGRlZmluaXRpb25zKS5yZWR1Y2UoKGRlZnMsIG9wdCkgPT4ge1xuICAgIGlmIChfZGVmaW5pdGlvbnNbb3B0XS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZnNbb3B0XSA9IF9kZWZpbml0aW9uc1tvcHRdLmRlZmF1bHQ7XG4gICAgfVxuICAgIHJldHVybiBkZWZzO1xuICB9LCB7fSk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhpcy5vbignLS1oZWxwJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnNvbGUubG9nKCcgIENvbmZpZ3VyZSBGcm9tIEVudmlyb25tZW50OicpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICBPYmplY3Qua2V5cyhfcmV2ZXJzZURlZmluaXRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgICQgJHtrZXl9PScke19yZXZlcnNlRGVmaW5pdGlvbnNba2V5XX0nYCk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlRW52aXJvbm1lbnQoZW52ID0ge30pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKF9yZXZlcnNlRGVmaW5pdGlvbnMpLnJlZHVjZSgob3B0aW9ucywga2V5KSA9PiB7XG4gICAgaWYgKGVudltrZXldKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEtleSA9IF9yZXZlcnNlRGVmaW5pdGlvbnNba2V5XTtcbiAgICAgIGxldCBhY3Rpb24gPSBvcHRpb24gPT4gb3B0aW9uO1xuICAgICAgaWYgKHR5cGVvZiBfZGVmaW5pdGlvbnNbb3JpZ2luYWxLZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhY3Rpb24gPSBfZGVmaW5pdGlvbnNbb3JpZ2luYWxLZXldLmFjdGlvbiB8fCBhY3Rpb247XG4gICAgICB9XG4gICAgICBvcHRpb25zW19yZXZlcnNlRGVmaW5pdGlvbnNba2V5XV0gPSBhY3Rpb24oZW52W2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbmZpZ0ZpbGUocHJvZ3JhbSkge1xuICBsZXQgb3B0aW9ucyA9IHt9O1xuICBpZiAocHJvZ3JhbS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICBsZXQganNvblBhdGggPSBwcm9ncmFtLmFyZ3NbMF07XG4gICAganNvblBhdGggPSBwYXRoLnJlc29sdmUoanNvblBhdGgpO1xuICAgIGNvbnN0IGpzb25Db25maWcgPSByZXF1aXJlKGpzb25QYXRoKTtcbiAgICBpZiAoanNvbkNvbmZpZy5hcHBzKSB7XG4gICAgICBpZiAoanNvbkNvbmZpZy5hcHBzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgJ011bHRpcGxlIGFwcHMgYXJlIG5vdCBzdXBwb3J0ZWQnO1xuICAgICAgfVxuICAgICAgb3B0aW9ucyA9IGpzb25Db25maWcuYXBwc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGpzb25Db25maWc7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1trZXldO1xuICAgICAgaWYgKCFfZGVmaW5pdGlvbnNba2V5XSkge1xuICAgICAgICB0aHJvdyBgZXJyb3I6IHVua25vd24gb3B0aW9uICR7a2V5fWA7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBfZGVmaW5pdGlvbnNba2V5XS5hY3Rpb247XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IGFjdGlvbih2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYENvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gJHtqc29uUGF0aH1gKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuQ29tbWFuZC5wcm90b3R5cGUuc2V0VmFsdWVzSWZOZWVkZWQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywga2V5KSkge1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Db21tYW5kLnByb3RvdHlwZS5fcGFyc2UgPSBDb21tYW5kLnByb3RvdHlwZS5wYXJzZTtcblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoYXJncywgZW52KSB7XG4gIHRoaXMuX3BhcnNlKGFyZ3MpO1xuICAvLyBQYXJzZSB0aGUgZW52aXJvbm1lbnQgZmlyc3RcbiAgY29uc3QgZW52T3B0aW9ucyA9IHBhcnNlRW52aXJvbm1lbnQoZW52KTtcbiAgY29uc3QgZnJvbUZpbGUgPSBwYXJzZUNvbmZpZ0ZpbGUodGhpcyk7XG4gIC8vIExvYWQgdGhlIGVudiBpZiBub3QgcGFzc2VkIGZyb20gY29tbWFuZCBsaW5lXG4gIHRoaXMuc2V0VmFsdWVzSWZOZWVkZWQoZW52T3B0aW9ucyk7XG4gIC8vIExvYWQgZnJvbSBmaWxlIHRvIG92ZXJyaWRlXG4gIHRoaXMuc2V0VmFsdWVzSWZOZWVkZWQoZnJvbUZpbGUpO1xuICAvLyBTY2FuIGZvciBkZXByZWNhdGVkIFBhcnNlIFNlcnZlciBvcHRpb25zXG4gIERlcHJlY2F0b3Iuc2NhblBhcnNlU2VydmVyT3B0aW9ucyh0aGlzKTtcbiAgLy8gTGFzdCBzZXQgdGhlIGRlZmF1bHRzXG4gIHRoaXMuc2V0VmFsdWVzSWZOZWVkZWQoX2RlZmF1bHRzKTtcbn07XG5cbkNvbW1hbmQucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhfZGVmaW5pdGlvbnMpLnJlZHVjZSgob3B0aW9ucywga2V5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zW2tleV0gPSB0aGlzW2tleV07XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9LCB7fSk7XG59O1xuXG5jb25zdCBjb21tYW5kZXIgPSBuZXcgQ29tbWFuZCgpXG5jb21tYW5kZXIuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCk7XG5jb21tYW5kZXIuYWxsb3dFeGNlc3NBcmd1bWVudHMoKTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRlcjtcbi8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFBcUQsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFIckQ7O0FBS0EsSUFBSUcsWUFBWTtBQUNoQixJQUFJQyxtQkFBbUI7QUFDdkIsSUFBSUMsU0FBUztBQUViQyxrQkFBTyxDQUFDQyxTQUFTLENBQUNDLGVBQWUsR0FBRyxVQUFVQyxXQUFXLEVBQUU7RUFDekROLFlBQVksR0FBR00sV0FBVztFQUUxQkMsTUFBTSxDQUFDQyxJQUFJLENBQUNGLFdBQVcsQ0FBQyxDQUFDRyxNQUFNLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxHQUFHLEtBQUs7SUFDaEQsSUFBSSxPQUFPTCxXQUFXLENBQUNL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
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ var _commander = _interopRequireDefault(require("./commander"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function logStartupOptions(options) {
10
+ if (!options.verbose) {
11
+ return;
12
+ }
13
+ // Keys that may include sensitive information that will be redacted in logs
14
+ const keysToRedact = ['databaseAdapter', 'databaseURI', 'masterKey', 'maintenanceKey', 'push'];
15
+ for (const key in options) {
16
+ let value = options[key];
17
+ if (keysToRedact.includes(key)) {
18
+ value = '<REDACTED>';
19
+ }
20
+ if (typeof value === 'object') {
21
+ try {
22
+ value = JSON.stringify(value);
23
+ } catch {
24
+ if (value && value.constructor && value.constructor.name) {
25
+ value = value.constructor.name;
26
+ }
27
+ }
28
+ }
29
+ /* eslint-disable no-console */
30
+ console.log(`${key}: ${value}`);
31
+ /* eslint-enable no-console */
32
+ }
33
+ }
34
+ function _default({
35
+ definitions,
36
+ help,
37
+ usage,
38
+ start
39
+ }) {
40
+ _commander.default.loadDefinitions(definitions);
41
+ if (usage) {
42
+ _commander.default.usage(usage);
43
+ }
44
+ if (help) {
45
+ _commander.default.on('--help', help);
46
+ }
47
+ _commander.default.parse(process.argv, process.env);
48
+ const options = _commander.default.getOptions();
49
+ start(_commander.default, options, function () {
50
+ logStartupOptions(options);
51
+ });
52
+ }
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJsb2dTdGFydHVwT3B0aW9ucyIsIm9wdGlvbnMiLCJ2ZXJib3NlIiwia2V5c1RvUmVkYWN0Iiwia2V5IiwidmFsdWUiLCJpbmNsdWRlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJjb25zb2xlIiwibG9nIiwiX2RlZmF1bHQiLCJkZWZpbml0aW9ucyIsImhlbHAiLCJ1c2FnZSIsInN0YXJ0IiwicHJvZ3JhbSIsImxvYWREZWZpbml0aW9ucyIsIm9uIiwicGFyc2UiLCJwcm9jZXNzIiwiYXJndiIsImVudiIsImdldE9wdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL3V0aWxzL3J1bm5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcHJvZ3JhbSBmcm9tICcuL2NvbW1hbmRlcic7XG5cbmZ1bmN0aW9uIGxvZ1N0YXJ0dXBPcHRpb25zKG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zLnZlcmJvc2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gS2V5cyB0aGF0IG1heSBpbmNsdWRlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgcmVkYWN0ZWQgaW4gbG9nc1xuICBjb25zdCBrZXlzVG9SZWRhY3QgPSBbXG4gICAgJ2RhdGFiYXNlQWRhcHRlcicsXG4gICAgJ2RhdGFiYXNlVVJJJyxcbiAgICAnbWFzdGVyS2V5JyxcbiAgICAnbWFpbnRlbmFuY2VLZXknLFxuICAgICdwdXNoJyxcbiAgXTtcbiAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgIGxldCB2YWx1ZSA9IG9wdGlvbnNba2V5XTtcbiAgICBpZiAoa2V5c1RvUmVkYWN0LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHZhbHVlID0gJzxSRURBQ1RFRD4nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICAgIGNvbnNvbGUubG9nKGAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHsgZGVmaW5pdGlvbnMsIGhlbHAsIHVzYWdlLCBzdGFydCB9KSB7XG4gIHByb2dyYW0ubG9hZERlZmluaXRpb25zKGRlZmluaXRpb25zKTtcbiAgaWYgKHVzYWdlKSB7XG4gICAgcHJvZ3JhbS51c2FnZSh1c2FnZSk7XG4gIH1cbiAgaWYgKGhlbHApIHtcbiAgICBwcm9ncmFtLm9uKCctLWhlbHAnLCBoZWxwKTtcbiAgfVxuICBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndiwgcHJvY2Vzcy5lbnYpO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSBwcm9ncmFtLmdldE9wdGlvbnMoKTtcbiAgc3RhcnQocHJvZ3JhbSwgb3B0aW9ucywgZnVuY3Rpb24gKCkge1xuICAgIGxvZ1N0YXJ0dXBPcHRpb25zKG9wdGlvbnMpO1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQWtDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRWxDLFNBQVNHLGlCQUFpQkEsQ0FBQ0MsT0FBTyxFQUFFO0VBQ2xDLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxPQUFPLEVBQUU7SUFDcEI7RUFDRjtFQUNBO0VBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQ25CLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixNQUFNLENBQ1A7RUFDRCxLQUFLLE1BQU1DLEdBQUcsSUFBSUgsT0FBTyxFQUFFO0lBQ3pCLElBQUlJLEtBQUssR0FBR0osT0FBTyxDQUFDRyxHQUFHLENBQUM7SUFDeEIsSUFBSUQsWUFBWSxDQUFDRyxRQUFRLENBQUNGLEdBQUcsQ0FBQyxFQUFFO01BQzlCQyxLQUFLLEdBQUcsWUFBWTtJQUN0QjtJQUNBLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUM3QixJQUFJO1FBQ0ZBLEtBQUssR0FBR0UsSUFBSSxDQUFDQyxTQUFTLENBQUNILEtBQUssQ0FBQztNQUMvQixDQUFDLENBQUMsTUFBTTtRQUNOLElBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDSSxXQUFXLElBQUlKLEtBQUssQ0FBQ0ksV0FBVyxDQUFDQyxJQUFJLEVBQUU7VUFDeERMLEtBQUssR0FBR0EsS0FBSyxDQUFDSSxXQUFXLENBQUNDLElBQUk7UUFDaEM7TUFDRjtJQUNGO0lBQ0E7SUFDQUMsT0FBTyxDQUFDQyxHQUFHLENBQUMsR0FBR1IsR0FBRyxLQUFLQyxLQUFLLEVBQUUsQ0FBQztJQUMvQjtFQUNGO0FBQ0Y7QUFFZSxTQUFBUSxTQUFVO0VBQUVDLFdBQVc7RUFBRUMsSUFBSTtFQUFFQyxLQUFLO0VBQUVDO0FBQU0sQ0FBQyxFQUFFO0VBQzVEQyxrQkFBTyxDQUFDQyxlQUFlLENBQUNMLFdBQVcsQ0FBQztFQUNwQyxJQUFJRSxLQUFLLEVBQUU7SUFDVEUsa0JBQU8sQ0FBQ0YsS0FBSyxDQUFDQSxLQUFLLENBQUM7RUFDdEI7RUFDQSxJQUFJRCxJQUFJLEVBQUU7SUFDUkcsa0JBQU8sQ0FBQ0UsRUFBRSxDQUFDLFFBQVEsRUFBRUwsSUFBSSxDQUFDO0VBQzVCO0VBQ0FHLGtCQUFPLENBQUNHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDQyxJQUFJLEVBQUVELE9BQU8sQ0FBQ0UsR0FBRyxDQUFDO0VBRXhDLE1BQU12QixPQUFPLEdBQUdpQixrQkFBTyxDQUFDTyxVQUFVLENBQUMsQ0FBQztFQUNwQ1IsS0FBSyxDQUFDQyxrQkFBTyxFQUFFakIsT0FBTyxFQUFFLFlBQVk7SUFDbENELGlCQUFpQixDQUFDQyxPQUFPLENBQUM7RUFDNUIsQ0FBQyxDQUFDO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=