diff --git a/pages/02.linux/authentik/default.en.md b/pages/02.linux/authentik/default.en.md index 77f3ec1..1b92b87 100644 --- a/pages/02.linux/authentik/default.en.md +++ b/pages/02.linux/authentik/default.en.md @@ -15,10 +15,10 @@ https://github.com/containers/podman/blob/main/docs/tutorials/socket_activation. ### Network and Pod -[prism classes="language-bash command-line" cl-prompt="\[foo@localhost\] $"] -podman network create net_authentik -podman pod create --name pod_authentik --network net_authentik -p 9000:9000 -p 9443:9443 -[/prism] +[prism classes="language-bash command-line" cl-prompt="\[foo@localhost\] $"] +podman network create net_authentik +podman pod create --name pod_authentik --network net_authentik -p 9000:9000 -p 9443:9443 +[/prism] #### Port Mappings diff --git a/plugins/shortcode-core/.gitignore b/plugins/shortcode-core/.gitignore new file mode 100644 index 0000000..ce52594 --- /dev/null +++ b/plugins/shortcode-core/.gitignore @@ -0,0 +1,3 @@ +/.idea +/vendor/.DS_Store +.DS_Store diff --git a/plugins/shortcode-core/CHANGELOG.md b/plugins/shortcode-core/CHANGELOG.md new file mode 100644 index 0000000..32c3284 --- /dev/null +++ b/plugins/shortcode-core/CHANGELOG.md @@ -0,0 +1,411 @@ +# v5.1.3 +## 06/01/2022 + +1. [](#improved) + * Added a new `display` CLI command to show all registered shortcodes + +# v5.1.2 +## 05/10/2022 + +1. [](#bugfix) + * Upgraded `thunderer/shortcode` to 0.7.5 to address a security issue + +# v5.1.1 +## 01/11/2022 + +1. [](#improved) + * Improved Twig 2 support + * Bugfixes to support latest NextGen version (v1.1.8) + +# v5.1.0 +## 12/09/2021 + +1. [](#new) + * Notice shortcode now uses a twig template to allow for easy overriding of style +1. [](#improved) + * Updated vendor libraries to latest + +# v5.0.7 +## 09/28/2021 + +1. [](#improved) + * Added `processShortcodesRaw()` using raw_handlers [#104](https://github.com/getgrav/grav-plugin-shortcode-core/pull/104) + * Better vertical alignment for inline shortcodes in NextGen Editor +1. [](#bugfix) + * NextGen Editor: Ensure content of children shortcode elements, such as UI Tab content, have a new empty line as prefix and suffix, to ensure Markdown lists are not lost [getgrav/grav-premium-issues#123](https://github.com/getgrav/grav-premium-issues/issues/123) + +# v5.0.6 +## 04/27/2021 + +1. [](#improved) + * Added the ability to enable/disable built-in notice CSS + * NextGen Editor: Added support for multiple editor instances + +# v5.0.5 +## 03/12/2021 + +1. [](#bugfix) + * `SafeEmailShortcode` fixed to be compatible with PHP 7.4 + * Addresses shortcodes getting repeated in modular subpages [#101](https://github.com/getgrav/grav-plugin-shortcode-core/pull/101) + +# v5.0.4 +## 01/26/2021 + +1. [](#bugfix) + * NextGen Editor: Fixed regexp regression preventing multiple shortcodes to be parsed in certain circumstances + +# v5.0.3 +## 01/15/2021 + +1. [](#improved) + * NextGen Editor: Update to support latest version + +# v5.0.2 +## 12/18/2020 + +1. [](#improved) + * NexGen Editor: Added optional `shorthand` to force attributes to full declaration +1. [](#bugfix) + * NextGen Editor: Fixed regexp preventing attributes with `/` in the value from being captured + +# v5.0.1 +## 12/02/2020 + +1. [](#improved) + * Content editing in settings popup + +# v5.0.0 +## 11/04/2020 + +1. [](#new) + * Added built-in support for **Nextgen Editor** with powerful GUI capabilities for all core shortcodes + * Support for 3rd party shortcode plugins to add their own **Nextgen Editor** integrations. +1. [](#improved) + * Support for comma-listed language tags in `[lang]` shortcode: `[lang=dk,se,no,fi]` + * Support for justified text in align shortcode [#94](https://github.com/getgrav/grav-plugin-shortcode-core/issues/94) + * Support for asset collections and arrays [#85](https://github.com/getgrav/grav-plugin-shortcode-core/issues/85) + * Support of `duotone` FontAwesome icons [#78](https://github.com/getgrav/grav-plugin-shortcode-core/issues/78) +1. [](#bugfix) + * Support HTML in Header shortcode + +# v4.2.3 +## 04/27/2020 + +1. [](#improved) + * Configuration option to exclude default shortcodes [#86](https://github.com/getgrav/grav-plugin-shortcode-core/issues/86) + * Add support for `style` attribute in `[span]` shortcode [#88](https://github.com/getgrav/grav-plugin-shortcode-core/issues/88) + * Fix typos [#91](https://github.com/getgrav/grav-plugin-shortcode-core/issues/91) + +# v4.2.2 +## 03/04/2020 + +1. [](#improved) + * Added second `$options` parameter to `ShortcodeCore->registerAllShortcodes()`, key `ignore` can be used to ignore class names / files from being loaded +1. [](#bugfix) + * Fix shortcodes which do not override `init()` method, added deprecation notice instead [#82](https://github.com/getgrav/grav-plugin-shortcode-core/issues/82) + * Fixed error message showing up when updating older versions (<4.2.0) of the plugin [#84](https://github.com/getgrav/grav-plugin-shortcode-core/issues/84) + +# v4.2.1 +## 02/14/2020 + +1. [](#improved) + * Improved shortcode loading, all shortcodes should now extend `Grav\Plugin\Shortcodes\Shortcode` class +1. [](#bugfix) + * Fixed `Class 'Grav\Plugin\Shortcodes\Shortcode' not found` error when using some plugins + * Fixed fatal error when trying to instantiate bad shortcodes (they will be skipped instead) + +# v4.2.0 +## 02/11/2020 + +1. [](#new) + * Pass phpstan level 1 tests + * Added autoload support for registering shortcodes with `$grav['shortcode']->registerShortcode($name)` + * Moved `ShortcodeObject` classes into `Grav\Plugin\ShortcodeCore` namespace with old alias +1. [](#improved) + * Major code cleanup + +# v4.1.7 +## 12/04/2019 + +1. [](#new) + * Added a new `[lorem]` shortcode for quickly generating lorem ipsum dummy content + * Updated Core Thunderer Shortcode library to `0.7.3` for PHP 7.4 compatibility + +# v4.1.6 +## 10/03/2019 + +1. [](#improved) + * Support markdown in `Figure` shortcode caption attribute + * FlexObjects compatibility: changed references to `Page` class to use `PageInterface` + * Reworked the `shortcode` twig var to use a class/method approach for better compatibility in modular/page formats +1. [](#bugfix) + * Fix issue with `[language]` when `include_default_lang: false` [#76](https://github.com/getgrav/grav-plugin-shortcode-core/issues/76) + +# v4.1.5 +## 09/05/2019 + +1. [](#improved) + * Run `onContentProcessed()` event after all other plugins [#75](https://github.com/getgrav/grav-plugin-shortcode-core/issues/75) + +# v4.1.4 +## 08/11/2019 + +1. [](#new) + * Added a new `[details][/details]` shortcode [#72](https://github.com/getgrav/grav-plugin-shortcode-core/pull/72) +1. [](#improved) + * Fixed regression issue introduced in v1.4.3 [#73](https://github.com/getgrav/grav-plugin-shortcode-core/issues/73) + +# v4.1.3 +## 08/09/2019 + +1. [](#improved) + * Fix for shortcode objects not being available. For example `[section][/section]` not working previously without `process: twig: true` + * `README.md` improvements + +# v4.1.2 +## 06/22/2019 + +1. [](#new) + * Added new `h#` tags for `h1` through `h6` supporting `class` and `id` attributes +1. [](#improved) + * Make `ShortcodeManager::setStates()` more flexible to accept any type of object + +# v4.1.1 +## 04/23/2019 + +1. [](#improved) + * Updated Core Thunderer Shortcode library to `0.7.2` + +# v4.1.0 +## 04/14/2019 + +1. [](#new) + * Support for a `ShortCodeManager::getRawHandlers()` to support shortcodes that need to process **before** Markdown (like upcoming `Prism-Highlighter`) + +# v4.0.1 +## 03/21/2019 + +1. [](#new) + * Added a new `[mark][/mark]` shortcode which makes highlighting in code blocks much simpler! + +# v4.0.0 +## 03/20/2019 + +1. [](#improved) + * Improved way to handle shortcodeAssets from `Page::contentMeta()` - Fixes numerous issues + * Allow `size` shortcode to handle non-numeric values (e.g. `%`, `x-large`, etc.) [#63](https://github.com/getgrav/grav-plugin-shortcode-core/pull/63) + * Added FontAwesome 5 support [#56](https://github.com/getgrav/grav-plugin-shortcode-core/pull/56) + +# v3.1.2 +## 03/15/2019 + +1. [](#improved) + * Added a helper method to allow `getBbCode()` to work with `wordpress` parser + +# v3.1.1 +## 03/12/2019 + +1. [](#bugfix) + * Reverted accidental change of default parser. Should be `regular` + +# v3.1.0 +## 02/28/2019 + +1. [](#improved) + * Modified priority of `onPluginsInitialized` to fire earlier +1. [](#bugfix) + * New language shortcode, for example `[lang=en]...[/lang]` + +# v3.0.1 +## 02/03/2019 + +1. [](#bugfix) + * Fixed issues with `0` param and `regular` parser [#14](https://github.com/getgrav/grav-plugin-shortcode-core/issues/14) [#57](https://github.com/getgrav/grav-plugin-shortcode-core/issues/57) [shortcode-ui#29](https://github.com/getgrav/grav-plugin-shortcode-ui/issues/29) [shortcode-ui#6](https://github.com/getgrav/grav-plugin-shortcode-ui/issues/26) + +# v3.0.0 +## 12/19/2018 + +1. [](#new) + * Update to latest Shortcode library `v0.7.0` which has over **10X performance** for default regular parser + * Added an option `admin_pages_only` to only process actual `user/pages/` based pages and not dynamic pages to increase performance + +# v2.7.3 +## 12/07/2018 + +1. [](#new) + * Added a new `figure` shortcode [#51](https://github.com/getgrav/grav-plugin-shortcode-core/pull/51) +1. [](#bugfix) + * Fix empty space at the end of a line [#54](https://github.com/getgrav/grav-plugin-shortcode-core/pull/54) + +# v2.7.2 +## 10/26/2018 + +1. [](#new) + * Added a new `span` shortcode that supports `class` and `id` attributes +1. [](#improved) + * Switched default parser to `regular` + * Using latest `dev-master` version which has a couple of key fixes + +# v2.7.1 +## 03/14/2018 + +1. [](#improved) + * Support shortcodes in theme as well as plugins [#43](https://github.com/getgrav/grav-plugin-shortcode-core/issues/43) + +# v2.7.0 +## 01/16/2018 + +1. [](#new) + * Added a new `div` shortcode that supports `class` and `id` attributes + +# v2.6.0 +## 04/25/2017 + +1. [](#new) + * Added ability to define a custom shortcode path for you own shortcodes [#36](https://github.com/getgrav/grav-plugin-shortcode-core/issues/36) + * Added a twig filter to allow you to use shortcodes directly in Twig templates [#33](https://github.com/getgrav/grav-plugin-shortcode-core/pull/33) + +# v2.5.4 +## 02/26/2017 + +1. [](#bugfix) + * Fixed issue with modular Shortcode meta was not getting processed properly (Assets, Sections, etc.) + +# v2.5.3 +## 02/21/2017 + +1. [](#improved) + * Added a reference to current Page in `ShortcodeManager` + +# v2.5.2 +## 01/26/2017 + +1. [](#bugfix) + * Fixed Mozilla column css prefix + +# v2.5.1 +## 01/25/2017 + +1. [](#improved) + * Added `moz-` prefix in column shortcode + +# v2.5.0 +## 01/25/2017 + +1. [](#new) + * Added **new** `columns` shortcode for CSS columns support + +# v2.4.0 +## 01/17/2017 + +1. [](#improved) + * Switched to `Regex` parser by default (previous was Regex) + * Update to latest Shortcode library v0.6.5 +1. [](#bugfix) + * Removed `getParameterAt(0)` hack in favor of `getBbbCode()` that works with Regex parser + +# v2.3.2 +## 12/15/2016 + +1. [](#improved) + * Update to latest Shortcode library v0.6.4 to address a parser bug [#25](https://github.com/getgrav/grav-plugin-shortcode-core/issues/25) + +# v2.3.1 +## 07/14/2016 + +1. [](#improved) + * renamed internal `contentMeta` variables to `shortcodeMeta` and `shortcodeAssets` + * Update to latest Shortcode library + +# v2.3.0 +## 05/20/2016 + +1. [](#improved) + * Use new conentmeta approach from Grav 1.1 + +# v2.2.1 +## 05/09/2016 + +1. [](#bugfix) + * Always initialize current page even if collection exists [#3](https://github.com/getgrav/grav-plugin-shortcode-ui/issues/3) + +# v2.2.0 +## 04/23/2016 + +1. [](#new) + * Added **new** `fa` FontAwesome shortcode + +# v2.1.0 +## 04/21/2016 + +1. [](#new) + * Added **new** `notice` shortcode +1. [](#improved) + * Updated to latest Shortcode library version + +# v2.0.2 +## 02/17/2016 + +1. [](#bugfix) + * Initialized states in constructor + +# v2.0.1 +## 02/16/2016 + +1. [](#improved) + * Support **modular** pages by populating Twig variables in `onTwigPageVariables()` event #8 +1. [](#bugfix) + * Better more flexible regex in the Markdown **block** definition for more reliable markdown in shortcodes. #3 + +# v2.0.0 +## 02/11/2016 + +1. [](#new) + * Added **new** `section` shortcode + * Use new `contentMeta` mechanism for storing/caching objects and assets per page + * Added new `ShortcodeManager::reset()` methods +1. [](#improved) + * Completely refactored the plugin to use a new extensible mechanism that makes it easier to manage multiple shortcodes + +# v1.4.0 +## 02/03/2016 + +1. [](#improved) + * Updated Shortcode to latest `dev-master` that includes Events +1. [](#bugfix) + * Fixed `raw` shortcode to use new `FilterRawEventHandler` so it doesn't process shortcodes at all + +# v1.3.0 +## 01/29/2016 + +1. [](#improved) + * Added markdown-shortcode-block support to the plugin +1. [](#bugfix) + * Updated Core Thunderer Shortcode library with some important fixes + +# v1.2.0 +## 01/25/2016 + +1. [](#improved) + * Customizable Parser. Choose from `WordPress`, `Regex`, and `Regular` + +# v1.1.0 +## 01/24/2016 + +1. [](#improved) + * Updated to latest Shortcode `dev-master` version that contains some important fixes + * Switched to `WordPressParser` for 2x speed improvements + +# v1.0.1 +## 01/18/2016 + +1. [](#bugfix) + * Fixed blueprint + * Fixed a default yaml state + + +# v1.0.0 +## 01/18/2016 + +1. [](#new) + * ChangeLog started... diff --git a/plugins/shortcode-core/LICENSE b/plugins/shortcode-core/LICENSE new file mode 100644 index 0000000..4bb7092 --- /dev/null +++ b/plugins/shortcode-core/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Grav + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/shortcode-core/README.md b/plugins/shortcode-core/README.md new file mode 100644 index 0000000..acb41ae --- /dev/null +++ b/plugins/shortcode-core/README.md @@ -0,0 +1,575 @@ +# Grav Shortcode Core Plugin + +## About + +The **Shortcode Core** plugin allow for the development of simple yet powerful shortcode plugins that utilize the common format utilized by **WordPress** and **BBCode**. The core plugin loads the libraries required and fires a new event that other plugins can use. It also provides a mechanism for adding CSS/JS assets that are cached so that shortcodes can work effectively even when the processed page content is cached. This ensures that shortcodes are only processed once and will not impact performance by doing unnecessary work on every page. + +This plugin uses the [Thunderer Advanced shortcode engine](https://github.com/thunderer/Shortcode). For more information please check out that repo on GitHub. + +## Quick Example + +``` +This is some [u]bb style underline[/u] and not much else + +[center]This is centered[/center] + +This is [size=30]bigger text[/size] and this is [color=blue]blue text[/color] +``` + +This example functionality is provided with the **Shortcode Core** plugin to provide some functionality that is not available in traditional markdown but is standard **BBCode** used in many form platforms. You can see how the syntax is just a simple open and close element using square brackets. + +This will render: + +![](assets/shortcode-core-1.png) + +The core plugin required for any other shortcode specific plugin. Provides some basic BBCode style syntax such as underline, color, center, and size. + +## Installation + +Typically a plugin should be installed via [GPM](http://learn.getgrav.org/advanced/grav-gpm) (Grav Package Manager): + +``` +$ bin/gpm install shortcode-core +``` + +Alternatively it can be installed via the [Admin Plugin](http://learn.getgrav.org/admin-panel/plugins) + +> NOTE: If you install a shortcode plugin such as [grav-plugin-shortcode-ui](https://github.com/getgrav/grav-plugin-shortcode-ui) it may have this core plugin configured as a dependency and install it automatically. + +## Configuration Defaults + +The **Shortcode Core** plugin only has a few options to configure. The default values are: + +```yaml +enabled: true +active: true +active_admin: true +admin_pages_only: true +parser: regular +include_default_shortcodes: true +css: + notice_enabled: true +custom_shortcodes: +fontawesome: + load: true + url: '//maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css' + v5: false +``` + +* `enabled: true|false` toggles if the shortcodes plugin is turned on or off +* `active: true|false` toggles if shortcodes will be enabled site-wide or not +* `active_admin: true|false` toggles if shortcodes will be processed in the admin plugin +* `admin_pages_only: true|false` toggles if admin should only process shortcodes for Grav pages +* `parser: wordpress|regex|regular` let's you configure the parser to use +* `include_default_shortcodes: true|false` toggle the inclusion of shortcodes provided by this plugin +* `custom_shortcodes:` the path to a directory where you can put your custom shortcodes (e.g. `/user/custom/shortcodes`) +* `fontawesome.load: true|false` toggles if the fontawesome icon library should be loaded or not +* `fontawesome.url:` the CDN Url to use for fontawesome +* `v5:` Version 5 flag as it requires some additional logic + +> NOTE: In previous versions the `wordpress` parser was preferred. However with version `2.4.0`, the `regex` parser is now default. If you have saved configuration, you should manually change this to `regex` or you may receive errors or bad output. + +## Configuration Modifications + +The best approach to make modifications to the core plugin settings is to copy the `shortcode-core.yaml` file from the plugin into your `user/config/plugins/` folder (create it if it doesn't exist). You can modify the settings there. + +> NOTE: If you have the admin plugin installed, you can make modifications to the settings via the **Plugins** page and it will create that overridden file automatically. + +## Per-Page Configuration + +Sometimes you may want to only enable shortcodes on a _page-by-page_ basis. To accomplish this set your plugin defaults to: + +```yaml +enabled: true +active: false +``` + +This will ensure the plugin is loaded, but not **active**, then on the page you wish to process shortcodes on simply add this to the page header: + +```yaml +shortcode-core: + active: true +``` + +This will ensure the shortcodes are processed on this page only. + +You can also change the parser on a particular page with the following: + +```yaml +shortcode-core: + parser: regex +``` + +## Available Shortcodes + +The core plugin contains a few simple shortcodes that can be used as basic examples: + +#### Underline + +Underline a section of text + +``` +This is some [u]bb style underline[/u] and not much else +``` + +#### Font Size + +Set the size of some text to a specific pixel size + +``` +This is [size=30]bigger text[/size] +``` + +#### Left Align + +Left align the text between this shortcode + +``` +[left]This text is left aligned[/left] +``` + +#### Center Align + +Center a selection of text between this shortcode + +``` +[center]This text is centered[/center] +``` + +#### Right Align + +Right align the text between this shortcode + +``` +[right]This text is right aligned[/right] +``` + + +#### Div + +Allows you to wrap markdown in an HTML `div` tag that supports both `id` and `classes` attributes + +``` +[div class="text-center"] +This text is **centered** aligned +[/div] +``` + +or + +``` +[div class="table table-striped"] +| header 1 | header 2 | +|----------|----------| +| A 1 | B 1 | +| A 2 | B 2 | +| A 3 | B 3 | +[/div] +``` + +#### Headers + +Allows you to add `id` and `class` attributes to HTML `h1` through `h6` tags: + +``` +[h1 class="major"]This is my title[/h1] +``` + +#### Span + +Allows you to wrap markdown in an HTML `span` tag that supports both `id` and `class` attributes + +``` +[span class="text-center"] +This text is **centered** aligned +[/span] +``` + +#### Columns + +Take advantage of powerful CSS columns support by using this shortcode + +``` +[columns] +### Headline + +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod +tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo +consequat. + +Duis aute irure dolor in reprehenderit in voluptate velit esse +cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non +proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod +tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo +consequat. +[/columns] +``` + +Defaults to 2 columns. You can also explicitly set the number of `columns`, `width`, `gap`, and `rule` styling for the column divider: + +``` +[columns count=3 width=200px gap=30px rule="1px dotted #930"] +### Headline + +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod +tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo +consequat. + +Duis aute irure dolor in reprehenderit in voluptate velit esse +cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non +proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod +tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo +consequat. +[/columns] +``` + +#### Raw + +Do not process the shortcodes between these raw shortcode tags + +``` +[raw]This is some [u]bb style underline[/u] and not much else[/raw] +``` + +#### Safe-Email + +Encode an email address so that it's not so easily 'scrapable' by nefarious scripts. This one has a couple of options: `autolink` toggle to turn the email into a link, and an `icon` option that lets you pick a font-awesome icon to prefix the email. Both settings are optional. + +``` +Safe-Email Address: [safe-email autolink="true" icon="envelope-o"]user@domain.com[/safe-email] +``` + +#### Section + +The **section** shortcode is a powerful way to encompass some text in your markdown page with a `[section][/section]` tag and then this is cached by Grav so it can be accessed later. For example you could have a page with a variety of sections described in it that let you create many **chunks** of data. These are then added to Twig as an array of shortcode objects. An example of this would be the following markdown: + +``` +[section name="author"] +![](author.jpg?cropResize=100,100&classes=left) +### Johnny Appleseed +Johnny Appleseed was an American pioneer nurseryman who introduced apple trees to large parts of Pennsylvania, Ontario, Ohio, Indiana, and Illinois, as well as the northern counties of present-day West Virginia. He became an American legend while still alive, due to his kind, generous ways, his leadership in conservation, and the symbolic importance he attributed to apples. +[/section] + +[section name="quote"] +> Some are born great, some achieve greatness, and some have greatness thrust upon them. + Read more at http://www.brainyquote.com/quotes/topics/topic_great.html#tdqt3strtEYBCH43.99 +> William Shakespeare + +Regular **Markdown** content that will be output as `page.content` +[/section] +``` + +This we be removed from the page content and made available in Twig variables so you could insert these into custom HTML structures, for example: + +``` +
{{ shortcode.section.author }}
+ +
+
+ {{ page.content|raw }} +
+
+ {{ shortcode.section.quote }} +
+
+``` + +#### Sections from other pages + +You can even retrieve a section from another page utilizing the shortcodes as they are stored in the page's `contentMeta` with this syntax: + +``` +
{{ page.find('/my/custom/page').contentMeta.shortcodeMeta.shortcode.section.author }}
+``` + +#### Notice + +A useful shortcode that performs a similar job to the [markdown-notices](https://github.com/getgrav/grav-plugin-markdown-notices) plugins, allows you to easily create simple notice blocks as seen on http://learn.getgrav.org and http://getgrav.org. To use simply use the following syntax: + +``` +[notice] +Your **Markdown** text that will appear in the notice +[/notice] +``` + +You can also specifically choose from `note`, `info`, `warning`, `tip` types which provide unique color options: + +``` +[notice=warning] +Danger Will Robinson! Danger, Will Robinson! +[/notice] +``` +#### Figure + +Figure elements are the recommended way to add self-contained units of flow content, i.e. images, charts and other visual elements that can be moved away from the main flow of the document without affecting the document's meaning. Figures may include captions through the `caption` attribute. Both `id` and `class` attributes are also available. + +``` +[figure id="fig1" class="image" caption="**Fig. 1** A beautiful figure."] +![Gorgeous image](image.png) +[/figure] +``` + +#### Mark + +The HTML `` tag is extremely useful to highlight text in your pages, and serves like a highlighter pen. However, as we know that markdown inside of HTML is not processed, using this HTML is often not convenient as it means markdown inside will not be processed. + +Another important usecase is trying to highlight code in a markdown text block, again the HTML tag doesn't work because the result is escaped and treated like any other code and simply displayed. + +The solution is simple, just use the shortcode version instead: + +``` +This is a sample of text [mark]with this bit **highlighted** with _markdown_ syntax[/mark] and the rest just plain. +``` + +You can also use the `class` option to specificy a specific a CSS class to add to the `` HTML tag (useful to color the marked output): + +``` +This is a sample of text [mark class=blue]with this bit **highlighted** with _markdown_ syntax[/mark] and the rest just plain. +``` + +It also works great in code blocks: + +``` +` element provides a simple show/hide behaviour without JavaScript, and can optionally contain a `` element that is always shown. Clicking on the summary text toggles the visibility of the content, and when a summary is not provided, it defaults to "Details". The element can be used to provide extra details, or can be combined into an accordion-like structure. + +``` +[details] +Lorem ipsum dolor sit amet... +[/details] + +[details="Summary text"] +Lorem ipsum dolor sit amet... +[/details] + +[details summary="Summary text" class="accordion"] +Lorem ipsum dolor sit amet... +[/details] +``` + +**Note:** The show/hide behaviour is not supported in IE 11 or Edge 18, and the element will be permanently open. You can check the current status of browser compatibility at [Can I Use](https://caniuse.com/#search=details). + +#### Lorem Ipsum + +Useful for faking content, you can use a shortcode to quickly generate some random "lorem ipsum" text: + +**Paragraphs:** +``` +[lorem=5 /] + +[lorem p=5 tag=div /] +``` + +**Sentences:** +``` +[lorem s=4 /] +``` + +**Words:** +``` +[lorem w=35 /] +``` + +## Using Shortcodes in Twig + +You can now use shortcodes in Twig templates and process them with the `|shortcodes` filter. For example: + +``` +{% set twig_text = "This is [size=30]bigger text[/size] and this is [color=green]green text[/color]" %} +{{ twig_text|shortcodes }} +``` + +## Custom Shortcodes + +### Simple Way + +First, configure a directory from which custom shortcodes are loaded. Edit `user/config/plugins/shortcode-core.yaml` like follows (create it if it does not exist): + +```yaml +custom_shortcodes: '/user/custom/shortcodes' +``` + +To add a custom shortcode, create a PHP file that defines a new shortcode class. For example, to create a shortcode for ~~strikethrough~~ text, save the following code as `user/custom/shortcodes/StrikeShortcode.php`: + +```php +shortcode->getHandlers()->add('strike', function(ShortcodeInterface $sc) { + return ''.$sc->getContent().''; + }); + } +} +``` + +Note that the class name (`StrikeShortcode`) must match the file name for the shortcode to work. + +`[strike]text[/strike]` should now produce strikethrough text. + +### As a Custom Plugin + +The more flexible approach is to create a custom plugin. + +The **Shortcode Core** plugin is developed on the back of the [Thunderer Advanced Shortcode Engine](https://github.com/thunderer/Shortcode) and as such loads the libraries and classes required to build third party shortcode plugins. + +We introduced a new event called `onShortcodeHandlers()` that allows a 3rd party plugin to create and add their own custom handlers. These are then all processed by the core plugin in one shot. + +```php + public static function getSubscribedEvents() + { + return [ + 'onShortcodeHandlers' => ['onShortcodeHandlers', 0] + ]; + } +``` + +Then you just need to listen to the event: + +```php + public function onShortcodeHandlers() + { + $this->grav['shortcode']->registerAllShortcodes(__DIR__.'/shortcodes'); + } +``` + +Lastly create your shortcode in the `user/plugins/my-plugin/shortcodes/` folder, in this example we created a simple `[red][/red]` shortcode as `RedShortcode.php`: + +```php +shortcode->getHandlers()->add('red', function(ShortcodeInterface $sc) { + return ''.$sc->getContent().''; + }); + } +} +``` + +> If you have not already done so, I suggest reading the [Grav Plugin Tutorial](http://learn.getgrav.org/plugins/plugin-tutorial) first to gain a full understanding of what you need to develop a Grav plugin. + +The best way to see how to create a new shortcode-based plugins is to look at the **Shortcode UI** plugin that extends the **Shortcode Core** by adding more shortcodes. It also makes use of Twig to handle processing and has some more advanced shortcode techniques. + +* Core Plugin: https://github.com/getgrav/grav-plugin-shortcode-ui/blob/develop/shortcode-ui.php +* Tabs Shortcode Example: https://github.com/getgrav/grav-plugin-shortcode-ui/blob/develop/shortcodes/TabsShortcode.php +* Color Shortcode Example: https://github.com/getgrav/grav-plugin-shortcode-core/blob/develop/shortcodes/ColorShortcode.php +* Section Shortcode Example: https://github.com/getgrav/grav-plugin-shortcode-core/blob/develop/shortcodes/SectionShortcode.php +* Section Prism Highlight Example: https://github.com/trilbymedia/grav-plugin-prism-highlight/blob/develop/shortcodes/PrismShortcode.php + +## Processing Shortcodes Before or After Markdown processing + +There are basically two ways of processing a shortcode: + +1. After markdown is processed +2. Before markdown is processed + +These two approaches are important because, for the most part, shortcodes make more sense when they can 'wrap' markdown, so they process **after** markdown. + +For example a `[div][/div]` shortcode would be useless if it ran before markdown is processed because it would add the relevant HTML `
` tags, and then the markdown parser would promptly **skip** all markdown processing between those divs because it won't process markdown **inside** HTML. So this shortcode and most others run after markdown processing has already occurred using this approach: + +```php +$this->shortcode->getHandlers()->add('div', function(ShortcodeInterface $sc) { ... } +``` +Notice the `getHandlers()` call is the standard way to add a handler. + +However, there are situations when you need to process the shortcode **before** the markdown processing to ensure markdown **is skipped**, like in the example of a code block. This is why in the [Prism Highlighter](https://github.com/trilbymedia/grav-plugin-prism-highlight) plugin, we use this approach to defining the shortcode: + +```php +$this->shortcode->getRawHandlers()->add('prism', function(ProcessedShortcode $sc) { ... } +``` + +The difference here is it uses `getRawHandlers()` to ensure the handler is processed to the content in the _raw_ state. + +## Display All Shortcodes + +You can now display all available shortcodes by using the CLI command: + +```shell +bin/plugin shortcode-core display +``` \ No newline at end of file diff --git a/plugins/shortcode-core/assets/shortcode-core-1.png b/plugins/shortcode-core/assets/shortcode-core-1.png new file mode 100644 index 0000000..2cf9f1e Binary files /dev/null and b/plugins/shortcode-core/assets/shortcode-core-1.png differ diff --git a/plugins/shortcode-core/blueprints.yaml b/plugins/shortcode-core/blueprints.yaml new file mode 100644 index 0000000..15426d0 --- /dev/null +++ b/plugins/shortcode-core/blueprints.yaml @@ -0,0 +1,127 @@ +name: Shortcode Core +slug: shortcode-core +type: plugin +version: 5.1.3 +description: "This plugin provides the core functionality for shortcode plugins" +icon: code +author: + name: Team Grav + email: devs@getgrav.org + url: http://getgrav.org +homepage: https://github.com/getgrav/grav-plugin-shortcode-core +demo: http://learn.getgrav.org +keywords: gui, plugin, tabs, twig +bugs: https://github.com/getgrav/grav-plugin-shortcode-core/issues +license: MIT + +dependencies: + - { name: grav, version: '>=1.6.4' } + +form: + validation: strict + fields: + enabled: + type: toggle + label: Plugin Enabled + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + active: + type: toggle + label: Activated + help: Site-Wide activation + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + active_admin: + type: toggle + label: Activated in Admin + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + admin_pages_only: + type: toggle + label: Admin Real-Pages Only + help: When activate, only process real-pages + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + parser: + type: select + size: medium + classes: fancy + label: Processor + help: Which built-in processor to use. WordPress (fastest), Regular (customizable), Regex (solid) + options: + wordpress: WordpressParser + regex: RegexParser + regular: RegularParser + + custom_shortcodes: + type: text + label: Custom Shortcodes + help: The path to a location where you store custom shortcodes. + placeholder: '/user/custom/shortcodes' + size: large + + css.notice_enabled: + type: toggle + label: Enable Notice Shortcode CSS + help: Enable the default notice CSS by default. Disable if you want to use your own custom CSS. + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + fontawesome.load: + type: toggle + label: Load Fontawesome Library + help: Used by the `safe-email` shortcode if your theme doesn't already load it + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + fontawesome.url: + type: text + label: Fontawesome URL + help: You can change the location of fontawesome by changing this URL + size: large + + fontawesome.v5: + type: toggle + label: Use Fontawesome Version 5 + help: Allows usage of the 'fab', 'fas' and other new font families of Fontawesome 5. + highlight: 0 + default: 0 + options: + 1: Enabled + 0: Disabled + validate: + type: bool diff --git a/plugins/shortcode-core/classes/Shortcode.php b/plugins/shortcode-core/classes/Shortcode.php new file mode 100644 index 0000000..10cd16f --- /dev/null +++ b/plugins/shortcode-core/classes/Shortcode.php @@ -0,0 +1,7 @@ +grav = Grav::instance(); + $this->config = $this->grav['config']; + $this->handlers = new HandlerContainer(); + $this->raw_handlers = new HandlerContainer(); + $this->events = new EventContainer(); + $this->states = []; + $this->assets = []; + $this->objects = []; + } + + /** + * add CSS and JS assets to the Manager so that they can be saved to cache + * for subsequent cached pages + * + * @param mixed $actionOrAsset the type of asset (JS or CSS) or, if the second parameter is omitted, + * a collection or an array of asset. + * @param string $asset the asset path in question + */ + public function addAssets($actionOrAsset, $asset = null) + { + if ($asset == null) { + if (is_array($actionOrAsset)) { + $this->assets[''] = array_merge($this->assets[''] ?? array(), $actionOrAsset); + } else { + $this->assets[''] [] = $actionOrAsset; + } + } else { + if (isset($this->assets[$actionOrAsset]) && in_array($asset, $this->assets[$actionOrAsset], true)) { + return; + } + $this->assets[$actionOrAsset] [] = $asset; + } + } + + /** + * return a multi-dimensional array of all the assets + * + * @return array the assets array + */ + public function getAssets() + { + return $this->assets; + } + + /** + * reset the assets + */ + public function resetAssets() + { + $this->assets = []; + } + + /** + * adds ad object + * @param string $key The key to look up the object + * @param object $object The object to store + */ + public function addObject($key, $object) + { + $new = [$object->name() => $object]; + if (array_key_exists($key, $this->objects)) { + $current = (array)$this->objects[$key]; + $this->objects[$key] = $current + $new; + } else { + $this->objects[$key] = $new; + } + + } + + /** + * sets all the objects + * @param array $objects The objects array + */ + public function setObjects($objects) + { + $this->objects = $objects; + } + + /** + * return all the objects + * @return array The objects array + */ + public function getObjects() + { + return $this->objects; + } + + /** + * reset the objects + */ + public function resetObjects() + { + $this->objects = []; + } + + /** + * returns the current handler container object + * + * @return HandlerContainer + */ + public function getHandlers() + { + return $this->handlers; + } + + /** + * returns the current raw handler container object + * + * @return HandlerContainer + */ + public function getRawHandlers() + { + return $this->raw_handlers; + } + + /** + * returns the current event container object + * + * @return EventContainer + */ + public function getEvents() + { + return $this->events; + } + + /** + * Register an individual shortcode with the manager so it can be operated on by the Shortcode library + * + * @param string $name the name of the shortcode (should match the classname) + * @param string|null $directory directory where the shortcode is located + */ + public function registerShortcode($name, $directory = null) + { + $className = 'Grav\\Plugin\\Shortcodes\\' . basename($name, '.php'); + if (!class_exists($className) && $directory) { + $path = rtrim($directory, '/').'/'.$name; + + require_once $path; + } + + // Make sure the class exists, extends Shortcode and is not abstract. + if (class_exists($className) && is_subclass_of($className, \Grav\Plugin\Shortcodes\Shortcode::class)) { + $reflection = new \ReflectionClass($className); + if (!$reflection->isAbstract()) { + /** @var \Grav\Plugin\Shortcodes\Shortcode $shortcode */ + $shortcode = new $className(); + $shortcode->init(); + } + } + } + + /** + * register all files as shortcodes in a particular directory + * @param string $directory directory where the shortcodes are located + * @param array $options Extra options + */ + public function registerAllShortcodes($directory, array $options = []) + { + try { + $ignore = $options['ignore'] ?? []; + foreach (new \DirectoryIterator($directory) as $file) { + if ($file->isDot() || \in_array($file->getBasename('.php'), $ignore, true)) { + continue; + } + $this->registerShortcode($file->getFilename(), $directory); + } + } catch (\UnexpectedValueException $e) { + Grav::instance()['log']->error('ShortcodeCore Plugin: Directory not found => ' . $directory); + } + } + + /** + * setup the markdown parser to handle shortcodes properly + * + * @param object $markdown the markdown parser object + */ + public function setupMarkdown($markdown) + { + $markdown->addBlockType('[', 'ShortCodes', true, false); + + $markdown->blockShortCodes = function($Line) { + $valid_shortcodes = implode('|', $this->handlers->getNames()); + $regex = '/^\[\/?(?:' . $valid_shortcodes . ')[^\]]*\]$/'; + + if (preg_match($regex, trim($Line['body']), $matches)) { + return [ + 'markup' => $Line['body'], + ]; + } + + return null; + }; + } + + /** + * process the content by running over all the known shortcodes with the + * chosen parser + * + * @param PageInterface $page the page to work on + * @param Data $config configuration merged with the page config + * @param null $handlers + * @return string + */ + public function processContent(PageInterface $page, Data $config, $handlers = null) + { + $parser = $this->getParser($config->get('parser')); + + if (!$handlers) { + $handlers = $this->handlers; + } + + if ($page && $config->get('enabled')) { + $this->page = $page; + $content = $page->getRawContent(); + $processor = new Processor(new $parser(new CommonSyntax()), $handlers); + $processor = $processor->withEventContainer($this->events); + + return $processor->process($content); + } + + return null; + } + + public function processRawContent(PageInterface $page, Data $config) + { + return $this->processContent($page, $config, $this->raw_handlers); + } + + /** + * Allow the processing of shortcodes directly on a string + * For example when used by Twig directly + * + * @param $str + * @param null $handlers + * @return string + */ + public function processShortcodes($str, $handlers = null) + { + $parser = $this->getParser($this->config->get('parser')); + + if (!$handlers) { + $handlers = $this->handlers; + } + + $processor = new Processor(new $parser(new CommonSyntax()), $handlers); + + return $processor->process($str); + } + + public function processShortcodesRaw($str) + { + return $this->processShortcodes($str, $this->raw_handlers); + } + + /** + * set a state of a particular item with a hash for retrieval later + * + * @param string $hash a unique hash code + * @param object $item some item to store + */ + public function setStates($hash, $item) + { + $this->states[$hash][] = $item; + } + + /** + * returns the shortcode of a specific hash + * + * @param string $hash unique id of state + * @return ShortcodeInterface shortcode stored for this hash + */ + public function getStates($hash) + { + if (array_key_exists($hash, $this->states)) { + return $this->states[$hash]; + } + + return null; + } + + /** + * helper method to create a unique shortcode based on the content + * + * @param ShortcodeInterface $shortcode + * @return string + */ + public function getId(ShortcodeInterface $shortcode) + { + return substr(md5($shortcode->getShortcodeText()), -10); + } + + /** + * Sets the current page context + * + * @param PageInterface $page + */ + public function setPage(PageInterface $page) + { + $this->page = $page; + } + + /** gets the current page context if set */ + public function getPage() + { + return $this->page; + } + + /** + * Get the appropriate parser object + * + * @param $parser + * @return string + */ + protected function getParser($parser) + { + switch($parser) + { + case 'regular': + $parser = RegularParser::class; + break; + case 'wordpress': + $parser = WordpressParser::class; + break; + default: + $parser = RegexParser::class; + break; + } + + return $parser; + } +} diff --git a/plugins/shortcode-core/classes/plugin/ShortcodeObject.php b/plugins/shortcode-core/classes/plugin/ShortcodeObject.php new file mode 100644 index 0000000..751205b --- /dev/null +++ b/plugins/shortcode-core/classes/plugin/ShortcodeObject.php @@ -0,0 +1,33 @@ +obj_name = $name; + $this->obj_object = $object; + } + + public function __toString() + { + return $this->obj_object; + } + + public function name() + { + return $this->obj_name; + } + + public function object() + { + return $this->obj_object; + } +} + +// Make sure we also autoload the deprecated class. +class_exists(\Grav\Plugin\Shortcodes\ShortcodeObject::class); diff --git a/plugins/shortcode-core/classes/plugin/ShortcodeTwigVar.php b/plugins/shortcode-core/classes/plugin/ShortcodeTwigVar.php new file mode 100644 index 0000000..2113c07 --- /dev/null +++ b/plugins/shortcode-core/classes/plugin/ShortcodeTwigVar.php @@ -0,0 +1,27 @@ +getObjects(); + + if ($objects) { + return $objects[$name] ?? []; + } + + $page_meta = Grav::instance()['page']->getContentMeta('shortcodeMeta'); + if (isset($page_meta['shortcode'])) { + $objects = (array) $page_meta['shortcode']; + return $objects[$name] ?? []; + } + + return []; + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/AlignShortcode.php b/plugins/shortcode-core/classes/shortcodes/AlignShortcode.php new file mode 100644 index 0000000..c551d4c --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/AlignShortcode.php @@ -0,0 +1,26 @@ +shortcode->getHandlers()->add('center', static function(ShortcodeInterface $sc) { + return '
' . $sc->getContent() . '
'; + }); + + $this->shortcode->getHandlers()->add('left', static function(ShortcodeInterface $sc) { + return '
' . $sc->getContent() . '
'; + }); + + $this->shortcode->getHandlers()->add('right', static function(ShortcodeInterface $sc) { + return '
' . $sc->getContent() . '
'; + }); + + $this->shortcode->getHandlers()->add('justify', static function(ShortcodeInterface $sc) { + return '
' . $sc->getContent() . '
'; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/ColorShortcode.php b/plugins/shortcode-core/classes/shortcodes/ColorShortcode.php new file mode 100644 index 0000000..b97de60 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/ColorShortcode.php @@ -0,0 +1,16 @@ +shortcode->getHandlers()->add('color', function(ShortcodeInterface $sc) { + $color = $sc->getParameter('color', $this->getBbCode($sc)); + + return '' . $sc->getContent() . ''; + }); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/ColumnsShortcode.php b/plugins/shortcode-core/classes/shortcodes/ColumnsShortcode.php new file mode 100644 index 0000000..b9c9145 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/ColumnsShortcode.php @@ -0,0 +1,27 @@ +shortcode->getHandlers()->add('columns', static function(ShortcodeInterface $sc) { + $column_count = (int)$sc->getParameter('count', 2); + $column_width = $sc->getParameter('width', 'auto'); + $column_gap = $sc->getParameter('gap', 'normal'); + $column_rule = $sc->getParameter('rule', false); + + $css_style = 'columns:' . $column_count . ' ' . $column_width . ';-moz-columns:' . $column_count . ' ' . $column_width . ';'; + $css_style .= 'column-gap:' . $column_gap . ';-moz-column-gap:' . $column_gap . ';'; + + if ($column_rule) { + $css_style .= 'column-rule:' . $column_rule . ';-moz-column-rule:' . $column_rule . ';'; + } + + return '
' . $sc->getContent() . '
'; + }); + + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/DetailsShortcode.php b/plugins/shortcode-core/classes/shortcodes/DetailsShortcode.php new file mode 100644 index 0000000..1c75e4d --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/DetailsShortcode.php @@ -0,0 +1,26 @@ +shortcode->getHandlers()->add('details', function(ShortcodeInterface $sc) { + // Get summary/title + $summary = $sc->getParameter('summary', $this->getBbCode($sc)); + $summaryHTML = $summary ? '' . $summary . '' : ''; + + // Get classes for details + $class = $sc->getParameter('class', $this->getBbCode($sc)); + $classHTML = (isset($class) and $class !== $summary) ? 'class="' . $class . '"' : ''; + + // Get content + $content = $sc->getContent(); + + // Return the details/summary block + return '
' . $summaryHTML . $content . '
'; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/DivShortcode.php b/plugins/shortcode-core/classes/shortcodes/DivShortcode.php new file mode 100644 index 0000000..0ca5beb --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/DivShortcode.php @@ -0,0 +1,22 @@ +shortcode->getHandlers()->add('div', static function(ShortcodeInterface $sc) { + $id = $sc->getParameter('id'); + $class = $sc->getParameter('class'); + $style = $sc->getParameter('style'); + + $id_output = $id ? ' id="' . $id . '" ': ''; + $class_output = $class ? ' class="' . $class . '"' : ''; + $style_output = $style ? ' style="' . $style . '"' : ''; + + return '
' . $sc->getContent() . '
'; + }); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/FigureShortcode.php b/plugins/shortcode-core/classes/shortcodes/FigureShortcode.php new file mode 100644 index 0000000..386ac19 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/FigureShortcode.php @@ -0,0 +1,27 @@ +shortcode->getHandlers()->add('figure', function(ShortcodeInterface $sc) { + $id = $sc->getParameter('id'); + $class = $sc->getParameter('class'); + $caption = $sc->getParameter('caption'); + $page = $this->grav['page']; + + // Process any markdown on caption + $caption = Utils::processMarkdown($caption, false, $page); + + $id_output = $id ? 'id="' . $id . '" ': ''; + $class_output = $class ? 'class="' . $class . '"' : ''; + $caption_output = $caption ? '
' . $caption . '
' : ''; + + return '
'.$sc->getContent(). $caption_output . '
'; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/FontAwesomeShortcode.php b/plugins/shortcode-core/classes/shortcodes/FontAwesomeShortcode.php new file mode 100644 index 0000000..075f3fb --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/FontAwesomeShortcode.php @@ -0,0 +1,53 @@ +shortcode->getHandlers()->add('fa', function(ShortcodeInterface $sc) { + // Load assets if required + if ($this->config->get('plugins.shortcode-core.fontawesome.load', false)) { + $this->shortcode->addAssets('css', $this->config->get('plugins.shortcode-core.fontawesome.url')); + } + if ($this->config->get('plugins.shortcode-core.fontawesome.v5', false)) { + $v5classes = ['fab', 'fal', 'fas', 'far', 'fad']; + } else { + $v5classes = []; + } + + // Get shortcode content and parameters + $str = $sc->getContent(); + $icon = $sc->getParameter('icon', $sc->getParameter('fa', $this->getBbCode($sc))); + + if (!Utils::startsWith($icon, 'fa-')) { + $icon = 'fa-'.$icon; + } + + if ($icon) { + $fa_class = 'fa'; + $extras = explode(',', $sc->getParameter('extras', '')); + + foreach($extras as $extra) { + if(!empty($extra)) { + if(in_array($extra, $v5classes, true)) { + $fa_class = $extra; + continue; + } + if(!Utils::startsWith($extra, 'fa-')) { + $extra = 'fa-' . $extra; + } + $icon .= ' ' . $extra; + } + } + + return '' . $str . ''; + } + + return ''; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/HShortcode.php b/plugins/shortcode-core/classes/shortcodes/HShortcode.php new file mode 100644 index 0000000..318dbe3 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/HShortcode.php @@ -0,0 +1,48 @@ +shortcode->getHandlers()->add('h1', function(ShortcodeInterface $sc) { + return $this->header(1, $sc); + }); + + $this->shortcode->getHandlers()->add('h2', function(ShortcodeInterface $sc) { + return $this->header(2, $sc); + }); + + $this->shortcode->getHandlers()->add('h3', function(ShortcodeInterface $sc) { + return $this->header(3, $sc); + }); + + $this->shortcode->getHandlers()->add('h4', function(ShortcodeInterface $sc) { + return $this->header(4, $sc); + }); + + $this->shortcode->getHandlers()->add('h5', function(ShortcodeInterface $sc) { + return $this->header(5, $sc); + }); + + $this->shortcode->getHandlers()->add('h6', function(ShortcodeInterface $sc) { + return $this->header(6, $sc); + }); + + + } + + protected function header($level, ShortcodeInterface $sc) + { + $id = $sc->getParameter('id'); + $class = $sc->getParameter('class'); + $tag = 'h' . $level; + + $id_output = $id ? ' id="' . $id . '" ': ''; + $class_output = $class ? ' class="' . $class . '"' : ''; + + return "<{$tag}{$id_output}{$class_output}>{$sc->getContent()}"; + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/LanguageShortcode.php b/plugins/shortcode-core/classes/shortcodes/LanguageShortcode.php new file mode 100644 index 0000000..673b1fa --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/LanguageShortcode.php @@ -0,0 +1,31 @@ +shortcode->getHandlers()->add('lang', function(ShortcodeInterface $sc) { + $lang = $this->getBbCode($sc); + + if ($lang) { + $list = explode(',', $lang); + array_walk($list, 'trim'); + + /** @var Language $language */ + $language = $this->grav['language']; + $current = $language->getLanguage(); + + if (in_array($current, $list)) { + return $sc->getContent(); + } + } + + return ''; + }); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/LoremShortcode.php b/plugins/shortcode-core/classes/shortcodes/LoremShortcode.php new file mode 100644 index 0000000..998415d --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/LoremShortcode.php @@ -0,0 +1,360 @@ + + * @copyright Copyright 2014, 2015, 2016, 2017, 2018, 2019 Josh Sherman + * @license http://www.opensource.org/licenses/mit-license.html + * @link https://github.com/joshtronic/php-loremipsum + */ + +namespace Grav\Plugin\Shortcodes; + +use Thunder\Shortcode\Shortcode\ShortcodeInterface; + +class LoremShortcode extends Shortcode +{ + /** + * First + * + * Whether or not we should be starting the string with "Lorem ipsum..." + * + * @access private + * @var boolean + */ + private $first = true; + /** + * Words + * + * A lorem ipsum vocabulary of sorts. Not a complete list as I'm unsure if + * a complete list exists and if so, where to get it. + * + * @access private + * @var array + */ + public $words = [ + // Lorem ipsum... + 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', + // and the rest of the vocabulary + 'a', 'ac', 'accumsan', 'ad', 'aenean', 'aliquam', 'aliquet', 'ante', + 'aptent', 'arcu', 'at', 'auctor', 'augue', 'bibendum', 'blandit', + 'class', 'commodo', 'condimentum', 'congue', 'consequat', 'conubia', + 'convallis', 'cras', 'cubilia', 'curabitur', 'curae', 'cursus', + 'dapibus', 'diam', 'dictum', 'dictumst', 'dignissim', 'dis', 'donec', + 'dui', 'duis', 'efficitur', 'egestas', 'eget', 'eleifend', 'elementum', + 'enim', 'erat', 'eros', 'est', 'et', 'etiam', 'eu', 'euismod', 'ex', + 'facilisi', 'facilisis', 'fames', 'faucibus', 'felis', 'fermentum', + 'feugiat', 'finibus', 'fringilla', 'fusce', 'gravida', 'habitant', + 'habitasse', 'hac', 'hendrerit', 'himenaeos', 'iaculis', 'id', + 'imperdiet', 'in', 'inceptos', 'integer', 'interdum', 'justo', + 'lacinia', 'lacus', 'laoreet', 'lectus', 'leo', 'libero', 'ligula', + 'litora', 'lobortis', 'luctus', 'maecenas', 'magna', 'magnis', + 'malesuada', 'massa', 'mattis', 'mauris', 'maximus', 'metus', 'mi', + 'molestie', 'mollis', 'montes', 'morbi', 'mus', 'nam', 'nascetur', + 'natoque', 'nec', 'neque', 'netus', 'nibh', 'nisi', 'nisl', 'non', + 'nostra', 'nulla', 'nullam', 'nunc', 'odio', 'orci', 'ornare', + 'parturient', 'pellentesque', 'penatibus', 'per', 'pharetra', + 'phasellus', 'placerat', 'platea', 'porta', 'porttitor', 'posuere', + 'potenti', 'praesent', 'pretium', 'primis', 'proin', 'pulvinar', + 'purus', 'quam', 'quis', 'quisque', 'rhoncus', 'ridiculus', 'risus', + 'rutrum', 'sagittis', 'sapien', 'scelerisque', 'sed', 'sem', 'semper', + 'senectus', 'sociosqu', 'sodales', 'sollicitudin', 'suscipit', + 'suspendisse', 'taciti', 'tellus', 'tempor', 'tempus', 'tincidunt', + 'torquent', 'tortor', 'tristique', 'turpis', 'ullamcorper', 'ultrices', + 'ultricies', 'urna', 'ut', 'varius', 'vehicula', 'vel', 'velit', + 'venenatis', 'vestibulum', 'vitae', 'vivamus', 'viverra', 'volutpat', + 'vulputate', + ]; + + public function init() + { + $this->shortcode->getHandlers()->add('lorem', function(ShortcodeInterface $sc) { + $paragraphs = $sc->getParameter('p', $this->getBbCode($sc)); + $paragraph_tag = $sc->getParameter('tag', 'p'); + $sentences = $sc->getParameter('s'); + $words = $sc->getParameter('w'); + + if ($words) { + return $this->words($words); + } + if ($sentences) { + return $this->sentences($sentences); + } + + return $this->paragraphs($paragraphs ?? 1, $paragraph_tag); + }); + } + + /** + * Word + * + * Generates a single word of lorem ipsum. + * + * @access public + * @param mixed $tags string or array of HTML tags to wrap output with + * @return string generated lorem ipsum word + */ + public function word($tags = false) + { + return $this->words(1, $tags); + } + /** + * Words Array + * + * Generates an array of lorem ipsum words. + * + * @access public + * @param integer $count how many words to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @return array generated lorem ipsum words + */ + public function wordsArray($count = 1, $tags = false) + { + return $this->words($count, $tags, true); + } + /** + * Words + * + * Generates words of lorem ipsum. + * + * @access public + * @param integer $count how many words to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @return mixed string or array of generated lorem ipsum words + */ + public function words($count = 1, $tags = false, $array = false) + { + $words = []; + $word_count = 0; + // Shuffles and appends the word list to compensate for count + // arguments that exceed the size of our vocabulary list + while ($word_count < $count) { + $shuffle = true; + while ($shuffle) { + $this->shuffle(); + // Checks that the last word of the list and the first word of + // the list that's about to be appended are not the same + if (!$word_count || $words[$word_count - 1] != $this->words[0]) { + $words = array_merge($words, $this->words); + $word_count = count($words); + $shuffle = false; + } + } + } + $words = array_slice($words, 0, $count); + + return $this->output($words, $tags, $array); + } + /** + * Sentence + * + * Generates a full sentence of lorem ipsum. + * + * @access public + * @param mixed $tags string or array of HTML tags to wrap output with + * @return string generated lorem ipsum sentence + */ + public function sentence($tags = false) + { + return $this->sentences(1, $tags); + } + /** + * Sentences Array + * + * Generates an array of lorem ipsum sentences. + * + * @access public + * @param integer $count how many sentences to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @return array generated lorem ipsum sentences + */ + public function sentencesArray($count = 1, $tags = false) + { + return $this->sentences($count, $tags, true); + } + /** + * Sentences + * + * Generates sentences of lorem ipsum. + * + * @access public + * @param integer $count how many sentences to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @return mixed string or array of generated lorem ipsum sentences + */ + public function sentences($count = 1, $tags = false, $array = false) + { + $sentences = []; + for ($i = 0; $i < $count; $i++) { + $sentences[] = $this->wordsArray($this->gauss(24.46, 5.08)); + } + $this->punctuate($sentences); + + return $this->output($sentences, $tags, $array); + } + /** + * Paragraph + * + * Generates a full paragraph of lorem ipsum. + * + * @access public + * @param mixed $tags string or array of HTML tags to wrap output with + * @return string generated lorem ipsum paragraph + */ + public function paragraph($tags = false) + { + return $this->paragraphs(1, $tags); + } + /** + * Paragraph Array + * + * Generates an array of lorem ipsum paragraphs. + * + * @access public + * @param integer $count how many paragraphs to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @return array generated lorem ipsum paragraphs + */ + public function paragraphsArray($count = 1, $tags = false) + { + return $this->paragraphs($count, $tags, true); + } + /** + * Paragraphss + * + * Generates paragraphs of lorem ipsum. + * + * @access public + * @param integer $count how many paragraphs to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @return mixed string or array of generated lorem ipsum paragraphs + */ + public function paragraphs($count = 1, $tags = false, $array = false) + { + $paragraphs = []; + for ($i = 0; $i < $count; $i++) { + $paragraphs[] = $this->sentences($this->gauss(5.8, 1.93)); + } + + return $this->output($paragraphs, $tags, $array, "\n\n"); + } + /** + * Gaussian Distribution + * + * This is some smart kid stuff. I went ahead and combined the N(0,1) logic + * with the N(m,s) logic into this single function. Used to calculate the + * number of words in a sentence, the number of sentences in a paragraph + * and the distribution of commas in a sentence. + * + * @access private + * @param double $mean average value + * @param double $std_dev stadnard deviation + * @return double calculated distribution + */ + private function gauss($mean, $std_dev) + { + $x = mt_rand() / mt_getrandmax(); + $y = mt_rand() / mt_getrandmax(); + $z = sqrt(-2 * log($x)) * cos(2 * pi() * $y); + + return $z * $std_dev + $mean; + } + /** + * Shuffle + * + * Shuffles the words, forcing "Lorem ipsum..." at the beginning if it is + * the first time we are generating the text. + * + * @access private + */ + private function shuffle() + { + if ($this->first) { + $this->first = array_slice($this->words, 0, 8); + $this->words = array_slice($this->words, 8); + shuffle($this->words); + $this->words = $this->first + $this->words; + $this->first = false; + } else { + shuffle($this->words); + } + } + /** + * Punctuate + * + * Applies punctuation to a sentence. This includes a period at the end, + * the injection of commas as well as capitalizing the first letter of the + * first word of the sentence. + * + * @access private + * @param array $sentences the sentences we would like to punctuate + */ + private function punctuate(&$sentences) + { + foreach ($sentences as $key => $sentence) { + $words = count($sentence); + // Only worry about commas on sentences longer than 4 words + if ($words > 4) { + $mean = log($words, 6); + $std_dev = $mean / 6; + $commas = round($this->gauss($mean, $std_dev)); + for ($i = 1; $i <= $commas; $i++) { + $word = round($i * $words / ($commas + 1)); + if ($word < ($words - 1) && $word > 0) { + $sentence[$word] .= ','; + } + } + } + $sentences[$key] = ucfirst(implode(' ', $sentence) . '.'); + } + } + /** + * Output + * + * Does the rest of the processing of the strings. This includes wrapping + * the strings in HTML tags, handling transformations with the ability of + * back referencing and determining if the passed array should be converted + * into a string or not. + * + * @access private + * @param string|string[] $strings an array of generated strings + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @param string $delimiter the string to use when calling implode() + * @return string|string[] string or array of generated lorem ipsum text + */ + private function output($strings, $tags, $array, $delimiter = ' ') + { + if ($tags) { + if (!is_array($tags)) { + $tags = [$tags]; + } else { + // Flips the array so we can work from the inside out + $tags = array_reverse($tags); + } + foreach ($strings as $key => $string) { + foreach ($tags as $tag) { + // Detects / applies back reference + if ($tag[0] === '<') { + $string = str_replace('$1', $string, $tag); + } else { + $string = sprintf('<%1$s>%2$s', $tag, $string); + } + $strings[$key] = $string; + } + } + } + if (!$array) { + $strings = implode($delimiter, $strings); + } + + return $strings; + } + +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/MarkShortcode.php b/plugins/shortcode-core/classes/shortcodes/MarkShortcode.php new file mode 100644 index 0000000..68c6cff --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/MarkShortcode.php @@ -0,0 +1,27 @@ +shortcode->getHandlers()->add('mark', function(ShortcodeInterface $sc) { + $style = $sc->getParameter('style', $this->getBbCode($sc)); + $class = $sc->getParameter('class', 'default'); + + $css_class = 'class="mark-class-' . $class . '"'; + + if ($style === 'block') { + $css_style = 'style="display:block;"'; + $content = trim($sc->getContent(), "\n"); + } else { + $css_style = ''; + $content = $sc->getContent(); + } + + return "{$content}"; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/NoticeShortcode.php b/plugins/shortcode-core/classes/shortcodes/NoticeShortcode.php new file mode 100644 index 0000000..72ac208 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/NoticeShortcode.php @@ -0,0 +1,24 @@ +shortcode->getHandlers()->add('notice', function(ShortcodeInterface $sc) { + $css_enabled = $this->grav['config']->get('plugins.shortcode-core.css.notice_enabled', true); + if ($css_enabled) { + $this->shortcode->addAssets('css', 'plugin://shortcode-core/css/shortcode-notice.css'); + } + + $output = $this->twig->processTemplate('shortcodes/notice.html.twig', [ + 'type' => $sc->getParameter('notice', $this->getBbCode($sc)) ?: 'info', + 'content' => $sc->getContent(), + ]); + + return $output; + }); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/RawShortcode.php b/plugins/shortcode-core/classes/shortcodes/RawShortcode.php new file mode 100644 index 0000000..703cc7f --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/RawShortcode.php @@ -0,0 +1,18 @@ +shortcode->getHandlers()->add('raw', static function(ShortcodeInterface $sc) { + return trim($sc->getContent()); + }); + + $this->shortcode->getEvents()->addListener(Events::FILTER_SHORTCODES, new FilterRawEventHandler(['raw'])); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/SafeEmailShortcode.php b/plugins/shortcode-core/classes/shortcodes/SafeEmailShortcode.php new file mode 100644 index 0000000..42443f3 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/SafeEmailShortcode.php @@ -0,0 +1,51 @@ +shortcode->getHandlers()->add('safe-email', function(ShortcodeInterface $sc) { + // Load assets if required + if ($this->config->get('plugins.shortcode-core.fontawesome.load', false)) { + $this->shortcode->addAssets('css', $this->config->get('plugins.shortcode-core.fontawesome.url')); + } + + // Get shortcode content and parameters + $str = $sc->getContent(); + $icon = $sc->getParameter('icon', false); + $icon_base = "fa fa-"; + $autolink = $sc->getParameter('autolink', false); + + // Encode email + $email = ''; + $str_len = strlen($str); + for ($i = 0; $i < $str_len; $i++) { + $email .= '&#' . ord($str[$i]). ';'; + } + + // Handle autolinking + if ($autolink) { + $output = '' . $email . ''; + } else { + $output = $email; + } + + // Handle icon option + if ($icon) { + if ($this->config->get('plugins.shortcode-core.fontawesome.v5', false)) { + if (preg_match("/^(?Pfa[srlbd]) fa-(?.+)/", $icon, $icon_parts)) { + $icon_base = $icon_parts["weight"] . " fa-"; + $icon = $icon_parts["icon"]; + } + } + + $output = ' ' . $output; + } + + return $output; + }); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/SectionShortcode.php b/plugins/shortcode-core/classes/shortcodes/SectionShortcode.php new file mode 100644 index 0000000..f3f8cb3 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/SectionShortcode.php @@ -0,0 +1,17 @@ +shortcode->getHandlers()->add('section', function(ShortcodeInterface $sc) { + $name = $sc->getParameter('name'); + $object = new \Grav\Plugin\ShortcodeCore\ShortcodeObject($name, $sc->getContent()); + $this->shortcode->addObject($sc->getName(), $object); + }); + + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/classes/shortcodes/Shortcode.php b/plugins/shortcode-core/classes/shortcodes/Shortcode.php new file mode 100644 index 0000000..a3c9e30 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/Shortcode.php @@ -0,0 +1,91 @@ +grav = Grav::instance(); + $this->shortcode = $this->grav['shortcode']; + $this->config = $this->grav['config']; + $this->twig = $this->grav['twig']; + } + + /** + * Initialize shortcode handler + */ + public function init() + { + user_error(__METHOD__ . '() method will be abstract in the future, please override it!', E_USER_DEPRECATED); + + // FIXME: This code had to be put back because of some plugins do not properly initialize themselves. + $this->shortcode->getHandlers()->add('u', static function(ShortcodeInterface $shortcode) { + return $shortcode->getContent(); + }); + } + + /** + * Returns the name of the class if required + * + * @return string the name of the class + */ + public function getName() + { + return get_class($this); + } + + /** + * @return string + */ + public function getParser() + { + return $this->config->get('plugins.shortcode-core.parser'); + } + + /** + * @param ShortcodeInterface $sc + * @param string|null $default + * @return string|null + */ + public function getBbCode(ShortcodeInterface $sc, $default = null) + { + $code = $default; + + if ($this->getParser() === 'wordpress') { + $params = $sc->getParameters(); + if (is_array($params)) { + $keys = array_keys($params); + $code = trim(array_shift($keys), '='); + } + } else { + $code = $sc->getBbCode(); + } + + return $code; + } +} + +// Make sure we also autoload the deprecated class. +class_exists(\Grav\Plugin\ShortcodeCore\Shortcode::class); diff --git a/plugins/shortcode-core/classes/shortcodes/ShortcodeObject.php b/plugins/shortcode-core/classes/shortcodes/ShortcodeObject.php new file mode 100644 index 0000000..781b333 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/ShortcodeObject.php @@ -0,0 +1,24 @@ +shortcode->getHandlers()->add('size', function(ShortcodeInterface $sc) { + $size = $sc->getParameter('size', $this->getBbCode($sc)); + if (is_numeric($size)) { + $size .= 'px'; + } + + return '' . $sc->getContent() . ''; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/SpanShortcode.php b/plugins/shortcode-core/classes/shortcodes/SpanShortcode.php new file mode 100644 index 0000000..2945a4b --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/SpanShortcode.php @@ -0,0 +1,22 @@ +shortcode->getHandlers()->add('span', static function(ShortcodeInterface $sc) { + $id = $sc->getParameter('id'); + $class = $sc->getParameter('class'); + $style = $sc->getParameter('style'); + + $id_output = $id ? 'id="' . $id . '" ': ''; + $class_output = $class ? 'class="' . $class . '"' : ''; + $style_output = $style ? 'style="' . $style . '"' : ''; + + return '' . $sc->getContent() . ''; + }); + } +} diff --git a/plugins/shortcode-core/classes/shortcodes/UnderlineShortcode.php b/plugins/shortcode-core/classes/shortcodes/UnderlineShortcode.php new file mode 100644 index 0000000..6b9a502 --- /dev/null +++ b/plugins/shortcode-core/classes/shortcodes/UnderlineShortcode.php @@ -0,0 +1,14 @@ +shortcode->getHandlers()->add('u', static function(ShortcodeInterface $sc) { + return '' . $sc->getContent() . ''; + }); + } +} \ No newline at end of file diff --git a/plugins/shortcode-core/cli/ShortcodesCommand.php b/plugins/shortcode-core/cli/ShortcodesCommand.php new file mode 100644 index 0000000..b5627cf --- /dev/null +++ b/plugins/shortcode-core/cli/ShortcodesCommand.php @@ -0,0 +1,55 @@ +setName('display') + ->setDescription('Display a list the available shortcodes that are registered'); + } + + /** + * @return int|null|void + */ + protected function serve() + { + $io = new SymfonyStyle($this->input, $this->output); + $this->initializePlugins(); + $this->initializeThemes(); + + $shortcodes = Grav::instance()['shortcode']; + + $io->title('Available Shortcodes'); + $io->section('Regular Handlers:'); + foreach ($shortcodes->getHandlers()->getNames() as $name) { + $io->writeln($name); + } + $io->section('Raw Handlers:'); + foreach ($shortcodes->getRawHandlers()->getNames() as $name) { + $io->writeln($name); + } + + $io->newLine(); + + } +} diff --git a/plugins/shortcode-core/composer.json b/plugins/shortcode-core/composer.json new file mode 100644 index 0000000..e99cfe5 --- /dev/null +++ b/plugins/shortcode-core/composer.json @@ -0,0 +1,32 @@ +{ + "name": "getgrav/shortcode-core", + "type": "grav-plugin", + "description": "Shortcode Core plugin for Grav CMS", + "keywords": ["shortcode"], + "homepage": "https://github.com/getgrav/grav-plugin-shortcode-core/", + "license": "MIT", + "authors": [ + { + "name": "Team Grav", + "email": "devs@getgrav.org", + "homepage": "http://getgrav.org", + "role": "Developer" + } + ], + "require": { + "php": ">=7.1.3", + "thunderer/shortcode": "~0.7" + }, + "autoload": { + "psr-4": { + "Grav\\Plugin\\ShortcodeCore\\": "classes/plugin", + "Grav\\Plugin\\Shortcodes\\": "classes/shortcodes" + }, + "classmap": ["shortcode-core.php"] + }, + "config": { + "platform": { + "php": "7.1.3" + } + } +} diff --git a/plugins/shortcode-core/composer.lock b/plugins/shortcode-core/composer.lock new file mode 100644 index 0000000..40ab44d --- /dev/null +++ b/plugins/shortcode-core/composer.lock @@ -0,0 +1,80 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "95ac1934b2d5e35cff7d71f6744b2666", + "packages": [ + { + "name": "thunderer/shortcode", + "version": "v0.7.5", + "source": { + "type": "git", + "url": "https://github.com/thunderer/Shortcode.git", + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/a4fee30613bd46efb421f8305aff0466a3268a99", + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "suggest": { + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer", + "symfony/yaml": "if you want to use YAML serializer" + }, + "type": "library", + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": [ + "bbcode", + "engine", + "library", + "parser", + "shortcode" + ], + "support": { + "issues": "https://github.com/thunderer/Shortcode/issues", + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" + }, + "time": "2022-01-13T18:53:33+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.1.3" + }, + "platform-dev": [], + "platform-overrides": { + "php": "7.1.3" + }, + "plugin-api-version": "2.3.0" +} diff --git a/plugins/shortcode-core/css/shortcode-notice.css b/plugins/shortcode-core/css/shortcode-notice.css new file mode 100644 index 0000000..0308ad6 --- /dev/null +++ b/plugins/shortcode-core/css/shortcode-notice.css @@ -0,0 +1,64 @@ +.sc-notice { + margin: 30px 0; + position: relative; +} + +.sc-notice > div { + padding: 5px 20px; + display: block; + margin-top: 0rem; + margin-bottom: 0rem; + color: #666; +} + +.sc-notice > div:before { + position: absolute; + top: 2px; + color: #fff; + font-family: FontAwesome; + content: ''; + left: 10px; +} + +.sc-notice > div:first-child:after { + position: absolute; + top: 2px; + color: #fff; + left: 30px; +} + +.sc-notice.info > div:first-child { + border-top: 30px solid #F0B37E; + background: #FFF2DB; +} + +.sc-notice.info > div:first-child:after { + content: 'Info'; +} + +.sc-notice.warning > div:first-child { + border-top: 30px solid #DF6F6C; + background: #FAE2E2; +} + +.sc-notice.warning > div:first-child:after { + content: 'Warning'; +} + +.sc-notice.note > div:first-child { + border-top: 30px solid #6AB0DE; + background: #E7F2FA; +} + +.sc-notice.note > div:first-child:after { + content: 'Note'; +} + +.sc-notice.tip > div:first-child { + border-top: 30px solid #77C577; + background: #E6F9E6; +} + +.sc-notice.tip > div:first-child:after { + content: 'Tip'; +} diff --git a/plugins/shortcode-core/nextgen-editor/.browserslistrc b/plugins/shortcode-core/nextgen-editor/.browserslistrc new file mode 100644 index 0000000..d6471a3 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/.browserslistrc @@ -0,0 +1,2 @@ +> 1% +last 2 versions diff --git a/plugins/shortcode-core/nextgen-editor/.editorconfig b/plugins/shortcode-core/nextgen-editor/.editorconfig new file mode 100644 index 0000000..c24743d --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/.editorconfig @@ -0,0 +1,7 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 100 diff --git a/plugins/shortcode-core/nextgen-editor/.env b/plugins/shortcode-core/nextgen-editor/.env new file mode 100644 index 0000000..a26840b --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/.env @@ -0,0 +1,2 @@ +DEV_HOST=localhost +DEV_PORT=2001 diff --git a/plugins/shortcode-core/nextgen-editor/.eslintrc.js b/plugins/shortcode-core/nextgen-editor/.eslintrc.js new file mode 100644 index 0000000..f2ff6f2 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/.eslintrc.js @@ -0,0 +1,27 @@ +module.exports = { + root: true, + env: { + node: true, + }, + extends: [ + 'plugin:vue/recommended', + '@vue/airbnb', + ], + parserOptions: { + parser: 'babel-eslint', + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'import/extensions': 'off', + 'import/no-unresolved': 'off', + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + 'no-restricted-syntax': ['off', 'ForOfStatement'], + 'no-param-reassign': ['error', { props: false }], + 'class-methods-use-this': 'off', + 'object-curly-newline': 'off', + 'no-nested-ternary': 'off', + 'no-await-in-loop': 'off', + 'max-len': 'off', + }, +}; diff --git a/plugins/shortcode-core/nextgen-editor/.gitignore b/plugins/shortcode-core/nextgen-editor/.gitignore new file mode 100644 index 0000000..c2b66ff --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/.gitignore @@ -0,0 +1,20 @@ +.DS_Store +node_modules + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/plugins/shortcode-core/nextgen-editor/README.md b/plugins/shortcode-core/nextgen-editor/README.md new file mode 100644 index 0000000..ca93c93 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/README.md @@ -0,0 +1,24 @@ +# app + +## Project setup +``` +yarn install +``` + +### Compiles and hot-reloads for development +``` +yarn serve +``` + +### Compiles and minifies for production +``` +yarn build +``` + +### Lints and fixes files +``` +yarn lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/plugins/shortcode-core/nextgen-editor/babel.config.js b/plugins/shortcode-core/nextgen-editor/babel.config.js new file mode 100644 index 0000000..757ff9b --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset', + ], +}; diff --git a/plugins/shortcode-core/nextgen-editor/dist/css/app.css b/plugins/shortcode-core/nextgen-editor/dist/css/app.css new file mode 100644 index 0000000..59e6ae7 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/dist/css/app.css @@ -0,0 +1 @@ +shortcode-block{background:#fff;border:1px solid #ccc;display:block;margin:16px 0}#admin-main .ck.ck-editor__editable_inline>:first-child{margin-top:16px}#admin-main .ck.ck-editor__editable_inline>:last-child{margin-bottom:16px}#admin-main .ck-editor shortcode-block.ck-shortcode-child:hover{outline-color:#1f89e5}#admin-main .ck-editor shortcode-block>.sc-add>p,#admin-main .ck-editor shortcode-block>.sc-header>.sc-settings>p,#admin-main .ck-editor shortcode-block>.sc-header>.sc-title>p,#admin-main .ck-editor shortcode-block>.sc-header>.sc-titlebar>p,#admin-main .ck-editor shortcode-block>.sc-move>p{margin:0}shortcode-block>.sc-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ccc;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:14px;line-height:1.5;padding:8px 8px}shortcode-block>.sc-header>.sc-title>p>.sc-value{font-weight:700}shortcode-block>.sc-header>.sc-titlebar{margin-left:24px}shortcode-block>.sc-header>.sc-settings{color:#ffc83d;cursor:pointer;font-size:0;line-height:0;margin-left:auto;opacity:0;-webkit-transition:opacity .2s ease,color .2s ease;transition:opacity .2s ease,color .2s ease}shortcode-block.ck-shortcode-child>.sc-header>.sc-settings,shortcode-block.ck-widget_selected>.sc-header>.sc-settings,shortcode-block>.sc-header>.sc-settings:hover{color:#1f89e5}shortcode-block.ck-shortcode-child>.sc-header>.sc-settings:hover,shortcode-block.ck-widget_selected>.sc-header>.sc-settings:hover{opacity:.5}shortcode-block.ck-widget_selected>.sc-header>.sc-settings,shortcode-block:hover>.sc-header>.sc-settings{opacity:1}shortcode-block>.sc-header>.sc-settings>p>svg{height:24px;width:24px}shortcode-block-editable,shortcode-block-readonly{display:block;padding:0 8px}shortcode-block-readonly>[data-cke-filler]{display:none}#admin-main .ck-editor shortcode-block-editable>:first-child{margin-top:14px}#admin-main .ck-editor shortcode-block.ck-shortcode-child .ck-widget__type-around__button_after,#admin-main .ck-editor shortcode-block.ck-shortcode-child .ck-widget__type-around__button_before{display:none}shortcode-block>.sc-add-child{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:16px 0;opacity:0;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}shortcode-block>.sc-add-child.sc-visible{display:-webkit-box;display:-ms-flexbox;display:flex}shortcode-block.ck-widget_selected>.sc-add-child,shortcode-block:hover>.sc-add-child{opacity:1;z-index:1}shortcode-block>.sc-add-child>p{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#ffc83d;border-radius:50%;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;height:24px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:0!important;-webkit-transition:opacity .2s ease,background .2s ease;transition:opacity .2s ease,background .2s ease;width:24px}shortcode-block.ck-widget_selected>.sc-add-child>p,shortcode-block>.sc-add-child>p:hover{background:#1f89e5}shortcode-block.ck-widget_selected>.sc-add-child>p:hover{opacity:.5}shortcode-block>.sc-add-child>p>svg{color:#fff;height:20px;width:20px}shortcode-block>.sc-add,shortcode-block>.sc-add-child>p>svg{-webkit-transition:opacity .2s ease;transition:opacity .2s ease}shortcode-block>.sc-add{left:30px;opacity:0;position:absolute;top:-12px}shortcode-block>.sc-add-after{bottom:-11px;left:auto;right:30px;top:auto}shortcode-block:hover>.sc-add{opacity:1;z-index:1}shortcode-block>.sc-add>p{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1f89e5;border-radius:50%;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;height:20px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:20px}shortcode-block>.sc-add>p>svg{color:#fff;height:16px;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;width:16px}shortcode-block>.sc-add:hover>p>svg{opacity:.5}shortcode-block>.sc-move{background:#1f89e5;border-radius:50%;cursor:pointer;height:20px;opacity:0;position:absolute;right:-12px;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;width:20px;top:46px}shortcode-block>.sc-move-up{-webkit-transform:rotate(180deg);transform:rotate(180deg)}shortcode-block:first-child>.sc-move-up,shortcode-block:last-child>.sc-move-down{display:none}shortcode-block>.sc-move-down{bottom:4px;left:auto;top:auto}shortcode-block:hover>.sc-move{opacity:1;z-index:1}shortcode-block>.sc-move>p>svg{color:#fff;height:20px;left:1.5px;position:absolute;top:2px;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;width:20px}shortcode-block>.sc-move:hover>p>svg{opacity:.5}shortcode-inline{background:#fff;border:1px solid #ccc;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-left:2px;margin-right:1px;vertical-align:middle}shortcode-inline-editable,shortcode-inline-readonly{display:inline;padding:1px 4px 2px}shortcode-inline>.sc-content,shortcode-inline>.sc-settings{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}shortcode-inline>.sc-settings{border-left:1px solid #ccc;cursor:pointer;font-size:0;line-height:0;padding:0 2px;-webkit-transition:opacity .2s ease,color .2s ease;transition:opacity .2s ease,color .2s ease}shortcode-inline:hover>.sc-settings{color:#ffc83d}shortcode-inline.ck-widget_selected>.sc-settings,shortcode-inline>.sc-settings:hover{color:#1f89e5}shortcode-inline.ck-widget_selected>.sc-settings:hover{opacity:.5}shortcode-inline>.sc-settings>svg{height:16px;width:16px} \ No newline at end of file diff --git a/plugins/shortcode-core/nextgen-editor/dist/js/app.js b/plugins/shortcode-core/nextgen-editor/dist/js/app.js new file mode 100644 index 0000000..58b7b31 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/dist/js/app.js @@ -0,0 +1,2 @@ +(function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s=0)})({0:function(t,e,n){t.exports=n("56d7")},"00ee":function(t,e,n){var r=n("b622"),o=r("toStringTag"),i={};i[o]="z",t.exports="[object z]"===String(i)},"0366":function(t,e,n){var r=n("1c0b");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"0538":function(t,e,n){"use strict";var r=n("1c0b"),o=n("861d"),i=[].slice,c={},a=function(t,e,n){if(!(e in c)){for(var r=[],o=0;o1||"".split(/.?/).length?function(t,n){var r=String(c(this)),i=void 0===n?v:n>>>0;if(0===i)return[];if(void 0===t)return[r];if(!o(t))return e.call(r,t,i);var a,u,s,l=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,b=new RegExp(t.source,d+"g");while(a=f.call(b,r)){if(u=b.lastIndex,u>h&&(l.push(r.slice(h,a.index)),a.length>1&&a.index=i))break;b.lastIndex===a.index&&b.lastIndex++}return h===r.length?!s&&b.test("")||l.push(""):l.push(r.slice(h)),l.length>i?l.slice(0,i):l}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var o=c(this),i=void 0==e?void 0:e[t];return void 0!==i?i.call(e,o,n):r.call(String(o),e,n)},function(t,o){var c=n(r,t,this,o,r!==e);if(c.done)return c.value;var f=i(t),d=String(this),p=a(f,RegExp),g=f.unicode,m=(f.ignoreCase?"i":"")+(f.multiline?"m":"")+(f.unicode?"u":"")+(b?"y":"g"),y=new p(b?f:"^(?:"+f.source+")",m),w=void 0===o?v:o>>>0;if(0===w)return[];if(0===d.length)return null===l(y,d)?[d]:[];var x=0,S=0,E=[];while(S1?arguments[1]:void 0)}})},"14c3":function(t,e,n){var r=n("c6b6"),o=n("9263");t.exports=function(t,e){var n=t.exec;if("function"===typeof n){var i=n.call(t,e);if("object"!==typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},"159b":function(t,e,n){var r=n("da84"),o=n("fdbc"),i=n("17c2"),c=n("9112");for(var a in o){var u=r[a],s=u&&u.prototype;if(s&&s.forEach!==i)try{c(s,"forEach",i)}catch(l){s.forEach=i}}},"17c2":function(t,e,n){"use strict";var r=n("b727").forEach,o=n("a640"),i=n("ae40"),c=o("forEach"),a=i("forEach");t.exports=c&&a?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},"19aa":function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},"1be4":function(t,e,n){var r=n("d066");t.exports=r("document","documentElement")},"1c0b":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(t,e,n){var r=n("b622"),o=r("iterator"),i=!1;try{var c=0,a={next:function(){return{done:!!c++}},return:function(){i=!0}};a[o]=function(){return this},Array.from(a,(function(){throw 2}))}catch(u){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var r={};r[o]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(u){}return n}},"1cdc":function(t,e,n){var r=n("342f");t.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},"1d80":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},"1dde":function(t,e,n){var r=n("d039"),o=n("b622"),i=n("2d00"),c=o("species");t.exports=function(t){return i>=51||!r((function(){var e=[],n=e.constructor={};return n[c]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},2236:function(t,e,n){var r=n("5a43");function o(t){if(Array.isArray(t))return r(t)}t.exports=o},2266:function(t,e,n){var r=n("825a"),o=n("e95a"),i=n("50c4"),c=n("0366"),a=n("35a1"),u=n("9bdd"),s=function(t,e){this.stopped=t,this.result=e},l=t.exports=function(t,e,n,l,f){var d,p,h,v,b,g,m,y=c(e,n,l?2:1);if(f)d=t;else{if(p=a(t),"function"!=typeof p)throw TypeError("Target is not iterable");if(o(p)){for(h=0,v=i(t.length);v>h;h++)if(b=l?y(r(m=t[h])[0],m[1]):y(t[h]),b&&b instanceof s)return b;return new s(!1)}d=p.call(t)}g=d.next;while(!(m=g.call(d)).done)if(b=u(d,y,m.value,l),"object"==typeof b&&b&&b instanceof s)return b;return new s(!1)};l.stop=function(t){return new s(!0,t)}},"23cb":function(t,e,n){var r=n("a691"),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},"23e7":function(t,e,n){var r=n("da84"),o=n("06cf").f,i=n("9112"),c=n("6eeb"),a=n("ce4e"),u=n("e893"),s=n("94ca");t.exports=function(t,e){var n,l,f,d,p,h,v=t.target,b=t.global,g=t.stat;if(l=b?r:g?r[v]||a(v,{}):(r[v]||{}).prototype,l)for(f in e){if(p=e[f],t.noTargetGet?(h=o(l,f),d=h&&h.value):d=l[f],n=s(b?f:v+(g?".":"#")+f,t.forced),!n&&void 0!==d){if(typeof p===typeof d)continue;u(p,d)}(t.sham||d&&d.sham)&&i(p,"sham",!0),c(l,f,p,t)}}},"241c":function(t,e,n){var r=n("ca84"),o=n("7839"),i=o.concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},2532:function(t,e,n){"use strict";var r=n("23e7"),o=n("5a34"),i=n("1d80"),c=n("ab13");r({target:"String",proto:!0,forced:!c("includes")},{includes:function(t){return!!~String(i(this)).indexOf(o(t),arguments.length>1?arguments[1]:void 0)}})},"25f0":function(t,e,n){"use strict";var r=n("6eeb"),o=n("825a"),i=n("d039"),c=n("ad6d"),a="toString",u=RegExp.prototype,s=u[a],l=i((function(){return"/a/b"!=s.call({source:"a",flags:"b"})})),f=s.name!=a;(l||f)&&r(RegExp.prototype,a,(function(){var t=o(this),e=String(t.source),n=t.flags,r=String(void 0===n&&t instanceof RegExp&&!("flags"in u)?c.call(t):n);return"/"+e+"/"+r}),{unsafe:!0})},2626:function(t,e,n){"use strict";var r=n("d066"),o=n("9bf2"),i=n("b622"),c=n("83ab"),a=i("species");t.exports=function(t){var e=r(t),n=o.f;c&&e&&!e[a]&&n(e,a,{configurable:!0,get:function(){return this}})}},"2c40":function(t,e,n){n("4de4"),n("4160"),n("b0c0"),n("159b");var r=n("448a");window.nextgenEditor.addPlugin("GravShortcodeCoreRemove",{init:function(){var t=this,e=this.editor.commands.get("delete"),n=this.editor.commands.get("forwardDelete"),o=function(e){var n=t.editor.model.document.selection.getSelectedElement();if(n&&"shortcode-block"===n.name){var r=n.getAttribute("name"),o=window.nextgenEditor.shortcodes[r];if(o.parent){var i=t.editor.editing.mapper.toViewElement(n),c=t.editor.editing.view.domConverter.mapViewToDom(i),a=c.closest('shortcode-block[name="'.concat(o.parent.name,'"]'));e.childShortcodeDeleted=!0,e.modelShortcodeBlockReadOnly=n.parent,e.domParentShortcode=a}}},i=function(e){if(e.childShortcodeDeleted){var n=e.domParentShortcode,o=e.modelShortcodeBlockReadOnly,i=r(o.getChildren()),c=i.filter((function(t){return"shortcode-block"===t.name})),a=i.filter((function(t){return"shortcode-block"!==t.name}));setTimeout((function(){t.editor.model.change((function(t){a.forEach((function(e){"paragraph"===e.name&&0===e.childCount&&t.remove(e)}))}))})),c.length||n.querySelector("shortcode-block > .sc-add-child").classList.add("sc-visible")}};e.on("execute",o,{priority:"highest"}),n.on("execute",o,{priority:"highest"}),e.on("execute",i,{priority:"lowest"}),n.on("execute",i,{priority:"lowest"})}})},"2ca0":function(t,e,n){"use strict";var r=n("23e7"),o=n("06cf").f,i=n("50c4"),c=n("5a34"),a=n("1d80"),u=n("ab13"),s=n("c430"),l="".startsWith,f=Math.min,d=u("startsWith"),p=!s&&!d&&!!function(){var t=o(String.prototype,"startsWith");return t&&!t.writable}();r({target:"String",proto:!0,forced:!p&&!d},{startsWith:function(t){var e=String(a(this));c(t);var n=i(f(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return l?l.call(e,r,n):e.slice(n,n+r.length)===r}})},"2cbb":function(t,e,n){n("99af"),n("4de4"),n("4160"),n("caad"),n("c975"),n("a15b"),n("d81d"),n("fb6a"),n("b0c0"),n("b64b"),n("d3b7"),n("07ac"),n("4d63"),n("ac1f"),n("25f0"),n("2532"),n("5319"),n("498a"),n("159b"),window.nextgenEditor.addHook("hookMarkdowntoHTML",{weight:-50,handler:function(t,e){var n=e,r=Object.values(window.nextgenEditor.shortcodes).map((function(t){return t.realName})).filter((function(t,e,n){return n.indexOf(t)===e})),o=r.map((function(t){return"(\\[".concat(t,"[^\\]]*\\])")})).join("|");r.forEach((function(t){var e="\\[".concat(t,"(?(=| +).+?(?=/]))?\\/\\]");n=n.replace(new RegExp(e,"g"),(function(){for(var e=arguments.length,n=new Array(e),r=0;r0)c=0,Object.values(window.nextgenEditor.shortcodes).forEach((function(t){var e="(? *)\\[".concat(t.realName,"(?(=| +)[^\\]]*)?\\](?(((?!(").concat(o,"|(\\[\\/").concat(t.realName,"\\]))).)|\\n)*)\\[\\/").concat(t.realName,"\\](? *)");n=n.replace(new RegExp(e,"g"),(function(){for(var e=arguments.length,n=new Array(e),r=0;r0)c=0,Object.keys(i).forEach((function(t){if(n.includes(t)){c+=1;var e=i[t],r=e.shortcode,o=e.matches,a=o.pop(),u=a.spaces_before.replace(/ /g," "),s=a.spaces_after.replace(/ /g," ");if("block"===r.type){var l=a.content.trim();a.spaces_before.length&&(l=l.replace(new RegExp("^( ){".concat(a.spaces_before.length,"}"),"gm"),""));var f="\n\n[".concat(r.name).concat(a.attributes||"","]\n\n").concat(l,"\n\n[/").concat(r.name,"]\n\n");n=n.replace(new RegExp("(\\n)?(\\n)?".concat(t,"(\\n)?(\\n)?")),f)}"inline"===r.type&&(n=n.replace(t,"".concat(u,"[").concat(r.name).concat(a.attributes||"","]").concat(a.content,"[/").concat(r.name,"]").concat(s)))}}));return n=n.replace(/^\n\n/,"").replace(/\n\n$/,""),n}})},"2cf4":function(t,e,n){var r,o,i,c=n("da84"),a=n("d039"),u=n("c6b6"),s=n("0366"),l=n("1be4"),f=n("cc12"),d=n("1cdc"),p=c.location,h=c.setImmediate,v=c.clearImmediate,b=c.process,g=c.MessageChannel,m=c.Dispatch,y=0,w={},x="onreadystatechange",S=function(t){if(w.hasOwnProperty(t)){var e=w[t];delete w[t],e()}},E=function(t){return function(){S(t)}},O=function(t){S(t.data)},k=function(t){c.postMessage(t+"",p.protocol+"//"+p.host)};h&&v||(h=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return w[++y]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},r(y),y},v=function(t){delete w[t]},"process"==u(b)?r=function(t){b.nextTick(E(t))}:m&&m.now?r=function(t){m.now(E(t))}:g&&!d?(o=new g,i=o.port2,o.port1.onmessage=O,r=s(i.postMessage,i,1)):!c.addEventListener||"function"!=typeof postMessage||c.importScripts||a(k)||"file:"===p.protocol?r=x in f("script")?function(t){l.appendChild(f("script"))[x]=function(){l.removeChild(this),S(t)}}:function(t){setTimeout(E(t),0)}:(r=k,c.addEventListener("message",O,!1))),t.exports={set:h,clear:v}},"2d00":function(t,e,n){var r,o,i=n("da84"),c=n("342f"),a=i.process,u=a&&a.versions,s=u&&u.v8;s?(r=s.split("."),o=r[0]+r[1]):c&&(r=c.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=c.match(/Chrome\/(\d+)/),r&&(o=r[1]))),t.exports=o&&+o},3410:function(t,e,n){var r=n("23e7"),o=n("d039"),i=n("7b0b"),c=n("e163"),a=n("e177"),u=o((function(){c(1)}));r({target:"Object",stat:!0,forced:u,sham:!a},{getPrototypeOf:function(t){return c(i(t))}})},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},"35a1":function(t,e,n){var r=n("f5df"),o=n("3f8c"),i=n("b622"),c=i("iterator");t.exports=function(t){if(void 0!=t)return t[c]||t["@@iterator"]||o[r(t)]}},"37e8":function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("825a"),c=n("df75");t.exports=r?Object.defineProperties:function(t,e){i(t);var n,r=c(e),a=r.length,u=0;while(a>u)o.f(t,n=r[u++],e[n]);return t}},"3bbe":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},"3ca3":function(t,e,n){"use strict";var r=n("6547").charAt,o=n("69f3"),i=n("7dd0"),c="String Iterator",a=o.set,u=o.getterFor(c);i(String,"String",(function(t){a(this,{type:c,string:String(t),index:0})}),(function(){var t,e=u(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=r(n,o),e.index+=t.length,{value:t,done:!1})}))},"3f8c":function(t,e){t.exports={}},4160:function(t,e,n){"use strict";var r=n("23e7"),o=n("17c2");r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},"428f":function(t,e,n){var r=n("da84");t.exports=r},"448a":function(t,e,n){var r=n("2236"),o=n("11b0"),i=n("6613"),c=n("0676");function a(t){return r(t)||o(t)||i(t)||c()}t.exports=a},"44ad":function(t,e,n){var r=n("d039"),o=n("c6b6"),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},"44d2":function(t,e,n){var r=n("b622"),o=n("7c73"),i=n("9bf2"),c=r("unscopables"),a=Array.prototype;void 0==a[c]&&i.f(a,c,{configurable:!0,value:o(null)}),t.exports=function(t){a[c][t]=!0}},"44de":function(t,e,n){var r=n("da84");t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},"44e7":function(t,e,n){var r=n("861d"),o=n("c6b6"),i=n("b622"),c=i("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[c])?!!e:"RegExp"==o(t))}},"45fc":function(t,e,n){"use strict";var r=n("23e7"),o=n("b727").some,i=n("a640"),c=n("ae40"),a=i("some"),u=c("some");r({target:"Array",proto:!0,forced:!a||!u},{some:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},4840:function(t,e,n){var r=n("825a"),o=n("1c0b"),i=n("b622"),c=i("species");t.exports=function(t,e){var n,i=r(t).constructor;return void 0===i||void 0==(n=r(i)[c])?e:o(n)}},4930:function(t,e,n){var r=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},"498a":function(t,e,n){"use strict";var r=n("23e7"),o=n("58a8").trim,i=n("c8d2");r({target:"String",proto:!0,forced:i("trim")},{trim:function(){return o(this)}})},"4ae1":function(t,e,n){var r=n("23e7"),o=n("d066"),i=n("1c0b"),c=n("825a"),a=n("861d"),u=n("7c73"),s=n("0538"),l=n("d039"),f=o("Reflect","construct"),d=l((function(){function t(){}return!(f((function(){}),[],t)instanceof t)})),p=!l((function(){f((function(){}))})),h=d||p;r({target:"Reflect",stat:!0,forced:h,sham:h},{construct:function(t,e){i(t),c(e);var n=arguments.length<3?t:i(arguments[2]);if(p&&!d)return f(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(s.apply(t,r))}var o=n.prototype,l=u(a(o)?o:Object.prototype),h=Function.apply.call(t,l,e);return a(h)?h:l}})},"4d63":function(t,e,n){var r=n("83ab"),o=n("da84"),i=n("94ca"),c=n("7156"),a=n("9bf2").f,u=n("241c").f,s=n("44e7"),l=n("ad6d"),f=n("9f7f"),d=n("6eeb"),p=n("d039"),h=n("69f3").set,v=n("2626"),b=n("b622"),g=b("match"),m=o.RegExp,y=m.prototype,w=/a/g,x=/a/g,S=new m(w)!==w,E=f.UNSUPPORTED_Y,O=r&&i("RegExp",!S||E||p((function(){return x[g]=!1,m(w)!=w||m(x)==x||"/a/i"!=m(w,"i")})));if(O){var k=function(t,e){var n,r=this instanceof k,o=s(t),i=void 0===e;if(!r&&o&&t.constructor===k&&i)return t;S?o&&!i&&(t=t.source):t instanceof k&&(i&&(e=l.call(t)),t=t.source),E&&(n=!!e&&e.indexOf("y")>-1,n&&(e=e.replace(/y/g,"")));var a=c(S?new m(t,e):m(t,e),r?this:y,k);return E&&n&&h(a,{sticky:n}),a},A=function(t){t in k||a(k,t,{configurable:!0,get:function(){return m[t]},set:function(e){m[t]=e}})},j=u(m),T=0;while(j.length>T)A(j[T++]);y.constructor=k,k.prototype=y,d(o,"RegExp",k)}v("RegExp")},"4d64":function(t,e,n){var r=n("fc6a"),o=n("50c4"),i=n("23cb"),c=function(t){return function(e,n,c){var a,u=r(e),s=o(u.length),l=i(c,s);if(t&&n!=n){while(s>l)if(a=u[l++],a!=a)return!0}else for(;s>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:c(!0),indexOf:c(!1)}},"4de4":function(t,e,n){"use strict";var r=n("23e7"),o=n("b727").filter,i=n("1dde"),c=n("ae40"),a=i("filter"),u=c("filter");r({target:"Array",proto:!0,forced:!a||!u},{filter:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(t,e,n){"use strict";var r=n("0366"),o=n("7b0b"),i=n("9bdd"),c=n("e95a"),a=n("50c4"),u=n("8418"),s=n("35a1");t.exports=function(t){var e,n,l,f,d,p,h=o(t),v="function"==typeof this?this:Array,b=arguments.length,g=b>1?arguments[1]:void 0,m=void 0!==g,y=s(h),w=0;if(m&&(g=r(g,b>2?arguments[2]:void 0,2)),void 0==y||v==Array&&c(y))for(e=a(h.length),n=new v(e);e>w;w++)p=m?g(h[w],w):h[w],u(n,w,p);else for(f=y.call(h),d=f.next,n=new v;!(l=d.call(f)).done;w++)p=m?i(f,g,[l.value,w],!0):l.value,u(n,w,p);return n.length=w,n}},"4f5f":function(t,e,n){n("99af"),n("4de4"),n("4160"),n("caad"),n("c975"),n("a15b"),n("d81d"),n("fb6a"),n("b0c0"),n("b64b"),n("d3b7"),n("07ac"),n("4d63"),n("ac1f"),n("25f0"),n("2532"),n("5319"),n("1276"),n("498a"),n("159b"),window.nextgenEditor.addHook("hookHTMLtoMarkdown",{weight:50,handler:function(t,e,n){var r=n,o=Object.values(window.nextgenEditor.shortcodes).map((function(t){return t.realName})).filter((function(t,e,n){return n.indexOf(t)===e})),i=o.map((function(t){return"(\\[".concat(t,"[^\\]]*\\])")})).join("|"),c={},a=1;while(a>0)a=0,Object.values(window.nextgenEditor.shortcodes).forEach((function(t){var e="(?\\[".concat(t.realName,"[^\\]]*\\])(?(((?!(").concat(i,"|(\\[\\/").concat(t.realName,"\\]))).)|\\n)*)(?\\[\\/").concat(t.realName,"\\])");r=r.replace(new RegExp(e,"g"),(function(){for(var e=arguments.length,n=new Array(e),r=0;r0)a=0,Object.keys(c).forEach((function(t){if(r.includes(t)){a+=1;var e=c[t],n=e.shortcode,o=e.matches,i=o.pop();if("block"===n.type){var u=i.content.replace(/^\n/,"").replace(/\n$/,"");n.child&&(u=u.trim().split("\n").filter((function(t){return!!t})).join("\n"),u="\n".concat(u,"\n")),n.parent&&(u="\n".concat(u,"\n")),r=r.replace(t,"".concat(i.opening).concat(u).concat(i.closing))}"inline"===n.type&&(r=r.replace(t,o[0]))}}));return r}})},"50c4":function(t,e,n){var r=n("a691"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5135:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},5319:function(t,e,n){"use strict";var r=n("d784"),o=n("825a"),i=n("7b0b"),c=n("50c4"),a=n("a691"),u=n("1d80"),s=n("8aa5"),l=n("14c3"),f=Math.max,d=Math.min,p=Math.floor,h=/\$([$&'`]|\d\d?|<[^>]*>)/g,v=/\$([$&'`]|\d\d?)/g,b=function(t){return void 0===t?t:String(t)};r("replace",2,(function(t,e,n,r){var g=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=r.REPLACE_KEEPS_$0,y=g?"$":"$0";return[function(n,r){var o=u(this),i=void 0==n?void 0:n[t];return void 0!==i?i.call(n,o,r):e.call(String(o),n,r)},function(t,r){if(!g&&m||"string"===typeof r&&-1===r.indexOf(y)){var i=n(e,t,this,r);if(i.done)return i.value}var u=o(t),p=String(this),h="function"===typeof r;h||(r=String(r));var v=u.global;if(v){var x=u.unicode;u.lastIndex=0}var S=[];while(1){var E=l(u,p);if(null===E)break;if(S.push(E),!v)break;var O=String(E[0]);""===O&&(u.lastIndex=s(p,c(u.lastIndex),x))}for(var k="",A=0,j=0;j=A&&(k+=p.slice(A,P)+N,A=P+T.length)}return k+p.slice(A)}];function w(t,n,r,o,c,a){var u=r+t.length,s=o.length,l=v;return void 0!==c&&(c=i(c),l=h),e.call(a,l,(function(e,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,r);case"'":return n.slice(u);case"<":a=c[i.slice(1,-1)];break;default:var l=+i;if(0===l)return e;if(l>s){var f=p(l/10);return 0===f?e:f<=s?void 0===o[f-1]?i.charAt(1):o[f-1]+i.charAt(1):e}a=o[l-1]}return void 0===a?"":a}))}}))},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:r?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56d7":function(t,e,n){"use strict";n.r(e);n("e260"),n("e6cf"),n("cca6"),n("a79d"),n("99af"),n("4de4"),n("4160"),n("13d5"),n("b0c0"),n("b64b"),n("07ac"),n("159b");function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n((((?!(<\/figure>)).)|\n)*)<\/figure>/gm,"$1");var n=(new DOMParser).parseFromString(e,"text/html");u(n.querySelectorAll("shortcode-block, shortcode-inline")).forEach((function(t){t.setAttribute("sc-rendered",!1)}));var r=n.querySelector("shortcode-block[sc-rendered], shortcode-inline[sc-rendered]");while(r){var o=r.getAttribute("name"),i=window.nextgenEditor.shortcodes[o];r.removeAttribute("class"),r.removeAttribute("sc-rendered");var c=r.querySelector("shortcode-".concat(i.type,"-editable, shortcode-").concat(i.type,"-readonly"));r.innerHTML=c&&c.innerHTML||"",r=n.querySelector("shortcode-block[sc-rendered], shortcode-inline[sc-rendered]")}return e=n.body.innerHTML,e}n("caad"),n("45fc"),n("2532");function x(t,e){var n=(new DOMParser).parseFromString(t,"text/html");u(n.querySelectorAll("shortcode-block, shortcode-inline")).forEach((function(t){t.setAttribute("sc-rendered",!1)}));var r=n.querySelector("shortcode-block[sc-rendered], shortcode-inline[sc-rendered]"),o=function(){var t=r.getAttribute("name"),o=window.nextgenEditor.shortcodes[t],i=JSON.parse(decodeURIComponent(r.getAttribute("attributes")));r.classList.add("ck-shortcode"),r.classList.add("ck-shortcode-".concat(o.type)),r.removeAttribute("sc-rendered");var c={shortcode:o,attributes:i,innerHTML:r.innerHTML,parentAttributes:null,childAttributes:null},a="";if("block"===o.type){if(o.parent){r.classList.add("ck-shortcode-child");var s=r.closest('shortcode-block[name="'.concat(o.parent.name,'"]'));c.parentAttributes=e&&e.parentAttributes?e.parentAttributes:s?JSON.parse(decodeURIComponent(s.getAttribute("attributes"))):{}}if(o.child){c.childAttributes=[],r.classList.add("ck-shortcode-parent");var l=u(r.querySelectorAll('shortcode-block shortcode-block[name="'.concat(o.child.name,'"]'))),f=u(r.querySelectorAll('shortcode-block shortcode-block shortcode-block[name="'.concat(o.child.name,'"]')));l.filter((function(t){return!f.includes(t)})).forEach((function(t){var e=JSON.parse(decodeURIComponent(t.getAttribute("attributes")));c.childAttributes.push(e)}))}if(a+='
',a+='
Shortcode - '.concat(o.title,"
"),a+='
'.concat(o.titlebar(c),"
"),a+='
',a+='',a+='',a+="",a+="
",a+="
",a+='
',a+=o.content(c).replace("{{content_editable}}","".concat(r.innerHTML,"")).replace("{{content_readonly}}","".concat(r.innerHTML,"")),a+="
",o.child){var d=r.innerHTML?"":" sc-visible";a+='
'),a+='',a+='',a+="",a+="
"}o.parent&&(["before","after"].forEach((function(t){a+='
'),a+='',a+='',a+="",a+="
"})),["up","down"].forEach((function(t){a+='
'),a+='',a+='',a+="",a+="
"})))}"inline"===o.type&&(a+='',a+=o.content(c).replace("{{content_editable}}","".concat(r.innerHTML,"")).replace("{{content_readonly}}","".concat(r.innerHTML,"")),a+="",a+='',a+='',a+='',a+="",a+=""),r.innerHTML=a,r=n.querySelector("shortcode-block[sc-rendered], shortcode-inline[sc-rendered]")};while(r)o();return n.body.innerHTML}document.addEventListener("click",(function(t){var e=t.target,n=["sc-settings","sc-move","sc-add","sc-add-child"],r={element:null,className:null},o=n.some((function(t){var n=e.classList.contains(t);return n?(r.element=e,r.className=t,!0):(n=e.closest(".".concat(t)),!!n&&(r.element=n,r.className=t,!0))}));if(o)switch(r.className){case"sc-move":window.scBlockMoveChild.call(r.element,t,r.element.classList.contains("sc-move-up")?"up":"down");break;case"sc-add":window.scBlockAddChild.call(r.element,t,r.element.classList.contains("sc-add-before")?"before":"after");break;case"sc-add-child":window.scBlockAddChildFromParent.call(r.element,t);break;case"sc-settings":default:window.scDisplaySettings.call(r.element,t)}}));var S=window.nextgenEditor.classes.core.command.class;window.nextgenEditor.addPlugin("GravShortcodeCoreCommand",{init:function(){var t=this;Object.values(window.nextgenEditor.shortcodes).forEach((function(e){var n="shortcode_".concat(e.name),r=function(t){p(r,t);var n=y(r);function r(){return s(this,r),n.apply(this,arguments)}return f(r,[{key:"execute",value:function(t){var n=this;this.editor.model.change((function(r){var o="",i={},c=!e.child&&!e.parent&&(void 0===e.wrapOnInsert||e.wrapOnInsert),a=u(n.editor.model.document.selection.getSelectedBlocks()),s=u(n.editor.model.document.selection.getFirstRange().getItems({shallow:!0})),l=a[0],f=s.filter((function(t){return t.parent===l})),d=Object.keys(e.attributes).reduce((function(t,n){return t[n]=e.attributes[n].default.value,t}),{});if(o+="'),c){if("block"===e.type){var p=r.createDocumentFragment();a.forEach((function(t){return r.append(r.cloneElement(t),p)}));var h=n.editor.data.toView(p),v=n.editor.data.processor.toData(h);o+=w(v)}if("inline"===e.type){var b=r.createDocumentFragment();f.forEach((function(t){var e=t.textNode?r.createText(t.data):r.cloneElement(t);r.append(e,b)}));var g=n.editor.data.toView(b),m=n.editor.data.processor.toData(g);o+=w(m)}}e.parent&&(o+="

 

"),o+=""),e.parent&&t&&t.modelParentShortcode&&(i.parentAttributes=JSON.parse(decodeURIComponent(t.modelParentShortcode.getAttribute("attributes")))),o=x(o,i);var y="inline"===e.type?"$block":"$root",S=n.editor.data.processor.toView(o).getChild(0),E=n.editor.data.toModel(S,y).getChild(0),O=r.createPositionAt(n.editor.model.document.getRoot(),0);if(t&&t.insertPosition)O=t.insertPosition;else{if("block"===e.type){var k=a[0],A=a[a.length-1];c?(O=r.createPositionBefore(k),r.remove(r.createRange(r.createPositionBefore(k),r.createPositionAfter(A)))):(O=r.createPositionAfter(A),A&&"paragraph"===A.name&&0===A.childCount&&(O=r.createPositionBefore(A),r.remove(A)))}if("inline"===e.type){var j=f.length?f[0]:null,T=f.length?f[f.length-1]:null;c?(O=j?r.createPositionBefore(j):n.editor.model.document.selection.getFirstPosition(),j&&r.remove(r.createRange(r.createPositionBefore(j),r.createPositionAfter(T)))):O=T?r.createPositionAfter(T):n.editor.model.document.selection.getFirstPosition()}}r.insert(E,O),r.setSelection(E,"on")}))}}]),r}(S);t.editor.commands.add(n,new r(t.editor))}))}});n("e978"),n("c975"),n("a15b");var E=window.nextgenEditor.exports.showSettingsPopup;function O(t){var e=window.nextgenEditor.editors,n=(e.filter((function(e){return e.ui.view.element.contains(t)}))||[]).shift(),r=t.getAttribute("name"),o=window.nextgenEditor.shortcodes[r],i=window.nextgenEditor.shortcodePlugins[o.plugin];if(n){var c=n.editing.view.domConverter.mapDomToView(t),a=n.editing.mapper.toModelElement(c),s=JSON.parse(decodeURIComponent(t.getAttribute("attributes"))),l="block"===o.type?t.querySelector(".sc-header > .sc-settings"):t,f=[].concat([i&&i.title||"",o.parent&&o.parent.title||"",o.title||""]).filter((function(t){return!!t})).join(" / "),d={title:f,domDisplayPoint:l,debounceDelay:1e3,attributes:o.attributes,currentAttributes:s,parentAttributes:null,childAttributes:null};if(o.parent){var p=t.closest('shortcode-block[name="'.concat(o.parent.name,'"]'));d.parentAttributes=p?JSON.parse(decodeURIComponent(p.getAttribute("attributes"))):{}}if(o.child){d.childAttributes=[];var h=u(t.querySelectorAll('shortcode-block shortcode-block[name="'.concat(o.child.name,'"]'))),v=u(t.querySelectorAll('shortcode-block shortcode-block shortcode-block[name="'.concat(o.child.name,'"]')));h.filter((function(t){return!v.includes(t)})).forEach((function(t){var e=JSON.parse(decodeURIComponent(t.getAttribute("attributes")));d.childAttributes.push(e)}))}d.deleteItem=function(){return n.execute("delete")},d.changeAttributes=function(){n.model.change((function(t){t.setAttribute("attributes",encodeURIComponent(JSON.stringify(s)),a);var e="inline"===o.type?"$block":"$root";if(o.parent){var r=n.editing.mapper.toViewElement(a),i=n.editing.view.domConverter.mapViewToDom(r);if(!i)return;var c=i.parentNode.closest("shortcode-block"),l=n.editing.view.domConverter.mapDomToView(c),f=n.editing.mapper.toModelElement(l),d=u(c.querySelectorAll("shortcode-block shortcode-block")),p=u(c.querySelectorAll("shortcode-block shortcode-block shortcode-block")),h=d.filter((function(t){return!p.includes(t)})).indexOf(i),v=t.createPositionBefore(f),b=t.cloneElement(f),g=t.createDocumentFragment();t.append(b,g);var m=n.data.toView(g).getChild(0),y=n.data.processor.toData(m),S=x(w(y)),E=n.data.processor.toView(S).getChild(0),O=n.data.toModel(E,e).getChild(0);return t.remove(f),t.insert(O,v),void setTimeout((function(){var t=n.editing.mapper.toViewElement(O),e=n.editing.view.domConverter.mapViewToDom(t),r=u(e.querySelectorAll("shortcode-block shortcode-block")),o=u(e.querySelectorAll("shortcode-block shortcode-block shortcode-block")),i=r.filter((function(t){return!o.includes(t)}))[h],c=n.editing.view.domConverter.mapDomToView(i),s=n.editing.mapper.toModelElement(c);n.model.change((function(t){t.setSelection(s,"on"),a=s}))}))}var k=t.createPositionBefore(a),A=t.cloneElement(a),j=t.createDocumentFragment();t.append(A,j);var T=n.data.toView(j).getChild(0),P=n.data.processor.toData(T),C=x(w(P)),M=n.data.processor.toView(C).getChild(0),I=n.data.toModel(M,e).getChild(0);t.remove(a),t.insert(I,k),t.setSelection(I,"on"),a=I}))},E(d)}}window.scDisplaySettings=function(){var t=this.closest("shortcode-block, shortcode-inline");t&&O(t)},window.scBlockAddChildFromParent=function(){var t=window.nextgenEditor.editors,e=this.parentNode,n=(t.filter((function(t){return t.ui.view.element.contains(e)}))||[]).shift(),r=e.getAttribute("name"),o=window.nextgenEditor.shortcodes[r];if(n){var i=n.editing.view.domConverter.mapDomToView(e),c=n.editing.mapper.toModelElement(i),a=e.querySelector("shortcode-block-readonly"),u=n.editing.view.domConverter.mapDomToView(a),s=n.editing.mapper.toModelElement(u);n.model.change((function(t){var r=t.createPositionAt(s,0);n.execute("shortcode_".concat(o.child.name),{insertPosition:r,modelParentShortcode:c}),e.querySelector(".sc-add-child").classList.remove("sc-visible")}))}},window.scBlockAddChild=function(t,e){var n=window.nextgenEditor.editors,r=this.parentNode,o=(n.filter((function(t){return t.ui.view.element.contains(r)}))||[]).shift(),i=r.getAttribute("name"),c=window.nextgenEditor.shortcodes[i];if(o){var a=o.editing.view.domConverter.mapDomToView(r),u=o.editing.mapper.toModelElement(a);o.model.change((function(t){var n=u.parent,r=t.createPositionAt(u,e);while(n&&"shortcode-block"!==n.name)n=n.parent;n&&o.execute("shortcode_".concat(c.name),{insertPosition:r,modelParentShortcode:n})}))}},window.scBlockMoveChild=function(t,e){var n=window.nextgenEditor.editors,r=this.parentNode,o=(n.filter((function(t){return t.ui.view.element.contains(r)}))||[]).shift();if(o){var i=o.editing.view.domConverter.mapDomToView(r),c=o.editing.mapper.toModelElement(i),a="up"===e?r.previousSibling:r.nextSibling,u=o.editing.view.domConverter.mapDomToView(a),s=o.editing.mapper.toModelElement(u);o.model.change((function(t){t.move(t.createRangeOn(c),s,"up"===e?"before":"after")}))}};n("d99e"),n("2cbb"),n("4f5f"),n("2c40"),n("d81d"),n("a9e3"),n("4d63"),n("2ca0");window.nextgenEditor.addHook("hookMarkdowntoHTML",{weight:50,handler:function(t,e){var n=e,r=1,o=Object.keys(window.nextgenEditor.shortcodes).map((function(t){return"(\\[".concat(t,"[^\\]]*\\])")})).join("|");while(r>0)r=0,Object.values(window.nextgenEditor.shortcodes).forEach((function(t){var e="(?

)?\\[".concat(t.name,"(?(=| +)[^\\]]*)?\\](<\\/p>)?(?(((?!(").concat(o,"|(\\[\\/").concat(t.name,"\\]))).)|\\n)*)\\[\\/").concat(t.name,"\\](?<\\/p>)?");n=n.replace(new RegExp(e,"g"),(function(){r+=1;for(var e=arguments.length,n=new Array(e),o=0;o$/,""):i.content,a=Object.keys(t.attributes).reduce((function(e,n){return e||t.attributes[n].bbcode&&t.attributes[n].shorthand&&n}),""),u=Object.keys(t.attributes).reduce((function(e,n){return e||t.attributes[n].innerHTML&&n}),""),s=a&&i.attributes&&i.attributes.startsWith("=")?"".concat(a).concat(i.attributes):i.attributes||"";if(u){var l="block"===t.type?c.replace(/^

/,"").replace(/<\/p>$/,"").replace(/^ $/,""):c.replace(/^ $/,"");s=s?"".concat(s," ").concat(u,'="').concat(l,'"'):"".concat(u,'="').concat(l,'"'),c=""}var f=(new DOMParser).parseFromString("

"),"text/html").body.firstChild.attributes,d=Object.keys(t.attributes).reduce((function(e,n){var r=t.attributes[n],o=f.getNamedItem(n)?f.getNamedItem(n).value:r.default.value;return r.type===Boolean&&f.getNamedItem(n)&&(o="false"!==f.getNamedItem(n)),r.type===Number&&(o=+o),e[n]=o,e}),{}),p="",h=encodeURIComponent(JSON.stringify(d));return"block"===t.type&&(p+=''),p+=c,p+=""),"inline"===t.type&&(p+=i.p1||"",p+=''),p+=c,p+="",p+=i.p2||""),p}))}));return n=x(n),n}}),window.nextgenEditor.addHook("hookHTMLtoMarkdown",{weight:-50,handler:function(t,e,n){var r=n;r=w(r);var o=(new DOMParser).parseFromString(r,"text/html"),i=o.querySelector("shortcode-block, shortcode-inline"),c=function(){var t=i.getAttribute("name"),e=window.nextgenEditor.shortcodes[t],n=JSON.parse(decodeURIComponent(i.getAttribute("attributes"))),r=Object.keys(e.attributes).reduce((function(t,n){return t||e.attributes[n].innerHTML&&n}),""),c=Object.keys(e.attributes).reduce((function(t,r){var o=e.attributes[r];return o.type===Boolean?n[r]?"".concat(t," ").concat(r):t:n[r]!==o.default.value||o.default.preserve?o.bbcode&&o.shorthand?'="'.concat(n[r],'"').concat(t):o.innerHTML?t:"".concat(t," ").concat(r,'="').concat(n[r],'"'):t}),"");"block"===e.type&&("

 

"===i.innerHTML&&(i.innerHTML=""),r?i.outerHTML="

[".concat(e.realName).concat(c,"]").concat(n[r],"[/").concat(e.realName,"]

"):i.innerHTML?i.outerHTML="

[".concat(e.realName).concat(c,"]

").concat(i.innerHTML,"

[/").concat(e.realName,"]

"):i.outerHTML="

[".concat(e.realName).concat(c," /]

")),"inline"===e.type&&(" "===i.innerHTML&&(i.innerHTML=""),r?i.outerHTML="[".concat(e.realName).concat(c,"]").concat(n[r],"[/").concat(e.realName,"]"):i.innerHTML?i.outerHTML="[".concat(e.realName).concat(c,"]").concat(i.innerHTML,"[/").concat(e.realName,"]"):i.outerHTML="[".concat(e.realName).concat(c," /]")),i=o.querySelector("shortcode-block, shortcode-inline")};while(i)c();return r=o.body.innerHTML,r}});n("db43")},"56ef":function(t,e,n){var r=n("d066"),o=n("241c"),i=n("7418"),c=n("825a");t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(c(t)),n=i.f;return n?e.concat(n(t)):e}},5899:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},"58a8":function(t,e,n){var r=n("1d80"),o=n("5899"),i="["+o+"]",c=RegExp("^"+i+i+"*"),a=RegExp(i+i+"*$"),u=function(t){return function(e){var n=String(r(e));return 1&t&&(n=n.replace(c,"")),2&t&&(n=n.replace(a,"")),n}};t.exports={start:u(1),end:u(2),trim:u(3)}},"5a34":function(t,e,n){var r=n("44e7");t.exports=function(t){if(r(t))throw TypeError("The method doesn't accept regular expressions");return t}},"5a43":function(t,e){function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nl){var p,h=s(arguments[l++]),v=f?i(h).concat(f(h)):i(h),b=v.length,g=0;while(b>g)p=v[g++],r&&!d.call(h,p)||(n[p]=h[p])}return n}:l},6547:function(t,e,n){var r=n("a691"),o=n("1d80"),i=function(t){return function(e,n){var i,c,a=String(o(e)),u=r(n),s=a.length;return u<0||u>=s?t?"":void 0:(i=a.charCodeAt(u),i<55296||i>56319||u+1===s||(c=a.charCodeAt(u+1))<56320||c>57343?t?a.charAt(u):i:t?a.slice(u,u+2):c-56320+(i-55296<<10)+65536)}};t.exports={codeAt:i(!1),charAt:i(!0)}},"65f0":function(t,e,n){var r=n("861d"),o=n("e8b5"),i=n("b622"),c=i("species");t.exports=function(t,e){var n;return o(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!o(n.prototype)?r(n)&&(n=n[c],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},6613:function(t,e,n){n("a630"),n("fb6a"),n("b0c0"),n("d3b7"),n("25f0"),n("3ca3");var r=n("5a43");function o(t,e){if(t){if("string"===typeof t)return r(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}t.exports=o},"69f3":function(t,e,n){var r,o,i,c=n("7f9a"),a=n("da84"),u=n("861d"),s=n("9112"),l=n("5135"),f=n("f772"),d=n("d012"),p=a.WeakMap,h=function(t){return i(t)?o(t):r(t,{})},v=function(t){return function(e){var n;if(!u(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}};if(c){var b=new p,g=b.get,m=b.has,y=b.set;r=function(t,e){return y.call(b,t,e),e},o=function(t){return g.call(b,t)||{}},i=function(t){return m.call(b,t)}}else{var w=f("state");d[w]=!0,r=function(t,e){return s(t,w,e),e},o=function(t){return l(t,w)?t[w]:{}},i=function(t){return l(t,w)}}t.exports={set:r,get:o,has:i,enforce:h,getterFor:v}},"6eeb":function(t,e,n){var r=n("da84"),o=n("9112"),i=n("5135"),c=n("ce4e"),a=n("8925"),u=n("69f3"),s=u.get,l=u.enforce,f=String(String).split("String");(t.exports=function(t,e,n,a){var u=!!a&&!!a.unsafe,s=!!a&&!!a.enumerable,d=!!a&&!!a.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),l(n).source=f.join("string"==typeof e?e:"")),t!==r?(u?!d&&t[e]&&(s=!0):delete t[e],s?t[e]=n:o(t,e,n)):s?t[e]=n:c(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&s(this).source||a(this)}))},"6f53":function(t,e,n){var r=n("83ab"),o=n("df75"),i=n("fc6a"),c=n("d1e7").f,a=function(t){return function(e){var n,a=i(e),u=o(a),s=u.length,l=0,f=[];while(s>l)n=u[l++],r&&!c.call(a,n)||f.push(t?[n,a[n]]:a[n]);return f}};t.exports={entries:a(!0),values:a(!1)}},7037:function(t,e,n){function r(e){return"function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?t.exports=r=function(t){return typeof t}:t.exports=r=function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(e)}n("a4d3"),n("e01a"),n("d28b"),n("d3b7"),n("3ca3"),n("ddb0"),t.exports=r},7156:function(t,e,n){var r=n("861d"),o=n("d2bb");t.exports=function(t,e,n){var i,c;return o&&"function"==typeof(i=e.constructor)&&i!==n&&r(c=i.prototype)&&c!==n.prototype&&o(t,c),t}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},"746f":function(t,e,n){var r=n("428f"),o=n("5135"),i=n("e538"),c=n("9bf2").f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});o(e,t)||c(e,t,{value:i.f(t)})}},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(t,e,n){var r=n("1d80");t.exports=function(t){return Object(r(t))}},"7c73":function(t,e,n){var r,o=n("825a"),i=n("37e8"),c=n("7839"),a=n("d012"),u=n("1be4"),s=n("cc12"),l=n("f772"),f=">",d="<",p="prototype",h="script",v=l("IE_PROTO"),b=function(){},g=function(t){return d+h+f+t+d+"/"+h+f},m=function(t){t.write(g("")),t.close();var e=t.parentWindow.Object;return t=null,e},y=function(){var t,e=s("iframe"),n="java"+h+":";return e.style.display="none",u.appendChild(e),e.src=String(n),t=e.contentWindow.document,t.open(),t.write(g("document.F=Object")),t.close(),t.F},w=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(e){}w=r?m(r):y();var t=c.length;while(t--)delete w[p][c[t]];return w()};a[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(b[p]=o(t),n=new b,b[p]=null,n[v]=t):n=w(),void 0===e?n:i(n,e)}},"7dd0":function(t,e,n){"use strict";var r=n("23e7"),o=n("9ed3"),i=n("e163"),c=n("d2bb"),a=n("d44e"),u=n("9112"),s=n("6eeb"),l=n("b622"),f=n("c430"),d=n("3f8c"),p=n("ae93"),h=p.IteratorPrototype,v=p.BUGGY_SAFARI_ITERATORS,b=l("iterator"),g="keys",m="values",y="entries",w=function(){return this};t.exports=function(t,e,n,l,p,x,S){o(n,e,l);var E,O,k,A=function(t){if(t===p&&M)return M;if(!v&&t in P)return P[t];switch(t){case g:return function(){return new n(this,t)};case m:return function(){return new n(this,t)};case y:return function(){return new n(this,t)}}return function(){return new n(this)}},j=e+" Iterator",T=!1,P=t.prototype,C=P[b]||P["@@iterator"]||p&&P[p],M=!v&&C||A(p),I="Array"==e&&P.entries||C;if(I&&(E=i(I.call(new t)),h!==Object.prototype&&E.next&&(f||i(E)===h||(c?c(E,h):"function"!=typeof E[b]&&u(E,b,w)),a(E,j,!0,!0),f&&(d[j]=w))),p==m&&C&&C.name!==m&&(T=!0,M=function(){return C.call(this)}),f&&!S||P[b]===M||u(P,b,M),d[e]=M,p)if(O={values:A(m),keys:x?M:A(g),entries:A(y)},S)for(k in O)(v||T||!(k in P))&&s(P,k,O[k]);else r({target:e,proto:!0,forced:v||T},O);return O}},"7f9a":function(t,e,n){var r=n("da84"),o=n("8925"),i=r.WeakMap;t.exports="function"===typeof i&&/native code/.test(o(i))},"825a":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},8418:function(t,e,n){"use strict";var r=n("c04e"),o=n("9bf2"),i=n("5c6c");t.exports=function(t,e,n){var c=r(e);c in t?o.f(t,c,i(0,n)):t[c]=n}},"861d":function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},8925:function(t,e,n){var r=n("c6cd"),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(t){return o.call(t)}),t.exports=r.inspectSource},"8aa5":function(t,e,n){"use strict";var r=n("6547").charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},"90e3":function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+r).toString(36)}},9112:function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("5c6c");t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},9263:function(t,e,n){"use strict";var r=n("ad6d"),o=n("9f7f"),i=RegExp.prototype.exec,c=String.prototype.replace,a=i,u=function(){var t=/a/,e=/b*/g;return i.call(t,"a"),i.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),s=o.UNSUPPORTED_Y||o.BROKEN_CARET,l=void 0!==/()??/.exec("")[1],f=u||l||s;f&&(a=function(t){var e,n,o,a,f=this,d=s&&f.sticky,p=r.call(f),h=f.source,v=0,b=t;return d&&(p=p.replace("y",""),-1===p.indexOf("g")&&(p+="g"),b=String(t).slice(f.lastIndex),f.lastIndex>0&&(!f.multiline||f.multiline&&"\n"!==t[f.lastIndex-1])&&(h="(?: "+h+")",b=" "+b,v++),n=new RegExp("^(?:"+h+")",p)),l&&(n=new RegExp("^"+h+"$(?!\\s)",p)),u&&(e=f.lastIndex),o=i.call(d?n:f,b),d?o?(o.input=o.input.slice(v),o[0]=o[0].slice(v),o.index=f.lastIndex,f.lastIndex+=o[0].length):f.lastIndex=0:u&&o&&(f.lastIndex=f.global?o.index+o[0].length:e),l&&o&&o.length>1&&c.call(o[0],n,(function(){for(a=1;a=51||!o((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),m=f("concat"),y=function(t){if(!c(t))return!1;var e=t[h];return void 0!==e?!!e:i(t)},w=!g||!m;r({target:"Array",proto:!0,forced:w},{concat:function(t){var e,n,r,o,i,c=a(this),f=l(c,0),d=0;for(e=-1,r=arguments.length;ev)throw TypeError(b);for(n=0;n=v)throw TypeError(b);s(f,d++,i)}return f.length=d,f}})},"9bdd":function(t,e,n){var r=n("825a");t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(c){var i=t["return"];throw void 0!==i&&r(i.call(t)),c}}},"9bf2":function(t,e,n){var r=n("83ab"),o=n("0cfb"),i=n("825a"),c=n("c04e"),a=Object.defineProperty;e.f=r?a:function(t,e,n){if(i(t),e=c(e,!0),i(n),o)try{return a(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},"9ed3":function(t,e,n){"use strict";var r=n("ae93").IteratorPrototype,o=n("7c73"),i=n("5c6c"),c=n("d44e"),a=n("3f8c"),u=function(){return this};t.exports=function(t,e,n){var s=e+" Iterator";return t.prototype=o(r,{next:i(1,n)}),c(t,s,!1,!0),a[s]=u,t}},"9f7f":function(t,e,n){"use strict";var r=n("d039");function o(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=r((function(){var t=o("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=r((function(){var t=o("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},a15b:function(t,e,n){"use strict";var r=n("23e7"),o=n("44ad"),i=n("fc6a"),c=n("a640"),a=[].join,u=o!=Object,s=c("join",",");r({target:"Array",proto:!0,forced:u||!s},{join:function(t){return a.call(i(this),void 0===t?",":t)}})},a4d3:function(t,e,n){"use strict";var r=n("23e7"),o=n("da84"),i=n("d066"),c=n("c430"),a=n("83ab"),u=n("4930"),s=n("fdbf"),l=n("d039"),f=n("5135"),d=n("e8b5"),p=n("861d"),h=n("825a"),v=n("7b0b"),b=n("fc6a"),g=n("c04e"),m=n("5c6c"),y=n("7c73"),w=n("df75"),x=n("241c"),S=n("057f"),E=n("7418"),O=n("06cf"),k=n("9bf2"),A=n("d1e7"),j=n("9112"),T=n("6eeb"),P=n("5692"),C=n("f772"),M=n("d012"),I=n("90e3"),R=n("b622"),N=n("e538"),L=n("746f"),_=n("d44e"),D=n("69f3"),H=n("b727").forEach,V=C("hidden"),F="Symbol",$="prototype",B=R("toPrimitive"),U=D.set,q=D.getterFor(F),G=Object[$],W=o.Symbol,z=i("JSON","stringify"),J=O.f,Y=k.f,K=S.f,X=A.f,Q=P("symbols"),Z=P("op-symbols"),tt=P("string-to-symbol-registry"),et=P("symbol-to-string-registry"),nt=P("wks"),rt=o.QObject,ot=!rt||!rt[$]||!rt[$].findChild,it=a&&l((function(){return 7!=y(Y({},"a",{get:function(){return Y(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=J(G,e);r&&delete G[e],Y(t,e,n),r&&t!==G&&Y(G,e,r)}:Y,ct=function(t,e){var n=Q[t]=y(W[$]);return U(n,{type:F,tag:t,description:e}),a||(n.description=e),n},at=s?function(t){return"symbol"==typeof t}:function(t){return Object(t)instanceof W},ut=function(t,e,n){t===G&&ut(Z,e,n),h(t);var r=g(e,!0);return h(n),f(Q,r)?(n.enumerable?(f(t,V)&&t[V][r]&&(t[V][r]=!1),n=y(n,{enumerable:m(0,!1)})):(f(t,V)||Y(t,V,m(1,{})),t[V][r]=!0),it(t,r,n)):Y(t,r,n)},st=function(t,e){h(t);var n=b(e),r=w(n).concat(ht(n));return H(r,(function(e){a&&!ft.call(n,e)||ut(t,e,n[e])})),t},lt=function(t,e){return void 0===e?y(t):st(y(t),e)},ft=function(t){var e=g(t,!0),n=X.call(this,e);return!(this===G&&f(Q,e)&&!f(Z,e))&&(!(n||!f(this,e)||!f(Q,e)||f(this,V)&&this[V][e])||n)},dt=function(t,e){var n=b(t),r=g(e,!0);if(n!==G||!f(Q,r)||f(Z,r)){var o=J(n,r);return!o||!f(Q,r)||f(n,V)&&n[V][r]||(o.enumerable=!0),o}},pt=function(t){var e=K(b(t)),n=[];return H(e,(function(t){f(Q,t)||f(M,t)||n.push(t)})),n},ht=function(t){var e=t===G,n=K(e?Z:b(t)),r=[];return H(n,(function(t){!f(Q,t)||e&&!f(G,t)||r.push(Q[t])})),r};if(u||(W=function(){if(this instanceof W)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,e=I(t),n=function(t){this===G&&n.call(Z,t),f(this,V)&&f(this[V],e)&&(this[V][e]=!1),it(this,e,m(1,t))};return a&&ot&&it(G,e,{configurable:!0,set:n}),ct(e,t)},T(W[$],"toString",(function(){return q(this).tag})),T(W,"withoutSetter",(function(t){return ct(I(t),t)})),A.f=ft,k.f=ut,O.f=dt,x.f=S.f=pt,E.f=ht,N.f=function(t){return ct(R(t),t)},a&&(Y(W[$],"description",{configurable:!0,get:function(){return q(this).description}}),c||T(G,"propertyIsEnumerable",ft,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!u,sham:!u},{Symbol:W}),H(w(nt),(function(t){L(t)})),r({target:F,stat:!0,forced:!u},{for:function(t){var e=String(t);if(f(tt,e))return tt[e];var n=W(e);return tt[e]=n,et[n]=e,n},keyFor:function(t){if(!at(t))throw TypeError(t+" is not a symbol");if(f(et,t))return et[t]},useSetter:function(){ot=!0},useSimple:function(){ot=!1}}),r({target:"Object",stat:!0,forced:!u,sham:!a},{create:lt,defineProperty:ut,defineProperties:st,getOwnPropertyDescriptor:dt}),r({target:"Object",stat:!0,forced:!u},{getOwnPropertyNames:pt,getOwnPropertySymbols:ht}),r({target:"Object",stat:!0,forced:l((function(){E.f(1)}))},{getOwnPropertySymbols:function(t){return E.f(v(t))}}),z){var vt=!u||l((function(){var t=W();return"[null]"!=z([t])||"{}"!=z({a:t})||"{}"!=z(Object(t))}));r({target:"JSON",stat:!0,forced:vt},{stringify:function(t,e,n){var r,o=[t],i=1;while(arguments.length>i)o.push(arguments[i++]);if(r=e,(p(e)||void 0!==t)&&!at(t))return d(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!at(e))return e}),o[1]=e,z.apply(null,o)}})}W[$][B]||j(W[$],B,W[$].valueOf),_(W,F),M[V]=!0},a630:function(t,e,n){var r=n("23e7"),o=n("4df4"),i=n("1c7e"),c=!i((function(t){Array.from(t)}));r({target:"Array",stat:!0,forced:c},{from:o})},a640:function(t,e,n){"use strict";var r=n("d039");t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){throw 1},1)}))}},a691:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},a79d:function(t,e,n){"use strict";var r=n("23e7"),o=n("c430"),i=n("fea9"),c=n("d039"),a=n("d066"),u=n("4840"),s=n("cdf9"),l=n("6eeb"),f=!!i&&c((function(){i.prototype["finally"].call({then:function(){}},(function(){}))}));r({target:"Promise",proto:!0,real:!0,forced:f},{finally:function(t){var e=u(this,a("Promise")),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then((function(){return n}))}:t,n?function(n){return s(e,t()).then((function(){throw n}))}:t)}}),o||"function"!=typeof i||i.prototype["finally"]||l(i.prototype,"finally",a("Promise").prototype["finally"])},a9e3:function(t,e,n){"use strict";var r=n("83ab"),o=n("da84"),i=n("94ca"),c=n("6eeb"),a=n("5135"),u=n("c6b6"),s=n("7156"),l=n("c04e"),f=n("d039"),d=n("7c73"),p=n("241c").f,h=n("06cf").f,v=n("9bf2").f,b=n("58a8").trim,g="Number",m=o[g],y=m.prototype,w=u(d(y))==g,x=function(t){var e,n,r,o,i,c,a,u,s=l(t,!1);if("string"==typeof s&&s.length>2)if(s=b(s),e=s.charCodeAt(0),43===e||45===e){if(n=s.charCodeAt(2),88===n||120===n)return NaN}else if(48===e){switch(s.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+s}for(i=s.slice(2),c=i.length,a=0;ao)return NaN;return parseInt(i,r)}return+s};if(i(g,!m(" 0o1")||!m("0b1")||m("+0x1"))){for(var S,E=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof E&&(w?f((function(){y.valueOf.call(n)})):u(n)!=g)?s(new m(x(e)),n,E):x(e)},O=r?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;O.length>k;k++)a(m,S=O[k])&&!a(E,S)&&v(E,S,h(m,S));E.prototype=y,y.constructor=E,c(o,g,E)}},ab13:function(t,e,n){var r=n("b622"),o=r("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[o]=!1,"/./"[t](e)}catch(r){}}return!1}},ac1f:function(t,e,n){"use strict";var r=n("23e7"),o=n("9263");r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},ad6d:function(t,e,n){"use strict";var r=n("825a");t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},ae40:function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("5135"),c=Object.defineProperty,a={},u=function(t){throw t};t.exports=function(t,e){if(i(a,t))return a[t];e||(e={});var n=[][t],s=!!i(e,"ACCESSORS")&&e.ACCESSORS,l=i(e,0)?e[0]:u,f=i(e,1)?e[1]:void 0;return a[t]=!!n&&!o((function(){if(s&&!r)return!0;var t={length:-1};s?c(t,1,{enumerable:!0,get:u}):t[1]=1,n.call(t,l,f)}))}},ae93:function(t,e,n){"use strict";var r,o,i,c=n("e163"),a=n("9112"),u=n("5135"),s=n("b622"),l=n("c430"),f=s("iterator"),d=!1,p=function(){return this};[].keys&&(i=[].keys(),"next"in i?(o=c(c(i)),o!==Object.prototype&&(r=o)):d=!0),void 0==r&&(r={}),l||u(r,f)||a(r,f,p),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},b041:function(t,e,n){"use strict";var r=n("00ee"),o=n("f5df");t.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},b0c0:function(t,e,n){var r=n("83ab"),o=n("9bf2").f,i=Function.prototype,c=i.toString,a=/^\s*function ([^ (]*)/,u="name";r&&!(u in i)&&o(i,u,{configurable:!0,get:function(){try{return c.call(this).match(a)[1]}catch(t){return""}}})},b575:function(t,e,n){var r,o,i,c,a,u,s,l,f=n("da84"),d=n("06cf").f,p=n("c6b6"),h=n("2cf4").set,v=n("1cdc"),b=f.MutationObserver||f.WebKitMutationObserver,g=f.process,m=f.Promise,y="process"==p(g),w=d(f,"queueMicrotask"),x=w&&w.value;x||(r=function(){var t,e;y&&(t=g.domain)&&t.exit();while(o){e=o.fn,o=o.next;try{e()}catch(n){throw o?c():i=void 0,n}}i=void 0,t&&t.enter()},y?c=function(){g.nextTick(r)}:b&&!v?(a=!0,u=document.createTextNode(""),new b(r).observe(u,{characterData:!0}),c=function(){u.data=a=!a}):m&&m.resolve?(s=m.resolve(void 0),l=s.then,c=function(){l.call(s,r)}):c=function(){h.call(f,r)}),t.exports=x||function(t){var e={fn:t,next:void 0};i&&(i.next=e),o||(o=e,c()),i=e}},b622:function(t,e,n){var r=n("da84"),o=n("5692"),i=n("5135"),c=n("90e3"),a=n("4930"),u=n("fdbf"),s=o("wks"),l=r.Symbol,f=u?l:l&&l.withoutSetter||c;t.exports=function(t){return i(s,t)||(a&&i(l,t)?s[t]=l[t]:s[t]=f("Symbol."+t)),s[t]}},b64b:function(t,e,n){var r=n("23e7"),o=n("7b0b"),i=n("df75"),c=n("d039"),a=c((function(){i(1)}));r({target:"Object",stat:!0,forced:a},{keys:function(t){return i(o(t))}})},b727:function(t,e,n){var r=n("0366"),o=n("44ad"),i=n("7b0b"),c=n("50c4"),a=n("65f0"),u=[].push,s=function(t){var e=1==t,n=2==t,s=3==t,l=4==t,f=6==t,d=5==t||f;return function(p,h,v,b){for(var g,m,y=i(p),w=o(y),x=r(h,v,3),S=c(w.length),E=0,O=b||a,k=e?O(p,S):n?O(p,0):void 0;S>E;E++)if((d||E in w)&&(g=w[E],m=x(g,E,y),t))if(e)k[E]=m;else if(m)switch(t){case 3:return!0;case 5:return g;case 6:return E;case 2:u.call(k,g)}else if(l)return!1;return f?-1:s||l?l:k}};t.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6)}},c04e:function(t,e,n){var r=n("861d");t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},c430:function(t,e){t.exports=!1},c6b6:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},c6cd:function(t,e,n){var r=n("da84"),o=n("ce4e"),i="__core-js_shared__",c=r[i]||o(i,{});t.exports=c},c8ba:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},c8d2:function(t,e,n){var r=n("d039"),o=n("5899"),i="​…᠎";t.exports=function(t){return r((function(){return!!o[t]()||i[t]()!=i||o[t].name!==t}))}},c975:function(t,e,n){"use strict";var r=n("23e7"),o=n("4d64").indexOf,i=n("a640"),c=n("ae40"),a=[].indexOf,u=!!a&&1/[1].indexOf(1,-0)<0,s=i("indexOf"),l=c("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:u||!s||!l},{indexOf:function(t){return u?a.apply(this,arguments)||0:o(this,t,arguments.length>1?arguments[1]:void 0)}})},ca84:function(t,e,n){var r=n("5135"),o=n("fc6a"),i=n("4d64").indexOf,c=n("d012");t.exports=function(t,e){var n,a=o(t),u=0,s=[];for(n in a)!r(c,n)&&r(a,n)&&s.push(n);while(e.length>u)r(a,n=e[u++])&&(~i(s,n)||s.push(n));return s}},caad:function(t,e,n){"use strict";var r=n("23e7"),o=n("4d64").includes,i=n("44d2"),c=n("ae40"),a=c("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:!a},{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),i("includes")},cc12:function(t,e,n){var r=n("da84"),o=n("861d"),i=r.document,c=o(i)&&o(i.createElement);t.exports=function(t){return c?i.createElement(t):{}}},cca6:function(t,e,n){var r=n("23e7"),o=n("60da");r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},cdf9:function(t,e,n){var r=n("825a"),o=n("861d"),i=n("f069");t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t),c=n.resolve;return c(e),n.promise}},ce4e:function(t,e,n){var r=n("da84"),o=n("9112");t.exports=function(t,e){try{o(r,t,e)}catch(n){r[t]=e}return e}},d012:function(t,e){t.exports={}},d039:function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},d066:function(t,e,n){var r=n("428f"),o=n("da84"),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t])||i(o[t]):r[t]&&r[t][e]||o[t]&&o[t][e]}},d1e7:function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},d28b:function(t,e,n){var r=n("746f");r("iterator")},d2bb:function(t,e,n){var r=n("825a"),o=n("3bbe");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,t.call(n,[]),e=n instanceof Array}catch(i){}return function(n,i){return r(n),o(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},d3b7:function(t,e,n){var r=n("00ee"),o=n("6eeb"),i=n("b041");r||o(Object.prototype,"toString",i,{unsafe:!0})},d44e:function(t,e,n){var r=n("9bf2").f,o=n("5135"),i=n("b622"),c=i("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,c)&&r(t,c,{configurable:!0,value:e})}},d58f:function(t,e,n){var r=n("1c0b"),o=n("7b0b"),i=n("44ad"),c=n("50c4"),a=function(t){return function(e,n,a,u){r(n);var s=o(e),l=i(s),f=c(s.length),d=t?f-1:0,p=t?-1:1;if(a<2)while(1){if(d in l){u=l[d],d+=p;break}if(d+=p,t?d<0:f<=d)throw TypeError("Reduce of empty array with no initial value")}for(;t?d>=0:f>d;d+=p)d in l&&(u=n(u,l[d],d,s));return u}};t.exports={left:a(!1),right:a(!0)}},d784:function(t,e,n){"use strict";n("ac1f");var r=n("6eeb"),o=n("d039"),i=n("b622"),c=n("9263"),a=n("9112"),u=i("species"),s=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),l=function(){return"$0"==="a".replace(/./,"$0")}(),f=i("replace"),d=function(){return!!/./[f]&&""===/./[f]("a","$0")}(),p=!o((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,f){var h=i(t),v=!o((function(){var e={};return e[h]=function(){return 7},7!=""[t](e)})),b=v&&!o((function(){var e=!1,n=/a/;return"split"===t&&(n={},n.constructor={},n.constructor[u]=function(){return n},n.flags="",n[h]=/./[h]),n.exec=function(){return e=!0,null},n[h](""),!e}));if(!v||!b||"replace"===t&&(!s||!l||d)||"split"===t&&!p){var g=/./[h],m=n(h,""[t],(function(t,e,n,r,o){return e.exec===c?v&&!o?{done:!0,value:g.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}),{REPLACE_KEEPS_$0:l,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:d}),y=m[0],w=m[1];r(String.prototype,t,y),r(RegExp.prototype,h,2==e?function(t,e){return w.call(t,this,e)}:function(t){return w.call(t,this)})}f&&a(RegExp.prototype[h],"sham",!0)}},d81d:function(t,e,n){"use strict";var r=n("23e7"),o=n("b727").map,i=n("1dde"),c=n("ae40"),a=i("map"),u=c("map");r({target:"Array",proto:!0,forced:!a||!u},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},d99e:function(t,e,n){n("4160"),n("b0c0"),n("07ac"),n("159b");var r=n("ded3"),o=n("7037");window.nextgenEditor.addHook("hookInit",(function(){Object.values(window.nextgenEditor.shortcodes).forEach((function(t){t.attributes=t.attributes||{},t.button||(t.button={label:t.title}),Object.values(t.attributes).forEach((function(t){void 0===t.default&&(t.default=""),"object"!==o(t.default)&&(t.default={value:t.default}),void 0===t.shorthand&&(t.shorthand=!0)})),"block"!==t.type||t.titlebar||(t.titlebar=function(){return""}),t.content||(t.content=function(){return""}),t.preserve&&(t.preserve.block&&window.nextgenEditor.addVariable("preserveBlockTags",t.preserve.block),t.preserve.inline&&window.nextgenEditor.addVariable("preserveInlineTags",t.preserve.inline)),t.parent||window.nextgenEditor.addButton("shortcode_".concat(t.name),r({command:"shortcode_".concat(t.name)},t.button))}))}))},da84:function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")()}).call(this,n("c8ba"))},db43:function(t,e,n){},dbb4:function(t,e,n){var r=n("23e7"),o=n("83ab"),i=n("56ef"),c=n("fc6a"),a=n("06cf"),u=n("8418");r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){var e,n,r=c(t),o=a.f,s=i(r),l={},f=0;while(s.length>f)n=o(r,e=s[f++]),void 0!==n&&u(l,e,n);return l}})},ddb0:function(t,e,n){var r=n("da84"),o=n("fdbc"),i=n("e260"),c=n("9112"),a=n("b622"),u=a("iterator"),s=a("toStringTag"),l=i.values;for(var f in o){var d=r[f],p=d&&d.prototype;if(p){if(p[u]!==l)try{c(p,u,l)}catch(v){p[u]=l}if(p[s]||c(p,s,f),o[f])for(var h in i)if(p[h]!==i[h])try{c(p,h,i[h])}catch(v){p[h]=i[h]}}}},ded3:function(t,e,n){n("a4d3"),n("4de4"),n("4160"),n("e439"),n("dbb4"),n("b64b"),n("159b");var r=n("9523");function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},e2cc:function(t,e,n){var r=n("6eeb");t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},e439:function(t,e,n){var r=n("23e7"),o=n("d039"),i=n("fc6a"),c=n("06cf").f,a=n("83ab"),u=o((function(){c(1)})),s=!a||u;r({target:"Object",stat:!0,forced:s,sham:!a},{getOwnPropertyDescriptor:function(t,e){return c(i(t),e)}})},e538:function(t,e,n){var r=n("b622");e.f=r},e667:function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(e){return{error:!0,value:e}}}},e6cf:function(t,e,n){"use strict";var r,o,i,c,a=n("23e7"),u=n("c430"),s=n("da84"),l=n("d066"),f=n("fea9"),d=n("6eeb"),p=n("e2cc"),h=n("d44e"),v=n("2626"),b=n("861d"),g=n("1c0b"),m=n("19aa"),y=n("c6b6"),w=n("8925"),x=n("2266"),S=n("1c7e"),E=n("4840"),O=n("2cf4").set,k=n("b575"),A=n("cdf9"),j=n("44de"),T=n("f069"),P=n("e667"),C=n("69f3"),M=n("94ca"),I=n("b622"),R=n("2d00"),N=I("species"),L="Promise",_=C.get,D=C.set,H=C.getterFor(L),V=f,F=s.TypeError,$=s.document,B=s.process,U=l("fetch"),q=T.f,G=q,W="process"==y(B),z=!!($&&$.createEvent&&s.dispatchEvent),J="unhandledrejection",Y="rejectionhandled",K=0,X=1,Q=2,Z=1,tt=2,et=M(L,(function(){var t=w(V)!==String(V);if(!t){if(66===R)return!0;if(!W&&"function"!=typeof PromiseRejectionEvent)return!0}if(u&&!V.prototype["finally"])return!0;if(R>=51&&/native code/.test(V))return!1;var e=V.resolve(1),n=function(t){t((function(){}),(function(){}))},r=e.constructor={};return r[N]=n,!(e.then((function(){}))instanceof n)})),nt=et||!S((function(t){V.all(t)["catch"]((function(){}))})),rt=function(t){var e;return!(!b(t)||"function"!=typeof(e=t.then))&&e},ot=function(t,e,n){if(!e.notified){e.notified=!0;var r=e.reactions;k((function(){var o=e.value,i=e.state==X,c=0;while(r.length>c){var a,u,s,l=r[c++],f=i?l.ok:l.fail,d=l.resolve,p=l.reject,h=l.domain;try{f?(i||(e.rejection===tt&&ut(t,e),e.rejection=Z),!0===f?a=o:(h&&h.enter(),a=f(o),h&&(h.exit(),s=!0)),a===l.promise?p(F("Promise-chain cycle")):(u=rt(a))?u.call(a,d,p):d(a)):p(o)}catch(v){h&&!s&&h.exit(),p(v)}}e.reactions=[],e.notified=!1,n&&!e.rejection&&ct(t,e)}))}},it=function(t,e,n){var r,o;z?(r=$.createEvent("Event"),r.promise=e,r.reason=n,r.initEvent(t,!1,!0),s.dispatchEvent(r)):r={promise:e,reason:n},(o=s["on"+t])?o(r):t===J&&j("Unhandled promise rejection",n)},ct=function(t,e){O.call(s,(function(){var n,r=e.value,o=at(e);if(o&&(n=P((function(){W?B.emit("unhandledRejection",r,t):it(J,t,r)})),e.rejection=W||at(e)?tt:Z,n.error))throw n.value}))},at=function(t){return t.rejection!==Z&&!t.parent},ut=function(t,e){O.call(s,(function(){W?B.emit("rejectionHandled",t):it(Y,t,e.value)}))},st=function(t,e,n,r){return function(o){t(e,n,o,r)}},lt=function(t,e,n,r){e.done||(e.done=!0,r&&(e=r),e.value=n,e.state=Q,ot(t,e,!0))},ft=function(t,e,n,r){if(!e.done){e.done=!0,r&&(e=r);try{if(t===n)throw F("Promise can't be resolved itself");var o=rt(n);o?k((function(){var r={done:!1};try{o.call(n,st(ft,t,r,e),st(lt,t,r,e))}catch(i){lt(t,r,i,e)}})):(e.value=n,e.state=X,ot(t,e,!1))}catch(i){lt(t,{done:!1},i,e)}}};et&&(V=function(t){m(this,V,L),g(t),r.call(this);var e=_(this);try{t(st(ft,this,e),st(lt,this,e))}catch(n){lt(this,e,n)}},r=function(t){D(this,{type:L,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:K,value:void 0})},r.prototype=p(V.prototype,{then:function(t,e){var n=H(this),r=q(E(this,V));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=W?B.domain:void 0,n.parent=!0,n.reactions.push(r),n.state!=K&&ot(this,n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r,e=_(t);this.promise=t,this.resolve=st(ft,t,e),this.reject=st(lt,t,e)},T.f=q=function(t){return t===V||t===i?new o(t):G(t)},u||"function"!=typeof f||(c=f.prototype.then,d(f.prototype,"then",(function(t,e){var n=this;return new V((function(t,e){c.call(n,t,e)})).then(t,e)}),{unsafe:!0}),"function"==typeof U&&a({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return A(V,U.apply(s,arguments))}}))),a({global:!0,wrap:!0,forced:et},{Promise:V}),h(V,L,!1,!0),v(L),i=l(L),a({target:L,stat:!0,forced:et},{reject:function(t){var e=q(this);return e.reject.call(void 0,t),e.promise}}),a({target:L,stat:!0,forced:u||et},{resolve:function(t){return A(u&&this===i?V:this,t)}}),a({target:L,stat:!0,forced:nt},{all:function(t){var e=this,n=q(e),r=n.resolve,o=n.reject,i=P((function(){var n=g(e.resolve),i=[],c=0,a=1;x(t,(function(t){var u=c++,s=!1;i.push(void 0),a++,n.call(e,t).then((function(t){s||(s=!0,i[u]=t,--a||r(i))}),o)})),--a||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=q(e),r=n.reject,o=P((function(){var o=g(e.resolve);x(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},e893:function(t,e,n){var r=n("5135"),o=n("56ef"),i=n("06cf"),c=n("9bf2");t.exports=function(t,e){for(var n=o(e),a=c.f,u=i.f,s=0;s /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);\n var iterator, iterFn, index, length, result, next, step;\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = AS_ENTRIES\n ? boundFunction(anObject(step = iterable[index])[0], step[1])\n : boundFunction(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n\niterate.stop = function (result) {\n return new Result(true, result);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","window.nextgenEditor.addPlugin('GravShortcodeCoreRemove', {\n init() {\n const deleteBackwardCommand = this.editor.commands.get('delete');\n const deleteForwardCommand = this.editor.commands.get('forwardDelete');\n\n const preDelete = (event) => {\n const selectedElement = this.editor.model.document.selection.getSelectedElement();\n\n if (selectedElement && selectedElement.name === 'shortcode-block') {\n const name = selectedElement.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n\n if (shortcode.parent) {\n const viewShortcode = this.editor.editing.mapper.toViewElement(selectedElement);\n const domShortcode = this.editor.editing.view.domConverter.mapViewToDom(viewShortcode);\n const domParentShortcode = domShortcode.closest(`shortcode-block[name=\"${shortcode.parent.name}\"]`);\n\n event.childShortcodeDeleted = true;\n event.modelShortcodeBlockReadOnly = selectedElement.parent;\n event.domParentShortcode = domParentShortcode;\n }\n }\n };\n\n const postDelete = (event) => {\n if (event.childShortcodeDeleted) {\n const { domParentShortcode, modelShortcodeBlockReadOnly } = event;\n\n const children = [...modelShortcodeBlockReadOnly.getChildren()];\n const scChildren = children.filter((child) => child.name === 'shortcode-block');\n const otherChildren = children.filter((child) => child.name !== 'shortcode-block');\n\n setTimeout(() => {\n this.editor.model.change((modelWriter) => {\n otherChildren.forEach((modelChild) => {\n if (modelChild.name === 'paragraph' && modelChild.childCount === 0) {\n modelWriter.remove(modelChild);\n }\n });\n });\n });\n\n if (!scChildren.length) {\n domParentShortcode.querySelector('shortcode-block > .sc-add-child').classList.add('sc-visible');\n }\n }\n };\n\n deleteBackwardCommand.on('execute', preDelete, { priority: 'highest' });\n deleteForwardCommand.on('execute', preDelete, { priority: 'highest' });\n\n deleteBackwardCommand.on('execute', postDelete, { priority: 'lowest' });\n deleteForwardCommand.on('execute', postDelete, { priority: 'lowest' });\n },\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return nativeStartsWith\n ? nativeStartsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","window.nextgenEditor.addHook('hookMarkdowntoHTML', {\n weight: -50,\n handler(options, input) {\n let output = input;\n\n const realNames = Object.values(window.nextgenEditor.shortcodes).map((shortcode) => shortcode.realName)\n .filter((value, index, self) => self.indexOf(value) === index);\n\n const openingRegexp = realNames\n .map((name) => `(\\\\[${name}[^\\\\]]*\\\\])`).join('|');\n\n realNames.forEach((name) => {\n const regexp = `\\\\[${name}(?(=| +).+?(?=/]))?\\\\/\\\\]`;\n\n output = output.replace(new RegExp(regexp, 'g'), (...matches) => {\n const groups = matches.pop();\n\n const attributes = groups.attributes.trim()\n ? `${groups.attributes}`\n : '';\n\n return `[${name}${attributes}][/${name}]`;\n });\n });\n\n const hashMap = {};\n let shortcodeCounter = 1;\n\n while (shortcodeCounter > 0) {\n shortcodeCounter = 0;\n\n // eslint-disable-next-line no-loop-func\n Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => {\n const regexp = `(? *)\\\\[${shortcode.realName}(?(=| +)[^\\\\]]*)?\\\\](?(((?!(${openingRegexp}|(\\\\[\\\\/${shortcode.realName}\\\\]))).)|\\\\n)*)\\\\[\\\\/${shortcode.realName}\\\\](? *)`;\n\n output = output.replace(new RegExp(regexp, 'g'), (...matches) => {\n shortcodeCounter += 1;\n\n const hash = Math.random().toString(36).slice(2);\n hashMap[hash] = { shortcode, matches };\n\n if (shortcode.child) {\n const childName = shortcode.child.realName;\n\n Object.keys(hashMap).forEach((childHash) => {\n const childShortcode = hashMap[childHash].shortcode;\n\n if (childShortcode === shortcode.child && childShortcode.name !== `${shortcode.realName}_${childName}` && matches[0].includes(childHash)) {\n hashMap[childHash].shortcode = window.nextgenEditor.shortcodes[`${shortcode.realName}_${childName}`];\n }\n });\n }\n\n return hash;\n });\n });\n }\n\n shortcodeCounter = 1;\n\n while (shortcodeCounter > 0) {\n shortcodeCounter = 0;\n\n // eslint-disable-next-line no-loop-func\n Object.keys(hashMap).forEach((hash) => {\n if (!output.includes(hash)) {\n return;\n }\n\n shortcodeCounter += 1;\n\n const { shortcode, matches } = hashMap[hash];\n const groups = matches.pop();\n\n const spacesBefore = groups.spaces_before.replace(/ /g, ' ');\n const spacesAfter = groups.spaces_after.replace(/ /g, ' ');\n\n if (shortcode.type === 'block') {\n let content = groups.content.trim();\n\n if (groups.spaces_before.length) {\n content = content.replace(new RegExp(`^( ){${groups.spaces_before.length}}`, 'gm'), '');\n }\n\n const replacement = `\\n\\n[${shortcode.name}${groups.attributes || ''}]\\n\\n${content}\\n\\n[/${shortcode.name}]\\n\\n`;\n\n output = output.replace(new RegExp(`(\\\\n)?(\\\\n)?${hash}(\\\\n)?(\\\\n)?`), replacement);\n }\n\n if (shortcode.type === 'inline') {\n output = output.replace(hash, `${spacesBefore}[${shortcode.name}${groups.attributes || ''}]${groups.content}[/${shortcode.name}]${spacesAfter}`);\n }\n });\n }\n\n output = output.replace(/^\\n\\n/, '').replace(/\\n\\n$/, '');\n\n return output;\n },\n});\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (classof(process) == 'process') {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n !fails(post) &&\n location.protocol !== 'file:'\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","module.exports = {};\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('some');\n\n// `Array.prototype.some` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.github.io/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar setInternalState = require('../internals/internal-state').set;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar FORCED = DESCRIPTORS && isForced('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n})));\n\n// `RegExp` constructor\n// https://tc39.github.io/ecma262/#sec-regexp-constructor\nif (FORCED) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var sticky;\n\n if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {\n return pattern;\n }\n\n if (CORRECT_NEW) {\n if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;\n } else if (pattern instanceof RegExpWrapper) {\n if (flagsAreUndefined) flags = getFlags.call(pattern);\n pattern = pattern.source;\n }\n\n if (UNSUPPORTED_Y) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n var result = inheritIfRequired(\n CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),\n thisIsRegExp ? this : RegExpPrototype,\n RegExpWrapper\n );\n\n if (UNSUPPORTED_Y && sticky) setInternalState(result, { sticky: sticky });\n\n return result;\n };\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n var keys = getOwnPropertyNames(NativeRegExp);\n var index = 0;\n while (keys.length > index) proxy(keys[index++]);\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.github.io/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","window.nextgenEditor.addHook('hookHTMLtoMarkdown', {\n weight: 50,\n handler(options, editor, input) {\n let output = input;\n\n const realNames = Object.values(window.nextgenEditor.shortcodes).map((shortcode) => shortcode.realName)\n .filter((value, index, self) => self.indexOf(value) === index);\n\n const openingRegexp = realNames\n .map((name) => `(\\\\[${name}[^\\\\]]*\\\\])`).join('|');\n\n const hashMap = {};\n let shortcodeCounter = 1;\n\n while (shortcodeCounter > 0) {\n shortcodeCounter = 0;\n\n // eslint-disable-next-line no-loop-func\n Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => {\n const regexp = `(?\\\\[${shortcode.realName}[^\\\\]]*\\\\])(?(((?!(${openingRegexp}|(\\\\[\\\\/${shortcode.realName}\\\\]))).)|\\\\n)*)(?\\\\[\\\\/${shortcode.realName}\\\\])`;\n\n output = output.replace(new RegExp(regexp, 'g'), (...matches) => {\n shortcodeCounter += 1;\n\n const hash = Math.random().toString(36).slice(2);\n hashMap[hash] = { shortcode, matches };\n\n if (shortcode.child) {\n const childName = shortcode.child.realName;\n\n Object.keys(hashMap).forEach((childHash) => {\n const childShortcode = hashMap[childHash].shortcode;\n\n if (childShortcode === shortcode.child && childShortcode.name !== `${shortcode.realName}_${childName}` && matches[0].includes(childHash)) {\n hashMap[childHash].shortcode = window.nextgenEditor.shortcodes[`${shortcode.realName}_${childName}`];\n }\n });\n }\n\n return hash;\n });\n });\n }\n\n shortcodeCounter = 1;\n\n while (shortcodeCounter > 0) {\n shortcodeCounter = 0;\n\n // eslint-disable-next-line no-loop-func\n Object.keys(hashMap).forEach((hash) => {\n if (!output.includes(hash)) {\n return;\n }\n\n shortcodeCounter += 1;\n\n const { shortcode, matches } = hashMap[hash];\n const groups = matches.pop();\n\n if (shortcode.type === 'block') {\n let content = groups.content.replace(/^\\n/, '').replace(/\\n$/, '');\n\n if (shortcode.child) {\n content = content.trim().split('\\n').filter((line) => !!line).join('\\n');\n content = `\\n${content}\\n`;\n }\n\n if (shortcode.parent) {\n content = `\\n${content}\\n`;\n }\n\n output = output.replace(hash, `${groups.opening}${content}${groups.closing}`);\n }\n\n if (shortcode.type === 'inline') {\n output = output.replace(hash, matches[0]);\n }\n });\n }\n\n /*\n Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => {\n const regexp = `(?\\\\[${shortcode.realName}[^\\\\]]*\\\\])\\n(?(((?!(${openingRegexp}|(\\\\[\\\\/${shortcode.realName}\\\\]))).))*)\\n(?\\\\[\\\\/${shortcode.realName}\\\\])`;\n\n output = output.replace(new RegExp(regexp, 'g'), (...matches) => {\n const groups = matches.pop();\n return `${groups.opening}${groups.content}${groups.closing}`;\n });\n });\n */\n\n return output;\n },\n});\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.6.5',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"@babel/runtime/helpers/esm/arrayWithoutHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableSpread from \"@babel/runtime/helpers/esm/nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function collapse(input) {\n let output = input;\n\n output = output.replace(/
((((?!(<\\/figure>)).)|\\n)*)<\\/figure>/gm, '$1');\n\n const domOutput = new DOMParser().parseFromString(output, 'text/html');\n\n [...domOutput.querySelectorAll('shortcode-block, shortcode-inline')].forEach((domShortcode) => {\n domShortcode.setAttribute('sc-rendered', false);\n });\n\n let domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]');\n\n while (domShortcode) {\n const name = domShortcode.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n\n domShortcode.removeAttribute('class');\n domShortcode.removeAttribute('sc-rendered');\n\n const domInnerContent = domShortcode.querySelector(`shortcode-${shortcode.type}-editable, shortcode-${shortcode.type}-readonly`);\n domShortcode.innerHTML = (domInnerContent && domInnerContent.innerHTML) || '';\n\n domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]');\n }\n\n output = domOutput.body.innerHTML;\n\n return output;\n}\n","export default function uncollapse(input, args) {\n const domOutput = new DOMParser().parseFromString(input, 'text/html');\n [...domOutput.querySelectorAll('shortcode-block, shortcode-inline')].forEach((domShortcode) => {\n domShortcode.setAttribute('sc-rendered', false);\n });\n\n let domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]');\n\n while (domShortcode) {\n const name = domShortcode.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n const attributes = JSON.parse(decodeURIComponent(domShortcode.getAttribute('attributes')));\n\n domShortcode.classList.add('ck-shortcode');\n domShortcode.classList.add(`ck-shortcode-${shortcode.type}`);\n domShortcode.removeAttribute('sc-rendered');\n\n const argsForRender = {\n shortcode,\n attributes,\n innerHTML: domShortcode.innerHTML,\n parentAttributes: null,\n childAttributes: null,\n };\n\n let innerHTML = '';\n\n if (shortcode.type === 'block') {\n if (shortcode.parent) {\n domShortcode.classList.add('ck-shortcode-child');\n\n const domParentShortcode = domShortcode.closest(`shortcode-block[name=\"${shortcode.parent.name}\"]`);\n\n argsForRender.parentAttributes = !args || !args.parentAttributes\n ? domParentShortcode\n ? JSON.parse(decodeURIComponent(domParentShortcode.getAttribute('attributes')))\n : {}\n : args.parentAttributes;\n }\n\n if (shortcode.child) {\n argsForRender.childAttributes = [];\n domShortcode.classList.add('ck-shortcode-parent');\n\n const childNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block[name=\"${shortcode.child.name}\"]`)];\n const deepChildNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block shortcode-block[name=\"${shortcode.child.name}\"]`)];\n\n childNodes\n .filter((domChildShortcode) => !deepChildNodes.includes(domChildShortcode))\n .forEach((domChildShortcode) => {\n const childAttributes = JSON.parse(decodeURIComponent(domChildShortcode.getAttribute('attributes')));\n argsForRender.childAttributes.push(childAttributes);\n });\n }\n\n /* eslint-disable indent, no-multi-spaces */\n innerHTML += '
';\n innerHTML += `
Shortcode - ${shortcode.title}
`;\n innerHTML += `
${shortcode.titlebar(argsForRender)}
`;\n innerHTML += '
';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '
';\n innerHTML += '
';\n innerHTML += '
';\n innerHTML += shortcode.content(argsForRender)\n .replace('{{content_editable}}', `${domShortcode.innerHTML}`)\n .replace('{{content_readonly}}', `${domShortcode.innerHTML}`);\n innerHTML += '
';\n\n if (shortcode.child) {\n const visible = !domShortcode.innerHTML ? ' sc-visible' : '';\n innerHTML += `
`;\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '
';\n }\n\n if (shortcode.parent) {\n ['before', 'after'].forEach((where) => {\n innerHTML += `
`;\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '
';\n });\n\n ['up', 'down'].forEach((where) => {\n innerHTML += `
`;\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '
';\n });\n }\n /* eslint-enable indent, no-multi-spaces */\n }\n\n if (shortcode.type === 'inline') {\n /* eslint-disable indent, no-multi-spaces */\n innerHTML += '';\n innerHTML += shortcode.content(argsForRender)\n .replace('{{content_editable}}', `${domShortcode.innerHTML}`)\n .replace('{{content_readonly}}', `${domShortcode.innerHTML}`);\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n innerHTML += '';\n /* eslint-enable indent, no-multi-spaces */\n }\n\n domShortcode.innerHTML = innerHTML;\n domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]');\n }\n\n return domOutput.body.innerHTML;\n}\n\ndocument.addEventListener('click', (event) => {\n const { target } = event;\n const list = ['sc-settings', 'sc-move', 'sc-add', 'sc-add-child'];\n const action = { element: null, className: null };\n const isAction = list.some((item) => {\n let match = target.classList.contains(item);\n\n if (match) {\n action.element = target;\n action.className = item;\n\n return true;\n }\n\n match = target.closest(`.${item}`);\n if (match) {\n action.element = match;\n action.className = item;\n\n return true;\n }\n\n return false;\n });\n\n if (isAction) {\n switch (action.className) {\n case 'sc-move':\n window.scBlockMoveChild.call(action.element, event, action.element.classList.contains('sc-move-up') ? 'up' : 'down');\n break;\n case 'sc-add':\n window.scBlockAddChild.call(action.element, event, action.element.classList.contains('sc-add-before') ? 'before' : 'after');\n break;\n case 'sc-add-child':\n window.scBlockAddChildFromParent.call(action.element, event);\n break;\n case 'sc-settings':\n default:\n window.scDisplaySettings.call(action.element, event);\n }\n }\n});\n","import collapse from './collapse';\nimport uncollapse from './uncollapse';\n\nconst Command = window.nextgenEditor.classes.core.command.class;\n\nwindow.nextgenEditor.addPlugin('GravShortcodeCoreCommand', {\n init() {\n Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => {\n const commandName = `shortcode_${shortcode.name}`;\n\n class GravShortcodeCoreCommand extends Command {\n execute(args) {\n this.editor.model.change((modelWriter) => {\n let dataShortcode = '';\n const argsForUncollapse = {};\n\n const wrapOnInsert = !shortcode.child && !shortcode.parent\n ? shortcode.wrapOnInsert !== undefined\n ? shortcode.wrapOnInsert\n : true\n : false;\n\n const selectedBlocks = [...this.editor.model.document.selection.getSelectedBlocks()];\n const selectedItems = [...this.editor.model.document.selection.getFirstRange().getItems({ shallow: true })];\n\n const firstSelectedBlock = selectedBlocks[0];\n const firstBlockSelectedItems = selectedItems.filter((item) => item.parent === firstSelectedBlock);\n\n const attributes = Object.keys(shortcode.attributes).reduce((acc, attrName) => {\n acc[attrName] = shortcode.attributes[attrName].default.value;\n return acc;\n }, {});\n\n dataShortcode += ``;\n\n if (wrapOnInsert) {\n if (shortcode.type === 'block') {\n const modelSelectedBlocks = modelWriter.createDocumentFragment();\n selectedBlocks.forEach((block) => modelWriter.append(modelWriter.cloneElement(block), modelSelectedBlocks));\n\n const viewSelectedBlocks = this.editor.data.toView(modelSelectedBlocks);\n const dataSelectedBlocks = this.editor.data.processor.toData(viewSelectedBlocks);\n\n dataShortcode += collapse(dataSelectedBlocks);\n }\n\n if (shortcode.type === 'inline') {\n const modelSelectedBlocks = modelWriter.createDocumentFragment();\n\n firstBlockSelectedItems.forEach((item) => {\n const block = item.textNode\n ? modelWriter.createText(item.data)\n : modelWriter.cloneElement(item);\n\n modelWriter.append(block, modelSelectedBlocks);\n });\n\n const viewSelectedBlocks = this.editor.data.toView(modelSelectedBlocks);\n const dataSelectedBlocks = this.editor.data.processor.toData(viewSelectedBlocks);\n\n dataShortcode += collapse(dataSelectedBlocks);\n }\n }\n\n if (shortcode.parent) {\n dataShortcode += '

 

';\n }\n\n dataShortcode += `
`;\n\n if (shortcode.parent) {\n if (args && args.modelParentShortcode) {\n argsForUncollapse.parentAttributes = JSON.parse(decodeURIComponent(args.modelParentShortcode.getAttribute('attributes')));\n }\n }\n\n dataShortcode = uncollapse(dataShortcode, argsForUncollapse);\n\n const convertContext = shortcode.type === 'inline'\n ? '$block'\n : '$root';\n\n const viewShortcode = this.editor.data.processor.toView(dataShortcode).getChild(0);\n const modelShortcode = this.editor.data.toModel(viewShortcode, convertContext).getChild(0);\n\n let insertPosition = modelWriter.createPositionAt(this.editor.model.document.getRoot(), 0);\n\n if (!args || !args.insertPosition) {\n if (shortcode.type === 'block') {\n const firstBlock = selectedBlocks[0];\n const lastBlock = selectedBlocks[selectedBlocks.length - 1];\n\n if (wrapOnInsert) {\n insertPosition = modelWriter.createPositionBefore(firstBlock);\n\n modelWriter.remove(\n modelWriter.createRange(\n modelWriter.createPositionBefore(firstBlock),\n modelWriter.createPositionAfter(lastBlock),\n ),\n );\n } else {\n insertPosition = modelWriter.createPositionAfter(lastBlock);\n\n if (lastBlock && lastBlock.name === 'paragraph' && lastBlock.childCount === 0) {\n insertPosition = modelWriter.createPositionBefore(lastBlock);\n modelWriter.remove(lastBlock);\n }\n }\n }\n\n if (shortcode.type === 'inline') {\n const firstItem = firstBlockSelectedItems.length\n ? firstBlockSelectedItems[0]\n : null;\n\n const lastItem = firstBlockSelectedItems.length\n ? firstBlockSelectedItems[firstBlockSelectedItems.length - 1]\n : null;\n\n if (wrapOnInsert) {\n insertPosition = firstItem\n ? modelWriter.createPositionBefore(firstItem)\n : this.editor.model.document.selection.getFirstPosition();\n\n if (firstItem) {\n modelWriter.remove(\n modelWriter.createRange(\n modelWriter.createPositionBefore(firstItem),\n modelWriter.createPositionAfter(lastItem),\n ),\n );\n }\n } else {\n insertPosition = lastItem\n ? modelWriter.createPositionAfter(lastItem)\n : this.editor.model.document.selection.getFirstPosition();\n }\n }\n } else {\n insertPosition = args.insertPosition;\n }\n\n modelWriter.insert(modelShortcode, insertPosition);\n modelWriter.setSelection(modelShortcode, 'on');\n });\n }\n }\n\n this.editor.commands.add(commandName, new GravShortcodeCoreCommand(this.editor));\n });\n },\n});\n","import collapse from './collapse';\nimport uncollapse from './uncollapse';\n\nconst { showSettingsPopup } = window.nextgenEditor.exports;\n\nexport default function displaySettings(domShortcode) {\n const { editors } = window.nextgenEditor;\n const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift();\n\n const name = domShortcode.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n const plugin = window.nextgenEditor.shortcodePlugins[shortcode.plugin];\n\n if (editor) {\n const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode);\n let modelShortcode = editor.editing.mapper.toModelElement(viewShortcode);\n\n const currentAttributes = JSON.parse(decodeURIComponent(domShortcode.getAttribute('attributes')));\n\n const domDisplayPoint = shortcode.type === 'block'\n ? domShortcode.querySelector('.sc-header > .sc-settings')\n : domShortcode;\n\n const title = []\n .concat([\n (plugin && plugin.title) || '',\n (shortcode.parent && shortcode.parent.title) || '',\n shortcode.title || '',\n ])\n .filter((item) => !!item)\n .join(' / ');\n\n const argsForPopup = {\n title,\n domDisplayPoint,\n debounceDelay: 1000,\n attributes: shortcode.attributes,\n currentAttributes,\n parentAttributes: null,\n childAttributes: null,\n };\n\n if (shortcode.parent) {\n const domParentShortcode = domShortcode.closest(`shortcode-block[name=\"${shortcode.parent.name}\"]`);\n\n argsForPopup.parentAttributes = domParentShortcode\n ? JSON.parse(decodeURIComponent(domParentShortcode.getAttribute('attributes')))\n : {};\n }\n\n if (shortcode.child) {\n argsForPopup.childAttributes = [];\n\n const childNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block[name=\"${shortcode.child.name}\"]`)];\n const deepChildNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block shortcode-block[name=\"${shortcode.child.name}\"]`)];\n\n childNodes\n .filter((domChildShortcode) => !deepChildNodes.includes(domChildShortcode))\n .forEach((domChildShortcode) => {\n const childAttributes = JSON.parse(decodeURIComponent(domChildShortcode.getAttribute('attributes')));\n argsForPopup.childAttributes.push(childAttributes);\n });\n }\n\n argsForPopup.deleteItem = () => editor.execute('delete');\n\n argsForPopup.changeAttributes = () => {\n editor.model.change((modelWriter) => {\n modelWriter.setAttribute('attributes', encodeURIComponent(JSON.stringify(currentAttributes)), modelShortcode);\n\n const convertContext = shortcode.type === 'inline'\n ? '$block'\n : '$root';\n\n if (shortcode.parent) {\n const viewOldShortcode = editor.editing.mapper.toViewElement(modelShortcode);\n const domOldShortcode = editor.editing.view.domConverter.mapViewToDom(viewOldShortcode);\n\n if (!domOldShortcode) {\n return;\n }\n\n const domOldParentShortcode = domOldShortcode.parentNode.closest('shortcode-block');\n const viewOldParentShortcode = editor.editing.view.domConverter.mapDomToView(domOldParentShortcode);\n const modelOldParentShortcode = editor.editing.mapper.toModelElement(viewOldParentShortcode);\n\n const childNodes = [...domOldParentShortcode.querySelectorAll('shortcode-block shortcode-block')];\n const deepChildNodes = [...domOldParentShortcode.querySelectorAll('shortcode-block shortcode-block shortcode-block')];\n\n const childIndex = childNodes\n .filter((domChildShortcode) => !deepChildNodes.includes(domChildShortcode))\n .indexOf(domOldShortcode);\n\n const insertPosition = modelWriter.createPositionBefore(modelOldParentShortcode);\n const modelOldParentClonedShortcode = modelWriter.cloneElement(modelOldParentShortcode);\n\n const modelOldParentFragment = modelWriter.createDocumentFragment();\n modelWriter.append(modelOldParentClonedShortcode, modelOldParentFragment);\n\n const viewOldParentClonedShortcode = editor.data.toView(modelOldParentFragment).getChild(0);\n const dataOldParentClonedShortcode = editor.data.processor.toData(viewOldParentClonedShortcode);\n\n const dataNewParentShortcode = uncollapse(collapse(dataOldParentClonedShortcode));\n const viewNewParentShortcode = editor.data.processor.toView(dataNewParentShortcode).getChild(0);\n const modelNewParentShortcode = editor.data.toModel(viewNewParentShortcode, convertContext).getChild(0);\n\n modelWriter.remove(modelOldParentShortcode);\n modelWriter.insert(modelNewParentShortcode, insertPosition);\n\n setTimeout(() => {\n const viewParentShortcode = editor.editing.mapper.toViewElement(modelNewParentShortcode);\n const domParentShortcode = editor.editing.view.domConverter.mapViewToDom(viewParentShortcode);\n\n const childNewNodes = [...domParentShortcode.querySelectorAll('shortcode-block shortcode-block')];\n const deepNewChildNodes = [...domParentShortcode.querySelectorAll('shortcode-block shortcode-block shortcode-block')];\n\n const domNewShortcode = childNewNodes.filter((domChildShortcode) => !deepNewChildNodes.includes(domChildShortcode))[childIndex];\n const viewNewShortcode = editor.editing.view.domConverter.mapDomToView(domNewShortcode);\n const modelNewShortcode = editor.editing.mapper.toModelElement(viewNewShortcode);\n\n editor.model.change((modelWriter2) => {\n modelWriter2.setSelection(modelNewShortcode, 'on');\n modelShortcode = modelNewShortcode;\n });\n });\n\n return;\n }\n\n const insertPosition = modelWriter.createPositionBefore(modelShortcode);\n const modelOldShortcode = modelWriter.cloneElement(modelShortcode);\n\n const modelOldFragment = modelWriter.createDocumentFragment();\n modelWriter.append(modelOldShortcode, modelOldFragment);\n\n const viewOldShortcode = editor.data.toView(modelOldFragment).getChild(0);\n const dataOldShortcode = editor.data.processor.toData(viewOldShortcode);\n\n const dataNewShortcode = uncollapse(collapse(dataOldShortcode));\n const viewNewShortcode = editor.data.processor.toView(dataNewShortcode).getChild(0);\n const modelNewShortcode = editor.data.toModel(viewNewShortcode, convertContext).getChild(0);\n\n modelWriter.remove(modelShortcode);\n modelWriter.insert(modelNewShortcode, insertPosition);\n modelWriter.setSelection(modelNewShortcode, 'on');\n\n modelShortcode = modelNewShortcode;\n });\n };\n\n showSettingsPopup(argsForPopup);\n }\n}\n","import displaySettings from './settings';\n\nwindow.scDisplaySettings = function scDisplaySettings() {\n const domShortcode = this.closest('shortcode-block, shortcode-inline');\n\n if (domShortcode) {\n displaySettings(domShortcode);\n }\n};\n\nwindow.scBlockAddChildFromParent = function scBlockAddChildFromParent() {\n const { editors } = window.nextgenEditor;\n\n const domShortcode = this.parentNode;\n const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift();\n\n const name = domShortcode.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n\n if (editor) {\n const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode);\n const modelShortcode = editor.editing.mapper.toModelElement(viewShortcode);\n\n const domShortcodeBlockReadOnly = domShortcode.querySelector('shortcode-block-readonly');\n const viewShortcodeBlockReadOnly = editor.editing.view.domConverter.mapDomToView(domShortcodeBlockReadOnly);\n const modelShortcodeBlockReadOnly = editor.editing.mapper.toModelElement(viewShortcodeBlockReadOnly);\n\n editor.model.change((modelWriter) => {\n const insertPosition = modelWriter.createPositionAt(modelShortcodeBlockReadOnly, 0);\n editor.execute(`shortcode_${shortcode.child.name}`, { insertPosition, modelParentShortcode: modelShortcode });\n\n domShortcode.querySelector('.sc-add-child').classList.remove('sc-visible');\n });\n }\n};\n\nwindow.scBlockAddChild = function scBlockAddChild(event, where) {\n const { editors } = window.nextgenEditor;\n\n const domShortcode = this.parentNode;\n const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift();\n\n const name = domShortcode.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n\n if (editor) {\n const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode);\n const modelShortcode = editor.editing.mapper.toModelElement(viewShortcode);\n\n editor.model.change((modelWriter) => {\n let modelParentShortcode = modelShortcode.parent;\n const insertPosition = modelWriter.createPositionAt(modelShortcode, where);\n\n while (modelParentShortcode && modelParentShortcode.name !== 'shortcode-block') {\n modelParentShortcode = modelParentShortcode.parent;\n }\n\n if (modelParentShortcode) {\n editor.execute(`shortcode_${shortcode.name}`, { insertPosition, modelParentShortcode });\n }\n });\n }\n};\n\nwindow.scBlockMoveChild = function scBlockMove(event, where) {\n const { editors } = window.nextgenEditor;\n\n const domShortcode = this.parentNode;\n const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift();\n\n if (editor) {\n const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode);\n const modelShortcode = editor.editing.mapper.toModelElement(viewShortcode);\n\n const domSiblingShortcode = where === 'up'\n ? domShortcode.previousSibling\n : domShortcode.nextSibling;\n\n const viewSiblingShortcode = editor.editing.view.domConverter.mapDomToView(domSiblingShortcode);\n const modelSiblingShortcode = editor.editing.mapper.toModelElement(viewSiblingShortcode);\n\n editor.model.change((modelWriter) => {\n modelWriter.move(modelWriter.createRangeOn(modelShortcode), modelSiblingShortcode, where === 'up' ? 'before' : 'after');\n });\n }\n};\n","import uncollapse from './uncollapse';\n\nwindow.nextgenEditor.addHook('hookMarkdowntoHTML', {\n weight: 50,\n handler(options, input) {\n let output = input;\n\n let shortcodeCounter = 1;\n const openingRegexp = Object.keys(window.nextgenEditor.shortcodes).map((name) => `(\\\\[${name}[^\\\\]]*\\\\])`).join('|');\n\n while (shortcodeCounter > 0) {\n shortcodeCounter = 0;\n\n // eslint-disable-next-line no-loop-func\n Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => {\n const regexp = `(?

)?\\\\[${shortcode.name}(?(=| +)[^\\\\]]*)?\\\\](<\\\\/p>)?(?(((?!(${openingRegexp}|(\\\\[\\\\/${shortcode.name}\\\\]))).)|\\\\n)*)\\\\[\\\\/${shortcode.name}\\\\](?<\\\\/p>)?`;\n\n output = output.replace(new RegExp(regexp, 'g'), (...matches) => {\n shortcodeCounter += 1;\n\n const groups = matches.pop();\n\n let content = shortcode.type === 'block'\n ? groups.content.replace(/

$/, '')\n : groups.content;\n\n const bbcode = Object.keys(shortcode.attributes).reduce((acc, attrName) => acc || (shortcode.attributes[attrName].bbcode && shortcode.attributes[attrName].shorthand && attrName), '');\n const innerHTMLAttribute = Object.keys(shortcode.attributes).reduce((acc, attrName) => acc || (shortcode.attributes[attrName].innerHTML && attrName), '');\n\n let attrGroup = bbcode && groups.attributes && groups.attributes.startsWith('=')\n ? `${bbcode}${groups.attributes}`\n : groups.attributes || '';\n\n if (innerHTMLAttribute) {\n const innerHTML = shortcode.type === 'block'\n ? content.replace(/^

/, '').replace(/<\\/p>$/, '').replace(/^ $/, '')\n : content.replace(/^ $/, '');\n\n attrGroup = attrGroup\n ? `${attrGroup} ${innerHTMLAttribute}=\"${innerHTML}\"`\n : `${innerHTMLAttribute}=\"${innerHTML}\"`;\n\n content = '';\n }\n\n const domAttributes = new DOMParser().parseFromString(`

`, 'text/html').body.firstChild.attributes;\n\n const attributes = Object.keys(shortcode.attributes).reduce((acc, attrName) => {\n const attribute = shortcode.attributes[attrName];\n\n let attrValue = domAttributes.getNamedItem(attrName)\n ? domAttributes.getNamedItem(attrName).value\n : attribute.default.value;\n\n if (attribute.type === Boolean && domAttributes.getNamedItem(attrName)) {\n attrValue = domAttributes.getNamedItem(attrName) !== 'false';\n }\n\n if (attribute.type === Number) {\n attrValue = +attrValue;\n }\n\n acc[attrName] = attrValue;\n\n return acc;\n }, {});\n\n let replacement = '';\n\n const attributesEncoded = encodeURIComponent(JSON.stringify(attributes));\n\n if (shortcode.type === 'block') {\n replacement += ``;\n replacement += content;\n replacement += '';\n }\n\n if (shortcode.type === 'inline') {\n replacement += groups.p1 || '';\n replacement += ``;\n replacement += content;\n replacement += '';\n replacement += groups.p2 || '';\n }\n\n return replacement;\n });\n });\n }\n\n output = uncollapse(output);\n\n return output;\n },\n});\n","import collapse from './collapse';\n\nwindow.nextgenEditor.addHook('hookHTMLtoMarkdown', {\n weight: -50,\n handler(options, editor, input) {\n let output = input;\n\n output = collapse(output);\n\n const domOutput = new DOMParser().parseFromString(output, 'text/html');\n\n let domShortcode = domOutput.querySelector('shortcode-block, shortcode-inline');\n\n while (domShortcode) {\n const name = domShortcode.getAttribute('name');\n const shortcode = window.nextgenEditor.shortcodes[name];\n const attributes = JSON.parse(decodeURIComponent(domShortcode.getAttribute('attributes')));\n\n const innerHTMLAttribute = Object.keys(shortcode.attributes).reduce((acc, attrName) => acc || (shortcode.attributes[attrName].innerHTML && attrName), '');\n\n const attrLine = Object.keys(shortcode.attributes).reduce((acc, attrName) => {\n const attribute = shortcode.attributes[attrName];\n\n if (attribute.type === Boolean) {\n return attributes[attrName]\n ? `${acc} ${attrName}`\n : acc;\n }\n\n if (attributes[attrName] === attribute.default.value && !attribute.default.preserve) {\n return acc;\n }\n\n if (attribute.bbcode && attribute.shorthand) {\n return `=\"${attributes[attrName]}\"${acc}`;\n }\n\n if (attribute.innerHTML) {\n return acc;\n }\n\n return `${acc} ${attrName}=\"${attributes[attrName]}\"`;\n }, '');\n\n if (shortcode.type === 'block') {\n if (domShortcode.innerHTML === '

 

') {\n domShortcode.innerHTML = '';\n }\n\n if (innerHTMLAttribute) {\n domShortcode.outerHTML = `

[${shortcode.realName}${attrLine}]${attributes[innerHTMLAttribute]}[/${shortcode.realName}]

`;\n } else if (domShortcode.innerHTML) {\n domShortcode.outerHTML = `

[${shortcode.realName}${attrLine}]

${domShortcode.innerHTML}

[/${shortcode.realName}]

`;\n } else {\n domShortcode.outerHTML = `

[${shortcode.realName}${attrLine} /]

`;\n }\n }\n\n if (shortcode.type === 'inline') {\n if (domShortcode.innerHTML === ' ') {\n domShortcode.innerHTML = '';\n }\n\n if (innerHTMLAttribute) {\n domShortcode.outerHTML = `[${shortcode.realName}${attrLine}]${attributes[innerHTMLAttribute]}[/${shortcode.realName}]`;\n } else if (domShortcode.innerHTML) {\n domShortcode.outerHTML = `[${shortcode.realName}${attrLine}]${domShortcode.innerHTML}[/${shortcode.realName}]`;\n } else {\n domShortcode.outerHTML = `[${shortcode.realName}${attrLine} /]`;\n }\n }\n\n domShortcode = domOutput.querySelector('shortcode-block, shortcode-inline');\n }\n\n output = domOutput.body.innerHTML;\n\n return output;\n },\n});\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = new WeakMap();\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.github.io/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.github.io/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n concat: function concat(arg) { // eslint-disable-line no-unused-vars\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n throw error;\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.github.io/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.github.io/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.github.io/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.github.io/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.github.io/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (e) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (f) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n if (!options) options = {};\n var method = [][METHOD_NAME];\n var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n var argument0 = has(options, 0) ? options[0] : thrower;\n var argument1 = has(options, 1) ? options[1] : undefined;\n\n return cache[METHOD_NAME] = !!method && !fails(function () {\n if (ACCESSORS && !DESCRIPTORS) return true;\n var O = { length: -1 };\n\n if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n else O[1] = 1;\n\n method.call(O, argument0, argument1);\n });\n};\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.github.io/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar classof = require('../internals/classof-raw');\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar IS_NODE = classof(process) == 'process';\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n } else if (MutationObserver && !IS_IOS) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6)\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = false;\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","module.exports = {};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$
') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n// FF49- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('map');\n\n// `Array.prototype.map` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","window.nextgenEditor.addHook('hookInit', () => {\n Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => {\n shortcode.attributes = shortcode.attributes || {};\n\n if (!shortcode.button) {\n shortcode.button = { label: shortcode.title };\n }\n\n Object.values(shortcode.attributes).forEach((attribute) => {\n if (attribute.default === undefined) {\n attribute.default = '';\n }\n if (typeof attribute.default !== 'object') {\n attribute.default = { value: attribute.default };\n }\n if (attribute.shorthand === undefined) {\n attribute.shorthand = true;\n }\n });\n\n if (shortcode.type === 'block' && !shortcode.titlebar) {\n shortcode.titlebar = () => '';\n }\n if (!shortcode.content) {\n shortcode.content = () => '';\n }\n\n if (shortcode.preserve) {\n if (shortcode.preserve.block) {\n window.nextgenEditor.addVariable('preserveBlockTags', shortcode.preserve.block);\n }\n\n if (shortcode.preserve.inline) {\n window.nextgenEditor.addVariable('preserveInlineTags', shortcode.preserve.inline);\n }\n }\n\n if (!shortcode.parent) {\n window.nextgenEditor.addButton(`shortcode_${shortcode.name}`, {\n command: `shortcode_${shortcode.name}`,\n ...shortcode.button,\n });\n }\n });\n});\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n Function('return this')();\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","var defineProperty = require(\"./defineProperty\");\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread2;","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","// `Symbol.prototype.description` getter\n// https://tc39.github.io/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar classof = require('../internals/classof-raw');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar IS_NODE = classof(process) == 'process';\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE) {\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (V8_VERSION === 66) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true;\n }\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = PromiseConstructor.resolve(1);\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (promise, state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(promise, state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (handler = global['on' + name]) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (promise, state) {\n task.call(global, function () {\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (promise, state) {\n task.call(global, function () {\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, promise, state, unwrap) {\n return function (value) {\n fn(promise, state, value, unwrap);\n };\n};\n\nvar internalReject = function (promise, state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(promise, state, true);\n};\n\nvar internalResolve = function (promise, state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, promise, wrapper, state),\n bind(internalReject, promise, wrapper, state)\n );\n } catch (error) {\n internalReject(promise, wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(promise, state, false);\n }\n } catch (error) {\n internalReject(promise, { done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, this, state), bind(internalReject, this, state));\n } catch (error) {\n internalReject(this, state, error);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n // `Promise.prototype.then` method\n // https://tc39.github.io/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(this, state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.github.io/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, promise, state);\n this.reject = bind(internalReject, promise, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function') {\n nativeThen = NativePromise.prototype.then;\n\n // wrap native Promise#then for native async functions\n redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // wrap fetch result\n if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n // eslint-disable-next-line no-unused-vars\n fetch: function fetch(input /* , init */) {\n return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n }\n });\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.github.io/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.github.io/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.github.io/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.github.io/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","const Widget = window.nextgenEditor.classes.widget.class;\nconst { toWidget, toWidgetEditable } = window.nextgenEditor.classes.widget.utils;\n\nwindow.nextgenEditor.addPlugin('GravShortcodeCoreConvertersBlock', {\n requires: [Widget],\n init() {\n this.editor.model.schema.register('shortcode-block', {\n isBlock: true,\n isObject: true,\n allowWhere: '$block',\n allowContentOf: '$root',\n allowAttributes: [\n 'name',\n 'attributes',\n 'class',\n ],\n });\n\n this.editor.conversion.for('upcast').elementToElement({\n view: 'shortcode-block',\n model(viewElement, { writer }) {\n return writer.createElement('shortcode-block', viewElement.getAttributes());\n },\n });\n\n this.editor.conversion.for('dataDowncast').elementToElement({\n model: 'shortcode-block',\n view(modelElement, { writer }) {\n return writer.createContainerElement('shortcode-block', modelElement.getAttributes());\n },\n });\n\n this.editor.conversion.for('editingDowncast').elementToElement({\n model: 'shortcode-block',\n view(modelElement, { writer }) {\n const container = writer.createContainerElement('shortcode-block', modelElement.getAttributes());\n return toWidget(container, writer);\n },\n });\n\n this.editor.model.schema.register('shortcode-block-editable', {\n isLimit: true,\n allowWhere: '$block',\n allowContentOf: '$root',\n });\n\n this.editor.conversion.for('upcast').elementToElement({\n view: 'shortcode-block-editable',\n model: 'shortcode-block-editable',\n });\n\n this.editor.conversion.for('dataDowncast').elementToElement({\n model: 'shortcode-block-editable',\n view: 'shortcode-block-editable',\n });\n\n this.editor.conversion.for('editingDowncast').elementToElement({\n model: 'shortcode-block-editable',\n view(modelElement, { writer }) {\n const container = writer.createEditableElement('shortcode-block-editable', modelElement.getAttributes());\n return toWidgetEditable(container, writer);\n },\n });\n\n this.editor.model.schema.register('shortcode-block-readonly', {\n isLimit: true,\n allowWhere: '$block',\n allowContentOf: '$root',\n });\n\n this.editor.conversion.elementToElement({\n view: 'shortcode-block-readonly',\n model: 'shortcode-block-readonly',\n });\n },\n});\n\nwindow.nextgenEditor.addPlugin('GravShortcodeCoreConvertersInline', {\n requires: [Widget],\n init() {\n this.editor.model.schema.register('shortcode-inline', {\n isObject: true,\n isInline: true,\n allowWhere: '$text',\n allowContentOf: '$block',\n allowAttributes: [\n 'name',\n 'attributes',\n 'class',\n ],\n });\n\n this.editor.conversion.for('upcast').elementToElement({\n view: 'shortcode-inline',\n model(viewElement, { writer }) {\n return writer.createElement('shortcode-inline', viewElement.getAttributes());\n },\n });\n\n this.editor.conversion.for('dataDowncast').elementToElement({\n model: 'shortcode-inline',\n view(modelElement, { writer }) {\n return writer.createContainerElement('shortcode-inline', modelElement.getAttributes());\n },\n });\n\n this.editor.conversion.for('editingDowncast').elementToElement({\n model: 'shortcode-inline',\n view(modelElement, { writer }) {\n const container = writer.createContainerElement('shortcode-inline', modelElement.getAttributes());\n return toWidget(container, writer);\n },\n });\n\n this.editor.model.schema.register('shortcode-inline-editable', {\n isLimit: true,\n allowWhere: '$text',\n allowContentOf: '$block',\n });\n\n this.editor.conversion.for('upcast').elementToElement({\n view: 'shortcode-inline-editable',\n model: 'shortcode-inline-editable',\n });\n\n this.editor.conversion.for('dataDowncast').elementToElement({\n model: 'shortcode-inline-editable',\n view: 'shortcode-inline-editable',\n });\n\n this.editor.conversion.for('editingDowncast').elementToElement({\n model: 'shortcode-inline-editable',\n view(modelElement, { writer }) {\n const container = writer.createEditableElement('shortcode-inline-editable', modelElement.getAttributes());\n return toWidgetEditable(container, writer);\n },\n });\n\n this.editor.model.schema.register('shortcode-inline-readonly', {\n isLimit: true,\n allowWhere: '$text',\n allowContentOf: '$block',\n });\n\n this.editor.conversion.elementToElement({\n view: 'shortcode-inline-readonly',\n model: 'shortcode-inline-readonly',\n });\n },\n});\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/plugins/shortcode-core/nextgen-editor/package.json b/plugins/shortcode-core/nextgen-editor/package.json new file mode 100644 index 0000000..6a3586f --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/package.json @@ -0,0 +1,24 @@ +{ + "name": "nextgen-editor", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "vue-cli-service serve", + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.13", + "@vue/cli-plugin-eslint": "~4.5.13", + "@vue/cli-service": "~4.5.13", + "@vue/eslint-config-airbnb": "^5.3.0", + "babel-eslint": "^10.1.0", + "directory-named-webpack-plugin": "^4.0.1", + "eslint": "^7.32.0", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-vue": "^7.18.0", + "node-sass": "^6.0.1", + "sass-loader": "^12.1.0" + } +} diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/align/align.js b/plugins/shortcode-core/nextgen-editor/shortcodes/align/align.js new file mode 100644 index 0000000..179dce3 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/align/align.js @@ -0,0 +1,55 @@ +window.nextgenEditor.addHook('hookInit', () => { + window.nextgenEditor.addButtonGroup('shortcode-core-align', { + icon: '', + label: 'SC Align', + }); +}); + +window.nextgenEditor.addShortcode('left', { + type: 'block', + plugin: 'shortcode-core', + title: 'Align Left', + button: { + group: 'shortcode-core-align', + label: 'Align Left', + }, + content() { + return '
{{content_editable}}
'; + }, +}); + +window.nextgenEditor.addShortcode('center', { + type: 'block', + title: 'Align Center', + button: { + group: 'shortcode-core-align', + label: 'Align Center', + }, + content() { + return '
{{content_editable}}
'; + }, +}); + +window.nextgenEditor.addShortcode('right', { + type: 'block', + title: 'Align Right', + button: { + group: 'shortcode-core-align', + label: 'Align Right', + }, + content() { + return '
{{content_editable}}
'; + }, +}); + +window.nextgenEditor.addShortcode('justify', { + type: 'block', + title: 'Justify', + button: { + group: 'shortcode-core-align', + label: 'Justify', + }, + content() { + return '
{{content_editable}}
'; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/color/color.js b/plugins/shortcode-core/nextgen-editor/shortcodes/color/color.js new file mode 100644 index 0000000..d4ef4b1 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/color/color.js @@ -0,0 +1,22 @@ +window.nextgenEditor.addShortcode('color', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Color', + button: { + group: 'shortcode-core', + label: 'Color', + icon: '', + }, + attributes: { + color: { + type: String, + title: 'Color', + bbcode: true, + widget: 'input-text', + default: '', + }, + }, + content({ attributes }) { + return `{{content_editable}}`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/columns/columns.js b/plugins/shortcode-core/nextgen-editor/shortcodes/columns/columns.js new file mode 100644 index 0000000..771e7ed --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/columns/columns.js @@ -0,0 +1,58 @@ +window.nextgenEditor.addShortcode('columns', { + type: 'block', + plugin: 'shortcode-core', + title: 'Columns', + button: { + group: 'shortcode-core', + label: 'Columns', + icon: '', + }, + attributes: { + count: { + type: Number, + title: 'Count', + widget: { + type: 'input-number', + min: 1, + max: 12, + }, + default: 2, + }, + width: { + type: String, + title: 'Width', + widget: 'input-text', + default: 'auto', + }, + gap: { + type: String, + title: 'Gap', + widget: 'input-text', + default: 'normal', + }, + rule: { + type: String, + title: 'Rule', + widget: 'input-text', + default: '', + }, + }, + titlebar({ attributes }) { + return `columns: ${attributes.count}`; + }, + content({ attributes }) { + const styles = [] + .concat([ + `columns:${attributes.count} ${attributes.width}`, + `-moz-columns:${attributes.count} ${attributes.width}`, + `column-gap:${attributes.gap}`, + `-moz-column-gap:${attributes.gap}`, + attributes.rule ? `column-rule:${attributes.rule}` : null, + attributes.rule ? `-moz-column-rule:${attributes.rule}` : null, + ]) + .filter((item) => !!item) + .join(';'); + + return `
{{content_editable}}
`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/details/details.css b/plugins/shortcode-core/nextgen-editor/shortcodes/details/details.css new file mode 100644 index 0000000..efecd45 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/details/details.css @@ -0,0 +1,8 @@ +shortcode-block[name="details"] summary { + margin: 8px 8px; +} + +shortcode-block[name="details"] summary > p { + display: inline; + margin: 0; +} diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/details/details.js b/plugins/shortcode-core/nextgen-editor/shortcodes/details/details.js new file mode 100644 index 0000000..4109ed6 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/details/details.js @@ -0,0 +1,50 @@ +window.nextgenEditor.addShortcode('details', { + type: 'block', + plugin: 'shortcode-core', + title: 'Details', + button: { + group: 'shortcode-core', + label: 'Details', + icon: '', + }, + attributes: { + summary: { + type: String, + title: 'Summary', + bbcode: true, + widget: 'input-text', + default: '', + }, + class: { + type: String, + title: 'Class', + widget: 'input-text', + default: '', + }, + }, + titlebar({ attributes }) { + return attributes.class + ? `class: ${attributes.class}` + : ''; + }, + content({ attributes }) { + let output = ''; + + output += `
`; + + if (attributes.summary) { + output += `${attributes.summary}`; + } + + output += '{{content_editable}}'; + output += '
'; + + return output; + }, + preserve: { + block: [ + 'details', + 'summary', + ], + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/div/div.js b/plugins/shortcode-core/nextgen-editor/shortcodes/div/div.js new file mode 100644 index 0000000..c1db19c --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/div/div.js @@ -0,0 +1,47 @@ +window.nextgenEditor.addShortcode('div', { + type: 'block', + plugin: 'shortcode-core', + title: 'Div', + button: { + group: 'shortcode-core', + label: 'Div', + icon: '', + }, + attributes: { + id: { + type: String, + title: 'ID', + widget: 'input-text', + default: '', + }, + class: { + type: String, + title: 'Class', + widget: 'input-text', + default: '', + }, + style: { + type: String, + title: 'Style', + widget: 'input-text', + default: '', + }, + }, + titlebar({ attributes }) { + return [] + .concat([ + attributes.id ? `id: ${attributes.id}` : null, + attributes.class ? `class: ${attributes.class}` : null, + attributes.style ? `style: ${attributes.style}` : null, + ]) + .filter((item) => !!item) + .join(', '); + }, + content({ attributes }) { + const id = attributes.id || ''; + const cclass = attributes.class || ''; + const style = attributes.style || ''; + + return `
{{content_editable}}
`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/figure/figure.js b/plugins/shortcode-core/nextgen-editor/shortcodes/figure/figure.js new file mode 100644 index 0000000..18c32d8 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/figure/figure.js @@ -0,0 +1,46 @@ +window.nextgenEditor.addShortcode('figure', { + type: 'block', + plugin: 'shortcode-core', + title: 'Figure', + button: { + group: 'shortcode-core', + label: 'Figure', + icon: '', + }, + attributes: { + id: { + type: String, + title: 'ID', + widget: 'input-text', + default: '', + }, + class: { + type: String, + title: 'Class', + widget: 'input-text', + default: '', + }, + caption: { + type: String, + title: 'Caption', + widget: 'input-text', + default: '', + }, + }, + titlebar({attributes }) { + return [] + .concat([ + attributes.id ? `id: ${attributes.id}` : null, + attributes.class ? `class: ${attributes.class}` : null, + ]) + .filter((item) => !!item) + .join(', '); + }, + content({ attributes }) { + const id = attributes.id || ''; + const cclass = attributes.class || ''; + const caption = attributes.caption || ''; + + return `
{{content_editable}}
${caption}
`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/fontawesome/fontawesome.js b/plugins/shortcode-core/nextgen-editor/shortcodes/fontawesome/fontawesome.js new file mode 100644 index 0000000..222b9ae --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/fontawesome/fontawesome.js @@ -0,0 +1,50 @@ +window.nextgenEditor.addShortcode('fa', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Font Awesome', + wrapOnInsert: false, + button: { + group: 'shortcode-core', + label: 'Font Awesome', + icon: '', + }, + attributes: { + icon: { + type: String, + title: 'Icon', + bbcode: true, + widget: 'input-text', + default: 'grav', + }, + extras: { + type: String, + title: 'Extras', + widget: 'input-text', + default: '', + }, + }, + content({ attributes }) { + let faclass = 'fa'; + + let icon = attributes.icon && !attributes.icon.startsWith('fa-') + ? `fa-${attributes.icon}` + : attributes.icon; + + if (attributes.extras) { + attributes.extras.split(',').forEach((extra) => { + if (extra) { + if (['fab', 'fal', 'fas', 'far', 'fad'].includes(extra)) { + faclass = extra; + return; + } + + icon += !extra.startsWith('fa-') + ? ` fa-${extra}` + : ` ${extra}`; + } + }); + } + + return ``; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/headers/headers.css b/plugins/shortcode-core/nextgen-editor/shortcodes/headers/headers.css new file mode 100644 index 0000000..b525e94 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/headers/headers.css @@ -0,0 +1,32 @@ +shortcode-block[name="h1"] .sc-content, +shortcode-block[name="h2"] .sc-content, +shortcode-block[name="h3"] .sc-content, +shortcode-block[name="h4"] .sc-content, +shortcode-block[name="h5"] .sc-content, +shortcode-block[name="h6"] .sc-content { + font-weight: 700; +} + +shortcode-block[name="h1"] .sc-content { + font-size: 30px; +} + +shortcode-block[name="h2"] .sc-content { + font-size: 24px; +} + +shortcode-block[name="h3"] .sc-content { + font-size: 20px; +} + +shortcode-block[name="h4"] .sc-content { + font-size: 18px; +} + +shortcode-block[name="h5"] .sc-content { + font-size: 16px; +} + +shortcode-block[name="h6"] .sc-content { + font-size: 14px; +} diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/headers/headers.js b/plugins/shortcode-core/nextgen-editor/shortcodes/headers/headers.js new file mode 100644 index 0000000..b5c5973 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/headers/headers.js @@ -0,0 +1,47 @@ +window.nextgenEditor.addHook('hookInit', () => { + window.nextgenEditor.addButtonGroup('shortcode-core-headers', { + icon: '', + label: 'SC Headers', + }); +}); + +for (let i = 1; i <= 6; i += 1) { + window.nextgenEditor.addShortcode(`h${i}`, { + type: 'block', + plugin: 'shortcode-core', + title: `H${i}`, + button: { + group: 'shortcode-core-headers', + label: `H${i}`, + }, + attributes: { + id: { + type: String, + title: 'ID', + widget: 'input-text', + default: '', + }, + class: { + type: String, + title: 'Class', + widget: 'input-text', + default: '', + }, + }, + titlebar({ attributes }) { + return [] + .concat([ + attributes.id ? `id: ${attributes.id}` : null, + attributes.class ? `class: ${attributes.class}` : null, + ]) + .filter((item) => !!item) + .join(', '); + }, + content({ attributes }) { + const id = attributes.id || ''; + const cclass = attributes.class || ''; + + return `
{{content_editable}}
`; + }, + }); +} diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/language/language.js b/plugins/shortcode-core/nextgen-editor/shortcodes/language/language.js new file mode 100644 index 0000000..7806879 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/language/language.js @@ -0,0 +1,25 @@ +window.nextgenEditor.addShortcode('lang', { + type: 'block', + plugin: 'shortcode-core', + title: 'Language', + button: { + group: 'shortcode-core', + label: 'Language', + icon: '', + }, + attributes: { + lang: { + type: String, + title: 'Language', + bbcode: true, + widget: 'input-text', + default: 'en', + }, + }, + titlebar({ attributes }) { + return `language: ${attributes.lang}`; + }, + content() { + return '{{content_editable}}'; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/lorem/lorem.js b/plugins/shortcode-core/nextgen-editor/shortcodes/lorem/lorem.js new file mode 100644 index 0000000..10308be --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/lorem/lorem.js @@ -0,0 +1,80 @@ +const sentence = 'Lorem ipsum dolor sit amet consectetur adipiscing elit, molestie tortor cubilia eu facilisi ex varius, convallis pretium dapibus fusce porta ligula.'; +const words = [].concat(...Array(1000).fill(sentence.toLowerCase().replace(/[.|,]/g, '').split(' '))); +const paragraph = Array(2).fill(sentence).join(' '); + +window.nextgenEditor.addShortcode('lorem', { + type: 'block', + plugin: 'shortcode-core', + title: 'Lorem', + wrapOnInsert: false, + button: { + group: 'shortcode-core', + label: 'Lorem', + icon: '', + }, + attributes: { + p: { + type: Number, + title: 'Paragraphs', + bbcode: true, + widget: { + type: 'input-number', + min: 0, + max: 10, + }, + default: 2, + }, + tag: { + type: String, + title: 'Tag', + widget: 'input-text', + default: 'p', + }, + s: { + type: Number, + title: 'Sentences', + widget: 'input-number', + default: 0, + }, + w: { + type: Number, + title: 'Words', + widget: 'input-number', + default: 0, + }, + }, + titlebar({ attributes }) { + if (attributes.w) { + return `words: ${attributes.w}`; + } + + if (attributes.s) { + return `sentences: ${attributes.s}`; + } + + if (attributes.p) { + return `paragraphs: ${attributes.p}`; + } + + return ''; + }, + content({ attributes }) { + let output = ''; + + output += '
'; + + if (attributes.w) { + output += words.slice(0, attributes.w).join(' '); + } else if (attributes.s) { + output += Array(attributes.s).fill(sentence).join(' '); + } else if (attributes.p) { + [...Array(attributes.p)].forEach(() => { + output += `

${paragraph}

`; + }); + } + + output += '
'; + + return output; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/mark/mark.css b/plugins/shortcode-core/nextgen-editor/shortcodes/mark/mark.css new file mode 100644 index 0000000..9a52c5e --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/mark/mark.css @@ -0,0 +1,7 @@ +shortcode-inline[name="mark"] > .sc-content > span { + background: #ffe9b3; + border-bottom: .05rem solid #ffd367; + border-radius: .1rem; + color: #50596c; + padding: .05rem .1rem 0; +} \ No newline at end of file diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/mark/mark.js b/plugins/shortcode-core/nextgen-editor/shortcodes/mark/mark.js new file mode 100644 index 0000000..903a1e0 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/mark/mark.js @@ -0,0 +1,49 @@ +window.nextgenEditor.addShortcode('mark', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Mark', + button: { + group: 'shortcode-core', + label: 'Mark', + icon: '', + }, + attributes: { + style: { + type: String, + title: 'Style', + bbcode: true, + widget: { + type: 'radios', + values: [ + { value: 'inline', label: 'Inline' }, + { value: 'block', label: 'Block' }, + ], + }, + default: 'inline', + }, + class: { + type: String, + title: 'Class', + widget: 'input-text', + default: '', + }, + }, + titlebar({ attributes }) { + return [] + .concat([ + attributes.style ? `style: ${attributes.style}` : null, + attributes.class ? `class: ${attributes.class}` : null, + ]) + .filter((item) => !!item) + .join(', '); + }, + content({ attributes }) { + const style = attributes.style === 'block' + ? 'display:block' + : ''; + + const cclass = `mark-class-${attributes.class}`; + + return `{{content_editable}}`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/notice/notice.css b/plugins/shortcode-core/nextgen-editor/shortcodes/notice/notice.css new file mode 100644 index 0000000..8f0d2e8 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/notice/notice.css @@ -0,0 +1,63 @@ +shortcode-block[name="notice"] .sc-notice { + color: #666; + font-size: 16px; + line-height: 24px; + margin: 8px 8px; + position: relative; +} + +shortcode-block[name="notice"] .sc-notice .sc-notice-wrapper { + padding: 4px 12px; +} + +shortcode-block[name="notice"] .sc-notice .sc-notice-wrapper:before { + color: rgb(255, 255, 255); + content: ""; + font-family: FontAwesome; + left: 10px; + position: absolute; + top: 2px; +} + +shortcode-block[name="notice"] .sc-notice .sc-notice-wrapper:after { + color: #fff; + left: 30px; + position: absolute; + top: 3px; +} + +shortcode-block[name="notice"] .sc-notice-info .sc-notice-wrapper { + border-top: 30px solid #F0B37E; + background: #FFF2DB; +} + +shortcode-block[name="notice"] .sc-notice-warning .sc-notice-wrapper { + border-top: 30px solid #DF6F6C; + background: #FAE2E2; +} + +shortcode-block[name="notice"] .sc-notice-note .sc-notice-wrapper { + border-top: 30px solid #6AB0DE; + background: #E7F2FA; +} + +shortcode-block[name="notice"] .sc-notice-tip .sc-notice-wrapper { + border-top: 30px solid #77C577; + background: #E6F9E6; +} + +shortcode-block[name="notice"] .sc-notice-info .sc-notice-wrapper:after { + content: 'Info'; +} + +shortcode-block[name="notice"] .sc-notice-warning .sc-notice-wrapper:after { + content: 'Warning'; +} + +shortcode-block[name="notice"] .sc-notice-note .sc-notice-wrapper:after { + content: 'Note'; +} + +shortcode-block[name="notice"] .sc-notice-tip .sc-notice-wrapper:after { + content: 'Tip'; +} diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/notice/notice.js b/plugins/shortcode-core/nextgen-editor/shortcodes/notice/notice.js new file mode 100644 index 0000000..00a9601 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/notice/notice.js @@ -0,0 +1,41 @@ +window.nextgenEditor.addShortcode('notice', { + type: 'block', + plugin: 'shortcode-core', + title: 'Notice', + button: { + group: 'shortcode-core', + label: 'Notice', + icon: '', + }, + attributes: { + notice: { + type: String, + title: 'Type', + bbcode: true, + widget: { + type: 'radios', + values: [ + { value: 'info', label: 'Info' }, + { value: 'warning', label: 'Warning' }, + { value: 'note', label: 'Note' }, + { value: 'tip', label: 'Tip' }, + ], + }, + default: 'info', + }, + }, + titlebar({ attributes }) { + const notice = attributes.notice + ? this.attributes.notice.widget.values.find((item) => item.value === attributes.notice) + : ''; + + const type = notice + ? notice.label + : ''; + + return `type: ${type}`; + }, + content({ attributes }) { + return `
{{content_editable}}
`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/raw/raw.js b/plugins/shortcode-core/nextgen-editor/shortcodes/raw/raw.js new file mode 100644 index 0000000..bb74c98 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/raw/raw.js @@ -0,0 +1,13 @@ +window.nextgenEditor.addShortcode('raw', { + type: 'block', + plugin: 'shortcode-core', + title: 'Raw', + button: { + group: 'shortcode-core', + label: 'Raw', + icon: '', + }, + content() { + return '{{content_editable}}'; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/safe-email/safe-email.js b/plugins/shortcode-core/nextgen-editor/shortcodes/safe-email/safe-email.js new file mode 100644 index 0000000..7314813 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/safe-email/safe-email.js @@ -0,0 +1,48 @@ +window.nextgenEditor.addShortcode('safe-email', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Safe Email', + button: { + group: 'shortcode-core', + label: 'Safe Email', + icon: '', + }, + attributes: { + icon: { + type: String, + title: 'Icon', + bbcode: true, + widget: 'input-text', + default: 'grav', + }, + autolink: { + type: String, + title: 'Autolink', + widget: { + type: 'checkbox', + valueType: String, + label: 'Yes', + }, + default: 'false', + }, + }, + content({ attributes }) { + let output = ''; + + if (attributes.autolink === 'true') { + output += ''; + } + + if (attributes.icon) { + output += ``; + } + + output += '{{content_editable}}'; + + if (attributes.autolink === 'true') { + output += ''; + } + + return output; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/section/section.js b/plugins/shortcode-core/nextgen-editor/shortcodes/section/section.js new file mode 100644 index 0000000..f8d5262 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/section/section.js @@ -0,0 +1,26 @@ +window.nextgenEditor.addShortcode('section', { + type: 'block', + plugin: 'shortcode-core', + title: 'Section', + button: { + group: 'shortcode-core', + label: 'Section', + icon: '', + }, + attributes: { + name: { + type: String, + title: 'Name', + widget: 'input-text', + default: '', + }, + }, + titlebar({ attributes }) { + return attributes.name + ? `name: ${attributes.name}` + : ''; + }, + content() { + return '{{content_editable}}'; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/shortcode-core.js b/plugins/shortcode-core/nextgen-editor/shortcodes/shortcode-core.js new file mode 100644 index 0000000..0419893 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/shortcode-core.js @@ -0,0 +1,10 @@ +window.nextgenEditor.addHook('hookInit', () => { + window.nextgenEditor.addShortcodePlugin('shortcode-core', { + title: 'Shortcode Core', + }); + + window.nextgenEditor.addButtonGroup('shortcode-core', { + icon: '', + label: 'Shortcode Core', + }); +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/size/size.js b/plugins/shortcode-core/nextgen-editor/shortcodes/size/size.js new file mode 100644 index 0000000..6f4fd90 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/size/size.js @@ -0,0 +1,26 @@ +window.nextgenEditor.addShortcode('size', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Font Size', + button: { + group: 'shortcode-core', + label: 'Font Size', + icon: '', + }, + attributes: { + size: { + type: String, + title: 'Size', + bbcode: true, + widget: 'input-text', + default: '14', + }, + }, + content({ attributes }) { + const size = !Number.isNaN(+attributes.size) + ? `${attributes.size}px` + : attributes.size; + + return `{{content_editable}}`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/span/span.js b/plugins/shortcode-core/nextgen-editor/shortcodes/span/span.js new file mode 100644 index 0000000..2e8dd8e --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/span/span.js @@ -0,0 +1,37 @@ +window.nextgenEditor.addShortcode('span', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Span', + button: { + group: 'shortcode-core', + label: 'Span', + icon: '', + }, + attributes: { + id: { + type: String, + title: 'ID', + widget: 'input-text', + default: '', + }, + class: { + type: String, + title: 'Class', + widget: 'input-text', + default: '', + }, + style: { + type: String, + title: 'Style', + widget: 'input-text', + default: '', + }, + }, + content({ attributes }) { + const id = attributes.id || ''; + const cclass = attributes.class || ''; + const style = attributes.style || ''; + + return `{{content_editable}}`; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/shortcodes/u/u.js b/plugins/shortcode-core/nextgen-editor/shortcodes/u/u.js new file mode 100644 index 0000000..7a2c62e --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/shortcodes/u/u.js @@ -0,0 +1,13 @@ +window.nextgenEditor.addShortcode('u', { + type: 'inline', + plugin: 'shortcode-core', + title: 'Underline', + button: { + group: 'shortcode-core', + label: 'Underline', + icon: '', + }, + content() { + return '{{content_editable}}'; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/collapse.js b/plugins/shortcode-core/nextgen-editor/src/collapse.js new file mode 100644 index 0000000..eb55bdd --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/collapse.js @@ -0,0 +1,30 @@ +export default function collapse(input) { + let output = input; + + output = output.replace(/
((((?!(<\/figure>)).)|\n)*)<\/figure>/gm, '$1'); + + const domOutput = new DOMParser().parseFromString(output, 'text/html'); + + [...domOutput.querySelectorAll('shortcode-block, shortcode-inline')].forEach((domShortcode) => { + domShortcode.setAttribute('sc-rendered', false); + }); + + let domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]'); + + while (domShortcode) { + const name = domShortcode.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + + domShortcode.removeAttribute('class'); + domShortcode.removeAttribute('sc-rendered'); + + const domInnerContent = domShortcode.querySelector(`shortcode-${shortcode.type}-editable, shortcode-${shortcode.type}-readonly`); + domShortcode.innerHTML = (domInnerContent && domInnerContent.innerHTML) || ''; + + domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]'); + } + + output = domOutput.body.innerHTML; + + return output; +} diff --git a/plugins/shortcode-core/nextgen-editor/src/command.js b/plugins/shortcode-core/nextgen-editor/src/command.js new file mode 100644 index 0000000..90ea4c2 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/command.js @@ -0,0 +1,153 @@ +import collapse from './collapse'; +import uncollapse from './uncollapse'; + +const Command = window.nextgenEditor.classes.core.command.class; + +window.nextgenEditor.addPlugin('GravShortcodeCoreCommand', { + init() { + Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => { + const commandName = `shortcode_${shortcode.name}`; + + class GravShortcodeCoreCommand extends Command { + execute(args) { + this.editor.model.change((modelWriter) => { + let dataShortcode = ''; + const argsForUncollapse = {}; + + const wrapOnInsert = !shortcode.child && !shortcode.parent + ? shortcode.wrapOnInsert !== undefined + ? shortcode.wrapOnInsert + : true + : false; + + const selectedBlocks = [...this.editor.model.document.selection.getSelectedBlocks()]; + const selectedItems = [...this.editor.model.document.selection.getFirstRange().getItems({ shallow: true })]; + + const firstSelectedBlock = selectedBlocks[0]; + const firstBlockSelectedItems = selectedItems.filter((item) => item.parent === firstSelectedBlock); + + const attributes = Object.keys(shortcode.attributes).reduce((acc, attrName) => { + acc[attrName] = shortcode.attributes[attrName].default.value; + return acc; + }, {}); + + dataShortcode += ``; + + if (wrapOnInsert) { + if (shortcode.type === 'block') { + const modelSelectedBlocks = modelWriter.createDocumentFragment(); + selectedBlocks.forEach((block) => modelWriter.append(modelWriter.cloneElement(block), modelSelectedBlocks)); + + const viewSelectedBlocks = this.editor.data.toView(modelSelectedBlocks); + const dataSelectedBlocks = this.editor.data.processor.toData(viewSelectedBlocks); + + dataShortcode += collapse(dataSelectedBlocks); + } + + if (shortcode.type === 'inline') { + const modelSelectedBlocks = modelWriter.createDocumentFragment(); + + firstBlockSelectedItems.forEach((item) => { + const block = item.textNode + ? modelWriter.createText(item.data) + : modelWriter.cloneElement(item); + + modelWriter.append(block, modelSelectedBlocks); + }); + + const viewSelectedBlocks = this.editor.data.toView(modelSelectedBlocks); + const dataSelectedBlocks = this.editor.data.processor.toData(viewSelectedBlocks); + + dataShortcode += collapse(dataSelectedBlocks); + } + } + + if (shortcode.parent) { + dataShortcode += '

 

'; + } + + dataShortcode += `
`; + + if (shortcode.parent) { + if (args && args.modelParentShortcode) { + argsForUncollapse.parentAttributes = JSON.parse(decodeURIComponent(args.modelParentShortcode.getAttribute('attributes'))); + } + } + + dataShortcode = uncollapse(dataShortcode, argsForUncollapse); + + const convertContext = shortcode.type === 'inline' + ? '$block' + : '$root'; + + const viewShortcode = this.editor.data.processor.toView(dataShortcode).getChild(0); + const modelShortcode = this.editor.data.toModel(viewShortcode, convertContext).getChild(0); + + let insertPosition = modelWriter.createPositionAt(this.editor.model.document.getRoot(), 0); + + if (!args || !args.insertPosition) { + if (shortcode.type === 'block') { + const firstBlock = selectedBlocks[0]; + const lastBlock = selectedBlocks[selectedBlocks.length - 1]; + + if (wrapOnInsert) { + insertPosition = modelWriter.createPositionBefore(firstBlock); + + modelWriter.remove( + modelWriter.createRange( + modelWriter.createPositionBefore(firstBlock), + modelWriter.createPositionAfter(lastBlock), + ), + ); + } else { + insertPosition = modelWriter.createPositionAfter(lastBlock); + + if (lastBlock && lastBlock.name === 'paragraph' && lastBlock.childCount === 0) { + insertPosition = modelWriter.createPositionBefore(lastBlock); + modelWriter.remove(lastBlock); + } + } + } + + if (shortcode.type === 'inline') { + const firstItem = firstBlockSelectedItems.length + ? firstBlockSelectedItems[0] + : null; + + const lastItem = firstBlockSelectedItems.length + ? firstBlockSelectedItems[firstBlockSelectedItems.length - 1] + : null; + + if (wrapOnInsert) { + insertPosition = firstItem + ? modelWriter.createPositionBefore(firstItem) + : this.editor.model.document.selection.getFirstPosition(); + + if (firstItem) { + modelWriter.remove( + modelWriter.createRange( + modelWriter.createPositionBefore(firstItem), + modelWriter.createPositionAfter(lastItem), + ), + ); + } + } else { + insertPosition = lastItem + ? modelWriter.createPositionAfter(lastItem) + : this.editor.model.document.selection.getFirstPosition(); + } + } + } else { + insertPosition = args.insertPosition; + } + + modelWriter.insert(modelShortcode, insertPosition); + modelWriter.setSelection(modelShortcode, 'on'); + }); + } + } + + this.editor.commands.add(commandName, new GravShortcodeCoreCommand(this.editor)); + }); + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/converters.js b/plugins/shortcode-core/nextgen-editor/src/converters.js new file mode 100644 index 0000000..4d6d3a3 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/converters.js @@ -0,0 +1,150 @@ +const Widget = window.nextgenEditor.classes.widget.class; +const { toWidget, toWidgetEditable } = window.nextgenEditor.classes.widget.utils; + +window.nextgenEditor.addPlugin('GravShortcodeCoreConvertersBlock', { + requires: [Widget], + init() { + this.editor.model.schema.register('shortcode-block', { + isBlock: true, + isObject: true, + allowWhere: '$block', + allowContentOf: '$root', + allowAttributes: [ + 'name', + 'attributes', + 'class', + ], + }); + + this.editor.conversion.for('upcast').elementToElement({ + view: 'shortcode-block', + model(viewElement, { writer }) { + return writer.createElement('shortcode-block', viewElement.getAttributes()); + }, + }); + + this.editor.conversion.for('dataDowncast').elementToElement({ + model: 'shortcode-block', + view(modelElement, { writer }) { + return writer.createContainerElement('shortcode-block', modelElement.getAttributes()); + }, + }); + + this.editor.conversion.for('editingDowncast').elementToElement({ + model: 'shortcode-block', + view(modelElement, { writer }) { + const container = writer.createContainerElement('shortcode-block', modelElement.getAttributes()); + return toWidget(container, writer); + }, + }); + + this.editor.model.schema.register('shortcode-block-editable', { + isLimit: true, + allowWhere: '$block', + allowContentOf: '$root', + }); + + this.editor.conversion.for('upcast').elementToElement({ + view: 'shortcode-block-editable', + model: 'shortcode-block-editable', + }); + + this.editor.conversion.for('dataDowncast').elementToElement({ + model: 'shortcode-block-editable', + view: 'shortcode-block-editable', + }); + + this.editor.conversion.for('editingDowncast').elementToElement({ + model: 'shortcode-block-editable', + view(modelElement, { writer }) { + const container = writer.createEditableElement('shortcode-block-editable', modelElement.getAttributes()); + return toWidgetEditable(container, writer); + }, + }); + + this.editor.model.schema.register('shortcode-block-readonly', { + isLimit: true, + allowWhere: '$block', + allowContentOf: '$root', + }); + + this.editor.conversion.elementToElement({ + view: 'shortcode-block-readonly', + model: 'shortcode-block-readonly', + }); + }, +}); + +window.nextgenEditor.addPlugin('GravShortcodeCoreConvertersInline', { + requires: [Widget], + init() { + this.editor.model.schema.register('shortcode-inline', { + isObject: true, + isInline: true, + allowWhere: '$text', + allowContentOf: '$block', + allowAttributes: [ + 'name', + 'attributes', + 'class', + ], + }); + + this.editor.conversion.for('upcast').elementToElement({ + view: 'shortcode-inline', + model(viewElement, { writer }) { + return writer.createElement('shortcode-inline', viewElement.getAttributes()); + }, + }); + + this.editor.conversion.for('dataDowncast').elementToElement({ + model: 'shortcode-inline', + view(modelElement, { writer }) { + return writer.createContainerElement('shortcode-inline', modelElement.getAttributes()); + }, + }); + + this.editor.conversion.for('editingDowncast').elementToElement({ + model: 'shortcode-inline', + view(modelElement, { writer }) { + const container = writer.createContainerElement('shortcode-inline', modelElement.getAttributes()); + return toWidget(container, writer); + }, + }); + + this.editor.model.schema.register('shortcode-inline-editable', { + isLimit: true, + allowWhere: '$text', + allowContentOf: '$block', + }); + + this.editor.conversion.for('upcast').elementToElement({ + view: 'shortcode-inline-editable', + model: 'shortcode-inline-editable', + }); + + this.editor.conversion.for('dataDowncast').elementToElement({ + model: 'shortcode-inline-editable', + view: 'shortcode-inline-editable', + }); + + this.editor.conversion.for('editingDowncast').elementToElement({ + model: 'shortcode-inline-editable', + view(modelElement, { writer }) { + const container = writer.createEditableElement('shortcode-inline-editable', modelElement.getAttributes()); + return toWidgetEditable(container, writer); + }, + }); + + this.editor.model.schema.register('shortcode-inline-readonly', { + isLimit: true, + allowWhere: '$text', + allowContentOf: '$block', + }); + + this.editor.conversion.elementToElement({ + view: 'shortcode-inline-readonly', + model: 'shortcode-inline-readonly', + }); + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/events.js b/plugins/shortcode-core/nextgen-editor/src/events.js new file mode 100644 index 0000000..6b4fdaf --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/events.js @@ -0,0 +1,86 @@ +import displaySettings from './settings'; + +window.scDisplaySettings = function scDisplaySettings() { + const domShortcode = this.closest('shortcode-block, shortcode-inline'); + + if (domShortcode) { + displaySettings(domShortcode); + } +}; + +window.scBlockAddChildFromParent = function scBlockAddChildFromParent() { + const { editors } = window.nextgenEditor; + + const domShortcode = this.parentNode; + const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift(); + + const name = domShortcode.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + + if (editor) { + const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode); + const modelShortcode = editor.editing.mapper.toModelElement(viewShortcode); + + const domShortcodeBlockReadOnly = domShortcode.querySelector('shortcode-block-readonly'); + const viewShortcodeBlockReadOnly = editor.editing.view.domConverter.mapDomToView(domShortcodeBlockReadOnly); + const modelShortcodeBlockReadOnly = editor.editing.mapper.toModelElement(viewShortcodeBlockReadOnly); + + editor.model.change((modelWriter) => { + const insertPosition = modelWriter.createPositionAt(modelShortcodeBlockReadOnly, 0); + editor.execute(`shortcode_${shortcode.child.name}`, { insertPosition, modelParentShortcode: modelShortcode }); + + domShortcode.querySelector('.sc-add-child').classList.remove('sc-visible'); + }); + } +}; + +window.scBlockAddChild = function scBlockAddChild(event, where) { + const { editors } = window.nextgenEditor; + + const domShortcode = this.parentNode; + const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift(); + + const name = domShortcode.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + + if (editor) { + const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode); + const modelShortcode = editor.editing.mapper.toModelElement(viewShortcode); + + editor.model.change((modelWriter) => { + let modelParentShortcode = modelShortcode.parent; + const insertPosition = modelWriter.createPositionAt(modelShortcode, where); + + while (modelParentShortcode && modelParentShortcode.name !== 'shortcode-block') { + modelParentShortcode = modelParentShortcode.parent; + } + + if (modelParentShortcode) { + editor.execute(`shortcode_${shortcode.name}`, { insertPosition, modelParentShortcode }); + } + }); + } +}; + +window.scBlockMoveChild = function scBlockMove(event, where) { + const { editors } = window.nextgenEditor; + + const domShortcode = this.parentNode; + const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift(); + + if (editor) { + const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode); + const modelShortcode = editor.editing.mapper.toModelElement(viewShortcode); + + const domSiblingShortcode = where === 'up' + ? domShortcode.previousSibling + : domShortcode.nextSibling; + + const viewSiblingShortcode = editor.editing.view.domConverter.mapDomToView(domSiblingShortcode); + const modelSiblingShortcode = editor.editing.mapper.toModelElement(viewSiblingShortcode); + + editor.model.change((modelWriter) => { + modelWriter.move(modelWriter.createRangeOn(modelShortcode), modelSiblingShortcode, where === 'up' ? 'before' : 'after'); + }); + } +}; diff --git a/plugins/shortcode-core/nextgen-editor/src/init.js b/plugins/shortcode-core/nextgen-editor/src/init.js new file mode 100644 index 0000000..50c2e25 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/init.js @@ -0,0 +1,45 @@ +window.nextgenEditor.addHook('hookInit', () => { + Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => { + shortcode.attributes = shortcode.attributes || {}; + + if (!shortcode.button) { + shortcode.button = { label: shortcode.title }; + } + + Object.values(shortcode.attributes).forEach((attribute) => { + if (attribute.default === undefined) { + attribute.default = ''; + } + if (typeof attribute.default !== 'object') { + attribute.default = { value: attribute.default }; + } + if (attribute.shorthand === undefined) { + attribute.shorthand = true; + } + }); + + if (shortcode.type === 'block' && !shortcode.titlebar) { + shortcode.titlebar = () => ''; + } + if (!shortcode.content) { + shortcode.content = () => ''; + } + + if (shortcode.preserve) { + if (shortcode.preserve.block) { + window.nextgenEditor.addVariable('preserveBlockTags', shortcode.preserve.block); + } + + if (shortcode.preserve.inline) { + window.nextgenEditor.addVariable('preserveInlineTags', shortcode.preserve.inline); + } + } + + if (!shortcode.parent) { + window.nextgenEditor.addButton(`shortcode_${shortcode.name}`, { + command: `shortcode_${shortcode.name}`, + ...shortcode.button, + }); + } + }); +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/main.css b/plugins/shortcode-core/nextgen-editor/src/main.css new file mode 100644 index 0000000..9639e2f --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/main.css @@ -0,0 +1,278 @@ +shortcode-block { + background: #fff; + border: 1px solid #ccc; + display: block; + margin: 16px 0; +} + +#admin-main .ck.ck-editor__editable_inline > :first-child { + margin-top: 16px; +} +#admin-main .ck.ck-editor__editable_inline > :last-child { + margin-bottom: 16px; +} + +#admin-main .ck-editor shortcode-block.ck-shortcode-child:hover { + outline-color: #1f89e5; +} + +#admin-main .ck-editor shortcode-block > .sc-header > .sc-title > p, +#admin-main .ck-editor shortcode-block > .sc-header > .sc-titlebar > p, +#admin-main .ck-editor shortcode-block > .sc-header > .sc-settings > p, +#admin-main .ck-editor shortcode-block > .sc-add > p, +#admin-main .ck-editor shortcode-block > .sc-move > p { + margin: 0; +} + +shortcode-block > .sc-header { + align-items: center; + border-bottom: 1px solid #ccc; + display: flex; + font-size: 14px; + line-height: 1.5; + padding: 8px 8px; +} + +shortcode-block > .sc-header > .sc-title > p > .sc-value { + font-weight: 700; +} + +shortcode-block > .sc-header > .sc-titlebar { + margin-left: 24px; +} + +shortcode-block > .sc-header > .sc-settings { + color: #ffc83d; + cursor: pointer; + font-size: 0; + line-height: 0; + margin-left: auto; + opacity: 0; + transition: opacity .2s ease, color .2s ease; +} + +shortcode-block > .sc-header > .sc-settings:hover, +shortcode-block.ck-shortcode-child > .sc-header > .sc-settings, +shortcode-block.ck-widget_selected > .sc-header > .sc-settings { + color: #1f89e5; +} + +shortcode-block.ck-widget_selected > .sc-header > .sc-settings:hover, +shortcode-block.ck-shortcode-child > .sc-header > .sc-settings:hover { + opacity: .5 +} + +shortcode-block:hover > .sc-header > .sc-settings, +shortcode-block.ck-widget_selected > .sc-header > .sc-settings { + opacity: 1; +} + +shortcode-block > .sc-header > .sc-settings > p > svg { + height: 24px; + width: 24px; +} + +shortcode-block-editable, +shortcode-block-readonly { + display: block; + padding: 0 8px; +} + +shortcode-block-readonly > [data-cke-filler] { + display: none; +} + +#admin-main .ck-editor shortcode-block-editable > :first-child { + margin-top: 14px; +} + +#admin-main .ck-editor shortcode-block.ck-shortcode-child .ck-widget__type-around__button_after, +#admin-main .ck-editor shortcode-block.ck-shortcode-child .ck-widget__type-around__button_before { + display: none; +} + +shortcode-block > .sc-add-child { + align-items: center; + display: none; + justify-content: center; + margin: 16px 0; + opacity: 0; + transition: opacity .2s ease; +} + +shortcode-block > .sc-add-child.sc-visible { + display: flex; +} + +shortcode-block:hover > .sc-add-child, +shortcode-block.ck-widget_selected > .sc-add-child { + opacity: 1; + z-index: 1; +} + +shortcode-block > .sc-add-child > p { + align-items: center; + background: #ffc83d; + border-radius: 50%; + cursor: pointer; + display: flex; + height: 24px; + justify-content: center; + margin: 0!important; + transition: opacity .2s ease, background .2s ease; + width: 24px; +} + +shortcode-block > .sc-add-child > p:hover, +shortcode-block.ck-widget_selected > .sc-add-child > p { + background: #1f89e5; +} + +shortcode-block.ck-widget_selected > .sc-add-child > p:hover { + opacity: .5; +} + +shortcode-block > .sc-add-child > p > svg { + color: #fff; + height: 20px; + transition: opacity .2s ease; + width: 20px; +} + +shortcode-block > .sc-add { + left: 30px; + opacity: 0; + position: absolute; + transition: opacity .2s ease; + top: -12px; +} + +shortcode-block > .sc-add-after { + bottom: -11px; + left: auto; + right: 30px; + top: auto; +} + +shortcode-block:hover > .sc-add { + opacity: 1; + z-index: 1; +} + +shortcode-block > .sc-add > p { + align-items: center; + background: #1f89e5; + border-radius: 50%; + cursor: pointer; + display: flex; + height: 20px; + justify-content: center; + width: 20px; +} + +shortcode-block > .sc-add > p > svg { + color: #fff; + height: 16px; + transition: opacity .2s ease; + width: 16px; +} + +shortcode-block > .sc-add:hover > p > svg { + opacity: .5; +} + +shortcode-block > .sc-move { + background: #1f89e5; + border-radius: 50%; + cursor: pointer; + height: 20px; + opacity: 0; + position: absolute; + right: -12px; + transition: opacity .2s ease; + width: 20px; + top: 46px; +} + +shortcode-block > .sc-move-up { + transform: rotate(180deg); +} + +shortcode-block:first-child > .sc-move-up, +shortcode-block:last-child > .sc-move-down { + display: none; +} + +shortcode-block > .sc-move-down { + bottom: 4px; + left: auto; + top: auto; +} + +shortcode-block:hover > .sc-move { + opacity: 1; + z-index: 1; +} + +shortcode-block > .sc-move > p > svg { + color: #fff; + height: 20px; + left: 1.5px; + position: absolute; + top: 2px; + transition: opacity .2s ease; + width: 20px; +} + +shortcode-block > .sc-move:hover > p > svg { + opacity: .5; +} + +shortcode-inline { + background: #fff; + border: 1px solid #ccc; + display: inline-flex; + margin-left: 2px; + margin-right: 1px; + vertical-align: middle; +} + +shortcode-inline-editable, +shortcode-inline-readonly { + display: inline; + padding: 1px 4px 2px; +} + +shortcode-inline > .sc-content { + display: inline-flex; + align-items: center; +} + +shortcode-inline > .sc-settings { + align-items: center; + border-left: 1px solid #ccc; + cursor: pointer; + display: inline-flex; + font-size: 0; + line-height: 0; + padding: 0 2px; + transition: opacity .2s ease, color .2s ease; +} + +shortcode-inline:hover > .sc-settings { + color: #ffc83d; +} + +shortcode-inline > .sc-settings:hover, +shortcode-inline.ck-widget_selected > .sc-settings { + color: #1f89e5; +} + +shortcode-inline.ck-widget_selected > .sc-settings:hover { + opacity: .5; +} + +shortcode-inline > .sc-settings > svg { + height: 16px; + width: 16px; +} diff --git a/plugins/shortcode-core/nextgen-editor/src/main.js b/plugins/shortcode-core/nextgen-editor/src/main.js new file mode 100644 index 0000000..2dbae9c --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/main.js @@ -0,0 +1,10 @@ +import './command'; +import './converters'; +import './events'; +import './init'; +import './prerender'; +import './postsave'; +import './remove'; +import './render'; +import './save'; +import './main.css'; diff --git a/plugins/shortcode-core/nextgen-editor/src/postsave.js b/plugins/shortcode-core/nextgen-editor/src/postsave.js new file mode 100644 index 0000000..5b54050 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/postsave.js @@ -0,0 +1,95 @@ +window.nextgenEditor.addHook('hookHTMLtoMarkdown', { + weight: 50, + handler(options, editor, input) { + let output = input; + + const realNames = Object.values(window.nextgenEditor.shortcodes).map((shortcode) => shortcode.realName) + .filter((value, index, self) => self.indexOf(value) === index); + + const openingRegexp = realNames + .map((name) => `(\\[${name}[^\\]]*\\])`).join('|'); + + const hashMap = {}; + let shortcodeCounter = 1; + + while (shortcodeCounter > 0) { + shortcodeCounter = 0; + + // eslint-disable-next-line no-loop-func + Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => { + const regexp = `(?\\[${shortcode.realName}[^\\]]*\\])(?(((?!(${openingRegexp}|(\\[\\/${shortcode.realName}\\]))).)|\\n)*)(?\\[\\/${shortcode.realName}\\])`; + + output = output.replace(new RegExp(regexp, 'g'), (...matches) => { + shortcodeCounter += 1; + + const hash = Math.random().toString(36).slice(2); + hashMap[hash] = { shortcode, matches }; + + if (shortcode.child) { + const childName = shortcode.child.realName; + + Object.keys(hashMap).forEach((childHash) => { + const childShortcode = hashMap[childHash].shortcode; + + if (childShortcode === shortcode.child && childShortcode.name !== `${shortcode.realName}_${childName}` && matches[0].includes(childHash)) { + hashMap[childHash].shortcode = window.nextgenEditor.shortcodes[`${shortcode.realName}_${childName}`]; + } + }); + } + + return hash; + }); + }); + } + + shortcodeCounter = 1; + + while (shortcodeCounter > 0) { + shortcodeCounter = 0; + + // eslint-disable-next-line no-loop-func + Object.keys(hashMap).forEach((hash) => { + if (!output.includes(hash)) { + return; + } + + shortcodeCounter += 1; + + const { shortcode, matches } = hashMap[hash]; + const groups = matches.pop(); + + if (shortcode.type === 'block') { + let content = groups.content.replace(/^\n/, '').replace(/\n$/, ''); + + if (shortcode.child) { + content = content.trim().split('\n').filter((line) => !!line).join('\n'); + content = `\n${content}\n`; + } + + if (shortcode.parent) { + content = `\n${content}\n`; + } + + output = output.replace(hash, `${groups.opening}${content}${groups.closing}`); + } + + if (shortcode.type === 'inline') { + output = output.replace(hash, matches[0]); + } + }); + } + + /* + Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => { + const regexp = `(?\\[${shortcode.realName}[^\\]]*\\])\n(?(((?!(${openingRegexp}|(\\[\\/${shortcode.realName}\\]))).))*)\n(?\\[\\/${shortcode.realName}\\])`; + + output = output.replace(new RegExp(regexp, 'g'), (...matches) => { + const groups = matches.pop(); + return `${groups.opening}${groups.content}${groups.closing}`; + }); + }); + */ + + return output; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/prerender.js b/plugins/shortcode-core/nextgen-editor/src/prerender.js new file mode 100644 index 0000000..1f79025 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/prerender.js @@ -0,0 +1,100 @@ +window.nextgenEditor.addHook('hookMarkdowntoHTML', { + weight: -50, + handler(options, input) { + let output = input; + + const realNames = Object.values(window.nextgenEditor.shortcodes).map((shortcode) => shortcode.realName) + .filter((value, index, self) => self.indexOf(value) === index); + + const openingRegexp = realNames + .map((name) => `(\\[${name}[^\\]]*\\])`).join('|'); + + realNames.forEach((name) => { + const regexp = `\\[${name}(?(=| +).+?(?=/]))?\\/\\]`; + + output = output.replace(new RegExp(regexp, 'g'), (...matches) => { + const groups = matches.pop(); + + const attributes = groups.attributes.trim() + ? `${groups.attributes}` + : ''; + + return `[${name}${attributes}][/${name}]`; + }); + }); + + const hashMap = {}; + let shortcodeCounter = 1; + + while (shortcodeCounter > 0) { + shortcodeCounter = 0; + + // eslint-disable-next-line no-loop-func + Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => { + const regexp = `(? *)\\[${shortcode.realName}(?(=| +)[^\\]]*)?\\](?(((?!(${openingRegexp}|(\\[\\/${shortcode.realName}\\]))).)|\\n)*)\\[\\/${shortcode.realName}\\](? *)`; + + output = output.replace(new RegExp(regexp, 'g'), (...matches) => { + shortcodeCounter += 1; + + const hash = Math.random().toString(36).slice(2); + hashMap[hash] = { shortcode, matches }; + + if (shortcode.child) { + const childName = shortcode.child.realName; + + Object.keys(hashMap).forEach((childHash) => { + const childShortcode = hashMap[childHash].shortcode; + + if (childShortcode === shortcode.child && childShortcode.name !== `${shortcode.realName}_${childName}` && matches[0].includes(childHash)) { + hashMap[childHash].shortcode = window.nextgenEditor.shortcodes[`${shortcode.realName}_${childName}`]; + } + }); + } + + return hash; + }); + }); + } + + shortcodeCounter = 1; + + while (shortcodeCounter > 0) { + shortcodeCounter = 0; + + // eslint-disable-next-line no-loop-func + Object.keys(hashMap).forEach((hash) => { + if (!output.includes(hash)) { + return; + } + + shortcodeCounter += 1; + + const { shortcode, matches } = hashMap[hash]; + const groups = matches.pop(); + + const spacesBefore = groups.spaces_before.replace(/ /g, ' '); + const spacesAfter = groups.spaces_after.replace(/ /g, ' '); + + if (shortcode.type === 'block') { + let content = groups.content.trim(); + + if (groups.spaces_before.length) { + content = content.replace(new RegExp(`^( ){${groups.spaces_before.length}}`, 'gm'), ''); + } + + const replacement = `\n\n[${shortcode.name}${groups.attributes || ''}]\n\n${content}\n\n[/${shortcode.name}]\n\n`; + + output = output.replace(new RegExp(`(\\n)?(\\n)?${hash}(\\n)?(\\n)?`), replacement); + } + + if (shortcode.type === 'inline') { + output = output.replace(hash, `${spacesBefore}[${shortcode.name}${groups.attributes || ''}]${groups.content}[/${shortcode.name}]${spacesAfter}`); + } + }); + } + + output = output.replace(/^\n\n/, '').replace(/\n\n$/, ''); + + return output; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/remove.js b/plugins/shortcode-core/nextgen-editor/src/remove.js new file mode 100644 index 0000000..8ff78ce --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/remove.js @@ -0,0 +1,55 @@ +window.nextgenEditor.addPlugin('GravShortcodeCoreRemove', { + init() { + const deleteBackwardCommand = this.editor.commands.get('delete'); + const deleteForwardCommand = this.editor.commands.get('forwardDelete'); + + const preDelete = (event) => { + const selectedElement = this.editor.model.document.selection.getSelectedElement(); + + if (selectedElement && selectedElement.name === 'shortcode-block') { + const name = selectedElement.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + + if (shortcode.parent) { + const viewShortcode = this.editor.editing.mapper.toViewElement(selectedElement); + const domShortcode = this.editor.editing.view.domConverter.mapViewToDom(viewShortcode); + const domParentShortcode = domShortcode.closest(`shortcode-block[name="${shortcode.parent.name}"]`); + + event.childShortcodeDeleted = true; + event.modelShortcodeBlockReadOnly = selectedElement.parent; + event.domParentShortcode = domParentShortcode; + } + } + }; + + const postDelete = (event) => { + if (event.childShortcodeDeleted) { + const { domParentShortcode, modelShortcodeBlockReadOnly } = event; + + const children = [...modelShortcodeBlockReadOnly.getChildren()]; + const scChildren = children.filter((child) => child.name === 'shortcode-block'); + const otherChildren = children.filter((child) => child.name !== 'shortcode-block'); + + setTimeout(() => { + this.editor.model.change((modelWriter) => { + otherChildren.forEach((modelChild) => { + if (modelChild.name === 'paragraph' && modelChild.childCount === 0) { + modelWriter.remove(modelChild); + } + }); + }); + }); + + if (!scChildren.length) { + domParentShortcode.querySelector('shortcode-block > .sc-add-child').classList.add('sc-visible'); + } + } + }; + + deleteBackwardCommand.on('execute', preDelete, { priority: 'highest' }); + deleteForwardCommand.on('execute', preDelete, { priority: 'highest' }); + + deleteBackwardCommand.on('execute', postDelete, { priority: 'lowest' }); + deleteForwardCommand.on('execute', postDelete, { priority: 'lowest' }); + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/render.js b/plugins/shortcode-core/nextgen-editor/src/render.js new file mode 100644 index 0000000..82a6a78 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/render.js @@ -0,0 +1,95 @@ +import uncollapse from './uncollapse'; + +window.nextgenEditor.addHook('hookMarkdowntoHTML', { + weight: 50, + handler(options, input) { + let output = input; + + let shortcodeCounter = 1; + const openingRegexp = Object.keys(window.nextgenEditor.shortcodes).map((name) => `(\\[${name}[^\\]]*\\])`).join('|'); + + while (shortcodeCounter > 0) { + shortcodeCounter = 0; + + // eslint-disable-next-line no-loop-func + Object.values(window.nextgenEditor.shortcodes).forEach((shortcode) => { + const regexp = `(?

)?\\[${shortcode.name}(?(=| +)[^\\]]*)?\\](<\\/p>)?(?(((?!(${openingRegexp}|(\\[\\/${shortcode.name}\\]))).)|\\n)*)\\[\\/${shortcode.name}\\](?<\\/p>)?`; + + output = output.replace(new RegExp(regexp, 'g'), (...matches) => { + shortcodeCounter += 1; + + const groups = matches.pop(); + + let content = shortcode.type === 'block' + ? groups.content.replace(/

$/, '') + : groups.content; + + const bbcode = Object.keys(shortcode.attributes).reduce((acc, attrName) => acc || (shortcode.attributes[attrName].bbcode && shortcode.attributes[attrName].shorthand && attrName), ''); + const innerHTMLAttribute = Object.keys(shortcode.attributes).reduce((acc, attrName) => acc || (shortcode.attributes[attrName].innerHTML && attrName), ''); + + let attrGroup = bbcode && groups.attributes && groups.attributes.startsWith('=') + ? `${bbcode}${groups.attributes}` + : groups.attributes || ''; + + if (innerHTMLAttribute) { + const innerHTML = shortcode.type === 'block' + ? content.replace(/^

/, '').replace(/<\/p>$/, '').replace(/^ $/, '') + : content.replace(/^ $/, ''); + + attrGroup = attrGroup + ? `${attrGroup} ${innerHTMLAttribute}="${innerHTML}"` + : `${innerHTMLAttribute}="${innerHTML}"`; + + content = ''; + } + + const domAttributes = new DOMParser().parseFromString(`

`, 'text/html').body.firstChild.attributes; + + const attributes = Object.keys(shortcode.attributes).reduce((acc, attrName) => { + const attribute = shortcode.attributes[attrName]; + + let attrValue = domAttributes.getNamedItem(attrName) + ? domAttributes.getNamedItem(attrName).value + : attribute.default.value; + + if (attribute.type === Boolean && domAttributes.getNamedItem(attrName)) { + attrValue = domAttributes.getNamedItem(attrName) !== 'false'; + } + + if (attribute.type === Number) { + attrValue = +attrValue; + } + + acc[attrName] = attrValue; + + return acc; + }, {}); + + let replacement = ''; + + const attributesEncoded = encodeURIComponent(JSON.stringify(attributes)); + + if (shortcode.type === 'block') { + replacement += ``; + replacement += content; + replacement += ''; + } + + if (shortcode.type === 'inline') { + replacement += groups.p1 || ''; + replacement += ``; + replacement += content; + replacement += ''; + replacement += groups.p2 || ''; + } + + return replacement; + }); + }); + } + + output = uncollapse(output); + + return output; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/save.js b/plugins/shortcode-core/nextgen-editor/src/save.js new file mode 100644 index 0000000..a8b0ba4 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/save.js @@ -0,0 +1,80 @@ +import collapse from './collapse'; + +window.nextgenEditor.addHook('hookHTMLtoMarkdown', { + weight: -50, + handler(options, editor, input) { + let output = input; + + output = collapse(output); + + const domOutput = new DOMParser().parseFromString(output, 'text/html'); + + let domShortcode = domOutput.querySelector('shortcode-block, shortcode-inline'); + + while (domShortcode) { + const name = domShortcode.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + const attributes = JSON.parse(decodeURIComponent(domShortcode.getAttribute('attributes'))); + + const innerHTMLAttribute = Object.keys(shortcode.attributes).reduce((acc, attrName) => acc || (shortcode.attributes[attrName].innerHTML && attrName), ''); + + const attrLine = Object.keys(shortcode.attributes).reduce((acc, attrName) => { + const attribute = shortcode.attributes[attrName]; + + if (attribute.type === Boolean) { + return attributes[attrName] + ? `${acc} ${attrName}` + : acc; + } + + if (attributes[attrName] === attribute.default.value && !attribute.default.preserve) { + return acc; + } + + if (attribute.bbcode && attribute.shorthand) { + return `="${attributes[attrName]}"${acc}`; + } + + if (attribute.innerHTML) { + return acc; + } + + return `${acc} ${attrName}="${attributes[attrName]}"`; + }, ''); + + if (shortcode.type === 'block') { + if (domShortcode.innerHTML === '

 

') { + domShortcode.innerHTML = ''; + } + + if (innerHTMLAttribute) { + domShortcode.outerHTML = `

[${shortcode.realName}${attrLine}]${attributes[innerHTMLAttribute]}[/${shortcode.realName}]

`; + } else if (domShortcode.innerHTML) { + domShortcode.outerHTML = `

[${shortcode.realName}${attrLine}]

${domShortcode.innerHTML}

[/${shortcode.realName}]

`; + } else { + domShortcode.outerHTML = `

[${shortcode.realName}${attrLine} /]

`; + } + } + + if (shortcode.type === 'inline') { + if (domShortcode.innerHTML === ' ') { + domShortcode.innerHTML = ''; + } + + if (innerHTMLAttribute) { + domShortcode.outerHTML = `[${shortcode.realName}${attrLine}]${attributes[innerHTMLAttribute]}[/${shortcode.realName}]`; + } else if (domShortcode.innerHTML) { + domShortcode.outerHTML = `[${shortcode.realName}${attrLine}]${domShortcode.innerHTML}[/${shortcode.realName}]`; + } else { + domShortcode.outerHTML = `[${shortcode.realName}${attrLine} /]`; + } + } + + domShortcode = domOutput.querySelector('shortcode-block, shortcode-inline'); + } + + output = domOutput.body.innerHTML; + + return output; + }, +}); diff --git a/plugins/shortcode-core/nextgen-editor/src/settings.js b/plugins/shortcode-core/nextgen-editor/src/settings.js new file mode 100644 index 0000000..b4bedaa --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/settings.js @@ -0,0 +1,153 @@ +import collapse from './collapse'; +import uncollapse from './uncollapse'; + +const { showSettingsPopup } = window.nextgenEditor.exports; + +export default function displaySettings(domShortcode) { + const { editors } = window.nextgenEditor; + const editor = (editors.filter((instance) => instance.ui.view.element.contains(domShortcode)) || []).shift(); + + const name = domShortcode.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + const plugin = window.nextgenEditor.shortcodePlugins[shortcode.plugin]; + + if (editor) { + const viewShortcode = editor.editing.view.domConverter.mapDomToView(domShortcode); + let modelShortcode = editor.editing.mapper.toModelElement(viewShortcode); + + const currentAttributes = JSON.parse(decodeURIComponent(domShortcode.getAttribute('attributes'))); + + const domDisplayPoint = shortcode.type === 'block' + ? domShortcode.querySelector('.sc-header > .sc-settings') + : domShortcode; + + const title = [] + .concat([ + (plugin && plugin.title) || '', + (shortcode.parent && shortcode.parent.title) || '', + shortcode.title || '', + ]) + .filter((item) => !!item) + .join(' / '); + + const argsForPopup = { + title, + domDisplayPoint, + debounceDelay: 1000, + attributes: shortcode.attributes, + currentAttributes, + parentAttributes: null, + childAttributes: null, + }; + + if (shortcode.parent) { + const domParentShortcode = domShortcode.closest(`shortcode-block[name="${shortcode.parent.name}"]`); + + argsForPopup.parentAttributes = domParentShortcode + ? JSON.parse(decodeURIComponent(domParentShortcode.getAttribute('attributes'))) + : {}; + } + + if (shortcode.child) { + argsForPopup.childAttributes = []; + + const childNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block[name="${shortcode.child.name}"]`)]; + const deepChildNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block shortcode-block[name="${shortcode.child.name}"]`)]; + + childNodes + .filter((domChildShortcode) => !deepChildNodes.includes(domChildShortcode)) + .forEach((domChildShortcode) => { + const childAttributes = JSON.parse(decodeURIComponent(domChildShortcode.getAttribute('attributes'))); + argsForPopup.childAttributes.push(childAttributes); + }); + } + + argsForPopup.deleteItem = () => editor.execute('delete'); + + argsForPopup.changeAttributes = () => { + editor.model.change((modelWriter) => { + modelWriter.setAttribute('attributes', encodeURIComponent(JSON.stringify(currentAttributes)), modelShortcode); + + const convertContext = shortcode.type === 'inline' + ? '$block' + : '$root'; + + if (shortcode.parent) { + const viewOldShortcode = editor.editing.mapper.toViewElement(modelShortcode); + const domOldShortcode = editor.editing.view.domConverter.mapViewToDom(viewOldShortcode); + + if (!domOldShortcode) { + return; + } + + const domOldParentShortcode = domOldShortcode.parentNode.closest('shortcode-block'); + const viewOldParentShortcode = editor.editing.view.domConverter.mapDomToView(domOldParentShortcode); + const modelOldParentShortcode = editor.editing.mapper.toModelElement(viewOldParentShortcode); + + const childNodes = [...domOldParentShortcode.querySelectorAll('shortcode-block shortcode-block')]; + const deepChildNodes = [...domOldParentShortcode.querySelectorAll('shortcode-block shortcode-block shortcode-block')]; + + const childIndex = childNodes + .filter((domChildShortcode) => !deepChildNodes.includes(domChildShortcode)) + .indexOf(domOldShortcode); + + const insertPosition = modelWriter.createPositionBefore(modelOldParentShortcode); + const modelOldParentClonedShortcode = modelWriter.cloneElement(modelOldParentShortcode); + + const modelOldParentFragment = modelWriter.createDocumentFragment(); + modelWriter.append(modelOldParentClonedShortcode, modelOldParentFragment); + + const viewOldParentClonedShortcode = editor.data.toView(modelOldParentFragment).getChild(0); + const dataOldParentClonedShortcode = editor.data.processor.toData(viewOldParentClonedShortcode); + + const dataNewParentShortcode = uncollapse(collapse(dataOldParentClonedShortcode)); + const viewNewParentShortcode = editor.data.processor.toView(dataNewParentShortcode).getChild(0); + const modelNewParentShortcode = editor.data.toModel(viewNewParentShortcode, convertContext).getChild(0); + + modelWriter.remove(modelOldParentShortcode); + modelWriter.insert(modelNewParentShortcode, insertPosition); + + setTimeout(() => { + const viewParentShortcode = editor.editing.mapper.toViewElement(modelNewParentShortcode); + const domParentShortcode = editor.editing.view.domConverter.mapViewToDom(viewParentShortcode); + + const childNewNodes = [...domParentShortcode.querySelectorAll('shortcode-block shortcode-block')]; + const deepNewChildNodes = [...domParentShortcode.querySelectorAll('shortcode-block shortcode-block shortcode-block')]; + + const domNewShortcode = childNewNodes.filter((domChildShortcode) => !deepNewChildNodes.includes(domChildShortcode))[childIndex]; + const viewNewShortcode = editor.editing.view.domConverter.mapDomToView(domNewShortcode); + const modelNewShortcode = editor.editing.mapper.toModelElement(viewNewShortcode); + + editor.model.change((modelWriter2) => { + modelWriter2.setSelection(modelNewShortcode, 'on'); + modelShortcode = modelNewShortcode; + }); + }); + + return; + } + + const insertPosition = modelWriter.createPositionBefore(modelShortcode); + const modelOldShortcode = modelWriter.cloneElement(modelShortcode); + + const modelOldFragment = modelWriter.createDocumentFragment(); + modelWriter.append(modelOldShortcode, modelOldFragment); + + const viewOldShortcode = editor.data.toView(modelOldFragment).getChild(0); + const dataOldShortcode = editor.data.processor.toData(viewOldShortcode); + + const dataNewShortcode = uncollapse(collapse(dataOldShortcode)); + const viewNewShortcode = editor.data.processor.toView(dataNewShortcode).getChild(0); + const modelNewShortcode = editor.data.toModel(viewNewShortcode, convertContext).getChild(0); + + modelWriter.remove(modelShortcode); + modelWriter.insert(modelNewShortcode, insertPosition); + modelWriter.setSelection(modelNewShortcode, 'on'); + + modelShortcode = modelNewShortcode; + }); + }; + + showSettingsPopup(argsForPopup); + } +} diff --git a/plugins/shortcode-core/nextgen-editor/src/uncollapse.js b/plugins/shortcode-core/nextgen-editor/src/uncollapse.js new file mode 100644 index 0000000..5a6a6d7 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/src/uncollapse.js @@ -0,0 +1,164 @@ +export default function uncollapse(input, args) { + const domOutput = new DOMParser().parseFromString(input, 'text/html'); + [...domOutput.querySelectorAll('shortcode-block, shortcode-inline')].forEach((domShortcode) => { + domShortcode.setAttribute('sc-rendered', false); + }); + + let domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]'); + + while (domShortcode) { + const name = domShortcode.getAttribute('name'); + const shortcode = window.nextgenEditor.shortcodes[name]; + const attributes = JSON.parse(decodeURIComponent(domShortcode.getAttribute('attributes'))); + + domShortcode.classList.add('ck-shortcode'); + domShortcode.classList.add(`ck-shortcode-${shortcode.type}`); + domShortcode.removeAttribute('sc-rendered'); + + const argsForRender = { + shortcode, + attributes, + innerHTML: domShortcode.innerHTML, + parentAttributes: null, + childAttributes: null, + }; + + let innerHTML = ''; + + if (shortcode.type === 'block') { + if (shortcode.parent) { + domShortcode.classList.add('ck-shortcode-child'); + + const domParentShortcode = domShortcode.closest(`shortcode-block[name="${shortcode.parent.name}"]`); + + argsForRender.parentAttributes = !args || !args.parentAttributes + ? domParentShortcode + ? JSON.parse(decodeURIComponent(domParentShortcode.getAttribute('attributes'))) + : {} + : args.parentAttributes; + } + + if (shortcode.child) { + argsForRender.childAttributes = []; + domShortcode.classList.add('ck-shortcode-parent'); + + const childNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block[name="${shortcode.child.name}"]`)]; + const deepChildNodes = [...domShortcode.querySelectorAll(`shortcode-block shortcode-block shortcode-block[name="${shortcode.child.name}"]`)]; + + childNodes + .filter((domChildShortcode) => !deepChildNodes.includes(domChildShortcode)) + .forEach((domChildShortcode) => { + const childAttributes = JSON.parse(decodeURIComponent(domChildShortcode.getAttribute('attributes'))); + argsForRender.childAttributes.push(childAttributes); + }); + } + + /* eslint-disable indent, no-multi-spaces */ + innerHTML += '
'; + innerHTML += `
Shortcode - ${shortcode.title}
`; + innerHTML += `
${shortcode.titlebar(argsForRender)}
`; + innerHTML += '
'; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += '
'; + innerHTML += '
'; + innerHTML += '
'; + innerHTML += shortcode.content(argsForRender) + .replace('{{content_editable}}', `${domShortcode.innerHTML}`) + .replace('{{content_readonly}}', `${domShortcode.innerHTML}`); + innerHTML += '
'; + + if (shortcode.child) { + const visible = !domShortcode.innerHTML ? ' sc-visible' : ''; + innerHTML += `
`; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += '
'; + } + + if (shortcode.parent) { + ['before', 'after'].forEach((where) => { + innerHTML += `
`; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += '
'; + }); + + ['up', 'down'].forEach((where) => { + innerHTML += `
`; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += '
'; + }); + } + /* eslint-enable indent, no-multi-spaces */ + } + + if (shortcode.type === 'inline') { + /* eslint-disable indent, no-multi-spaces */ + innerHTML += ''; + innerHTML += shortcode.content(argsForRender) + .replace('{{content_editable}}', `${domShortcode.innerHTML}`) + .replace('{{content_readonly}}', `${domShortcode.innerHTML}`); + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + innerHTML += ''; + /* eslint-enable indent, no-multi-spaces */ + } + + domShortcode.innerHTML = innerHTML; + domShortcode = domOutput.querySelector('shortcode-block[sc-rendered], shortcode-inline[sc-rendered]'); + } + + return domOutput.body.innerHTML; +} + +document.addEventListener('click', (event) => { + const { target } = event; + const list = ['sc-settings', 'sc-move', 'sc-add', 'sc-add-child']; + const action = { element: null, className: null }; + const isAction = list.some((item) => { + let match = target.classList.contains(item); + + if (match) { + action.element = target; + action.className = item; + + return true; + } + + match = target.closest(`.${item}`); + if (match) { + action.element = match; + action.className = item; + + return true; + } + + return false; + }); + + if (isAction) { + switch (action.className) { + case 'sc-move': + window.scBlockMoveChild.call(action.element, event, action.element.classList.contains('sc-move-up') ? 'up' : 'down'); + break; + case 'sc-add': + window.scBlockAddChild.call(action.element, event, action.element.classList.contains('sc-add-before') ? 'before' : 'after'); + break; + case 'sc-add-child': + window.scBlockAddChildFromParent.call(action.element, event); + break; + case 'sc-settings': + default: + window.scDisplaySettings.call(action.element, event); + } + } +}); diff --git a/plugins/shortcode-core/nextgen-editor/vue.config.js b/plugins/shortcode-core/nextgen-editor/vue.config.js new file mode 100644 index 0000000..43d4c4d --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/vue.config.js @@ -0,0 +1,31 @@ +const DirectoryNamedWebpackPlugin = require('directory-named-webpack-plugin'); + +module.exports = { + filenameHashing: false, + publicPath: process.env.NODE_ENV === 'development' + ? `http://${process.env.DEV_HOST}:${process.env.DEV_PORT}/` + : '/', + configureWebpack: { + resolve: { + plugins: [ + new DirectoryNamedWebpackPlugin(), + ], + }, + optimization: { + splitChunks: false, + }, + }, + chainWebpack: (webpackConfig) => { + webpackConfig.plugins.delete('html'); + webpackConfig.plugins.delete('preload'); + webpackConfig.plugins.delete('prefetch'); + }, + devServer: { + host: process.env.DEV_HOST, + port: process.env.DEV_PORT, + disableHostCheck: true, + headers: { + 'Access-Control-Allow-Origin': '*', + }, + }, +}; diff --git a/plugins/shortcode-core/nextgen-editor/yarn.lock b/plugins/shortcode-core/nextgen-editor/yarn.lock new file mode 100644 index 0000000..63dd817 --- /dev/null +++ b/plugins/shortcode-core/nextgen-editor/yarn.lock @@ -0,0 +1,9534 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.12.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.1.tgz#d7386a689aa0ddf06255005b4b991988021101a0" + integrity sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ== + +"@babel/core@^7.11.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.0.tgz#e42e07a086e978cdd4c61f4078d8230fb817cc86" + integrity sha512-iV7Gwg0DePKvdDZZWRTkj4MW+6/AbVWd4ZCg+zk8H1RVt5xBpUZS6vLQWwb3pyLg4BFTaGiQCPoJ4Ibmbne4fA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.0" + "@babel/helper-module-transforms" "^7.12.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.12.0" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.0" + "@babel/types" "^7.12.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.0.tgz#91a45f1c18ca8d895a35a04da1a4cf7ea3f37f98" + integrity sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA== + dependencies: + "@babel/types" "^7.12.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.0", "@babel/helper-compilation-targets@^7.9.6": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.0.tgz#c477d89a1f4d626c8149b9b88802f78d66d0c99a" + integrity sha512-NbDFJNjDgxE7IkrHp5gq2+Tr8bEdCLKYN90YDQEjMiTMUAFAcShNkaH8kydcmU0mEQTiQY0Ydy/+1xfS2OCEnw== + dependencies: + "@babel/compat-data" "^7.12.0" + "@babel/helper-validator-option" "^7.12.0" + browserslist "^4.12.0" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.0.tgz#f3f2fc77bacc89e59ce6764daeabc1fb23e79a05" + integrity sha512-9tD1r9RK928vxvxcoNK8/7uwT7Q2DJZP1dnJmyMAJPwOF0yr8PPwqdpyw33lUpCfrJ765bOs5XNa4KSfUDWFSw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.0" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.0" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8" + integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" + integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.0.tgz#48f605fa801764f3e5b2e301e49d35fe1820c4f3" + integrity sha512-I0d/bgzgzgLsJMk7UZ0TN2KV3OGjC/t/9Saz8PKb9jrcEAXhgjGysOgp4PDKydIKjUv/gj2St4ae+ov8l+T9Xg== + dependencies: + "@babel/types" "^7.12.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.12.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.0.tgz#8ac7d9e8716f94549a42e577c5429391950e33f3" + integrity sha512-1ZTMoCiLSzTJLbq7mSaTHki4oIrBIf/dUbzdhwTrvtMU3ZNVKwQmGae3gSiqppo7G8HAgnXmc43rfEaD8yYLLQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.0" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.0" + "@babel/types" "^7.12.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" + integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4", "@babel/helper-replace-supers@^7.12.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.0.tgz#98d3f3eb779752e59c7422ab387c9b444323be60" + integrity sha512-9kycFdq2c9e7PXZOr2z/ZqTFF9OzFu287iFwYS+CiDVPuoTCfY8hoTsIqNQNetQjlqoRsRyJFrMG1uhGAR4EEw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.0" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.0" + "@babel/types" "^7.12.0" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.12.0", "@babel/parser@^7.7.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.1.tgz#dc03f543a0ed51396d4081463df66ecb3a2efa53" + integrity sha512-xjZsx0sBjb6J2+QkoHI69UeD2EWbsyUW0WyZKOoJ9sBrQLxfOApWEefR9dIVOYJVj97VRXnLKLDvnn3dPDNgww== + +"@babel/parser@^7.12.13": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-decorators@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" + integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.12.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.0.tgz#0159b549f165016fc9f284b8607a58a37a3b71fe" + integrity sha512-CXu9aw32FH/MksqdKvhpiH8pSvxnXJ33E7I7BGNE9VzNRpWgpNzvPpds/tW9E0pjmX9+D1zAHRyHbtyeTboo2g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-decorators@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd" + integrity sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.0.tgz#bca842db6980cfc98ae7d0f2c907c9b1df3f874e" + integrity sha512-h2fDMnwRwBiNMmTGAWqUo404Z3oLbrPE6hyATecyIbsEsrbM5gjLbfKQLb6hjiouMlGHH+yliYBbc4NPgWKE/g== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@^7.11.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.0.tgz#01f67ea62662e7de401af7567b6054e6a4807d65" + integrity sha512-BC8wiTo+0kEG8M6wuEBeuG7AIazTan02/Bh4dgi+wdDBE+p2iv5AXO8OUjrwD100223S/2WbALSqj7c290XTKg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.11.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.0.tgz#7d2d0c4f4a14ca0fd7d905a741070ab4745177b7" + integrity sha512-jSIHvHSuF+hBUIrvA2/61yIzhH+ceLOXGLTH1nwPvQlso/lNxXsoE/nvrCzY5M77KRzhKegB1CvdhWPZmYDZ5A== + dependencies: + "@babel/compat-data" "^7.12.0" + "@babel/helper-compilation-targets" "^7.12.0" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.0" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.12.0" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.0" + "@babel/plugin-proposal-numeric-separator" "^7.12.0" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.12.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.12.0" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.0" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.0.tgz#98bd7666186969c04be893d747cf4a6c6c8fa6b0" + integrity sha512-lS4QLXQ2Vbw2ubfQjeQcn+BZgZ5+ROHW9f+DWjEp5Y+NHYmkRGKqHSJ1tuhbUauKu2nhZNTBIvsIQ8dXfY5Gjw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.0", "@babel/traverse@^7.7.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.0.tgz#ed31953d6e708cdd34443de2fcdb55f72cdfb266" + integrity sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.0" + "@babel/types" "^7.12.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.12.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.0.tgz#b6b49f425ee59043fbc89c61b11a13d5eae7b5c6" + integrity sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.12.13": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + to-fast-properties "^2.0.0" + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.0.1": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + +"@intervolga/optimize-cssnano-plugin@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" + integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== + dependencies: + cssnano "^4.0.0" + cssnano-preset-default "^4.0.0" + postcss "^7.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@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== + +"@soda/friendly-errors-webpack-plugin@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" + integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ== + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-width "^2.0.0" + +"@soda/get-current-script@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87" + integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect-history-api-fallback@*": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4" + integrity sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@*": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.17.tgz#6ba02465165b6c9c3d8db3a28def6b16fc9b70f5" + integrity sha512-YYlVaCni5dnHc+bLZfY908IG1+x5xuibKZMGv8srKkvtul3wUuanYvpIj9GXXoWkQbaAdR+kgX46IETKUALWNQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.9.tgz#f5f2df6add703ff28428add52bdec8a1091b0a78" + integrity sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-proxy-middleware@*": + version "0.19.3" + resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" + integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== + dependencies: + "@types/connect" "*" + "@types/http-proxy" "*" + "@types/node" "*" + +"@types/http-proxy@*": + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== + dependencies: + "@types/node" "*" + +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/mime@*": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" + integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + +"@types/node@*": + version "14.11.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f" + integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/serve-static@*": + version "1.13.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46" + integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/webpack-dev-server@^3.11.0": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#f8f4dac1da226d530bd15a1d5dc34b23ba766ccb" + integrity sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw== + dependencies: + "@types/connect-history-api-fallback" "*" + "@types/express" "*" + "@types/http-proxy-middleware" "*" + "@types/serve-static" "*" + "@types/webpack" "*" + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@*", "@types/webpack@^4.0.0": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@vue/babel-helper-vue-jsx-merge-props@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81" + integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA== + +"@vue/babel-helper-vue-transform-on@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc" + integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA== + +"@vue/babel-plugin-jsx@^1.0.3": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.5.tgz#72820d5fb371c41d2113b31b16787995e8bdf69a" + integrity sha512-Jtipy7oI0am5e1q5Ahunm/cCcCh5ssf5VkMQsLR383S3un5Qh7NBfxgSK9kmWf4IXJEhDeYp9kHv8G/EnMai9A== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + "@vue/babel-helper-vue-transform-on" "^1.0.2" + camelcase "^6.0.0" + html-tags "^3.1.0" + svg-tags "^1.0.0" + +"@vue/babel-plugin-transform-vue-jsx@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz#646046c652c2f0242727f34519d917b064041ed7" + integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-app@^4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.13.tgz#cb475321e4c73f7f110dac29a48c2a9cb80afeb6" + integrity sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw== + dependencies: + "@babel/core" "^7.11.0" + "@babel/helper-compilation-targets" "^7.9.6" + "@babel/helper-module-imports" "^7.8.3" + "@babel/plugin-proposal-class-properties" "^7.8.3" + "@babel/plugin-proposal-decorators" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.11.0" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.0" + "@vue/babel-plugin-jsx" "^1.0.3" + "@vue/babel-preset-jsx" "^1.2.4" + babel-plugin-dynamic-import-node "^2.3.3" + core-js "^3.6.5" + core-js-compat "^3.6.5" + semver "^6.1.0" + +"@vue/babel-preset-jsx@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz#92fea79db6f13b01e80d3a0099e2924bdcbe4e87" + integrity sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + "@vue/babel-sugar-composition-api-inject-h" "^1.2.1" + "@vue/babel-sugar-composition-api-render-instance" "^1.2.4" + "@vue/babel-sugar-functional-vue" "^1.2.2" + "@vue/babel-sugar-inject-h" "^1.2.2" + "@vue/babel-sugar-v-model" "^1.2.3" + "@vue/babel-sugar-v-on" "^1.2.3" + +"@vue/babel-sugar-composition-api-inject-h@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz#05d6e0c432710e37582b2be9a6049b689b6f03eb" + integrity sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-composition-api-render-instance@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz#e4cbc6997c344fac271785ad7a29325c51d68d19" + integrity sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-functional-vue@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz#267a9ac8d787c96edbf03ce3f392c49da9bd2658" + integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz#d738d3c893367ec8491dcbb669b000919293e3aa" + integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz#fa1f29ba51ebf0aa1a6c35fa66d539bc459a18f2" + integrity sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz#342367178586a69f392f04bfba32021d02913ada" + integrity sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + camelcase "^5.0.0" + +"@vue/cli-overlay@^4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.5.13.tgz#4f1fd2161be8f69d6cba8079f3f0d7dc4dee47a7" + integrity sha512-jhUIg3klgi5Cxhs8dnat5hi/W2tQJvsqCxR0u6hgfSob0ORODgUBlN+F/uwq7cKIe/pzedVUk1y07F13GQvPqg== + +"@vue/cli-plugin-babel@~4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.13.tgz#a89c482edcc4ea1d135645cec502a7f5fd4c30e7" + integrity sha512-ykvEAfD8PgGs+dGMGqr7l/nRmIS39NRzWLhMluPLTvDV1L+IxcoB73HNLGA/aENDpl8CuWrTE+1VgydcOhp+wg== + dependencies: + "@babel/core" "^7.11.0" + "@vue/babel-preset-app" "^4.5.13" + "@vue/cli-shared-utils" "^4.5.13" + babel-loader "^8.1.0" + cache-loader "^4.1.0" + thread-loader "^2.1.3" + webpack "^4.0.0" + +"@vue/cli-plugin-eslint@~4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.13.tgz#8baf22d0d96d76720c7506646b96f4f62c05bdfa" + integrity sha512-yc2uXX6aBiy3vEf5TwaueaDqQbdIXIhk0x0KzEtpPo23jBdLkpOSoU5NCgE06g/ZiGAcettpmBSv73Hfp4wHEw== + dependencies: + "@vue/cli-shared-utils" "^4.5.13" + eslint-loader "^2.2.1" + globby "^9.2.0" + inquirer "^7.1.0" + webpack "^4.0.0" + yorkie "^2.0.0" + +"@vue/cli-plugin-router@^4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.13.tgz#0b67c8898a2bf132941919a2a2e5f3aacbd9ffbe" + integrity sha512-tgtMDjchB/M1z8BcfV4jSOY9fZSMDTPgF9lsJIiqBWMxvBIsk9uIZHxp62DibYME4CCKb/nNK61XHaikFp+83w== + dependencies: + "@vue/cli-shared-utils" "^4.5.13" + +"@vue/cli-plugin-vuex@^4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.13.tgz#98646d8bc1e69cf6c6a6cba2fed3eace0356c360" + integrity sha512-I1S9wZC7iI0Wn8kw8Zh+A2Qkf6s1M6vTGBkx8boXjuzfwEEyEHRxadsVCecZc8Mkpydo0nykj+MyYF96TKFuVA== + +"@vue/cli-service@~4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.5.13.tgz#a09e684a801684b6e24e5414ad30650970eec9ed" + integrity sha512-CKAZN4iokMMsaUyJRU22oUAz3oS/X9sVBSKAF2/shFBV5xh3jqAlKl8OXZYz4cXGFLA6djNuYrniuLAo7Ku97A== + dependencies: + "@intervolga/optimize-cssnano-plugin" "^1.0.5" + "@soda/friendly-errors-webpack-plugin" "^1.7.1" + "@soda/get-current-script" "^1.0.0" + "@types/minimist" "^1.2.0" + "@types/webpack" "^4.0.0" + "@types/webpack-dev-server" "^3.11.0" + "@vue/cli-overlay" "^4.5.13" + "@vue/cli-plugin-router" "^4.5.13" + "@vue/cli-plugin-vuex" "^4.5.13" + "@vue/cli-shared-utils" "^4.5.13" + "@vue/component-compiler-utils" "^3.1.2" + "@vue/preload-webpack-plugin" "^1.1.0" + "@vue/web-component-wrapper" "^1.2.0" + acorn "^7.4.0" + acorn-walk "^7.1.1" + address "^1.1.2" + autoprefixer "^9.8.6" + browserslist "^4.12.0" + cache-loader "^4.1.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + cli-highlight "^2.1.4" + clipboardy "^2.3.0" + cliui "^6.0.0" + copy-webpack-plugin "^5.1.1" + css-loader "^3.5.3" + cssnano "^4.1.10" + debug "^4.1.1" + default-gateway "^5.0.5" + dotenv "^8.2.0" + dotenv-expand "^5.1.0" + file-loader "^4.2.0" + fs-extra "^7.0.1" + globby "^9.2.0" + hash-sum "^2.0.0" + html-webpack-plugin "^3.2.0" + launch-editor-middleware "^2.2.1" + lodash.defaultsdeep "^4.6.1" + lodash.mapvalues "^4.6.0" + lodash.transform "^4.6.0" + mini-css-extract-plugin "^0.9.0" + minimist "^1.2.5" + pnp-webpack-plugin "^1.6.4" + portfinder "^1.0.26" + postcss-loader "^3.0.0" + ssri "^8.0.1" + terser-webpack-plugin "^1.4.4" + thread-loader "^2.1.3" + url-loader "^2.2.0" + vue-loader "^15.9.2" + vue-style-loader "^4.1.2" + webpack "^4.0.0" + webpack-bundle-analyzer "^3.8.0" + webpack-chain "^6.4.0" + webpack-dev-server "^3.11.0" + webpack-merge "^4.2.2" + optionalDependencies: + vue-loader-v16 "npm:vue-loader@^16.1.0" + +"@vue/cli-shared-utils@^4.5.13": + version "4.5.13" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.13.tgz#acd40f31b4790f1634292bdaa5fca95dc1e0ff50" + integrity sha512-HpnOrkLg42RFUsQGMJv26oTG3J3FmKtO2WSRhKIIL+1ok3w9OjGCtA3nMMXN27f9eX14TqO64M36DaiSZ1fSiw== + dependencies: + "@hapi/joi" "^15.0.1" + chalk "^2.4.2" + execa "^1.0.0" + launch-editor "^2.2.1" + lru-cache "^5.1.1" + node-ipc "^9.1.1" + open "^6.3.0" + ora "^3.4.0" + read-pkg "^5.1.1" + request "^2.88.2" + semver "^6.1.0" + strip-ansi "^6.0.0" + +"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" + integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.14" + postcss-selector-parser "^6.0.2" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + optionalDependencies: + prettier "^1.18.2" + +"@vue/eslint-config-airbnb@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-airbnb/-/eslint-config-airbnb-5.3.0.tgz#896551d600816a06dff13fdd7d04fd5153379817" + integrity sha512-m9ldRhbqaODbcc9mQZjPgnTzyNweZblLMTqMfC2kHWY68dYd3kwG/hvENeZWXJnKKo+eGnoptk+7Zq/c1519ZQ== + dependencies: + eslint-config-airbnb-base "^14.0.0" + eslint-import-resolver-node "^0.3.4" + eslint-import-resolver-webpack "^0.13.0" + eslint-plugin-import "^2.21.2" + +"@vue/preload-webpack-plugin@^1.1.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab" + integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ== + +"@vue/web-component-wrapper@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" + integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764" + integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" + integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +array.prototype.flat@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.8.6: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-loader@^8.1.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.1.1, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: + version "4.14.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" + integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA== + dependencies: + caniuse-lite "^1.0.30001135" + electron-to-chromium "^1.3.571" + escalade "^3.1.0" + node-releases "^1.1.61" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-json@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" + integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" + integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== + dependencies: + buffer-json "^2.0.0" + find-cache-dir "^3.0.0" + loader-utils "^1.2.3" + mkdirp "^0.5.1" + neo-async "^2.6.1" + schema-utils "^2.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78" + integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: + version "1.0.30001218" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001218.tgz" + integrity sha512-0ASydOWSy3bB88FbDpJSTt+PfDwnMqrym3yRZfqG8EXSQ06OZhF+q5wgYP/EN+jJMERItNcDQUqMyNjzZ+r5+Q== + +case-sensitive-paths-webpack-plugin@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.2.x: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" + integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== + dependencies: + chalk "^3.0.0" + highlight.js "^9.6.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^5.1.1" + yargs "^15.0.0" + +cli-spinners@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboardy@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" + integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.18.0, commander@^2.20.0: + 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@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" + integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" + integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== + dependencies: + cacache "^12.0.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.1" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + webpack-log "^2.0.0" + +core-js-compat@^3.6.2, core-js-compat@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.0.0, cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, 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.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-gateway@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" + integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== + dependencies: + execa "^3.3.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0, dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +directory-named-webpack-plugin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/directory-named-webpack-plugin/-/directory-named-webpack-plugin-4.0.1.tgz#d5f422310bb446297ec422d3656dbf0921a6fa26" + integrity sha512-cULe7U64O9NM+O+L9gfcVKPo/A0pNEntsXTpuRHoCFMYE5pV9XQrJI9mJ8bgo0WKPmKPw/kozXfRolNNFJICCA== + dependencies: + enhanced-resolve "^4.0.0" + object-assign "^4.1.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +easy-stack@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" + integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.571: + version "1.3.581" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.581.tgz#7f796fe92cdc18f5013769dc6f45f4536315a183" + integrity sha512-ALORbI23YkYJoVJWusSdmTq8vXH3TLFzniILE47uZkZOim135ZhoTCM7QlIuvmK78As5kLdANfy7kDIQvJ+iPw== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + +enhanced-resolve@^4.0.0, enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" + integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-string "^1.0.7" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-airbnb-base@^14.0.0: + version "14.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" + integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== + dependencies: + confusing-browser-globals "^1.0.9" + object.assign "^4.1.0" + object.entries "^1.1.2" + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-webpack@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.0.tgz#5cb19cf4b6996c8a2514aeb10f909e2c70488dc3" + integrity sha512-hZWGcmjaJZK/WSCYGI/y4+FMGQZT+cwW/1E/P4rDwFj2PbanlQHISViw4ccDJ+2wxAqjgwBfxwy3seABbVKDEw== + dependencies: + array-find "^1.0.0" + debug "^2.6.9" + enhanced-resolve "^0.9.1" + find-root "^1.1.0" + has "^1.0.3" + interpret "^1.2.0" + lodash "^4.17.15" + node-libs-browser "^1.0.0 || ^2.0.0" + resolve "^1.13.1" + semver "^5.7.1" + +eslint-loader@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-module-utils@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534" + integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q== + dependencies: + debug "^3.2.7" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.21.2: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-import@^2.24.2: + version "2.24.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz#2c8cd2e341f3885918ee27d18479910ade7bb4da" + integrity sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q== + dependencies: + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.6.2" + find-up "^2.0.0" + has "^1.0.3" + is-core-module "^2.6.0" + minimatch "^3.0.4" + object.values "^1.1.4" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" + tsconfig-paths "^3.11.0" + +eslint-plugin-vue@^7.18.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.18.0.tgz#02a452142330c7f27c242db21a1b9e25238540f6" + integrity sha512-ceDXlXYMMPMSXw7tdKUR42w9jlzthJGJ3Kvm3YrZ0zuQfvAySNxe8sm6VHuksBW0+060GzYXhHJG6IHVOfF83Q== + dependencies: + eslint-utils "^2.1.0" + natural-compare "^1.4.0" + semver "^6.3.0" + vue-eslint-parser "^7.10.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-pubsub@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" + integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-loader@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0: + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + dependencies: + type-fest "^0.20.2" + +globals@^13.9.0: + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + dependencies: + type-fest "^0.20.2" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^9.6.0: + version "9.18.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634" + integrity sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +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== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +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== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^7.1.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.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.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== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" + integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +javascript-stringify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" + integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow== + +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-message@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" + integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU= + +js-queue@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948" + integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug= + dependencies: + easy-stack "^1.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +launch-editor-middleware@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" + integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== + dependencies: + launch-editor "^2.2.1" + +launch-editor@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" + integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== + dependencies: + chalk "^2.3.0" + shell-quote "^1.6.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.3.1, loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.defaultsdeep@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.transform@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" + integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3, lodash@~4.17.10: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +loglevel@^1.6.8: + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^4.0.1, lru-cache@^4.1.2: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + 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" + +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "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: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" + integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1, nan@^2.13.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + +node-ipc@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" + integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w== + dependencies: + event-pubsub "4.3.0" + js-message "1.0.5" + js-queue "2.0.0" + +"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.61: + version "1.1.63" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.63.tgz#db6dbb388544c31e888216304e8fd170efee3ff5" + integrity sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg== + +node-sass@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" + integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^7.0.3" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + lodash "^4.17.15" + meow "^9.0.0" + nan "^2.13.2" + node-gyp "^7.1.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.0.0, npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.values@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" + integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== + dependencies: + parse5 "^5.1.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "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.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +pnp-webpack-plugin@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + 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.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier@^1.18.2: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.1.1, read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", 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.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.6.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + +sass-loader@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.1.0.tgz#b73324622231009da6fba61ab76013256380d201" + integrity sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + 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" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + +tapable@^0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@^1.4.3, terser-webpack-plugin@^1.4.4: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thread-loader@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" + integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== + dependencies: + loader-runner "^2.3.1" + loader-utils "^1.1.0" + neo-async "^2.6.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tsconfig-paths@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" + integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vue-eslint-parser@^7.10.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf" + integrity sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg== + dependencies: + debug "^4.1.1" + eslint-scope "^5.1.1" + eslint-visitor-keys "^1.1.0" + espree "^6.2.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^6.3.0" + +vue-hot-reload-api@^2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" + integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== + +"vue-loader-v16@npm:vue-loader@^16.1.0": + version "16.1.2" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.1.2.tgz#5c03b6c50d2a5f983c7ceba15c50d78ca2b298f4" + integrity sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q== + dependencies: + chalk "^4.1.0" + hash-sum "^2.0.0" + loader-utils "^2.0.0" + +vue-loader@^15.9.2: + version "15.9.6" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.6.tgz#f4bb9ae20c3a8370af3ecf09b8126d38ffdb6b8b" + integrity sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg== + dependencies: + "@vue/component-compiler-utils" "^3.1.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webpack-bundle-analyzer@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" + integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.19" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-chain@^6.4.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" + integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^2.0.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== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.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.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.0.0: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + 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" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.0.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" + integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== + dependencies: + execa "^0.8.0" + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" diff --git a/plugins/shortcode-core/shortcode-core.php b/plugins/shortcode-core/shortcode-core.php new file mode 100644 index 0000000..abcf24b --- /dev/null +++ b/plugins/shortcode-core/shortcode-core.php @@ -0,0 +1,293 @@ + [ + ['autoload', 100001], + ['onPluginsInitialized', 10] + ], + 'registerNextGenEditorPlugin' => [ + ['registerNextGenEditorPlugin', 0], + ['registerNextGenEditorPluginShortcodes', 0], + ] + ]; + } + + /** + * [onPluginsInitialized:100000] Composer autoload. + * + * @return ClassLoader + */ + public function autoload() + { + return require __DIR__ . '/vendor/autoload.php'; + } + + /** + * Initialize configuration + */ + public function onPluginsInitialized() + { + $this->config = $this->grav['config']; + + // don't continue if this is admin and plugin is disabled for admin + if (!$this->config->get('plugins.shortcode-core.active_admin') && $this->isAdmin()) { + return; + } + + $this->enable([ + 'onThemeInitialized' => ['onThemeInitialized', 0], + 'onMarkdownInitialized' => ['onMarkdownInitialized', 0], + 'onShortcodeHandlers' => ['onShortcodeHandlers', 0], + 'onPageContentRaw' => ['onPageContentRaw', 0], + 'onPageContentProcessed' => ['onPageContentProcessed', -10], + 'onPageContent' => ['onPageContent', 0], + 'onTwigInitialized' => ['onTwigInitialized', 0], + 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0], + ]); + + $this->grav['shortcode'] = $this->shortcodes = new ShortcodeManager(); + } + + /** + * Theme initialization is best place to fire onShortcodeHandler event + * in order to support both plugins and themes + */ + public function onThemeInitialized() + { + $this->grav->fireEvent('onShortcodeHandlers'); + } + + /** + * Handle the markdown Initialized event by setting up shortcode block tags + * + * @param Event $event the event containing the markdown parser + */ + public function onMarkdownInitialized(Event $event) + { + $this->shortcodes->setupMarkdown($event['markdown']); + } + + /** + * Process shortcodes before Grav's processing + * + * @param Event $e + */ + public function onPageContentRaw(Event $e) + { + $this->processShortcodes($e['page'], 'processRawContent'); + } + + /** + * Process shortcodes after Grav's processing, but before caching + * + * @param Event $e + */ + public function onPageContentProcessed(Event $e) + { + $this->processShortcodes($e['page'], 'processContent'); + } + + /** + * @param PageInterface $page + * @param string $type + */ + protected function processShortcodes(PageInterface $page, $type = 'processContent') { + $meta = []; + $this->shortcodes->resetObjects(); // clear shortcodes that may have been processed in this execution thread before + $config = $this->mergeConfig($page); + + // Don't run in admin pages other than content + $admin_pages_only = $config['admin_pages_only'] ?? true; + if ($admin_pages_only && $this->isAdmin() && !Utils::startsWith($page->filePath(), $this->grav['locator']->findResource('page://'))) { + return; + } + + $this->active = $config->get('active', true); + + // if the plugin is not active (either global or on page) exit + if (!$this->active) { + return; + } + + // process the content for shortcodes + $page->setRawContent($this->shortcodes->$type($page, $config)); + + // if objects found set them as page content meta + $shortcode_objects = $this->shortcodes->getObjects(); + if (!empty($shortcode_objects)) { + $meta['shortcode'] = $shortcode_objects; + } + + // if assets founds set them as page content meta + $shortcode_assets = $this->shortcodes->getAssets(); + if (!empty($shortcode_assets)) { + $meta['shortcodeAssets'] = $shortcode_assets; + } + + // if we have meta set, let's add it to the content meta + if (!empty($meta)) { + $page->addContentMeta('shortcodeMeta', $meta); + } + } + + /** + * @param PageInterface $page + * @return \Grav\Common\Data\Data + */ + protected function getConfig(PageInterface $page) + { + $config = $this->mergeConfig($page); + $this->active = false; + + // Don't run in admin pages other than content + $admin_pages_only = isset($config['admin_pages_only']) ? $config['admin_pages_only'] : true; + if ($admin_pages_only && + $this->isAdmin() && + !Utils::startsWith($page->filePath(), $this->grav['locator']->findResource('page://'))) { + + } else { + $this->active = $config->get('active', true); + } + + return $config; + } + + /** + * Handle the assets that might be associated with this page + */ + public function onPageContent(Event $event) + { + if (!$this->active) { + return; + } + + $page = $event['page']; + + // get the meta and check for assets + $page_meta = $page->getContentMeta('shortcodeMeta'); + + if (is_array($page_meta)) { + if (isset($page_meta['shortcodeAssets'])) { + + $page_assets = (array) $page_meta['shortcodeAssets']; + + /** @var Assets $assets */ + $assets = $this->grav['assets']; + // if we actually have data now, add it to asset manager + foreach ($page_assets as $type => $asset) { + foreach ($asset as $item) { + $method = 'add'.ucfirst($type); + if (is_array($item)) { + $assets->$method($item[0], $item[1]); + } else { + $assets->$method($item); + } + } + } + } + } + } + + /** + * Event that handles registering handler for shortcodes + */ + public function onShortcodeHandlers() + { + $include_default_shortcodes = $this->config->get('plugins.shortcode-core.include_default_shortcodes', true); + if ($include_default_shortcodes) { + $this->shortcodes->registerAllShortcodes(__DIR__ . '/classes/shortcodes', ['ignore' => ['Shortcode', 'ShortcodeObject']]); + } + + // Add custom shortcodes directory if provided + $custom_shortcodes = $this->config->get('plugins.shortcode-core.custom_shortcodes'); + if (isset($custom_shortcodes)) { + $this->shortcodes->registerAllShortcodes(GRAV_ROOT . $custom_shortcodes); + } + } + + /** + * Add a twig filter for processing shortcodes in templates + */ + public function onTwigInitialized() + { + $this->grav['twig']->twig()->addFilter(new TwigFilter('shortcodes', [$this->shortcodes, 'processShortcodes'])); + $this->grav['twig']->twig_vars['shortcode'] = new ShortcodeTwigVar(); + } + + public function onTwigTemplatePaths() + { + $this->grav['twig']->twig_paths[] = __DIR__ . '/templates'; + } + + public function registerNextGenEditorPlugin($event) { + $config = $this->config->get('plugins.shortcode-core.nextgen-editor'); + $plugins = $event['plugins']; + + if ($config['env'] !== 'development') { + $plugins['css'][] = 'plugin://shortcode-core/nextgen-editor/dist/css/app.css'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/dist/js/app.js'; + } else { + $plugins['js'][] = 'http://' . $config['dev_host'] . ':' . $config['dev_port'] . '/js/app.js'; + } + + $event['plugins'] = $plugins; + return $event; + } + + public function registerNextGenEditorPluginShortcodes($event) { + $include_default_shortcodes = $this->config->get('plugins.shortcode-core.include_default_shortcodes', true); + if ($include_default_shortcodes) { + $plugins = $event['plugins']; + + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/shortcode-core.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/align/align.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/color/color.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/columns/columns.js'; + $plugins['css'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/details/details.css'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/details/details.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/div/div.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/figure/figure.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/fontawesome/fontawesome.js'; + $plugins['css'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/headers/headers.css'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/headers/headers.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/language/language.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/lorem/lorem.js'; + $plugins['css'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/mark/mark.css'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/mark/mark.js'; + $plugins['css'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/notice/notice.css'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/notice/notice.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/raw/raw.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/safe-email/safe-email.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/section/section.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/size/size.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/span/span.js'; + $plugins['js'][] = 'plugin://shortcode-core/nextgen-editor/shortcodes/u/u.js'; + + $event['plugins'] = $plugins; + } + return $event; + } + +} diff --git a/plugins/shortcode-core/shortcode-core.yaml b/plugins/shortcode-core/shortcode-core.yaml new file mode 100644 index 0000000..de76f84 --- /dev/null +++ b/plugins/shortcode-core/shortcode-core.yaml @@ -0,0 +1,17 @@ +enabled: true +active: true +active_admin: true +admin_pages_only: true +parser: regular +include_default_shortcodes: true +css: + notice_enabled: true +custom_shortcodes: +fontawesome: + load: true + url: '//maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css' + v5: false +nextgen-editor: + env: production + dev_host: localhost + dev_port: 2001 diff --git a/plugins/shortcode-core/templates/shortcodes/notice.html.twig b/plugins/shortcode-core/templates/shortcodes/notice.html.twig new file mode 100644 index 0000000..e2bdc35 --- /dev/null +++ b/plugins/shortcode-core/templates/shortcodes/notice.html.twig @@ -0,0 +1,3 @@ +
+
{{ content|raw }}
+
\ No newline at end of file diff --git a/plugins/shortcode-core/vendor/autoload.php b/plugins/shortcode-core/vendor/autoload.php new file mode 100644 index 0000000..d7a4ef3 --- /dev/null +++ b/plugins/shortcode-core/vendor/autoload.php @@ -0,0 +1,12 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/plugins/shortcode-core/vendor/composer/InstalledVersions.php b/plugins/shortcode-core/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..41bc143 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/InstalledVersions.php @@ -0,0 +1,352 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/plugins/shortcode-core/vendor/composer/LICENSE b/plugins/shortcode-core/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/plugins/shortcode-core/vendor/composer/autoload_classmap.php b/plugins/shortcode-core/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..84beac3 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/autoload_classmap.php @@ -0,0 +1,11 @@ + $vendorDir . '/composer/InstalledVersions.php', + 'Grav\\Plugin\\ShortcodeCorePlugin' => $baseDir . '/shortcode-core.php', +); diff --git a/plugins/shortcode-core/vendor/composer/autoload_namespaces.php b/plugins/shortcode-core/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..15a2ff3 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/thunderer/shortcode/src'), + 'Grav\\Plugin\\Shortcodes\\' => array($baseDir . '/classes/shortcodes'), + 'Grav\\Plugin\\ShortcodeCore\\' => array($baseDir . '/classes/plugin'), +); diff --git a/plugins/shortcode-core/vendor/composer/autoload_real.php b/plugins/shortcode-core/vendor/composer/autoload_real.php new file mode 100644 index 0000000..856afc5 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/autoload_real.php @@ -0,0 +1,38 @@ +register(true); + + return $loader; + } +} diff --git a/plugins/shortcode-core/vendor/composer/autoload_static.php b/plugins/shortcode-core/vendor/composer/autoload_static.php new file mode 100644 index 0000000..26843d1 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/autoload_static.php @@ -0,0 +1,50 @@ + + array ( + 'Thunder\\Shortcode\\' => 18, + ), + 'G' => + array ( + 'Grav\\Plugin\\Shortcodes\\' => 23, + 'Grav\\Plugin\\ShortcodeCore\\' => 26, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Thunder\\Shortcode\\' => + array ( + 0 => __DIR__ . '/..' . '/thunderer/shortcode/src', + ), + 'Grav\\Plugin\\Shortcodes\\' => + array ( + 0 => __DIR__ . '/../..' . '/classes/shortcodes', + ), + 'Grav\\Plugin\\ShortcodeCore\\' => + array ( + 0 => __DIR__ . '/../..' . '/classes/plugin', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Grav\\Plugin\\ShortcodeCorePlugin' => __DIR__ . '/../..' . '/shortcode-core.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit20dff4ef15e2090e54c04a9aa83321b9::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit20dff4ef15e2090e54c04a9aa83321b9::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit20dff4ef15e2090e54c04a9aa83321b9::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/plugins/shortcode-core/vendor/composer/installed.json b/plugins/shortcode-core/vendor/composer/installed.json new file mode 100644 index 0000000..a2b30f1 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/installed.json @@ -0,0 +1,65 @@ +{ + "packages": [ + { + "name": "thunderer/shortcode", + "version": "v0.7.5", + "version_normalized": "0.7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thunderer/Shortcode.git", + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/a4fee30613bd46efb421f8305aff0466a3268a99", + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "suggest": { + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer", + "symfony/yaml": "if you want to use YAML serializer" + }, + "time": "2022-01-13T18:53:33+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": [ + "bbcode", + "engine", + "library", + "parser", + "shortcode" + ], + "support": { + "issues": "https://github.com/thunderer/Shortcode/issues", + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" + }, + "install-path": "../thunderer/shortcode" + } + ], + "dev": false, + "dev-package-names": [] +} diff --git a/plugins/shortcode-core/vendor/composer/installed.php b/plugins/shortcode-core/vendor/composer/installed.php new file mode 100644 index 0000000..864b723 --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'pretty_version' => 'dev-develop', + 'version' => 'dev-develop', + 'type' => 'grav-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => 'd351265e0de9dfd18dcc842977d80b97c9524e81', + 'name' => 'getgrav/shortcode-core', + 'dev' => false, + ), + 'versions' => array( + 'getgrav/shortcode-core' => array( + 'pretty_version' => 'dev-develop', + 'version' => 'dev-develop', + 'type' => 'grav-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => 'd351265e0de9dfd18dcc842977d80b97c9524e81', + 'dev_requirement' => false, + ), + 'thunderer/shortcode' => array( + 'pretty_version' => 'v0.7.5', + 'version' => '0.7.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../thunderer/shortcode', + 'aliases' => array(), + 'reference' => 'a4fee30613bd46efb421f8305aff0466a3268a99', + 'dev_requirement' => false, + ), + ), +); diff --git a/plugins/shortcode-core/vendor/composer/platform_check.php b/plugins/shortcode-core/vendor/composer/platform_check.php new file mode 100644 index 0000000..cd1bd2c --- /dev/null +++ b/plugins/shortcode-core/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70103)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.3". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/.github/workflows/test.yaml b/plugins/shortcode-core/vendor/thunderer/shortcode/.github/workflows/test.yaml new file mode 100644 index 0000000..befc1ee --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/.github/workflows/test.yaml @@ -0,0 +1,47 @@ +name: Test + +on: + push: + branches: ['master'] + pull_request: ~ + +jobs: + test: + runs-on: '${{ matrix.os }}' + strategy: + matrix: + php: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] + os: ['ubuntu-latest'] + failure: [false] + include: + - { php: '8.2', os: 'ubuntu-latest', failure: true } # '8.2' means 'nightly' + steps: + - name: 'Checkout' + uses: 'actions/checkout@v2' + - name: 'Install PHP' + uses: 'shivammathur/setup-php@v2' + with: + php-version: '${{ matrix.php }}' + tools: 'composer:v2' + coverage: 'xdebug' + - name: 'PHP' + run: 'php -v' + + - name: 'Composer' + run: 'composer install' + continue-on-error: '${{ matrix.failure }}' + - name: 'PHPUnit' + run: 'php vendor/bin/phpunit --coverage-text' + continue-on-error: '${{ matrix.failure }}' + - name: 'Psalm' + run: | + composer require --dev vimeo/psalm + php vendor/bin/psalm --shepherd --php-version=${{ matrix.php }} + if: '${{ matrix.php >= 7.1 }}' + continue-on-error: '${{ matrix.failure }}' + - name: 'Infection' + run: | + composer require --dev --with-all-dependencies infection/infection + php vendor/bin/infection + if: '${{ matrix.php >= 7.1 }}' + continue-on-error: '${{ matrix.failure }}' diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/.gitignore b/plugins/shortcode-core/vendor/thunderer/shortcode/.gitignore new file mode 100644 index 0000000..34e595c --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/.gitignore @@ -0,0 +1,6 @@ +.phpunit.result.cache +infection.log +vendor +composer.lock +coverage +coverage.xml diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/CHANGELOG.md b/plugins/shortcode-core/vendor/thunderer/shortcode/CHANGELOG.md new file mode 100644 index 0000000..040d0c1 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/CHANGELOG.md @@ -0,0 +1,139 @@ +# Changelog + +## Version 0.* + +* v0.6.2 (25.04.2016) + + * fixed issue with parsing shortcode tokens inside shortcode content. + +* v0.6.1 (25.02.2016) + + * fixed bug with not recalculating new text length after applying shortcode replacement which caused the replacements to be applied only up to the length of source text. + +* v0.6.0 (13.02.2016) + + * README was completely rewritten to take into account newest additions, + * introduced `FilterShortcodesEvent` for modifying set of parsed shortcodes before processing them, + * introduced `ReplaceShortcodesEvent` to alter the way shortcode replacements are applied to source text at each processing level, + * introduced `EventContainerInterface` with default implementation `EventContainer` to store event handlers, + * introduced events handling in `Processor` with events above, + * added `Processor::withEventContainer()` to configure event handlers, + * added `ProcessedShortcode::hasAncestor()` to detect if shortcode has any parent with given name, + * introduced `ReplacedShortcode` which represents parsed shortcode data with replacement returned from its handler, + * introduced ready to use event handlers classes: + * `FilterRawEventHandler` allows to automatically configure shortcodes that should not have their content processed, + * `ReplaceJoinEventHandler` discards the parent shortcode content and returns only concatenated replacements, + * fixed `HandlerContainer::addAlias()` bug that may have silently added aliases for default handler, + * added possibility to create `WordpressParser` with names from array or `HandlerContainer` to catch only those like WordPress does, + * fixed differences between parsers and standardized validating allowed characters in their names in `RegexBuilderUtility::buildNameRegex()` + * introduced several ready to use shortcode handlers described in dedicated section of README, + * refactored `ShortcodeFacade` for better developer experience. + +* v0.5.3 (26.01.2016) + * massive performance improvements in RegularParser, + * fixed problem with multibyte characters in parsed texts, + * fixed matching shortcodes with invalid names. + +* v0.5.2 (20.01.2016) + * fixed bug with subsequent string tokens in RegularParser. + +* v0.5.1 (12.11.2015) + + * fixed bug leaving part of shortcode text when it contained multibyte characters. + +* v0.5.0 (28.10.2015) + + * fixed bug with parent shortcode not being correctly set when there was more than one shortcode at given recursion level, + * fixed bug which caused shortcode content to be returned without modification when auto processing was enabled, there was no handler for that shortcode, but there were handlers for inner shortcodes, + * added example demonstrating how to remove content outside shortcodes, + * added `ProcessedShortcode::getTextContent()` to allow returning unprocessed content regardless of auto processing setting value, + * added XML and YAML serializers, + * AbstractShortcode::getParameter() does not throw exception for missing parameter without default value, + * removed `create*()` methods from `ShortcodeFacade`, now all dependencies construction is inside the constructor, + * removed classes and methods deprecated in previous releases, + * removed `RegexExtractor` and `ExtractorInterface`, its functionality was moved to `Parser` - now it returns instances of `ParsedShortcodeInterface`, + * removed `Match` and `MatchInterface`, + * removed `HandlerInterface`, from now on handlers can be only closures and classes with `__invoke()` (`callable` typehint), + * removed all handler-related methods from `Processor` (extracted to `HandlerContainer`): + * `addHandler()`, + * `addHandlerAlias()`, + * `setDefaultHandler()`. + * refactored `ShortcodeFacade` to also use `HandlerContainer`, also `SyntaxInterface` parameter is now required, + * `Processor` is now immutable, options setters were refactored to return reconfigured clones: + * `setRecursionDepth()` » `withRecursionDepth()`, + * `setMaxIterations()` » `withMaxIterations()`, + * `setAutoProcessContent()` » `withAutoProcessContent()`, + * extracted `HandlerContainerInterface` and its default implementation `HandlerContainer` from `Processor`, + * `Processor` now requires instance of `HandlerContainer`, + * introduced `RegularParser` with dedicated parser implementation that correctly handles nested shortcodes, + * introduced `WordpressParser` with slightly refactored implementation of WordPress' regex-based shortcodes in case anyone would like full compatibility, + * introduced `ImmutableHandlerContainer` as an alternative implementation, + * introduced `ProcessorContext` to store internal state when processing text, + * introduced `AbstractShortcode`, restored `final` on regular `Shortcode`, + * `ProcessedShortcode` can be now created with static method `createFromContext()` using instance of `ProcessorContext`, + * introduced `ParsedShortcode` and `ParsedShortcodeInterface` that extends `ShortcodeInterface` with position and exact text match. + +* v0.4.0 (15.07.2015) + + * classes and interfaces were moved to their own namespaces, update your `use` clauses and use new names. Backward compatibility was fully maintained, but note that previous class files will be removed in the next release. Old class files contain call to `class_alias()` and empty implementation for IDE autocompletion, interfaces extend those from new locations. All modified elements are listed below: + * `Extractor` » `Parser\RegexExtractor`, + * `ExtractorInterface` » `Extractor\ExtractorInterface`, + * `HandlerInterface` » `Extractor\HandlerInterface`, + * `Parser` » `Parser\RegexParser`, + * `ParserInterface` » `Parser\ParserInterface`, + * `Processor` » `Processor\Processor`, + * `ProcessorInterface` » `Processor\ProcessorInterface`, + * `SerializerInterface` » `Serializer\SerializerInterface`, + * `Shortcode` » `Shortcode\Shortcode`, + * `Syntax` » `Syntax\Syntax`, + * `SyntaxBuilder` » `Syntax\SyntaxBuilder`, + * next version of this library will remove all files marked as deprecated (listed above) and will introduce backward incompatible changes to allow finishing refactorings for version 1.0. Sneak peek: + * `Extractor` abstraction will be removed and its functionality will be merged with `Parser`, + * processing shortcode content will be moved to its handler, + * `ProcessedShortcode` will be aware of `ProcessorInterface` instance that is processing it, + * `HandlerContainer` will be refactored outside `Processor` to remove SRP violation, + * various methods will lose their ability to accept nullable parameters to enforce visibility of dependencies, + * `ProcessedShortcode` will not extend `Shortcode` and `Shortcode` will be `final` again, + * `Match` class will be removed and `ParsedShortcode` will be introduced in its place, + * introduced `ShortcodeInterface` for reusable shortcode implementation, handlers should typehint it, + * nearly all classes and interfaces were renamed and moved to their own namespaces, see UPGRADE, + * introduced `ProcessedShortcode` to provide more runtime information about context in handlers, + * strict syntax capabilities were removed (will be reimplemented in the future), + * introduced `CommonSyntax` with default values, + * introduced `RegexBuilderUtility` to separate regex building from `Syntax` class, + * improved regular expressions which now offer more flexibility, + * `HandlerInterface` was deprecated, please use classes with __invoke() method. + +* v0.3.0 (08.05.2015) + + * added support for `[self-closing /]` shortcodes, + * added library facade for easier usage, + * `Syntax` regular expressions are now built once in constructor, + * added support for whitespace between shortcode fragments, ie. `[ code arg = val ] [ / code ]`, + * `Syntax` and `SyntaxBuilder` support whitespaced and strict syntaxes. + +* v0.2.2 (26.04.2015) + + * fixed support for PHP 5.3. + +* v0.2.1 (23.04.2015) + + * fixed matching simple parameter values enclosed by delimiters, + * fixed missing support for escaping characters inside parameter values. + +* v0.2.0 (17.04.2015) + + * added HandlerInterface to enable shortcode handlers with basic validation capabilities, + * added default handler for processing shortcodes without registered name handlers, + * added handler aliasing to reuse name handlers without manually registering them, + * added recursive processing with ability to control recursion depth, + * added iterative processing with ability to control maximum number of iterations, + * added configurable syntax to enable different shortcode formats without modifying library code, + * added syntax builder to ease building `Syntax` object, + * added dash `-` to allowed characters in shortcode names, + * deprecated `Processor::setRecursion()`, use `Processor::setRecursionDepth()` instead, + * removed regular expressions constants from classes. + +* v0.1.0 (06.04.2015) + + * first library version. diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/LICENSE b/plugins/shortcode-core/vendor/thunderer/shortcode/LICENSE new file mode 100644 index 0000000..7410a25 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2022 Tomasz Kowalczyk + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/Makefile b/plugins/shortcode-core/vendor/thunderer/shortcode/Makefile new file mode 100644 index 0000000..23bdc28 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/Makefile @@ -0,0 +1,60 @@ +PHP_VERSION ?= 8.0 +PHP := docker-compose run --rm php-${PHP_VERSION} + +php-version: + ${PHP} php -v +cache-clear: + sudo rm -rfv coverage .phpunit.result.cache infection.log + +docker-build: + docker-compose build + +composer-install: + ${PHP} composer install +composer-self-update: + ${PHP} composer self-update +composer-update: + ${PHP} composer update +composer-require: + ${PHP} composer require ${PACKAGE} +composer-require-dev: + ${PHP} composer require --dev ${PACKAGE} + +test: test-phpunit test-infection qa-psalm +test-phpunit: + ${PHP} php -v + ${PHP} php vendor/bin/phpunit --coverage-text +test-phpunit-local: + php -v + php vendor/bin/phpunit --coverage-text + php vendor/bin/psalm --no-cache + php vendor/bin/infection +test-infection: + ${PHP} php vendor/bin/infection -j2 --min-msi=80 + +travis: + # PHP_VERSION=5.3 make travis-job + PHP_VERSION=5.4 make travis-job + PHP_VERSION=5.5 make travis-job + PHP_VERSION=5.6 make travis-job + PHP_VERSION=7.0 make travis-job + PHP_VERSION=7.1 make travis-job + PHP_VERSION=7.2 make travis-job + PHP_VERSION=7.3 make travis-job + PHP_VERSION=7.4 make travis-job + PHP_VERSION=8.0 make travis-job +travis-job: + ${PHP} composer update --no-plugins + ${PHP} php -v + ${PHP} php vendor/bin/phpunit + if ${PHP} php -r 'exit((int)(version_compare(PHP_VERSION, "7.1", ">=") === false));'; then \ + ${PHP} composer require --dev vimeo/psalm infection/infection; \ + ${PHP} vendor/bin/psalm --threads=1 --no-cache --shepherd --find-unused-psalm-suppress; \ + ${PHP} vendor/bin/infection; \ + ${PHP} composer remove --dev vimeo/psalm infection/infection; \ + fi; + +qa-psalm: + ${PHP} php vendor/bin/psalm --no-cache +qa-psalm-suppressed: + grep -rn psalm-suppress src diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/README.md b/plugins/shortcode-core/vendor/thunderer/shortcode/README.md new file mode 100644 index 0000000..071a377 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/README.md @@ -0,0 +1,396 @@ +# Shortcode + +[![Build Status](https://github.com/thunderer/Shortcode/actions/workflows/test.yaml/badge.svg)](https://github.com/thunderer/Shortcode) +[![Latest Stable Version](https://poser.pugx.org/thunderer/shortcode/v/stable.svg)](https://packagist.org/packages/thunderer/shortcode) +[![Total Downloads](https://poser.pugx.org/thunderer/shortcode/downloads)](https://packagist.org/packages/thunderer/shortcode) +[![License](https://poser.pugx.org/thunderer/shortcode/license.svg)](https://packagist.org/packages/thunderer/shortcode) +[![Psalm coverage](https://shepherd.dev/github/thunderer/Shortcode/coverage.svg)](https://shepherd.dev/github/thunderer/Shortcode) +[![Code Coverage](https://scrutinizer-ci.com/g/thunderer/Shortcode/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/thunderer/Shortcode/?branch=master) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/thunderer/Shortcode/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/thunderer/Shortcode/?branch=master) + +Shortcode is a framework agnostic PHP library allowing to find, extract and process text fragments called "shortcodes" or "BBCodes". Examples of their usual syntax and usage are shown below: + +``` +[user-profile /] +[image width=600] +[link href="http://google.pl" color=red] +[quote="Thunderer"]This is a quote.[/quote] +[text color="red"]This is a text.[/text] +``` + +The library is divided into several parts, each of them containing logic responsible for different stages and ways of processing data: + +- **parsers** extract shortcodes from text and transform them to objects, +- **handlers** transform shortcodes into desired replacements, +- **processors** use parsers and handlers to extract shortcodes, compute replacements, and apply them in text, +- **events** alter the way processors work to provide better control over the whole process, +- **serializers** convert shortcodes from and to different formats like Text, XML, JSON, and YAML. + +Each part is described in the dedicated section in this document. + + +## Installation + +There are no required dependencies and all PHP versions from 5.3 up to latest 8.1 [are tested](https://github.com/thunderer/Shortcode/actions/workflows/test.yaml) and supported. This library is available on Composer/Packagist as `thunderer/shortcode`, to install it execute: + +``` +composer require thunderer/shortcode=^0.7 +``` + +or manually update your `composer.json` with: + +``` +(...) +"require": { + "thunderer/shortcode": "^0.7" +} +(...) +``` + +and run `composer install` or `composer update` afterwards. If you're not using Composer, download sources from GitHub and load them as required. But really, please use Composer. + +## Usage + +### Facade + +To ease usage of this library there is a class `ShortcodeFacade` configured for most common needs. It contains shortcut methods for all features described in the sections below: + +- `addHandler()`: adds shortcode handlers, +- `addHandlerAlias()`: adds shortcode handler alias, +- `process()`: processes text and replaces shortcodes, +- `parse()`: parses text into shortcodes, +- `setParser()`: changes processor's parser, +- `addEventHandler()`: adds event handler, +- `serialize()`: serializes shortcode object to given format, +- `unserialize()`: creates shortcode object from serialized input. + +### Processing + +Shortcodes are processed using `Processor` which requires a parser and handlers. The example below shows how to implement an example that greets the person with name passed as an argument: + +```php +use Thunder\Shortcode\HandlerContainer\HandlerContainer; +use Thunder\Shortcode\Parser\RegularParser; +use Thunder\Shortcode\Processor\Processor; +use Thunder\Shortcode\Shortcode\ShortcodeInterface; + +$handlers = new HandlerContainer(); +$handlers->add('hello', function(ShortcodeInterface $s) { + return sprintf('Hello, %s!', $s->getParameter('name')); +}); +$processor = new Processor(new RegularParser(), $handlers); + +$text = ' +
[hello name="Thomas"]
+

Your shortcodes are very good, keep it up!

+
[hello name="Peter"]
+'; +echo $processor->process($text); +``` + +Facade example: + +```php +use Thunder\Shortcode\ShortcodeFacade; +use Thunder\Shortcode\Shortcode\ShortcodeInterface; + +$facade = new ShortcodeFacade(); +$facade->addHandler('hello', function(ShortcodeInterface $s) { + return sprintf('Hello, %s!', $s->getParameter('name')); +}); + +$text = ' +
[hello name="Thomas"]
+

Your shortcodes are very good, keep it up!

+
[hello name="Peter"]
+'; +echo $facade->process($text); +``` + +Both result in: + +``` +
Hello, Thomas!
+

Your shortcodes are very good, keep it up!

+
Hello, Peter!
+``` + +### Configuration + +`Processor` has several configuration options available as `with*()` methods which return the new, changed instance to keep the object immutable. + +- `withRecursionDepth($depth)` controls the nesting level - how many levels of shortcodes are actually processed. If this limit is reached, all shortcodes deeper than level are ignored. If the `$depth` value is null (default value), nesting level is not checked, if it's zero then nesting is disabled (only topmost shortcodes are processed). Any integer greater than zero sets the nesting level limit, +- `withMaxIterations($iterations)` controls the number of iterations that the source text is processed in. This means that source text is processed internally that number of times until the limit was reached or there are no shortcodes left. If the `$iterations` parameter value is null, there is no iterations limit, any integer greater than zero sets the limit. Defaults to one iteration, +- `withAutoProcessContent($flag)` controls automatic processing of shortcode's content before calling its handler. If the `$flag` parameter is `true` then handler receives shortcode with already processed content, if `false` then handler must process nested shortcodes itself (or leave them for the remaining iterations). This is turned on by default, +- `withEventContainer($events)` registers event container which provides handlers for all the events fired at various stages of processing text. Read more about events in the section dedicated to them. + +### Events + +If processor was configured with events container there are several possibilities to alter the way shortcodes are processed: + +- `Events::FILTER_SHORTCODES` uses `FilterShortcodesEvent` class. It receives current parent shortcode and array of shortcodes from parser. Its purpose is to allow modifying that array before processing them, +- `Events::REPLACE_SHORTCODES` uses `ReplaceShortcodesEvent` class and receives the parent shortcode, currently processed text, and array of replacements. It can alter the way shortcodes handlers results are applied to the source text. If none of the listeners set the result, the default method is used. + +There are several ready to use event handlers in the `Thunder\Shortcode\EventHandler` namespace: + +- `FilterRawEventHandler` implements `FilterShortcodesEvent` and allows to implement any number of "raw" shortcodes whose content is not processed, +- `ReplaceJoinEventHandler` implements `ReplaceShortcodesEvent` and provides the mechanism to apply shortcode replacements by discarding text and returning just replacements. + +The example below shows how to manually implement a `[raw]` shortcode that returns its verbatim content without calling any handler for nested shortcodes: + +```php +use Thunder\Shortcode\Event\FilterShortcodesEvent; +use Thunder\Shortcode\EventContainer\EventContainer; +use Thunder\Shortcode\Events; +use Thunder\Shortcode\HandlerContainer\HandlerContainer; +use Thunder\Shortcode\Parser\RegularParser; +use Thunder\Shortcode\Processor\Processor; +use Thunder\Shortcode\Shortcode\ShortcodeInterface; + +$handlers = new HandlerContainer(); +$handlers->add('raw', function(ShortcodeInterface $s) { return $s->getContent(); }); +$handlers->add('n', function(ShortcodeInterface $s) { return $s->getName(); }); +$handlers->add('c', function(ShortcodeInterface $s) { return $s->getContent(); }); + +$events = new EventContainer(); +$events->addListener(Events::FILTER_SHORTCODES, function(FilterShortcodesEvent $event) { + $parent = $event->getParent(); + if($parent && ($parent->getName() === 'raw' || $parent->hasAncestor('raw'))) { + $event->setShortcodes(array()); + } +}); + +$processor = new Processor(new RegularParser(), $handlers); +$processor = $processor->withEventContainer($events); + +assert(' [n /] [c]cnt[/c] ' === $processor->process('[raw] [n /] [c]cnt[/c] [/raw]')); +assert('n true [n /] ' === $processor->process('[n /] [c]true[/c] [raw] [n /] [/raw]')); +``` + +Facade example: + +```php +use Thunder\Shortcode\Event\FilterShortcodesEvent; +use Thunder\Shortcode\Events; +use Thunder\Shortcode\Shortcode\ShortcodeInterface; +use Thunder\Shortcode\ShortcodeFacade; + +$facade = new ShortcodeFacade(); +$facade->addHandler('raw', function(ShortcodeInterface $s) { return $s->getContent(); }); +$facade->addHandler('n', function(ShortcodeInterface $s) { return $s->getName(); }); +$facade->addHandler('c', function(ShortcodeInterface $s) { return $s->getContent(); }); + +$facade->addEventHandler(Events::FILTER_SHORTCODES, function(FilterShortcodesEvent $event) { + $parent = $event->getParent(); + if($parent && ($parent->getName() === 'raw' || $parent->hasAncestor('raw'))) { + $event->setShortcodes(array()); + } +}); + +assert(' [n /] [c]cnt[/c] ' === $facade->process('[raw] [n /] [c]cnt[/c] [/raw]')); +assert('n true [n /] ' === $facade->process('[n /] [c]true[/c] [raw] [n /] [/raw]')); +``` + +## Parsing + +This section discusses available shortcode parsers. Regardless of the parser that you will choose, remember that: + +- shortcode names can be only aplhanumeric characters and dash `-`, basically must conform to the `[a-zA-Z0-9-]+` regular expression, +- unsupported shortcodes (no registered handler or default handler) will be ignored and left as they are, +- mismatching closing shortcode (`[code]content[/codex]`) will be ignored, opening tag will be interpreted as self-closing shortcode, eg. `[code /]`, +- overlapping shortcodes (`[code]content[inner][/code]content[/inner]`) will be interpreted as self-closing, eg. `[code]content[inner /][/code]`, second closing tag will be ignored, + +There are three included parsers in this library: + +- `RegularParser` is the most powerful and correct parser available in this library. It contains the actual parser designed to handle all the issues with shortcodes like proper nesting or detecting invalid shortcode syntax. It is slightly slower than regex-based parser described below, +- `RegexParser` uses a handcrafted regular expression dedicated to handle shortcode syntax as much as regex engine allows. It is fastest among the parsers included in this library, but it can't handle nesting properly, which means that nested shortcodes with the same name are also considered overlapping - (assume that shortcode `[c]` returns its content) string `[c]x[c]y[/c]z[/c]` will be interpreted as `xyz[/c]` (first closing tag was matched to first opening tag). This can be solved by aliasing handler name, because for example `[c]x[d]y[/d]z[/c]` will be processed correctly, +- `WordpressParser` contains code copied from the latest currently available WordPress (4.3.1). It is also a regex-based parser, but the included regular expression is quite weak, it for example won't support BBCode syntax (`[name="param" /]`). This parser by default supports the shortcode name rule, but can break it when created with one of the named constructors (`createFromHandlers()` or `createFromNames()`) that change its behavior to catch only configured names. All of it is intentional to keep the compatibility with what WordPress is capable of if you need that compatibility. + +### Syntax + +All parsers (except `WordpressParser`) support configurable shortcode syntax which can be configured by passing `SyntaxInterface` object as the first parameter. There is a convenience class `CommonSyntax` that contains default syntax. Usage is shown in the examples below: + +```php +use Thunder\Shortcode\HandlerContainer\HandlerContainer; +use Thunder\Shortcode\Parser\RegexParser; +use Thunder\Shortcode\Parser\RegularParser; +use Thunder\Shortcode\Processor\Processor; +use Thunder\Shortcode\Shortcode\ShortcodeInterface; +use Thunder\Shortcode\Syntax\CommonSyntax; +use Thunder\Shortcode\Syntax\Syntax; +use Thunder\Shortcode\Syntax\SyntaxBuilder; + +$builder = new SyntaxBuilder(); +``` + +Default syntax (called "common" in this library): + +``` +$defaultSyntax = new Syntax(); // without any arguments it defaults to common syntax +$defaultSyntax = new CommonSyntax(); // convenience class +$defaultSyntax = new Syntax('[', ']', '/', '=', '"'); // created explicitly +$defaultSyntax = $builder->getSyntax(); // builder defaults to common syntax +``` + +Syntax with doubled tokens: + +```php +$doubleSyntax = new Syntax('[[', ']]', '//', '==', '""'); +$doubleSyntax = $builder // actually using builder + ->setOpeningTag('[[') + ->setClosingTag(']]') + ->setClosingTagMarker('//') + ->setParameterValueSeparator('==') + ->setParameterValueDelimiter('""') + ->getSyntax(); +``` + +Something entirely different just to show the possibilities: + +```php +$differentSyntax = new Syntax('@', '#', '!', '&', '~'); +``` + +Verify that each syntax works properly: + +``` +$handlers = new HandlerContainer(); +$handlers->add('up', function(ShortcodeInterface $s) { + return strtoupper($s->getContent()); +}); + +$defaultRegex = new Processor(new RegexParser($defaultSyntax), $handlers); +$doubleRegex = new Processor(new RegexParser($doubleSyntax), $handlers); +$differentRegular = new Processor(new RegularParser($differentSyntax), $handlers); + +assert('a STRING z' === $defaultRegex->process('a [up]string[/up] z')); +assert('a STRING z' === $doubleRegex->process('a [[up]]string[[//up]] z')); +assert('a STRING z' === $differentRegular->process('a @up#string@!up# z')); +``` + +## Serialization + +This library supports several (un)serialization formats - XML, YAML, JSON and Text. Examples below shows how to both serialize and unserialize the same shortcode in each format: + +```php +use Thunder\Shortcode\Serializer\JsonSerializer; +use Thunder\Shortcode\Serializer\TextSerializer; +use Thunder\Shortcode\Serializer\XmlSerializer; +use Thunder\Shortcode\Serializer\YamlSerializer; +use Thunder\Shortcode\Shortcode\Shortcode; + +$shortcode = new Shortcode('quote', array('name' => 'Thomas'), 'This is a quote!'); +``` + +Text: + +```php +$text = '[quote name=Thomas]This is a quote![/quote]'; +$textSerializer = new TextSerializer(); + +$serializedText = $textSerializer->serialize($shortcode); +assert($text === $serializedText); +$unserializedFromText = $textSerializer->unserialize($serializedText); +assert($unserializedFromText->getName() === $shortcode->getName()); +``` + +JSON: + +```php +$json = '{"name":"quote","parameters":{"name":"Thomas"},"content":"This is a quote!","bbCode":null}'; +$jsonSerializer = new JsonSerializer(); +$serializedJson = $jsonSerializer->serialize($shortcode); +assert($json === $serializedJson); +$unserializedFromJson = $jsonSerializer->unserialize($serializedJson); +assert($unserializedFromJson->getName() === $shortcode->getName()); +``` + +YAML: + +``` +$yaml = "name: quote +parameters: + name: Thomas +content: 'This is a quote!' +bbCode: null +"; +$yamlSerializer = new YamlSerializer(); +$serializedYaml = $yamlSerializer->serialize($shortcode); +assert($yaml === $serializedYaml); +$unserializedFromYaml = $yamlSerializer->unserialize($serializedYaml); +assert($unserializedFromYaml->getName() === $shortcode->getName()); +``` + +XML: + +``` +$xml = ' + + + + + + + +'; +$xmlSerializer = new XmlSerializer(); +$serializedXml = $xmlSerializer->serialize($shortcode); +assert($xml === $serializedXml); +$unserializedFromXml = $xmlSerializer->unserialize($serializedXml); +assert($unserializedFromXml->getName() === $shortcode->getName()); +``` + +Facade also supports serialization in all available formats: + +```php +use Thunder\Shortcode\Shortcode\Shortcode; +use Thunder\Shortcode\ShortcodeFacade; + +$facade = new ShortcodeFacade(); + +$shortcode = new Shortcode('name', array('arg' => 'val'), 'content', 'bbCode'); + +$text = $facade->serialize($shortcode, 'text'); +$textShortcode = $facade->unserialize($text, 'text'); +assert($shortcode->getName() === $textShortcode->getName()); + +$json = $facade->serialize($shortcode, 'json'); +$jsonShortcode = $facade->unserialize($json, 'json'); +assert($shortcode->getName() === $jsonShortcode->getName()); + +$yaml = $facade->serialize($shortcode, 'yaml'); +$yamlShortcode = $facade->unserialize($yaml, 'yaml'); +assert($shortcode->getName() === $yamlShortcode->getName()); + +$xml = $facade->serialize($shortcode, 'xml'); +$xmlShortcode = $facade->unserialize($xml, 'xml'); +assert($shortcode->getName() === $xmlShortcode->getName()); +``` + +## Handlers + +There are several builtin shortcode handlers available in `Thunder\Shortcode\Handler` namespace. Description below assumes that given handler was registered with `xyz` name: + +- `NameHandler` always returns shortcode's name. `[xyz arg=val]content[/xyz]` becomes `xyz`, +- `ContentHandler` always returns shortcode's content. It discards its opening and closing tag. `[xyz]code[/xyz]` becomes `code`, +- `RawHandler` returns unprocessed shortcode content. Its behavior is different than `FilterRawEventHandler` because if content auto processing is turned on, then nested shortcodes handlers were called, just their result was discarded, +- `NullHandler` completely removes shortcode with all nested shortcodes, +- `DeclareHandler` allows to dynamically create shortcode handler with name as first parameter that will also replace all placeholders in text passed as arguments. Example: `[declare xyz]Your age is %age%.[/declare]` created handler for shortcode `xyz` and when used like `[xyz age=18]` the result is `Your age is 18.`, +- `EmailHandler` replaces the email address or shortcode content as clickable `mailto:` link: + - `[xyz="email@example.com" /]` becomes `
email@example.com`, + - `[xyz]email@example.com[/xyz]` becomes `email@example.com`, + - `[xyz="email@example.com"]Contact me![/xyz]` becomes `Contact me!`, +- `PlaceholderHandler` replaces all placeholders in shortcode's content with values of passed arguments. `[xyz year=1970]News from year %year%.[/xyz]` becomes `News from year 1970.`, +- `SerializerHandler` replaces shortcode with its serialized value using serializer passed as an argument in class' constructor. If configured with `JsonSerializer`, `[xyz /]` becomes `{"name":"json", "arguments": [], "content": null, "bbCode": null}`. This could be useful for debugging your shortcodes, +- `UrlHandler` replaces its content with a clickable link: + - `[xyz]http://example.com[/xyz]` becomes `http://example.com`, + - `[xyz="http://example.com"]Visit my site![/xyz]` becomes `Visit my site!`, +- `WrapHandler` allows to specify the value that should be placed before and after shortcode content. If configured with `` and ``, the text `[xyz]Bold text.[/xyz]` becomes `Bold text.`. + +## Contributing + +Want to contribute? Perfect! Submit an issue or Pull Request and explain what would you like to see in this library. + +## License + +See LICENSE file in the main directory of this library. diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/composer.json b/plugins/shortcode-core/vendor/thunderer/shortcode/composer.json new file mode 100644 index 0000000..b89f05a --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/composer.json @@ -0,0 +1,34 @@ +{ + "name": "thunderer/shortcode", + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": ["shortcode", "bbcode", "parser", "engine", "library"], + "license": "MIT", + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Thunder\\Shortcode\\Tests\\": "tests/" + } + }, + "suggest": { + "symfony/yaml": "if you want to use YAML serializer", + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer" + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/docker-compose.yaml b/plugins/shortcode-core/vendor/thunderer/shortcode/docker-compose.yaml new file mode 100644 index 0000000..5d6d75f --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/docker-compose.yaml @@ -0,0 +1,20 @@ +version: '3.4' + +x-php: &php + volumes: ['.:/app', './docker/php/php.ini:/usr/local/etc/php/conf.d/php.ini'] + working_dir: '/app' + +services: + # PHP 5.3 contains neither mbstring extension nor docker-php-ext-install script + # Original Dockerfile can be found here https://github.com/docker-library/php/pull/20/files + # Unfortunately it fails to build now because GPG signatures do not exist anymore + # php-5.3: { build: { context: docker/php-5.x, args: { PHP_VERSION: 5.3 } } } + php-5.4: { <<: *php, build: { context: docker/php-5.x, args: { PHP_VERSION: 5.4 } } } + php-5.5: { <<: *php, build: { context: docker/php-5.x, args: { PHP_VERSION: 5.5 } } } + php-5.6: { <<: *php, build: { context: docker/php-5.x, args: { PHP_VERSION: 5.6 } } } + php-7.0: { <<: *php, build: { context: docker/php, args: { PHP_VERSION: 7.0 } } } + php-7.1: { <<: *php, build: { context: docker/php, args: { PHP_VERSION: 7.1.3 } } } + php-7.2: { <<: *php, build: { context: docker/php, args: { PHP_VERSION: 7.2 } } } + php-7.3: { <<: *php, build: { context: docker/php, args: { PHP_VERSION: 7.3 } } } + php-7.4: { <<: *php, build: { context: docker/php, args: { PHP_VERSION: 7.4 } } } + php-8.0: { <<: *php, build: { context: docker/php, args: { PHP_VERSION: 8.0 } } } diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php-5.x/Dockerfile b/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php-5.x/Dockerfile new file mode 100644 index 0000000..d3bf11b --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php-5.x/Dockerfile @@ -0,0 +1,11 @@ +ARG PHP_VERSION=7.4 +FROM php:$PHP_VERSION + +RUN apt update && apt install -y --force-yes libonig-dev libzip-dev +RUN docker-php-ext-install mbstring zip + +RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ + && php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \ + && php composer-setup.php \ + && php -r "unlink('composer-setup.php');" \ + && mv composer.phar /usr/local/bin/composer diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php/Dockerfile b/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php/Dockerfile new file mode 100644 index 0000000..1cc6625 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php/Dockerfile @@ -0,0 +1,12 @@ +ARG PHP_VERSION=8.0 +FROM php:$PHP_VERSION + +RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ + && php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \ + && php composer-setup.php \ + && php -r "unlink('composer-setup.php');" \ + && mv composer.phar /usr/local/bin/composer + +RUN apt update && apt install -y libonig-dev libzip-dev +RUN docker-php-ext-install mbstring zip +RUN pecl install xdebug && docker-php-ext-enable xdebug diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php/php.ini b/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php/php.ini new file mode 100644 index 0000000..cea362e --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/docker/php/php.ini @@ -0,0 +1 @@ +xdebug.mode=coverage diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/infection.json b/plugins/shortcode-core/vendor/thunderer/shortcode/infection.json new file mode 100644 index 0000000..ba36c9a --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/infection.json @@ -0,0 +1,12 @@ +{ + "source": { + "directories": ["src"] + }, + "logs": { + "text": "infection.log" + }, + "timeout": 2, + "mutators": { + "@default": true + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/phpunit.xml.dist b/plugins/shortcode-core/vendor/thunderer/shortcode/phpunit.xml.dist new file mode 100644 index 0000000..f7c807d --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/phpunit.xml.dist @@ -0,0 +1,30 @@ + + + + + + tests + + + + + + src + + + + + + + diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/psalm.xml b/plugins/shortcode-core/vendor/thunderer/shortcode/psalm.xml new file mode 100644 index 0000000..e35b9ed --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/psalm.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Event/FilterShortcodesEvent.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Event/FilterShortcodesEvent.php new file mode 100644 index 0000000..dc554e3 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Event/FilterShortcodesEvent.php @@ -0,0 +1,62 @@ + + */ +class FilterShortcodesEvent +{ + /** @var ProcessedShortcode|null */ + private $parent; + /** @var ParsedShortcodeInterface[] */ + private $shortcodes = array(); + + /** @param ParsedShortcodeInterface[] $shortcodes */ + public function __construct(array $shortcodes, ProcessedShortcode $parent = null) + { + $this->parent = $parent; + $this->setShortcodes($shortcodes); + } + + /** @return ParsedShortcodeInterface[] */ + public function getShortcodes() + { + return $this->shortcodes; + } + + /** @return ProcessedShortcode|null */ + public function getParent() + { + return $this->parent; + } + + /** + * @param ParsedShortcodeInterface[] $shortcodes + * + * @return void + */ + public function setShortcodes(array $shortcodes) + { + $this->shortcodes = array(); + foreach($shortcodes as $shortcode) { + $this->addShortcode($shortcode); + } + } + + /** + * @param ParsedShortcodeInterface $shortcode + * + * @return void + */ + private function addShortcode(ParsedShortcodeInterface $shortcode) + { + $this->shortcodes[] = $shortcode; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Event/ReplaceShortcodesEvent.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Event/ReplaceShortcodesEvent.php new file mode 100644 index 0000000..39e1827 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Event/ReplaceShortcodesEvent.php @@ -0,0 +1,94 @@ + + */ +class ReplaceShortcodesEvent +{ + /** @var ShortcodeInterface|null */ + private $shortcode; + /** @var string */ + private $text; + /** @var ReplacedShortcode[] */ + private $replacements = array(); + /** @var string|null */ + private $result; + + /** + * @param string $text + * @param ReplacedShortcode[] $replacements + */ + public function __construct($text, array $replacements, ShortcodeInterface $shortcode = null) + { + $this->shortcode = $shortcode; + $this->text = $text; + + $this->setReplacements($replacements); + } + + /** + * @param ReplacedShortcode[] $replacements + * + * @return void + */ + private function setReplacements(array $replacements) + { + foreach($replacements as $replacement) { + $this->addReplacement($replacement); + } + } + + /** @return void */ + private function addReplacement(ReplacedShortcode $replacement) + { + $this->replacements[] = $replacement; + } + + /** @return string */ + public function getText() + { + return $this->text; + } + + /** @return ReplacedShortcode[] */ + public function getReplacements() + { + return $this->replacements; + } + + /** @return ShortcodeInterface|null */ + public function getShortcode() + { + return $this->shortcode; + } + + /** + * @param string $result + * + * @return void + */ + public function setResult($result) + { + $this->result = $result; + } + + /** @return string|null */ + public function getResult() + { + return $this->result; + } + + /** @return bool */ + public function hasResult() + { + return null !== $this->result; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventContainer/EventContainer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventContainer/EventContainer.php new file mode 100644 index 0000000..01b0d29 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventContainer/EventContainer.php @@ -0,0 +1,56 @@ + + */ +final class EventContainer implements EventContainerInterface +{ + /** @psalm-var array> */ + private $listeners = array(); + + public function __construct() + { + } + + /** + * @param string $event + * @param callable $handler + * + * @return void + */ + public function addListener($event, $handler) + { + if(!\in_array($event, Events::getEvents(), true)) { + throw new \InvalidArgumentException(sprintf('Unsupported event %s!', $event)); + } + + if(!array_key_exists($event, $this->listeners)) { + $this->listeners[$event] = array(); + } + + $this->listeners[$event][] = $handler; + } + + /** + * @param string $event + * + * @psalm-return list + */ + public function getListeners($event) + { + return $this->hasEvent($event) ? $this->listeners[$event] : array(); + } + + /** + * @param string $name + * + * @return bool + */ + private function hasEvent($name) + { + return array_key_exists($name, $this->listeners); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventContainer/EventContainerInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventContainer/EventContainerInterface.php new file mode 100644 index 0000000..ea358ef --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventContainer/EventContainerInterface.php @@ -0,0 +1,15 @@ + + */ +interface EventContainerInterface +{ + /** + * @param string $event + * + * @return callable[] + */ + public function getListeners($event); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventHandler/FilterRawEventHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventHandler/FilterRawEventHandler.php new file mode 100644 index 0000000..ca5da3e --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventHandler/FilterRawEventHandler.php @@ -0,0 +1,34 @@ + + */ +final class FilterRawEventHandler +{ + /** @var string[] */ + private $names = array(); + + public function __construct(array $names) + { + foreach($names as $name) { + if(false === is_string($name)) { + throw new \InvalidArgumentException('Expected array of strings!'); + } + + $this->names[] = $name; + } + } + + public function __invoke(FilterShortcodesEvent $event) + { + $parent = $event->getParent(); + if($parent && \in_array($parent->getName(), $this->names, true)) { + $event->setShortcodes(array()); + + return; + } + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventHandler/ReplaceJoinEventHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventHandler/ReplaceJoinEventHandler.php new file mode 100644 index 0000000..96710b2 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/EventHandler/ReplaceJoinEventHandler.php @@ -0,0 +1,37 @@ + + */ +final class ReplaceJoinEventHandler +{ + /** @var string[] */ + private $names = array(); + + public function __construct(array $names) + { + foreach($names as $name) { + if(false === is_string($name)) { + throw new \InvalidArgumentException('Expected array of strings!'); + } + + $this->names[] = $name; + } + } + + public function __invoke(ReplaceShortcodesEvent $event) + { + $shortcode = $event->getShortcode(); + if($shortcode && in_array($shortcode->getName(), $this->names)) { + $replaces = array(); + foreach($event->getReplacements() as $r) { + $replaces[] = $r->getReplacement(); + } + + $event->setResult(implode('', $replaces)); + } + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Events.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Events.php new file mode 100644 index 0000000..7d7bafb --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Events.php @@ -0,0 +1,17 @@ + + */ +final class Events +{ + const FILTER_SHORTCODES = 'event.filter-shortcodes'; + const REPLACE_SHORTCODES = 'event.replace-shortcodes'; + + /** @return string[] */ + public static function getEvents() + { + return array(static::FILTER_SHORTCODES, static::REPLACE_SHORTCODES); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/ContentHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/ContentHandler.php new file mode 100644 index 0000000..13483a6 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/ContentHandler.php @@ -0,0 +1,22 @@ + + */ +final class ContentHandler +{ + /** + * [content]text to display[/content] + * + * @param ShortcodeInterface $shortcode + * + * @return null|string + */ + public function __invoke(ShortcodeInterface $shortcode) + { + return $shortcode->getContent(); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/DeclareHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/DeclareHandler.php new file mode 100644 index 0000000..f0c4314 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/DeclareHandler.php @@ -0,0 +1,50 @@ + + */ +final class DeclareHandler +{ + /** @var HandlerContainer */ + private $handlers; + /** @var string */ + private $delimiter; + + /** @param string $delimiter */ + public function __construct(HandlerContainer $container, $delimiter = '%') + { + $this->handlers = $container; + $this->delimiter = $delimiter; + } + + /** + * [declare name]Your name is %value%[/declare] + * [name value="Thomas" /] + * + * @param ShortcodeInterface $shortcode + */ + public function __invoke(ShortcodeInterface $shortcode) + { + $args = $shortcode->getParameters(); + if(empty($args)) { + return; + } + $keys = array_keys($args); + $name = array_shift($keys); + $content = (string)$shortcode->getContent(); + $delimiter = $this->delimiter; + + $this->handlers->add($name, function(ShortcodeInterface $shortcode) use($content, $delimiter) { + $args = $shortcode->getParameters(); + $keys = array_map(function($key) use($delimiter) { return $delimiter.$key.$delimiter; }, array_keys($args)); + /** @var string[] $values */ + $values = array_values($args); + + return str_replace($keys, $values, $content); + }); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/EmailHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/EmailHandler.php new file mode 100644 index 0000000..0312e9b --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/EmailHandler.php @@ -0,0 +1,27 @@ + + */ +final class EmailHandler +{ + /** + * [email="example@example.org"]Contact me![/email] + * [email="example@example.org" /] + * [email]example@example.org[/email] + * + * @param ShortcodeInterface $shortcode + * + * @return string + */ + public function __invoke(ShortcodeInterface $shortcode) + { + $email = $shortcode->getBbCode() ?: $shortcode->getContent(); + $content = $shortcode->getContent() === null ? $email : $shortcode->getContent(); + + return ''.(string)$content.''; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/NameHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/NameHandler.php new file mode 100644 index 0000000..feaa159 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/NameHandler.php @@ -0,0 +1,23 @@ + + */ +final class NameHandler +{ + /** + * [name /] + * [name]content is ignored[/name] + * + * @param ShortcodeInterface $shortcode + * + * @return string + */ + public function __invoke(ShortcodeInterface $shortcode) + { + return $shortcode->getName(); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/NullHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/NullHandler.php new file mode 100644 index 0000000..d411f41 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/NullHandler.php @@ -0,0 +1,22 @@ + + */ +final class NullHandler +{ + /** + * Special shortcode to discard any input and return empty text + * + * @param ShortcodeInterface $shortcode + * + * @return null + */ + public function __invoke(ShortcodeInterface $shortcode) + { + return null; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/PlaceholderHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/PlaceholderHandler.php new file mode 100644 index 0000000..4906f5e --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/PlaceholderHandler.php @@ -0,0 +1,37 @@ + + */ +final class PlaceholderHandler +{ + /** @var string */ + private $delimiter; + + /** @param string $delimiter */ + public function __construct($delimiter = '%') + { + $this->delimiter = $delimiter; + } + + /** + * [placeholder value=18]You age is %value%[/placeholder] + * + * @param ShortcodeInterface $shortcode + * + * @return mixed + */ + public function __invoke(ShortcodeInterface $shortcode) + { + $args = $shortcode->getParameters(); + $delimiter = $this->delimiter; + $keys = array_map(function($key) use($delimiter) { return $delimiter.$key.$delimiter; }, array_keys($args)); + /** @var string[] $values */ + $values = array_values($args); + + return str_replace($keys, $values, (string)$shortcode->getContent()); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/RawHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/RawHandler.php new file mode 100644 index 0000000..585bf26 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/RawHandler.php @@ -0,0 +1,26 @@ + + */ +final class RawHandler +{ + public function __construct() + { + } + + /** + * [raw]any content [with] or [without /] shortcodes[/raw] + * + * @param ProcessedShortcode $shortcode + * + * @return string + */ + public function __invoke(ProcessedShortcode $shortcode) + { + return $shortcode->getTextContent(); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/SerializerHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/SerializerHandler.php new file mode 100644 index 0000000..cf20a19 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/SerializerHandler.php @@ -0,0 +1,38 @@ + + */ +final class SerializerHandler +{ + /** @var SerializerInterface */ + private $serializer; + + public function __construct(SerializerInterface $serializer) + { + $this->serializer = $serializer; + } + + /** + * [text arg=val /] + * [text arg=val]content[/text] + * [json arg=val /] + * [json arg=val]content[/json] + * [xml arg=val /] + * [xml arg=val]content[/xml] + * [yaml arg=val /] + * [yaml arg=val]content[/yaml] + * + * @param ShortcodeInterface $shortcode + * + * @return string + */ + public function __invoke(ShortcodeInterface $shortcode) + { + return $this->serializer->serialize($shortcode); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/UrlHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/UrlHandler.php new file mode 100644 index 0000000..27d02ce --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/UrlHandler.php @@ -0,0 +1,26 @@ + + */ +final class UrlHandler +{ + /** + * [url="http://example.org"]Click![/url] + * [url="http://example.org" /] + * [url]http://example.org[/url] + * + * @param ShortcodeInterface $shortcode + * + * @return string + */ + public function __invoke(ShortcodeInterface $shortcode) + { + $url = $shortcode->getBbCode() ?: $shortcode->getContent(); + + return ''.(string)$shortcode->getContent().''; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/WrapHandler.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/WrapHandler.php new file mode 100644 index 0000000..1185156 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Handler/WrapHandler.php @@ -0,0 +1,44 @@ + + */ +final class WrapHandler +{ + /** @var string */ + private $before; + /** @var string */ + private $after; + + /** + * @param string $before + * @param string $after + */ + public function __construct($before, $after) + { + $this->before = $before; + $this->after = $after; + } + + /** @return self */ + public static function createBold() + { + return new self('', ''); + } + + /** + * [b]content[b] + * [strong]content[/strong] + * + * @param ShortcodeInterface $shortcode + * + * @return string + */ + public function __invoke(ShortcodeInterface $shortcode) + { + return $this->before.(string)$shortcode->getContent().$this->after; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/HandlerContainer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/HandlerContainer.php new file mode 100644 index 0000000..881ee06 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/HandlerContainer.php @@ -0,0 +1,122 @@ + + */ +final class HandlerContainer implements HandlerContainerInterface +{ + /** @psalm-var array */ + private $handlers = array(); + /** @psalm-var (callable(ShortcodeInterface):string)|null */ + private $default = null; + + /** + * @param string $name + * @param callable $handler + * @psalm-param callable(ShortcodeInterface):string $handler + * + * @return $this + */ + public function add($name, $handler) + { + $this->guardHandler($handler); + + if (empty($name) || $this->has($name)) { + $msg = 'Invalid name or duplicate shortcode handler for %s!'; + throw new \RuntimeException(sprintf($msg, $name)); + } + + $this->handlers[$name] = $handler; + + return $this; + } + + /** + * @param string $alias + * @param string $name + * + * @return $this + */ + public function addAlias($alias, $name) + { + if (false === $this->has($name)) { + $msg = 'Failed to add an alias %s to non existent handler %s!'; + throw new \RuntimeException(sprintf($msg, $alias, $name)); + } + + /** @psalm-suppress PossiblyNullArgument */ + return $this->add($alias, $this->get($name)); + } + + /** + * @param string $name + * + * @return void + */ + public function remove($name) + { + if (false === $this->has($name)) { + $msg = 'Failed to remove non existent handler %s!'; + throw new \RuntimeException(sprintf($msg, $name)); + } + + unset($this->handlers[$name]); + } + + /** + * @param callable $handler + * @psalm-param callable(ShortcodeInterface):string $handler + * + * @return $this + */ + public function setDefault($handler) + { + $this->guardHandler($handler); + + $this->default = $handler; + + return $this; + } + + /** @return string[] */ + public function getNames() + { + return array_keys($this->handlers); + } + + /** + * @param string $name + * + * @return callable|null + * @psalm-return (callable(ShortcodeInterface):string)|null + */ + public function get($name) + { + return $this->has($name) ? $this->handlers[$name] : $this->default; + } + + /** + * @param string $name + * + * @return bool + */ + public function has($name) + { + return array_key_exists($name, $this->handlers); + } + + /** + * @param callable $handler + * + * @return void + */ + private function guardHandler($handler) + { + if (!is_callable($handler)) { + throw new \RuntimeException('Shortcode handler must be callable!'); + } + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/HandlerContainerInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/HandlerContainerInterface.php new file mode 100644 index 0000000..80b11ec --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/HandlerContainerInterface.php @@ -0,0 +1,21 @@ + + */ +interface HandlerContainerInterface +{ + /** + * Returns handler for given shortcode name or default if it was set before. + * If no handler is found, returns null. + * + * @param string $name Shortcode name + * + * @return callable|null + * @psalm-return (callable(ShortcodeInterface):string)|null + */ + public function get($name); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/ImmutableHandlerContainer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/ImmutableHandlerContainer.php new file mode 100644 index 0000000..cf1c4cd --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/HandlerContainer/ImmutableHandlerContainer.php @@ -0,0 +1,29 @@ + + */ +final class ImmutableHandlerContainer implements HandlerContainerInterface +{ + /** @var HandlerContainer */ + private $handlers; + + public function __construct(HandlerContainer $handlers) + { + $this->handlers = clone $handlers; + } + + /** + * @param string $name + * + * @return callable|null + * @psalm-return (callable(ShortcodeInterface):string)|null + */ + public function get($name) + { + return $this->handlers->get($name); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/ParserInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/ParserInterface.php new file mode 100644 index 0000000..dc324ae --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/ParserInterface.php @@ -0,0 +1,19 @@ + + */ +interface ParserInterface +{ + /** + * Parse single shortcode match into object + * + * @param string $text + * + * @return ParsedShortcodeInterface[] + */ + public function parse($text); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/RegexParser.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/RegexParser.php new file mode 100644 index 0000000..4a83b39 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/RegexParser.php @@ -0,0 +1,124 @@ + + */ +final class RegexParser implements ParserInterface +{ + /** @var SyntaxInterface */ + private $syntax; + /** @var string */ + private $shortcodeRegex; + /** @var string */ + private $singleShortcodeRegex; + /** @var string */ + private $parametersRegex; + + public function __construct(SyntaxInterface $syntax = null) + { + $this->syntax = $syntax ?: new Syntax(); + $this->shortcodeRegex = RegexBuilderUtility::buildShortcodeRegex($this->syntax); + $this->singleShortcodeRegex = RegexBuilderUtility::buildSingleShortcodeRegex($this->syntax); + $this->parametersRegex = RegexBuilderUtility::buildParametersRegex($this->syntax); + } + + /** + * @param string $text + * + * @return ParsedShortcode[] + */ + public function parse($text) + { + preg_match_all($this->shortcodeRegex, $text, $matches, PREG_OFFSET_CAPTURE); + + // loop instead of array_map to pass the arguments explicitly + $shortcodes = array(); + foreach($matches[0] as $match) { + $offset = mb_strlen(substr($text, 0, $match[1]), 'utf-8'); + $shortcodes[] = $this->parseSingle($match[0], $offset); + } + + return array_filter($shortcodes); + } + + /** + * @param string $text + * @param int $offset + * + * @return ParsedShortcode + */ + private function parseSingle($text, $offset) + { + preg_match($this->singleShortcodeRegex, $text, $matches, PREG_OFFSET_CAPTURE); + + /** @psalm-var array $matches */ + $name = $matches['name'][0]; + $parameters = isset($matches['parameters'][0]) ? $this->parseParameters($matches['parameters'][0]) : array(); + $bbCode = isset($matches['bbCode'][0]) && $matches['bbCode'][1] !== -1 + ? $this->extractValue($matches['bbCode'][0]) + : null; + $content = isset($matches['content'][0]) && $matches['content'][1] !== -1 ? $matches['content'][0] : null; + + return new ParsedShortcode(new Shortcode($name, $parameters, $content, $bbCode), $text, $offset); + } + + /** + * @param string $text + * + * @psalm-return array + */ + private function parseParameters($text) + { + preg_match_all($this->parametersRegex, $text, $argsMatches); + + // loop because PHP 5.3 can't handle $this properly and I want separate methods + $return = array(); + foreach ($argsMatches[1] as $item) { + /** @psalm-var array{0:string,1:string} $parts */ + $parts = explode($this->syntax->getParameterValueSeparator(), $item, 2); + $return[trim($parts[0])] = $this->parseValue(isset($parts[1]) ? $parts[1] : null); + } + + return $return; + } + + /** + * @param string|null $value + * + * @return string|null + */ + private function parseValue($value) + { + return null === $value ? null : $this->extractValue(trim($value)); + } + + /** + * @param string $value + * + * @return string + */ + private function extractValue($value) + { + $length = strlen($this->syntax->getParameterValueDelimiter()); + + return $this->isDelimitedValue($value) ? substr($value, $length, -1 * $length) : $value; + } + + /** + * @param string $value + * + * @return bool + */ + private function isDelimitedValue($value) + { + return preg_match('/^'.$this->syntax->getParameterValueDelimiter().'/us', $value) + && preg_match('/'.$this->syntax->getParameterValueDelimiter().'$/us', $value); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/RegularParser.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/RegularParser.php new file mode 100644 index 0000000..d46a36a --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/RegularParser.php @@ -0,0 +1,397 @@ + + */ +final class RegularParser implements ParserInterface +{ + /** @var string */ + private $lexerRegex; + /** @var string */ + private $nameRegex; + /** @psalm-var list */ + private $tokens = array(); + /** @var int */ + private $tokensCount = 0; + /** @var int */ + private $position = 0; + /** @var int[] */ + private $backtracks = array(); + /** @var int */ + private $lastBacktrack = 0; + + const TOKEN_OPEN = 1; + const TOKEN_CLOSE = 2; + const TOKEN_MARKER = 3; + const TOKEN_SEPARATOR = 4; + const TOKEN_DELIMITER = 5; + const TOKEN_STRING = 6; + const TOKEN_WS = 7; + + public function __construct(SyntaxInterface $syntax = null) + { + $this->lexerRegex = $this->prepareLexer($syntax ?: new CommonSyntax()); + $this->nameRegex = '~^'.RegexBuilderUtility::buildNameRegex().'$~us'; + } + + /** + * @param string $text + * + * @return ParsedShortcode[] + */ + public function parse($text) + { + $nestingLevel = ini_set('xdebug.max_nesting_level', '-1'); + $this->tokens = $this->tokenize($text); + $this->backtracks = array(); + $this->lastBacktrack = 0; + $this->position = 0; + $this->tokensCount = \count($this->tokens); + + $shortcodes = array(); + while($this->position < $this->tokensCount) { + while($this->position < $this->tokensCount && false === $this->lookahead(self::TOKEN_OPEN)) { + $this->position++; + } + $names = array(); + $this->beginBacktrack(); + $matches = $this->shortcode($names); + if(false === $matches) { + $this->backtrack(); + $this->match(null, true); + continue; + } + if(\is_array($matches)) { + foreach($matches as $shortcode) { + $shortcodes[] = $shortcode; + } + } + } + ini_set('xdebug.max_nesting_level', $nestingLevel); + + return $shortcodes; + } + + /** + * @param string $name + * @psalm-param array $parameters + * @param string|null $bbCode + * @param int $offset + * @param string|null $content + * @param string $text + * + * @return ParsedShortcode + */ + private function getObject($name, $parameters, $bbCode, $offset, $content, $text) + { + return new ParsedShortcode(new Shortcode($name, $parameters, $content, $bbCode), $text, $offset); + } + + /* --- RULES ----------------------------------------------------------- */ + + /** + * @param string[] $names + * @psalm-param list $names + * FIXME: investigate the reason Psalm complains about references + * @psalm-suppress ReferenceConstraintViolation + * + * @return ParsedShortcode[]|string|false + */ + private function shortcode(array &$names) + { + if(!$this->match(self::TOKEN_OPEN, false)) { return false; } + $offset = $this->tokens[$this->position - 1][2]; + $this->match(self::TOKEN_WS, false); + if('' === $name = $this->match(self::TOKEN_STRING, false)) { return false; } + if($this->lookahead(self::TOKEN_STRING)) { return false; } + if(1 !== preg_match($this->nameRegex, $name, $matches)) { return false; } + $this->match(self::TOKEN_WS, false); + // bbCode + $bbCode = $this->match(self::TOKEN_SEPARATOR, true) ? $this->value() : null; + if(false === $bbCode) { return false; } + // parameters + if(false === ($parameters = $this->parameters())) { return false; } + + // self-closing + if($this->match(self::TOKEN_MARKER, true)) { + if(!$this->match(self::TOKEN_CLOSE, false)) { return false; } + + return array($this->getObject($name, $parameters, $bbCode, $offset, null, $this->getBacktrack())); + } + + // just-closed or with-content + if(!$this->match(self::TOKEN_CLOSE, false)) { return false; } + $this->beginBacktrack(); + $names[] = $name; + + // begin inlined content() + $content = ''; + $shortcodes = array(); + $closingName = null; + + while($this->position < $this->tokensCount) { + while($this->position < $this->tokensCount && false === $this->lookahead(self::TOKEN_OPEN)) { + $content .= $this->match(null, true); + } + + $this->beginBacktrack(); + /** @psalm-suppress MixedArgumentTypeCoercion */ + $contentMatchedShortcodes = $this->shortcode($names); + if(\is_string($contentMatchedShortcodes)) { + $closingName = $contentMatchedShortcodes; + break; + } + if(\is_array($contentMatchedShortcodes)) { + foreach($contentMatchedShortcodes as $matchedShortcode) { + $shortcodes[] = $matchedShortcode; + } + continue; + } + $this->backtrack(); + + $this->beginBacktrack(); + if(false !== ($closingName = $this->close($names))) { + $this->backtrack(); + $shortcodes = array(); + break; + } + $closingName = null; + $this->backtrack(); + + $content .= $this->match(null, false); + } + $content = $this->position < $this->tokensCount ? $content : false; + // end inlined content() + + if(null !== $closingName && $closingName !== $name) { + array_pop($names); + array_pop($this->backtracks); + array_pop($this->backtracks); + + return $closingName; + } + if(false === $content || $closingName !== $name) { + $this->backtrack(false); + $text = $this->backtrack(false); + array_pop($names); + + return array_merge(array($this->getObject($name, $parameters, $bbCode, $offset, null, $text)), $shortcodes); + } + $content = $this->getBacktrack(); + if(!$this->close($names)) { return false; } + array_pop($names); + + return array($this->getObject($name, $parameters, $bbCode, $offset, $content, $this->getBacktrack())); + } + + /** + * @param string[] $names + * + * @return string|false + */ + private function close(array &$names) + { + if(!$this->match(self::TOKEN_OPEN, true)) { return false; } + if(!$this->match(self::TOKEN_MARKER, true)) { return false; } + if(!$closingName = $this->match(self::TOKEN_STRING, true)) { return false; } + if(!$this->match(self::TOKEN_CLOSE, false)) { return false; } + + return \in_array($closingName, $names, true) ? $closingName : false; + } + + /** @psalm-return array|false */ + private function parameters() + { + $parameters = array(); + + while(true) { + $this->match(self::TOKEN_WS, false); + if($this->lookahead(self::TOKEN_MARKER) || $this->lookahead(self::TOKEN_CLOSE)) { break; } + if(!$name = $this->match(self::TOKEN_STRING, true)) { return false; } + if(!$this->match(self::TOKEN_SEPARATOR, true)) { $parameters[$name] = null; continue; } + if(false === ($value = $this->value())) { return false; } + $this->match(self::TOKEN_WS, false); + + $parameters[$name] = $value; + } + + return $parameters; + } + + /** @return false|string */ + private function value() + { + $value = ''; + + if($this->match(self::TOKEN_DELIMITER, false)) { + while($this->position < $this->tokensCount && false === $this->lookahead(self::TOKEN_DELIMITER)) { + $value .= $this->match(null, false); + } + + return $this->match(self::TOKEN_DELIMITER, false) ? $value : false; + } + + if('' !== $tmp = $this->match(self::TOKEN_STRING, false)) { + $value .= $tmp; + while('' !== $tmp = $this->match(self::TOKEN_STRING, false)) { + $value .= $tmp; + } + + return $value; + } + + return false; + } + + /* --- PARSER ---------------------------------------------------------- */ + + /** @return void */ + private function beginBacktrack() + { + $this->backtracks[] = $this->position; + $this->lastBacktrack = $this->position; + } + + /** @return string */ + private function getBacktrack() + { + $position = array_pop($this->backtracks); + $backtrack = ''; + for($i = $position; $i < $this->position; $i++) { + $backtrack .= $this->tokens[$i][1]; + } + + return $backtrack; + } + + /** + * @param bool $modifyPosition + * + * @return string + */ + private function backtrack($modifyPosition = true) + { + $position = array_pop($this->backtracks); + if($modifyPosition) { + $this->position = $position; + } + + $backtrack = ''; + for($i = $position; $i < $this->lastBacktrack; $i++) { + $backtrack .= $this->tokens[$i][1]; + } + $this->lastBacktrack = $position; + + return $backtrack; + } + + /** + * @param int $type + * + * @return bool + */ + private function lookahead($type) + { + return $this->position < $this->tokensCount && $this->tokens[$this->position][0] === $type; + } + + /** + * @param int|null $type + * @param bool $ws + * + * @return string + */ + private function match($type, $ws) + { + if($this->position >= $this->tokensCount) { + return ''; + } + + $token = $this->tokens[$this->position]; + if(!empty($type) && $token[0] !== $type) { + return ''; + } + + $this->position++; + if($ws && $this->position < $this->tokensCount && $this->tokens[$this->position][0] === self::TOKEN_WS) { + $this->position++; + } + + return $token[1]; + } + + /* --- LEXER ----------------------------------------------------------- */ + + /** + * @param string $text + * + * @psalm-return list + */ + private function tokenize($text) + { + $count = preg_match_all($this->lexerRegex, $text, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE); + if(false === $count || preg_last_error() !== PREG_NO_ERROR) { + throw new \RuntimeException(sprintf('PCRE failure `%s`.', preg_last_error())); + } + + $tokens = array(); + $position = 0; + + foreach($matches as $match) { + switch(true) { + case -1 !== $match['string'][1]: { $token = $match['string'][0]; $type = self::TOKEN_STRING; break; } + case -1 !== $match['ws'][1]: { $token = $match['ws'][0]; $type = self::TOKEN_WS; break; } + case -1 !== $match['marker'][1]: { $token = $match['marker'][0]; $type = self::TOKEN_MARKER; break; } + case -1 !== $match['delimiter'][1]: { $token = $match['delimiter'][0]; $type = self::TOKEN_DELIMITER; break; } + case -1 !== $match['separator'][1]: { $token = $match['separator'][0]; $type = self::TOKEN_SEPARATOR; break; } + case -1 !== $match['open'][1]: { $token = $match['open'][0]; $type = self::TOKEN_OPEN; break; } + case -1 !== $match['close'][1]: { $token = $match['close'][0]; $type = self::TOKEN_CLOSE; break; } + default: { throw new \RuntimeException(sprintf('Invalid token.')); } + } + $tokens[] = array($type, $token, $position); + $position += mb_strlen($token, 'utf-8'); + } + + return $tokens; + } + + /** @return string */ + private function prepareLexer(SyntaxInterface $syntax) + { + // FIXME: for some reason Psalm does not understand the `@psalm-var callable() $var` annotation + /** @psalm-suppress MissingClosureParamType, MissingClosureReturnType */ + $group = function($text, $group) { + return '(?<'.(string)$group.'>'.preg_replace('/(.)/us', '\\\\$0', (string)$text).')'; + }; + /** @psalm-suppress MissingClosureParamType, MissingClosureReturnType */ + $quote = function($text) { + return preg_replace('/(.)/us', '\\\\$0', (string)$text); + }; + + $rules = array( + '(?\\\\.|(?:(?!'.implode('|', array( + $quote($syntax->getOpeningTag()), + $quote($syntax->getClosingTag()), + $quote($syntax->getClosingTagMarker()), + $quote($syntax->getParameterValueSeparator()), + $quote($syntax->getParameterValueDelimiter()), + '\s+', + )).').)+)', + '(?\s+)', + $group($syntax->getClosingTagMarker(), 'marker'), + $group($syntax->getParameterValueDelimiter(), 'delimiter'), + $group($syntax->getParameterValueSeparator(), 'separator'), + $group($syntax->getOpeningTag(), 'open'), + $group($syntax->getClosingTag(), 'close'), + ); + + return '~('.implode('|', $rules).')~us'; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/WordpressParser.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/WordpressParser.php new file mode 100644 index 0000000..03a4611 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Parser/WordpressParser.php @@ -0,0 +1,134 @@ + + */ +final class WordpressParser implements ParserInterface +{ + /** @var string */ + private static $shortcodeRegex = '/\\[(\\[?)()(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*+(?:\\[(?!\\/\\2\\])[^\\[]*+)*+)\\[\\/\\2\\])?)(\\]?)/s'; + /** @var string */ + private static $argumentsRegex = '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/'; + + /** @var string[] */ + private $names = array(); + + public function __construct() + { + } + + /** @return self */ + public static function createFromHandlers(HandlerContainer $handlers) + { + return static::createFromNames($handlers->getNames()); + } + + /** + * @param string[] $names + * + * @return self + */ + public static function createFromNames(array $names) + { + foreach($names as $name) { + /** @psalm-suppress DocblockTypeContradiction, RedundantConditionGivenDocblockType */ + if(false === is_string($name)) { + throw new \InvalidArgumentException('Shortcode name must be a string!'); + } + } + + $self = new self(); + $self->names = $names; + + return $self; + } + + /** + * @param string $text + * + * @return ParsedShortcode[] + */ + public function parse($text) + { + $names = $this->names + ? implode('|', array_map(function($name) { return preg_quote($name, '/'); }, $this->names)) + : RegexBuilderUtility::buildNameRegex(); + $regex = str_replace('', $names, static::$shortcodeRegex); + preg_match_all($regex, $text, $matches, PREG_OFFSET_CAPTURE); + + $shortcodes = array(); + $count = count($matches[0]); + for($i = 0; $i < $count; $i++) { + $name = $matches[2][$i][0]; + $parameters = static::parseParameters($matches[3][$i][0]); + $content = $matches[5][$i][1] !== -1 ? $matches[5][$i][0] : null; + $match = $matches[0][$i][0]; + $offset = mb_strlen(substr($text, 0, $matches[0][$i][1]), 'utf-8'); + + $shortcode = new Shortcode($name, $parameters, $content, null); + $shortcodes[] = new ParsedShortcode($shortcode, $match, $offset); + } + + return $shortcodes; + } + + /** + * @param string $text + * + * @psalm-return array + */ + private static function parseParameters($text) + { + $text = preg_replace('/[\x{00a0}\x{200b}]+/u', ' ', $text); + + if(!preg_match_all(static::$argumentsRegex, $text, $matches, PREG_SET_ORDER)) { + return ltrim($text) ? array(ltrim($text) => null) : array(); + } + + $parameters = array(); + foreach($matches as $match) { + if(!empty($match[1])) { + $parameters[strtolower($match[1])] = stripcslashes($match[2]); + } elseif(!empty($match[3])) { + $parameters[strtolower($match[3])] = stripcslashes($match[4]); + } elseif(!empty($match[5])) { + $parameters[strtolower($match[5])] = stripcslashes($match[6]); + } elseif(isset($match[7]) && $match[7] !== '') { + $parameters[stripcslashes($match[7])] = null; + } elseif(isset($match[8])) { + $parameters[stripcslashes($match[8])] = null; + } + } + + foreach($parameters as $key => $value) { + // NOTE: the `?: ''` fallback is the only change from the way WordPress parses shortcodes to satisfy Psalm's PossiblyNullArgument + $value = $value ?: ''; + if(false !== strpos($value, '<') && 1 !== preg_match('/^[^<]*+(?:<[^>]*+>[^<]*+)*+$/', $value)) { + $parameters[$key] = ''; + } + } + + return $parameters; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/Processor.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/Processor.php new file mode 100644 index 0000000..e3e5745 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/Processor.php @@ -0,0 +1,272 @@ + + */ +final class Processor implements ProcessorInterface +{ + /** @var Handlers */ + private $handlers; + /** @var ParserInterface */ + private $parser; + /** @var EventContainerInterface|null */ + private $eventContainer; + + /** @var int|null */ + private $recursionDepth; // infinite recursion + /** @var int|null */ + private $maxIterations = 1; // one iteration + /** @var bool */ + private $autoProcessContent = true; // automatically process shortcode content + + public function __construct(ParserInterface $parser, Handlers $handlers) + { + $this->parser = $parser; + $this->handlers = $handlers; + } + + /** + * Entry point for shortcode processing. Implements iterative algorithm for + * both limited and unlimited number of iterations. + * + * @param string $text Text to process + * + * @return string + */ + public function process($text) + { + $iterations = $this->maxIterations === null ? 1 : $this->maxIterations; + $context = new ProcessorContext(); + $context->processor = $this; + + while ($iterations--) { + $context->iterationNumber++; + $newText = $this->processIteration($text, $context, null); + if ($newText === $text) { + break; + } + $text = $newText; + $iterations += $this->maxIterations === null ? 1 : 0; + } + + return $text; + } + + /** + * @param string $name + * @param object $event + * + * @return object + */ + private function dispatchEvent($name, $event) + { + if(null === $this->eventContainer) { + return $event; + } + + $handlers = $this->eventContainer->getListeners($name); + foreach($handlers as $handler) { + $handler($event); + } + + return $event; + } + + /** + * @param string $text + * + * @return string + */ + private function processIteration($text, ProcessorContext $context, ProcessedShortcode $parent = null) + { + if (null !== $this->recursionDepth && $context->recursionLevel > $this->recursionDepth) { + return $text; + } + + $context->parent = $parent; + $context->text = $text; + $filterEvent = new FilterShortcodesEvent($this->parser->parse($text), $parent); + $this->dispatchEvent(Events::FILTER_SHORTCODES, $filterEvent); + $shortcodes = $filterEvent->getShortcodes(); + $replaces = array(); + $baseOffset = $parent && $shortcodes + ? (int)mb_strpos($parent->getShortcodeText(), $shortcodes[0]->getText(), 0, 'utf-8') - $shortcodes[0]->getOffset() + $parent->getOffset() + : 0; + foreach ($shortcodes as $shortcode) { + $name = $shortcode->getName(); + $hasNamePosition = array_key_exists($name, $context->namePosition); + + $context->baseOffset = $baseOffset + $shortcode->getOffset(); + $context->position++; + $context->namePosition[$name] = $hasNamePosition ? $context->namePosition[$name] + 1 : 1; + $context->shortcodeText = $shortcode->getText(); + $context->offset = $shortcode->getOffset(); + $context->shortcode = $shortcode; + $context->textContent = (string)$shortcode->getContent(); + + $handler = $this->handlers->get($name); + $replace = $this->processHandler($shortcode, $context, $handler); + + $replaces[] = new ReplacedShortcode($shortcode, $replace); + } + + $applyEvent = new ReplaceShortcodesEvent($text, $replaces, $parent); + $this->dispatchEvent(Events::REPLACE_SHORTCODES, $applyEvent); + + return $applyEvent->hasResult() ? (string)$applyEvent->getResult() : $this->applyReplaces($text, $replaces); + } + + /** + * @param string $text + * @param ReplacedShortcode[] $replaces + * + * @return string + */ + private function applyReplaces($text, array $replaces) + { + foreach(array_reverse($replaces) as $s) { + $offset = $s->getOffset(); + $length = mb_strlen($s->getText(), 'utf-8'); + $textLength = mb_strlen($text, 'utf-8'); + + $text = mb_substr($text, 0, $offset, 'utf-8').$s->getReplacement().mb_substr($text, $offset + $length, $textLength, 'utf-8'); + } + + return $text; + } + + /** + * @psalm-param (callable(ShortcodeInterface):string)|null $handler + * @return string + */ + private function processHandler(ParsedShortcodeInterface $parsed, ProcessorContext $context, $handler) + { + $processed = ProcessedShortcode::createFromContext(clone $context); + $content = $this->processRecursion($processed, $context); + $processed = $processed->withContent($content); + + if($handler) { + return $handler($processed); + } + + $state = $parsed->getText(); + /** @psalm-suppress RedundantCast */ + $length = (int)mb_strlen($processed->getTextContent(), 'utf-8'); + $offset = (int)mb_strrpos($state, $processed->getTextContent(), 0, 'utf-8'); + + return mb_substr($state, 0, $offset, 'utf-8').(string)$processed->getContent().mb_substr($state, $offset + $length, mb_strlen($state, 'utf-8'), 'utf-8'); + } + + /** @return string|null */ + private function processRecursion(ProcessedShortcode $shortcode, ProcessorContext $context) + { + $content = $shortcode->getContent(); + if ($this->autoProcessContent && null !== $content) { + $context->recursionLevel++; + // this is safe from using max iterations value because it's manipulated in process() method + $content = $this->processIteration($content, clone $context, $shortcode); + $context->recursionLevel--; + + return $content; + } + + return $content; + } + + /** + * Container for event handlers used in this processor. + * + * @param EventContainerInterface $eventContainer + * + * @return self + */ + public function withEventContainer(EventContainerInterface $eventContainer) + { + $self = clone $this; + $self->eventContainer = $eventContainer; + + return $self; + } + + /** + * Recursion depth level, null means infinite, any integer greater than or + * equal to zero sets value (number of recursion levels). Zero disables + * recursion. Defaults to null. + * + * @param int|null $depth + * + * @return self + */ + public function withRecursionDepth($depth) + { + /** @psalm-suppress DocblockTypeContradiction */ + if (null !== $depth && !(is_int($depth) && $depth >= 0)) { + $msg = 'Recursion depth must be null (infinite) or integer >= 0!'; + throw new \InvalidArgumentException($msg); + } + + $self = clone $this; + $self->recursionDepth = $depth; + + return $self; + } + + /** + * Maximum number of iterations, null means infinite, any integer greater + * than zero sets value. Zero is invalid because there must be at least one + * iteration. Defaults to 1. Loop breaks if result of two consequent + * iterations shows no change in processed text. + * + * @param int|null $iterations + * + * @return self + */ + public function withMaxIterations($iterations) + { + /** @psalm-suppress DocblockTypeContradiction */ + if (null !== $iterations && !(is_int($iterations) && $iterations > 0)) { + $msg = 'Maximum number of iterations must be null (infinite) or integer > 0!'; + throw new \InvalidArgumentException($msg); + } + + $self = clone $this; + $self->maxIterations = $iterations; + + return $self; + } + + /** + * Whether shortcode content will be automatically processed and handler + * already receives shortcode with processed content. If false, every + * shortcode handler needs to process content on its own. Default true. + * + * @param bool $flag True if enabled (default), false otherwise + * + * @return self + */ + public function withAutoProcessContent($flag) + { + /** @psalm-suppress DocblockTypeContradiction */ + if (!is_bool($flag)) { + $msg = 'Auto processing flag must be a boolean value!'; + throw new \InvalidArgumentException($msg); + } + + $self = clone $this; + $self->autoProcessContent = $flag; + + return $self; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/ProcessorContext.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/ProcessorContext.php new file mode 100644 index 0000000..f9e8c6c --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/ProcessorContext.php @@ -0,0 +1,58 @@ + + */ +final class ProcessorContext +{ + /** + * @var ShortcodeInterface + * @psalm-suppress PropertyNotSetInConstructor + */ + public $shortcode; + + /** @var ProcessedShortcode|null */ + public $parent = null; + + /** + * @var ProcessorInterface + * @psalm-suppress PropertyNotSetInConstructor + */ + public $processor; + + /** + * @var string + * @psalm-suppress PropertyNotSetInConstructor + */ + public $textContent; + /** @var int */ + public $position = 0; + /** @psalm-var array */ + public $namePosition = array(); + /** @var string */ + public $text = ''; + /** @var string */ + public $shortcodeText = ''; + /** @var int */ + public $iterationNumber = 0; + /** @var int */ + public $recursionLevel = 0; + /** + * @var int + * @psalm-suppress PropertyNotSetInConstructor + */ + public $offset; + /** + * @var int + * @psalm-suppress PropertyNotSetInConstructor + */ + public $baseOffset; + + public function __construct() + { + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/ProcessorInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/ProcessorInterface.php new file mode 100644 index 0000000..51375bf --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Processor/ProcessorInterface.php @@ -0,0 +1,17 @@ + + */ +interface ProcessorInterface +{ + /** + * Process text using registered shortcode handlers + * + * @param string $text Text containing shortcodes + * + * @return string Text with replaced shortcodes + */ + public function process($text); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/JsonSerializer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/JsonSerializer.php new file mode 100644 index 0000000..6ee6447 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/JsonSerializer.php @@ -0,0 +1,52 @@ + + */ +final class JsonSerializer implements SerializerInterface +{ + public function serialize(ShortcodeInterface $shortcode) + { + return json_encode(array( + 'name' => $shortcode->getName(), + 'parameters' => $shortcode->getParameters(), + 'content' => $shortcode->getContent(), + 'bbCode' => $shortcode->getBbCode(), + )); + } + + /** + * @param string $text + * + * @return Shortcode + */ + public function unserialize($text) + { + /** @psalm-var array{name:string,parameters:array,bbCode:string|null,content:string|null}|null $data */ + $data = json_decode($text, true); + + if (!is_array($data)) { + throw new \InvalidArgumentException('Invalid JSON, cannot unserialize Shortcode!'); + } + if (!array_diff_key($data, array('name', 'parameters', 'content'))) { + throw new \InvalidArgumentException('Malformed Shortcode JSON, expected name, parameters, and content!'); + } + + /** @var string $name */ + $name = array_key_exists('name', $data) ? $data['name'] : null; + $parameters = array_key_exists('parameters', $data) ? $data['parameters'] : array(); + $content = array_key_exists('content', $data) ? $data['content'] : null; + $bbCode = array_key_exists('bbCode', $data) ? $data['bbCode'] : null; + + /** @psalm-suppress DocblockTypeContradiction */ + if(!is_array($parameters)) { + throw new \InvalidArgumentException('Parameters must be an array!'); + } + + return new Shortcode($name, $parameters, $content, $bbCode); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/SerializerInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/SerializerInterface.php new file mode 100644 index 0000000..7f50f9e --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/SerializerInterface.php @@ -0,0 +1,28 @@ + + */ +interface SerializerInterface +{ + /** + * Serializes Shortcode class instance into given format + * + * @param ShortcodeInterface $shortcode Instance to serialize + * + * @return string + */ + public function serialize(ShortcodeInterface $shortcode); + + /** + * Loads back Shortcode instance from serialized format + * + * @param string $text + * + * @return ShortcodeInterface + */ + public function unserialize($text); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/TextSerializer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/TextSerializer.php new file mode 100644 index 0000000..7d93acf --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/TextSerializer.php @@ -0,0 +1,101 @@ + + */ +final class TextSerializer implements SerializerInterface +{ + /** @var SyntaxInterface */ + private $syntax; + + public function __construct(SyntaxInterface $syntax = null) + { + $this->syntax = $syntax ?: new Syntax(); + } + + /** @inheritDoc */ + public function serialize(ShortcodeInterface $shortcode) + { + $open = $this->syntax->getOpeningTag(); + $close = $this->syntax->getClosingTag(); + $marker = $this->syntax->getClosingTagMarker(); + + $parameters = $this->serializeParameters($shortcode->getParameters()); + $bbCode = null !== $shortcode->getBbCode() + ? $this->serializeValue($shortcode->getBbCode()) + : ''; + $return = $open.$shortcode->getName().$bbCode.$parameters; + + return null === $shortcode->getContent() + ? $return.' '.$marker.$close + : $return.$close.(string)$shortcode->getContent().$open.$marker.$shortcode->getName().$close; + } + + /** + * @psalm-param array $parameters + * + * @return string + */ + private function serializeParameters(array $parameters) + { + // unfortunately array_reduce() does not support keys + $return = ''; + foreach ($parameters as $key => $value) { + $return .= ' '.$key.$this->serializeValue($value); + } + + return $return; + } + + /** + * @param string|null $value + * + * @return string + */ + private function serializeValue($value) + { + if (null === $value) { + return ''; + } + + $delimiter = $this->syntax->getParameterValueDelimiter(); + $separator = $this->syntax->getParameterValueSeparator(); + + return $separator.(preg_match('/^\w+$/u', $value) + ? $value + : $delimiter.$value.$delimiter); + } + + public function unserialize($text) + { + $parser = new RegexParser(); + + $shortcodes = $parser->parse($text); + + if (empty($shortcodes)) { + $msg = 'Failed to unserialize shortcode from text %s!'; + throw new \InvalidArgumentException(sprintf($msg, $text)); + } + if (count($shortcodes) > 1) { + $msg = 'Provided text %s contains more than one shortcode!'; + throw new \InvalidArgumentException(sprintf($msg, $text)); + } + + /** @var ShortcodeInterface $parsed */ + $parsed = array_shift($shortcodes); + + $name = $parsed->getName(); + $parameters = $parsed->getParameters(); + $content = $parsed->getContent(); + $bbCode = $parsed->getBbCode(); + + return new Shortcode($name, $parameters, $content, $bbCode); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/XmlSerializer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/XmlSerializer.php new file mode 100644 index 0000000..a2af59e --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/XmlSerializer.php @@ -0,0 +1,141 @@ + + */ +final class XmlSerializer implements SerializerInterface +{ + /** + * + * BBCODE + * + * VALUE + * VALUE + * + * CONTENT> + * + * + * @param ShortcodeInterface $shortcode + * + * @return string + */ + public function serialize(ShortcodeInterface $shortcode) + { + $doc = new \DOMDocument('1.0', 'UTF-8'); + $doc->preserveWhiteSpace = false; + $doc->formatOutput = true; + + $code = $doc->createElement('shortcode'); + $code->setAttribute('name', $shortcode->getName()); + $xml = $doc->appendChild($code); + $xml->appendChild($this->createCDataNode($doc, 'bbCode', $shortcode->getBbCode())); + + $parameters = $xml->appendChild($doc->createElement('parameters')); + foreach($shortcode->getParameters() as $key => $value) { + $parameter = $doc->createElement('parameter'); + $parameter->setAttribute('name', $key); + if(null !== $value) { + $parameter->appendChild($doc->createCDATASection($value)); + } + + $parameters->appendChild($parameter); + } + + $xml->appendChild($this->createCDataNode($doc, 'content', $shortcode->getContent())); + + return $doc->saveXML(); + } + + /** + * @param \DOMDocument $doc + * @param string $name + * @param string|null $content + * + * @return \DOMElement + */ + private function createCDataNode(\DOMDocument $doc, $name, $content) + { + $node = $doc->createElement($name); + + if(null !== $content) { + $node->appendChild($doc->createCDATASection($content)); + } + + return $node; + } + + /** + * @param string $text + * + * @return Shortcode + */ + public function unserialize($text) + { + $xml = new \DOMDocument(); + $internalErrors = libxml_use_internal_errors(true); + if(!$text || !$xml->loadXML($text)) { + libxml_use_internal_errors($internalErrors); + throw new \InvalidArgumentException('Failed to parse provided XML!'); + } + libxml_use_internal_errors($internalErrors); + + $xpath = new \DOMXPath($xml); + $shortcode = $xpath->query('/shortcode'); + if($shortcode->length !== 1) { + throw new \InvalidArgumentException('Invalid shortcode XML!'); + } + $name = $this->getAttribute($shortcode->item(0), 'name'); + + $bbCode = $this->getValue($xpath->query('/shortcode/bbCode')); + $content = $this->getValue($xpath->query('/shortcode/content')); + + $parameters = array(); + $elements = $xpath->query('/shortcode/parameters/parameter'); + for($i = 0; $i < $elements->length; $i++) { + $node = $elements->item($i); + + $parameters[$this->getAttribute($node, 'name')] = $node->hasChildNodes() ? $node->nodeValue : null; + } + + return new Shortcode($name, $parameters, $content, $bbCode); + } + + /** + * @param \DOMNodeList $node + * + * @return string|null + */ + private function getValue(\DOMNodeList $node) + { + return $node->length === 1 && $node->item(0)->hasChildNodes() + ? $node->item(0)->nodeValue + : null; + } + + /** + * @param \DOMNode $node + * @param string $name + * @psalm-suppress UnusedParam + * + * @return string + */ + private function getAttribute(\DOMNode $node, $name) + { + /** + * @var \DOMNode $attribute + * @psalm-suppress NullReference + */ + $attribute = $node->attributes->getNamedItem($name); + + /** @psalm-suppress DocblockTypeContradiction */ + if(!$attribute || !$attribute->nodeValue) { + throw new \InvalidArgumentException('Invalid shortcode XML!'); + } + + return $attribute->nodeValue; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/YamlSerializer.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/YamlSerializer.php new file mode 100644 index 0000000..b890af1 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Serializer/YamlSerializer.php @@ -0,0 +1,53 @@ + + */ +final class YamlSerializer implements SerializerInterface +{ + public function serialize(ShortcodeInterface $shortcode) + { + return Yaml::dump(array( + 'name' => $shortcode->getName(), + 'parameters' => $shortcode->getParameters(), + 'content' => $shortcode->getContent(), + 'bbCode' => $shortcode->getBbCode(), + )); + } + + /** + * @param string $text + * + * @return Shortcode + */ + public function unserialize($text) + { + /** @psalm-var array{name:string,parameters:array,bbCode:string|null,content:string|null}|null $data */ + $data = Yaml::parse($text); + + if(!is_array($data)) { + throw new \InvalidArgumentException('Invalid YAML, cannot unserialize Shortcode!'); + } + if (!array_intersect(array_keys($data), array('name', 'parameters', 'content'))) { + throw new \InvalidArgumentException('Malformed shortcode YAML, expected name, parameters, and content!'); + } + + /** @var string $name */ + $name = array_key_exists('name', $data) ? $data['name'] : null; + $parameters = array_key_exists('parameters', $data) ? $data['parameters'] : array(); + $content = array_key_exists('content', $data) ? $data['content'] : null; + $bbCode = array_key_exists('bbCode', $data) ? $data['bbCode'] : null; + + /** @psalm-suppress DocblockTypeContradiction */ + if(!is_array($parameters)) { + throw new \InvalidArgumentException('Parameters must be an array!'); + } + + return new Shortcode($name, $parameters, $content, $bbCode); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/AbstractShortcode.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/AbstractShortcode.php new file mode 100644 index 0000000..a09ed8f --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/AbstractShortcode.php @@ -0,0 +1,86 @@ + + */ +abstract class AbstractShortcode +{ + /** @var string */ + protected $name; + /** @psalm-var array */ + protected $parameters = array(); + /** @var string|null */ + protected $content; + /** @var string|null */ + protected $bbCode; + + /** @return bool */ + public function hasContent() + { + return $this->content !== null; + } + + /** @return string */ + public function getName() + { + return $this->name; + } + + /** @psalm-return array */ + public function getParameters() + { + return $this->parameters; + } + + /** + * @param string $name + * + * @return bool + */ + public function hasParameter($name) + { + return array_key_exists($name, $this->parameters); + } + + /** @return bool */ + public function hasParameters() + { + return (bool)$this->parameters; + } + + /** + * @param string $name + * @param string|null $default + * + * @psalm-return string|null + */ + public function getParameter($name, $default = null) + { + return $this->hasParameter($name) ? $this->parameters[$name] : $default; + } + + /** + * @param int $index + * + * @return string|null + */ + public function getParameterAt($index) + { + $keys = array_keys($this->parameters); + + return array_key_exists($index, $keys) ? $keys[$index] : null; + } + + /** @return string|null */ + public function getContent() + { + return $this->content; + } + + /** @return string|null */ + public function getBbCode() + { + return $this->bbCode; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ParsedShortcode.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ParsedShortcode.php new file mode 100644 index 0000000..ba1ebe6 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ParsedShortcode.php @@ -0,0 +1,47 @@ + + */ +final class ParsedShortcode extends AbstractShortcode implements ParsedShortcodeInterface +{ + /** @var string */ + private $text; + /** @var int */ + private $offset; + + /** + * @param string $text + * @param int $offset + */ + public function __construct(ShortcodeInterface $shortcode, $text, $offset) + { + $this->name = $shortcode->getName(); + $this->parameters = $shortcode->getParameters(); + $this->content = $shortcode->getContent(); + $this->bbCode = $shortcode->getBbCode(); + $this->text = $text; + $this->offset = $offset; + } + + public function withContent($content) + { + $self = clone $this; + $self->content = $content; + + return $self; + } + + /** @return string */ + public function getText() + { + return $this->text; + } + + /** @return int */ + public function getOffset() + { + return $this->offset; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ParsedShortcodeInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ParsedShortcodeInterface.php new file mode 100644 index 0000000..c80d5e1 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ParsedShortcodeInterface.php @@ -0,0 +1,22 @@ + + */ +interface ParsedShortcodeInterface extends ShortcodeInterface +{ + /** + * Returns exact shortcode text + * + * @return string + */ + public function getText(); + + /** + * Returns string position in the parent text + * + * @return int + */ + public function getOffset(); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ProcessedShortcode.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ProcessedShortcode.php new file mode 100644 index 0000000..e6c212d --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ProcessedShortcode.php @@ -0,0 +1,163 @@ + + */ +final class ProcessedShortcode extends AbstractShortcode implements ParsedShortcodeInterface +{ + /** @var ProcessedShortcode|null */ + private $parent; + /** @var int */ + private $position; + /** @var int */ + private $namePosition; + /** @var string */ + private $text; + /** @var string */ + private $textContent; + /** @var int */ + private $offset; + /** @var int */ + private $baseOffset; + /** @var string */ + private $shortcodeText; + /** @var int */ + private $iterationNumber; + /** @var int */ + private $recursionLevel; + /** @var ProcessorInterface */ + private $processor; + + private function __construct(ProcessorContext $context) + { + // basic properties + $this->name = $context->shortcode->getName(); + $this->parameters = $context->shortcode->getParameters(); + $this->content = $context->shortcode->getContent(); + $this->bbCode = $context->shortcode->getBbCode(); + $this->textContent = $context->textContent; + + // runtime context + $this->parent = $context->parent; + $this->position = $context->position; + $this->namePosition = $context->namePosition[$this->name]; + $this->text = $context->text; + $this->shortcodeText = $context->shortcodeText; + + // processor state + $this->iterationNumber = $context->iterationNumber; + $this->recursionLevel = $context->recursionLevel; + $this->processor = $context->processor; + + // text context + $this->offset = $context->offset; + $this->baseOffset = $context->baseOffset; + } + + /** @return self */ + public static function createFromContext(ProcessorContext $context) + { + return new self($context); + } + + /** + * @param string|null $content + * + * @return self + */ + public function withContent($content) + { + $self = clone $this; + $self->content = $content; + + return $self; + } + + /** + * @param string $name + * + * @return bool + */ + public function hasAncestor($name) + { + $self = $this; + + while($self = $self->getParent()) { + if($self->getName() === $name) { + return true; + } + } + + return false; + } + + /** @return ProcessedShortcode|null */ + public function getParent() + { + return $this->parent; + } + + /** @return string */ + public function getTextContent() + { + return $this->textContent; + } + + /** @return int */ + public function getPosition() + { + return $this->position; + } + + /** @return int */ + public function getNamePosition() + { + return $this->namePosition; + } + + /** @return string */ + public function getText() + { + return $this->text; + } + + /** @return string */ + public function getShortcodeText() + { + return $this->shortcodeText; + } + + /** @return int */ + public function getOffset() + { + return $this->offset; + } + + /** @return int */ + public function getBaseOffset() + { + return $this->baseOffset; + } + + /** @return int */ + public function getIterationNumber() + { + return $this->iterationNumber; + } + + /** @return int */ + public function getRecursionLevel() + { + return $this->recursionLevel; + } + + /** @return ProcessorInterface */ + public function getProcessor() + { + return $this->processor; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ReplacedShortcode.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ReplacedShortcode.php new file mode 100644 index 0000000..6fa89cb --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ReplacedShortcode.php @@ -0,0 +1,46 @@ + + */ +final class ReplacedShortcode extends AbstractShortcode +{ + /** @var string */ + private $replacement; + /** @var string */ + private $text; + /** @var int */ + private $offset; + + /** @param string $replacement */ + public function __construct(ParsedShortcodeInterface $shortcode, $replacement) + { + $this->name = $shortcode->getName(); + $this->parameters = $shortcode->getParameters(); + $this->content = $shortcode->getContent(); + $this->bbCode = $shortcode->getBbCode(); + $this->text = $shortcode->getText(); + $this->offset = $shortcode->getOffset(); + + $this->replacement = $replacement; + } + + /** @return string */ + public function getReplacement() + { + return $this->replacement; + } + + /** @return string */ + public function getText() + { + return $this->text; + } + + /** @return int */ + public function getOffset() + { + return $this->offset; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/Shortcode.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/Shortcode.php new file mode 100644 index 0000000..abda34c --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/Shortcode.php @@ -0,0 +1,39 @@ + + */ +final class Shortcode extends AbstractShortcode implements ShortcodeInterface +{ + /** + * @param string $name + * @param array $parameters + * @psalm-param array $parameters + * @param string|null $content + * @param string|null $bbCode + */ + public function __construct($name, array $parameters, $content, $bbCode = null) + { + /** @psalm-suppress RedundantConditionGivenDocblockType, DocblockTypeContradiction */ + if(false === is_string($name) || '' === $name) { + throw new \InvalidArgumentException('Shortcode name must be a non-empty string!'); + } + + /** @psalm-suppress MissingClosureParamType, MissingClosureReturnType */ + $isStringOrNull = function($value) { return is_string($value) || null === $value; }; + if(count(array_filter($parameters, $isStringOrNull)) !== count($parameters)) { + throw new \InvalidArgumentException('Parameter values must be either string or empty (null)!'); + } + + $this->name = $name; + $this->parameters = $parameters; + $this->content = $content; + $this->bbCode = $bbCode; + } + + public function withContent($content) + { + return new self($this->name, $this->parameters, $content, $this->bbCode); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ShortcodeInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ShortcodeInterface.php new file mode 100644 index 0000000..377942a --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Shortcode/ShortcodeInterface.php @@ -0,0 +1,60 @@ + + */ +interface ShortcodeInterface +{ + /** + * Returns new instance of given shortcode with changed content + * + * @param string $content + * + * @return self + */ + public function withContent($content); + + /** + * Returns shortcode name + * + * @return string + */ + public function getName(); + + /** + * Returns associative array(name => value) of shortcode parameters + * + * @return array + * @psalm-return array + */ + public function getParameters(); + + /** + * Returns parameter value using its name, will return null for parameter + * without value + * + * @param string $name Parameter name + * @param string|null $default Value returned if there is no parameter with given name + * + * @return string|null + */ + public function getParameter($name, $default = null); + + /** + * Returns shortcode content (data between opening and closing tag). Null + * means that shortcode had no content (was self closing), do not confuse + * that with empty string (hint: use strict comparison operator ===). + * + * @return string|null + */ + public function getContent(); + + /** + * Returns the so-called "BBCode" fragment when shortcode name is treated + * like a parameter, eg.: [name="value" /] + * + * @return string|null + */ + public function getBbCode(); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/ShortcodeFacade.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/ShortcodeFacade.php new file mode 100644 index 0000000..32cf1ce --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/ShortcodeFacade.php @@ -0,0 +1,215 @@ + + */ +class ShortcodeFacade +{ + /** @var ProcessorInterface */ + private $processor; + /** @var ParserInterface */ + private $parser; + /** @var SyntaxInterface */ + private $syntax; + + /** @var HandlerContainer */ + private $handlers; + /** @var EventContainer */ + private $events; + + /** @var SerializerInterface */ + private $textSerializer; + /** @var SerializerInterface */ + private $jsonSerializer; + /** @var SerializerInterface */ + private $xmlSerializer; + /** @var SerializerInterface */ + private $yamlSerializer; + + public function __construct() + { + $this->syntax = new CommonSyntax(); + $this->handlers = new HandlerContainer(); + $this->events = new EventContainer(); + + $this->parser = new RegularParser($this->syntax); + $this->rebuildProcessor(); + + $this->textSerializer = new TextSerializer(); + $this->jsonSerializer = new JsonSerializer(); + $this->yamlSerializer = new YamlSerializer(); + $this->xmlSerializer = new XmlSerializer(); + } + + /** + * @deprecated use constructor and customize using exposed methods + * @return self + */ + public static function create(HandlerContainerInterface $handlers, SyntaxInterface $syntax) + { + $self = new self(); + + /** @psalm-suppress PropertyTypeCoercion */ + $self->handlers = $handlers; + $self->syntax = $syntax; + $self->rebuildProcessor(); + + return $self; + } + + /** @return void */ + private function rebuildProcessor() + { + $this->processor = new Processor($this->parser, $this->handlers); + $this->processor = $this->processor->withEventContainer($this->events); + } + + /** + * @param string $text + * + * @return string + */ + public function process($text) + { + return $this->processor->process($text); + } + + /** + * @param string $text + * + * @return ParsedShortcodeInterface[] + */ + public function parse($text) + { + return $this->parser->parse($text); + } + + /** @return $this */ + public function setParser(ParserInterface $parser) + { + $this->parser = $parser; + $this->rebuildProcessor(); + + return $this; + } + + /** + * @param string $name + * @psalm-param callable(ShortcodeInterface):string $handler + * + * @return $this + */ + public function addHandler($name, $handler) + { + $this->handlers->add($name, $handler); + + return $this; + } + + /** + * @param string $alias + * @param string $name + * + * @return $this + */ + public function addHandlerAlias($alias, $name) + { + $this->handlers->addAlias($alias, $name); + + return $this; + } + + /** + * @param string $name + * @param callable $handler + * + * @return $this + */ + public function addEventHandler($name, $handler) + { + $this->events->addListener($name, $handler); + + return $this; + } + + /* --- SERIALIZATION --------------------------------------------------- */ + + /** + * @param string $format + * + * @return string + */ + public function serialize(ShortcodeInterface $shortcode, $format) + { + switch($format) { + case 'text': return $this->textSerializer->serialize($shortcode); + case 'json': return $this->jsonSerializer->serialize($shortcode); + case 'yaml': return $this->yamlSerializer->serialize($shortcode); + case 'xml': return $this->xmlSerializer->serialize($shortcode); + default: throw new \InvalidArgumentException(sprintf('Invalid serialization format %s!', $format)); + } + } + + /** + * @param string $text + * @param string $format + * + * @return ShortcodeInterface + */ + public function unserialize($text, $format) + { + switch($format) { + case 'text': return $this->textSerializer->unserialize($text); + case 'json': return $this->jsonSerializer->unserialize($text); + case 'yaml': return $this->yamlSerializer->unserialize($text); + case 'xml': return $this->xmlSerializer->unserialize($text); + default: throw new \InvalidArgumentException(sprintf('Invalid unserialization format %s!', $format)); + } + } + + /** + * @deprecated use serialize($shortcode, $format) + * @return string + */ + public function serializeToText(ShortcodeInterface $s) { return $this->serialize($s, 'text'); } + + /** + * @deprecated use serialize($shortcode, $format) + * @return string + */ + public function serializeToJson(ShortcodeInterface $s) { return $this->serialize($s, 'json'); } + + /** + * @deprecated use serialize($shortcode, $format) + * @param string $text + * + * @return ShortcodeInterface + */ + public function unserializeFromText($text) { return $this->unserialize($text, 'text'); } + + /** + * @deprecated use serialize($shortcode, $format) + * @param string $text + * + * @return ShortcodeInterface + */ + public function unserializeFromJson($text) { return $this->unserialize($text, 'json'); } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/CommonSyntax.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/CommonSyntax.php new file mode 100644 index 0000000..f3bb64b --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/CommonSyntax.php @@ -0,0 +1,38 @@ + + */ +final class CommonSyntax implements SyntaxInterface +{ + /** @return string */ + public function getOpeningTag() + { + return '['; + } + + /** @return string */ + public function getClosingTag() + { + return ']'; + } + + /** @return string */ + public function getClosingTagMarker() + { + return '/'; + } + + /** @return string */ + public function getParameterValueSeparator() + { + return '='; + } + + /** @return string */ + public function getParameterValueDelimiter() + { + return '"'; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/Syntax.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/Syntax.php new file mode 100644 index 0000000..0b8b6cd --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/Syntax.php @@ -0,0 +1,70 @@ + + */ +final class Syntax implements SyntaxInterface +{ + /** @var string|null */ + private $openingTag; + /** @var string|null */ + private $closingTag; + /** @var string|null */ + private $closingTagMarker; + /** @var string|null */ + private $parameterValueSeparator; + /** @var string|null */ + private $parameterValueDelimiter; + + /** + * @param string|null $openingTag + * @param string|null $closingTag + * @param string|null $closingTagMarker + * @param string|null $parameterValueSeparator + * @param string|null $parameterValueDelimiter + */ + public function __construct( + $openingTag = null, + $closingTag = null, + $closingTagMarker = null, + $parameterValueSeparator = null, + $parameterValueDelimiter = null + ) { + $this->openingTag = $openingTag; + $this->closingTag = $closingTag; + $this->closingTagMarker = $closingTagMarker; + $this->parameterValueSeparator = $parameterValueSeparator; + $this->parameterValueDelimiter = $parameterValueDelimiter; + } + + /** @return string */ + public function getOpeningTag() + { + return $this->openingTag ?: '['; + } + + /** @return string */ + public function getClosingTag() + { + return $this->closingTag ?: ']'; + } + + /** @return string */ + public function getClosingTagMarker() + { + return $this->closingTagMarker ?: '/'; + } + + /** @return string */ + public function getParameterValueSeparator() + { + return $this->parameterValueSeparator ?: '='; + } + + /** @return string */ + public function getParameterValueDelimiter() + { + return $this->parameterValueDelimiter ?: '"'; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/SyntaxBuilder.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/SyntaxBuilder.php new file mode 100644 index 0000000..15437fb --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/SyntaxBuilder.php @@ -0,0 +1,95 @@ + + */ +final class SyntaxBuilder +{ + /** @var string|null */ + private $openingTag; + /** @var string|null */ + private $closingTag; + /** @var string|null */ + private $closingTagMarker; + /** @var string|null */ + private $parameterValueSeparator; + /** @var string|null */ + private $parameterValueDelimiter; + + public function __construct() + { + } + + /** @return Syntax */ + public function getSyntax() + { + return new Syntax( + $this->openingTag, + $this->closingTag, + $this->closingTagMarker, + $this->parameterValueSeparator, + $this->parameterValueDelimiter + ); + } + + /** + * @param string $tag + * + * @return $this + */ + public function setOpeningTag($tag) + { + $this->openingTag = $tag; + + return $this; + } + + /** + * @param string $tag + * + * @return $this + */ + public function setClosingTag($tag) + { + $this->closingTag = $tag; + + return $this; + } + + /** + * @param string $marker + * + * @return $this + */ + public function setClosingTagMarker($marker) + { + $this->closingTagMarker = $marker; + + return $this; + } + + /** + * @param string $separator + * + * @return $this + */ + public function setParameterValueSeparator($separator) + { + $this->parameterValueSeparator = $separator; + + return $this; + } + + /** + * @param string $delimiter + * + * @return $this + */ + public function setParameterValueDelimiter($delimiter) + { + $this->parameterValueDelimiter = $delimiter; + + return $this; + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/SyntaxInterface.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/SyntaxInterface.php new file mode 100644 index 0000000..3f352c6 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Syntax/SyntaxInterface.php @@ -0,0 +1,23 @@ + + */ +interface SyntaxInterface +{ + /** @return string */ + public function getOpeningTag(); + + /** @return string */ + public function getClosingTag(); + + /** @return string */ + public function getClosingTagMarker(); + + /** @return string */ + public function getParameterValueSeparator(); + + /** @return string */ + public function getParameterValueDelimiter(); +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/src/Utility/RegexBuilderUtility.php b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Utility/RegexBuilderUtility.php new file mode 100644 index 0000000..847ff38 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/src/Utility/RegexBuilderUtility.php @@ -0,0 +1,95 @@ + + */ +final class RegexBuilderUtility +{ + /** @return string */ + public static function buildNameRegex() + { + return '[a-zA-Z0-9-_\\*]+'; + } + + /** @return string */ + public static function buildShortcodeRegex(SyntaxInterface $syntax) + { + return '~('.self::createShortcodeRegexContent($syntax).')~us'; + } + + /** @return string */ + public static function buildSingleShortcodeRegex(SyntaxInterface $syntax) + { + return '~(\A'.self::createShortcodeRegexContent($syntax).'\Z)~us'; + } + + /** @return string */ + public static function buildParametersRegex(SyntaxInterface $syntax) + { + $equals = self::quote($syntax->getParameterValueSeparator()); + $string = self::quote($syntax->getParameterValueDelimiter()); + + $space = '\s*'; + // lookahead test for either space or end of string + $empty = '(?=\s|$)'; + // equals sign and alphanumeric value + $simple = $space.$equals.$space.'[^\s]+'; + // equals sign and value without unescaped string delimiters enclosed in them + $complex = $space.$equals.$space.$string.'([^'.$string.'\\\\]*(?:\\\\.[^'.$string.'\\\\]*)*?)'.$string; + + return '~(?:\s*(\w+(?:'.$complex.'|'.$simple.'|'.$empty.')))~us'; + } + + /** @return string */ + private static function createShortcodeRegexContent(SyntaxInterface $syntax) + { + $open = self::quote($syntax->getOpeningTag()); + $slash = self::quote($syntax->getClosingTagMarker()); + $close = self::quote($syntax->getClosingTag()); + $equals = self::quote($syntax->getParameterValueSeparator()); + $string = self::quote($syntax->getParameterValueDelimiter()); + + $space = '\s*'; + + // parameter and value separator can have any number of spaces around itself + $equalsSpaced = $space.$equals.$space; + // lookahead test for space, closing tag, self-closing tag or end of string + $empty = '(?=\s|'.$close.'|'.$slash.$space.$close.'|$)'; + // equals sign and alphanumeric value + $simple = '((?:(?!=\s*|'.$close.'|'.$slash.$close.')[^\s])+)'; + // equals sign and value without unescaped string delimiters enclosed in them + $complex = $string.'(?:[^'.$string.'\\\\]*(?:\\\\.[^'.$string.'\\\\]*)*)'.$string; + // complete parameters matching regex + $parameters = '(?(?:\s*(?:\w+(?:'.$equalsSpaced.$complex.'|'.$equalsSpaced.$simple.'|'.$empty.')))*)'; + // BBCode is the part after name that makes it behave like a non-empty parameter value + $bbCode = '(?:'.$equals.$space.'(?'.$complex.'|'.$simple.'))?'; + + // alphanumeric characters and dash + $name = '(?'.static::buildNameRegex().')'; + // non-greedy match for any characters + $content = '(?.*?)'; + + // equal beginning for each variant: open tag, name and parameters + $common = $open.$space.$name.$space.$bbCode.$space.$parameters.$space; + // closing tag variants: just closing tag, self closing tag or content + // and closing block with backreference name validation + $justClosed = $close; + $selfClosed = '(?'.$slash.')'.$space.$close; + $withContent = $close.$content.$open.$space.'(?'.$slash.')'.$space.'(\k)'.$space.$close; + + return '(?:'.$common.'(?:'.$withContent.'|'.$justClosed.'|'.$selfClosed.'))'; + } + + /** + * @param string $text + * + * @return string + */ + private static function quote($text) + { + return preg_replace('/(.)/us', '\\\\$0', $text); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/AbstractTestCase.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/AbstractTestCase.php new file mode 100644 index 0000000..9ab9a3c --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/AbstractTestCase.php @@ -0,0 +1,17 @@ + + */ +abstract class AbstractTestCase extends TestCase +{ + public function willThrowException($exception) + { + version_compare(phpversion(), '7.0.0') > 0 + ? $this->expectException($exception) + : $this->setExpectedException($exception); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/EventsTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/EventsTest.php new file mode 100644 index 0000000..a6e0cbc --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/EventsTest.php @@ -0,0 +1,97 @@ + + */ +final class EventsTest extends AbstractTestCase +{ + public function testRaw() + { + $times = 0; + $handlers = new HandlerContainer(); + $handlers->add('raw', function(ShortcodeInterface $s) { return $s->getContent(); }); + $handlers->add('n', function(ShortcodeInterface $s) use(&$times) { ++$times; return $s->getName(); }); + $handlers->add('c', function(ShortcodeInterface $s) use(&$times) { ++$times; return $s->getContent(); }); + + $events = new EventContainer(); + $events->addListener(Events::FILTER_SHORTCODES, new FilterRawEventHandler(array('raw'))); + + $processor = new Processor(new RegularParser(), $handlers); + $processor = $processor->withEventContainer($events); + + $this->assertSame(' [n] [c]cnt[/c] [/n] ', $processor->process('[raw] [n] [c]cnt[/c] [/n] [/raw]')); + $this->assertSame('x un [n] [c]cnt[/c] [/n] y', $processor->process('x [c]u[n][/c][raw] [n] [c]cnt[/c] [/n] [/raw] y')); + $this->assertEquals(2, $times); + } + + public function testStripContentOutsideShortcodes() + { + $handlers = new HandlerContainer(); + $handlers->add('name', function(ShortcodeInterface $s) { return $s->getName(); }); + $handlers->add('content', function(ShortcodeInterface $s) { return $s->getContent(); }); + $handlers->add('root', function(ProcessedShortcode $s) { return 'root['.$s->getContent().']'; }); + + $events = new EventContainer(); + $events->addListener(Events::REPLACE_SHORTCODES, new ReplaceJoinEventHandler(array('root'))); + + $processor = new Processor(new RegularParser(), $handlers); + $processor = $processor->withEventContainer($events); + + $this->assertSame('a root[name name name] b', $processor->process('a [root]x [name] c[content] [name /] [/content] y[name/][/root] b')); + } + + public function testDefaultApplier() + { + $handlers = new HandlerContainer(); + $handlers->add('name', function(ShortcodeInterface $s) { return $s->getName(); }); + $handlers->add('content', function(ShortcodeInterface $s) { return $s->getContent(); }); + $handlers->add('root', function(ProcessedShortcode $s) { return 'root['.$s->getContent().']'; }); + + $events = new EventContainer(); + $events->addListener(Events::REPLACE_SHORTCODES, function(ReplaceShortcodesEvent $event) { + $event->setResult(array_reduce(array_reverse($event->getReplacements()), function($state, ReplacedShortcode $r) { + $offset = $r->getOffset(); + $length = mb_strlen($r->getText()); + + return mb_substr($state, 0, $offset).$r->getReplacement().mb_substr($state, $offset + $length); + }, $event->getText())); + }); + + $processor = new Processor(new RegularParser(), $handlers); + $processor = $processor->withEventContainer($events); + + $this->assertSame('a root[x name c name y] b', $processor->process('a [root]x [name] c[content] [name /] [/content] y[/root] b')); + } + + public function testExceptionOnHandlerForUnknownEvent() + { + $events = new EventContainer(); + $this->willThrowException('InvalidArgumentException'); + $events->addListener('invalid', function() {}); + } + + public function testInvalidFilterRawShortcodesNames() + { + $this->willThrowException('InvalidArgumentException'); + new FilterRawEventHandler(array(new \stdClass())); + } + + public function testInvalidReplaceJoinNames() + { + $this->willThrowException('InvalidArgumentException'); + new ReplaceJoinEventHandler(array(new \stdClass())); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/FacadeTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/FacadeTest.php new file mode 100644 index 0000000..de2ccc9 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/FacadeTest.php @@ -0,0 +1,98 @@ + + */ +final class FacadeTest extends AbstractTestCase +{ + public function testFacade() + { + $handlers = new HandlerContainer(); + $handlers + ->add('name', function (ShortcodeInterface $s) { return $s->getName(); }) + ->addAlias('n', 'name'); + + $facade = ShortcodeFacade::create($handlers, new CommonSyntax()); + $facade->addHandler('content', function (ShortcodeInterface $s) { return $s->getContent(); }); + $facade->addHandlerAlias('c', 'content'); + $facade->setParser(new RegexParser()); + + $this->assertSame('n', $facade->process('[n]')); + $this->assertSame('c', $facade->process('[c]c[/c]')); + + $shortcodes = $facade->parse('[b]'); + $this->assertInstanceOf('Thunder\\Shortcode\\Shortcode\\ParsedShortcodeInterface', $shortcodes[0]); + } + + public function testFacadeEvents() + { + $facade = new ShortcodeFacade(); + $facade->addHandler('n', function (ShortcodeInterface $s) { return $s->getName(); }); + $facade->addEventHandler(Events::FILTER_SHORTCODES, new FilterRawEventHandler(array('raw'))); + + $this->assertSame('[raw] [n] [/raw]', $facade->process('[raw] [n] [/raw]')); + } + + public function testSerialization() + { + $facade = new ShortcodeFacade(); + + $s = new Shortcode('c', array(), null); + $this->assertSame('[c /]', $facade->serializeToText($s)); + $this->assertSame('c', $facade->unserializeFromText('[c]')->getName()); + $this->assertSame('[c /]', $facade->serialize($s, 'text')); + $this->assertSame('c', $facade->unserialize('[c]', 'text')->getName()); + + $json = '{"name":"c","parameters":[],"content":null,"bbCode":null}'; + $this->assertSame($json, $facade->serializeToJson($s)); + $this->assertSame('c', $facade->unserializeFromJson($json)->getName()); + $this->assertSame($json, $facade->serialize($s, 'json')); + $this->assertSame('c', $facade->unserialize($json, 'json')->getName()); + + $yaml = <<assertSame($yaml, $facade->serialize($s, 'yaml')); + $this->assertSame('c', $facade->unserialize($yaml, 'yaml')->getName()); + + $xml = << + + + + + + +EOF; + $this->assertSame($xml, $facade->serialize($s, 'xml')); + $this->assertSame('c', $facade->unserialize($xml, 'xml')->getName()); + } + + public function testInvalidSerializationFormatException() + { + $this->willThrowException('InvalidArgumentException'); + $facade = new ShortcodeFacade(); + $facade->serialize(new Shortcode('name', array(), null), 'invalid'); + } + + public function testInvalidUnserializationFormatException() + { + $this->willThrowException('InvalidArgumentException'); + $facade = new ShortcodeFacade(); + $facade->unserialize('[c]', 'invalid'); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/Fake/ReverseShortcode.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/Fake/ReverseShortcode.php new file mode 100644 index 0000000..e28745d --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/Fake/ReverseShortcode.php @@ -0,0 +1,12 @@ +getContent()); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/HandlerContainerTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/HandlerContainerTest.php new file mode 100644 index 0000000..07066c1 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/HandlerContainerTest.php @@ -0,0 +1,100 @@ + + */ +final class HandlerContainerTest extends AbstractTestCase +{ + public function testExceptionOnDuplicateHandler() + { + $handlers = new HandlerContainer(); + $handlers->add('name', function () {}); + $this->willThrowException('RuntimeException'); + $handlers->add('name', function () {}); + } + + public function testRemove() + { + $handlers = new HandlerContainer(); + static::assertFalse($handlers->has('code')); + $handlers->add('code', function(ShortcodeInterface $s) {}); + static::assertTrue($handlers->has('code')); + $handlers->remove('code'); + static::assertFalse($handlers->has('code')); + } + + public function testRemoveException() + { + $handlers = new HandlerContainer(); + $this->willThrowException('RuntimeException'); + $handlers->remove('code'); + } + + public function testNames() + { + $handlers = new HandlerContainer(); + static::assertEmpty($handlers->getNames()); + $handlers->add('code', function(ShortcodeInterface $s) {}); + static::assertSame(array('code'), $handlers->getNames()); + $handlers->addAlias('c', 'code'); + static::assertSame(array('code', 'c'), $handlers->getNames()); + } + + public function testHandlerContainer() + { + $x = function () {}; + + $handler = new HandlerContainer(); + $handler->add('x', $x); + $handler->addAlias('y', 'x'); + + static::assertSame($x, $handler->get('x')); + } + + public function testInvalidHandler() + { + $handlers = new HandlerContainer(); + $this->willThrowException('RuntimeException'); + $handlers->add('invalid', new \stdClass()); + } + + public function testDefaultHandler() + { + $handlers = new HandlerContainer(); + static::assertNull($handlers->get('missing')); + + $handlers->setDefault(function () {}); + static::assertNotNull($handlers->get('missing')); + } + + public function testExceptionIfAliasingNonExistentHandler() + { + $handlers = new HandlerContainer(); + $this->willThrowException('RuntimeException'); + $handlers->addAlias('m', 'missing'); + } + + public function testImmutableHandlerContainer() + { + $handlers = new HandlerContainer(); + $handlers->add('code', function () {}); + $handlers->addAlias('c', 'code'); + $imHandlers = new ImmutableHandlerContainer($handlers); + $handlers->add('not', function() {}); + + static::assertNull($imHandlers->get('missing')); + static::assertNotNull($imHandlers->get('code')); + static::assertNotNull($imHandlers->get('c')); + static::assertNull($imHandlers->get('not')); + + $defaultHandlers = new HandlerContainer(); + $defaultHandlers->setDefault(function () {}); + $imDefaultHandlers = new ImmutableHandlerContainer($defaultHandlers); + static::assertNotNull($imDefaultHandlers->get('missing')); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ParserTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ParserTest.php new file mode 100644 index 0000000..a4b5df9 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ParserTest.php @@ -0,0 +1,321 @@ + + */ +final class ParserTest extends AbstractTestCase +{ + /** + * @param ParserInterface $parser + * @param string $code + * @param ParsedShortcode[] $expected + * + * @dataProvider provideShortcodes + */ + public function testParser(ParserInterface $parser, $code, array $expected) + { + $this->assertShortcodes($parser->parse($code), $expected); + } + + private function assertShortcodes(array $actual, array $expected) + { + $count = count($actual); + static::assertCount($count, $expected, 'counts'); + for ($i = 0; $i < $count; $i++) { + static::assertSame($actual[$i]->getName(), $expected[$i]->getName(), 'name'); + static::assertSame($actual[$i]->getParameters(), $expected[$i]->getParameters(), 'parameters'); + static::assertSame($actual[$i]->getContent(), $expected[$i]->getContent(), 'content'); + static::assertSame($actual[$i]->getText(), $expected[$i]->getText(), 'text'); + static::assertSame($actual[$i]->getOffset(), $expected[$i]->getOffset(), 'offset'); + static::assertSame($actual[$i]->getBbCode(), $expected[$i]->getBbCode(), 'bbCode'); + } + } + + public function provideShortcodes() + { + $s = new CommonSyntax(); + + $tests = array( + // invalid + array($s, '', array()), + array($s, '[]', array()), + array($s, '![](image.jpg)', array()), + array($s, 'x html([a. title][, alt][, classes]) x', array()), + array($s, '[/y]', array()), + array($s, '[sc', array()), + array($s, '[sc / [/sc]', array()), + array($s, '[sc arg="val', array()), + + // single shortcodes + array($s, '[sc]', array( + new ParsedShortcode(new Shortcode('sc', array(), null), '[sc]', 0), + )), + array($s, '[sc arg=val]', array( + new ParsedShortcode(new Shortcode('sc', array('arg' => 'val'), null), '[sc arg=val]', 0), + )), + array($s, '[sc novalue arg="complex value"]', array( + new ParsedShortcode(new Shortcode('sc', array('novalue' => null, 'arg' => 'complex value'), null), '[sc novalue arg="complex value"]', 0), + )), + array($s, '[sc x="ąćęłńóśżź ĄĆĘŁŃÓŚŻŹ"]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => 'ąćęłńóśżź ĄĆĘŁŃÓŚŻŹ'), null), '[sc x="ąćęłńóśżź ĄĆĘŁŃÓŚŻŹ"]', 0), + )), + array($s, '[sc x="multi'."\n".'line"]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => 'multi'."\n".'line'), null), '[sc x="multi'."\n".'line"]', 0), + )), + array($s, '[sc noval x="val" y]content[/sc]', array( + new ParsedShortcode(new Shortcode('sc', array('noval' => null, 'x' => 'val', 'y' => null), 'content'), '[sc noval x="val" y]content[/sc]', 0), + )), + array($s, '[sc x="{..}"]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => '{..}'), null), '[sc x="{..}"]', 0), + )), + array($s, '[sc a="x y" b="x" c=""]', array( + new ParsedShortcode(new Shortcode('sc', array('a' => 'x y', 'b' => 'x', 'c' => ''), null), '[sc a="x y" b="x" c=""]', 0), + )), + array($s, '[sc a="a \"\" b"]', array( + new ParsedShortcode(new Shortcode('sc', array('a' => 'a \"\" b'), null), '[sc a="a \"\" b"]', 0), + )), + array($s, '[sc/]', array( + new ParsedShortcode(new Shortcode('sc', array(), null), '[sc/]', 0), + )), + array($s, '[sc /]', array( + new ParsedShortcode(new Shortcode('sc', array(), null), '[sc /]', 0), + )), + array($s, '[sc arg=val cmp="a b"/]', array( + new ParsedShortcode(new Shortcode('sc', array('arg' => 'val', 'cmp' => 'a b'), null), '[sc arg=val cmp="a b"/]', 0), + )), + array($s, '[sc x y /]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => null, 'y' => null), null), '[sc x y /]', 0), + )), + array($s, '[sc x="\ " /]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => '\ '), null), '[sc x="\ " /]', 0), + )), + array($s, '[ sc x = "\ " y = value z / ]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => '\ ', 'y' => 'value', 'z' => null), null), '[ sc x = "\ " y = value z / ]', 0), + )), + array($s, '[ sc x= "\ " y =value ] vv [ / sc ]', array( + new ParsedShortcode(new Shortcode('sc', array('x' => '\ ', 'y' => 'value'), ' vv '), '[ sc x= "\ " y =value ] vv [ / sc ]', 0), + )), + array($s, '[sc url="http://giggle.com/search" /]', array( + new ParsedShortcode(new Shortcode('sc', array('url' => 'http://giggle.com/search'), null), '[sc url="http://giggle.com/search" /]', 0), + )), + + // bbcode + array($s, '[sc = "http://giggle.com/search" /]', array( + new ParsedShortcode(new Shortcode('sc', array(), null, 'http://giggle.com/search'), '[sc = "http://giggle.com/search" /]', 0), + )), + + // multiple shortcodes + array($s, 'Lorem [ipsum] random [code-code arg=val] which is here', array( + new ParsedShortcode(new Shortcode('ipsum', array(), null), '[ipsum]', 6), + new ParsedShortcode(new Shortcode('code-code', array('arg' => 'val'), null), '[code-code arg=val]', 21), + )), + array($s, 'x [aa] x [aa] x', array( + new ParsedShortcode(new Shortcode('aa', array(), null), '[aa]', 2), + new ParsedShortcode(new Shortcode('aa', array(), null), '[aa]', 9), + )), + array($s, 'x [x]a[/x] x [x]a[/x] x', array( + new ParsedShortcode(new Shortcode('x', array(), 'a'), '[x]a[/x]', 2), + new ParsedShortcode(new Shortcode('x', array(), 'a'), '[x]a[/x]', 13), + )), + array($s, 'x [x x y=z a="b c"]a[/x] x [x x y=z a="b c"]a[/x] x', array( + new ParsedShortcode(new Shortcode('x', array('x' => null, 'y' => 'z', 'a' => 'b c'), 'a'), '[x x y=z a="b c"]a[/x]', 2), + new ParsedShortcode(new Shortcode('x', array('x' => null, 'y' => 'z', 'a' => 'b c'), 'a'), '[x x y=z a="b c"]a[/x]', 27), + )), + array($s, 'x [code /] y [code]z[/code] x [code] y [code/] a', array( + new ParsedShortcode(new Shortcode('code', array(), null), '[code /]', 2), + new ParsedShortcode(new Shortcode('code', array(), 'z'), '[code]z[/code]', 13), + new ParsedShortcode(new Shortcode('code', array(), null), '[code]', 30), + new ParsedShortcode(new Shortcode('code', array(), null), '[code/]', 39), + )), + array($s, 'x [code arg=val /] y [code cmp="xx"/] x [code x=y/] a', array( + new ParsedShortcode(new Shortcode('code', array('arg' => 'val'), null), '[code arg=val /]', 2), + new ParsedShortcode(new Shortcode('code', array('cmp' => 'xx'), null), '[code cmp="xx"/]', 21), + new ParsedShortcode(new Shortcode('code', array('x' => 'y'), null), '[code x=y/]', 40), + )), + array($s, 'x [ code arg=val /]a[ code/]c[x / ] m [ y ] c [ / y]', array( + new ParsedShortcode(new Shortcode('code', array('arg' => 'val'), null), '[ code arg=val /]', 2), + new ParsedShortcode(new Shortcode('code', array(), null), '[ code/]', 23), + new ParsedShortcode(new Shortcode('x', array(), null), '[x / ]', 32), + new ParsedShortcode(new Shortcode('y', array(), ' c '), '[ y ] c [ / y]', 47), + )), + + // other syntax + array(new Syntax('[[', ']]', '//', '==', '""'), '[[code arg==""val oth""]]cont[[//code]]', array( + new ParsedShortcode(new Shortcode('code', array('arg' => 'val oth'), 'cont'), '[[code arg==""val oth""]]cont[[//code]]', 0), + )), + array(new Syntax('^', '$', '&', '!!!', '@@'), '^code a!!!@@\"\"@@ b!!!@@x\"y@@ c$cnt^&code$', array( + new ParsedShortcode(new Shortcode('code', array('a' => '\"\"', 'b' => 'x\"y', 'c' => null), 'cnt'), '^code a!!!@@\"\"@@ b!!!@@x\"y@@ c$cnt^&code$', 0), + )), + + // UTF-8 sequences + array($s, '’’’’[sc]’’[sc]', array( + new ParsedShortcode(new Shortcode('sc', array(), null), '[sc]', 4), + new ParsedShortcode(new Shortcode('sc', array(), null), '[sc]', 10), + )), + + // performance +// array($s, 'x [[aa]] y', array()), + array($s, str_repeat('[a]', 20), array_map(function($offset) { // 20 + return new ParsedShortcode(new Shortcode('a', array(), null), '[a]', $offset); + }, range(0, 57, 3))), + array($s, '[b][a]x[a][/a][/a][/b] [b][a][a][/a]y[/a][/b]', array( + new ParsedShortcode(new Shortcode('b', array(), '[a]x[a][/a][/a]'), '[b][a]x[a][/a][/a][/b]', 0), + new ParsedShortcode(new Shortcode('b', array(), '[a][a][/a]y[/a]'), '[b][a][a][/a]y[/a][/b]', 23), + )), + array($s, '[b] [a][a][a] [/b] [b] [a][a][a] [/b]', array( + new ParsedShortcode(new Shortcode('b', array(), ' [a][a][a] '), '[b] [a][a][a] [/b]', 0), + new ParsedShortcode(new Shortcode('b', array(), ' [a][a][a] '), '[b] [a][a][a] [/b]', 19), + )), + array($s, '[name]random[/other]', array( + new ParsedShortcode(new Shortcode('name', array(), null), '[name]', 0), + )), + array($s, '[0][1][2][3]', array( + new ParsedShortcode(new Shortcode('0', array(), null), '[0]', 0), + new ParsedShortcode(new Shortcode('1', array(), null), '[1]', 3), + new ParsedShortcode(new Shortcode('2', array(), null), '[2]', 6), + new ParsedShortcode(new Shortcode('3', array(), null), '[3]', 9), + )), + array($s, '[_][na_me][_name][name_][n_am_e][_n_]', array( + new ParsedShortcode(new Shortcode('_', array(), null), '[_]', 0), + new ParsedShortcode(new Shortcode('na_me', array(), null), '[na_me]', 3), + new ParsedShortcode(new Shortcode('_name', array(), null), '[_name]', 10), + new ParsedShortcode(new Shortcode('name_', array(), null), '[name_]', 17), + new ParsedShortcode(new Shortcode('n_am_e', array(), null), '[n_am_e]', 24), + new ParsedShortcode(new Shortcode('_n_', array(), null), '[_n_]', 32), + )), + array($s, '[x]/[/x] [x]"[/x] [x]=[/x] [x]][/x] [x] [/x] [x]x[/x]', array( + new ParsedShortcode(new Shortcode('x', array(), '/'), '[x]/[/x]', 0), + new ParsedShortcode(new Shortcode('x', array(), '"'), '[x]"[/x]', 9), + new ParsedShortcode(new Shortcode('x', array(), '='), '[x]=[/x]', 18), + new ParsedShortcode(new Shortcode('x', array(), ']'), '[x]][/x]', 27), + new ParsedShortcode(new Shortcode('x', array(), ' '), '[x] [/x]', 36), + new ParsedShortcode(new Shortcode('x', array(), 'x'), '[x]x[/x]', 45), + )), + array($s, '[a]0[/a]', array( + new ParsedShortcode(new Shortcode('a', array(), '0'), '[a]0[/a]', 0), + )), + array($s, '[fa icon=fa-camera /] [fa icon=fa-camera extras=fa-4x /]', array( + new ParsedShortcode(new Shortcode('fa', array('icon' => 'fa-camera'), null), '[fa icon=fa-camera /]', 0), + new ParsedShortcode(new Shortcode('fa', array('icon' => 'fa-camera', 'extras' => 'fa-4x'), null), '[fa icon=fa-camera extras=fa-4x /]', 22), + )), + array($s, '[fa icon=fa-circle-o-notch extras=fa-spin,fa-3x /]', array( + new ParsedShortcode(new Shortcode('fa', array('icon' => 'fa-circle-o-notch', 'extras' => 'fa-spin,fa-3x'), null), '[fa icon=fa-circle-o-notch extras=fa-spin,fa-3x /]', 0), + )), + array($s, '[z =]', array()), + array($s, '[x=#F00 one=#F00 two="#F00"]', array( + new ParsedShortcode(new Shortcode('x', array('one' => '#F00', 'two' => '#F00'), null, '#F00'), '[x=#F00 one=#F00 two="#F00"]', 0), + )), + array($s, '[*] [* xyz arg=val]', array( + new ParsedShortcode(new Shortcode('*', array(), null, null), '[*]', 0), + new ParsedShortcode(new Shortcode('*', array('xyz' => null, 'arg' => 'val'), null, null), '[* xyz arg=val]', 4), + )), + array($s, '[*=bb x=y]cnt[/*]', array( + new ParsedShortcode(new Shortcode('*', array('x' => 'y'), 'cnt', 'bb'), '[*=bb x=y]cnt[/*]', 0), + )), + array($s, '[ [] ] [x] [ ] [/x] ] [] [ [y] ] [] [ [z] [/#] [/z] [ [] ] [/] [/y] ] [z] [ [/ [/] /] ] [/z]', array( + new ParsedShortcode(new Shortcode('x', array(), ' [ ] ', null), '[x] [ ] [/x]', 7), + new ParsedShortcode(new Shortcode('y', array(), ' ] [] [ [z] [/#] [/z] [ [] ] [/] ', null), '[y] ] [] [ [z] [/#] [/z] [ [] ] [/] [/y]', 27), + new ParsedShortcode(new Shortcode('z', array(), ' [ [/ [/] /] ] ', null), '[z] [ [/ [/] /] ] [/z]', 70), + )), + // falsy string values + array($s, '[a=0 b=0]0[/a]', array( + new ParsedShortcode(new Shortcode('a', array('b' => '0'), '0', '0'), '[a=0 b=0]0[/a]', 0), + )), + ); + + /** + * WordPress can't handle: + * - incorrect shortcode opening tag (blindly matches everything + * between opening token and closing token) + * - spaces between shortcode open tag and its name ([ name]), + * - spaces around BBCode part ([name = "bbcode"]), + * - escaped tokens anywhere in the arguments ([x arg=" \" "]), + * - configurable syntax (that's intended), + * - numbers in shortcode name. + * + * Tests cases from array above with identifiers in the array below must be skipped. + */ + $wordpressSkip = array(3, 6, 16, 21, 22, 23, 25, 32, 33, 34, 46, 47, 49, 51); + $result = array(); + foreach($tests as $key => $test) { + $syntax = array_shift($test); + + $result[] = array_merge(array(new RegexParser($syntax)), $test); + $result[] = array_merge(array(new RegularParser($syntax)), $test); + if(!in_array($key, $wordpressSkip, true)) { + $result[] = array_merge(array(new WordpressParser()), $test); + } + } + + return $result; + } + + public function testIssue77() + { + $parser = new RegularParser(); + + $this->assertShortcodes($parser->parse('[a][x][/x][x k="v][/x][y]x[/y]'), array( + new ParsedShortcode(new Shortcode('a', array(), null, null), '[a]', 0), + new ParsedShortcode(new Shortcode('x', array(), '', null), '[x][/x]', 3), + new ParsedShortcode(new Shortcode('y', array(), 'x', null), '[y]x[/y]', 22), + )); + + $this->assertShortcodes($parser->parse('[a k="v][x][/x]'), array( + new ParsedShortcode(new Shortcode('x', array(), '', null), '[x][/x]', 8), + )); + } + + public function testWordPress() + { + $parser = new WordpressParser(); + + $this->testParser($parser, '[code arg=" '', 'oth' => 'val'), null), '[code arg="testParser($parser, '[code "xxx"]', array( + new ParsedShortcode(new Shortcode('code', array('xxx' => null), null, null), '[code "xxx"]', 0) + )); + $this->testParser($parser, '[code="xxx"] [code=yyy-aaa]', array( + new ParsedShortcode(new Shortcode('code', array('="xxx"' => null), null), '[code="xxx"]', 0), + new ParsedShortcode(new Shortcode('code', array('=yyy-aaa' => null), null), '[code=yyy-aaa]', 13) + )); + + $handlers = new HandlerContainer(); + $handlers->add('_', function() {}); + $handlers->add('na_me', function() {}); + $handlers->add('_n_', function() {}); + $this->testParser(WordpressParser::createFromHandlers($handlers), '[_][na_me][_name][name_][n_am_e][_n_]', array( + new ParsedShortcode(new Shortcode('_', array(), null), '[_]', 0), + new ParsedShortcode(new Shortcode('na_me', array(), null), '[na_me]', 3), + new ParsedShortcode(new Shortcode('_n_', array(), null), '[_n_]', 32), + )); + $this->testParser(WordpressParser::createFromNames(array('_', 'na_me', '_n_')), '[_][na_me][_name][name_][n_am_e][_n_]', array( + new ParsedShortcode(new Shortcode('_', array(), null), '[_]', 0), + new ParsedShortcode(new Shortcode('na_me', array(), null), '[na_me]', 3), + new ParsedShortcode(new Shortcode('_n_', array(), null), '[_n_]', 32), + )); + } + + public function testWordpressInvalidNamesException() + { + $this->willThrowException('InvalidArgumentException'); + WordpressParser::createFromNames(array('string', new \stdClass())); + } + + public function testInstances() + { + static::assertInstanceOf('Thunder\Shortcode\Parser\WordPressParser', new WordpressParser()); + static::assertInstanceOf('Thunder\Shortcode\Parser\RegularParser', new RegularParser()); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ProcessorTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ProcessorTest.php new file mode 100644 index 0000000..ca116d1 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ProcessorTest.php @@ -0,0 +1,367 @@ + + */ +final class ProcessorTest extends AbstractTestCase +{ + private function getHandlers() + { + $handlers = new HandlerContainer(); + $handlers + ->add('name', function (ShortcodeInterface $s) { return $s->getName(); }) + ->add('content', function (ShortcodeInterface $s) { return $s->getContent(); }) + ->add('reverse', new ReverseShortcode()) + ->add('url', function(ShortcodeInterface $s) { + $url = $s->getParameter('url', $s->getBbCode()); + + return ''.$url.''; + }) + ->addAlias('c', 'content') + ->addAlias('n', 'name'); + + return $handlers; + } + + public function testReplaceWithoutContentOffset() + { + $text = ' [x value=" [name]yyy[/name] "] [name]yyy[/name] [/x] '; + $result = ' [x value=" [name]yyy[/name] "] name [/x] '; + + $processor = new Processor(new RegexParser(), $this->getHandlers()); + + static::assertSame($result, $processor->process($text)); + } + + /** + * @param string $text + * @param string $result + * + * @dataProvider provideTexts + */ + public function testProcessorProcess($text, $result) + { + $processor = new Processor(new RegexParser(), $this->getHandlers()); + + static::assertSame($result, $processor->process($text)); + } + + public function provideTexts() + { + return array( + array('[name]', 'name'), + array('[content]random[/content]', 'random'), + array('[content]象形字[/content]', '象形字'), + array('xxx [content]象形字[/content] yyy', 'xxx 象形字 yyy'), + array('xxx [content]ąćęłńóśżź ąćęłńóśżź[/content] yyy', 'xxx ąćęłńóśżź ąćęłńóśżź yyy'), + array('[name]random[/other]', 'namerandom[/other]'), + array('[name][other]random[/other]', 'name[other]random[/other]'), + array('[content]random-[name]-random[/content]', 'random-name-random'), + array('random [content]other[/content] various', 'random other various'), + array('x [content]a-[name]-b[/content] y', 'x a-name-b y'), + array('x [c]a-[n][/n]-b[/c] y', 'x a-n-b y'), + array('x [content]a-[c]v[/c]-b[/content] y', 'x a-v-b y'), + array('x [html]bold[/html] z', 'x [html]bold[/html] z'), + array('x [reverse]abc xyz[/reverse] z', 'x zyx cba z'), + array('x [i /][i]i[/i][i /][i]i[/i][i /] z', 'x [i /][i]i[/i][i /][i]i[/i][i /] z'), + array('x [url url="http://giggle.com/search" /] z', 'x http://giggle.com/search z'), + array('x [url="http://giggle.com/search"] z', 'x http://giggle.com/search z'), + ); + } + + public function testProcessorParentContext() + { + $handlers = new HandlerContainer(); + $handlers->add('outer', function (ProcessedShortcode $s) { + $name = $s->getParent() ? $s->getParent()->getName() : 'root'; + + return $name.'['.$s->getContent().']'; + }); + $handlers->addAlias('inner', 'outer'); + $handlers->addAlias('level', 'outer'); + + $processor = new Processor(new RegexParser(), $handlers); + + $text = 'x [outer]a [inner]c [level]x[/level] d[/inner] b[/outer] y'; + $result = 'x root[a outer[c inner[x] d] b] y'; + static::assertSame($result, $processor->process($text)); + static::assertSame($result.$result, $processor->process($text.$text)); + } + + public function testReplacesLongerThanInputText() + { + $handlers = new HandlerContainer(); + $handlers->add('x', function() { return ''; }); + $processor = new Processor(new RegularParser(), $handlers); + + static::assertSame('', $processor->process('[x][x][x]')); + } + + public function testProcessorWithoutRecursion() + { + $processor = new Processor(new RegexParser(), $this->getHandlers()); + $text = 'x [content]a-[name][/name]-b[/content] y'; + + static::assertSame('x a-[name][/name]-b y', $processor->withRecursionDepth(0)->process($text)); + } + + public function testProcessContentIfHasChildHandlerButNotParent() + { + $handlers = new HandlerContainer(); + $handlers->add('valid', function (ShortcodeInterface $s) { return $s->getName(); }); + + $text = 'x [invalid ] [valid /] [/invalid] y'; + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame('x [invalid ] valid [/invalid] y', $processor->withAutoProcessContent(true)->process($text)); + static::assertSame('x [invalid ] [valid /] [/invalid] y', $processor->withAutoProcessContent(false)->process($text)); + } + + public function testProcessorWithoutContentAutoProcessing() + { + $processor = new Processor(new RegexParser(), $this->getHandlers()); + $text = 'x [content]a-[name][/name]-b[/content] y'; + + static::assertSame('x a-[name][/name]-b y', $processor->withAutoProcessContent(false)->process($text)); + } + + public function testProcessorShortcodePositions() + { + $handlers = new HandlerContainer(); + $handlers->add('p', function (ProcessedShortcode $s) { return $s->getPosition(); }); + $handlers->add('n', function (ProcessedShortcode $s) { return $s->getNamePosition(); }); + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame('123', $processor->process('[n][n][n]'), '3n'); + static::assertSame('123', $processor->process('[p][p][p]'), '3p'); + static::assertSame('113253', $processor->process('[p][n][p][n][p][n]'), 'pnpnpn'); + static::assertSame('1231567', $processor->process('[p][p][p][n][p][p][p]'), 'pppnppp'); + } + + /** + * @dataProvider provideBuiltInTests + */ + public function testBuiltInHandlers($text, $result) + { + $handlers = new HandlerContainer(); + $handlers + ->add('content', new ContentHandler()) + ->add('name', new NameHandler()) + ->add('null', new NullHandler()) + ->add('json', new SerializerHandler(new JsonSerializer())) + ->add('text', new SerializerHandler(new TextSerializer())) + ->add('placeholder', new PlaceholderHandler()) + ->add('b', new WrapHandler('', '')) + ->add('bb', WrapHandler::createBold()) + ->add('declare', new DeclareHandler($handlers)) + ->add('url', new UrlHandler()) + ->add('email', new EmailHandler()) + ->add('raw', new RawHandler()); + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame($result, $processor->process($text)); + } + + public function provideBuiltInTests() + { + return array( + array('[declare date]%year%.%month%.%day%[/declare][date year=2015 month=08 day=26]', '2015.08.26'), + array('[declare sample]%param%[/declare][invalid param=value]', '[invalid param=value]'), + array('[declare]%param%[/declare][invalid param=value]', '[invalid param=value]'), + array('[url]http://kowalczyk.cc[/url]', 'http://kowalczyk.cc'), + array('[url="http://kowalczyk.cc"]Visit![/url]', 'Visit!'), + array('[email]tomasz@kowalczyk.cc[/email]', 'tomasz@kowalczyk.cc'), + array('[email="tomasz@kowalczyk.cc"]Send![/email]', 'Send!'), + array('[email="tomasz@kowalczyk.cc" /]', 'tomasz@kowalczyk.cc'), + array('[b]text[/b]', 'text'), + array('[bb]text[/bb]', 'text'), + array('[json arg=val]value[/json]', '{"name":"json","parameters":{"arg":"val"},"content":"value","bbCode":null}'), + array('[text arg=val]value[/text]', '[text arg=val]value[/text]'), + array('[null arg=val]value[/null]', ''), + array('[name /]', 'name'), + array('[content]cnt[/content]', 'cnt'), + array('[placeholder param=val]%param%[/placeholder]', 'val'), + array('[placeholder param=val]%param%[/placeholder]', 'val'), + array('[raw][null][content]cnt[/content][name /][/raw]', '[null][content]cnt[/content][name /]'), + array('[listing-link id="12345"]Holá[/listing-link]', '[listing-link id="12345"]Holá[/listing-link]'), + ); + } + + public function testProcessorDeclare() + { + $handlers = new HandlerContainer(); + $handlers->add('declare', function (ProcessedShortcode $s) use ($handlers) { + $handlers->add($s->getParameterAt(0), function (ShortcodeInterface $x) use ($s) { + $keys = array_map(function ($item) { + return '%'.$item.'%'; + }, array_keys($x->getParameters())); + $values = array_values($x->getParameters()); + + return str_replace($keys, $values, $s->getContent()); + }); + }); + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame('You are 18 years old.', trim($processor->process(' + [declare age]You are %age% years old.[/declare] + [age age=18] + '))); + } + + public function testBaseOffset() + { + $handlers = new HandlerContainer(); + $handlers->setDefault(function(ProcessedShortcode $s) { + return '['.$s->getBaseOffset().']'.$s->getContent(); + }); + $processor = new Processor(new RegularParser(new CommonSyntax()), $handlers); + + static::assertSame('[0][3] ’[8][11]’ [20]', $processor->process('[a][b] ’[c][d]’ [/b][e]')); + } + + public function testProcessorIterative() + { + $handlers = new HandlerContainer(); + $handlers + ->add('name', function (ShortcodeInterface $s) { return $s->getName(); }) + ->add('content', function (ShortcodeInterface $s) { return $s->getContent(); }) + ->addAlias('c', 'content') + ->addAlias('n', 'name') + ->addAlias('d', 'c') + ->addAlias('e', 'c'); + $processor = new Processor(new RegexParser(), $handlers); + + /** @var $processor Processor */ + $processor = $processor->withRecursionDepth(0)->withMaxIterations(2); + static::assertSame('x a y', $processor->process('x [c]a[/c] y')); + static::assertSame('x abc y', $processor->process('x [c]a[d]b[/d]c[/c] y')); + static::assertSame('x ab[e]c[/e]de y', $processor->process('x [c]a[d]b[e]c[/e]d[/d]e[/c] y')); + + $processor = $processor->withMaxIterations(null); + static::assertSame('x abcde y', $processor->process('x [c]a[d]b[e]c[/e]d[/d]e[/c] y')); + } + + public function testExceptionOnInvalidRecursionDepth() + { + $processor = new Processor(new RegularParser(), new HandlerContainer()); + $this->willThrowException('InvalidArgumentException'); + $processor->withRecursionDepth(new \stdClass()); + } + + public function testExceptionOnInvalidMaxIterations() + { + $processor = new Processor(new RegularParser(), new HandlerContainer()); + $this->willThrowException('InvalidArgumentException'); + $processor->withMaxIterations(new \stdClass()); + } + + public function testExceptionOnInvalidAutoProcessFlag() + { + $processor = new Processor(new RegularParser(), new HandlerContainer()); + $this->willThrowException('InvalidArgumentException'); + $processor->withAutoProcessContent(new \stdClass()); + } + + public function testDefaultHandler() + { + $handlers = new HandlerContainer(); + $handlers->setDefault(function (ShortcodeInterface $s) { return $s->getName(); }); + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame('namerandom', $processor->process('[name][other][/name][random]')); + } + + public function testStripOuter() + { + $handlers = new HandlerContainer(); + $handlers->add('q', function(ShortcodeInterface $s) { + return $s->getContent(); + }); + $handlers->add('p', function(ProcessedShortcode $s) use(&$handlers) { + $parser = new RegexParser(); + $processor = new Processor($parser, $handlers); + $shortcodes = $parser->parse($s->getTextContent()); + + return array_reduce($shortcodes, function($result, ParsedShortcodeInterface $s) use($processor) { + return $result.$processor->process($s->getText()); + }, ''); + }); + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame('x ab y', $processor->process('x [p] [q]a[/q] [q]b[/q] [/p] y')); + static::assertSame('x ab c y', $processor->process('x [p] [q]a[/q] [q]b [q]c[/q][/q] [/p] y')); + } + + public function testOriginalContent() + { + $handlers = new HandlerContainer(); + $handlers->add('p', function(ProcessedShortcode $s) { return $s->getTextContent(); }); + $handlers->addAlias('q', 'p'); + $processor = new Processor(new RegexParser(), $handlers); + + static::assertSame('x [q]a[/q] [q]b[/q] y', $processor->process('x [p] [q]a[/q] [q]b[/q] [/p] y')); + } + + public function testMultipleParent() + { + $parents = 0; + $handlers = new HandlerContainer(); + $handlers->add('p', function(ProcessedShortcode $s) use(&$parents) { $parents += $s->getParent() ? 1 : 0; }); + $handlers->addAlias('q', 'p'); + $processor = new Processor(new RegexParser(), $handlers); + $processor->process('x [p] [q]a[/q] [q]b[/q] [q]c[/q] [/p] y'); + + static::assertSame(3, $parents); + } + + public function testPreventInfiniteLoop() + { + $handlers = new HandlerContainer(); + $handlers + ->add('self', function () { return '[self]'; }) + ->add('other', function () { return '[self]'; }) + ->add('random', function () { return '[other]'; }); + $processor = new Processor(new RegexParser(), $handlers); + $processor->withMaxIterations(null); + + static::assertSame('[self]', $processor->process('[self]')); + static::assertSame('[self]', $processor->process('[other]')); + static::assertSame('[other]', $processor->process('[random]')); + } + + public function testValidProcessAfterHandlerRemoval() + { + $handlers = new HandlerContainer(); + $handlers->add('name', function(ShortcodeInterface $s) { return $s->getName(); }); + $handlers->addAlias('n', 'name'); + $processor = new Processor(new RegexParser(), $handlers); + static::assertSame('n', $processor->process('[n]')); + static::assertSame('name', $processor->process('[name]')); + $handlers->remove('name'); + static::assertSame('n', $processor->process('[n]')); + static::assertSame('[name]', $processor->process('[name]')); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/SerializerTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/SerializerTest.php new file mode 100644 index 0000000..a25006e --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/SerializerTest.php @@ -0,0 +1,124 @@ + + */ +final class SerializerTest extends AbstractTestCase +{ + /** + * @dataProvider provideShortcodes + */ + public function testSerializer(SerializerInterface $serializer, ShortcodeInterface $test) + { + $result = $serializer->serialize($test); + $tested = $serializer->unserialize($result); + + static::assertSame($test->getName(), $tested->getName(), 'name: '.$result); + static::assertSame($test->getParameters(), $tested->getParameters(), 'parameters: '.$result); + static::assertSame($test->getContent(), $tested->getContent(), 'content: '.$result); + static::assertSame($test->getBbCode(), $tested->getBbCode(), 'bbCode: '.$result); + } + + public function provideShortcodes() + { + $shortcodes = array( + new Shortcode('x', array(), null), + new Shortcode('x', array('arg' => 'val'), null), + new Shortcode('x', array('arg' => null), null), + new Shortcode('x', array('arg' => ''), null), + new Shortcode('x', array('arg' => 'val'), 'cnt'), + new ParsedShortcode(new Shortcode('self-closed', array(), null), '[self-closed /]', 0), + new Shortcode('self-closed', array(), null, 'bb code'."\n".' value'), + ); + + $serializers = array( + new TextSerializer(), + new JsonSerializer(), + new XmlSerializer(), + new YamlSerializer(), + ); + + $tests = array(); + foreach($shortcodes as $shortcode) { + foreach($serializers as $serializer) { + $tests[] = array($serializer, $shortcode); + } + } + + return $tests; + } + + /** + * @dataProvider provideUnserialized + */ + public function testUnserialize(SerializerInterface $serializer, ShortcodeInterface $test, $text) + { + $tested = $serializer->unserialize($text); + + static::assertSame($test->getName(), $tested->getName(), 'name: '.$text); + static::assertSame($test->getParameters(), $tested->getParameters(), 'parameters: '.$text); + static::assertSame($test->getContent(), $tested->getContent(), 'content: '.$text); + static::assertSame($test->getBbCode(), $tested->getBbCode(), 'bbCode: '.$text); + } + + public function provideUnserialized() + { + return array( + array(new JsonSerializer(), new Shortcode('x', array(), null), '{"name":"x"}'), + array(new JsonSerializer(), new Shortcode('x', array('arg' => 'val'), null), '{"name":"x","parameters":{"arg":"val"}}'), + array(new JsonSerializer(), new Shortcode('x', array(), 'cnt'), '{"name":"x","content":"cnt"}'), + array(new YamlSerializer(), new Shortcode('x', array(), null), 'name: x'), + array(new YamlSerializer(), new Shortcode('x', array('arg' => 'val'), null), 'name: x'."\n".'parameters:'."\n".' arg: val'), + array(new YamlSerializer(), new Shortcode('x', array(), 'cnt'), 'name: x'."\n".'content: cnt'), + array(new XmlSerializer(), new Shortcode('x', array(), null), ''), + array(new XmlSerializer(), new Shortcode('x', array('arg' => 'val'), null), 'val'), + array(new XmlSerializer(), new Shortcode('x', array(), 'cnt'), 'cnt'), + ); + } + + /** + * @dataProvider provideExceptions + */ + public function testSerializerExceptions(SerializerInterface $serializer, $value, $exceptionClass) + { + $this->willThrowException($exceptionClass); + $serializer->unserialize($value); + } + + public function provideExceptions() + { + $xml = new XmlSerializer(); + $yaml = new YamlSerializer(); + $text = new TextSerializer(); + $json = new JsonSerializer(); + + return array( + array($text, '[sc /] c [xx]', 'InvalidArgumentException'), + array($text, '[/sc]', 'InvalidArgumentException'), + array($json, '{}', 'InvalidArgumentException'), + array($json, '', 'InvalidArgumentException'), + array($json, '{"name":"x","parameters":null}', 'InvalidArgumentException'), + array($json, '{"name":"x","parameters":{"key":[]}}', 'InvalidArgumentException'), + array($yaml, 'shortcode: ', 'InvalidArgumentException'), + array($yaml, '', 'InvalidArgumentException'), + array($yaml, 'name: x'."\n".'parameters: string', 'InvalidArgumentException'), + array($xml, '', 'InvalidArgumentException'), + array($xml, 'sss', 'InvalidArgumentException'), + array($xml, 'xxsss', 'InvalidArgumentException'), + array($xml, 'xxsss', 'InvalidArgumentException'), + array($xml, 'xxsss', 'InvalidArgumentException'), + array($xml, '', 'InvalidArgumentException'), + array($xml, '', 'InvalidArgumentException'), + ); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ShortcodeTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ShortcodeTest.php new file mode 100644 index 0000000..05f1b50 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/ShortcodeTest.php @@ -0,0 +1,137 @@ + + */ +final class ShortcodeTest extends AbstractTestCase +{ + /** + * @dataProvider provideShortcodes + */ + public function testShortcode($expected, $name, array $args, $content) + { + $s = new Shortcode($name, $args, $content); + $textSerializer = new TextSerializer(); + + static::assertSame($name, $s->getName()); + static::assertSame($args, $s->getParameters()); + static::assertSame($content, $s->getContent()); + static::assertSame($expected, $textSerializer->serialize($s)); + static::assertSame('arg', $s->getParameterAt(0)); + static::assertTrue($s->hasParameters()); + } + + public function provideShortcodes() + { + return array( + array('[x arg=val /]', 'x', array('arg' => 'val'), null), + array('[x arg=val][/x]', 'x', array('arg' => 'val'), ''), + array('[x arg=val]inner[/x]', 'x', array('arg' => 'val'), 'inner'), + array('[x arg="val val"]inner[/x]', 'x', array('arg' => 'val val'), 'inner'), + ); + } + + public function testObject() + { + $shortcode = new Shortcode('random', array('arg' => 'value', 'none' => null), 'something'); + + static::assertTrue($shortcode->hasParameter('arg')); + static::assertFalse($shortcode->hasParameter('invalid')); + static::assertNull($shortcode->getParameter('none')); + static::assertSame('value', $shortcode->getParameter('arg')); + static::assertSame('', $shortcode->getParameter('invalid', '')); + static::assertSame(42, $shortcode->getParameter('invalid', 42)); + + static::assertNotSame($shortcode, $shortcode->withContent('x')); + } + + public function testProcessedShortcode() + { + $processor = new Processor(new RegexParser(), new HandlerContainer()); + + $context = new ProcessorContext(); + $context->shortcode = new Shortcode('code', array('arg' => 'val'), 'content'); + $context->processor = $processor; + $context->position = 20; + $context->namePosition = array('code' => 10); + $context->text = ' [code] '; + $context->shortcodeText = '[code]'; + $context->offset = 1; + $context->iterationNumber = 1; + $context->recursionLevel = 0; + $context->parent = null; + + $processed = ProcessedShortcode::createFromContext($context); + + static::assertSame('code', $processed->getName()); + static::assertSame(array('arg' => 'val'), $processed->getParameters()); + static::assertSame('content', $processed->getContent()); + + static::assertSame(20, $processed->getPosition()); + static::assertSame(10, $processed->getNamePosition()); + static::assertSame(' [code] ', $processed->getText()); + static::assertSame(1, $processed->getOffset()); + static::assertSame('[code]', $processed->getShortcodeText()); + static::assertSame(1, $processed->getIterationNumber()); + static::assertSame(0, $processed->getRecursionLevel()); + static::assertSame(null, $processed->getParent()); + static::assertSame($processor, $processed->getProcessor()); + } + + public function testProcessedShortcodeParents() + { + $context = new ProcessorContext(); + $context->shortcode = new Shortcode('p1', array(), null); + $context->parent = null; + $context->namePosition = array('p1' => 0, 'p2' => 0, 'p3' => 0); + $p1 = ProcessedShortcode::createFromContext($context); + $context->shortcode = new Shortcode('p2', array(), null); + $context->parent = $p1; + $p2 = ProcessedShortcode::createFromContext($context); + $context->shortcode = new Shortcode('p3', array(), null); + $context->parent = $p2; + $p3 = ProcessedShortcode::createFromContext($context); + + static::assertSame('p3', $p3->getName()); + static::assertSame('p2', $p3->getParent()->getName()); + static::assertSame('p1', $p3->getParent()->getParent()->getName()); + static::assertFalse($p1->hasAncestor('p3')); + static::assertFalse($p1->hasAncestor('p1')); + static::assertTrue($p2->hasAncestor('p1')); + static::assertFalse($p2->hasAncestor('p3')); + static::assertTrue($p3->hasAncestor('p1')); + static::assertTrue($p3->hasAncestor('p2')); + static::assertFalse($p3->hasAncestor('p4')); + } + + public function testParsedShortcode() + { + $shortcode = new ParsedShortcode(new Shortcode('name', array('arg' => 'val'), 'content'), 'text', 12); + + static::assertSame('name', $shortcode->getName()); + static::assertSame(array('arg' => 'val'), $shortcode->getParameters()); + static::assertSame('content', $shortcode->getContent()); + static::assertSame('text', $shortcode->getText()); + static::assertSame(12, $shortcode->getOffset()); + static::assertTrue($shortcode->hasContent()); + + static::assertFalse($shortcode->withContent(null)->hasContent()); + static::assertSame('another', $shortcode->withContent('another')->getContent()); + } + + public function testShortcodeEmptyNameException() + { + $this->willThrowException('InvalidArgumentException'); + new Shortcode('', array(), null); + } +} diff --git a/plugins/shortcode-core/vendor/thunderer/shortcode/tests/SyntaxTest.php b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/SyntaxTest.php new file mode 100644 index 0000000..9228d46 --- /dev/null +++ b/plugins/shortcode-core/vendor/thunderer/shortcode/tests/SyntaxTest.php @@ -0,0 +1,54 @@ + + */ +final class SyntaxTest extends AbstractTestCase +{ + /** + * @dataProvider provideSyntaxes + */ + public function testSyntax(SyntaxInterface $syntax, $open, $close, $slash, $parameter, $value) + { + static::assertSame($open, $syntax->getOpeningTag()); + static::assertSame($close, $syntax->getClosingTag()); + static::assertSame($slash, $syntax->getClosingTagMarker()); + static::assertSame($parameter, $syntax->getParameterValueSeparator()); + static::assertSame($value, $syntax->getParameterValueDelimiter()); + } + + public function provideSyntaxes() + { + return array( + array(new Syntax(), '[', ']', '/', '=', '"'), + array(new Syntax('[[', ']]', '//', '==', '""'), '[[', ']]', '//', '==', '""'), + array(new CommonSyntax(), '[', ']', '/', '=', '"'), + ); + } + + /** + * Note: do not merge this test with data provider above, code coverage + * does not understand this and marks builder class as untested. + */ + public function testBuilder() + { + $builder = new SyntaxBuilder(); + $this->testSyntax($builder->getSyntax(), '[', ']', '/', '=', '"'); + + $builder = new SyntaxBuilder(); + $doubleBuiltSyntax = $builder + ->setOpeningTag('[[') + ->setClosingTag(']]') + ->setClosingTagMarker('//') + ->setParameterValueSeparator('==') + ->setParameterValueDelimiter('""') + ->getSyntax(); + $this->testSyntax($doubleBuiltSyntax, '[[', ']]', '//', '==', '""'); + } +}