diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index de0ba7823f..03fb10ae3d 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -100,35 +100,41 @@ module.exports = { }, { collapsable: true, - title: 'πŸ’‘ Guides', + title: 'πŸ’‘ Concepts', + children: [ + '/3.0.0-beta.x/concepts/file-structure', + '/3.0.0-beta.x/concepts/configurations', + '/3.0.0-beta.x/concepts/requests-responses', + '/3.0.0-beta.x/concepts/customization', + '/3.0.0-beta.x/concepts/routing', + '/3.0.0-beta.x/concepts/controllers', + '/3.0.0-beta.x/concepts/models', + '/3.0.0-beta.x/concepts/services', + '/3.0.0-beta.x/concepts/queries', + '/3.0.0-beta.x/concepts/parameters', + '/3.0.0-beta.x/concepts/policies', + '/3.0.0-beta.x/concepts/public-assets', + '/3.0.0-beta.x/concepts/hooks', + '/3.0.0-beta.x/concepts/middlewares', + '/3.0.0-beta.x/concepts/logging', + '/3.0.0-beta.x/concepts/plugins', + ], + }, + { + collapsable: true, + title: 'πŸ“š Guides', children: [ - '/3.0.0-beta.x/concepts/concepts', - '/3.0.0-beta.x/configurations/configurations', - '/3.0.0-beta.x/guides/controllers', '/3.0.0-beta.x/guides/databases', '/3.0.0-beta.x/guides/deployment', - '/3.0.0-beta.x/guides/parameters', - '/3.0.0-beta.x/guides/i18n', - '/3.0.0-beta.x/guides/models', - '/3.0.0-beta.x/guides/policies', - '/3.0.0-beta.x/guides/public-assets', - '/3.0.0-beta.x/guides/requests', - '/3.0.0-beta.x/guides/responses', - '/3.0.0-beta.x/guides/routing', - '/3.0.0-beta.x/guides/services', - '/3.0.0-beta.x/guides/queries', '/3.0.0-beta.x/guides/webhooks', ], }, { collapsable: true, - title: 'βš™οΈοΈ Advanced', + title: 'βš™οΈοΈ Admin panel', children: [ - '/3.0.0-beta.x/advanced/customize-admin', - '/3.0.0-beta.x/advanced/hooks', - '/3.0.0-beta.x/advanced/logging', - '/3.0.0-beta.x/advanced/middlewares', - '/3.0.0-beta.x/advanced/usage-information', + '/3.0.0-beta.x/admin-panel/customization', + '/3.0.0-beta.x/admin-panel/deploy', ], }, { @@ -162,7 +168,10 @@ module.exports = { { collapsable: true, title: 'πŸ— Global strapi', - children: ['/3.0.0-beta.x/global-strapi/reference'], + children: [ + '/3.0.0-beta.x/global-strapi/api-reference', + '/3.0.0-beta.x/global-strapi/usage-information', + ], }, { collapsable: false, diff --git a/docs/3.0.0-beta.x/advanced/customize-admin.md b/docs/3.0.0-beta.x/admin-panel/customization.md similarity index 60% rename from docs/3.0.0-beta.x/advanced/customize-admin.md rename to docs/3.0.0-beta.x/admin-panel/customization.md index 57b03cc9a5..4c5bc55022 100644 --- a/docs/3.0.0-beta.x/advanced/customize-admin.md +++ b/docs/3.0.0-beta.x/admin-panel/customization.md @@ -1,10 +1,4 @@ -# Admin panel - -One of Strapi's main feature is its fully extendable and customizable admin panel. This section explains how the admin panel section is structured and how to customize it. - -See the [Contributing Guide](https://github.com/strapi/strapi/blob/master/CONTRIBUTING.md) for information on how to contribute to Strapi's admin interface. - -## Customization +# Customization The administration panel can be customized according to your needs, so you can make it reflects your identity. @@ -12,7 +6,7 @@ The administration panel can be customized according to your needs, so you can m To apply your changes you need to [rebuild](#build) your admin panel ::: -### Change access URL +## Change access URL By default, the administration panel is exposed via [http://localhost:1337/admin](http://localhost:1337/admin). However, for security reasons, you can easily update this path. @@ -33,9 +27,7 @@ By default, the administration panel is exposed via [http://localhost:1337/admin The panel will be available through [http://localhost:1337/dashboard](http://localhost:1337/dashboard) with the configurations above. ---- - -### Development mode +## Development mode To enable the front-end development mode you need to start your application using the `--watch-admin` flag. @@ -46,7 +38,7 @@ strapi develop --watch-admin With this option you can do the following: -#### Customize the `strapi-admin` package +### Customize the `strapi-admin` package All files added in `my-app/admin/src/` will either be replaced or added @@ -116,7 +108,7 @@ export { languages, translationMessages }; With this modification only English and French will be available in your admin ::: -#### Customize a plugin +### Customize a plugin Similarly to the back-end override system any file added in `my-app/extensions//admin/` will be copied and used instead of the original one (use with care). @@ -146,8 +138,6 @@ const WysiwygWithErrors = props => ; export default WysiwygWithErrors; ``` ---- - ### Styles The AdminUI package source can be easily found in `./node_modules/strapi-admin/src/`. @@ -162,8 +152,6 @@ To apply your changes you need to rebuild your admin panel npm run build ``` ---- - ### Logo To change the top-left displayed admin panel's logo, add your custom image at `./admin/src/assets/images/logo-strapi.png`. @@ -245,100 +233,3 @@ NODE_ENV=production strapi build :::: This will replace the folder's content located at `./build`. Visit [http://localhost:1337/admin](http://localhost:1337/admin) to make sure your updates have been taken into account. - ---- - -## Deployment - -The administration is nothing more than a React front-end application calling an API. The front-end and the back-end are independent and can be deployed on different servers which brings us to different scenarios: - -1. Deploy the entire project on the same server. -2. Deploy the administration panel on another server (AWS S3, Azure, etc) than the API. - -Let's dive into the build configurations for each case. - -#### Deploy the entire project on the same server. - -You don't need to touch anything in your configuration file. This is the default behavior and the build configurations will be automatically set. The server will start on the defined port and the administration panel will be accessible through `http://yourdomain.com:1337/dashboard`. - -You might want to change the path to access to the administration panel. Here the required configurations to change the path: - -**Path β€”** `./config/environment/**/server.json`. - -```js -{ - "host": "localhost", - "port": 1337, - "cron": { - "enabled": false - }, - "admin": { - "path": "/dashboard" // We change the path to access to the admin (highly recommended for security reasons). - } -} -``` - -**You have to rebuild the administration panel to make this work.** [Build instructions](#build). - -#### Deploy the administration panel on another server (AWS S3, Azure, etc) than the API. - -It's very common to deploy the front-end and the back-end on different servers. Here the required configurations to handle this case: - -**Path β€”** `./config/environment/**/server.json`. - -```js -{ - "host": "localhost", - "port": 1337, - "cron": { - "enabled": false - }, - "admin": { - "path": "/", // Note: The administration will be accessible from the root of the domain (ex: http//yourfrontend.com/) - "build": { - "backend": "http://yourbackend.com" - } - } -} -``` - -The administration URL will be `http://yourfrontend.com` and every request from the panel will hit the backend at `http://yourbackend.com`. - -#### Deploy the administration panel and the plugins on another server than the API - -In this case, we suppose that you decided to put your administration panel on a different server than the API. - -**Path β€”** `./config/environment/**/server.json`. - -```js -{ - "host": "localhost", - "port": 1337, - "cron": { - "enabled": false - }, - "admin": { - "path": "/dashboard", - "build": { - "backend": "http://yourbackend.com" - } - } -} -``` - -The administration URL will be `http://yourfrontend.com/dashboard` and every request from the panel will hit the backend at `http://yourbackend.com`. - -The generated `index.html` will look like this: - -**Path β€”** `./build/index.html`. - -```html - - - -
- - - - -``` diff --git a/docs/3.0.0-beta.x/admin-panel/deploy.md b/docs/3.0.0-beta.x/admin-panel/deploy.md new file mode 100644 index 0000000000..1c77b7a643 --- /dev/null +++ b/docs/3.0.0-beta.x/admin-panel/deploy.md @@ -0,0 +1,94 @@ +# Deployment + +The administration is nothing more than a React front-end application calling an API. The front-end and the back-end are independent and can be deployed on different servers which brings us to different scenarios: + +1. Deploy the entire project on the same server. +2. Deploy the administration panel on another server (AWS S3, Azure, etc) than the API. + +Let's dive into the build configurations for each case. + +## Deploy the entire project on the same server. + +You don't need to touch anything in your configuration file. This is the default behavior and the build configurations will be automatically set. The server will start on the defined port and the administration panel will be accessible through `http://yourdomain.com:1337/dashboard`. + +You might want to change the path to access to the administration panel. Here the required configurations to change the path: + +**Path β€”** `./config/environment/**/server.json`. + +```js +{ + "host": "localhost", + "port": 1337, + "cron": { + "enabled": false + }, + "admin": { + "path": "/dashboard" // We change the path to access to the admin (highly recommended for security reasons). + } +} +``` + +**You have to rebuild the administration panel to make this work.** [Build instructions](#build). + +## Deploy the administration panel on another server (AWS S3, Azure, etc) than the API. + +It's very common to deploy the front-end and the back-end on different servers. Here the required configurations to handle this case: + +**Path β€”** `./config/environment/**/server.json`. + +```js +{ + "host": "localhost", + "port": 1337, + "cron": { + "enabled": false + }, + "admin": { + "path": "/", // Note: The administration will be accessible from the root of the domain (ex: http//yourfrontend.com/) + "build": { + "backend": "http://yourbackend.com" + } + } +} +``` + +The administration URL will be `http://yourfrontend.com` and every request from the panel will hit the backend at `http://yourbackend.com`. + +## Deploy the administration panel and the plugins on another server than the API + +In this case, we suppose that you decided to put your administration panel on a different server than the API. + +**Path β€”** `./config/environment/**/server.json`. + +```js +{ + "host": "localhost", + "port": 1337, + "cron": { + "enabled": false + }, + "admin": { + "path": "/dashboard", + "build": { + "backend": "http://yourbackend.com" + } + } +} +``` + +The administration URL will be `http://yourfrontend.com/dashboard` and every request from the panel will hit the backend at `http://yourbackend.com`. + +The generated `index.html` will look like this: + +**Path β€”** `./build/index.html`. + +```html + + + +
+ + + + +``` diff --git a/docs/3.0.0-beta.x/concepts/concepts.md b/docs/3.0.0-beta.x/concepts/concepts.md deleted file mode 100644 index a0747fd9f8..0000000000 --- a/docs/3.0.0-beta.x/concepts/concepts.md +++ /dev/null @@ -1,352 +0,0 @@ -# Concepts - -- Table of contents - - [Files structure](#files-structure) - - [Controllers](#controllers) - - [Parameters](#parameters) - - [Models](#models) - - [Attributes](#attributes) - - [Relations](#relations) - - [Many-to-many](#many-to-many) - - [One-to-many](#one-to-many) - - [One-to-one](#one-to-one) - - [One-way](#one-way) - - [Lifecycle callbacks](#lifecycle-callbacks) - - [Internationalization](#internationalization-and-localization) - - [Plugin](#plugin) - - [Extensions](#extensions) - - [Policies](#policies) - - [Global policies](#global-policies) - - [Scoped policies](#scoped-policies) - - [Plugin policies](#plugin-policies) - - [Public assets](#public-assets) - - [Requests](#requests) - - [Responses](#responses) - - [Routing](#routing) - - [Services](#services) - - [Queries](#queries) - ---- - -## Files structure - -By default, your project's structure will look like this: - -- `/api`: contains the business logic of your project split in sub-folder per API. - - `**` - - `/config`: contains the API's configurations ([`routes`](#routing), [`policies`](#policies), etc). - - [`/controllers`](#controllers): contains the API's custom controllers. - - [`/models`](#models): contains the API's models. - - [`/services`](#services): contains the API's custom services. -- `/node_modules`: contains the npm's packages used by the project. -- [`/config`](../configurations/configurations.md) - - [`/environments`](../configurations/configurations.md#environments): contains the project's configurations per environment. - - `/**` - - `/development` - - [`custom.json`](../configurations/configurations.md#custom): contains the custom configurations for this environment. - - [`database.json`](../configurations/configurations.md#database): contains the database connections for this environment. - - [`request.json`](../configurations/configurations.md#request): contains the request settings for this environment. - - [`response.json`](../configurations/configurations.md#response): contains the response settings for this environment. - - [`server.json`](../configurations/configurations.md#server): contains the server settings for this environment. - - `/production` - - `/staging` - - [`/functions`](../configurations/configurations.html#functions): contains lifecycle or generic functions of the project. - - [`/locales`](../configurations/configurations.html#locales): contains the translation files used by the built-in i18n feature. - - [`application.json`](../configurations/configurations.html#application): contains the general configurations of the project. - - [`custom.json`](../configurations/configurations.html#custom): contains the custom configurations of the project. - - [`hook.json`](../configurations/configurations.html#hook): contains the hook settings of the project. - - [`language.json`](../configurations/configurations.html#language): contains the language settings of the project. - - [`middleware.json`](../configurations/configurations.html#middleware): contains the middleware settings of the project. -- [`/hooks`](../advanced/hooks.html): contains the custom hooks of the project. -- [`/middlewares`](../advanced/middlewares.html): contains the custom middlewares of the project. -- [`/admin`](../advanced/customize-admin.md): contains your admin customization files. -- [`/extensions`](#extensions): contains the files to extend installed plugins. -- [`/plugins`](#plugin): contains your local plugins. -- [`/public`](#public-assets): contains the file accessible to the outside world. -- `/build`: contains your admin panel UI build. -- `/.cache`: contains files used to build your admin panel. - -::: note -Inside the `/config` folder, every folder will be parsed and injected into the global object `strapi.config`. Let's say, you added a folder named `credentials` with two files `stripe.json` and `paypal.json` into it. The content of these files will be accessible through `strapi.config.credentials.stripe` and `strapi.config.credentials.paypal`. -::: - ---- - -## Controllers - -Controllers are JavaScript files which contain a set of methods called **actions** reached by the client according to the requested route. It means that every time a client requests the route, the action performs the business logic coded and sends back the response. They represent the _C_ in the _MVC_ pattern. In most cases, the controllers will contain the bulk of a project's business logic. - -```js -module.exports = { - // GET /hello - index: async ctx => { - ctx.send('Hello World!'); - }, -}; -``` - -In this example, any time a web browser is pointed to the `/hello` URL on your app, the page will display the text: `Hello World!`. - -### Where are the controllers defined? - -The controllers are defined in each `./api/**/controllers/` folders. Every JavaScript file put in these folders will be loaded as a controller. They are also available through the `strapi.controllers` and `strapi.api.**.controllers` global variables. By convention, controllers' names should be Pascal-cased, so that every word in the file (include the first one) is capitalized `User.js`, `LegalEntity.js`. - -::: note -Please refer to the [controllers' guide](../guides/controllers.md) for more information. -::: - ---- - -## Parameters - -Parameters are a handy way to request data according to generic parameters. It makes filtering, sorting and paginating easy and reusable (eg. `GET /users?_limit=30&name=John`). - -::: note -Please refer to the [parameters' guide](../content-api/parameters.md) for more information. -::: - ---- - -## Models - -Models are a representation of the database's structure and lifecycle. They are split into two separate files. A JavaScript file that contains the lifecycle callbacks, and a JSON one that represents the data stored in the database and their format. The models also allow you to define the relationships between them. - -**Path β€”** `./api/user/models/User.js`. - -```js -module.exports = { - // Before saving a value. - // Fired before an `insert` or `update` query. - beforeSave: next => { - // Use `this` to get your current object - next(); - }, - - // After saving a value. - // Fired after an `insert` or `update` query. - afterSave: (doc, next) => { - next(); - }, - - // ... and more -}; -``` - -**Path β€”** `./api/user/models/User.settings.json`. - -```json -{ - "connection": "default", - "info": { - "name": "user", - "description": "This represents the User Model" - }, - "attributes": { - "firstname": { - "type": "string" - }, - "lastname": { - "type": "string" - } - } -} -``` - -In this example, there is a `User` model which contains two attributes `firstname` and `lastname`. - -### Where are the models defined? - -The models are defined in each `./api/**/models/` folder. Every JavaScript or JSON file in these folders will be loaded as a model. They are also available through the `strapi.models` and `strapi.api.**.models` global variables. Usable everywhere in the project, they contain the ORM model object that they are refer to. By convention, models' names should be written in lowercase. - -### Attributes - -A model must contain a list of attributes, and each of these attributes must have a type. - -::: note -Please refer to the [models' guide for more information about the attributes](../guides/models.md#define-the-attributes). -::: - -### Relations - -#### Many-to-many - -Many-to-many associations allow to link an entry to many entries. - -::: note -Please refer to the [many-to-many guide](../guides/models.md#many-to-many) -::: - -#### One-to-many - -One-way relationships are useful to link an entry to another. - -::: note -Please refer to the [one-to-many guide](../guides/models.md#one-to-many) -::: - -#### One-to-one - -One-way relationships are useful to link an entry to another. - -::: note -Please refer to the [one-to-one guide](../guides/models.md#one-to-one). -::: - -#### One-way - -One-way relationships are useful to link an entry to another. However, only one of the models can be queried with its populated items. - -::: note -Please refer to the [one-way guide](../guides/models.md#one-way). -::: - -### Lifecycle callbacks - -Lifecycle callbacks are functions triggered at specific moments of the queries. - -::: note -Please refer to the [lifecycle callbacks guide](../guides/models.md#lifecycle-callbacks). -::: - ---- - -## Internationalization and localization - -Internationalization and localization (i18n) allows to adapt the project to different languages and serve the right content to the users. This feature is deeply integrated into the Strapi's core. It will detect the user language preference (locale) and translate the requested content using the translation files. - -::: note -Please refer to the [internationalization's guide](../guides/i18n.md). -::: - ---- - -## Plugin - -A plugin is like a small independent sub-application. It has its own business logic with dedicated models, controllers, services, middlewares or hooks. It can also have it's own UI integrated in the admin panel. - -::: note -Please refer to the [plugins documentation](../plugin-development/quick-start.md) for more information. -::: - ---- - -## Extensions - -In strapi you can install plugins in your `node_modules`. This allows for easy updates and respect best practices. To customize those installed plugins you can work in the `/extensions` directory. It contains all the plugins' customizable files. - -Certain plugins will create files in these folders so you can then modify them. You can also create certain files manually to add some custom configuration for example. - -Depending on the plugins you will find extension documentation directly in the plugin's documentation. - -Extensions folder structure: - -- `extensions/` - - `**`: Plugin Id - - `config`: You can extend a plugin's configuration by add a settings.json file with your custom configuration - - `models`: Contains the plugin's models that you have overwritten (e.g: When you add a relation to the User model) - - `controllers`: You can extend the plugin's controllers by create controllers with the same names and override certain methods - - `services`: You can extend the plugin's services by create services with the same names and override certain methods - ---- - -## Policies - -Policies are functions which have the ability to execute specific logic on each request before it reaches the controller's action. They are mostly used for securing business logic easily. -Each route of the project can be associated to an array of policies. For example, you can create a policy named `isAdmin`, which obviously checks that the request is sent by an admin user, and use it for critical routes. - -Policies can be: - -- `global`: so they can be used within the entire project. -- `scoped`: used by single API or plugin. - -### Where are the policies defined? - -The API and plugins policies (scoped) are defined in each `./api/**/config/policies/` folders and plugins. They are respectively exposed through `strapi.api.**.config.policies` and `strapi.plugins.**.config.policies`. The global policies are defined at `./config/policies/` and accessible via `strapi.config.policies`. - -::: note -Please refer to the [policy guide](../guides/policies.md) -::: - -### Global policies - -Global policies are reusable through the entire app. - -::: note -Please refer to the [global policy guide](../guides/policies.md#global-policies) -::: - -### Scoped policies - -A policy defined in an API or plugin is usable only from this API or plugin. You don't need any prefix to use it. - -::: note -Please refer to the [scoped policy guide](../guides/policies.md#scoped-policies). -::: - -### Plugin policies - -Plugin policies are usable from any app API. - -::: note -Please refer to the [plugin policy guide](../guides/policies.md#plugins). -::: - -## Public Assets - -Public assets are static files such as images, video, css, etc that you want to make accessible to the outside world. Every new project includes by default, a folder named `./public`. - -::: note -Please refer to the [public configuration](../configurations/configurations.md#Application) for more information. -::: - ---- - -## Requests - -The context object (`ctx`) contains all the request's related information. - -::: note -Please refer to the [requests guide](../guides/requests.md) for more information. -::: - ---- - -## Responses - -The context object (`ctx`) contains a list of values and functions useful to manage server responses. - -::: note -Please refer to the [responses guide](../guides/responses.md) for more information. -::: - ---- - -## Routing - -`./api/**/config/routes.json` files define all available routes for the clients. - -::: note -Please refer to the [routing guide](../guides/routing.md) for more information. -::: - ---- - -## Services - -Services are a set of reusable functions. They are particularly useful to respect the DRY (don’t repeat yourself) programming concept and to simplify [controllers](#controllers) logic. - -::: note -Please refer to the [services guide](../guides/services.md) for more information. -::: - ---- - -## Queries - -Queries are a way to implement database agnostic queries in strapi's core or plugins. - -::: note -Please refer to the [queries guide](../guides/queries.md) for more information. -::: - ---- diff --git a/docs/3.0.0-beta.x/configurations/configurations.md b/docs/3.0.0-beta.x/concepts/configurations.md similarity index 85% rename from docs/3.0.0-beta.x/configurations/configurations.md rename to docs/3.0.0-beta.x/concepts/configurations.md index c20721f9df..c897016cc1 100644 --- a/docs/3.0.0-beta.x/configurations/configurations.md +++ b/docs/3.0.0-beta.x/concepts/configurations.md @@ -2,6 +2,10 @@ The main configurations of the project are located in the `./config` directory. Additional configs can be added in the `./api/**/config` folder of each API and plugin by creating JavaScript or JSON files. +::: note +Inside the `/config` folder, every folder will be parsed and injected into the global object `strapi.config`. Let's say, you added a folder named `credentials` with two files `stripe.json` and `paypal.json` into it. The content of these files will be accessible through `strapi.config.credentials.stripe` and `strapi.config.credentials.paypal`. +::: + ## Application Contains the main configurations relative to your project. @@ -45,30 +49,12 @@ Add custom configurations to the project. The content of this file is available These configurations are accessible through `strapi.config.backendURL` and `strapi.config.mainColor`. -## Language - -As described in the [i18n documentation](../guides/i18n.md), Strapi includes an internationalization system. This is especially useful to translate API messages (errors, etc.). - -**Path β€”** `./config/language.json`. - -```json -{ - "enabled": true, - "defaultLocale": "en_us", - "modes": ["query", "subdomain", "cookie", "header", "url", "tld"], - "cookieName": "locale" -} -``` - -- `enabled` (boolean): Enable or disable i18n. Default value: `true`. -- `defaultLocale` (string): Default locale used by the application. Default value: `en_us`. -- `modes` (array): Methods used to detect client language. Default value: `["query", "subdomain", "cookie", "header", "url", "tld"]`. -- `cookieName` (string): Name of the cookie used to store the locale name. Default value: `locale`. - ## Functions The `./config/functions/` folder contains a set of JavaScript files in order to add dynamic and logic based configurations. +All functions that are expose in this folder or in your `./config` folder are accessible via `strapi.config.functions['fileName']();` + ### Bootstrap **Path β€”** `./config/functions/bootstrap.js`. @@ -147,13 +133,17 @@ module.exports = { }; ``` -### Bookshelf, Mongoose +### Database ORM customization -**Path β€”** `./config/functions/bookshelf.js`. -**Path β€”** `./config/functions/mongoose.js`. +- **Path β€”** `./config/functions/bookshelf.js`. +- **Path β€”** `./config/functions/mongoose.js`. When present, they are loaded to let you customize your database connection instance, for example for adding some plugin, customizing parameters, etc. +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "Mongoose" id="mongoose" + As an example, for using the `mongoose-simple-random` plugin for MongoDB, you can register it like this: **Path β€”** `./config/functions/mongoose.js`. @@ -168,6 +158,10 @@ module.exports = (mongoose, connection) => { }; ``` +::: + +::: tab "Bookshelf" id="bookshelf" + Another example would be using the `bookshelf-uuid` plugin for MySQL, you can register it like this: **Path β€”** `./config/functions/bookshelf.js`. @@ -180,26 +174,10 @@ module.exports = (bookshelf, connection) => { }; ``` -## Locales - -The `locales` directory contains the translations of your API. - -Each JSON file located in the folder must have the name of its corresponding translation (eg. `en_US.json`, `fr_FR.json`, etc.). Each line defines a translation key and its corresponding value. - -#### Example - -**Path β€”** `./config/locales/en_US.json`. - -```js -{ - "welcome": "Welcome" -} -``` - -::: note -Take a look at the [internationalization's guide](../guides/i18n.md) for more details. ::: +:::: + ## Environments Most of the application's configurations are defined by environment. It means that you can specify settings for each environment (`development`, `production`, `test`, etc.). @@ -212,22 +190,26 @@ You can access the config of the current environment through `strapi.config.curr **Path β€”** `./config/environments/**/database.json`. +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "Bookshelf" id="bookshelf" + - `defaultConnection` (string): Connection by default for models which are not related to a specific `connection`. Default value: `default`. - `connections` List of all available connections. - `default` - - `connector` (string): Connector used by the current connection. Default value: `strapi-hook-mongoose`. + - `connector` (string): Connector used by the current connection. Will be `strapi-hook-bookshelf`. - `settings` Useful for external session stores such as Redis. - - `client` (string): Database client to create the connection. Default value: `mongo`. + - `client` (string): Database client to create the connection. `sqlite` or `postgres` or `mysql`. - `host` (string): Database host name. Default value: `localhost`. - - `port` (integer): Database port. Default value: `27017`. - - `database` (string): Database name. Default value: `development`. + - `port` (integer): Database port. + - `database` (string): Database name. - `username` (string): Username used to establish the connection. - `password` (string): Password used to establish the connection. - `options` (object): List of additional options used by the connector. - - `timezone` (string): Set the default behavior for local time (used only for a SQL database). Default value: `utc`. - - `schema` (string): Set the default database schema. (used only for Postgres DB) + - `timezone` (string): Set the default behavior for local time. Default value: `utc`. + - `schema` (string): Set the default database schema. **Used only for Postgres DB** + - `ssl` (boolean): For ssl database connection. - `options` Options used for database connection. - - `ssl` (boolean): For ssl database connection. - `debug` (boolean): Show database exchanges and errors. - `autoMigration` (boolean): To disable auto tables/columns creation for SQL database. - `pool` Options used for database connection pooling. For more information look at [Knex's pool config documentation](https://knexjs.org/#Installation-pooling). @@ -239,46 +221,70 @@ You can access the config of the current environment through `strapi.config.curr - `reapIntervalMillis` (integer): How often to check for idle connections in milliseconds. Default value: `1000` (1 second). - `createRetryIntervalMillis` (integer): How long to idle after a failed create before trying again in milliseconds. Default value: `200`. +::: + +::: tab "Mongoose" id="mongoose" + +- `defaultConnection` (string): Connection by default for models which are not related to a specific `connection`. Default value: `default`. +- `connections` List of all available connections. + - `default` + - `connector` (string): Connector used by the current connection. Will be `strapi-hook-mongoose`. + - `settings` Useful for external session stores such as Redis. + - `client` (string): Database client to create the connection. Will be `mongo`. + - `host` (string): Database host name. Default value: `localhost`. + - `port` (integer): Database port. Default value: `27017`. + - `database` (string): Database name. + - `username` (string): Username used to establish the connection. + - `password` (string): Password used to establish the connection. + - `options` Options used for database connection. + - `ssl` (boolean): For ssl database connection. + - `debug` (boolean): Show database exchanges and errors. + - `authenticationDatabase` (string): Connect with authentication. + +::: + +:::: + #### Example **Path β€”** `./config/environments/**/database.json`. +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "Postgres" id="postgres" + ```json { "defaultConnection": "default", "connections": { "default": { - "connector": "strapi-hook-mongoose", - "settings": { - "client": "mongo", - "host": "localhost", - "port": 27017, - "database": "development", - "username": "fooUsername", - "password": "fooPwd" - }, - "options": { - "authenticationDatabase": "", - "ssl": true, - "minimize": true - } - }, - "postgres": { "connector": "strapi-hook-bookshelf", "settings": { "client": "postgres", "host": "localhost", "port": 5432, "username": "${process.env.USERNAME}", - "password": "${process.env.PWD}", + "password": "${process.env.PASSWORD}", "database": "strapi", "schema": "public" }, "options": { "debug": true } - }, - "mysql": { + } + } +} +``` + +::: + +::: tab "MySQL" id="mysql" + +```json +{ + "defaultConnection": "default", + "connections": { + "default": { "connector": "strapi-hook-bookshelf", "settings": { "client": "mysql", @@ -286,10 +292,22 @@ You can access the config of the current environment through `strapi.config.curr "port": 5432, "username": "strapi", "password": "root", - "database": "" + "database": "strapi" }, "options": {} - }, + } + } +} +``` + +::: + +::: tab "SQLite" id="sqlite" + +```json +{ + "defaultConnection": "default", + "connections": { "sqlite": { "connector": "strapi-hook-bookshelf", "settings": { @@ -304,6 +322,37 @@ You can access the config of the current environment through `strapi.config.curr } ``` +::: + +::: tab "Mongo" id="mongo" + +```json +{ + "defaultConnection": "default", + "connections": { + "default": { + "connector": "strapi-hook-mongoose", + "settings": { + "client": "mongo", + "host": "localhost", + "port": 27017, + "database": "strapi", + "username": "", + "password": "" + }, + "options": { + "authenticationDatabase": "", + "ssl": true + } + } + } +} +``` + +::: + +:::: + ::: note Please refer to the [dynamic configurations section](#dynamic-configurations) to use global environment variable to configure the databases. ::: @@ -461,7 +510,7 @@ In any JSON configurations files in your project, you can inject dynamic values You can't execute functions inside the curly braces. Only strings are allowed. ::: -## Database configuration +## Configuration in database Configuration files are not multi server friendly. So we created a data store for config you will want to update in production. diff --git a/docs/3.0.0-beta.x/guides/controllers.md b/docs/3.0.0-beta.x/concepts/controllers.md similarity index 73% rename from docs/3.0.0-beta.x/guides/controllers.md rename to docs/3.0.0-beta.x/concepts/controllers.md index ee60a9c913..25f72f0acb 100644 --- a/docs/3.0.0-beta.x/guides/controllers.md +++ b/docs/3.0.0-beta.x/concepts/controllers.md @@ -1,6 +1,23 @@ # Controllers -See the [controllers' concepts](../concepts/concepts.md#controllers) for a simple overview. +## Concept + +Controllers are JavaScript files which contain a set of methods called **actions** reached by the client according to the requested route. It means that every time a client requests the route, the action performs the business logic coded and sends back the response. They represent the _C_ in the _MVC_ pattern. In most cases, the controllers will contain the bulk of a project's business logic. + +```js +module.exports = { + // GET /hello + index: async ctx => { + ctx.send('Hello World!'); + }, +}; +``` + +In this example, any time a web browser is pointed to the `/hello` URL on your app, the page will display the text: `Hello World!`. + +### Where are the controllers defined? + +The controllers are defined in each `./api/**/controllers/` folders. Every JavaScript file put in these folders will be loaded as a controller. They are also available through the `strapi.controllers` and `strapi.api.**.controllers` global variables. By convention, controllers' names should be Pascal-cased, so that every word in the file (include the first one) is capitalized `User.js`, `LegalEntity.js`. ## Core controllers @@ -26,6 +43,10 @@ const { parseMultipartData, sanitizeEntity } = require('strapi-utils'); - `parseMultipartData`: This function parses strapi's formData format. - `sanitizeEntity`: This function removes all private fields from the model and its relations. +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "find" id="find" + #### `find` ```js @@ -49,6 +70,10 @@ module.exports = { }; ``` +::: + +::: tab "findOne" id="findone" + #### `findOne` ```js @@ -66,6 +91,10 @@ module.exports = { }; ``` +::: + +::: tab "count" id="count" + #### `count` ```js @@ -85,6 +114,10 @@ module.exports = { }; ``` +::: + +::: tab "create" id="create" + #### `create` ```js @@ -108,6 +141,10 @@ module.exports = { }; ``` +::: + +::: tab "update" id="update" + #### `update` ```js @@ -132,6 +169,10 @@ module.exports = { }; ``` +::: + +::: tab "delete" id="delete" + #### `delete` ```js @@ -149,6 +190,10 @@ module.exports = { }; ``` +::: + +:::: + ## Custom controllers You can also create custom controllers to build your own business logic and API endpoints. @@ -163,7 +208,7 @@ There are two ways to create a controller: ### Adding Endpoints Each controller’s action must be an `async` function. -Every action receives a `context` (`ctx`) object as first parameter containing the [request context](../guides/requests.md) and the [response context](../guides/responses.md). +Every action receives a `context` (`ctx`) object as first parameter containing the [request context](./requests-responses.md) and the [response context](./requests-responses.md). ::: note Every action must be referenced by a route. diff --git a/docs/3.0.0-beta.x/concepts/customization.md b/docs/3.0.0-beta.x/concepts/customization.md new file mode 100644 index 0000000000..2031a9672e --- /dev/null +++ b/docs/3.0.0-beta.x/concepts/customization.md @@ -0,0 +1,29 @@ +# Customization + +## Plugin extensions + +In strapi you can install plugins in your `node_modules`. This allows for easy updates and respect best practices. To customize those installed plugins you can work in the `/extensions` directory. It contains all the plugins' customizable files. + +Some plugins will create files in these folders so you can then modify them. You can also create certain files manually to add some custom configuration for example. + +Extensions folder structure: + +- `extensions/` + - `**`: Plugin Id + - `admin`: You can extend a plugin's admin by creating a file with the same name, doing so will override the original one. + - `config`: You can extend a plugin's configuration by adding a settings.json file with your custom configuration + - `models`: Contains the plugin's models that you have overwritten (e.g: When you add a relation to the User model) + - `controllers`: You can extend the plugin's controllers by creating controllers with the same names and override certain methods + - `services`: You can extend the plugin's services by creating services with the same names and override certain methods + +## Admin extension + +The admin panel is a `node_module` that is similar to a plugin but the slight difference that it encapsulate all the installed plugin of your application. + +To extend this package you will have to create an `admin` folder at the root of your application. + +In this folder you will be able to override admin flies and functions. + +::: note +For more details, visit the [admin panel constomization](../admin-panel/customization.md) documentation. +::: diff --git a/docs/3.0.0-beta.x/concepts/file-structure.md b/docs/3.0.0-beta.x/concepts/file-structure.md new file mode 100644 index 0000000000..891efb2731 --- /dev/null +++ b/docs/3.0.0-beta.x/concepts/file-structure.md @@ -0,0 +1,37 @@ +# Files structure + +By default, your project's structure will look like this: + +- `/api`: contains the business logic of your project split in sub-folder per API. + - `**` + - `/config`: contains the API's configurations ([`routes`](./routing.md), [`policies`](./policies.md), etc). + - [`/controllers`](./controllers.md): contains the API's custom controllers. + - [`/models`](./models.md): contains the API's models. + - [`/services`](./services.md): contains the API's custom services. +- `/node_modules`: contains the npm's packages used by the project. +- [`/config`](./configurations.md) + - [`/environments`](./configurations.md#environments): contains the project's configurations per environment. + - `/**` + - `/development` + - [`custom.json`](./configurations.md#custom): contains the custom configurations for this environment. + - [`database.json`](./configurations.md#database): contains the database connections for this environment. + - [`request.json`](./configurations.md#request): contains the request settings for this environment. + - [`response.json`](./configurations.md#response): contains the response settings for this environment. + - [`server.json`](./configurations.md#server): contains the server settings for this environment. + - `/production` + - `/staging` + - [`/functions`](./configurations.md#functions): contains lifecycle or generic functions of the project. + - [`bootstrap.js`](./configurations.md#bootstrap): contains the code executed at the application start. + - [`cron.js`](./configurations.md#cron-tasks): contains the cron tasks. + - [`application.json`](./configurations.md#application): contains the general configurations of the project. + - [`custom.json`](./configurations.md#custom): contains the custom configurations of the project. + - [`hook.json`](./configurations.md#hook): contains the hook settings of the project. + - [`middleware.json`](./configurations.md#middleware): contains the middleware settings of the project. +- [`/hooks`](./hooks.md): contains the custom hooks of the project. +- [`/middlewares`](./middlewares.md): contains the custom middlewares of the project. +- [`/admin`](../admin-panel/customization.md): contains your admin customization files. +- [`/extensions`](./customization.md): contains the files to extend installed plugins. +- [`/plugins`](./plugins.md): contains your local plugins. +- [`/public`](./public-assets.md): contains the file accessible to the outside world. +- `/build`: contains your admin panel UI build. +- `/.cache`: contains files used to build your admin panel. diff --git a/docs/3.0.0-beta.x/advanced/hooks.md b/docs/3.0.0-beta.x/concepts/hooks.md similarity index 100% rename from docs/3.0.0-beta.x/advanced/hooks.md rename to docs/3.0.0-beta.x/concepts/hooks.md diff --git a/docs/3.0.0-beta.x/advanced/logging.md b/docs/3.0.0-beta.x/concepts/logging.md similarity index 100% rename from docs/3.0.0-beta.x/advanced/logging.md rename to docs/3.0.0-beta.x/concepts/logging.md diff --git a/docs/3.0.0-beta.x/advanced/middlewares.md b/docs/3.0.0-beta.x/concepts/middlewares.md similarity index 100% rename from docs/3.0.0-beta.x/advanced/middlewares.md rename to docs/3.0.0-beta.x/concepts/middlewares.md diff --git a/docs/3.0.0-beta.x/guides/models.md b/docs/3.0.0-beta.x/concepts/models.md similarity index 83% rename from docs/3.0.0-beta.x/guides/models.md rename to docs/3.0.0-beta.x/concepts/models.md index 6f4afac595..ac04814cc8 100644 --- a/docs/3.0.0-beta.x/guides/models.md +++ b/docs/3.0.0-beta.x/concepts/models.md @@ -1,6 +1,55 @@ # Models -See the [models' concepts](../concepts/concepts.md#models) for details. +## Concept + +Models are a representation of the database's structure and lifecycle. They are split into two separate files. A JavaScript file that contains the lifecycle callbacks, and a JSON one that represents the data stored in the database and their format. The models also allow you to define the relationships between them. + +**Path β€”** `./api/user/models/User.js`. + +```js +module.exports = { + // Before saving a value. + // Fired before an `insert` or `update` query. + beforeSave: next => { + // Use `this` to get your current object + next(); + }, + + // After saving a value. + // Fired after an `insert` or `update` query. + afterSave: (doc, next) => { + next(); + }, + + // ... and more +}; +``` + +**Path β€”** `./api/user/models/User.settings.json`. + +```json +{ + "connection": "default", + "info": { + "name": "user", + "description": "This represents the User Model" + }, + "attributes": { + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + } + } +} +``` + +In this example, there is a `User` model which contains two attributes `firstname` and `lastname`. + +### Where are the models defined? + +The models are defined in each `./api/**/models/` folder. Every JavaScript or JSON file in these folders will be loaded as a model. They are also available through the `strapi.models` and `strapi.api.**.models` global variables. Usable everywhere in the project, they contain the ORM model object that they are refer to. By convention, models' names should be written in lowercase. ## How to create a model? @@ -19,7 +68,32 @@ This will create two files located at `./api/user/models`: when you create a new API using the CLI (`strapi generate:api `), a model is automatically created. ::: -## Model Information +## Model settings + +Additional settings can be set on models: + +- `connection` (string) - Connection's name which must be used. Default value: `default`. +- `collectionName` (string) - Collection's name (or table's name) in which the data should be stored. +- `globalId` (string) -Global variable name for this model (case-sensitive). + +**Path β€”** `User.settings.json`. + +```json +{ + "connection": "mongo", + "collectionName": "Users_v1", + "globalId": "Users", + "attributes": {} +} +``` + +In this example, the model `User` will be accessible through the `Users` global variable. The data will be stored in the `Users_v1` collection or table and the model will use the `mongo` connection defined in `./config/environments/**/database.json` + +::: note +The `connection` value can be changed whenever you want, but you should be aware that there is no automatic data migration process. Also if the new connection doesn't use the same ORM you will have to rewrite your queries. +::: + +## Model information The info key on the model-json states information about the model. This information is used in the admin interface, when showing the model. @@ -27,6 +101,17 @@ The info key on the model-json states information about the model. This informat - `description`: The description of the model. - `mainField`: Determines which model-attribute is shown when displaying the model. +**Path β€”** `User.settings.json`. + +```json +{ + "info": { + "name": "user", + "description": "" + } +} +``` + ## Model options The options key on the model-json states. @@ -34,7 +119,17 @@ The options key on the model-json states. - `idAttribute`: This tells the model which attribute to expect as the unique identifier for each database row (typically an auto-incrementing primary key named 'id'). _Only valid for strapi-hook-bookshelf_ - `idAttributeType`: Data type of `idAttribute`, accepted list of value below. _Only valid for strapi-hook-bookshelf_ - `timestamps`: This tells the model which attributes to use for timestamps. Accepts either `boolean` or `Array` of strings where first element is create date and second element is update date. Default value when set to `true` for Bookshelf is `["created_at", "updated_at"]` and for MongoDB is `["createdAt", "updatedAt"]`. -- `uuid` : Boolean to enable UUID support on MySQL, you will need to set the `idAttributeType` to `uuid` as well and install the `bookshelf-uuid` package. To load the package you can see [this example](../configurations/configurations.md#bookshelf-mongoose). +- `uuid` : Boolean to enable UUID support on MySQL, you will need to set the `idAttributeType` to `uuid` as well and install the `bookshelf-uuid` package. To load the package you can see [this example](./configurations.md#bookshelf-mongoose). + +**Path β€”** `User.settings.json`. + +```json +{ + "options": { + "timestamps": true + } +} +``` ## Define the attributes @@ -122,11 +217,15 @@ To improve the Developer eXperience when developing or using the administration ## Relations -Refer to the [relations concept](../concepts/concepts.md#relations) for more information about relations type. +Relations let your create links (relations) between your Content Types. -### One-way +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" -Refer to the [one-way concept](../concepts/concepts.md#one-way) for information. +::: tab "One-Way" id="one-way" + +### One-Way + +One-way relationships are useful to link an entry to another. However, only one of the models can be queried with its populated items. #### Example @@ -173,9 +272,13 @@ xhr.send( ); ``` -### One-to-one +::: -Refer to the [one-to-one concept](../concepts/concepts.md#one-to-one) for information. +::: tab "One-to-One" id="one-to-one" + +### One-to-One + +One-to-One relationships are usefull when you have one entity that could be linked to only one other entity. And vis versa. #### Example @@ -250,9 +353,13 @@ xhr.send( ); ``` -### One-to-many +::: -Refer to the [one-to-many concept](../concepts/concepts.md#one-to-many) for more information. +::: tab "One-to-Many" id="one-to-many" + +### One-to-Many + +One-to-Many relationships are usefull when an entry can be liked to multiple entries of an other Content Type. And an entry of the other Content Type can be linked to only one entry. #### Example @@ -337,9 +444,13 @@ xhr.send( ); ``` -### Many-to-many +::: -Refer to the [many-to-many concept](../concepts/concepts.md#many-to-many). +::: tab "Many-to-Many" id="many-to-many" + +### Many-to-Many + +One-to-Many relationships are usefull when an entry can be liked to multiple entries of an other Content Type. And an entry of the other Content Type can be linked to many entries. #### Example @@ -359,9 +470,8 @@ A `product` can be related to many `categories`, so a `category` can have many ` } ``` -::: note +**NOTE**: (NoSQL databases only) The `dominant` key defines which table/collection should store the array that defines the relationship. Because there are no join tables in NoSQL, this key is required for NoSQL databases (ex: MongoDB). -::: **Path β€”** `./api/category/models/Category.settings.json`. @@ -420,19 +530,20 @@ xhr.send( ); ``` +::: + +::: tab "Polymorphic" id="polymorphic" + ### Polymorphic The polymorphic relationships are the solution when you don't know which kind of model will be associated to your entry. A common use case is an `Image` model that can be associated to many others kind of models (Article, Product, User, etc). -Refer to the [upload plugin](../plugins/upload.md) polymorphic implementation for more information. - #### Single vs Many Let's stay with our `Image` model which might belongs to **a single `Article` or `Product` entry**. -::: note +**NOTE**: In other words, it means that an `Image` entry can be associated to one entry. This entry can be a `Article` or `Product` entry. -::: **Path β€”** `./api/image/models/Image.settings.json`. @@ -449,9 +560,8 @@ In other words, it means that an `Image` entry can be associated to one entry. T Also, our `Image` model which might belongs to **many `Article` or `Product` entries**. -::: note +**NOTE**: In other words, it means that an `Article` entry can relate to the same image as a `Product` entry. -::: **Path β€”** `./api/image/models/Image.settings.json`. @@ -663,9 +773,8 @@ CREATE TABLE `image` ( ) ``` -::: note +**NOTE**: If you've overridden the default table name given by Strapi by using the `collectionName` attribute. Use the value set in the `collectionName` to name the table. -::: The second table will allow us to associate one or many others entries to the `Image` model. The name of the table is the same as the previous one with the suffix `_morph`. @@ -694,42 +803,84 @@ CREATE TABLE `image_morph` ( | 2 | 4738 | 58 | article | avatar | | 3 | 1738 | 71 | article | avatar | +::: + +:::: + ## Lifecycle callbacks -Refer to the [lifecycle callbacks concepts](../concepts/concepts.md#lifecycle-callbacks) for information. +::: warning +The life cycle functions are based on the ORM life cycle and not on the strapi request. +We are currently woking on it to make it easier to use and understand. +Please check [this issue](https://github.com/strapi/strapi/issues/1443) on GitHub. +::: The following events are available by default: -Callbacks on `save`: +Callbacks on: + +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "save" id="save" + +`save` - beforeSave - afterSave -Callbacks on `fetch`: +::: + +::: tab "fetch" id="fetch" + +`fetch` - beforeFetch - afterFetch -Callbacks on `fetchAll`: +::: tab "fetchAll" id="fetchall" + +`fetchAll` - beforeFetchAll - afterFetchAll -Callbacks on `create`: +::: + +::: tab "create" id="create" + +`create` - beforeCreate - afterCreate -Callbacks on `update`: +::: + +::: tab "update" id="update" + +`update` - beforeUpdate - afterUpdate -Callbacks on `destroy`: +::: + +::: tab "destroy" id="destroy" + +destroy` - beforeDestroy - afterDestroy +::: + +:::: + +### Example + +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "Mongoose" id="mongoose" + #### Mongoose The entry is available through the `model` parameter @@ -753,6 +904,10 @@ module.exports = { }; ``` +::: + +::: tab "Bookshelf" id="bookshelf" + #### Bookshelf Each of these functions receives a three parameters `model`, `attrs` and `options`. You have to return a Promise. @@ -776,27 +931,6 @@ module.exports = { }; ``` -## Settings - -Additional settings can be set on models: - -- `connection` (string) - Connection's name which must be used. Default value: `default`. -- `collectionName` (string) - Collection's name (or table's name) in which the data should be stored. -- `globalId` (string) -Global variable name for this model (case-sensitive). - -**Path β€”** `User.settings.json`. - -```json -{ - "connection": "mongo", - "collectionName": "Users_v1", - "globalId": "Users", - "attributes": {} -} -``` - -In this example, the model `User` will be accessible through the `Users` global variable. The data will be stored in the `Users_v1` collection or table and the model will use the `mongo` connection defined in `./config/environments/**/database.json` - -::: note -The `connection` value can be changed whenever you want, but you should be aware that there is no automatic data migration process. Also if the new connection doesn't use the same ORM you will have to rewrite your queries. ::: + +::::: diff --git a/docs/3.0.0-beta.x/guides/parameters.md b/docs/3.0.0-beta.x/concepts/parameters.md similarity index 92% rename from docs/3.0.0-beta.x/guides/parameters.md rename to docs/3.0.0-beta.x/concepts/parameters.md index b3866454b4..c6cf7571fd 100644 --- a/docs/3.0.0-beta.x/guides/parameters.md +++ b/docs/3.0.0-beta.x/concepts/parameters.md @@ -1,12 +1,12 @@ # Prameters -## Programmatic usage +## Concept You can use `strapi-utils` to parse the query params to Strapi's standards filters programmatically if you need it. -### Extracting requests filters +## Extracting requests filters -To transform the query params to Strapi's standard filters a request, you can use the `convertRestQueryParams` function from [strapi-utils](../global-strapi/reference.md#strapiutils). +To transform the query params to Strapi's standard filters a request, you can use the `convertRestQueryParams` function from [strapi-utils](../global-strapi/api-reference.md#strapiutils). ```js const { convertRestQueryParams } = require('strapi-utils'); @@ -32,7 +32,7 @@ module.exports = { }; ``` -### Querying data +## Querying data We added a new API to query data base on the new filters API. @@ -53,15 +53,15 @@ module.exports = { }; ``` -#### SQL databases (strapi-hook-bookshelf) +### SQL databases (strapi-hook-bookshelf) If you are using a SQL database, calling `buildQuery` will return a [`Bookshelf Query`](https://bookshelfjs.org/api.html) on which you can call other functions (e.g `count`) -#### Mongo database +### Mongo database If you are using a mongo database calling `buildQuery` returns either a [`Mongoose Query`](https://mongoosejs.com/docs/api.html#Query) or a custom query when used with deep filtering. -##### Custom Query +#### Custom Query When using the deep filtering feature with mongo, we build an aggregation query to avoid too many round-trips with the mongo DB. Doing that means we don't get a Mongoose object as a response but instead a plain JS Object. This brings a some issues like no virtual fields available and no Mongoose lifecycles. diff --git a/docs/3.0.0-beta.x/concepts/plugins.md b/docs/3.0.0-beta.x/concepts/plugins.md new file mode 100644 index 0000000000..87bf3a42cc --- /dev/null +++ b/docs/3.0.0-beta.x/concepts/plugins.md @@ -0,0 +1,7 @@ +# Plugins + +A plugin is like a small independent sub-application. It has its own business logic with dedicated models, controllers, services, middlewares or hooks. It can also have it's own UI integrated in the admin panel. + +::: note +Please refer to the [plugins documentation](../plugin-development/quick-start.md) for more information. +::: diff --git a/docs/3.0.0-beta.x/guides/policies.md b/docs/3.0.0-beta.x/concepts/policies.md similarity index 69% rename from docs/3.0.0-beta.x/guides/policies.md rename to docs/3.0.0-beta.x/concepts/policies.md index e27ae47174..32ef2e437d 100644 --- a/docs/3.0.0-beta.x/guides/policies.md +++ b/docs/3.0.0-beta.x/concepts/policies.md @@ -1,6 +1,30 @@ # Policies -See the [policies' concepts](../concepts/concepts.md#policies) for details. +## Concept + +Policies are functions which have the ability to execute specific logic on each request before it reaches the controller's action. They are mostly used for securing business logic easily. +Each route of the project can be associated to an array of policies. For example, you can create a policy named `isAdmin`, which obviously checks that the request is sent by an admin user, and use it for critical routes. + +Policies can be: + +- `global`: so they can be used within the entire project. +- `scoped`: used by single API or plugin. + +### Where are the policies defined? + +The API and plugins policies (scoped) are defined in each `./api/**/config/policies/` folders and plugins. They are respectively exposed through `strapi.api.**.config.policies` and `strapi.plugins.**.config.policies`. The global policies are defined at `./config/policies/` and accessible via `strapi.config.policies`. + +### Global policies + +Global policies are reusable through the entire app. + +### Scoped policies + +A policy defined in an API or plugin is usable only from this API or plugin. You don't need any prefix to use it. + +### Plugin policies + +Plugin policies are usable from any app API. ## How to create a policy? @@ -30,17 +54,15 @@ You can access to any controllers, services or models thanks to the global varia ## Usage -To apply policies to a route, you need to associate an array of policies to it. As explained in the [policies' concepts](../concepts/concepts.md#policies), there are two kinds of policies: global or scoped. +To apply policies to a route, you need to associate an array of policies to it. There are two kinds of policies: global or scoped. ### Global policies -Refer to the [concept](../concepts/concepts.md#policies) for details. - The global policies can be associated to any routes in your project. **Path β€”** `./api/restaurant/routes.json`. -```js +```json { "routes": [ { @@ -48,9 +70,7 @@ The global policies can be associated to any routes in your project. "path": "/restaurants", "handler": "Restaurant.find", "config": { - "policies": [ - "global.isAuthenticated" - ] + "policies": ["global.isAuthenticated"] } } ] @@ -65,11 +85,11 @@ You can put as much policy you want in this array. However be careful about the ### Plugins policies -Plugins can add and expose policies into your app. For example, the plugin `Auth` (COMING SOON) comes with several useful policies to ensure that the user is well authenticated or has the rights to perform an action. +Plugins can add and expose policies into your app. For example, the plugin **Users & Permissions** comes with useful policies to ensure that the user is well authenticated or has the rights to perform an action. **Path β€”** `./api/restaurant/config/routes.json`. -```js +```json { "routes": [ { @@ -77,9 +97,7 @@ Plugins can add and expose policies into your app. For example, the plugin `Auth "path": "/restaurants", "handler": "Restaurant.find", "config": { - "policies": [ - "plugins.users-permissions.isAuthenticated" - ] + "policies": ["plugins.users-permissions.isAuthenticated"] } } ] @@ -107,7 +125,7 @@ module.exports = async (ctx, next) => { **Path β€”** `./api/restaurant/config/routes.json`. -```js +```json { "routes": [ { @@ -115,9 +133,7 @@ module.exports = async (ctx, next) => { "path": "/restaurants", "handler": "Restaurant.find", "config": { - "policies": [ - "isAdmin" - ] + "policies": ["isAdmin"] } } ] diff --git a/docs/3.0.0-beta.x/guides/public-assets.md b/docs/3.0.0-beta.x/concepts/public-assets.md similarity index 71% rename from docs/3.0.0-beta.x/guides/public-assets.md rename to docs/3.0.0-beta.x/concepts/public-assets.md index 4049d2a3e4..7781c4b859 100644 --- a/docs/3.0.0-beta.x/guides/public-assets.md +++ b/docs/3.0.0-beta.x/concepts/public-assets.md @@ -1,6 +1,6 @@ # Public Assets -See the [public assets concepts](../concepts/concepts.md#public-assets) for details. +Public assets are static files such as images, video, css, etc that you want to make accessible to the outside world. Every new project includes by default, a folder named `./public`. Because an API may need to serve static assets, every new Strapi project includes by default, a folder named `/public`. Any file located in this directory is accessible if the request's path doesn't match any other defined route and if it matches a public file name. @@ -16,4 +16,4 @@ An image named `company-logo.png` in `./public/` is accessible through `/company The dotfiles are not exposed. It means that every files with the names start by `.` such as `.htaccess` or `.gitignore` are not served. ::: -Refer to the [public assets configurations](../configurations/configurations.md#Application) for more information. +Refer to the [public assets configurations](./configurations.md#Application) for more information. diff --git a/docs/3.0.0-beta.x/guides/queries.md b/docs/3.0.0-beta.x/concepts/queries.md similarity index 92% rename from docs/3.0.0-beta.x/guides/queries.md rename to docs/3.0.0-beta.x/concepts/queries.md index 155ac643ed..b8ebe15a94 100644 --- a/docs/3.0.0-beta.x/guides/queries.md +++ b/docs/3.0.0-beta.x/concepts/queries.md @@ -8,38 +8,9 @@ These queries handle for you specific Strapi features like `groups`, `filters` a ## API Reference -### `findOne` +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" -This method returns the first entry matching some basic params. -You can also pass a populate option to specify which relations you want to be populated. - -#### Examples - -**Find one by id**: - -```js -strapi.query('restaurant').findOne({ id: 1 }); -``` - -**Find one by name**: - -```js -strapi.query('restaurant').findOne({ name: 'restaurant name' }); -``` - -**Find one by name and creation_date**: - -```js -strapi - .query('restaurant') - .findOne({ name: 'restaurant name', date: '2019-01-01T00:00:00Z' }); -``` - -**Find one by id and populate a relation** - -```js -strapi.query('restaurant').findOne({ id: 1 }, ['category', 'category.name']); -``` +::: tab "find" id="find" ### `find` @@ -76,6 +47,47 @@ strapi .find({ id_nin: [1], _start: 10 }, ['category', 'category.name']); ``` +::: + +::: tab "findOne" id="findone" + +### `findOne` + +This method returns the first entry matching some basic params. +You can also pass a populate option to specify which relations you want to be populated. + +#### Examples + +**Find one by id**: + +```js +strapi.query('restaurant').findOne({ id: 1 }); +``` + +**Find one by name**: + +```js +strapi.query('restaurant').findOne({ name: 'restaurant name' }); +``` + +**Find one by name and creation_date**: + +```js +strapi + .query('restaurant') + .findOne({ name: 'restaurant name', date: '2019-01-01T00:00:00Z' }); +``` + +**Find one by id and populate a relation** + +```js +strapi.query('restaurant').findOne({ id: 1 }, ['category', 'category.name']); +``` + +::: + +::: tab "create" id="create" + ### `create` Creates an entry in the database and returns the entry. @@ -105,6 +117,10 @@ strapi.query('restaurant').create({ }); ``` +::: + +::: tab "update" id="update" + ### `update` Updates an entry in the database and returns the entry. @@ -180,6 +196,10 @@ strapi.query('restaurant').update( ); ``` +::: + +::: tab "delete" id="delete" + ### `delete` Deletes and entry and return its value before deletion. @@ -199,6 +219,10 @@ strapi.query('restaurant').delete({ id: 1 }); strapi.query('restaurant').delete({ district: '_18th' }); ``` +::: + +::: tab "count" id="count" + ### `count` Returns the count of entries matching Strapi filters. @@ -223,6 +247,10 @@ strapi.query('restaurant').count({ name_contains: 'food' }); strapi.query('restaurant').count({ date_lt: '2019-08-01T00:00:00Z' }); ``` +::: + +::: tab "search" id="search" + ### `search` Returns entries based on a search on all fields allowing it. (this feature will return all entries on sqlite). @@ -245,6 +273,10 @@ strapi .search({ _q: 'my search query', _limit: 100, _sort: 'date:desc' }); ``` +::: + +::: tab "countSearch" id="countsearch" + ### `countSearch` Returns the total count of entries based on a search. (this feature will return all entries on sqlite). @@ -255,6 +287,10 @@ Returns the total count of entries based on a search. (this feature will return strapi.query('restaurant').countSearch({ _q: 'my search query' }); ``` +::: + +:::: + ## Custom Queries When you want to customize your services or create new ones you will have to build your queries with the underlying ORM models. @@ -267,6 +303,10 @@ strapi.query(modelName, plugin).model; Then you can run any queries available on the model. You should refer to the specific ORM documentation for more details: +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "Bookshelf" id="bookshelf" + ### Bookshelf Documentation: [https://bookshelfjs.org/](https://bookshelfjs.org/) @@ -284,6 +324,10 @@ const result = await strapi const fields = result.toJSON(); ``` +::: + +::: tab "Mongoose" id="mongoose" + ### Mongoose Documentation: [https://mongoosejs.com/](https://mongoosejs.com/) @@ -297,3 +341,7 @@ const result = strapi.query('restaurant').model.find({ const fields = result.toObject(); ``` + +::: + +:::: diff --git a/docs/3.0.0-beta.x/concepts/requests-responses.md b/docs/3.0.0-beta.x/concepts/requests-responses.md new file mode 100644 index 0000000000..9cd71d3085 --- /dev/null +++ b/docs/3.0.0-beta.x/concepts/requests-responses.md @@ -0,0 +1,13 @@ +# Requests and responses + +## Request + +The context object (`ctx`) contains all the requests related information. They are accessible through `ctx.request`, from [controllers](controllers.md) and [policies](policies.md). + +For more information, please refer to the [Koa request documentation](http://koajs.com/#request). + +## Responses + +The context object (`ctx`) contains a list of values and functions useful to manage server responses. They are accessible through `ctx.response`, from [controllers](controllers.md) and [policies](policies.md). + +For more information, please refer to the [Koa response documentation](http://koajs.com/#response). diff --git a/docs/3.0.0-beta.x/guides/routing.md b/docs/3.0.0-beta.x/concepts/routing.md similarity index 73% rename from docs/3.0.0-beta.x/guides/routing.md rename to docs/3.0.0-beta.x/concepts/routing.md index 9d847b3c7e..4d2664cce0 100644 --- a/docs/3.0.0-beta.x/guides/routing.md +++ b/docs/3.0.0-beta.x/concepts/routing.md @@ -1,6 +1,10 @@ # Routing -See the [routing's concept](../concepts/concepts.md#routing) for details. +## Concept + +`./api/**/config/routes.json` files define all available endpoints for the clients. + +By default Strapi generate endpoints for all your Content Type. More information in the [Content API](../content-api/api-endpoints.md) documentation. ## How to create a route? @@ -14,12 +18,18 @@ You have to edit the `routes.json` file in one of your APIs folders (`./api/**/c { "method": "GET", "path": "/restaurants", - "handler": "Restaurant.find" + "handler": "Restaurant.find", + "config": { + "policies": [] + } }, { "method": ["POST", "PUT"], "path": "/restaurants/:id", - "handler": "Restaurant.createOrUpdate" + "handler": "Restaurant.createOrUpdate", + "config": { + "policies": [] + } }, { "method": "POST", @@ -37,7 +47,7 @@ You have to edit the `routes.json` file in one of your APIs folders (`./api/**/c - `path` (string): URL starting with `/` (ex: `/restaurants`) - `handler` (string): Action to executed when the route is hit following this syntax `.` - `config` - - `policies` (array): Array of policies names or path ([see more](../guides/policies.md)) + - `policies` (array): Array of policies names or path ([see more](./policies.md)) - `prefix` (string): Set a prefix to this route. Also, it will be loaded into the main router (useful feature for plugin) ## Dynamic parameters @@ -50,12 +60,18 @@ The router used by Strapi allows you to create dynamic routes where you can use { "method": "GET", "path": "/restaurants/:category/:id", - "handler": "Restaurant.findOneByCategory" + "handler": "Restaurant.findOneByCategory", + "config": { + "policies": [] + } }, { "method": "GET", "path": "/restaurants/:region(\\d{2}|\\d{3})/:id", // Only match when the first parameter contains 2 or 3 digits. - "handler": "Restaurant.findOneByRegion" + "handler": "Restaurant.findOneByRegion", + "config": { + "policies": [] + } } ] } @@ -71,7 +87,10 @@ By default, the main route of the server `/` is pointed to the `/public/index.ht { "method": "GET", "path": "/", - "handler": "Controller.name" + "handler": "Controller.name", + "config": { + "policies": [] + } } ] } diff --git a/docs/3.0.0-beta.x/guides/services.md b/docs/3.0.0-beta.x/concepts/services.md similarity index 89% rename from docs/3.0.0-beta.x/guides/services.md rename to docs/3.0.0-beta.x/concepts/services.md index 731546ed37..f7a5ed6985 100644 --- a/docs/3.0.0-beta.x/guides/services.md +++ b/docs/3.0.0-beta.x/concepts/services.md @@ -1,6 +1,8 @@ # Services -See the [services concept](../concepts/concepts.md#services) for an overview. +## Concept + +Services are a set of reusable functions. They are particularly useful to respect the DRY (don’t repeat yourself) programming concept and to simplify [controllers](./controllers.md) logic. ## Core services @@ -17,6 +19,10 @@ You can read about `strapi.query` calls [here](./queries.md) In the following example your controller, service and model is named `restaurant` ::: +:::: tabs cache-lifetime="10" :options="{ useUrlFragment: false }" + +::: tab "find" id="find" + #### `find` ```js @@ -32,6 +38,10 @@ module.exports = { }; ``` +::: + +::: tab "findOne" id="findone" + #### `findOne` ```js @@ -48,6 +58,10 @@ module.exports = { }; ``` +::: + +::: tab "count" id="count" + #### `count` ```js @@ -64,6 +78,10 @@ module.exports = { }; ``` +::: + +::: tab "create" id="create" + #### `create` ```js @@ -88,6 +106,10 @@ module.exports = { }; ``` +::: + +::: tab "update" id="update" + #### `update` ```js @@ -112,6 +134,10 @@ module.exports = { }; ``` +::: + +::: tab "delete" id="delete" + #### `delete` ```js @@ -128,6 +154,10 @@ module.exports = { }; ``` +::: + +::: tab "search" id="search" + #### `search` ```js @@ -144,6 +174,10 @@ module.exports = { }; ``` +::: + +::: tab "countSearch" id="countsearch" + #### `countSearch` ```js @@ -159,6 +193,10 @@ module.exports = { }; ``` +::: + +:::: + ## Custom services You can also create custom services to build your own business logic. diff --git a/docs/3.0.0-beta.x/content-api/parameters.md b/docs/3.0.0-beta.x/content-api/parameters.md index 382cd8ecde..7c5a6c6ab4 100644 --- a/docs/3.0.0-beta.x/content-api/parameters.md +++ b/docs/3.0.0-beta.x/content-api/parameters.md @@ -71,7 +71,7 @@ This feature doesn't allow you to filter nested models, e.g `Find users and only To achieve this, there are two options: - Either build a custom route or modify your services -- Use [GraphQL](../guides/graphql.md#query-api) +- Use [GraphQL](../plugins/graphql.md#query-api) ::: ::: warning diff --git a/docs/3.0.0-beta.x/global-strapi/reference.md b/docs/3.0.0-beta.x/global-strapi/api-reference.md similarity index 97% rename from docs/3.0.0-beta.x/global-strapi/reference.md rename to docs/3.0.0-beta.x/global-strapi/api-reference.md index a1a468669a..46a6e10fb8 100644 --- a/docs/3.0.0-beta.x/global-strapi/reference.md +++ b/docs/3.0.0-beta.x/global-strapi/api-reference.md @@ -1,4 +1,4 @@ -# Reference +# API reference - strapi - [.admin](#strapi-admin) @@ -73,7 +73,7 @@ Returns an object of plugins available within the project. Each plugin object co ## strapi.query This utility function allows to bind models with query functions specific to each ORM (e.g: `mongoose` or `bookshelf`). -For more details, see the [Queries section](../guides/queries.md). +For more details, see the [Queries section](../concepts/queries.md). ## strapi.reload diff --git a/docs/3.0.0-beta.x/advanced/usage-information.md b/docs/3.0.0-beta.x/global-strapi/usage-information.md similarity index 100% rename from docs/3.0.0-beta.x/advanced/usage-information.md rename to docs/3.0.0-beta.x/global-strapi/usage-information.md diff --git a/docs/3.0.0-beta.x/guides/i18n.md b/docs/3.0.0-beta.x/guides/i18n.md deleted file mode 100644 index c2df5c742d..0000000000 --- a/docs/3.0.0-beta.x/guides/i18n.md +++ /dev/null @@ -1,68 +0,0 @@ -# Internationalization - -See the [internationalization' concepts](../concepts/concepts.md#internationalization-and-localization) for details. - -Because an API may need to send different data based on the language of the user, Strapi provides a built-in strategy to handle the internationalization (i18n). - -## Usage - -The `i18n` method that will allow you to retrieve the right string based on the language is accessible through the request's context. - -There are many strategies to define the language that the server should use to return the correct translation. It can be based on the `locale` query parameter, the `cookie` or the `Accept-Language` header. - -- Query: Add the `locale` parameter in the URL `GET /hello/John?locale=en_US`. -- Cookie: Set the `locale` field in the cookie `locale=en\-US;`. -- Header: Set the `Accept-Language` header with the value `en_US`. - -::: note -Please refer to the [language configuration](../configurations/configurations.md#language) -::: - -### Example - -Let's say we want to say `Hello John` in english and `Bonjour Tom` in french. We need to use the built-in `i18n` feature and replace the string based on the received name. - -**Path β€”** `./api/hello/config/routes.json`. - -```json -{ - "routes": [ - { - "method": "GET", - "path": "/hello/:name", - "handler": "Hello.sayHello" - } - ] -} -``` - -**Path β€”** `./api/hello/controllers/Hello.js`. - -```js -module.exports = { - // GET /hello/:name - sayHello: async ctx => { - ctx.send(ctx.i18n.__('Hello %s', ctx.params.name)); - }, -}; -``` - -You need to define the english and french translation for this key. - -**Path β€”** `./config/locales/en_US.json`. - -```json -{ - "Hello %s": "Hello %s" -} -``` - -**Path β€”** `./config/locales/fr_FR.json`. - -```json -{ - "Hello %s": "Bonjour %s" -} -``` - -That's all! The request `GET /hello/John?locale=en_US` will return `Hello John` and `GET /hello/Tom?locale=fr_FR` will return `Bonjour Tom` diff --git a/docs/3.0.0-beta.x/guides/requests.md b/docs/3.0.0-beta.x/guides/requests.md deleted file mode 100644 index e7de1e96b2..0000000000 --- a/docs/3.0.0-beta.x/guides/requests.md +++ /dev/null @@ -1,394 +0,0 @@ -# Request - -See the [requests concepts](../concepts/concepts.md#requests) for details. - -The context object (`ctx`) contains all the requests related information. They are accessible through `ctx.request`, from [controllers](controllers.md) and [policies](policies.md). - -## API Reference - -For more information, please refer to the [Koa request documentation](http://koajs.com/#request). - -### request.header - -Request header object. - -### request.header= - -Set request header object. - -### request.headers - -Request header object. Alias as `request.header`. - -### request.headers= - -Set request header object. Alias as `request.header=`. - -### request.method - -Request method. - -### request.method= - -Set request method, useful for implementing middleware -such as `methodOverride()`. - -### request.length - -Return request Content-Length as a number when present, or `undefined`. - -### request.url - -Get request URL. - -### request.url= - -Set request URL, useful for url rewrites. - -### request.originalUrl - -Get request original URL. - -### request.origin - -Get origin of URL, include `protocol` and `host`. - -```js -ctx.request.origin; -// => http://example.com -``` - -### request.href - -Get full request URL, include `protocol`, `host` and `url`. - -```js -ctx.request.href; -// => http://example.com/foo/bar?q=1 -``` - -### request.path - -Get request pathname. - -### request.path= - -Set request pathname and retain query-string when present. - -### request.querystring - -Get raw query string void of `?`. - -### request.querystring= - -Set raw query string. - -### request.search - -Get raw query string with the `?`. - -### request.search= - -Set raw query string. - -### request.host - -Get host (hostname:port) when present. Supports `X-Forwarded-Host` -when `app.proxy` is **true**, otherwise `Host` is used. - -### request.hostname - -Get hostname when present. Supports `X-Forwarded-Host` -when `app.proxy` is **true**, otherwise `Host` is used. - -If host is IPv6, Koa delegates parsing to -[WHATWG URL API](https://nodejs.org/dist/latest-v8.x/docs/api/url.html#url_the_whatwg_url_api), -_Note_ This may impact performance. - -### request.URL - -Get WHATWG parsed URL object. - -### request.type - -Get request `Content-Type` void of parameters such as "charset". - -```js -const ct = ctx.request.type; -// => "image/png" -``` - -### request.charset - -Get request charset when present, or `undefined`: - -```js -ctx.request.charset; -// => "utf-8" -``` - -### request.query - -Get parsed query-string, returning an empty object when no -query-string is present. Note that this getter does _not_ -support nested parsing. - -For example "color=blue&size=small": - -```js -{ - color: 'blue', - size: 'small' -} -``` - -### request.query= - -Set query-string to the given object. Note that this -setter does _not_ support nested objects. - -```js -ctx.query = { next: '/login' }; -``` - -### request.fresh - -Check if a request cache is "fresh", aka the contents have not changed. This -method is for cache negotiation between `If-None-Match` / `ETag`, and `If-Modified-Since` and `Last-Modified`. It should be referenced after setting one or more of these response headers. - -```js -// freshness check requires status 20x or 304 -ctx.status = 200; -ctx.set('ETag', '123'); - -// cache is ok -if (ctx.fresh) { - ctx.status = 304; - return; -} - -// cache is stale -// fetch new data -ctx.body = await db.find('something'); -``` - -### request.stale - -Inverse of `request.fresh`. - -### request.protocol - -Return request protocol, "https" or "http". Supports `X-Forwarded-Proto` -when `app.proxy` is **true**. - -### request.secure - -Shorthand for `ctx.protocol == "https"` to check if a request was -issued via TLS. - -### request.ip - -Request remote address. Supports `X-Forwarded-For` when `app.proxy` -is **true**. - -### request.ips - -When `X-Forwarded-For` is present and `app.proxy` is enabled an array -of these ips is returned, ordered from upstream -> downstream. When disabled -an empty array is returned. - -### request.subdomains - -Return subdomains as an array. - -Subdomains are the dot-separated parts of the host before the main domain of -the app. By default, the domain of the app is assumed to be the last two -parts of the host. This can be changed by setting `app.subdomainOffset`. - -For example, if the domain is "tobi.ferrets.example.com": -If `app.subdomainOffset` is not set, `ctx.subdomains` is `["ferrets", "tobi"]`. -If `app.subdomainOffset` is 3, `ctx.subdomains` is `["tobi"]`. - -### request.is(types...) - -Check if the incoming request contains the "Content-Type" -header field, and it contains any of the five mime `type`s. -If there is no request body, `null` is returned. -If there is no content type, or the match fails `false` is returned. -Otherwise, it returns the matching content-type. - -```js -// With Content-Type: text/html; charset=utf-8 -ctx.is('html'); // => 'html' -ctx.is('text/html'); // => 'text/html' -ctx.is('text/*', 'text/html'); // => 'text/html' - -// When Content-Type is application/json -ctx.is('json', 'urlencoded'); // => 'json' -ctx.is('application/json'); // => 'application/json' -ctx.is('html', 'application/*'); // => 'application/json' - -ctx.is('html'); // => false -``` - -For example if you want to ensure that -only images are sent to a given route: - -```js -if (ctx.is('image/*')) { - // process -} else { - ctx.throw(415, 'images only!'); -} -``` - -### Content Negotiation - -Koa's `request` object includes helpful content negotiation utilities powered by [accepts](http://github.com/expressjs/accepts) and [negotiator](https://github.com/federomero/negotiator). These utilities are: - -- `request.accepts(types)` -- `request.acceptsEncodings(types)` -- `request.acceptsCharsets(charsets)` -- `request.acceptsLanguages(langs)` - -If no types are supplied, **all** acceptable types are returned. - -If multiple types are supplied, the best match will be returned. If no matches are found, a `false` is returned, and you should send a `406 "Not Acceptable"` response to the client. - -In the case of missing accept headers where any type is acceptable, the first type will be returned. Thus, the order of types you supply is important. - -### request.accepts(types) - -Check if the given `type(s)` is acceptable, returning the best match when true, otherwise `false`. The `type` value may be one or more mime type string -such as "application/json", the extension name -such as "json", or an array `["json", "html", "text/plain"]`. - -```js -// Accept: text/html -ctx.accepts('html'); -// => "html" - -// Accept: text/*, application/json -ctx.accepts('html'); -// => "html" -ctx.accepts('text/html'); -// => "text/html" -ctx.accepts('json', 'text'); -// => "json" -ctx.accepts('application/json'); -// => "application/json" - -// Accept: text/*, application/json -ctx.accepts('image/png'); -ctx.accepts('png'); -// => false - -// Accept: text/*;q=.5, application/json -ctx.accepts(['html', 'json']); -ctx.accepts('html', 'json'); -// => "json" - -// No Accept header -ctx.accepts('html', 'json'); -// => "html" -ctx.accepts('json', 'html'); -// => "json" -``` - -You may call `ctx.accepts()` as many times as you like, -or use a switch: - -```js -switch (ctx.accepts('json', 'html', 'text')) { - case 'json': - break; - case 'html': - break; - case 'text': - break; - default: - ctx.throw(406, 'json, html, or text only'); -} -``` - -### request.acceptsEncodings(encodings) - -Check if `encodings` are acceptable, returning the best match when true, otherwise `false`. Note that you should include `identity` as one of the encodings! - -```js -// Accept-Encoding: gzip -ctx.acceptsEncodings('gzip', 'deflate', 'identity'); -// => "gzip" - -ctx.acceptsEncodings(['gzip', 'deflate', 'identity']); -// => "gzip" -``` - -When no arguments are given all accepted encodings -are returned as an array: - -```js -// Accept-Encoding: gzip, deflate -ctx.acceptsEncodings(); -// => ["gzip", "deflate", "identity"] -``` - -Note that the `identity` encoding (which means no encoding) could be unacceptable if the client explicitly sends `identity;q=0`. Although this is an edge case, you should still handle the case where this method returns `false`. - -### request.acceptsCharsets(charsets) - -Check if `charsets` are acceptable, returning -the best match when true, otherwise `false`. - -```js -// Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5 -ctx.acceptsCharsets('utf-8', 'utf-7'); -// => "utf-8" - -ctx.acceptsCharsets(['utf-7', 'utf-8']); -// => "utf-8" -``` - -When no arguments are given all accepted charsets -are returned as an array: - -```js -// Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5 -ctx.acceptsCharsets(); -// => ["utf-8", "utf-7", "iso-8859-1"] -``` - -### request.acceptsLanguages(langs) - -Check if `langs` are acceptable, returning -the best match when true, otherwise `false`. - -```js -// Accept-Language: en;q=0.8, es, pt -ctx.acceptsLanguages('es', 'en'); -// => "es" - -ctx.acceptsLanguages(['en', 'es']); -// => "es" -``` - -When no arguments are given all accepted languages -are returned as an array: - -```js -// Accept-Language: en;q=0.8, es, pt -ctx.acceptsLanguages(); -// => ["es", "pt", "en"] -``` - -### request.idempotent - -Check if the request is idempotent. - -### request.socket - -Return the request socket. - -### request.get(field) - -Return request header. diff --git a/docs/3.0.0-beta.x/guides/responses.md b/docs/3.0.0-beta.x/guides/responses.md deleted file mode 100644 index 950464cbee..0000000000 --- a/docs/3.0.0-beta.x/guides/responses.md +++ /dev/null @@ -1,1064 +0,0 @@ -# Responses - -See the [responses concepts](../concepts/concepts.md#responses) for details. - -### API Reference - -For more information, please refer to the [Koa response documentation](http://koajs.com/#response). - -## Response - -The context object (`ctx`) contains a list of values and functions useful to manage server responses. They are accessible through `ctx.response`, from [controllers](controllers.md) and [policies](policies.md). - -#### response.header - -Response header object. - -#### response.headers - -Response header object. Alias as `response.header`. - -#### response.socket - -Request socket. - -#### response.status - -Get response status. By default, `response.status` is set to `404` unlike node's `res.statusCode` which defaults to `200`. - -#### response.status= - -Set response status via numeric code: - -- 100 "continue" -- 101 "switching protocols" -- 102 "processing" -- 200 "ok" -- 201 "created" -- 202 "accepted" -- 203 "non-authoritative information" -- 204 "no content" -- 205 "reset content" -- 206 "partial content" -- 207 "multi-status" -- 208 "already reported" -- 226 "im used" -- 300 "multiple choices" -- 301 "moved permanently" -- 302 "found" -- 303 "see other" -- 304 "not modified" -- 305 "use proxy" -- 307 "temporary redirect" -- 308 "permanent redirect" -- 400 "bad request" -- 401 "unauthorized" -- 402 "payment required" -- 403 "forbidden" -- 404 "not found" -- 405 "method not allowed" -- 406 "not acceptable" -- 407 "proxy authentication required" -- 408 "request timeout" -- 409 "conflict" -- 410 "gone" -- 411 "length required" -- 412 "precondition failed" -- 413 "payload too large" -- 414 "uri too long" -- 415 "unsupported media type" -- 416 "range not satisfiable" -- 417 "expectation failed" -- 418 "I'm a teapot" -- 422 "unprocessable entity" -- 423 "locked" -- 424 "failed dependency" -- 426 "upgrade required" -- 428 "precondition required" -- 429 "too many requests" -- 431 "request header fields too large" -- 500 "internal server error" -- 501 "not implemented" -- 502 "bad gateway" -- 503 "service unavailable" -- 504 "gateway timeout" -- 505 "http version not supported" -- 506 "variant also negotiates" -- 507 "insufficient storage" -- 508 "loop detected" -- 510 "not extended" -- 511 "network authentication required" - -::: note -Don't worry too much about memorizing these strings, -if you have a typo an error will be thrown, displaying this list -so you can make a correction. -::: - -#### response.message - -Get response status message. By default, `response.message` is -associated with `response.status`. - -#### response.message= - -Set response status message to the given value. - -#### response.length= - -Set response Content-Length to the given value. - -#### response.length - -Return response Content-Length as a number when present, or deduce -from `ctx.body` when possible, or `undefined`. - -#### response.body - -Get response body. - -#### response.body= - -Set response body to one of the following: - -- `string` written -- `Buffer` written -- `Stream` piped -- `Object` || `Array` json-stringified -- `null` no content response - -If `response.status` has not been set, Koa will automatically set the status to `200` or `204`. - -##### String - -The Content-Type is defaulted to text/html or text/plain, both with -a default charset of utf-8. The Content-Length field is also set. - -##### Buffer - -The Content-Type is defaulted to application/octet-stream, and Content-Length -is also set. - -##### Stream - -The Content-Type is defaulted to application/octet-stream. - -Whenever a stream is set as the response body, `.onerror` is automatically added as a listener to the `error` event to catch any errors. -In addition, whenever the request is closed (even prematurely), the stream is destroyed. -If you do not want these two features, do not set the stream as the body directly. -For example, you may not want this when setting the body as an HTTP stream in a proxy as it would destroy the underlying connection. - -See: [https://github.com/koajs/koa/pull/612](https://github.com/koajs/koa/pull/612) for more information. - -Here's an example of stream error handling without automatically destroying the stream: - -```js -const PassThrough = require('stream').PassThrough; - -app.use(async ctx => { - ctx.body = someHTTPStream.on('error', ctx.onerror).pipe(PassThrough()); -}); -``` - -##### Object - -The Content-Type is defaulted to application/json. This includes plain objects `{ foo: 'bar' }` and arrays `['foo', 'bar']`. - -#### response.get(field) - -Get a response header field value with case-insensitive `field`. - -```js -const etag = ctx.response.get('ETag'); -``` - -#### response.set(field, value) - -Set response header `field` to `value`: - -```js -ctx.set('Cache-Control', 'no-cache'); -``` - -#### response.append(field, value) - -Append additional header `field` with value `val`. - -```js -ctx.append('Link', ''); -``` - -#### response.set(fields) - -Set several response header `fields` with an object: - -```js -ctx.set({ - Etag: '1234', - 'Last-Modified': date, -}); -``` - -#### response.remove(field) - -Remove header `field`. - -#### response.type - -Get response `Content-Type` void of parameters such as "charset". - -```js -const ct = ctx.type; -// => "image/png" -``` - -#### response.type= - -Set response `Content-Type` via mime string or file extension. - -```js -ctx.type = 'text/plain; charset=utf-8'; -ctx.type = 'image/png'; -ctx.type = '.png'; -ctx.type = 'png'; -``` - -::: note -when appropriate a `charset` is selected for you, for -example `response.type = 'html'` will default to "utf-8". If you need to overwrite `charset`, -use `ctx.set('Content-Type', 'text/html')` to set response header field to value directly. -::: - -#### response.is(types...) - -Very similar to `ctx.request.is()`. -Check whether the response type is one of the supplied types. -This is particularly useful for creating middleware that -manipulate responses. - -For example, this is a middleware that minifies -all HTML responses except for streams. - -```js -const minify = require('html-minifier'); - -app.use(async (ctx, next) => { - await next(); - - if (!ctx.response.is('html')) return; - - let body = ctx.body; - if (!body || body.pipe) return; - - if (Buffer.isBuffer(body)) body = body.toString(); - ctx.body = minify(body); -}); -``` - -#### response.redirect(url, [alt]) - -Perform a [302] redirect to `url`. - -The string "back" is special-cased -to provide Referrer support, when Referrer -is not present `alt` or "/" is used. - -```js -ctx.redirect('back'); -ctx.redirect('back', '/index.html'); -ctx.redirect('/login'); -ctx.redirect('http://google.com'); -``` - -To alter the default status of `302`, simply assign the status -before or after this call. To alter the body, assign it after this call: - -```js -ctx.status = 301; -ctx.redirect('/cart'); -ctx.body = 'Redirecting to shopping cart'; -``` - -#### response.attachment([filename]) - -Set `Content-Disposition` to "attachment" to signal the client -to prompt for download. Optionally specify the `filename` of the -download. - -#### response.headerSent - -Check if a response header has already been sent. Useful for seeing -if the client may be notified on error. - -#### response.lastModified - -Return the `Last-Modified` header as a `Date`, if it exists. - -#### response.lastModified= - -Set the `Last-Modified` header as an appropriate UTC string. -You can either set it as a `Date` or date string. - -```js -ctx.response.lastModified = new Date(); -``` - -#### response.etag= - -Set the ETag of a response including the wrapped `"`s. -Note that there is no corresponding `response.etag` getter. - -```js -ctx.response.etag = crypto - .createHash('md5') - .update(ctx.body) - .digest('hex'); -``` - -#### response.vary(field) - -Vary on `field`. - -#### response.flushHeaders() - -Flush any set headers, and begin the body. - -## Advanced responses - -Strapi integrates [Boom](https://github.com/hapijs/boom): a set of utilities for returning HTTP errors. Every Boom’s functions are accessible through the `ctx.response`. - -You can also override responses based on them status. Please read the [configuration responses](../configurations/configurations.md#responses) for that. - -::: note -Every Boom's functions is delegated to the context. It means that `ctx.notFound` is a shortcut to `ctx.response.notFound`. -::: - -### API Reference - -For more information, please refer to the [Boom documentation](https://github.com/hapijs/boom). - - - -- [HTTP 4xx Errors](#http-4xx-errors) - - [`ctx.response.badRequest([message], [data])`](#ctxresponsebadrequestmessage-data) - - [`ctx.response.unauthorized([message], [scheme], [attributes])`](#ctxresponseunauthorizedmessage-scheme-attributes) - - [`ctx.response.paymentRequired([message], [data])`](#ctxresponsepaymentrequiredmessage-data) - - [`ctx.response.forbidden([message], [data])`](#ctxresponseforbiddenmessage-data) - - [`ctx.response.notFound([message], [data])`](#ctxresponsenotfoundmessage-data) - - [`ctx.response.methodNotAllowed([message], [data], [allow])`](#ctxresponsemethodnotallowedmessage-data-allow) - - [`ctx.response.notAcceptable([message], [data])`](#ctxresponsenotacceptablemessage-data) - - [`ctx.response.proxyAuthRequired([message], [data])`](#ctxresponseproxyauthrequiredmessage-data) - - [`ctx.response.clientTimeout([message], [data])`](#ctxresponseclienttimeoutmessage-data) - - [`ctx.response.conflict([message], [data])`](#ctxresponseconflictmessage-data) - - [`ctx.response.resourceGone([message], [data])`](#ctxresponseresourcegonemessage-data) - - [`ctx.response.lengthRequired([message], [data])`](#ctxresponselengthrequiredmessage-data) - - [`ctx.response.preconditionFailed([message], [data])`](#ctxresponsepreconditionfailedmessage-data) - - [`ctx.response.entityTooLarge([message], [data])`](#ctxresponseentitytoolargemessage-data) - - [`ctx.response.uriTooLong([message], [data])`](#ctxresponseuritoolongmessage-data) - - [`ctx.response.unsupportedMediaType([message], [data])`](#ctxresponseunsupportedmediatypemessage-data) - - [`ctx.response.rangeNotSatisfiable([message], [data])`](#ctxresponserangenotsatisfiablemessage-data) - - [`ctx.response.expectationFailed([message], [data])`](#ctxresponseexpectationfailedmessage-data) - - [`ctx.response.teapot([message], [data])`](#ctxresponseteapotmessage-data) - - [`ctx.response.badData([message], [data])`](#ctxresponsebaddatamessage-data) - - [`ctx.response.locked([message], [data])`](#ctxresponselockedmessage-data) - - [`ctx.response.preconditionRequired([message], [data])`](#ctxresponsepreconditionrequiredmessage-data) - - [`ctx.response.tooManyRequests([message], [data])`](#ctxresponsetoomanyrequestsmessage-data) - - [`ctx.response.illegal([message], [data])`](#ctxresponseillegalmessage-data) -- [HTTP 5xx Errors](#http-5xx-errors) - - [`ctx.response.badImplementation([message], [data])` - (_alias: `internal`_)](#ctxresponsebadimplementationmessage-data---alias-internal) - - [`ctx.response.notImplemented([message], [data])`](#ctxresponsenotimplementedmessage-data) - - [`ctx.response.badGateway([message], [data])`](#ctxresponsebadgatewaymessage-data) - - [`ctx.response.serverUnavailable([message], [data])`](#ctxresponseserverunavailablemessage-data) - - [`ctx.response.gatewayTimeout([message], [data])`](#ctxresponsegatewaytimeoutmessage-data) - - - -### HTTP 4xx Errors - -#### `ctx.response.badRequest([message], [data])` - -Returns a 400 Bad Request error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.badRequest('invalid query'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 400, - "error": "Bad Request", - "message": "invalid query" -} -``` - -#### `ctx.response.unauthorized([message], [scheme], [attributes])` - -Returns a 401 Unauthorized error where: - -- `message` - optional message. -- `scheme` can be one of the following: - - an authentication scheme name - - an array of string values. These values will be separated by ', ' and set to the 'WWW-Authenticate' header. -- `attributes` - an object of values to use while setting the 'WWW-Authenticate' header. This value is only used - when `scheme` is a string, otherwise it is ignored. Every key/value pair will be included in the - 'WWW-Authenticate' in the format of 'key="value"' as well as in the response payload under the `attributes` key. Alternatively value can be a string which is used to set the value of the scheme, for example setting the token value for negotiate header. If string is used message parameter must be null. - `null` and `undefined` will be replaced with an empty string. If `attributes` is set, `message` will be used as - the 'error' segment of the 'WWW-Authenticate' header. If `message` is unset, the 'error' segment of the header - will not be present and `isMissing` will be true on the error object. - -If either `scheme` or `attributes` are set, the resultant `Boom` object will have the 'WWW-Authenticate' header set for the response. - -```js -ctx.response.unauthorized('invalid password'); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "message": "invalid password" -}, -"headers" {} -``` - -```js -ctx.response.unauthorized('invalid password', 'sample'); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "message": "invalid password", - "attributes": { - "error": "invalid password" - } -}, -"headers" { - "WWW-Authenticate": "sample error=\"invalid password\"" -} -``` - -```js -ctx.response.unauthorized(null, 'Negotiate', 'VGhpcyBpcyBhIHRlc3QgdG9rZW4='); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "attributes": "VGhpcyBpcyBhIHRlc3QgdG9rZW4=" -}, -"headers" { - "WWW-Authenticate": "Negotiate VGhpcyBpcyBhIHRlc3QgdG9rZW4=" -} -``` - -```js -ctx.response.unauthorized('invalid password', 'sample', { - ttl: 0, - cache: null, - foo: 'bar', -}); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "message": "invalid password", - "attributes": { - "error": "invalid password", - "ttl": 0, - "cache": "", - "foo": "bar" - } -}, -"headers" { - "WWW-Authenticate": "sample ttl=\"0\", cache=\"\", foo=\"bar\", error=\"invalid password\"" -} -``` - -#### `ctx.response.paymentRequired([message], [data])` - -Returns a 402 Payment Required error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.paymentRequired('bandwidth used'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 402, - "error": "Payment Required", - "message": "bandwidth used" -} -``` - -#### `ctx.response.forbidden([message], [data])` - -Returns a 403 Forbidden error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.forbidden('try again some time'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 403, - "error": "Forbidden", - "message": "try again some time" -} -``` - -#### `ctx.response.notFound([message], [data])` - -Returns a 404 Not Found error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.notFound('missing'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 404, - "error": "Not Found", - "message": "missing" -} -``` - -#### `ctx.response.methodNotAllowed([message], [data], [allow])` - -Returns a 405 Method Not Allowed error where: - -- `message` - optional message. -- `data` - optional additional error data. -- `allow` - optional string or array of strings (to be combined and separated by ', ') which is set to the 'Allow' header. - -```js -ctx.response.methodNotAllowed('that method is not allowed'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 405, - "error": "Method Not Allowed", - "message": "that method is not allowed" -} -``` - -#### `ctx.response.notAcceptable([message], [data])` - -Returns a 406 Not Acceptable error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.notAcceptable('unacceptable'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 406, - "error": "Not Acceptable", - "message": "unacceptable" -} -``` - -#### `ctx.response.proxyAuthRequired([message], [data])` - -Returns a 407 Proxy Authentication Required error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.proxyAuthRequired('auth missing'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 407, - "error": "Proxy Authentication Required", - "message": "auth missing" -} -``` - -#### `ctx.response.clientTimeout([message], [data])` - -Returns a 408 Request Time-out error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.clientTimeout('timed out'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 408, - "error": "Request Time-out", - "message": "timed out" -} -``` - -#### `ctx.response.conflict([message], [data])` - -Returns a 409 Conflict error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.conflict('there was a conflict'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 409, - "error": "Conflict", - "message": "there was a conflict" -} -``` - -#### `ctx.response.resourceGone([message], [data])` - -Returns a 410 Gone error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.resourceGone('it is gone'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 410, - "error": "Gone", - "message": "it is gone" -} -``` - -#### `ctx.response.lengthRequired([message], [data])` - -Returns a 411 Length Required error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.lengthRequired('length needed'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 411, - "error": "Length Required", - "message": "length needed" -} -``` - -#### `ctx.response.preconditionFailed([message], [data])` - -Returns a 412 Precondition Failed error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.preconditionFailed(); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 412, - "error": "Precondition Failed" -} -``` - -#### `ctx.response.entityTooLarge([message], [data])` - -Returns a 413 Request Entity Too Large error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.entityTooLarge('too big'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 413, - "error": "Request Entity Too Large", - "message": "too big" -} -``` - -#### `ctx.response.uriTooLong([message], [data])` - -Returns a 414 Request-URI Too Large error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.uriTooLong('uri is too long'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 414, - "error": "Request-URI Too Large", - "message": "uri is too long" -} -``` - -#### `ctx.response.unsupportedMediaType([message], [data])` - -Returns a 415 Unsupported Media Type error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.unsupportedMediaType('that media is not supported'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 415, - "error": "Unsupported Media Type", - "message": "that media is not supported" -} -``` - -#### `ctx.response.rangeNotSatisfiable([message], [data])` - -Returns a 416 Requested Range Not Satisfiable error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.rangeNotSatisfiable(); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 416, - "error": "Requested Range Not Satisfiable" -} -``` - -#### `ctx.response.expectationFailed([message], [data])` - -Returns a 417 Expectation Failed error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.expectationFailed('expected this to work'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 417, - "error": "Expectation Failed", - "message": "expected this to work" -} -``` - -#### `ctx.response.teapot([message], [data])` - -Returns a 418 I'm a Teapot error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.teapot('sorry, no coffee...'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 418, - "error": "I'm a Teapot", - "message": "Sorry, no coffee..." -} -``` - -#### `ctx.response.badData([message], [data])` - -Returns a 422 Unprocessable Entity error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.badData('your data is bad and you should feel bad'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 422, - "error": "Unprocessable Entity", - "message": "your data is bad and you should feel bad" -} -``` - -#### `ctx.response.locked([message], [data])` - -Returns a 423 Locked error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.locked('this resource has been locked'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 423, - "error": "Locked", - "message": "this resource has been locked" -} -``` - -#### `ctx.response.preconditionRequired([message], [data])` - -Returns a 428 Precondition Required error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.preconditionRequired('you must supply an If-Match header'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 428, - "error": "Precondition Required", - "message": "you must supply an If-Match header" -} -``` - -#### `ctx.response.tooManyRequests([message], [data])` - -Returns a 429 Too Many Requests error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.tooManyRequests('you have exceeded your request limit'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 429, - "error": "Too Many Requests", - "message": "you have exceeded your request limit" -} -``` - -#### `ctx.response.illegal([message], [data])` - -Returns a 451 Unavailable For Legal Reasons error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.illegal( - 'you are not permitted to view this resource for legal reasons' -); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 451, - "error": "Unavailable For Legal Reasons", - "message": "you are not permitted to view this resource for legal reasons" -} -``` - -### HTTP 5xx Errors - -All 500 errors hide your message from the end user. Your message is recorded in the server log. - -#### `ctx.response.badImplementation([message], [data])` - (_alias: `internal`_) - -Returns a 500 Internal Server Error error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.badImplementation('terrible implementation'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 500, - "error": "Internal Server Error", - "message": "An internal server error occurred" -} -``` - -#### `ctx.response.notImplemented([message], [data])` - -Returns a 501 Not Implemented error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.notImplemented('method not implemented'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 501, - "error": "Not Implemented", - "message": "method not implemented" -} -``` - -#### `ctx.response.badGateway([message], [data])` - -Returns a 502 Bad Gateway error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.badGateway('that is a bad gateway'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 502, - "error": "Bad Gateway", - "message": "that is a bad gateway" -} -``` - -#### `ctx.response.serverUnavailable([message], [data])` - -Returns a 503 Service Unavailable error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.serverUnavailable('unavailable'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 503, - "error": "Service Unavailable", - "message": "unavailable" -} -``` - -#### `ctx.response.gatewayTimeout([message], [data])` - -Returns a 504 Gateway Time-out error where: - -- `message` - optional message. -- `data` - optional additional error data. - -```js -ctx.response.gatewayTimeout(); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 504, - "error": "Gateway Time-out" -} -``` diff --git a/docs/3.0.0-beta.x/guides/restapi.md b/docs/3.0.0-beta.x/guides/restapi.md deleted file mode 100644 index 1b569e8115..0000000000 --- a/docs/3.0.0-beta.x/guides/restapi.md +++ /dev/null @@ -1,127 +0,0 @@ -# Filters - -See the [filters' concepts](../concepts/concepts.md#filters) for details. - -::: note -by default, the filters can only be used from `find` endpoints generated by the Content Type Builder and the [CLI](../cli/CLI.md). If you need to implement a filters system somewhere else, read the [programmatic usage](#programmatic-usage) section. -::: - -## Available operators - -The available operators are separated in four different categories: - -- [Filters](#filters) -- [Sort](#sort) -- [Limit](#limit) -- [Start](#start) - -### Filters - -Easily filter results according to fields values. - -- `=`: Equals -- `_ne`: Not equals -- `_lt`: Lower than -- `_gt`: Greater than -- `_lte`: Lower than or equal to -- `_gte`: Greater than or equal to -- `_contains`: Contains -- `_containss`: Contains case sensitive -- `_in`: Matches any value in the array of values -- `_nin`: Doesn't match any value in the array of values -- `_null`: Equals null/Not equals null - -#### Examples - -Find users having `John` as first name. - -`GET /user?firstName=John` - -Find products having a price equal or greater than `3`. - -`GET /product?price_gte=3` - -### Sort - -Sort according to a specific field. - -#### Example - -Sort users by email. - -- ASC: `GET /user?_sort=email:asc` -- DESC: `GET /user?_sort=email:desc` - -### Limit - -Limit the size of the returned results. - -#### Example - -Limit the result length to 30. - -`GET /user?_limit=30` - -### Start - -Skip a specific number of entries (especially useful for pagination). - -#### Example - -Get the second page of results. - -`GET /user?_start=10&_limit=10` - -## Programmatic usage - -Requests system can be implemented in custom code sections. - -### Extracting requests filters - -To extract the filters from an JavaScript object or a request, you need to call the [`strapi.utils.models.convertParams` helper](../api-reference/reference.md#strapiutils). - -::: note -The returned objects is formatted according to the ORM used by the model. -::: - -#### Example - -**Path β€”** `./api/user/controllers/User.js`. - -```js -// Define a list of params. -const params = { - _limit: 20, - _sort: 'email', -}; - -// Convert params. -const formattedParams = strapi.utils.models.convertParams('user', params); // { limit: 20, sort: 'email' } -``` - -### Query usage - -#### Example - -**Path β€”** `./api/user/controllers/User.js`. - -```js -module.exports = { - - find: async (ctx) => { - // Convert params. - const formattedParams = strapi.utils.models.convertParams('user', ctx.request.query); - - // Get the list of users according to the request query. - const filteredUsers = await User - .find() - .where(formattedParams.where) - .sort(formattedParams.sort) - .skip(formattedParams.start) - .limit(formattedParams.limit); - - // Finally, send the results to the client. - ctx.body = filteredUsers; - }; -}; -``` diff --git a/docs/3.0.0-beta.x/plugins/users-permissions.md b/docs/3.0.0-beta.x/plugins/users-permissions.md index e051c10762..84dd43e8e3 100644 --- a/docs/3.0.0-beta.x/plugins/users-permissions.md +++ b/docs/3.0.0-beta.x/plugins/users-permissions.md @@ -383,6 +383,26 @@ Add the language translation in `packages/strapi-plugin-users-permissions/admin/ These two change will set up the popup message that appears in the UI. That's it, now you should be able to use your new provider. -## Email templates +## Templating emails -[See the documentation on GitHub](https://github.com/strapi/strapi/blob/master/packages/strapi-plugin-users-permissions/docs/email-templates.md) +By default, this plugin comes with only one template (reset password) for the moment. More templates will come later. The templates use Lodash' template() method to populate the variables. + +You can update these template in the **Email Templates** tab in the admin panel. + +### Reset Password + +- `USER` (object) + - `username` + - `email` + - ...and every other fields that you added manually in the model. +- `TOKEN` corresponds to the token generated to be able to reset the password. +- `URL` is the link where the user will be redirected after clicking on it in the email. + +### Email address confirmation + +- `USER` (object) + - `username` + - `email` + - ...and every other fields that you added manually in the model. +- `CODE` corresponds to the CODE generated to be able confirm the user email. +- `URL` is the Strapi backend URL that confirm the code (by default `/auth/email-confirmation`). diff --git a/packages/strapi-admin/admin/src/translations/de.json b/packages/strapi-admin/admin/src/translations/de.json index 3233a0c229..e0d1cb4ec3 100644 --- a/packages/strapi-admin/admin/src/translations/de.json +++ b/packages/strapi-admin/admin/src/translations/de.json @@ -2,6 +2,7 @@ "Analytics": "Analytics", "Content Manager": "Inhalts-Manager", "Content Type Builder": "Inhaltstyp-Manager", + "Documentation": "Dokumentation", "Email": "E-Mail", "Files Upload": "Dateien hochladen", "HomePage.notification.newsLetter.success": "Newsletter erfolgreich abonniert", diff --git a/packages/strapi-admin/admin/src/translations/en.json b/packages/strapi-admin/admin/src/translations/en.json index 3dc64a6d37..8db94ebb0a 100644 --- a/packages/strapi-admin/admin/src/translations/en.json +++ b/packages/strapi-admin/admin/src/translations/en.json @@ -2,6 +2,7 @@ "Analytics": "Analytics", "Content Manager": "Content Manager", "Content Type Builder": "Content Type Builder", + "Documentation": "Documentation", "Email": "Email", "Files Upload": "Files Upload", "HomePage.notification.newsLetter.success": "Successfully subscribed to the newsletter", diff --git a/packages/strapi-admin/admin/src/translations/ru.json b/packages/strapi-admin/admin/src/translations/ru.json index 90f44c7932..33eaed1a3d 100644 --- a/packages/strapi-admin/admin/src/translations/ru.json +++ b/packages/strapi-admin/admin/src/translations/ru.json @@ -2,6 +2,7 @@ "Analytics": "Аналитика", "Content Manager": "Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°", "Content Type Builder": "Π’ΠΈΠΏΡ‹ ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°", + "Documentation": "ДокумСнтация", "Email": "Email", "Files Upload": "Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²", "HomePage.notification.newsLetter.success": "УспСшная подписка Π½Π° рассылку новостСй", diff --git a/packages/strapi-admin/package.json b/packages/strapi-admin/package.json index 4d3c5a826e..a782ebd9cd 100644 --- a/packages/strapi-admin/package.json +++ b/packages/strapi-admin/package.json @@ -81,6 +81,7 @@ "video-react": "^0.13.2", "webpack": "^4.40.1", "webpackbar": "^3.2.0", + "webpack-dev-server": "^3.4.1", "yup": "^0.27.0" }, "author": { @@ -104,7 +105,6 @@ "devDependencies": { "chokidar": "^3.1.1", "webpack": "^4.40.1", - "webpack-cli": "^3.3.2", - "webpack-dev-server": "^3.4.1" + "webpack-cli": "^3.3.2" } } diff --git a/packages/strapi-generate-model/templates/bookshelf/model.template b/packages/strapi-generate-model/templates/bookshelf/model.template index e2daa39ccc..f392b92f14 100644 --- a/packages/strapi-generate-model/templates/bookshelf/model.template +++ b/packages/strapi-generate-model/templates/bookshelf/model.template @@ -12,7 +12,7 @@ module.exports = { // After saving a value. // Fired after an `insert` or `update` query. // afterSave: async (model, response, options) => {}, - + // Before fetching all values. // Fired before a `fetchAll` operation. // beforeFetchCollection: async (model, columns, options) => {}, @@ -20,7 +20,7 @@ module.exports = { // After fetching all values. // Fired after a `fetchAll` operation. // afterFetchCollection: async (model, columns, options) => {}, - + // Before fetching a value. // Fired before a `fetch` operation. // beforeFetch: async (model, columns, options) => {}, diff --git a/packages/strapi-helper-plugin/lib/src/utils/getQueryParameters.js b/packages/strapi-helper-plugin/lib/src/utils/getQueryParameters.js index 2f8bc3db29..73410d7beb 100644 --- a/packages/strapi-helper-plugin/lib/src/utils/getQueryParameters.js +++ b/packages/strapi-helper-plugin/lib/src/utils/getQueryParameters.js @@ -1,5 +1,14 @@ /* eslint-disable prefer-template */ export default (location, n) => { const half = location.split(n + '=')[1]; - return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null; + + if (half !== undefined) { + try { + return decodeURIComponent(half.split('&')[0]); + } catch (e) { + return null; + } + } + + return null; }; diff --git a/packages/strapi-hook-mongoose/lib/index.js b/packages/strapi-hook-mongoose/lib/index.js index f5c83a0097..946bd12ada 100644 --- a/packages/strapi-hook-mongoose/lib/index.js +++ b/packages/strapi-hook-mongoose/lib/index.js @@ -56,7 +56,7 @@ module.exports = function(strapi) { password, database, srv, - useUnifiedTopology + useUnifiedTopology, } = connection.settings; const uriOptions = uri ? url.parse(uri, true).query : {}; @@ -93,9 +93,9 @@ module.exports = function(strapi) { * https://github.com/Automattic/mongoose/issues/6881 */ await instance.connect( uri || - `mongodb${isSrv ? '+srv' : ''}://${username}:${password}@${host}${ - !isSrv ? ':' + port : '' - }/`, + `mongodb${isSrv ? '+srv' : ''}://${username}:${encodeURIComponent( + password + )}@${host}${!isSrv ? ':' + port : ''}/`, connectOptions ); } catch (error) { diff --git a/packages/strapi-plugin-graphql/config/settings.json b/packages/strapi-plugin-graphql/config/settings.json index c292874f13..07ddc3fdcc 100644 --- a/packages/strapi-plugin-graphql/config/settings.json +++ b/packages/strapi-plugin-graphql/config/settings.json @@ -4,5 +4,6 @@ "shadowCRUD": true, "playgroundAlways": false, "depthLimit": 7, - "amountLimit": 100 + "amountLimit": 100, + "shareEnabled": false } diff --git a/packages/strapi-plugin-graphql/hooks/graphql/index.js b/packages/strapi-plugin-graphql/hooks/graphql/index.js index 7dbe3fe364..998a3e53a6 100644 --- a/packages/strapi-plugin-graphql/hooks/graphql/index.js +++ b/packages/strapi-plugin-graphql/hooks/graphql/index.js @@ -92,6 +92,7 @@ module.exports = strapi => { ) { serverParams.playground = { endpoint: strapi.plugins.graphql.config.endpoint, + shareEnabled: strapi.plugins.graphql.config.shareEnabled }; serverParams.introspection = true; diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/de.json b/packages/strapi-plugin-users-permissions/admin/src/translations/de.json index 60e5a96aaa..95a4aa31c9 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/translations/de.json +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/de.json @@ -30,7 +30,7 @@ "EditPage.notification.policies.error": "Beim Abruf von policies ist ein Fehler aufgetreten", "EditPage.notification.role.error": "Beim Abruf der Rolle ist ein Fehler aufgetreten", "EditPage.submit": "Speichern", - "Email.template.email_confirmation": "BetsΓ€tigung der E-Mail Adresse", + "Email.template.email_confirmation": "BestΓ€tigung der E-Mail Adresse", "Email.template.reset_password": "Passwort zurΓΌcksetzen", "Email.template.success_register": "Anmeldung erfolgreich", "Email.template.validation_email": "Validierung der E-Mail-Adresse", diff --git a/packages/strapi-plugin-users-permissions/config/functions/bootstrap.js b/packages/strapi-plugin-users-permissions/config/functions/bootstrap.js index 4ae8e164f9..13e0d957c9 100644 --- a/packages/strapi-plugin-users-permissions/config/functions/bootstrap.js +++ b/packages/strapi-plugin-users-permissions/config/functions/bootstrap.js @@ -15,11 +15,13 @@ module.exports = async () => { const jwtSecret = uuid(); _.set(strapi.plugins['users-permissions'], 'config.jwtSecret', jwtSecret); + strapi.reload.isWatching = false; await strapi.fs.writePluginFile( 'users-permissions', 'config/jwt.json', JSON.stringify({ jwtSecret }, null, 2) ); + strapi.reload.isWatching = true; } const pluginStore = strapi.store({ diff --git a/yarn.lock b/yarn.lock index 7654cb031a..50dd831057 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,17 +22,17 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.1.0", "@babel/core@^7.4.3": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91" - integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" + integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.2" + "@babel/generator" "^7.6.4" "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.2" + "@babel/parser" "^7.6.4" "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" + "@babel/traverse" "^7.6.3" + "@babel/types" "^7.6.3" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -41,12 +41,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03" - integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ== +"@babel/generator@^7.4.0", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== dependencies: - "@babel/types" "^7.6.0" + "@babel/types" "^7.6.3" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -244,10 +244,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" - integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -372,10 +372,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79" - integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ== +"@babel/plugin-transform-block-scoping@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" + integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" @@ -497,10 +497,10 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b" - integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g== +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" + integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== dependencies: regexpu-core "^4.6.0" @@ -646,9 +646,9 @@ regenerator-runtime "^0.13.2" "@babel/preset-env@^7.4.3": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" - integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" + integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -666,7 +666,7 @@ "@babel/plugin-transform-arrow-functions" "^7.2.0" "@babel/plugin-transform-async-to-generator" "^7.5.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.2" + "@babel/plugin-transform-block-scoping" "^7.6.3" "@babel/plugin-transform-classes" "^7.5.5" "@babel/plugin-transform-computed-properties" "^7.2.0" "@babel/plugin-transform-destructuring" "^7.6.0" @@ -681,7 +681,7 @@ "@babel/plugin-transform-modules-commonjs" "^7.6.0" "@babel/plugin-transform-modules-systemjs" "^7.5.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.5.5" "@babel/plugin-transform-parameters" "^7.4.4" @@ -694,7 +694,7 @@ "@babel/plugin-transform-template-literals" "^7.4.4" "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.6.2" - "@babel/types" "^7.6.0" + "@babel/types" "^7.6.3" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" @@ -702,9 +702,9 @@ semver "^5.5.0" "@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.6.3.tgz#d5242c828322520205ae4eda5d4f4f618964e2f6" + integrity sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-react-display-name" "^7.0.0" @@ -712,10 +712,10 @@ "@babel/plugin-transform-react-jsx-self" "^7.0.0" "@babel/plugin-transform-react-jsx-source" "^7.0.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd" - integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" + integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== dependencies: regenerator-runtime "^0.13.2" @@ -728,25 +728,25 @@ "@babel/parser" "^7.6.0" "@babel/types" "^7.6.0" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" - integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" + integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.2" + "@babel/generator" "^7.6.3" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.2" - "@babel/types" "^7.6.0" + "@babel/parser" "^7.6.3" + "@babel/types" "^7.6.3" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" - integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -799,9 +799,9 @@ "@emotion/weak-memoize" "0.2.4" "@emotion/core@^10.0.9": - version "10.0.17" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.17.tgz#3367376709721f4ee2068cff54ba581d362789d8" - integrity sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg== + version "10.0.21" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.21.tgz#2e8398d2b92fd90d4ed6ac4d0b66214971de3458" + integrity sha512-U9zbc7ovZ2ceIwbLXYZPJy6wPgnOdTNT4jENZ31ee6v2lojetV5bTbCVk6ciT8G3wQRyVaTTfUCH9WCrMzpRIw== dependencies: "@babel/runtime" "^7.5.5" "@emotion/cache" "^10.0.17" @@ -973,9 +973,9 @@ "@fortawesome/fontawesome-common-types" "^0.2.25" "@fortawesome/react-fontawesome@^0.1.4": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.5.tgz#8bc3cd5c617749534787a35e29caa7a6cff705c9" - integrity sha512-WYDKTgyAWOncujWhhzhW7k8sgO5Eo2pZTUL51yNzSQNBUwwr6rNKg/JUSE3iebaU1XShHw74aKc1kJ+jvtRNew== + version "0.1.6" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.6.tgz#b798b96401e25d07c30bbe1b9ec0e6d8a33760a5" + integrity sha512-DNqt2t4JQ0YQKi832XzByk1wlQzgugwwCCNQHsFyz1z/zA9dtypSvsvVwMIaWXMljalYzKAA2zHX13C1DIxKAw== dependencies: prop-types "^15.5.10" @@ -1054,9 +1054,9 @@ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== "@hapi/hoek@8.x.x": - version "8.2.5" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.5.tgz#b307d3f1aced22e05bd6a2403c302eaebb577da3" - integrity sha512-rmGFzok1zR3xZKd5m3ihWdqafXFxvPHoQ/78+AG5URKbEbJiwBBfRgzbu+07W5f3+07JRshw6QqGbVmCp8ntig== + version "8.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.3.0.tgz#2b9db1cd00f3891005c77b3a8d608b88a6d0aa4d" + integrity sha512-C0QL9bmgUXTSuf8nDeGrpMjtJG7tPUr8wG6/wxPbP62tGwCwQtdMSJYfESowmY4P3Hn593f+8OzNY5bckcu/LQ== "@hapi/joi@^15.0.3": version "15.1.1" @@ -1069,9 +1069,9 @@ "@hapi/topo" "3.x.x" "@hapi/topo@3.x.x": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.4.tgz#42e2fe36f593d90ad258a08b582be128c141c45d" - integrity sha512-aVWQTOI9wBD6zawmOr6f+tdEIxQC8JXfQVLTjgGe8YEStAWGn/GNNVTobKJhbWKveQj2RyYF3oYbO9SC8/eOCA== + version "3.1.5" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.5.tgz#3baea17e456530edad69a75c3fc7cde97dd6d331" + integrity sha512-bi9m1jrui9LlvtVdLaHv0DqeOoe+I8dep+nEcTgW6XxJHL3xArQcilYz3tIp0cRC4gWlsVtABK7vNKg4jzEmAA== dependencies: "@hapi/hoek" "8.x.x" @@ -1237,15 +1237,15 @@ dependencies: vary "^1.1.2" -"@lerna/add@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.16.2.tgz#90ecc1be7051cfcec75496ce122f656295bd6e94" - integrity sha512-RAAaF8aODPogj2Ge9Wj3uxPFIBGpog9M+HwSuq03ZnkkO831AmasCTJDqV+GEpl1U2DvnhZQEwHpWmTT0uUeEw== +"@lerna/add@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.17.0.tgz#d5cdba14a489890134e5043d59ec64a07557ed97" + integrity sha512-On98kKbYRfUGYzCb2MUWCZyUmwNl1Acbd66CM+hDSrYEPZ7W3uq56Tfya6De+cHGOPWWNWoss3C0ZyKILXpjAA== dependencies: "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.16.2" - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" + "@lerna/bootstrap" "3.17.0" + "@lerna/command" "3.16.5" + "@lerna/filter-options" "3.16.5" "@lerna/npm-conf" "3.16.0" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" @@ -1253,31 +1253,22 @@ p-map "^2.1.0" semver "^6.2.0" -"@lerna/batch-packages@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.16.0.tgz#1c16cb697e7d718177db744cbcbdac4e30253c8c" - integrity sha512-7AdMkANpubY/FKFI01im01tlx6ygOBJ/0JcixMUWoWP/7Ds3SWQF22ID6fbBr38jUWptYLDs2fagtTDL7YUPuA== +"@lerna/bootstrap@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.17.0.tgz#5572c75bd0b5402caca53155761454589fe901b4" + integrity sha512-2wQEwEtzU1UP7ZuzHtjJPgFxWXY5OectT+sjIFrJDE7C9n9nbAkL9MI/IM2X3RbgRK+sIxbhEqyb9o+0Yfzk1A== dependencies: - "@lerna/package-graph" "3.16.0" - npmlog "^4.1.2" - -"@lerna/bootstrap@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.16.2.tgz#be268d940221d3c3270656b9b791b492559ad9d8" - integrity sha512-I+gs7eh6rv9Vyd+CwqL7sftRfOOsSzCle8cv/CGlMN7/p7EAVhxEdAw8SYoHIKHzipXszuqqy1Y3opyleD0qdA== - dependencies: - "@lerna/batch-packages" "3.16.0" - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/has-npm-version" "3.16.0" - "@lerna/npm-install" "3.16.0" + "@lerna/command" "3.16.5" + "@lerna/filter-options" "3.16.5" + "@lerna/has-npm-version" "3.16.5" + "@lerna/npm-install" "3.16.5" "@lerna/package-graph" "3.16.0" "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.14.2" + "@lerna/rimraf-dir" "3.16.5" "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-parallel-batches" "3.16.0" - "@lerna/symlink-binary" "3.16.2" - "@lerna/symlink-dependencies" "3.16.2" + "@lerna/run-topologically" "3.16.0" + "@lerna/symlink-binary" "3.17.0" + "@lerna/symlink-dependencies" "3.17.0" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" get-port "^4.2.0" @@ -1291,45 +1282,45 @@ read-package-tree "^5.1.6" semver "^6.2.0" -"@lerna/changed@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.16.4.tgz#c3e727d01453513140eee32c94b695de577dc955" - integrity sha512-NCD7XkK744T23iW0wqKEgF4R9MYmReUbyHCZKopFnsNpQdqumc3SOIvQUAkKCP6hQJmYvxvOieoVgy/CVDpZ5g== +"@lerna/changed@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.16.5.tgz#62426ffc9427daa201e8fd4a13685a0dbfe3f3c7" + integrity sha512-Sj66BK/QyYv7YxAQrFg6H+7X68OnSKsVVyTMKtfIFkj1t8ey67DNav0Y14AGNQq+CX0CtaiA0ZybC0KJcjtMDQ== dependencies: - "@lerna/collect-updates" "3.16.0" - "@lerna/command" "3.16.0" + "@lerna/collect-updates" "3.16.5" + "@lerna/command" "3.16.5" "@lerna/listable" "3.16.0" "@lerna/output" "3.13.0" - "@lerna/version" "3.16.4" + "@lerna/version" "3.16.5" -"@lerna/check-working-tree@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.14.2.tgz#5ce007722180a69643a8456766ed8a91fc7e9ae1" - integrity sha512-7safqxM/MYoAoxZxulUDtIJIbnBIgo0PB/FHytueG+9VaX7GMnDte2Bt1EKa0dz2sAyQdmQ3Q8ZXpf/6JDjaeg== +"@lerna/check-working-tree@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" + integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== dependencies: - "@lerna/collect-uncommitted" "3.14.2" - "@lerna/describe-ref" "3.14.2" + "@lerna/collect-uncommitted" "3.16.5" + "@lerna/describe-ref" "3.16.5" "@lerna/validation-error" "3.13.0" -"@lerna/child-process@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.14.2.tgz#950240cba83f7dfe25247cfa6c9cebf30b7d94f6" - integrity sha512-xnq+W5yQb6RkwI0p16ZQnrn6HkloH/MWTw4lGE1nKsBLAUbmSU5oTE93W1nrG0X3IMF/xWc9UYvNdUGMWvZZ4w== +"@lerna/child-process@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" + integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== dependencies: chalk "^2.3.1" execa "^1.0.0" strong-log-transformer "^2.0.0" -"@lerna/clean@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.16.0.tgz#1c134334cacea1b1dbeacdc580e8b9240db8efa1" - integrity sha512-5P9U5Y19WmYZr7UAMGXBpY7xCRdlR7zhHy8MAPDKVx70rFIBS6nWXn5n7Kntv74g7Lm1gJ2rsiH5tj1OPcRJgg== +"@lerna/clean@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.16.5.tgz#1177bb404245c8a9db2b722ec53849d619fec0de" + integrity sha512-PT//BXS11bf+lHF3LYVw+24/Rxk+vXBqZIsx8p1+ICia/lYXlxUgF90IQFGAT0OTu82j014VgozggoI+C3eLWw== dependencies: - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" + "@lerna/command" "3.16.5" + "@lerna/filter-options" "3.16.5" "@lerna/prompt" "3.13.0" "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.14.2" + "@lerna/rimraf-dir" "3.16.5" p-map "^2.1.0" p-map-series "^1.0.0" p-waterfall "^1.0.0" @@ -1344,33 +1335,33 @@ npmlog "^4.1.2" yargs "^12.0.1" -"@lerna/collect-uncommitted@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.14.2.tgz#b5ed00d800bea26bb0d18404432b051eee8d030e" - integrity sha512-4EkQu4jIOdNL2BMzy/N0ydHB8+Z6syu6xiiKXOoFl0WoWU9H1jEJCX4TH7CmVxXL1+jcs8FIS2pfQz4oew99Eg== +"@lerna/collect-uncommitted@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" + integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" chalk "^2.3.1" figgy-pudding "^3.5.1" npmlog "^4.1.2" -"@lerna/collect-updates@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.16.0.tgz#6db3ce8a740a4e2b972c033a63bdfb77f2553d8c" - integrity sha512-HwAIl815X2TNlmcp28zCrSdXfoZWNP7GJPEqNWYk7xDJTYLqQ+SrmKUePjb3AMGBwYAraZSEJLbHdBpJ5+cHmQ== +"@lerna/collect-updates@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.16.5.tgz#26496d6036ae4b421d211fc332c37a996b181dc0" + integrity sha512-JWeN/ghfQ0llfPtUWtNSHRCqAncHGF0hznsTVqxCoQ3j8GacgYaBLfC3FsUfTnUm8BQ1pi7prAclMoBvfmMwyQ== dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/describe-ref" "3.14.2" + "@lerna/child-process" "3.16.5" + "@lerna/describe-ref" "3.16.5" minimatch "^3.0.4" npmlog "^4.1.2" slash "^2.0.0" -"@lerna/command@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.16.0.tgz#ba3dba49cb5ce4d11b48269cf95becd86e30773f" - integrity sha512-u7tE4GC4/gfbPA9eQg+0ulnoJ+PMoMqomx033r/IxqZrHtmJR9+pF/37S0fsxJ2hX/RMFPC7c9Q/i8NEufSpdQ== +"@lerna/command@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.16.5.tgz#3a889acbd0d39362b37445ba4ced01878bcb4fba" + integrity sha512-sXv+a+ljEfW6aEKxmnv3rLbbWpDQi3IVdDoezCATkbqMYUssZGz43UwUVuaYikViB86SLBbtprFrVcZBaqAfCQ== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" "@lerna/package-graph" "3.16.0" "@lerna/project" "3.16.0" "@lerna/validation-error" "3.13.0" @@ -1407,14 +1398,14 @@ fs-extra "^8.1.0" npmlog "^4.1.2" -"@lerna/create@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.16.0.tgz#4de841ec7d98b29bb19fb7d6ad982e65f7a150e8" - integrity sha512-OZApR1Iz7awutbmj4sAArwhqCyKgcrnw9rH0aWAUrkYWrD1w4TwkvAcYAsfx5GpQGbLQwoXhoyyPwPfZRRWz3Q== +"@lerna/create@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.16.5.tgz#e733c767ba11f6ef89cecafb1f0ed094c90bcdae" + integrity sha512-eScA3iNhjeVAaaNDaVVmsupM4Sulmr4AQVPEfNUN+f6aU7KuvBwbe0Nh46xtQhgNTcSSWj9pmO2IisTrzq4ezA== dependencies: "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.16.5" "@lerna/npm-conf" "3.16.0" "@lerna/validation-error" "3.13.0" camelcase "^5.0.0" @@ -1431,42 +1422,42 @@ validate-npm-package-name "^3.0.0" whatwg-url "^7.0.0" -"@lerna/describe-ref@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.14.2.tgz#edc3c973f5ca9728d23358c4f4d3b55a21f65be5" - integrity sha512-qa5pzDRK2oBQXNjyRmRnN7E8a78NMYfQjjlRFB0KNHMsT6mCiL9+8kIS39sSE2NqT8p7xVNo2r2KAS8R/m3CoQ== +"@lerna/describe-ref@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" + integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" npmlog "^4.1.2" -"@lerna/diff@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.16.0.tgz#6d09a786f9f5b343a2fdc460eb0be08a05b420aa" - integrity sha512-QUpVs5TPl8vBIne10/vyjUxanQBQQp7Lk3iaB8MnCysKr0O+oy7trWeFVDPEkBTCD177By7yPGyW5Yey1nCBbA== +"@lerna/diff@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.16.5.tgz#5b5ceb596f562e7329cbb50d27ed5ec4231e754f" + integrity sha512-19Nchn4Yem/FyNqXSMzv3RP3/jRBTpu1i/Z/nCrt5lA0D2fFv9uCh9aE2XnzqZ0r7qiGJZNOMax/TIOqq3KtFA== dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.16.5" "@lerna/validation-error" "3.13.0" npmlog "^4.1.2" -"@lerna/exec@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.16.0.tgz#2b6c033cee46181b6eede0eb12aad5c2c0181e89" - integrity sha512-mH3O5NXf/O88jBaBBTUf+d56CUkxpg782s3Jxy7HWbVuSUULt3iMRPTh+zEXO5/555etsIVVDDyUR76meklrJA== +"@lerna/exec@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.16.5.tgz#2a3055263d89dc59d593f0eaab4f22286d47e142" + integrity sha512-z7ceaYr3B9Zzmf5TlPulMNOKhsq6emzWSuiTX57eMWCnVfqDt34dM89HredJwFAmxLSlhqHuGQOhwyOaEY7+2g== dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.16.5" + "@lerna/filter-options" "3.16.5" "@lerna/run-topologically" "3.16.0" "@lerna/validation-error" "3.13.0" p-map "^2.1.0" -"@lerna/filter-options@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.16.0.tgz#b1660b4480c02a5c6efa4d0cd98b9afde4ed0bba" - integrity sha512-InIi1fF8+PxpCwir9bIy+pGxrdE6hvN0enIs1eNGCVS1TTE8osNgiZXa838bMQ1yaEccdcnVX6Z03BNKd56kNg== +"@lerna/filter-options@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.16.5.tgz#2137a75c0e5aa28c9bdfb75f53755aa28abfa202" + integrity sha512-PnkrDPJHvQ3k19JFG8jJVasVbZhg+Ckg5u9aVA254T3BSA2CT7MtXjB+snS76npe83170zII0iYufDUY4rhm0A== dependencies: - "@lerna/collect-updates" "3.16.0" + "@lerna/collect-updates" "3.16.5" "@lerna/filter-packages" "3.16.0" dedent "^0.7.0" @@ -1495,12 +1486,12 @@ ssri "^6.0.1" tar "^4.4.8" -"@lerna/github-client@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.0.tgz#619874e461641d4f59ab1b3f1a7ba22dba88125d" - integrity sha512-IVJjcKjkYaUEPJsDyAblHGEFFNKCRyMagbIDm14L7Ab94ccN6i4TKOqAFEJn2SJHYvKKBdp3Zj2zNlASOMe3DA== +"@lerna/github-client@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" + integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" "@octokit/plugin-enterprise-rest" "^3.6.1" "@octokit/rest" "^16.28.4" git-url-parse "^11.1.2" @@ -1520,21 +1511,21 @@ resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== -"@lerna/has-npm-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.0.tgz#55764a4ce792f0c8553cf996a17f554b9e843288" - integrity sha512-TIY036dA9J8OyTrZq9J+it2DVKifL65k7hK8HhkUPpitJkw6jwbMObA/8D40LOGgWNPweJWqmlrTbRSwsR7DrQ== +"@lerna/has-npm-version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" + integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" semver "^6.2.0" -"@lerna/import@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.16.0.tgz#b57cb453f4acfc60f6541fcbba10674055cb179d" - integrity sha512-trsOmGHzw0rL/f8BLNvd+9PjoTkXq2Dt4/V2UCha254hMQaYutbxcYu8iKPxz9x86jSPlH7FpbTkkHXDsoY7Yg== +"@lerna/import@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.16.5.tgz#3fe1f11ad25ff929963b8d7e331ac391c4920947" + integrity sha512-n5zy9zeNziS/jex/rHiw7YSpnsfGYXBLv4RSm0gnKouV+dvKocUd139S0oHJG3oQgL+B6anZpR/3ajxz4QcZ4w== dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.16.5" "@lerna/prompt" "3.13.0" "@lerna/pulse-till-done" "3.13.0" "@lerna/validation-error" "3.13.0" @@ -1542,35 +1533,35 @@ fs-extra "^8.1.0" p-map-series "^1.0.0" -"@lerna/init@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.16.0.tgz#31e0d66bbededee603338b487a42674a072b7a7d" - integrity sha512-Ybol/x5xMtBgokx4j7/Y3u0ZmNh0NiSWzBFVaOs2NOJKvuqrWimF67DKVz7yYtTYEjtaMdug64ohFF4jcT/iag== +"@lerna/init@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.16.5.tgz#ca45889d6d15c46e26d1b45b59ef455006df7f68" + integrity sha512-K8JtSHbPxR5pZHJ0GUXGhMdx+E/pDnbp8JbTUkEkLCyRHp3C0VFAtINJ+ysSpObleTFivA1xrgwqG8JbgI213Q== dependencies: - "@lerna/child-process" "3.14.2" - "@lerna/command" "3.16.0" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.16.5" fs-extra "^8.1.0" p-map "^2.1.0" write-json-file "^3.2.0" -"@lerna/link@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.16.2.tgz#6c3a5658f6448a64dddca93d9348ac756776f6f6" - integrity sha512-eCPg5Lo8HT525fIivNoYF3vWghO3UgEVFdbsiPmhzwI7IQyZro5HWYzLtywSAdEog5XZpd2Bbn0CsoHWBB3gww== +"@lerna/link@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.17.0.tgz#4a08eb384342d4e530b16d47ebfade9a2c1dbeeb" + integrity sha512-eh8+mAH74ndxigBQIW5jXO1md8jpTzpzHHiRwCoetRr3QM2oLgYbWczZDViCdWV4R4J6BLbyp3Jh64cob+leyA== dependencies: - "@lerna/command" "3.16.0" + "@lerna/command" "3.16.5" "@lerna/package-graph" "3.16.0" - "@lerna/symlink-dependencies" "3.16.2" + "@lerna/symlink-dependencies" "3.17.0" p-map "^2.1.0" slash "^2.0.0" -"@lerna/list@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.16.0.tgz#883c00b2baf1e03c93e54391372f67a01b773c2f" - integrity sha512-TkvstoPsgKqqQ0KfRumpsdMXfRSEhdXqOLq519XyI5IRWYxhoqXqfi8gG37UoBPhBNoe64japn5OjphF3rOmQA== +"@lerna/list@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.16.5.tgz#eb27d826a1614d447377b446a552570bc1744830" + integrity sha512-HJgJigTyIvLOWvdW5++Ewam+owk2aNPg/niqqIaV90OtzsEd55Cqb2ziIWdFLRFLYPu66HHhJOXBnGfP1uNl9A== dependencies: - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" + "@lerna/command" "3.16.5" + "@lerna/filter-options" "3.16.5" "@lerna/listable" "3.16.0" "@lerna/output" "3.13.0" @@ -1612,12 +1603,12 @@ npm-package-arg "^6.1.0" npmlog "^4.1.2" -"@lerna/npm-install@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.0.tgz#8ec76a7a13b183bde438fd46296bf7a0d6f86017" - integrity sha512-APUOIilZCzDzce92uLEwzt1r7AEMKT/hWA1ThGJL+PO9Rn8A95Km3o2XZAYG4W0hR+P4O2nSVuKbsjQtz8CjFQ== +"@lerna/npm-install@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" + integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" "@lerna/get-npm-exec-opts" "3.13.0" fs-extra "^8.1.0" npm-package-arg "^6.1.0" @@ -1640,12 +1631,12 @@ pify "^4.0.1" read-package-json "^2.0.13" -"@lerna/npm-run-script@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.14.2.tgz#8c518ea9d241a641273e77aad6f6fddc16779c3f" - integrity sha512-LbVFv+nvAoRTYLMrJlJ8RiakHXrLslL7Jp/m1R18vYrB8LYWA3ey+nz5Tel2OELzmjUiemAKZsD9h6i+Re5egg== +"@lerna/npm-run-script@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" + integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" "@lerna/get-npm-exec-opts" "3.13.0" npmlog "^4.1.2" @@ -1731,19 +1722,19 @@ inquirer "^6.2.0" npmlog "^4.1.2" -"@lerna/publish@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.16.4.tgz#4cd55d8be9943d9a68e316e930a90cda8590500e" - integrity sha512-XZY+gRuF7/v6PDQwl7lvZaGWs8CnX6WIPIu+OCcyFPSL/rdWegdN7HieKBHskgX798qRQc2GrveaY7bNoTKXAw== +"@lerna/publish@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.16.5.tgz#d101f3a18ea117269c997ef5ba65117d65cafd08" + integrity sha512-gJzvzeOWj0d4+RWCAcCyvFXN246Dwl2WpOLtWKwdFUC3fz+tvCI7FO8moPbaJt6EqYRMDaoeqVQnIrSeisbZDw== dependencies: "@evocateur/libnpmaccess" "^3.1.2" "@evocateur/npm-registry-fetch" "^4.0.0" "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.14.2" - "@lerna/child-process" "3.14.2" - "@lerna/collect-updates" "3.16.0" - "@lerna/command" "3.16.0" - "@lerna/describe-ref" "3.14.2" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.16.5" + "@lerna/command" "3.16.5" + "@lerna/describe-ref" "3.16.5" "@lerna/log-packed" "3.16.0" "@lerna/npm-conf" "3.16.0" "@lerna/npm-dist-tag" "3.16.0" @@ -1757,7 +1748,7 @@ "@lerna/run-lifecycle" "3.16.2" "@lerna/run-topologically" "3.16.0" "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.16.4" + "@lerna/version" "3.16.5" figgy-pudding "^3.5.1" fs-extra "^8.1.0" npm-package-arg "^6.1.0" @@ -1791,12 +1782,12 @@ npmlog "^4.1.2" read-cmd-shim "^1.0.1" -"@lerna/rimraf-dir@3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.14.2.tgz#103a49882abd85d42285d05cc76869b89f21ffd2" - integrity sha512-eFNkZsy44Bu9v1Hrj5Zk6omzg8O9h/7W6QYK1TTUHeyrjTEwytaNQlqF0lrTLmEvq55sviV42NC/8P3M2cvq8Q== +"@lerna/rimraf-dir@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" + integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== dependencies: - "@lerna/child-process" "3.14.2" + "@lerna/child-process" "3.16.5" npmlog "^4.1.2" path-exists "^3.0.0" rimraf "^2.6.2" @@ -1811,14 +1802,6 @@ npm-lifecycle "^3.1.2" npmlog "^4.1.2" -"@lerna/run-parallel-batches@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.16.0.tgz#5ace7911a2dd31dfd1e53c61356034e27df0e1fb" - integrity sha512-2J/Nyv+MvogmQEfC7VcS21ifk7w0HVvzo2yOZRPvkCzGRu/rducxtB4RTcr58XCZ8h/Bt1aqQYKExu3c/3GXwg== - dependencies: - p-map "^2.1.0" - p-map-series "^1.0.0" - "@lerna/run-topologically@3.16.0": version "3.16.0" resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.16.0.tgz#39e29cfc628bbc8e736d8e0d0e984997ac01bbf5" @@ -1828,38 +1811,38 @@ figgy-pudding "^3.5.1" p-queue "^4.0.0" -"@lerna/run@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.16.0.tgz#1ea568c6f303e47fa00b3403a457836d40738fd2" - integrity sha512-woTeLlB1OAAz4zzjdI6RyIxSGuxiUPHJZm89E1pDEPoWwtQV6HMdMgrsQd9ATsJ5Ez280HH4bF/LStAlqW8Ufg== +"@lerna/run@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.16.5.tgz#66466fbe3edfe94b29f53341c05e7a509b1e8388" + integrity sha512-sORjqiGJvbLhax/QE9IfTKsvUGfNDu8bUkxxhnbxYu0tGhgWhiPzRVZ564QG9zQ6D23CGd/wQ0AHyrsRPulbzQ== dependencies: - "@lerna/command" "3.16.0" - "@lerna/filter-options" "3.16.0" - "@lerna/npm-run-script" "3.14.2" + "@lerna/command" "3.16.5" + "@lerna/filter-options" "3.16.5" + "@lerna/npm-run-script" "3.16.5" "@lerna/output" "3.13.0" "@lerna/run-topologically" "3.16.0" "@lerna/timer" "3.13.0" "@lerna/validation-error" "3.13.0" p-map "^2.1.0" -"@lerna/symlink-binary@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.16.2.tgz#f98a3d9da9e56f1d302dc0d5c2efeb951483ee66" - integrity sha512-kz9XVoFOGSF83gg4gBqH+mG6uxfJfTp8Uy+Cam40CvMiuzfODrGkjuBEFoM/uO2QOAwZvbQDYOBpKUa9ZxHS1Q== +"@lerna/symlink-binary@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" + integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== dependencies: "@lerna/create-symlink" "3.16.2" "@lerna/package" "3.16.0" fs-extra "^8.1.0" p-map "^2.1.0" -"@lerna/symlink-dependencies@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.16.2.tgz#91d9909d35897aebd76a03644a00cd03c4128240" - integrity sha512-wnZqGJQ+Jvr1I3inxrkffrFZfmQI7Ta8gySw/UWCy95QtZWF/f5yk8zVIocCAsjzD0wgb3jJE3CFJ9W5iwWk1A== +"@lerna/symlink-dependencies@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" + integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== dependencies: "@lerna/create-symlink" "3.16.2" "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.16.2" + "@lerna/symlink-binary" "3.17.0" fs-extra "^8.1.0" p-finally "^1.0.0" p-map "^2.1.0" @@ -1877,17 +1860,17 @@ dependencies: npmlog "^4.1.2" -"@lerna/version@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.16.4.tgz#b5cc37f3ad98358d599c6196c30b6efc396d42bf" - integrity sha512-ikhbMeIn5ljCtWTlHDzO4YvTmpGTX1lWFFIZ79Vd1TNyOr+OUuKLo/+p06mCl2WEdZu0W2s5E9oxfAAQbyDxEg== +"@lerna/version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.16.5.tgz#5e4726e623d67f2ae3af9833a14fb71b2d04f09e" + integrity sha512-GHwIqC6rLldpn7e4P/Ms+ygu9nC/1UJidpaBa6qhvuXlIaqJuFKdQGHTXfuvCBUS+/LTA3Cb9cQZgob9aocOkA== dependencies: - "@lerna/check-working-tree" "3.14.2" - "@lerna/child-process" "3.14.2" - "@lerna/collect-updates" "3.16.0" - "@lerna/command" "3.16.0" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.16.5" + "@lerna/command" "3.16.5" "@lerna/conventional-commits" "3.16.4" - "@lerna/github-client" "3.16.0" + "@lerna/github-client" "3.16.5" "@lerna/gitlab-client" "3.15.0" "@lerna/output" "3.13.0" "@lerna/prerelease-id-from-version" "3.16.0" @@ -1923,36 +1906,36 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@nodelib/fs.scandir@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" - integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: - "@nodelib/fs.stat" "2.0.2" + "@nodelib/fs.stat" "2.0.3" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" - integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@nodelib/fs.walk@^1.2.1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" - integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: - "@nodelib/fs.scandir" "2.1.2" + "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" "@octokit/endpoint@^5.1.0": - version "5.3.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.3.6.tgz#58a67b75b853127568e0db533cdd10f3bdca2e23" - integrity sha512-XuerByak8H+jW9J/rVMEdBXfI4UTsDWUwAKgIP/uhQjXIUVdPRwt2Zg+SmbWQ+WY7pRkw/hFVES8C4G/Kle7oA== + version "5.4.0" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.4.0.tgz#5b44b3e8e92d88765daf127e1501174ecbca7bce" + integrity sha512-DWTNgEKg5KXzvNjKTzcFTnkZiL7te6pQxxumvxPjyjDpcY5V3xzywnNu1WVqySY3Ct1flF/kAoyDdZos6acq3Q== dependencies: is-plain-object "^3.0.0" universal-user-agent "^4.0.0" @@ -1984,9 +1967,9 @@ universal-user-agent "^4.0.0" "@octokit/rest@^16.28.4": - version "16.30.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.30.1.tgz#03e6dfb93e9a9cd2b3bacb95c49a8c7923f42ad0" - integrity sha512-1n2QzTbbaBXNLpx7WHlcsSMdJvxSdKmerXQm+bMYlKDbQM19uq446ZpGs7Ynq5SsdLj1usIfgJ9gJf4LtcWkDw== + version "16.33.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.33.0.tgz#13c1404b24c9871419eb31029de177e82f3eb851" + integrity sha512-t4jMR+odsfooQwmHiREoTQixVTX2DfdbSaO+lKrW9R5XBuk0DW+5T/JdfwtxAGUAHgvDDpWY/NVVDfEPTzxD6g== dependencies: "@octokit/request" "^5.0.0" "@octokit/request-error" "^1.0.2" @@ -2172,17 +2155,17 @@ dependencies: tslib "^1.9.3" -"@snyk/cli-interface@^2.0.2", "@snyk/cli-interface@^2.0.3", "@snyk/cli-interface@^2.1.0": +"@snyk/cli-interface@^2.0.3", "@snyk/cli-interface@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@snyk/cli-interface/-/cli-interface-2.1.0.tgz#2e7ecd9457c91b78ce3e5b91451e823f218a25af" integrity sha512-b/magC8iNQP9QhSDeV9RQDSaY3sNy57k0UH1Y/sMOSvVLHLsA7dOi/HrPWTiLouyGqcuYzwjkz7bNbu8cwmVDQ== dependencies: tslib "^1.9.3" -"@snyk/cocoapods-lockfile-parser@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@snyk/cocoapods-lockfile-parser/-/cocoapods-lockfile-parser-2.0.2.tgz#6a3c236483d1c952f40a6d46f290e967235f7f19" - integrity sha512-DSSlljXGhSECdx7KhK7QlBiGC82fM2dZMzhcWxOsqyUVqzjArRGS9i4CRl/WMK5WDlLgc5bn5Xmpmp/g5Hf9YQ== +"@snyk/cocoapods-lockfile-parser@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@snyk/cocoapods-lockfile-parser/-/cocoapods-lockfile-parser-2.0.4.tgz#296421454ba2ee9248ce1f13da57aa1b10b54de7" + integrity sha512-d57bajPjqCiNXMuyMmt9Zt98zbjABZUFw+91B705flzV6oB7OThgtA40Eoin6iatYoStIx28bC3T6b0mScy/iA== dependencies: "@snyk/dep-graph" "^1.11.0" "@snyk/ruby-semver" "^2.0.4" @@ -2235,33 +2218,33 @@ dependencies: lodash "^4.17.14" -"@snyk/snyk-cocoapods-plugin@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@snyk/snyk-cocoapods-plugin/-/snyk-cocoapods-plugin-1.0.2.tgz#2d9012fc2be35917f8225b50da83635330fbb59a" - integrity sha512-eb8cawvz2vDLg/DRyzDDgv7+oZhsojNXxF8anX2Iq4ws8GZjd9CrMMMaSU7QehcT4h7jH5ITzbB1HOp+XHm3rw== +"@snyk/snyk-cocoapods-plugin@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@snyk/snyk-cocoapods-plugin/-/snyk-cocoapods-plugin-1.0.3.tgz#eb685590e6a478e1d86f1042c9493426f2f9764a" + integrity sha512-AHAA7z23nPi1eHODsDxeSkl73Ze3yphuqJjMl39ie323EzBDcb9g6uAACrk0Qn2K/K2D8uyxMAf2zDtc+JGQfw== dependencies: "@snyk/cli-interface" "1.5.0" - "@snyk/cocoapods-lockfile-parser" "2.0.2" + "@snyk/cocoapods-lockfile-parser" "2.0.4" "@snyk/dep-graph" "1.13.0" source-map-support "^0.5.7" tslib "^1.9.3" "@testing-library/dom@^6.3.0": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.4.1.tgz#4efd38d896b9b2255025acf9567e2360e1f4814f" - integrity sha512-bjPHLO5NzlTvA57Tfz8txHEUmnOed3NuvObB2ttoKfO6A/utr7TZt9bDHHcYymcZIG2IsQZLix/m4ZKkedDDwQ== + version "6.7.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.7.1.tgz#90985ab2524f712be695872714997a8b66958223" + integrity sha512-whU3jdiv18l+v+6P8I8aAt1phaZHx6LwJtCsxoWTEp8OD8rEZs8V4SOnCpK70SXUcpZVE/NWPY/d/lNAffpmtA== dependencies: - "@babel/runtime" "^7.5.5" + "@babel/runtime" "^7.6.2" "@sheerun/mutationobserver-shim" "^0.3.2" "@types/testing-library__dom" "^6.0.0" aria-query "3.0.0" - pretty-format "^24.8.0" - wait-for-expect "^1.3.0" + pretty-format "^24.9.0" + wait-for-expect "^3.0.0" "@testing-library/jest-dom@^4.0.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.1.0.tgz#69d372e54e4e33be3fd34f3848ec0e8e9d099276" - integrity sha512-cKAONDmJKGJ2DSu6R/+lgA8i8uyZIx4CaOiiK0yMjp+2UecH6kfjunJiy5hfExKMtR74eyzFriqO1w9aTC8VyQ== + version "4.1.2" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.1.2.tgz#e523047191379abd67cf0896dfd93cabc7e33eab" + integrity sha512-fNf2rCfu0dBD4DmpzqR2ibsaFlFojrWI/EuU8LLqv73CzFIMvT2RMq88p5JVRe4DfeNj0mu0MQ5FTG4mQ0qFaA== dependencies: "@babel/runtime" "^7.5.1" chalk "^2.4.1" @@ -2274,18 +2257,17 @@ redent "^3.0.0" "@testing-library/react-hooks@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-2.0.1.tgz#1c3ec40882d0830df3078ddae0056fdf7366c81d" - integrity sha512-MLTvWX7/csq/uQzP4WJntGz0QJDq6H4EzjV0VTL5YJE7KBZbaQ9DGT0IbtjuB33L4R4YKZ55rGZQ5eL+WiZtQA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-2.0.3.tgz#305a6c76facb5fa1d185792b9eb11b1ca1b63fb7" + integrity sha512-adm+7b1gcysGka8VuYq/ObBrIBJTT9QmCEIqPpuxozWFfVDgxSbzBGc44ia/WYLGVt2dqFIOc6/DmAmu/pa0gQ== dependencies: "@babel/runtime" "^7.5.4" - "@types/react" ">=16.9.0" - "@types/react-test-renderer" ">=16.9.0" + "@types/testing-library__react-hooks" "^2.0.0" "@testing-library/react@^9.1.0": - version "9.2.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.2.0.tgz#143ad2d96b03c3c334e47aaf33cc2c9b7d007123" - integrity sha512-Hr87KZflfI+vPZjgyzBKQHolQHiXGU5aTGjQSCJdH/yGPbm+IzrvuWPS97GD3RUH3rSS1IXq1e2Sn8Hmyw2ctA== + version "9.3.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.3.0.tgz#1dabf46d1ea018a1c89acecc0e7b86859b34c0f8" + integrity sha512-FTPCwmLo0tLtP50Au2uGz4/N1BcJTnBx4StDVHZ47zPMEj1/+J2rk/RTj8SLoHRKWCtcmhN4wRmudOXQNP29/w== dependencies: "@babel/runtime" "^7.6.0" "@testing-library/dom" "^6.3.0" @@ -2405,9 +2387,9 @@ "@types/node" "*" "@types/cookies@*": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.3.tgz#5a4e2b61b36e19f578851f274be45fa9d802a87e" - integrity sha512-NEkYn8pNsYZIxf3ZrjdPoeyueiPc0RbQClUpTwmdHkpmQQ8iDAlQYKpabuegHy7BJcqTteSTkhURMEs9ZxyEWg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.4.tgz#26dedf791701abc0e36b5b79a5722f40e455f87b" + integrity sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw== dependencies: "@types/connect" "*" "@types/express" "*" @@ -2606,14 +2588,14 @@ integrity sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw== "@types/node@*": - version "12.7.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.8.tgz#cb1bf6800238898bc2ff6ffa5702c3cadd350708" - integrity sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A== + version "12.7.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.12.tgz#7c6c571cc2f3f3ac4a59a5f2bd48f5bdbc8653cc" + integrity sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ== "@types/node@^10.1.0": - version "10.14.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.19.tgz#f52742c7834a815dedf66edfc8a51547e2a67342" - integrity sha512-j6Sqt38ssdMKutXBUuAcmWF8QtHW1Fwz/mz4Y+Wd9mzpBiVFirjpNQf363hG5itkG+yGaD+oiLyb50HxJ36l9Q== + version "10.14.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.21.tgz#4a9db7ef1d1671c0015e632c5fa3d46c86c58c1e" + integrity sha512-nuFlRdBiqbF+PJIEVxm2jLFcQWN7q7iWEJGsBV4n7v1dbI9qXB8im2pMMKMCUZe092sQb5SQft2DHfuQGK5hqQ== "@types/node@^6.14.4": version "6.14.7" @@ -2647,17 +2629,17 @@ dependencies: "@types/react" "*" -"@types/react-test-renderer@>=16.9.0": +"@types/react-test-renderer@*": version "16.9.0" resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.0.tgz#d60f530ecf4c906721511603cca711b4fa830d41" integrity sha512-bN5EyjtuTY35xX7N5j0KP1vg5MpUXHpFTX6tGsqkNOthjNvet4VQOYRxFh+NT5cDSJrATmAFK9NLeYZ4mp/o0Q== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@>=16.9.0": - version "16.9.4" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.4.tgz#de8cf5e5e2838659fb78fa93181078469eeb19fc" - integrity sha512-ItGNmJvQ0IvWt8rbk5PLdpdQhvBVxAaXI9hDlx7UMd8Ie1iMIuwMNiKeTfmVN517CdplpyXvA22X4zm4jGGZnw== +"@types/react@*": + version "16.9.5" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.5.tgz#079dabd918b19b32118c25fd00a786bb6d0d5e51" + integrity sha512-jQ12VMiFOWYlp+j66dghOWcmDDwhca0bnlcTxS4Qz/fh5gi6wpaZDthPEu/Gc/YlAuO87vbiUXL8qKstFvuOaA== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -2714,9 +2696,9 @@ "@types/sinon" "*" "@types/sinon@*": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.13.tgz#ca039c23a9e27ebea53e0901ef928ea2a1a6d313" - integrity sha512-d7c/C/+H/knZ3L8/cxhicHUiTDxdgap0b/aNJfsmLwFu/iOP17mdgbQsbHA3SJmrzsjD0l3UEE5SN4xxuz5ung== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.0.tgz#f5a10c27175465a0b001b68d8b9f761582967cc6" + integrity sha512-NyzhuSBy97B/zE58cDw4NyGvByQbAHNP9069KVSgnXt/sc0T6MFRh0InKAeBVHJWdSXG1S3+PxgVIgKo9mTHbw== "@types/sinon@4.0.0": version "4.0.0" @@ -2734,16 +2716,24 @@ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.4.0.tgz#a9411ed4942a11260ffd1790c4d2225959171c72" - integrity sha512-Ae8p2knO5h4JMYcZzOE6lSaV4jg1JqRFjI2J3vU6Dzf9SWQjpyOtJUekFZ51Jv4+Sbsvy4XVocka7lCuzKkUmQ== + version "6.5.2" + resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.5.2.tgz#b449b6dbd2f90896c2ab23a67a879198263c9546" + integrity sha512-KygLl2uDAC2MDaEPK4r7yPH2EAQkWrj4frwLZLEJ1bCk2LBUqWziqxMNk7++sjJNVRLYtQ2EhVy75uUUBt+z/g== dependencies: pretty-format "^24.3.0" +"@types/testing-library__react-hooks@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/testing-library__react-hooks/-/testing-library__react-hooks-2.0.0.tgz#7b289d64945517ae8ba9cbcb0c5b282432aaeffa" + integrity sha512-YUVqXGCChJKEJ4aAnMXqPCq0NfPAFVsJeGIb2y/iiMjxwyu+45+vR+AHOwjJHHKEHeC0ZhOGrZ5gSEmaJe4tyQ== + dependencies: + "@types/react" "*" + "@types/react-test-renderer" "*" + "@types/testing-library__react@^9.1.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.1.tgz#4bcb8bba54b07fbb6c084f2f00e7f9410e587c10" - integrity sha512-8/toTJaIlS3BC7JrK2ElTnbjH8tmFP7atdL2ZsIa1JDmH9RKSm/7Wp5oMDJzXoWr988Mv7ym/XZ8LRglyoGCGw== + version "9.1.2" + resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.2.tgz#e33af9124c60a010fc03a34eff8f8a34a75c4351" + integrity sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q== dependencies: "@types/react-dom" "*" "@types/testing-library__dom" "*" @@ -3069,14 +3059,14 @@ agentkeepalive@^3.4.1: humanize-ms "^1.2.1" aggregate-error@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" - integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" - indent-string "^3.2.0" + indent-string "^4.0.0" -airbnb-prop-types@^2.10.0, airbnb-prop-types@^2.13.2, airbnb-prop-types@^2.15.0: +airbnb-prop-types@^2.10.0, airbnb-prop-types@^2.15.0: version "2.15.0" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef" integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA== @@ -3236,13 +3226,13 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-cache-control@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.8.4.tgz#a3650d5e4173953e2a3af995bea62147f1ffe4d7" - integrity sha512-IZ1d3AXZtkZhLYo0kWqTbZ6nqLFaeUvLdMESs+9orMadBZ7mvzcAfBwrhKyCWPGeAAZ/jKv8FtYHybpchHgFAg== +apollo-cache-control@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.8.5.tgz#d4b34691f6ca1cefac9d82b99a94a0815a85a5a8" + integrity sha512-2yQ1vKgJQ54SGkoQS/ZLZrDX3La6cluAYYdruFYJMJtL4zQrSdeOCy11CQliCMYEd6eKNyE70Rpln51QswW2Og== dependencies: apollo-server-env "^2.4.3" - graphql-extensions "^0.10.3" + graphql-extensions "^0.10.4" apollo-datasource@^0.6.3: version "0.6.3" @@ -3252,27 +3242,27 @@ apollo-datasource@^0.6.3: apollo-server-caching "^0.5.0" apollo-server-env "^2.4.3" -apollo-engine-reporting-protobuf@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.0.tgz#e34c192d86493b33a73181fd6be75721559111ec" - integrity sha512-cXHZSienkis8v4RhqB3YG3DkaksqLpcxApRLTpRMs7IXNozgV7CUPYGFyFBEra1ZFgUyHXx4G9MpelV+n2cCfA== +apollo-engine-reporting-protobuf@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.1.tgz#c0a35bcf28487f87dcbc452b03277f575192f5d2" + integrity sha512-d7vFFZ2oUrvGaN0Hpet8joe2ZG0X0lIGilN+SwgVP38dJnOuadjsaYMyrD9JudGQJg0bJA5wVQfYzcCVy0slrw== dependencies: protobufjs "^6.8.6" -apollo-engine-reporting@^1.4.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.4.6.tgz#83af6689c4ab82d1c62c3f5dde7651975508114f" - integrity sha512-acfb7oFnru/8YQdY4x6+7WJbZfzdVETI8Cl+9ImgUrvUnE8P+f2SsGTKXTC1RuUvve4c56PAvaPgE+z8X1a1Mw== +apollo-engine-reporting@^1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.4.7.tgz#6ca69ebdc1c17200969e2e4e07a0be64d748c27e" + integrity sha512-qsKDz9VkoctFhojM3Nj3nvRBO98t8TS2uTgtiIjUGs3Hln2poKMP6fIQ37Nm2Q2B3JJst76HQtpPwXmRJd1ZUg== dependencies: - apollo-engine-reporting-protobuf "^0.4.0" - apollo-graphql "^0.3.3" + apollo-engine-reporting-protobuf "^0.4.1" + apollo-graphql "^0.3.4" apollo-server-caching "^0.5.0" apollo-server-env "^2.4.3" - apollo-server-types "^0.2.4" + apollo-server-types "^0.2.5" async-retry "^1.2.1" - graphql-extensions "^0.10.3" + graphql-extensions "^0.10.4" -apollo-env@0.5.1: +apollo-env@0.5.1, apollo-env@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.5.1.tgz#b9b0195c16feadf0fe9fd5563edb0b9b7d9e97d3" integrity sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw== @@ -3281,12 +3271,12 @@ apollo-env@0.5.1: node-fetch "^2.2.0" sha.js "^2.4.11" -apollo-graphql@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.3.3.tgz#ce1df194f6e547ad3ce1e35b42f9c211766e1658" - integrity sha512-t3CO/xIDVsCG2qOvx2MEbuu4b/6LzQjcBBwiVnxclmmFyAxYCIe7rpPlnLHSq7HyOMlCWDMozjoeWfdqYSaLqQ== +apollo-graphql@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.3.4.tgz#c1f68591a4775945441d049eff9323542ab0401f" + integrity sha512-w+Az1qxePH4oQ8jvbhQBl5iEVvqcqynmU++x/M7MM5xqN1C7m1kyIzpN17gybXlTJXY4Oxej2WNURC2/hwpfYw== dependencies: - apollo-env "0.5.1" + apollo-env "^0.5.1" lodash.sortby "^4.7.0" apollo-link@^1.2.3: @@ -3306,26 +3296,26 @@ apollo-server-caching@^0.5.0: dependencies: lru-cache "^5.0.0" -apollo-server-core@^2.9.4: - version "2.9.4" - resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.9.4.tgz#0404455884951804d23ea64e45514c73afd34e5e" - integrity sha512-6mzipnn9woJxgo/JQFWTlY13svS7HCr0ZsN035eRmKOsXzROfB9ugXcTuc6MP94ICM7TlB/DtJOP+bLX53mijw== +apollo-server-core@^2.9.6: + version "2.9.6" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.9.6.tgz#b6dc087200633f47ca4f08244d3e606b4d616320" + integrity sha512-2tHAWQxP7HrETI/BZvg2fem6YlahF9HUp4Y6SSL95WP3uNMOJBlN12yM1y+O2u5K5e4jwdPNaLjoL2A/26XrLw== dependencies: "@apollographql/apollo-tools" "^0.4.0" "@apollographql/graphql-playground-html" "1.6.24" "@types/graphql-upload" "^8.0.0" "@types/ws" "^6.0.0" - apollo-cache-control "^0.8.4" + apollo-cache-control "^0.8.5" apollo-datasource "^0.6.3" - apollo-engine-reporting "^1.4.6" + apollo-engine-reporting "^1.4.7" apollo-server-caching "^0.5.0" apollo-server-env "^2.4.3" apollo-server-errors "^2.3.3" - apollo-server-plugin-base "^0.6.4" - apollo-server-types "^0.2.4" - apollo-tracing "^0.8.4" + apollo-server-plugin-base "^0.6.5" + apollo-server-types "^0.2.5" + apollo-tracing "^0.8.5" fast-json-stable-stringify "^2.0.0" - graphql-extensions "^0.10.3" + graphql-extensions "^0.10.4" graphql-tag "^2.9.2" graphql-tools "^4.0.0" graphql-upload "^8.0.2" @@ -3347,9 +3337,9 @@ apollo-server-errors@^2.3.3: integrity sha512-MO4oJ129vuCcbqwr5ZwgxqGGiLz3hCyowz0bstUF7MR+vNGe4oe3DWajC9lv4CxrhcqUHQOeOPViOdIo1IxE3g== apollo-server-koa@^2.9.0: - version "2.9.4" - resolved "https://registry.yarnpkg.com/apollo-server-koa/-/apollo-server-koa-2.9.4.tgz#95c1b321d946e964a8d77075aee054b26687f8d5" - integrity sha512-PiuHe/OfD+sIMDSVHrfj6C+2IsL91DOf7nWTmVL/4OtDfWsMpMuxGzwJo4jwBR9oyXhI216Zv8CqMUAIOaf24A== + version "2.9.6" + resolved "https://registry.yarnpkg.com/apollo-server-koa/-/apollo-server-koa-2.9.6.tgz#5ef8589d5f4fcc95096d3bbc490f42e7829622ab" + integrity sha512-KctnBETMJ6Obt1sYhxwIi7XAi/pDz2ifOV5sktc6Gx9Jt5JNL9SmQGFFNCXaWbTyCcPKckQhXfumcHgbAWAXoA== dependencies: "@apollographql/graphql-playground-html" "1.6.24" "@koa/cors" "^2.2.1" @@ -3360,38 +3350,39 @@ apollo-server-koa@^2.9.0: "@types/koa-compose" "^3.2.2" "@types/koa__cors" "^2.2.1" accepts "^1.3.5" - apollo-server-core "^2.9.4" - apollo-server-types "^0.2.4" + apollo-server-core "^2.9.6" + apollo-server-types "^0.2.5" graphql-subscriptions "^1.0.0" graphql-tools "^4.0.0" - koa "2.8.1" + koa "2.8.2" koa-bodyparser "^4.2.1" + koa-compose "^4.1.0" koa-router "^7.4.0" type-is "^1.6.16" -apollo-server-plugin-base@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.4.tgz#63ea4fd0bbb6c4510bc8d0d2ad0a0684c8d0da8c" - integrity sha512-4rY+cBAIpQomGWYBtk8hHkLQWHrh5hgIBPQqmhXh00YFdcY+Ob1/cU2/2iqTcIzhtcaezsc8OZ63au6ahSBQqg== +apollo-server-plugin-base@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.5.tgz#eebe27734c51bf6a45b6a9ec8738750b132ffde7" + integrity sha512-z2ve7HEPWmZI3EzL0iiY9qyt1i0hitT+afN5PzssCw594LB6DfUQWsI14UW+W+gcw8hvl8VQUpXByfUntAx5vw== dependencies: - apollo-server-types "^0.2.4" + apollo-server-types "^0.2.5" -apollo-server-types@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.2.4.tgz#28864900ffc7f9711a859297c143a833fdb6aa43" - integrity sha512-G4FvBVgGQcTW6ZBS2+hvcDQkSfdOIKV+cHADduXA275v+5zl42g+bCaGd/hCCKTDRjmQvObLiMxH/BJ6pDMQgA== +apollo-server-types@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.2.5.tgz#2d63924706ffc1a59480cbbc93e9fe86655a57a5" + integrity sha512-6iJQsPh59FWu4K7ABrVmpnQVgeK8Ockx8BcawBh+saFYWTlVczwcLyGSZPeV1tPSKwFwKZutyEslrYSafcarXQ== dependencies: - apollo-engine-reporting-protobuf "^0.4.0" + apollo-engine-reporting-protobuf "^0.4.1" apollo-server-caching "^0.5.0" apollo-server-env "^2.4.3" -apollo-tracing@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.8.4.tgz#0117820c3f0ad3aa6daf7bf13ddbb923cbefa6de" - integrity sha512-DjbFW0IvHicSlTVG+vK+1WINfBMRCdPPHJSW/j65JMir9Oe56WGeqL8qz8hptdUUmLYEb+azvcyyGsJsiR3zpQ== +apollo-tracing@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.8.5.tgz#f07c4584d95bcf750e44bfe9845e073b03774941" + integrity sha512-lZn10/GRBZUlMxVYLghLMFsGcLN0jTYDd98qZfBtxw+wEWUx+PKkZdljDT+XNoOm/kDvEutFGmi5tSLhArIzWQ== dependencies: apollo-server-env "^2.4.3" - graphql-extensions "^0.10.3" + graphql-extensions "^0.10.4" apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: version "1.3.2" @@ -3710,22 +3701,22 @@ atob@^2.1.1: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.5.1, autoprefixer@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" - integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw== + version "9.6.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.4.tgz#e6453be47af316b2923eaeaed87860f52ad4b7eb" + integrity sha512-Koz2cJU9dKOxG8P1f8uVaBntOv9lP4yz9ffWvWaicv9gHBPhpQB22nGijwd8gqW9CNT+UdkbQOQNLVI8jN1ZfQ== dependencies: - browserslist "^4.6.3" - caniuse-lite "^1.0.30000980" + browserslist "^4.7.0" + caniuse-lite "^1.0.30000998" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.17" - postcss-value-parser "^4.0.0" + postcss "^7.0.18" + postcss-value-parser "^4.0.2" aws-sdk@^2.382.0, aws-sdk@^2.457.0: - version "2.539.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.539.0.tgz#4bae923b20723d78fbe4e208847f07de2965f87a" - integrity sha512-jPnggqa676kqFHFPCJvfckN2SKI/+IQJREL+XxOocS1lyI+5iGxbJvlU0BLEsY2Is4LvMjsnxdqSAVIL5NRbyw== + version "2.547.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.547.0.tgz#2511cb5c6471467b2f9ab59d10227640e0c75a0f" + integrity sha512-SbFTTkxRMynrcDxXxWS3NxTbgpBhBDHKSQpP6Pd8qVIgul2uRjCE1YLk9dq1EXdY0ti8KmoLS9xY8R3CPjxLag== dependencies: buffer "4.9.1" events "1.1.1" @@ -3795,9 +3786,9 @@ babel-plugin-dynamic-import-node@^2.3.0: object.assign "^4.1.0" babel-plugin-emotion@^10.0.14: - version "10.0.19" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.19.tgz#67b9b213f7505c015f163a387a005c12c502b1de" - integrity sha512-1pJb5uKN/gx6bi3gGr588Krj49sxARI9KmxhtMUa+NRJb6lR3OfC51mh3NlWRsOqdjWlT4cSjnZpnFq5K3T5ZA== + version "10.0.21" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.21.tgz#9ebeb12edeea3e60a5476b0e07c9868605e65968" + integrity sha512-03o+T6sfVAJhNDcSdLapgv4IeewcFPzxlvBUVdSf7o5PI57ZSxoDvmy+ZulVWSu+rOWAWkEejNcsb29TuzJHbg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/hash" "0.7.3" @@ -4034,10 +4025,10 @@ bluebird@^2.9.30: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= -bluebird@^3.1.1, bluebird@^3.4.3, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.4, bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== +bluebird@^3.1.1, bluebird@^3.4.3, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.4, bluebird@^3.5.5, bluebird@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.0.tgz#56a6a886e03f6ae577cffedeb524f8f2450293cf" + integrity sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -4252,7 +4243,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.6.4, browserslist@^4.6.6: +browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.6.6, browserslist@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== @@ -4566,10 +4557,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989: - version "1.0.30000997" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000997.tgz#ba44a606804f8680894b7042612c2c7f65685b7e" - integrity sha512-BQLFPIdj2ntgBNWp9Q64LGUIEmvhKkzzHhUHR3CD5A9Lb7ZKF20/+sgadhFap69lk5XmK1fTUleDclaRFvgVUA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30000998: + version "1.0.30000999" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz#427253a69ad7bea4aa8d8345687b8eec51ca0e43" + integrity sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg== captains-log@^2.0.2: version "2.0.3" @@ -5011,17 +5002,22 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +commander@2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM= -commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.0: - version "2.20.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9" - integrity sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg== +commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^3.0.1: +commander@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== @@ -5227,9 +5223,9 @@ content-type@^1.0.4, content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== conventional-changelog-angular@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" - integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== + version "5.0.5" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.5.tgz#69b541bcf3e538a8578b1e5fbaabe9bd8f572b57" + integrity sha512-RrkdWnL/TVyWV1ayWmSsrWorsTDqjL/VwG5ZSEneBQrd65ONcfeA1cW7FLtNweQyMiKOyriCMTKRSlk18DjTrw== dependencies: compare-func "^1.3.1" q "^1.5.1" @@ -5259,14 +5255,14 @@ conventional-changelog-preset-loader@^2.1.1: integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== conventional-changelog-writer@^4.0.6: - version "4.0.7" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f" - integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw== + version "4.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.9.tgz#44ac4c48121bc90e71cb2947e1ea1a6c222ccd7f" + integrity sha512-2Y3QfiAM37WvDMjkVNaRtZgxVzWKj73HE61YQ/95T53yle+CRwTVSl6Gbv/lWVKXeZcM5af9n9TDVf0k7Xh+cw== dependencies: compare-func "^1.3.1" conventional-commits-filter "^2.0.2" dateformat "^3.0.0" - handlebars "^4.1.2" + handlebars "^4.4.0" json-stringify-safe "^5.0.1" lodash "^4.2.1" meow "^4.0.0" @@ -5283,9 +5279,9 @@ conventional-commits-filter@^2.0.2: modify-values "^1.0.0" conventional-commits-parser@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" - integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== + version "3.0.5" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.5.tgz#df471d6cb3f6fecfd1356ac72e0b577dbdae0a9c" + integrity sha512-qVz9+5JwdJzsbt7JbJ6P7NOXBGt8CyLFJYSjKAuPSgO+5UGfcsbk9EMR+lI8Unlvx6qwIc2YDJlrGIfay2ehNA== dependencies: JSONStream "^1.0.4" is-text-path "^2.0.0" @@ -5526,6 +5522,15 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -5816,9 +5821,9 @@ cssstyle@^1.0.0: cssom "0.3.x" csstype@^2.2.0, csstype@^2.5.7, csstype@^2.6.6: - version "2.6.6" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41" - integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg== + version "2.6.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" + integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== ctype@0.5.3: version "0.5.3" @@ -5907,10 +5912,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz#d296973d5a4897a5dbe31716d118211921f04770" - integrity sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA== +data-uri-to-buffer@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== data-urls@^1.0.0: version "1.1.0" @@ -5946,13 +5951,20 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@*, debug@4, debug@4.1.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@*, debug@4.1.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" +debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -5960,13 +5972,6 @@ debug@2.2.0: dependencies: ms "0.7.1" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -6625,9 +6630,9 @@ ejs@^2.6.1: integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== electron-to-chromium@^1.3.247: - version "1.3.270" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.270.tgz#a3faa2c51f73bf7a020370b3e28a99b32eae47ed" - integrity sha512-426qbfgLn0hVE4pDxok2dcAhA3u5lwXlBg2+i6VWQJvnMZNgevkC6s/qr91YH/avVMKXKwxnR5iBznpivg210A== + version "1.3.280" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.280.tgz#5f8950c8329e3e11b59c705fd59b4b8d9b3de5b9" + integrity sha512-qYWNMjKLEfQAWZF2Sarvo+ahigu0EArnpCFSoUuZJS3W5wIeVfeEvsgmT2mgIrieQkeQ0+xFmykK3nx2ezekPQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -6686,7 +6691,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: +enhanced-resolve@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== @@ -6695,6 +6700,15 @@ enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + ent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" @@ -6716,30 +6730,31 @@ env-paths@^1.0.0: integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= enzyme-adapter-react-16@^1.12.1, enzyme-adapter-react-16@^1.8.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz#204722b769172bcf096cb250d33e6795c1f1858f" - integrity sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA== + version "1.15.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz#8ad55332be7091dc53a25d7d38b3485fc2ba50d5" + integrity sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA== dependencies: - enzyme-adapter-utils "^1.12.0" + enzyme-adapter-utils "^1.12.1" + enzyme-shallow-equal "^1.0.0" has "^1.0.3" object.assign "^4.1.0" object.values "^1.1.0" prop-types "^15.7.2" - react-is "^16.8.6" + react-is "^16.10.2" react-test-renderer "^16.0.0-0" semver "^5.7.0" -enzyme-adapter-utils@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz#96e3730d76b872f593e54ce1c51fa3a451422d93" - integrity sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA== +enzyme-adapter-utils@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz#e828e0d038e2b1efa4b9619ce896226f85c9dd88" + integrity sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g== dependencies: - airbnb-prop-types "^2.13.2" - function.prototype.name "^1.1.0" + airbnb-prop-types "^2.15.0" + function.prototype.name "^1.1.1" object.assign "^4.1.0" - object.fromentries "^2.0.0" + object.fromentries "^2.0.1" prop-types "^15.7.2" - semver "^5.6.0" + semver "^5.7.0" enzyme-shallow-equal@^1.0.0: version "1.0.0" @@ -6812,10 +6827,10 @@ errs@^0.3.2: resolved "https://registry.yarnpkg.com/errs/-/errs-0.3.2.tgz#798099b2dbd37ca2bc749e538a7c1307d0b50499" integrity sha1-eYCZstvTfKK8dJ5TinwTB9C1BJk= -es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" - integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== +es-abstract@^1.10.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.15.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57" + integrity sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ== dependencies: es-to-primitive "^1.2.0" function-bind "^1.1.1" @@ -6825,8 +6840,8 @@ es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13 is-regex "^1.0.4" object-inspect "^1.6.0" object-keys "^1.1.1" - string.prototype.trimleft "^2.0.0" - string.prototype.trimright "^2.0.0" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" es-to-primitive@^1.2.0: version "1.2.0" @@ -6897,21 +6912,21 @@ escodegen@1.x.x, escodegen@^1.9.1: source-map "~0.6.1" eslint-config-prettier@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.3.0.tgz#e73b48e59dc49d950843f3eb96d519e2248286a3" - integrity sha512-EWaGjlDAZRzVFveh2Jsglcere2KK5CJBhkNSa1xs3KfMUGdRiT7lG089eqPdvlzWHpAqaekubOsOMu8W8Yk71A== + version "6.4.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz#0a04f147e31d33c6c161b2dd0971418ac52d0477" + integrity sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w== dependencies: get-stdin "^6.0.0" eslint-plugin-react-hooks@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.1.1.tgz#b416390b642113f444ee175b667c3222a045a98e" - integrity sha512-AYitPYzwHyKpZKpzMH5sCkld68vP8wn29Lq716h4jk1ll9Gp4BBFoPq/iCjBBT35eXFJvOPjgMlvhIXFB0OhXg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.1.2.tgz#1358d2acb2c5e02b7e90c37e611ac258a488e3a7" + integrity sha512-ZR+AyesAUGxJAyTFlF3MbzeVHAcQTFQt1fFVe5o0dzY/HFoj1dgQDMoIkiM+ltN/HhlHBYX4JpJwYonjxsyQMA== eslint-plugin-react@^7.14.0: - version "7.15.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.15.0.tgz#4808b19cf7b4c439454099d4eb8f0cf0e9fe31dd" - integrity sha512-NbIh/yVXoltm8Df28PiPRanfCZAYubGqXU391MTCpW955Vum7S0nZdQYXGAvDh9ye4aNCmOR6YcYZsfMbEQZQA== + version "7.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz#9928e4f3e2122ed3ba6a5b56d0303ba3e41d8c09" + integrity sha512-GacBAATewhhptbK3/vTP09CbFrgUJmBSaaRcWdbQLFvUZy9yVcQxigBNHGPU/KE2AyHpzj3AWXpxoMTsIDiHug== dependencies: array-includes "^3.0.3" doctrine "^2.1.0" @@ -6924,9 +6939,9 @@ eslint-plugin-react@^7.14.0: resolve "^1.12.0" eslint-plugin-redux-saga@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-redux-saga/-/eslint-plugin-redux-saga-1.1.0.tgz#e47e5572e4f951eb5bbda11cf7e07bea391a468a" - integrity sha512-h6QCo7qQGUQR+sXnkgU4aTo8vMI/I0tttM3fk0jdkP7wqTNHGvSyJLGFFchwiBqg6Tfg64zK68tzSq31wesS6w== + version "1.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-redux-saga/-/eslint-plugin-redux-saga-1.1.1.tgz#8cf05049516aca9b9efcb1978a55991d10dceef9" + integrity sha512-XCXJ0VNOeqkZaKVKPKwKfPgBh8B2MIgKZ3DCIs8KxyYJgayOLTMCxYFRUZ8ElUSEa22beKyO2Ro8wtwYZspHWw== eslint-scope@^4.0.3: version "4.0.3" @@ -7168,11 +7183,11 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/execa/-/execa-2.0.4.tgz#2f5cc589c81db316628627004ea4e37b93391d8e" - integrity sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== dependencies: - cross-spawn "^6.0.5" + cross-spawn "^7.0.0" get-stream "^5.0.0" is-stream "^2.0.0" merge-stream "^2.0.0" @@ -7373,15 +7388,14 @@ fast-glob@^2.2.6: micromatch "^3.1.10" fast-glob@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" - integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.0.tgz#77375a7e3e6f6fc9b18f061cddd28b8d1eec75ae" + integrity sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw== dependencies: - "@nodelib/fs.stat" "^2.0.1" - "@nodelib/fs.walk" "^1.2.1" - glob-parent "^5.0.0" - is-glob "^4.0.1" - merge2 "^1.2.3" + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" micromatch "^4.0.2" fast-json-parse@^1.0.3: @@ -8022,9 +8036,9 @@ get-caller-file@^2.0.1: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz#6f7764f88ea11e0b514bd9bd860a132259992ca4" + integrity sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA== get-paths@0.0.7: version "0.0.7" @@ -8099,16 +8113,16 @@ get-stream@^5.0.0: pump "^3.0.0" get-uri@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.3.tgz#fa13352269781d75162c6fc813c9e905323fbab5" - integrity sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" + integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== dependencies: - data-uri-to-buffer "2" - debug "4" + data-uri-to-buffer "1" + debug "2" extend "~3.0.2" file-uri-to-path "1" ftp "~0.3.10" - readable-stream "3" + readable-stream "2" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -8206,7 +8220,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== @@ -8495,14 +8509,14 @@ graphql-depth-limit@^1.1.0: dependencies: arrify "^1.0.1" -graphql-extensions@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.10.3.tgz#9e37f3bd26309c40b03a0be0e63e02b3f99d52ea" - integrity sha512-kwU0gUe+Qdfr8iZYT91qrPSwQNgPhB/ClF1m1LEPdxlptk5FhFmjpxAcbMZ8q7j0kjfnbp2IeV1OhRDCEPqz2w== +graphql-extensions@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.10.4.tgz#af851b0d44ea6838cf54de9df3cfc6a8e575e571" + integrity sha512-lE6MroluEYocbR/ICwccv39w+Pz4cBPadJ11z1rJkbZv5wstISEganbDOwl9qN21rcZGiWzh7QUNxUiFUXXEDw== dependencies: "@apollographql/apollo-tools" "^0.4.0" apollo-server-env "^2.4.3" - apollo-server-types "^0.2.4" + apollo-server-types "^0.2.5" graphql-playground-html@1.6.13: version "1.6.13" @@ -8557,13 +8571,13 @@ graphql-type-long@^0.1.1: integrity sha512-pIp/F3LR0qqfbF4TX3CwBwPskA7850KG6/DnzaYJtdgxxzw20dcKfutLbyk8okBGg8iHbFoXgnZWHgfwNmxSZw== graphql-upload@^8.0.2: - version "8.0.7" - resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-8.0.7.tgz#8644264e241529552ea4b3797e7ee15809cf01a3" - integrity sha512-gi2yygbDPXbHPC7H0PNPqP++VKSoNoJO4UrXWq4T0Bi4IhyUd3Ycop/FSxhx2svWIK3jdXR/i0vi91yR1aAF0g== + version "8.1.0" + resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-8.1.0.tgz#6d0ab662db5677a68bfb1f2c870ab2544c14939a" + integrity sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q== dependencies: busboy "^0.3.1" fs-capacitor "^2.0.4" - http-errors "^1.7.2" + http-errors "^1.7.3" object-path "^0.11.4" graphql@^14.3.0, graphql@^14.5.3: @@ -8612,10 +8626,10 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== -handlebars@^4.0.1, handlebars@^4.1.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.0.tgz#22e1a897c5d83023d39801f35f6b65cf97ed8b25" - integrity sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw== +handlebars@^4.0.1, handlebars@^4.1.2, handlebars@^4.4.0: + version "4.4.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.3.tgz#180bae52c1d0e9ec0c15d7e82a4362d662762f6e" + integrity sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -8745,9 +8759,9 @@ hash-base@^3.0.0: safe-buffer "^5.0.1" hash-stream-validation@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz#ecc9b997b218be5bb31298628bb807869b73dcd1" - integrity sha1-7Mm5l7IYvluzEphii7gHhptz3NE= + version "0.2.2" + resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.2.tgz#6b34c4fce5e9fce265f1d3380900049d92a10090" + integrity sha512-cMlva5CxWZOrlS/cY0C+9qAzesn5srhFA8IT1VPiHc9bWWBLkJfEUIZr7MWoi89oOOGmpg8ymchaOjiArsGu5A== dependencies: through2 "^2.0.0" @@ -8825,9 +8839,9 @@ homedir-polyfill@^1.0.1: parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" - integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== hpack.js@^2.1.6: version "2.1.6" @@ -8951,7 +8965,7 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@^1.3.1, http-errors@^1.6.3, http-errors@^1.7.2, http-errors@~1.7.2: +http-errors@1.7.3, http-errors@^1.3.1, http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== @@ -8985,7 +8999,7 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-middleware@^0.19.1: +http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== @@ -9051,9 +9065,9 @@ humanize-ms@^1.2.1: ms "^2.0.0" husky@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.7.tgz#05e869006c7d9a31b27893aeda520e730bd125b9" - integrity sha512-fIrkaREoQk6DO8KnSX16Aq7Kg9SxqYYQZH/9b+4AxXyXNNgpJLsc8lWlQCShLus1nbujIyZ/WQZBHGwClohK/w== + version "3.0.8" + resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.8.tgz#8de3fed26ce9b43034ef51013c4ad368b6b74ea8" + integrity sha512-HFOsgcyrX3qe/rBuqyTt+P4Gxn5P0seJmr215LAZ/vnwK3jWB3r0ck7swbzGRUbufCf9w/lgHPVbF/YXQALgfQ== dependencies: chalk "^2.4.2" cosmiconfig "^5.2.1" @@ -9115,9 +9129,9 @@ iferr@^0.1.5: integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" - integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" @@ -9292,7 +9306,7 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indent-string@^3.0.0, indent-string@^3.2.0: +indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -9439,12 +9453,12 @@ into-stream@^3.1.0: p-is-promise "^1.1.0" into-stream@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-5.1.0.tgz#b05f37d8fed05c06a0b43b556d74e53e5af23878" - integrity sha512-cbDhb8qlxKMxPBk/QxTtYg1DQ4CwXmadu7quG3B7nrJsgSncEreF2kwWKZFdnjc/lSNNIkFPsjI7SM0Cx/QXPw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" + integrity sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA== dependencies: from2 "^2.3.0" - p-is-promise "^2.0.0" + p-is-promise "^3.0.0" invariant@^2.1.1, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" @@ -9503,7 +9517,7 @@ is-absolute-url@^2.0.0: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= -is-absolute-url@^3.0.2: +is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== @@ -10669,9 +10683,9 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: minimist "^1.2.0" @@ -10842,13 +10856,13 @@ knex@^0.16.5: v8flags "^3.1.2" knex@^0.19.0: - version "0.19.4" - resolved "https://registry.yarnpkg.com/knex/-/knex-0.19.4.tgz#cf62f8824392387152a0a188a6585d5dea6832bb" - integrity sha512-FRnR2iWEAoKkrVo3KyiEYeGwUjZOZT2WDko/tn3nCKzQdn6m8+5qSUeYLGa9zM8SwFGJriYKQSSMiDJKLILcMQ== + version "0.19.5" + resolved "https://registry.yarnpkg.com/knex/-/knex-0.19.5.tgz#3597ebecf88a5942f18c3e6d91af53bda59eeb5d" + integrity sha512-Hy258avCVircQq+oj3WBqPzl8jDIte438Qlq+8pt1i/TyLYVA4zPh2uKc7Bx0t+qOpa6D42HJ2jjtl2vagzilw== dependencies: - bluebird "^3.5.5" + bluebird "^3.7.0" colorette "1.1.0" - commander "^3.0.1" + commander "^3.0.2" debug "4.1.1" getopts "2.2.5" inherits "~2.0.4" @@ -11034,37 +11048,7 @@ koa2-ratelimit@^0.9.0: promise-redis "0.0.5" sequelize "^5.8.7" -koa@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.8.1.tgz#98e13b267ab8a1868f015a4b41b5a52e31457ce5" - integrity sha512-iCgjRkntcVud5amnioi+79r7TPVhKPfCY8UzL9GjyU+nIWTE9xsqyrJ6kib3InT9JYRyUu9Y67i5apCjf997TQ== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.7.1" - debug "~3.1.0" - delegates "^1.0.0" - depd "^1.1.2" - destroy "^1.0.4" - error-inject "^1.0.0" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - koa-is-json "^1.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -koa@^2.8.0: +koa@2.8.2, koa@^2.8.0: version "2.8.2" resolved "https://registry.yarnpkg.com/koa/-/koa-2.8.2.tgz#dfba771a69c1a98e014826804e95132c00af6615" integrity sha512-q1uZOgpl3wjr5FS/tjbABJ8lA5+NeKa9eq7QyBP5xxgOBwJN4iBrMEgO3LroE51lrIw3BsO0WZZ0Yi6giSiMDw== @@ -11132,25 +11116,25 @@ left-pad@^1.3.0: integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== lerna@^3.13.1: - version "3.16.4" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.16.4.tgz#158cb4f478b680f46f871d5891f531f3a2cb31ec" - integrity sha512-0HfwXIkqe72lBLZcNO9NMRfylh5Ng1l8tETgYQ260ZdHRbPuaLKE3Wqnd2YYRRkWfwPyEyZO8mZweBR+slVe1A== + version "3.17.0" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.17.0.tgz#4bc99d1d9cc2a1d7732780af11b4a60c6a135333" + integrity sha512-rU3YU1MLN+yy1YZzhaEl8h50d8HtIeBKIQ/ZxmmTqDprIvvWT2AZyDt/9EvoWlirCfdKT/G6Hs63O6sFuDef9g== dependencies: - "@lerna/add" "3.16.2" - "@lerna/bootstrap" "3.16.2" - "@lerna/changed" "3.16.4" - "@lerna/clean" "3.16.0" + "@lerna/add" "3.17.0" + "@lerna/bootstrap" "3.17.0" + "@lerna/changed" "3.16.5" + "@lerna/clean" "3.16.5" "@lerna/cli" "3.13.0" - "@lerna/create" "3.16.0" - "@lerna/diff" "3.16.0" - "@lerna/exec" "3.16.0" - "@lerna/import" "3.16.0" - "@lerna/init" "3.16.0" - "@lerna/link" "3.16.2" - "@lerna/list" "3.16.0" - "@lerna/publish" "3.16.4" - "@lerna/run" "3.16.0" - "@lerna/version" "3.16.4" + "@lerna/create" "3.16.5" + "@lerna/diff" "3.16.5" + "@lerna/exec" "3.16.5" + "@lerna/import" "3.16.5" + "@lerna/init" "3.16.5" + "@lerna/link" "3.17.0" + "@lerna/list" "3.16.5" + "@lerna/publish" "3.16.5" + "@lerna/run" "3.16.5" + "@lerna/version" "3.16.5" import-local "^2.0.0" npmlog "^4.1.2" @@ -11230,9 +11214,9 @@ lines-and-columns@^1.1.6: integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= lint-staged@^9.2.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.4.1.tgz#60c0f85745bd398e6460aa7f5adb3cad3a2b862c" - integrity sha512-zFRbo1bAJEVf1m33paTTjDVfy2v3lICCqHfmQSgNoI+lWpi7HPG5y/R2Y7Whdce+FKxlZYs/U1sDSx8+nmQdDA== + version "9.4.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.4.2.tgz#14cb577a9512f520691f8b5aefce6a8f7ead6c04" + integrity sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA== dependencies: chalk "^2.4.2" commander "^2.20.0" @@ -11918,6 +11902,14 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -11976,7 +11968,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3: +merge2@^1.2.3, merge2@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== @@ -12285,9 +12277,9 @@ mongoose-long@^0.2.1: integrity sha512-cbzEW5rShz8MxoTMFUidf13KObGkauA4ILeR3XcIdI7VLzMXwwXy///gLAbN2fD6vYy2ZAMDnCopQrCkNH9VNQ== mongoose@^5.5.13, mongoose@^5.5.9: - version "5.7.3" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.7.3.tgz#8bd46b561eaed1a4d4a6cdd81d5b23c2e30da846" - integrity sha512-CKCCCAhFnJRtmdmver8Ud9/NZ9m7D2H/xLgmrcL6cb9D4nril/idL8lsWWpBsJI81AOCVsktiZJ4X4vfo2S0fw== + version "5.7.4" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.7.4.tgz#b6a77a9217dace917ab028fa5dc72f400f2faf4b" + integrity sha512-IgqQS5HIaZ8tG2cib6QllfIw2Wc/A0QVOsdKLsSqRolqJFWOjI0se3vsKXLNkbEcuJ1xziW3e/jPhBs65678Hg== dependencies: bson "~1.1.1" kareem "2.3.1" @@ -12526,10 +12518,10 @@ node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-forge@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a" - integrity sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg== +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== node-forge@^0.8.0: version "0.8.5" @@ -12555,9 +12547,9 @@ node-gyp@^3.8.0: which "1" node-gyp@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.4.tgz#1de243f17b081a6e89f4330967900c816114f8fb" - integrity sha512-PMYap4ekQckQDZ2lxoORUF/nX13haU1JdCAlmLgvrykLyN0LFkhfwPbWhYjTxwTruCWbTkeOxFo043kjhmKHZA== + version "5.0.5" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" + integrity sha512-WABl9s4/mqQdZneZHVWVG4TVr6QQJZUC6PAx47ITSk9lreZ1n+7Z9mMAIbA3vnO4J9W20P7LhCxtzfWsAD/KDw== dependencies: env-paths "^1.0.0" glob "^7.0.3" @@ -12659,11 +12651,11 @@ node-pre-gyp@^0.12.0: tar "^4" node-releases@^1.1.29: - version "1.1.33" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.33.tgz#349f10291234624574f44cf32b7de259bf028303" - integrity sha512-I0V30bWQEoHb+10W8oedVoUrdjW5wIkYm0w7vvcrPO95pZY738m1k77GF5sO0vKg5eXYg9oGtrMAETbgZGm11A== + version "1.1.35" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.35.tgz#32a74a3cd497aa77f23d509f483475fd160e4c48" + integrity sha512-JGcM/wndCN/2elJlU0IGdVEJQQnJwsLbgPCFd2pY7V0mxf17bZ0Gb/lgOtL29ZQhvEX5shnVhxQyZz3ex94N8w== dependencies: - semver "^5.3.0" + semver "^6.3.0" node-sass@^4.11.0: version "4.12.0" @@ -12818,9 +12810,9 @@ npm-lifecycle@^3.1.2: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.6, npm-packlist@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + version "1.4.6" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" + integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -12986,15 +12978,15 @@ object.entries@^1.0.4, object.entries@^1.1.0: function-bind "^1.1.1" has "^1.0.3" -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== +object.fromentries@^2.0.0, object.fromentries@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" + integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" + define-properties "^1.1.3" + es-abstract "^1.15.0" function-bind "^1.1.1" - has "^1.0.1" + has "^1.0.3" object.getownpropertydescriptors@^2.0.3: version "2.0.3" @@ -13290,6 +13282,11 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -13615,7 +13612,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.0.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== @@ -14660,7 +14657,7 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0: +postcss-value-parser@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== @@ -14774,7 +14771,7 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.8.0, pretty-format@^24.9.0: +pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== @@ -14952,7 +14949,7 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" -proxy-agent@^3.0.3, proxy-agent@^3.1.0: +proxy-agent@*, proxy-agent@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.0.tgz#3cf86ee911c94874de4359f37efd9de25157c113" integrity sha512-IkbZL4ClW3wwBL/ABFD2zJ8iP84CY0uKMvBPk/OceQe/cEjrxzN1pMHsLwhbzUoRhG9QbSxYC+Z7LBkTiBNvrA== @@ -15189,9 +15186,9 @@ rc-input-number@^4.3.9: rmc-feedback "^2.0.0" rc-util@^4.5.1: - version "4.11.2" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.11.2.tgz#1b442b0ba85289591bbd491cfaea66f7407640db" - integrity sha512-BsQlyu5MnoJ/U1qYmv2OBJ41zLo2USJDwjalHXDORI/4tcwPyR9MCufIjZnI8bbRPSfwQsddc86izTtKVRUVRw== + version "4.13.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.13.0.tgz#75682e50a934e7d32ada7ee48fc9f5b20fc0143f" + integrity sha512-rjfPy+afc2n40APHp6GYScXfgwHuUnYLz/4SCEWRaF8CHXKR8xw598LtPA36J3fEXENuMm6liO/CoKBoSrYCDw== dependencies: add-dom-event-listener "^1.1.0" babel-runtime "6.x" @@ -15268,14 +15265,14 @@ react-dnd@^9.0.1: shallowequal "^1.1.0" react-dom@^16.9.0: - version "16.10.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.1.tgz#479a6511ba34a429273c213cbc2a9ac4d296dac1" - integrity sha512-SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg== + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6" + integrity sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.16.1" + scheduler "^0.16.2" react-fast-compare@^2.0.2: version "2.0.4" @@ -15310,10 +15307,10 @@ react-intl@^2.8.0, react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: - version "16.10.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.1.tgz#0612786bf19df406502d935494f0450b40b8294f" - integrity sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw== +react-is@^16.10.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab" + integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA== react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -15431,18 +15428,16 @@ react-router@5.1.2, react-router@^5.0.0: tiny-warning "^1.0.0" react-select@^3.0.4: - version "3.0.7" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.7.tgz#1d5b3d33e7c2bf3f8dcbd9de9c1424f27ec44fe7" - integrity sha512-m4DKFUGvjjghxovuo4NyGltq/qPwFV5LV1Bo8wl1tUt1UQZO0Lvru1yC62wkTsittf5A+k4gyM4c+MhfEiERSQ== + version "3.0.8" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.8.tgz#06ff764e29db843bcec439ef13e196865242e0c1" + integrity sha512-v9LpOhckLlRmXN5A6/mGGEft4FMrfaBFTGAnuPHcUgVId7Je42kTq9y0Z+Ye5z8/j0XDT3zUqza8gaRaI1PZIg== dependencies: "@babel/runtime" "^7.4.4" "@emotion/cache" "^10.0.9" "@emotion/core" "^10.0.9" "@emotion/css" "^10.0.9" - classnames "^2.2.5" memoize-one "^5.0.0" prop-types "^15.6.0" - raf "^3.4.0" react-input-autosize "^2.2.2" react-transition-group "^2.2.1" @@ -15454,14 +15449,14 @@ react-side-effect@^1.1.0: shallowequal "^1.0.1" react-test-renderer@^16.0.0-0, react-test-renderer@^16.9.0: - version "16.10.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.10.1.tgz#75b8e8ce152e00eadd303e9fa514a2ca917ee049" - integrity sha512-VT8nd7XrrUV7MQPxeIuH7WstfrK2A8kgcMwGUtVXa0ja+CiYkxdmLYNjwX1L7irRF7ydzJJWiSLsQf2xBj4Xaw== + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.10.2.tgz#4d8492f8678c9b43b721a7d79ed0840fdae7c518" + integrity sha512-k9Qzyev6cTIcIfrhgrFlYQAFxh5EEDO6ALNqYqmKsWVA7Q/rUMTay5nD3nthi6COmYsd4ghVYyi8U86aoeMqYQ== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" react-is "^16.8.6" - scheduler "^0.16.1" + scheduler "^0.16.2" react-transition-group@^2.2.1, react-transition-group@^2.3.1, react-transition-group@^2.5.0, react-transition-group@^2.9.0: version "2.9.0" @@ -15516,9 +15511,9 @@ react-with-styles@^3.2.3: react-with-direction "^1.3.0" react@^16.9.0: - version "16.10.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.10.1.tgz#967c1e71a2767dfa699e6ba702a00483e3b0573f" - integrity sha512-2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA== + version "16.10.2" + resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0" + integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -15646,7 +15641,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2.3.6, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@2, readable-stream@2.3.6, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -15669,7 +15664,7 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1: +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== @@ -16440,9 +16435,9 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.6.0, rollup-pluginutils@^2.8.1, estree-walker "^0.6.1" rollup@^1.10.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.22.0.tgz#a5b2672c0eebe9f2b6454220f785dbc09b64b4bc" - integrity sha512-x4l4ZrV/Mr/x/jvFTmwROdEAhbZjx16yDRTVSKWh/i4oJDuW2dVEbECT853mybYCz7BAitU8ElGlhx7dNjw3qQ== + version "1.23.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.23.1.tgz#0315a0f5d0dfb056e6363e1dff05b89ac2da6b8e" + integrity sha512-95C1GZQpr/NIA0kMUQmSjuMDQ45oZfPgDBcN0yZwBG7Kee//m7H68vgIyg+SPuyrTZ5PrXfyLK80OzXeKG5dAA== dependencies: "@types/estree" "*" "@types/node" "*" @@ -16577,10 +16572,10 @@ sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.1.tgz#a6fb6ddec12dc2119176e6eb54ecfe69a9eba8df" - integrity sha512-MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg== +scheduler@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.2.tgz#f74cd9d33eff6fc554edfb79864868e4819132c1" + integrity sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -16619,12 +16614,12 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.6: - version "1.10.6" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.6.tgz#7b3cd37ed9c2034261a173af1a1aae27d8169b67" - integrity sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w== +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== dependencies: - node-forge "0.8.2" + node-forge "0.9.0" semver-compare@^1.0.0: version "1.0.0" @@ -16708,9 +16703,9 @@ sequelize-pool@^2.3.0: integrity sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA== sequelize@^5.8.7: - version "5.19.2" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.19.2.tgz#65a37cfc18b3ccc606f847f652c5f488b7a60f05" - integrity sha512-9zDi0rctHUgS48luDeJ+ajDvKEy4j5t8/J5lBIOYoYee99479nXXjYMUks/25qDwT1ECEXcEpC1dJUJQvHj1Cw== + version "5.19.6" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.19.6.tgz#4d72bb17e3e96d51bdd33a3afa0d5b0bc14fc8a4" + integrity sha512-LPDD+v+iEmjwIw4HveoWR0OZXz0PFH74wmL+wLSSqQFYWRQCi6ml0n9XTRsVDCdVXA1VwUcwvRAaDkyQTvSmRA== dependencies: bluebird "^3.5.0" cls-bluebird "^2.1.0" @@ -16835,11 +16830,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" @@ -17020,10 +17027,10 @@ snyk-go-parser@1.3.1: toml "^3.0.0" tslib "^1.9.3" -snyk-go-plugin@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/snyk-go-plugin/-/snyk-go-plugin-1.11.0.tgz#7810242391e39588929de47b829d04938bac8f1a" - integrity sha512-9hsGgloioGuey5hbZfv+MkFEslxXHyzUlaAazcR0NsY7VLyG/b2g3f88f/ZwCwlWaKL9LMv/ERIiey3oWAB/qg== +snyk-go-plugin@1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/snyk-go-plugin/-/snyk-go-plugin-1.11.1.tgz#cd7c73c42bd3cf5faa2a90a54cd7c6db926fea5d" + integrity sha512-IsNi7TmpHoRHzONOWJTT8+VYozQJnaJpKgnYNQjzNm2JlV8bDGbdGQ1a8LcEoChxnJ8v8aMZy7GTiQyGGABtEQ== dependencies: debug "^4.1.1" graphlib "^2.1.1" @@ -17115,12 +17122,12 @@ snyk-policy@1.13.5: snyk-try-require "^1.3.1" then-fs "^2.0.0" -snyk-python-plugin@^1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/snyk-python-plugin/-/snyk-python-plugin-1.13.2.tgz#549a9667e7487cbe1cfc9e0be60b31bb4465c471" - integrity sha512-G9R1cYHw0E/VSx9tFa5nZp+653FIMXheteidrF3hjUe71jRdJELEUV/z5jxqYEWEFemcwGhMfW87De91GChVIQ== +snyk-python-plugin@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/snyk-python-plugin/-/snyk-python-plugin-1.13.3.tgz#34587001de2cca8fb400f3f21110c29b39a80e83" + integrity sha512-Ud7mHmpMG4uCChvYLx5jA8HwOV/FNpT65xTxSt+6wsOjIUTuLiqM86mbvgzgk3pir8vMP9yQEsCi1i0zYLBArw== dependencies: - "@snyk/cli-interface" "^2.0.2" + "@snyk/cli-interface" "^2.0.3" tmp "0.0.33" snyk-resolve-deps@4.4.0: @@ -17182,14 +17189,14 @@ snyk-try-require@1.3.1, snyk-try-require@^1.1.1, snyk-try-require@^1.3.1: then-fs "^2.0.0" snyk@^1.99.0: - version "1.230.2" - resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.230.2.tgz#28f5cbb565142b48f6a6a004b08f85428a6998ef" - integrity sha512-jih2NlHLMNxwLiXOj+X/cFgVJR6m1Iu7JqfDM2A0SnZ/PCULL5QKN89V2Ii0YQbaBm6lnZ3NIn4X4yE2PlFyDA== + version "1.234.1" + resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.234.1.tgz#eae888122cda5d01aeda0e6bf382761722275265" + integrity sha512-frorcNULhFKYcXviR1pcsSzsJd8j+t3ZOBY7a1knJb9SfYe3fHZB+6JjWYkHKCuvDsvlALY+C7WFBjcxOXS1bw== dependencies: "@snyk/cli-interface" "^2.0.3" "@snyk/dep-graph" "1.12.0" "@snyk/gemfile" "1.2.0" - "@snyk/snyk-cocoapods-plugin" "1.0.2" + "@snyk/snyk-cocoapods-plugin" "1.0.3" "@types/agent-base" "^4.2.0" "@types/restify" "^4.3.6" abbrev "^1.1.1" @@ -17205,12 +17212,11 @@ snyk@^1.99.0: needle "^2.2.4" opn "^5.5.0" os-name "^3.0.0" - proxy-agent "^3.1.0" proxy-from-env "^1.0.0" semver "^6.0.0" snyk-config "^2.2.1" snyk-docker-plugin "1.29.1" - snyk-go-plugin "1.11.0" + snyk-go-plugin "1.11.1" snyk-gradle-plugin "3.1.0" snyk-module "1.9.1" snyk-mvn-plugin "2.4.0" @@ -17218,7 +17224,7 @@ snyk@^1.99.0: snyk-nuget-plugin "1.12.1" snyk-php-plugin "1.6.4" snyk-policy "1.13.5" - snyk-python-plugin "^1.13.2" + snyk-python-plugin "^1.13.3" snyk-resolve "1.0.1" snyk-resolve-deps "4.4.0" snyk-sbt-plugin "2.8.0" @@ -17678,7 +17684,7 @@ string.prototype.trim@^1.1.2: es-abstract "^1.13.0" function-bind "^1.1.1" -string.prototype.trimleft@^2.0.0: +string.prototype.trimleft@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== @@ -17686,7 +17692,7 @@ string.prototype.trimleft@^2.0.0: define-properties "^1.1.3" function-bind "^1.1.1" -string.prototype.trimright@^2.0.0: +string.prototype.trimright@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== @@ -18128,9 +18134,9 @@ terser@^3.14.1: source-map-support "~0.5.10" terser@^4.1.2, terser@^4.1.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.4.tgz#ad91bade95619e3434685d69efa621a5af5f877d" - integrity sha512-Kcrn3RiW8NtHBP0ssOAzwa2MsIRQ8lJWiBG/K7JgqPlomA3mtb2DEmp4/hrUA+Jujx+WZ02zqd7GYD+QRBB/2Q== + version "4.3.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.8.tgz#707f05f3f4c1c70c840e626addfdb1c158a17136" + integrity sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -18535,11 +18541,11 @@ uglify-js@3.4.x: source-map "~0.6.1" uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.6.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.1.tgz#ae7688c50e1bdcf2f70a0e162410003cf9798311" + integrity sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ== dependencies: - commander "~2.20.0" + commander "2.20.0" source-map "~0.6.1" uid-number@0.0.6: @@ -18917,10 +18923,10 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" -wait-for-expect@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-1.3.0.tgz#65241ce355425f907f5d127bdb5e72c412ff830c" - integrity sha512-8fJU7jiA96HfGPt+P/UilelSAZfhMBJ52YhKzlmZQvKEZU2EcD1GQ0yqGB6liLdHjYtYAoGVigYwdxr5rktvzA== +wait-for-expect@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.0.tgz#d6fbf28959e3b8779dc172fb1ea56bf1e833bf7a" + integrity sha512-9LyJL+MugZdcQn5V9PBSEC4d2UPTy1xX2U9wTc6LvG/18qeeYqdE/CgmAQJxc/Vcjs+VzH+wiyIXxz05F3nrpQ== wait-on@^3.2.0: version "3.3.0" @@ -18992,7 +18998,7 @@ webpack-cli@^3.3.2: v8-compile-cache "2.0.3" yargs "13.2.4" -webpack-dev-middleware@^3.7.1: +webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -19004,9 +19010,9 @@ webpack-dev-middleware@^3.7.1: webpack-log "^2.0.0" webpack-dev-server@^3.4.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz#485b64c4aadc23f601e72114b40c1b1fea31d9f1" - integrity sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw== + version "3.8.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.2.tgz#3292427bf6510da9a3ac2d500b924a4197667ff9" + integrity sha512-0xxogS7n5jHDQWy0WST0q6Ykp7UGj4YvWh+HVN71JoE7BwPxMZrwgraBvmdEMbDVMBzF0u+mEzn8TQzBm5NYJQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -19017,18 +19023,18 @@ webpack-dev-server@^3.4.1: del "^4.1.1" express "^4.17.1" html-entities "^1.2.1" - http-proxy-middleware "^0.19.1" + http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" - is-absolute-url "^3.0.2" + is-absolute-url "^3.0.3" killable "^1.0.1" loglevel "^1.6.4" opn "^5.5.0" p-retry "^3.0.1" portfinder "^1.0.24" schema-utils "^1.0.0" - selfsigned "^1.10.6" + selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" sockjs "0.3.19" @@ -19037,7 +19043,7 @@ webpack-dev-server@^3.4.1: strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" - webpack-dev-middleware "^3.7.1" + webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" yargs "12.0.5" @@ -19059,9 +19065,9 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-map "~0.6.1" webpack@^4.40.1: - version "4.41.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.0.tgz#db6a254bde671769f7c14e90a1a55e73602fc70b" - integrity sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g== + version "4.41.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.1.tgz#5388dd3047d680d5d382a84249fd4750e87372fd" + integrity sha512-ak7u4tUu/U63sCVxA571IuPZO/Q0pZ9cEXKg+R/woxkDzVovq57uB6L2Hlg/pC8LCU+TWpvtcYwsstivQwMJmw== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -19172,6 +19178,13 @@ which@1, which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" + integrity sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"