parse-server 9.0.0-alpha.8 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,7 +29,7 @@ The full documentation for Parse Server is available in the [wiki](https://githu
29
29
 
30
30
  ---
31
31
 
32
- A big *thank you* 🙏 to our [sponsors](#sponsors) and [backers](#backers) who support the development of Parse Platform!
32
+ A big _thank you_ 🙏 to our [sponsors](#sponsors) and [backers](#backers) who support the development of Parse Platform!
33
33
 
34
34
  #### Bronze Sponsors
35
35
 
@@ -126,7 +126,7 @@ Before you start make sure you have installed:
126
126
  Parse Server is continuously tested with the most recent releases of Node.js to ensure compatibility. We follow the [Node.js Long Term Support plan](https://github.com/nodejs/Release) and only test against versions that are officially supported and have not reached their end-of-life date.
127
127
 
128
128
  | Version | Minimum Version | End-of-Life | Parse Server Support |
129
- |------------|-----------------|-------------|----------------------|
129
+ | ---------- | --------------- | ----------- | -------------------- |
130
130
  | Node.js 18 | 18.20.4 | April 2025 | <= 8.x (2025) |
131
131
  | Node.js 20 | 20.19.0 | April 2026 | <= 9.x (2026) |
132
132
  | Node.js 22 | 22.12.0 | April 2027 | <= 10.x (2027) |
@@ -137,7 +137,7 @@ Parse Server is continuously tested with the most recent releases of Node.js to
137
137
  Parse Server is continuously tested with the most recent releases of MongoDB to ensure compatibility. We follow the [MongoDB support schedule](https://www.mongodb.com/support-policy) and [MongoDB lifecycle schedule](https://www.mongodb.com/support-policy/lifecycles) and only test against versions that are officially supported and have not reached their end-of-life date. MongoDB "rapid releases" are ignored as these are considered pre-releases of the next major version.
138
138
 
139
139
  | Version | Minimum Version | End-of-Life | Parse Server Support |
140
- |-----------|-----------------|-------------|----------------------|
140
+ | --------- | --------------- | ----------- | -------------------- |
141
141
  | MongoDB 6 | 6.0.19 | July 2025 | <= 8.x (2025) |
142
142
  | MongoDB 7 | 7.0.16 | August 2026 | <= 9.x (2026) |
143
143
  | MongoDB 8 | 8.0.4 | TDB | <= 10.x (2027) |
@@ -147,7 +147,7 @@ Parse Server is continuously tested with the most recent releases of MongoDB to
147
147
  Parse Server is continuously tested with the most recent releases of PostgreSQL and PostGIS to ensure compatibility, using [PostGIS docker images](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&ordering=last_updated). We follow the [PostgreSQL support schedule](https://www.postgresql.org/support/versioning) and [PostGIS support schedule](https://www.postgis.net/eol_policy/) and only test against versions that are officially supported and have not reached their end-of-life date. Due to the extensive PostgreSQL support duration of 5 years, Parse Server drops support about 2 years before the official end-of-life date.
148
148
 
149
149
  | Version | PostGIS Version | End-of-Life | Parse Server Support |
150
- |-------------|-------------------------|---------------|----------------------|
150
+ | ----------- | ----------------------- | ------------- | -------------------- |
151
151
  | Postgres 13 | 3.1, 3.2, 3.3, 3.4, 3.5 | November 2025 | <= 6.x (2023) |
152
152
  | Postgres 14 | 3.5 | November 2026 | <= 7.x (2024) |
153
153
  | Postgres 15 | 3.3, 3.4, 3.5 | November 2027 | <= 8.x (2025) |
@@ -162,8 +162,8 @@ $ npm install -g parse-server mongodb-runner
162
162
  $ mongodb-runner start
163
163
  $ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test
164
164
  ```
165
- ***Note:*** *If installation with* `-g` *fails due to permission problems* (`npm ERR! code 'EACCES'`), *please refer to [this link](https://docs.npmjs.com/getting-started/fixing-npm-permissions).*
166
165
 
166
+ **_Note:_** _If installation with_ `-g` _fails due to permission problems_ (`npm ERR! code 'EACCES'`), _please refer to [this link](https://docs.npmjs.com/getting-started/fixing-npm-permissions)._
167
167
 
168
168
  ### Docker Container
169
169
 
@@ -180,13 +180,13 @@ $ docker run --name my-mongo -d mongo
180
180
  $ docker run --name my-parse-server -v config-vol:/parse-server/config -p 1337:1337 --link my-mongo:mongo -d parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://mongo/test
181
181
  ```
182
182
 
183
- ***Note:*** *If you want to use [Cloud Code](https://docs.parseplatform.org/cloudcode/guide/), add `-v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js` to the command above. Make sure `main.js` is in the `cloud-code-vol` directory before starting Parse Server.*
183
+ **_Note:_** _If you want to use [Cloud Code](https://docs.parseplatform.org/cloudcode/guide/), add `-v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js` to the command above. Make sure `main.js` is in the `cloud-code-vol` directory before starting Parse Server._
184
184
 
185
185
  You can use any arbitrary string as your application id and master key. These will be used by your clients to authenticate with the Parse Server.
186
186
 
187
187
  That's it! You are now running a standalone version of Parse Server on your machine.
188
188
 
189
- **Using a remote MongoDB?** Pass the `--databaseURI DATABASE_URI` parameter when starting `parse-server`. Learn more about configuring Parse Server [here](#configuration). For a full list of available options, run `parse-server --help`.
189
+ **Using a remote MongoDB?** Pass the `--databaseURI DATABASE_URI` parameter when starting `parse-server`. Learn more about configuring Parse Server [here](#configuration). For a full list of available options, run `parse-server --help`.
190
190
 
191
191
  ### Saving and Querying Objects
192
192
 
@@ -204,17 +204,17 @@ Once you have a better understanding of how the project works, please refer to t
204
204
 
205
205
  We have provided a basic [Node.js application](https://github.com/parse-community/parse-server-example) that uses the Parse Server module on Express and can be easily deployed to various infrastructure providers:
206
206
 
207
- * [Heroku and mLab](https://devcenter.heroku.com/articles/deploying-a-parse-server-to-heroku)
208
- * [AWS and Elastic Beanstalk](http://mobile.awsblog.com/post/TxCD57GZLM2JR/How-to-set-up-Parse-Server-on-AWS-using-AWS-Elastic-Beanstalk)
209
- * [Google App Engine](https://medium.com/@justinbeckwith/deploying-parse-server-to-google-app-engine-6bc0b7451d50)
210
- * [Microsoft Azure](https://azure.microsoft.com/en-us/blog/azure-welcomes-parse-developers/)
211
- * [SashiDo](https://blog.sashido.io/tag/migration/)
212
- * [Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-run-parse-server-on-ubuntu-14-04)
213
- * [Pivotal Web Services](https://github.com/cf-platform-eng/pws-parse-server)
214
- * [Back4app](https://www.back4app.com/docs/get-started/welcome)
215
- * [Glitch](https://glitch.com/edit/#!/parse-server)
216
- * [Flynn](https://flynn.io/blog/parse-apps-on-flynn)
217
- * [Elestio](https://elest.io/open-source/parse)
207
+ - [Heroku and mLab](https://devcenter.heroku.com/articles/deploying-a-parse-server-to-heroku)
208
+ - [AWS and Elastic Beanstalk](http://mobile.awsblog.com/post/TxCD57GZLM2JR/How-to-set-up-Parse-Server-on-AWS-using-AWS-Elastic-Beanstalk)
209
+ - [Google App Engine](https://medium.com/@justinbeckwith/deploying-parse-server-to-google-app-engine-6bc0b7451d50)
210
+ - [Microsoft Azure](https://azure.microsoft.com/en-us/blog/azure-welcomes-parse-developers/)
211
+ - [SashiDo](https://blog.sashido.io/tag/migration/)
212
+ - [Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-run-parse-server-on-ubuntu-14-04)
213
+ - [Pivotal Web Services](https://github.com/cf-platform-eng/pws-parse-server)
214
+ - [Back4app](https://www.back4app.com/docs/get-started/welcome)
215
+ - [Glitch](https://glitch.com/edit/#!/parse-server)
216
+ - [Flynn](https://flynn.io/blog/parse-apps-on-flynn)
217
+ - [Elestio](https://elest.io/open-source/parse)
218
218
 
219
219
  ### Parse Server + Express
220
220
 
@@ -231,7 +231,7 @@ const server = new ParseServer({
231
231
  appId: 'myAppId',
232
232
  masterKey: 'myMasterKey', // Keep this key secret!
233
233
  fileKey: 'optionalFileKey',
234
- serverURL: 'http://localhost:1337/parse' // Don't forget to change to https if needed
234
+ serverURL: 'http://localhost:1337/parse', // Don't forget to change to https if needed
235
235
  });
236
236
 
237
237
  // Start server
@@ -240,7 +240,7 @@ await server.start();
240
240
  // Serve the Parse API on the /parse URL prefix
241
241
  app.use('/parse', server.app);
242
242
 
243
- app.listen(1337, function() {
243
+ app.listen(1337, function () {
244
244
  console.log('parse-server-example running on port 1337.');
245
245
  });
246
246
  ```
@@ -262,7 +262,7 @@ The response looks like this:
262
262
  ### Status Values
263
263
 
264
264
  | Value | Description |
265
- |---------------|-----------------------------------------------------------------------------|
265
+ | ------------- | --------------------------------------------------------------------------- |
266
266
  | `initialized` | The server has been created but the `start` method has not been called yet. |
267
267
  | `starting` | The server is starting up. |
268
268
  | `ok` | The server started and is running. |
@@ -276,27 +276,27 @@ For the full list of available options, run `parse-server --help` or take a look
276
276
 
277
277
  ## Basic Options
278
278
 
279
- * `appId` **(required)** - The application id to host with this server instance. You can use any arbitrary string. For migrated apps, this should match your hosted Parse app.
280
- * `masterKey` **(required)** - The master key to use for overriding ACL security. You can use any arbitrary string. Keep it secret! For migrated apps, this should match your hosted Parse app.
281
- * `databaseURI` **(required)** - The connection string for your database, i.e. `mongodb://user:pass@host.com/dbname`. Be sure to [URL encode your password](https://app.zencoder.com/docs/guides/getting-started/special-characters-in-usernames-and-passwords) if your password has special characters.
282
- * `port` - The default port is 1337, specify this parameter to use a different port.
283
- * `serverURL` - URL to your Parse Server (don't forget to specify http:// or https://). This URL will be used when making requests to Parse Server from Cloud Code.
284
- * `cloud` - The absolute path to your cloud code `main.js` file.
285
- * `push` - Configuration options for APNS and GCM push. See the [Push Notifications quick start](https://docs.parseplatform.org/parse-server/guide/#push-notifications-quick-start).
279
+ - `appId` **(required)** - The application id to host with this server instance. You can use any arbitrary string. For migrated apps, this should match your hosted Parse app.
280
+ - `masterKey` **(required)** - The master key to use for overriding ACL security. You can use any arbitrary string. Keep it secret! For migrated apps, this should match your hosted Parse app.
281
+ - `databaseURI` **(required)** - The connection string for your database, i.e. `mongodb://user:pass@host.com/dbname`. Be sure to [URL encode your password](https://app.zencoder.com/docs/guides/getting-started/special-characters-in-usernames-and-passwords) if your password has special characters.
282
+ - `port` - The default port is 1337, specify this parameter to use a different port.
283
+ - `serverURL` - URL to your Parse Server (don't forget to specify http:// or https://). This URL will be used when making requests to Parse Server from Cloud Code.
284
+ - `cloud` - The absolute path to your cloud code `main.js` file.
285
+ - `push` - Configuration options for APNS and FCM push. See the [Push Notifications quick start](https://docs.parseplatform.org/parse-server/guide/#push-notifications-quick-start).
286
286
 
287
287
  ## Client Key Options
288
288
 
289
289
  The client keys used with Parse are no longer necessary with Parse Server. If you wish to still require them, perhaps to be able to refuse access to older clients, you can set the keys at initialization time. Setting any of these keys will require all requests to provide one of the configured keys.
290
290
 
291
- * `clientKey`
292
- * `javascriptKey`
293
- * `restAPIKey`
294
- * `dotNetKey`
291
+ - `clientKey`
292
+ - `javascriptKey`
293
+ - `restAPIKey`
294
+ - `dotNetKey`
295
295
 
296
296
  ## Access Scopes
297
297
 
298
298
  | Scope | Internal data | Read-only data <sub>(1)</sub> | Custom data | Restricted by CLP, ACL | Key |
299
- |----------------|---------------|-------------------------------|-------------|------------------------|---------------------|
299
+ | -------------- | ------------- | ----------------------------- | ----------- | ---------------------- | ------------------- |
300
300
  | Internal | r/w | r/w | r/w | no | `maintenanceKey` |
301
301
  | Master | -/- | r/- | r/w | no | `masterKey` |
302
302
  | ReadOnlyMaster | -/- | r/- | r/- | no | `readOnlyMasterKey` |
@@ -323,16 +323,18 @@ const server = ParseServer({
323
323
  module: 'example-mail-adapter',
324
324
  options: {
325
325
  // Additional adapter options
326
- ...mailAdapterOptions
327
- }
326
+ ...mailAdapterOptions,
327
+ },
328
328
  },
329
329
  });
330
330
  ```
331
331
 
332
332
  Offical email adapters maintained by Parse Platform:
333
+
333
334
  - [parse-server-api-mail-adapter](https://github.com/parse-community/parse-server-api-mail-adapter) (localization, templates, universally supports any email provider)
334
335
 
335
336
  Email adapters contributed by the community:
337
+
336
338
  - [parse-smtp-template](https://www.npmjs.com/package/parse-smtp-template) (localization, templates)
337
339
  - [parse-server-postmark-adapter](https://www.npmjs.com/package/parse-server-postmark-adapter)
338
340
  - [parse-server-sendgrid-adapter](https://www.npmjs.com/package/parse-server-sendgrid-adapter)
@@ -410,7 +412,7 @@ The `handler` receives the `request` and returns a `custom_page.html` webpage fr
410
412
  The following paths are already used by Parse Server's built-in features and are therefore not available for custom routes. Custom routes with an identical combination of `path` and `method` are ignored.
411
413
 
412
414
  | Path | HTTP Method | Feature |
413
- |-----------------------------|-------------|--------------------|
415
+ | --------------------------- | ----------- | ------------------ |
414
416
  | `verify_email` | `GET` | email verification |
415
417
  | `resend_verification_email` | `POST` | email verification |
416
418
  | `choose_password` | `GET` | password reset |
@@ -420,7 +422,7 @@ The following paths are already used by Parse Server's built-in features and are
420
422
  ### Parameters
421
423
 
422
424
  | Parameter | Optional | Type | Default value | Example values | Environment variable | Description |
423
- |------------------------------|----------|-----------------|---------------|-----------------------|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
425
+ | ---------------------------- | -------- | --------------- | ------------- | --------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
424
426
  | `pages` | yes | `Object` | `undefined` | - | `PARSE_SERVER_PAGES` | The options for pages such as password reset and email verification. |
425
427
  | `pages.enableRouter` | yes | `Boolean` | `false` | - | `PARSE_SERVER_PAGES_ENABLE_ROUTER` | Is `true` if the pages router should be enabled; this is required for any of the pages options to take effect. |
426
428
  | `pages.customRoutes` | yes | `Array` | `[]` | - | `PARSE_SERVER_PAGES_CUSTOM_ROUTES` | The custom routes. The routes are added in the order they are defined here, which has to be considered since requests traverse routes in an ordered manner. Custom routes are traversed after build-in routes such as password reset and email verification. |
@@ -437,16 +439,16 @@ const server = ParseServer({
437
439
  ...otherOptions,
438
440
 
439
441
  customPages: {
440
- passwordResetSuccess: "http://yourapp.com/passwordResetSuccess",
441
- verifyEmailSuccess: "http://yourapp.com/verifyEmailSuccess",
442
- parseFrameURL: "http://yourapp.com/parseFrameURL",
443
- linkSendSuccess: "http://yourapp.com/linkSendSuccess",
444
- linkSendFail: "http://yourapp.com/linkSendFail",
445
- invalidLink: "http://yourapp.com/invalidLink",
446
- invalidVerificationLink: "http://yourapp.com/invalidVerificationLink",
447
- choosePassword: "http://yourapp.com/choosePassword"
448
- }
449
- })
442
+ passwordResetSuccess: 'http://yourapp.com/passwordResetSuccess',
443
+ verifyEmailSuccess: 'http://yourapp.com/verifyEmailSuccess',
444
+ parseFrameURL: 'http://yourapp.com/parseFrameURL',
445
+ linkSendSuccess: 'http://yourapp.com/linkSendSuccess',
446
+ linkSendFail: 'http://yourapp.com/linkSendFail',
447
+ invalidLink: 'http://yourapp.com/invalidLink',
448
+ invalidVerificationLink: 'http://yourapp.com/invalidVerificationLink',
449
+ choosePassword: 'http://yourapp.com/choosePassword',
450
+ },
451
+ });
450
452
  ```
451
453
 
452
454
  ## Using Environment Variables
@@ -482,10 +484,10 @@ You can also find more adapters maintained by the community by searching on [npm
482
484
 
483
485
  Parse Server allows developers to choose from several options when hosting files:
484
486
 
485
- * `GridFSBucketAdapter` - which is backed by MongoDB
486
- * `S3Adapter` - which is backed by [Amazon S3](https://aws.amazon.com/s3/)
487
- * `GCSAdapter` - which is backed by [Google Cloud Storage](https://cloud.google.com/storage/)
488
- * `FSAdapter` - local file storage
487
+ - `GridFSBucketAdapter` - which is backed by MongoDB
488
+ - `S3Adapter` - which is backed by [Amazon S3](https://aws.amazon.com/s3/)
489
+ - `GCSAdapter` - which is backed by [Google Cloud Storage](https://cloud.google.com/storage/)
490
+ - `FSAdapter` - local file storage
489
491
 
490
492
  `GridFSBucketAdapter` is used by default and requires no setup, but if you're interested in using Amazon S3, Google Cloud Storage, or local file storage, additional configuration information is available in the [Parse Server guide](http://docs.parseplatform.org/parse-server/guide/#configuring-file-adapters).
491
493
 
@@ -515,7 +517,7 @@ let api = new ParseServer({
515
517
  ### Parameters <!-- omit in toc -->
516
518
 
517
519
  | Parameter | Optional | Type | Default value | Example values | Environment variable | Description |
518
- |----------------------------|----------|-----------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
520
+ | -------------------------- | -------- | --------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
519
521
  | `idempotencyOptions` | yes | `Object` | `undefined` | | PARSE_SERVER_EXPERIMENTAL_IDEMPOTENCY_OPTIONS | Setting this enables idempotency enforcement for the specified paths. |
520
522
  | `idempotencyOptions.paths` | yes | `Array<String>` | `[]` | `.*` (all paths, includes the examples below), <br>`functions/.*` (all functions), <br>`jobs/.*` (all jobs), <br>`classes/.*` (all classes), <br>`functions/.*` (all functions), <br>`users` (user creation / update), <br>`installations` (installation creation / update) | PARSE_SERVER_EXPERIMENTAL_IDEMPOTENCY_PATHS | An array of path patterns that have to match the request path for request deduplication to be enabled. The mount path must not be included, for example to match the request path `/parse/functions/myFunction` specify the path pattern `functions/myFunction`. A trailing slash of the request path is ignored, for example the path pattern `functions/myFunction` matches both `/parse/functions/myFunction` and `/parse/functions/myFunction/`. |
521
523
  | `idempotencyOptions.ttl` | yes | `Integer` | `300` | `60` (60 seconds) | PARSE_SERVER_EXPERIMENTAL_IDEMPOTENCY_TTL | The duration in seconds after which a request record is discarded from the database. Duplicate requests due to network issues can be expected to arrive within milliseconds up to several seconds. This value must be greater than `0`. |
@@ -559,11 +561,13 @@ const api = new ParseServer({
559
561
  ```
560
562
 
561
563
  Localization is achieved by matching a request-supplied `locale` parameter with localized page content. The locale can be supplied in either the request query, body or header with the following keys:
564
+
562
565
  - query: `locale`
563
566
  - body: `locale`
564
567
  - header: `x-parse-page-param-locale`
565
568
 
566
569
  For example, a password reset link with the locale parameter in the query could look like this:
570
+
567
571
  ```
568
572
  http://example.com/parse/apps/[appId]/request_password_reset?token=[token]&username=[username]&locale=de-AT
569
573
  ```
@@ -579,6 +583,7 @@ Pages can be localized in two ways:
579
583
  Pages are localized by using the corresponding file in the directory structure where the files are placed in subdirectories named after the locale or language. The file in the base directory is the default file.
580
584
 
581
585
  **Example Directory Structure:**
586
+
582
587
  ```js
583
588
  root/
584
589
  ├── public/ // pages base path
@@ -590,11 +595,13 @@ root/
590
595
  ```
591
596
 
592
597
  Files are matched with the locale in the following order:
598
+
593
599
  1. Locale match, e.g. locale `de-AT` matches file in folder `de-AT`.
594
600
  1. Language match, e.g. locale `de-CH` matches file in folder `de`.
595
601
  1. Default; file in base folder is returned.
596
602
 
597
603
  **Configuration Example:**
604
+
598
605
  ```js
599
606
  const api = new ParseServer({
600
607
  ...otherOptions,
@@ -610,9 +617,11 @@ const api = new ParseServer({
610
617
  ```
611
618
 
612
619
  Pros:
620
+
613
621
  - All files are complete in their content and can be easily opened and previewed by viewing the file in a browser.
614
622
 
615
623
  Cons:
624
+
616
625
  - In most cases, a localized page differs only slightly from the default page, which could cause a lot of duplicate code that is difficult to maintain.
617
626
 
618
627
  #### Localization with JSON Resource
@@ -620,6 +629,7 @@ Cons:
620
629
  Pages are localized by adding placeholders in the HTML files and providing a JSON resource that contains the translations to fill into the placeholders.
621
630
 
622
631
  **Example Directory Structure:**
632
+
623
633
  ```js
624
634
  root/
625
635
  ├── public/ // pages base path
@@ -631,6 +641,7 @@ root/
631
641
  The JSON resource file loosely follows the [i18next](https://github.com/i18next/i18next) syntax, which is a syntax that is often supported by translation platforms, making it easy to manage translations, exporting them for use in Parse Server, and even to automate this workflow.
632
642
 
633
643
  **Example JSON Content:**
644
+
634
645
  ```json
635
646
  {
636
647
  "en": { // resource for language `en` (English)
@@ -652,6 +663,7 @@ The JSON resource file loosely follows the [i18next](https://github.com/i18next/
652
663
  ```
653
664
 
654
665
  **Configuration Example:**
666
+
655
667
  ```js
656
668
  const api = new ParseServer({
657
669
  ...otherOptions,
@@ -666,9 +678,11 @@ const api = new ParseServer({
666
678
  ```
667
679
 
668
680
  Pros:
681
+
669
682
  - There is only one HTML file to maintain that contains the placeholders that are filled with the translations according to the locale.
670
683
 
671
684
  Cons:
685
+
672
686
  - Files cannot be easily previewed by viewing the file in a browser because the content contains only placeholders and even HTML or CSS changes may be dynamically applied, e.g. when a localization requires a Right-To-Left layout direction.
673
687
  - Style and other fundamental layout changes may be more difficult to apply.
674
688
 
@@ -677,6 +691,7 @@ Cons:
677
691
  In addition to feature related default parameters such as `appId` and the translations provided via JSON resource, it is possible to define custom dynamic placeholders as part of the router configuration. This works independently of localization and, also if `enableLocalization` is disabled.
678
692
 
679
693
  **Configuration Example:**
694
+
680
695
  ```js
681
696
  const api = new ParseServer({
682
697
  ...otherOptions,
@@ -689,6 +704,7 @@ const api = new ParseServer({
689
704
  }
690
705
  }
691
706
  ```
707
+
692
708
  The placeholders can also be provided as function or as async function, with the `locale` and other feature related parameters passed through, to allow for dynamic placeholder values:
693
709
 
694
710
  ```js
@@ -714,7 +730,7 @@ The following parameter and placeholder keys are reserved because they are used
714
730
  #### Parameters
715
731
 
716
732
  | Parameter | Optional | Type | Default value | Example values | Environment variable | Description |
717
- |-------------------------------------------------|----------|---------------------------------------|----------------------------------------|------------------------------------------------------|-----------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
733
+ | ----------------------------------------------- | -------- | ------------------------------------- | -------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
718
734
  | `pages` | yes | `Object` | `undefined` | - | `PARSE_SERVER_PAGES` | The options for pages such as password reset and email verification. |
719
735
  | `pages.enableRouter` | yes | `Boolean` | `false` | - | `PARSE_SERVER_PAGES_ENABLE_ROUTER` | Is `true` if the pages router should be enabled; this is required for any of the pages options to take effect. |
720
736
  | `pages.enableLocalization` | yes | `Boolean` | `false` | - | `PARSE_SERVER_PAGES_ENABLE_LOCALIZATION` | Is true if pages should be localized; this has no effect on custom page redirects. |
@@ -741,18 +757,19 @@ The following parameter and placeholder keys are reserved because they are used
741
757
  ## Logging
742
758
 
743
759
  Parse Server will, by default, log:
744
- * to the console
745
- * daily rotating files as new line delimited JSON
760
+
761
+ - to the console
762
+ - daily rotating files as new line delimited JSON
746
763
 
747
764
  Logs are also viewable in Parse Dashboard.
748
765
 
749
- **Want to log each request and response?** Set the `VERBOSE` environment variable when starting `parse-server`. Usage :- `VERBOSE='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
766
+ **Want to log each request and response?** Set the `VERBOSE` environment variable when starting `parse-server`. Usage :- `VERBOSE='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
750
767
 
751
- **Want logs to be placed in a different folder?** Pass the `PARSE_SERVER_LOGS_FOLDER` environment variable when starting `parse-server`. Usage :- `PARSE_SERVER_LOGS_FOLDER='<path-to-logs-folder>' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
768
+ **Want logs to be placed in a different folder?** Pass the `PARSE_SERVER_LOGS_FOLDER` environment variable when starting `parse-server`. Usage :- `PARSE_SERVER_LOGS_FOLDER='<path-to-logs-folder>' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
752
769
 
753
- **Want to log specific levels?** Pass the `logLevel` parameter when starting `parse-server`. Usage :- `parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --logLevel LOG_LEVEL`
770
+ **Want to log specific levels?** Pass the `logLevel` parameter when starting `parse-server`. Usage :- `parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --logLevel LOG_LEVEL`
754
771
 
755
- **Want new line delimited JSON error logs (for consumption by CloudWatch, Google Cloud Logging, etc)?** Pass the `JSON_LOGS` environment variable when starting `parse-server`. Usage :- `JSON_LOGS='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
772
+ **Want new line delimited JSON error logs (for consumption by CloudWatch, Google Cloud Logging, etc)?** Pass the `JSON_LOGS` environment variable when starting `parse-server`. Usage :- `JSON_LOGS='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
756
773
 
757
774
  # Deprecations
758
775
 
@@ -782,7 +799,7 @@ $ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongo
782
799
 
783
800
  After starting the server, you can visit http://localhost:1337/playground in your browser to start playing with your GraphQL API.
784
801
 
785
- ***Note:*** Do ***NOT*** use --mountPlayground option in production. [Parse Dashboard](https://github.com/parse-community/parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps.
802
+ **_Note:_** Do **_NOT_** use --mountPlayground option in production. [Parse Dashboard](https://github.com/parse-community/parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps.
786
803
 
787
804
  ### Using Docker
788
805
 
@@ -801,11 +818,11 @@ $ docker run --name my-mongo -d mongo
801
818
  $ docker run --name my-parse-server --link my-mongo:mongo -v config-vol:/parse-server/config -p 1337:1337 -d parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://mongo/test --publicServerURL http://localhost:1337/parse --mountGraphQL --mountPlayground
802
819
  ```
803
820
 
804
- ***Note:*** *If you want to use [Cloud Code](https://docs.parseplatform.org/cloudcode/guide/), add `-v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js` to the command above. Make sure `main.js` is in the `cloud-code-vol` directory before starting Parse Server.*
821
+ **_Note:_** _If you want to use [Cloud Code](https://docs.parseplatform.org/cloudcode/guide/), add `-v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js` to the command above. Make sure `main.js` is in the `cloud-code-vol` directory before starting Parse Server._
805
822
 
806
823
  After starting the server, you can visit http://localhost:1337/playground in your browser to start playing with your GraphQL API.
807
824
 
808
- ***Note:*** Do ***NOT*** use --mountPlayground option in production. [Parse Dashboard](https://github.com/parse-community/parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps.
825
+ **_Note:_** Do **_NOT_** use --mountPlayground option in production. [Parse Dashboard](https://github.com/parse-community/parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps.
809
826
 
810
827
  ### Using Express.js
811
828
 
@@ -830,23 +847,20 @@ const parseServer = new ParseServer({
830
847
  appId: 'APPLICATION_ID',
831
848
  masterKey: 'MASTER_KEY',
832
849
  serverURL: 'http://localhost:1337/parse',
833
- publicServerURL: 'http://localhost:1337/parse'
850
+ publicServerURL: 'http://localhost:1337/parse',
834
851
  });
835
852
 
836
- const parseGraphQLServer = new ParseGraphQLServer(
837
- parseServer,
838
- {
839
- graphQLPath: '/graphql',
840
- playgroundPath: '/playground'
841
- }
842
- );
853
+ const parseGraphQLServer = new ParseGraphQLServer(parseServer, {
854
+ graphQLPath: '/graphql',
855
+ playgroundPath: '/playground',
856
+ });
843
857
 
844
858
  app.use('/parse', parseServer.app); // (Optional) Mounts the REST API
845
859
  parseGraphQLServer.applyGraphQL(app); // Mounts the GraphQL API
846
860
  parseGraphQLServer.applyPlayground(app); // (Optional) Mounts the GraphQL Playground - do NOT use in Production
847
861
 
848
862
  await parseServer.start();
849
- app.listen(1337, function() {
863
+ app.listen(1337, function () {
850
864
  console.log('REST API running on http://localhost:1337/parse');
851
865
  console.log('GraphQL API running on http://localhost:1337/graphql');
852
866
  console.log('GraphQL Playground running on http://localhost:1337/playground');
@@ -862,7 +876,7 @@ $ node index.js
862
876
 
863
877
  After starting the app, you can visit http://localhost:1337/playground in your browser to start playing with your GraphQL API.
864
878
 
865
- ***Note:*** Do ***NOT*** mount the GraphQL Playground in production. [Parse Dashboard](https://github.com/parse-community/parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps.
879
+ **_Note:_** Do **_NOT_** mount the GraphQL Playground in production. [Parse Dashboard](https://github.com/parse-community/parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps.
866
880
 
867
881
  ## Checking the API health
868
882
 
@@ -957,13 +971,7 @@ Run the following to create your first object:
957
971
 
958
972
  ```graphql
959
973
  mutation CreateGameScore {
960
- createGameScore(
961
- fields: {
962
- playerName: "Sean Plott"
963
- score: 1337
964
- cheatMode: false
965
- }
966
- ) {
974
+ createGameScore(fields: { playerName: "Sean Plott", score: 1337, cheatMode: false }) {
967
975
  id
968
976
  updatedAt
969
977
  createdAt
@@ -1142,4 +1150,5 @@ Support us with a monthly donation and help us continue our activities. [Become
1142
1150
  [log_release]: https://github.com/parse-community/parse-server/blob/release/changelogs/CHANGELOG_release.md
1143
1151
  [log_beta]: https://github.com/parse-community/parse-server/blob/beta/changelogs/CHANGELOG_beta.md
1144
1152
  [log_alpha]: https://github.com/parse-community/parse-server/blob/alpha/changelogs/CHANGELOG_alpha.md
1153
+
1145
1154
  [server-options] http://parseplatform.org/parse-server/api/release/ParseServerOptions.html
@@ -12,7 +12,7 @@ exports.default = exports.PushAdapter = void 0;
12
12
  // * getValidPushTypes()
13
13
  // * send(devices, installations, pushStatus)
14
14
  //
15
- // Default is ParsePushAdapter, which uses GCM for
15
+ // Default is ParsePushAdapter, which uses FCM for
16
16
  // android push and APNS for ios push.
17
17
  /**
18
18
  * @interface
@@ -37,4 +37,4 @@ class PushAdapter {
37
37
  }
38
38
  exports.PushAdapter = PushAdapter;
39
39
  var _default = exports.default = PushAdapter;
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQdXNoQWRhcHRlciIsInNlbmQiLCJib2R5IiwiaW5zdGFsbGF0aW9ucyIsInB1c2hTdGF0dXMiLCJnZXRWYWxpZFB1c2hUeXBlcyIsImV4cG9ydHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvUHVzaC9QdXNoQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuLy8gQGZsb3dcbi8vIFB1c2ggQWRhcHRlclxuLy9cbi8vIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBwdXNoIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20uXG4vL1xuLy8gQWRhcHRlciBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLy8gKiBnZXRWYWxpZFB1c2hUeXBlcygpXG4vLyAqIHNlbmQoZGV2aWNlcywgaW5zdGFsbGF0aW9ucywgcHVzaFN0YXR1cylcbi8vXG4vLyBEZWZhdWx0IGlzIFBhcnNlUHVzaEFkYXB0ZXIsIHdoaWNoIHVzZXMgR0NNIGZvclxuLy8gYW5kcm9pZCBwdXNoIGFuZCBBUE5TIGZvciBpb3MgcHVzaC5cblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKiBAbWVtYmVyb2YgbW9kdWxlOkFkYXB0ZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBQdXNoQWRhcHRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYm9keVxuICAgKiBAcGFyYW0ge1BhcnNlLkluc3RhbGxhdGlvbltdfSBpbnN0YWxsYXRpb25zXG4gICAqIEBwYXJhbSB7YW55fSBwdXNoU3RhdHVzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgc2VuZChib2R5OiBhbnksIGluc3RhbGxhdGlvbnM6IGFueVtdLCBwdXNoU3RhdHVzOiBhbnkpOiA/UHJvbWlzZTwqPiB7fVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcy5cbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiB2YWxpZCBwdXNoIHR5cGVzXG4gICAqL1xuICBnZXRWYWxpZFB1c2hUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsV0FBVyxDQUFDO0VBQ3ZCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxJQUFJQSxDQUFDQyxJQUFTLEVBQUVDLGFBQW9CLEVBQUVDLFVBQWUsRUFBZSxDQUFDOztFQUVyRTtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxpQkFBaUJBLENBQUEsRUFBYTtJQUM1QixPQUFPLEVBQUU7RUFDWDtBQUNGO0FBQUNDLE9BQUEsQ0FBQU4sV0FBQSxHQUFBQSxXQUFBO0FBQUEsSUFBQU8sUUFBQSxHQUFBRCxPQUFBLENBQUFFLE9BQUEsR0FFY1IsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQdXNoQWRhcHRlciIsInNlbmQiLCJib2R5IiwiaW5zdGFsbGF0aW9ucyIsInB1c2hTdGF0dXMiLCJnZXRWYWxpZFB1c2hUeXBlcyIsImV4cG9ydHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvUHVzaC9QdXNoQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuLy8gQGZsb3dcbi8vIFB1c2ggQWRhcHRlclxuLy9cbi8vIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBwdXNoIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20uXG4vL1xuLy8gQWRhcHRlciBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLy8gKiBnZXRWYWxpZFB1c2hUeXBlcygpXG4vLyAqIHNlbmQoZGV2aWNlcywgaW5zdGFsbGF0aW9ucywgcHVzaFN0YXR1cylcbi8vXG4vLyBEZWZhdWx0IGlzIFBhcnNlUHVzaEFkYXB0ZXIsIHdoaWNoIHVzZXMgRkNNIGZvclxuLy8gYW5kcm9pZCBwdXNoIGFuZCBBUE5TIGZvciBpb3MgcHVzaC5cblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKiBAbWVtYmVyb2YgbW9kdWxlOkFkYXB0ZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBQdXNoQWRhcHRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYm9keVxuICAgKiBAcGFyYW0ge1BhcnNlLkluc3RhbGxhdGlvbltdfSBpbnN0YWxsYXRpb25zXG4gICAqIEBwYXJhbSB7YW55fSBwdXNoU3RhdHVzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgc2VuZChib2R5OiBhbnksIGluc3RhbGxhdGlvbnM6IGFueVtdLCBwdXNoU3RhdHVzOiBhbnkpOiA/UHJvbWlzZTwqPiB7fVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcy5cbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiB2YWxpZCBwdXNoIHR5cGVzXG4gICAqL1xuICBnZXRWYWxpZFB1c2hUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsV0FBVyxDQUFDO0VBQ3ZCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxJQUFJQSxDQUFDQyxJQUFTLEVBQUVDLGFBQW9CLEVBQUVDLFVBQWUsRUFBZSxDQUFDOztFQUVyRTtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxpQkFBaUJBLENBQUEsRUFBYTtJQUM1QixPQUFPLEVBQUU7RUFDWDtBQUNGO0FBQUNDLE9BQUEsQ0FBQU4sV0FBQSxHQUFBQSxXQUFBO0FBQUEsSUFBQU8sUUFBQSxHQUFBRCxPQUFBLENBQUFFLE9BQUEsR0FFY1IsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -17,11 +17,5 @@
17
17
  *
18
18
  * If there are no deprecations, this must return an empty array.
19
19
  */
20
- module.exports = [{
21
- optionKey: 'enableInsecureAuthAdapters',
22
- changeNewDefault: 'false'
23
- }, {
24
- optionKey: 'databaseOptions.allowPublicExplain',
25
- changeNewDefault: 'false'
26
- }];
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EZXByZWNhdG9yL0RlcHJlY2F0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBkZXByZWNhdGlvbnMuXG4gKlxuICogQWRkIGRlcHJlY2F0aW9ucyB0byB0aGUgYXJyYXkgdXNpbmcgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogLSBgb3B0aW9uS2V5YCB7U3RyaW5nfTogVGhlIG9wdGlvbiBrZXkgaW5jbC4gaXRzIHBhdGgsIGUuZy4gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYC5cbiAqIC0gYGVudktleWAge1N0cmluZ306IFRoZSBlbnZpcm9ubWVudCBrZXksIGUuZy4gYFBBUlNFX1NFUlZFUl9TRUNVUklUWWAuXG4gKiAtIGBjaGFuZ2VOZXdLZXlgIHtTdHJpbmd9OiBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAqIG9yIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgcmVtb3ZlZCB3aXRob3V0IHJlcGxhY2VtZW50LlxuICogLSBgY2hhbmdlTmV3RGVmYXVsdGAge1N0cmluZ306IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAqIHdpbGwgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gKiAtIGBzb2x1dGlvbmA6IFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy4gT3B0aW9uYWwuIFRoaXNcbiAqIGluc3RydWN0aW9uIG11c3Qgbm90IGluY2x1ZGUgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hpY2ggaXMgYXV0by1nZW5lcmF0ZWQuXG4gKiBJdCBzaG91bGQgb25seSBjb250YWluIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gcmVnYXJkaW5nIHRoZSBkZXByZWNhdGlvbiBpZlxuICogbmVjZXNzYXJ5LlxuICpcbiAqIElmIHRoZXJlIGFyZSBubyBkZXByZWNhdGlvbnMsIHRoaXMgbXVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gW1xuICB7IG9wdGlvbktleTogJ2VuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzJywgY2hhbmdlTmV3RGVmYXVsdDogJ2ZhbHNlJyB9LFxuICB7IG9wdGlvbktleTogJ2RhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4nLCBjaGFuZ2VOZXdEZWZhdWx0OiAnZmFsc2UnIH0sXG5dO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsQ0FDZjtFQUFFQyxTQUFTLEVBQUUsNEJBQTRCO0VBQUVDLGdCQUFnQixFQUFFO0FBQVEsQ0FBQyxFQUN0RTtFQUFFRCxTQUFTLEVBQUUsb0NBQW9DO0VBQUVDLGdCQUFnQixFQUFFO0FBQVEsQ0FBQyxDQUMvRSIsImlnbm9yZUxpc3QiOltdfQ==
20
+ module.exports = [];
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGRlcHJlY2F0aW9ucy5cbiAqXG4gKiBBZGQgZGVwcmVjYXRpb25zIHRvIHRoZSBhcnJheSB1c2luZyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiAtIGBvcHRpb25LZXlgIHtTdHJpbmd9OiBUaGUgb3B0aW9uIGtleSBpbmNsLiBpdHMgcGF0aCwgZS5nLiBgc2VjdXJpdHkuZW5hYmxlQ2hlY2tgLlxuICogLSBgZW52S2V5YCB7U3RyaW5nfTogVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAqIC0gYGNoYW5nZU5ld0tleWAge1N0cmluZ306IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gKiAtIGBjaGFuZ2VOZXdEZWZhdWx0YCB7U3RyaW5nfTogU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAqIC0gYHNvbHV0aW9uYDogVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBPcHRpb25hbC4gVGhpc1xuICogaW5zdHJ1Y3Rpb24gbXVzdCBub3QgaW5jbHVkZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZyB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZC5cbiAqIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gYWRkaXRpb25hbCBpbnN0cnVjdGlvbiByZWdhcmRpbmcgdGhlIGRlcHJlY2F0aW9uIGlmXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogSWYgdGhlcmUgYXJlIG5vIGRlcHJlY2F0aW9ucywgdGhpcyBtdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBbXTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLEVBQUUiLCJpZ25vcmVMaXN0IjpbXX0=