Facebook for WooCommerce - Version 2.6.25

Version Description

  • 2022-10-04 =
  • Add - New filter (wc_facebook_product_group_default_variation) to allow customizing a product group's default variation.
  • Update - Remove Skyverge's sake as a dependency from the extension build process.
Download this release

Release Info

Developer automattic
Plugin Icon Facebook for WooCommerce
Version 2.6.25
Comparing to
See all releases

Code changes from version 2.6.24 to 2.6.25

Files changed (124) hide show
  1. CODE_OF_CONDUCT.md +0 -5
  2. README.md +0 -38
  3. changelog.txt +4 -0
  4. data/.gitkeep +0 -0
  5. facebook-commerce.php +49 -32
  6. facebook-for-woocommerce.php +2 -2
  7. i18n/languages/facebook-for-woocommerce.pot +379 -556
  8. includes/Debug/README.md +0 -24
  9. readme.txt +5 -1
  10. vendor/autoload.php +1 -1
  11. vendor/composer/InstalledVersions.php +7 -7
  12. vendor/composer/autoload_classmap.php +200 -0
  13. vendor/composer/autoload_real.php +4 -4
  14. vendor/composer/autoload_static.php +204 -4
  15. vendor/composer/installed.php +10 -10
  16. vendor/composer/installers/.github/workflows/continuous-integration.yml +76 -0
  17. vendor/composer/installers/.github/workflows/lint.yml +30 -0
  18. vendor/composer/installers/.github/workflows/phpstan.yml +51 -0
  19. vendor/composer/installers/composer.json +122 -0
  20. vendor/skyverge/wc-plugin-framework/.dist.env +17 -0
  21. vendor/skyverge/wc-plugin-framework/.editorconfig +21 -0
  22. vendor/skyverge/wc-plugin-framework/.gitignore +26 -0
  23. vendor/skyverge/wc-plugin-framework/.travis.yml +102 -0
  24. vendor/skyverge/wc-plugin-framework/.tx/config +9 -0
  25. vendor/skyverge/wc-plugin-framework/Gruntfile.js +82 -0
  26. vendor/skyverge/wc-plugin-framework/codeception.dist.yml +22 -0
  27. vendor/skyverge/wc-plugin-framework/codeception.local.yml +12 -0
  28. vendor/skyverge/wc-plugin-framework/composer.json +8 -0
  29. vendor/skyverge/wc-plugin-framework/composer.lock +7236 -0
  30. vendor/skyverge/wc-plugin-framework/exclude-patterns.txt +29 -0
  31. vendor/skyverge/wc-plugin-framework/grunt/configs/coffee.js +26 -0
  32. vendor/skyverge/wc-plugin-framework/grunt/configs/makepot.js +33 -0
  33. vendor/skyverge/wc-plugin-framework/grunt/configs/potomo.js +25 -0
  34. vendor/skyverge/wc-plugin-framework/grunt/configs/sass.js +41 -0
  35. vendor/skyverge/wc-plugin-framework/grunt/configs/shell.js +28 -0
  36. vendor/skyverge/wc-plugin-framework/grunt/tasks/parsepo.js +31 -0
  37. vendor/skyverge/wc-plugin-framework/package-lock.json +8749 -0
  38. vendor/skyverge/wc-plugin-framework/package.json +43 -0
  39. vendor/skyverge/wc-plugin-framework/readme.md +5 -0
  40. vendor/skyverge/wc-plugin-framework/tests/README.md +15 -0
  41. vendor/skyverge/wc-plugin-framework/tests/_archive/.coveralls.yml +3 -0
  42. vendor/skyverge/wc-plugin-framework/tests/_archive/.travis.yml +13 -0
  43. vendor/skyverge/wc-plugin-framework/tests/_archive/README.md +66 -0
  44. vendor/skyverge/wc-plugin-framework/tests/_archive/bootstrap.php +132 -0
  45. vendor/skyverge/wc-plugin-framework/tests/_archive/integration/plugin.php +0 -0
  46. vendor/skyverge/wc-plugin-framework/tests/_archive/integration/test-case.php +8 -0
  47. vendor/skyverge/wc-plugin-framework/tests/_archive/phpunit.travis.xml +30 -0
  48. vendor/skyverge/wc-plugin-framework/tests/_archive/phpunit.xml +31 -0
  49. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/Addresses/Address.php +204 -0
  50. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/Addresses/Customer_Address.php +182 -0
  51. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/helper.php +900 -0
  52. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-api-response-message-helper.php +83 -0
  53. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-helper.php +205 -0
  54. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-payment-token.php +347 -0
  55. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway/apple-pay-api-request.php +67 -0
  56. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway/apple-pay-api-response.php +113 -0
  57. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway/apple-pay-payment-response.php +266 -0
  58. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/plugin.php +143 -0
  59. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/test-case.php +19 -0
  60. vendor/skyverge/wc-plugin-framework/tests/_data/.gitkeep +0 -0
  61. vendor/skyverge/wc-plugin-framework/tests/_output/.gitignore +2 -0
  62. vendor/skyverge/wc-plugin-framework/tests/_support/AcceptanceTester.php +26 -0
  63. vendor/skyverge/wc-plugin-framework/tests/_support/FunctionalTester.php +26 -0
  64. vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Acceptance.php +10 -0
  65. vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Functional.php +10 -0
  66. vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Integration.php +10 -0
  67. vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Unit.php +10 -0
  68. vendor/skyverge/wc-plugin-framework/tests/_support/IntegrationTester.php +26 -0
  69. vendor/skyverge/wc-plugin-framework/tests/_support/UnitTester.php +26 -0
  70. vendor/skyverge/wc-plugin-framework/tests/_support/_generated/.gitignore +2 -0
  71. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/gateway-test-plugin.php +375 -0
  72. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/API.php +46 -0
  73. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/Functions.php +15 -0
  74. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/Gateway.php +39 -0
  75. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/Plugin.php +95 -0
  76. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/autoload.php +7 -0
  77. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/ClassLoader.php +415 -0
  78. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/LICENSE +21 -0
  79. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_classmap.php +9 -0
  80. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_namespaces.php +9 -0
  81. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_psr4.php +9 -0
  82. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_real.php +52 -0
  83. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_static.php +15 -0
  84. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/installed.json +1 -0
  85. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/skyverge/wc-plugin-framework/.gitkeep +0 -0
  86. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/API.php +98 -0
  87. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/Functions.php +15 -0
  88. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/Gateway.php +50 -0
  89. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/Plugin.php +96 -0
  90. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/test-plugin.php +375 -0
  91. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/autoload.php +7 -0
  92. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/ClassLoader.php +415 -0
  93. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/LICENSE +21 -0
  94. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_classmap.php +9 -0
  95. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_namespaces.php +9 -0
  96. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_psr4.php +9 -0
  97. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_real.php +52 -0
  98. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_static.php +15 -0
  99. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/installed.json +1 -0
  100. vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/skyverge/wc-plugin-framework/.gitkeep +0 -0
  101. vendor/skyverge/wc-plugin-framework/tests/acceptance.suite.yml +30 -0
  102. vendor/skyverge/wc-plugin-framework/tests/acceptance/PluginActionLinksCest.php +35 -0
  103. vendor/skyverge/wc-plugin-framework/tests/functional.suite.yml +36 -0
  104. vendor/skyverge/wc-plugin-framework/tests/integration.suite.yml +22 -0
  105. vendor/skyverge/wc-plugin-framework/tests/integration/DependenciesTest.php +69 -0
  106. vendor/skyverge/wc-plugin-framework/tests/integration/HelperTest.php +45 -0
  107. vendor/skyverge/wc-plugin-framework/tests/integration/PluginTest.php +214 -0
  108. vendor/skyverge/wc-plugin-framework/tests/integration/REST_API/Controllers/SettingsTest.php +400 -0
  109. vendor/skyverge/wc-plugin-framework/tests/integration/REST_API/RESTAPITest.php +76 -0
  110. vendor/skyverge/wc-plugin-framework/tests/integration/SV_WC_Payment_Gateway_Helper_Test.php +40 -0
  111. vendor/skyverge/wc-plugin-framework/tests/integration/Settings_API/AbstractSettingsTest.php +626 -0
  112. vendor/skyverge/wc-plugin-framework/tests/integration/Settings_API/SettingTest.php +238 -0
  113. vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/GatewayPluginTest.php +60 -0
  114. vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/MyPaymentMethodsTest.php +141 -0
  115. vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/PaymentFormTest.php +115 -0
  116. vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Token_Test.php +604 -0
  117. vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Tokens_Handler_Test.php +408 -0
  118. vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/apple-pay/ApplePayFrontendTest.php +151 -0
  119. vendor/skyverge/wc-plugin-framework/tests/unit.suite.yml +9 -0
  120. vendor/skyverge/wc-plugin-framework/tests/unit/CountryHelperTest.php +52 -0
  121. vendor/skyverge/wc-plugin-framework/tests/unit/Settings_API/ControlTest.php +300 -0
  122. vendor/skyverge/wc-plugin-framework/tests/unit/Settings_API/SettingTest.php +338 -0
  123. vendor/skyverge/wc-plugin-framework/tool.tartufo +8 -0
  124. vendor/skyverge/wc-plugin-framework/woocommerce-framework-plugin-loader-sample.php +162 -0
CODE_OF_CONDUCT.md DELETED
@@ -1,5 +0,0 @@
1
- # Code of Conduct
2
-
3
- Facebook has adopted a Code of Conduct that we expect project participants to adhere to.
4
- Please read the [full text](https://code.fb.com/codeofconduct/)
5
- so that you can understand what actions will and will not be tolerated.
 
 
 
 
 
README.md DELETED
@@ -1,38 +0,0 @@
1
- # Facebook for WooCommerce
2
-
3
- [![PHP Coding Standards](https://github.com/woocommerce/facebook-for-woocommerce/actions/workflows/php-coding-standards.yml/badge.svg)](https://github.com/woocommerce/facebook-for-woocommerce/actions/workflows/php-coding-standards.yml)
4
-
5
- This is the development repository for the Facebook for WooCommerce plugin.
6
-
7
- - [WooCommerce.com product page](https://woocommerce.com/products/facebook)
8
- - [WordPress.org plugin page](https://wordpress.org/plugins/facebook-for-woocommerce/)
9
- - [User documentation](https://docs.woocommerce.com/document/facebook-for-woocommerce)
10
-
11
- ## Support
12
- The best place to get support is the [WordPress.org Facebook for WooCommerce forum](https://wordpress.org/support/plugin/facebook-for-woocommerce/).
13
-
14
- If you have a WooCommerce.com account, you can [start a chat or open a ticket on WooCommerce.com](https://woocommerce.com/my-account/create-a-ticket/).
15
-
16
- ### Logging
17
- The plugin offers logging that can help debug various problems. You can enable debug mode in the main plugin settings panel under the `Enable debug mode` section.
18
- By default plugin omits headers in the requests to make the logs more readable. If debugging with headers is necessary you can enable the headers in the logs by setting `wc_facebook_request_headers_in_debug_log` option to true.
19
- ## Development
20
- ### Developing
21
- - Clone this repository into the `wp-content/plugins/` folder your WooCommerce development environment.
22
- - Install dependencies:
23
- - `npm install`
24
- - `composer install`
25
- - Build assets:
26
- - `npm start` to build a development version
27
- - Linting:
28
- - `npm run lint:php` to run PHPCS linter on all PHP files
29
-
30
- #### Production build
31
- This plugin uses a custom build tool called [`sake`](https://github.com/skyverge/sake).
32
-
33
- If you have `sake` set up on your system, these commands can be used to generate a production build.
34
-
35
- - `npm run build` builds and zips to `/build/facebook-for-woocommerce.{version}.zip`.
36
-
37
- ### Releasing
38
- Refer to the [wiki for details of how to build and release the plugin](https://github.com/woocommerce/facebook-for-woocommerce/wiki/Build-&-Release).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
changelog.txt CHANGED
@@ -1,5 +1,9 @@
1
  *** Facebook for WooCommerce Changelog ***
2
 
 
 
 
 
3
  = 2.6.24 - 2022-09-27 =
4
  * Fix - Adds helpful admin notices for correct user roles.
5
  * Fix - Track purchase event flag in session variable instead post meta table.
1
  *** Facebook for WooCommerce Changelog ***
2
 
3
+ = 2.6.25 - 2022-10-04 =
4
+ * Add - New filter (wc_facebook_product_group_default_variation) to allow customizing a product group's default variation.
5
+ * Update - Remove Skyverge's sake as a dependency from the extension build process.
6
+
7
  = 2.6.24 - 2022-09-27 =
8
  * Fix - Adds helpful admin notices for correct user roles.
9
  * Fix - Track purchase event flag in session variable instead post meta table.
data/.gitkeep ADDED
File without changes
facebook-commerce.php CHANGED
@@ -1525,52 +1525,69 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1525
  private function get_product_group_default_variation( $woo_product, $fb_product_group_id ) {
1526
 
1527
  $default_attributes = $woo_product->woo_product->get_default_attributes( 'edit' );
1528
-
1529
- if ( empty( $default_attributes ) ) {
1530
- return null;
1531
- }
1532
-
1533
  $default_variation = null;
 
1534
  // Fetch variations that exist in the catalog.
1535
  $existing_catalog_variations = $this->find_variation_product_item_ids( $fb_product_group_id );
1536
  $existing_catalog_variations_retailer_ids = array_keys( $existing_catalog_variations );
 
1537
  // All woocommerce variations for the product.
1538
  $product_variations = $woo_product->woo_product->get_available_variations();
 
 
1539
 
1540
- $best_match_count = 0;
1541
- foreach ( $product_variations as $variation ) {
1542
 
1543
- $fb_retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id(
1544
- wc_get_product(
1545
- $variation['variation_id']
1546
- )
1547
- );
1548
 
1549
- // Check if currently processed variation exist in the catalog.
1550
- if ( ! in_array( $fb_retailer_id, $existing_catalog_variations_retailer_ids ) ) {
1551
- continue;
1552
- }
1553
 
1554
- $variation_attributes = $this->get_product_variation_attributes( $variation );
1555
- $variation_attributes_count = count( $variation_attributes );
1556
- $matching_attributes_count = count( array_intersect_assoc( $default_attributes, $variation_attributes ) );
1557
-
1558
- // Check how much current variation matches the selected default attributes.
1559
- if ( $matching_attributes_count === $variation_attributes_count ) {
1560
- // We found a perfect match;
1561
- $default_variation = $existing_catalog_variations[ $fb_retailer_id ];
1562
- break;
1563
- } else if ( $matching_attributes_count > $best_match_count ) {
1564
- // We found a better match.
1565
- $default_variation = $existing_catalog_variations[ $fb_retailer_id ];
1566
- }
1567
 
1568
- }
 
 
 
 
 
 
 
 
1569
 
1570
- return $default_variation;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1571
  }
1572
 
1573
-
1574
  /**
1575
  * Parses given product variation for it's attributes
1576
  *
1525
  private function get_product_group_default_variation( $woo_product, $fb_product_group_id ) {
1526
 
1527
  $default_attributes = $woo_product->woo_product->get_default_attributes( 'edit' );
 
 
 
 
 
1528
  $default_variation = null;
1529
+
1530
  // Fetch variations that exist in the catalog.
1531
  $existing_catalog_variations = $this->find_variation_product_item_ids( $fb_product_group_id );
1532
  $existing_catalog_variations_retailer_ids = array_keys( $existing_catalog_variations );
1533
+
1534
  // All woocommerce variations for the product.
1535
  $product_variations = $woo_product->woo_product->get_available_variations();
1536
+
1537
+ if ( ! empty( $default_attributes ) ) {
1538
 
1539
+ $best_match_count = 0;
1540
+ foreach ( $product_variations as $variation ) {
1541
 
1542
+ $fb_retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id(
1543
+ wc_get_product(
1544
+ $variation['variation_id']
1545
+ )
1546
+ );
1547
 
1548
+ // Check if currently processed variation exist in the catalog.
1549
+ if ( ! in_array( $fb_retailer_id, $existing_catalog_variations_retailer_ids ) ) {
1550
+ continue;
1551
+ }
1552
 
1553
+ $variation_attributes = $this->get_product_variation_attributes( $variation );
1554
+ $variation_attributes_count = count( $variation_attributes );
1555
+ $matching_attributes_count = count( array_intersect_assoc( $default_attributes, $variation_attributes ) );
 
 
 
 
 
 
 
 
 
 
1556
 
1557
+ // Check how much current variation matches the selected default attributes.
1558
+ if ( $matching_attributes_count === $variation_attributes_count ) {
1559
+ // We found a perfect match;
1560
+ $default_variation = $existing_catalog_variations[ $fb_retailer_id ];
1561
+ break;
1562
+ } else if ( $matching_attributes_count > $best_match_count ) {
1563
+ // We found a better match.
1564
+ $default_variation = $existing_catalog_variations[ $fb_retailer_id ];
1565
+ }
1566
 
1567
+ }
1568
+ }
1569
+
1570
+ /**
1571
+ * Filter product group default variation.
1572
+ * This can be used to customize the choice of a default variation (e.g. choose one with the lowest price).
1573
+ *
1574
+ * @since 2.6.25
1575
+ * @param integer|null Facebook Catalog variation id.
1576
+ * @param \WC_Facebook_Product WooCommerce product.
1577
+ * @param string product group ID.
1578
+ * @param array List of available WC_Product variations.
1579
+ * @param array List of Product Item IDs indexed by the variation's retailer ID.
1580
+ */
1581
+ return apply_filters(
1582
+ 'wc_facebook_product_group_default_variation',
1583
+ $default_variation,
1584
+ $woo_product,
1585
+ $fb_product_group_id,
1586
+ $product_variations,
1587
+ $existing_catalog_variations
1588
+ );
1589
  }
1590
 
 
1591
  /**
1592
  * Parses given product variation for it's attributes
1593
  *
facebook-for-woocommerce.php CHANGED
@@ -11,7 +11,7 @@
11
  * Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook.
12
  * Author: Facebook
13
  * Author URI: https://www.facebook.com/
14
- * Version: 2.6.24
15
  * Text Domain: facebook-for-woocommerce
16
  * Tested up to: 6.0
17
  * WC requires at least: 3.5.0
@@ -33,7 +33,7 @@ class WC_Facebook_Loader {
33
  /**
34
  * @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
35
  */
36
- const PLUGIN_VERSION = '2.6.24'; // WRCS: DEFINED_VERSION.
37
 
38
  // Minimum PHP version required by this plugin.
39
  const MINIMUM_PHP_VERSION = '7.0.0';
11
  * Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook.
12
  * Author: Facebook
13
  * Author URI: https://www.facebook.com/
14
+ * Version: 2.6.25
15
  * Text Domain: facebook-for-woocommerce
16
  * Tested up to: 6.0
17
  * WC requires at least: 3.5.0
33
  /**
34
  * @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
35
  */
36
+ const PLUGIN_VERSION = '2.6.25'; // WRCS: DEFINED_VERSION.
37
 
38
  // Minimum PHP version required by this plugin.
39
  const MINIMUM_PHP_VERSION = '7.0.0';
i18n/languages/facebook-for-woocommerce.pot CHANGED
@@ -1,63 +1,74 @@
1
  # Copyright (C) 2022 Facebook
2
- # This file is distributed under the same license as the Facebook for WooCommerce package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Facebook for WooCommerce 2.6.24\n"
6
- "Report-Msgid-Bugs-To: "
7
- "https://woocommerce.com/my-account/marketplace-ticket-form/\n"
8
- "POT-Creation-Date: 2022-09-27 12:46:37+00:00\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=utf-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2022-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
 
16
  #: class-wc-facebookcommerce.php:271
17
- #. translators: Placeholders %1$s - opening strong HTML tag, %2$s - closing
18
- #. strong HTML tag, %3$s - opening link HTML tag, %4$s - closing link HTML tag
19
- msgid ""
20
- "%1$sHeads up!%2$s You're ready to migrate to a more secure, reliable "
21
- "Facebook for WooCommerce connection. Please %3$sclick here%4$s to reconnect!"
22
  msgstr ""
23
 
 
24
  #: class-wc-facebookcommerce.php:292
25
- #. translators: Placeholders %1$s - opening link HTML tag, %2$s - closing link
26
- #. HTML tag
27
- msgid ""
28
- "For your convenience, the Facebook for WooCommerce settings are now located "
29
- "under %1$sWooCommerce > Facebook%2$s."
30
  msgstr ""
31
 
 
32
  #: class-wc-facebookcommerce.php:312
33
- #. translators: Placeholders %1$s - opening strong HTML tag, %2$s - closing
34
- #. strong HTML tag, %3$s - opening link HTML tag, %4$s - closing link HTML tag
35
- msgid ""
36
- "%1$sFacebook for WooCommerce is almost ready.%2$s To complete your "
37
- "configuration, %3$scomplete the setup steps%4$s."
38
  msgstr ""
39
 
 
40
  #: class-wc-facebookcommerce.php:344
41
- #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
42
- #. <a> tag, %4$s - </a> tag
43
- msgid ""
44
- "%1$sHeads up!%2$s If you've customized your Facebook Messenger color or "
45
- "greeting settings, please update those settings again from the %3$sManage "
46
- "Connection%4$s area."
47
  msgstr ""
48
 
 
49
  #: class-wc-facebookcommerce.php:367
50
- #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
51
- #. <a> tag, %4$s - </a> tag
52
- msgid ""
53
- "%1$sHeads up!%2$s Your connection to Facebook is no longer valid. Please "
54
- "%3$sclick here%4$s to securely reconnect your account and continue syncing "
55
- "products."
56
  msgstr ""
57
 
 
58
  #: class-wc-facebookcommerce.php:397
59
- #. translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing
60
- #. </a> HTML link tag
61
  msgid "Heads up! The Facebook menu is now located under the %1$sMarketing%2$s menu."
62
  msgstr ""
63
 
@@ -69,33 +80,33 @@ msgstr ""
69
  msgid "FB Product Set"
70
  msgstr ""
71
 
72
- #: class-wc-facebookcommerce.php:488
73
  #. translators: Edit item label
 
74
  msgid "Edit %s"
75
  msgstr ""
76
 
77
- #: class-wc-facebookcommerce.php:490
78
  #. translators: Add new label
 
79
  msgid "Add new %s"
80
  msgstr ""
81
 
82
- #: class-wc-facebookcommerce.php:493
83
  #. translators: No items found text
 
84
  msgid "No %s found."
85
  msgstr ""
86
 
87
- #: class-wc-facebookcommerce.php:495
88
  #. translators: Search label
 
89
  msgid "Search %s."
90
  msgstr ""
91
 
92
- #: class-wc-facebookcommerce.php:497
93
  #. translators: Text label
 
94
  msgid "Separate %s with commas"
95
  msgstr ""
96
 
97
- #: class-wc-facebookcommerce.php:499
98
  #. translators: Text label
 
99
  msgid "Choose from the most used %s"
100
  msgstr ""
101
 
@@ -103,10 +114,6 @@ msgstr ""
103
  msgid "Cannot create the API instance because the access token is missing."
104
  msgstr ""
105
 
106
- #. Plugin Name of the plugin/theme
107
- msgid "Facebook for WooCommerce"
108
- msgstr ""
109
-
110
  #: facebook-commerce.php:233
111
  msgid "Facebook Commerce and Dynamic Ads (Pixel) Extension"
112
  msgstr ""
@@ -115,278 +122,269 @@ msgstr ""
115
  msgid "Nothing to update for product group for %1$s"
116
  msgstr ""
117
 
118
- #: facebook-commerce.php:1885
119
  #. translators: Placeholders %1$s - original error message from Facebook API
 
120
  msgid "There was an issue connecting to the Facebook API: %1$s"
121
  msgstr ""
122
 
123
- #: facebook-commerce.php:2210
124
  msgid "Your connection has expired."
125
  msgstr ""
126
 
127
- #: facebook-commerce.php:2210
128
- msgid ""
129
- "Please click Manage connection > Advanced Options > Update Token to refresh "
130
- "your connection to Facebook."
131
  msgstr ""
132
 
133
- #: facebook-commerce.php:2217
134
  #. translators: Placeholders %s - error message
 
135
  msgid "There was an error trying to sync the products to Facebook. %s"
136
  msgstr ""
137
 
138
- #: facebook-commerce.php:2240
139
  msgid "Product sync is disabled."
140
  msgstr ""
141
 
142
- #: facebook-commerce.php:2247
143
  msgid "The plugin is not configured or the Catalog ID is missing."
144
  msgstr ""
145
 
146
- #: facebook-commerce.php:2270
147
- msgid ""
148
- "A product sync is in progress. Please wait until the sync finishes before "
149
- "starting a new one."
150
  msgstr ""
151
 
152
- #: facebook-commerce.php:2282
153
- msgid ""
154
- "We've detected that your Facebook Product Catalog is no longer valid. This "
155
- "may happen if it was deleted, but could also be a temporary error. If the "
156
- "error persists, please click Manage connection > Advanced Options > Remove "
157
- "and setup the plugin again."
158
  msgstr ""
159
 
160
- #: facebook-commerce.php:2811
161
  msgid "Hi! We're here to answer any questions you may have."
162
  msgstr ""
163
 
164
- #: facebook-commerce.php:3201
165
  msgid "Facebook for WooCommerce error:"
166
  msgstr ""
167
 
168
- #: facebook-commerce.php:3283
169
- msgid ""
170
- "There was an error trying to retrieve information about the Facebook page: "
171
- "%s"
172
- msgstr ""
173
-
174
- #: facebook-commerce.php:3334
175
- msgid "Get started with Messenger Customer Chat"
176
- msgstr ""
177
-
178
- #: facebook-commerce.php:3335
179
- msgid "Get started with Instagram Shopping"
180
- msgstr ""
181
-
182
- #: facebook-commerce.php:3570
183
  #. translators: Placeholders %1$s - original error message from Facebook API
 
184
  msgid "There was an issue connecting to the Facebook API: %s"
185
  msgstr ""
186
 
 
187
  #: facebook-for-woocommerce.php:227
188
- #. translators: %1$s - plugin name, %2$s - minimum WordPress version required,
189
- #. %3$s - update WordPress link open, %4$s - update WordPress link close
190
- msgid ""
191
- "%1$s requires WordPress version %2$s or higher. Please %3$supdate WordPress "
192
- "&raquo;%4$s"
193
  msgstr ""
194
 
 
195
  #: facebook-for-woocommerce.php:253
196
- #. translators: %1$s - Plugin Name, %2$s - activate WooCommerce link open, %3$s
197
- #. - activate WooCommerce link close.
198
- msgid ""
199
- "%1$s requires WooCommerce to be activated. Please %2$sactivate "
200
- "WooCommerce%3$s."
201
  msgstr ""
202
 
 
203
  #: facebook-for-woocommerce.php:270
204
- #. translators: %1$s - Plugin Name, %2$s - install WooCommerce link open, %3$s
205
- #. - install WooCommerce link close.
206
- msgid ""
207
- "%1$s requires WooCommerce to be installed and activated. Please %2$sinstall "
208
- "WooCommerce%3$s."
209
  msgstr ""
210
 
 
211
  #: facebook-for-woocommerce.php:290
212
- #. translators: %1$s - Plugin Name, %2$s - minimum WooCommerce version, %3$s -
213
- #. update WooCommerce link open, %4$s - update WooCommerce link close, %5$s -
214
- #. download minimum WooCommerce link open, %6$s - download minimum WooCommerce
215
- #. link close.
216
- msgid ""
217
- "%1$s requires WooCommerce version %2$s or higher. Please %3$supdate "
218
- "WooCommerce%4$s to the latest version, or %5$sdownload the minimum required "
219
- "version &raquo;%6$s"
220
  msgstr ""
221
 
222
- #: includes/AJAX.php:82
223
- msgid "Invalid nonce."
224
  msgstr ""
225
 
226
- #: includes/AJAX.php:89
227
- msgid "Order ID is required."
228
  msgstr ""
229
 
230
- #: includes/AJAX.php:93
231
- msgid "Cancel reason is required."
232
  msgstr ""
233
 
234
- #: includes/AJAX.php:99
235
- msgid "A valid Order ID is required."
236
  msgstr ""
237
 
238
- #: includes/AJAX.php:182
239
- msgid "Order ID is required"
240
  msgstr ""
241
 
242
- #: includes/AJAX.php:186
243
- msgid "Tracking number is required"
244
  msgstr ""
245
 
246
- #: includes/AJAX.php:190
247
- msgid "Carrier code is required"
248
  msgstr ""
249
 
250
- #: includes/AJAX.php:196
251
- msgid "Order not found"
252
  msgstr ""
253
 
254
- #: includes/AJAX.php:220
255
- msgid "Full product sync disabled by filter."
 
256
  msgstr ""
257
 
258
- #: includes/AJAX.php:343 includes/AJAX.php:411
259
- msgid "Go to Settings"
 
260
  msgstr ""
261
 
262
- #: includes/AJAX.php:348 includes/AJAX.php:416 includes/AJAX.php:482
263
- #: includes/Admin/Product_Categories.php:119
264
- #: includes/Admin/Settings_Screens/Product_Sync.php:158 includes/Admin.php:421
265
- msgid "Cancel"
266
  msgstr ""
267
 
268
- #: includes/AJAX.php:357
269
- #. translators: Placeholder %s - <br/> tag
270
- msgid ""
271
- "This product belongs to a category or tag that is excluded from the "
272
- "Facebook catalog sync. It will not sync to Facebook. %sTo sync this product "
273
- "to Facebook, click Go to Settings and remove the category or tag exclusion "
274
- "or click Cancel and update the product's category / tag assignments."
275
  msgstr ""
276
 
277
- #: includes/AJAX.php:423
278
- msgid ""
279
- "One or more of the selected products belongs to a category or tag that is "
280
- "excluded from the Facebook catalog sync. To sync these products to "
281
- "Facebook, please remove the category or tag exclusion from the plugin "
282
- "settings."
283
  msgstr ""
284
 
285
- #: includes/AJAX.php:476
286
- msgid "Exclude Products"
 
287
  msgstr ""
288
 
289
- #: includes/AJAX.php:491
290
- #. translators: Placeholder %s - <br/> tags
291
- msgid ""
292
- "The categories and/or tags that you have selected to exclude from sync "
293
- "contain products that are currently synced to Facebook.%sTo exclude these "
294
- "products from the Facebook sync, click Exclude Products. To review the "
295
- "category / tag exclusion settings, click Cancel."
296
  msgstr ""
297
 
298
- #: includes/Admin/Abstract_Settings_Screen.php:73
299
- msgid "Save changes"
300
  msgstr ""
301
 
302
- #: includes/Admin/Enhanced_Catalog_Attribute_Fields.php:104
303
- msgid "Show advanced options"
304
  msgstr ""
305
 
306
- #: includes/Admin/Product_Categories.php:100
307
- #: includes/Admin/Settings_Screens/Product_Sync.php:121
308
- msgid ""
309
- "Products and categories that inherit this global setting (i.e. they do not "
310
- "have a specific Google product category set) will use the new default "
311
- "immediately. Are you sure you want to proceed?"
312
  msgstr ""
313
 
314
- #: includes/Admin/Product_Categories.php:123
315
- #: includes/Admin/Settings_Screens/Product_Sync.php:162
316
- msgid "Update default Google product category"
 
 
 
 
 
 
317
  msgstr ""
318
 
319
- #: includes/Admin/Product_Categories.php:164
320
- msgid ""
321
- "Facebook catalogs now support category specific fields, to make best use of "
322
- "them you need to select a category. WooCommerce uses the google taxonomy as "
323
- "it is the most widely accepted form of categorisation."
 
 
 
 
 
324
  msgstr ""
325
 
326
- #: includes/Admin/Product_Categories.php:215
327
- msgid ""
328
- "Choose a default Google product category for products in this category. "
329
- "Products need at least two category levels defined for tax to be correctly "
330
- "applied."
331
  msgstr ""
332
 
333
- #: includes/Admin/Product_Categories.php:233
334
- #: includes/Admin/Settings_Screens/Product_Sync.php:338
335
- msgid "Default Google product category"
336
  msgstr ""
337
 
338
- #: includes/Admin/Product_Categories.php:358
339
- msgid "Select default values for enhanced attributes within this category"
 
340
  msgstr ""
341
 
342
- #: includes/Admin/Product_Categories.php:376 includes/Admin/Products.php:119
343
- msgid "Category Specific Attributes"
 
344
  msgstr ""
345
 
346
- #: includes/Admin/Product_Sets.php:150
347
- msgid "WC Product Categories"
 
348
  msgstr ""
349
 
350
- #: includes/Admin/Product_Sets.php:182
351
- msgid "Map FB Product Set to WC Product Categories"
 
352
  msgstr ""
353
 
354
- #: includes/Admin/Product_Sync_Meta_Box.php:37
355
- msgid "Facebook Product Sync"
356
  msgstr ""
357
 
358
- #: includes/Admin/Product_Sync_Meta_Box.php:78
359
- msgid "Facebook ID:"
 
360
  msgstr ""
361
 
362
- #: includes/Admin/Product_Sync_Meta_Box.php:89
363
- msgid "Variant IDs:"
 
364
  msgstr ""
365
 
366
- #: includes/Admin/Product_Sync_Meta_Box.php:121
367
- msgid "Reset Facebook metadata"
 
 
 
368
  msgstr ""
369
 
370
- #: includes/Admin/Product_Sync_Meta_Box.php:126
371
- msgid "Delete product(s) on Facebook"
 
372
  msgstr ""
373
 
374
- #: includes/Admin/Product_Sync_Meta_Box.php:138
375
- msgid "This product is not yet synced to Facebook."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
  msgstr ""
377
 
378
  #: includes/Admin/Products.php:101
379
  msgid "Select values for enhanced attributes for this product"
380
  msgstr ""
381
 
 
 
 
 
 
382
  #: includes/Admin/Products.php:140
383
  msgid "Google product category"
384
  msgstr ""
385
 
386
  #: includes/Admin/Products.php:141
387
- msgid ""
388
- "Choose the Google product category and (optionally) sub-categories "
389
- "associated with this product."
390
  msgstr ""
391
 
392
  #: includes/Admin/Products.php:214
@@ -394,9 +392,7 @@ msgid "Sell on Instagram"
394
  msgstr ""
395
 
396
  #: includes/Admin/Products.php:216
397
- msgid ""
398
- "Enable to sell this product on Instagram. Products that are hidden in the "
399
- "Facebook catalog can be synced, but won’t be available for purchase."
400
  msgstr ""
401
 
402
  #: includes/Admin/Products.php:226
@@ -407,17 +403,76 @@ msgstr ""
407
  msgid "Click here to learn more."
408
  msgstr ""
409
 
 
410
  #: includes/Admin/Products.php:236
411
- #. translators: Placeholders %1$s - strong opening tag, %2$s - strong closing
412
- #. tag
413
- msgid ""
414
- "To sell this product on Instagram, at least one variation must be synced to "
415
- "Facebook. You can control variation sync on the %1$sVariations%2$s tab with "
416
- "the %1$sFacebook Sync%2$s setting."
417
  msgstr ""
418
 
419
- #. Author of the plugin/theme
420
- msgid "Facebook"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
  msgstr ""
422
 
423
  #: includes/Admin/Settings.php:125
@@ -455,30 +510,23 @@ msgstr ""
455
  msgid "Your settings have been saved."
456
  msgstr ""
457
 
458
- #: includes/Admin/Settings.php:236
459
  #. translators: Placeholders: %s - user-friendly error message
 
460
  msgid "Your settings could not be saved. %s"
461
  msgstr ""
462
 
 
463
  #: includes/Admin/Settings_Screens/Advertise.php:203
464
- #. translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing
465
- #. </a> HTML link tag
466
  msgid "Please %1$sconnect your store%2$s to Facebook to create ads."
467
  msgstr ""
468
 
469
  #: includes/Admin/Settings_Screens/Advertise.php:221
470
- msgid ""
471
- "If you are connected to Facebook but cannot display ads, please contact "
472
- "Facebook support."
473
  msgstr ""
474
 
 
475
  #: includes/Admin/Settings_Screens/Connection.php:58
476
- #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
477
- #. <a> tag, %4$s - </a> tag, %5$s - <a> tag, %6$s - </a> tag
478
- msgid ""
479
- "%1$sHeads up!%2$s It looks like there was a problem with reconnecting your "
480
- "site to Facebook. Please %3$sclick here%4$s to try again, or %5$sget in "
481
- "touch with our support team%6$s for assistance."
482
  msgstr ""
483
 
484
  #: includes/Admin/Settings_Screens/Connection.php:131
@@ -570,13 +618,11 @@ msgid "Use new, memory improved, feed generation process."
570
  msgstr ""
571
 
572
  #: includes/Admin/Settings_Screens/Connection.php:340
573
- msgid ""
574
- "Experimental feature. Only enable this if you are experiencing problems "
575
- "with feed generation. This is an experimental feature in testing phase."
576
  msgstr ""
577
 
578
- #: includes/Admin/Settings_Screens/Messenger.php:114
579
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
 
580
  msgid "%1$sClick here%2$s to manage your Messenger greeting and colors."
581
  msgstr ""
582
 
@@ -596,8 +642,8 @@ msgstr ""
596
  msgid "Greeting & Colors"
597
  msgstr ""
598
 
599
- #: includes/Admin/Settings_Screens/Messenger.php:185
600
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
 
601
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage Facebook Messenger."
602
  msgstr ""
603
 
@@ -610,26 +656,23 @@ msgstr ""
610
  msgid "Product sets"
611
  msgstr ""
612
 
613
- #: includes/Admin/Settings_Screens/Product_Sync.php:82
614
  #. translators: Placeholders: {count} number of remaining items
 
615
  msgid "{count} item remaining."
616
  msgid_plural "{count} items remaining."
617
  msgstr[0] ""
618
  msgstr[1] ""
619
 
620
- #: includes/Admin/Settings_Screens/Product_Sync.php:97
621
  #. translators: Placeholders %s - html code for a spinner icon
 
622
  msgid "Your products will now be resynced to Facebook, this may take some time."
623
  msgstr ""
624
 
625
  #: includes/Admin/Settings_Screens/Product_Sync.php:98
626
  msgid ""
627
- "Facebook for WooCommerce automatically syncs your products on "
628
- "create/update. Are you sure you want to force product resync?\n"
629
  "\n"
630
- "This will query all published products and may take some time. You only "
631
- "need to do this if your products are out of sync or some of your products "
632
- "did not sync."
633
  msgstr ""
634
 
635
  #: includes/Admin/Settings_Screens/Product_Sync.php:99
@@ -641,19 +684,12 @@ msgid "There was an error trying to sync the products to Facebook."
641
  msgstr ""
642
 
643
  #: includes/Admin/Settings_Screens/Product_Sync.php:103
644
- msgid ""
645
- "Something went wrong while uploading the product information, please try "
646
- "again."
647
  msgstr ""
648
 
649
- #: includes/Admin/Settings_Screens/Product_Sync.php:136
650
  #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag
651
- msgid ""
652
- "Products and categories that inherit this global setting (they do not have "
653
- "a specific Google product category set) will use the new default "
654
- "immediately. %1$sIf you have cleared the Google Product Category%2$s, "
655
- "items inheriting the default will not be available for Instagram checkout. "
656
- "Are you sure you want to proceed?"
657
  msgstr ""
658
 
659
  #: includes/Admin/Settings_Screens/Product_Sync.php:189
@@ -705,237 +741,79 @@ msgid "Short description"
705
  msgstr ""
706
 
707
  #: includes/Admin/Settings_Screens/Product_Sync.php:339
708
- msgid ""
709
- "Choose a default Google product category for your products. Defaults can "
710
- "also be set for product categories. Products need at least two category "
711
- "levels defined for tax to be correctly applied."
712
  msgstr ""
713
 
714
- #: includes/Admin/Settings_Screens/Product_Sync.php:385
715
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
 
716
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage product sync."
717
  msgstr ""
718
 
719
- #: includes/Admin.php:117
720
- msgid "The name is how it appears on Facebook Catalog."
721
- msgstr ""
722
-
723
- #: includes/Admin.php:183
724
- msgid ""
725
- "You have selected one or more categories currently excluded from the "
726
- "Facebook sync. Products belonging to the excluded categories will not be "
727
- "added to your FB product set."
728
- msgstr ""
729
-
730
- #: includes/Admin.php:224
731
- msgid ""
732
- "Please enter a Google product category and at least one sub-category to "
733
- "sell this product on Instagram."
734
- msgstr ""
735
-
736
- #: includes/Admin.php:250
737
- msgid "Search main categories..."
738
- msgstr ""
739
-
740
- #: includes/Admin.php:251
741
- msgid "Choose a main category"
742
- msgstr ""
743
-
744
- #: includes/Admin.php:252
745
- msgid "Choose a category"
746
- msgstr ""
747
-
748
- #: includes/Admin.php:309
749
- msgid ""
750
- "To sell this product on Instagram, please ensure it meets the following "
751
- "requirements:"
752
- msgstr ""
753
-
754
- #: includes/Admin.php:312
755
- msgid "Has a price defined"
756
- msgstr ""
757
-
758
- #: includes/Admin.php:318
759
- #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
760
- #. </strong> closing HTML tag
761
- msgid "Has %1$sManage Stock%2$s enabled on the %1$sInventory%2$s tab"
762
- msgstr ""
763
-
764
- #: includes/Admin.php:330
765
- #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
766
- #. </strong> closing HTML tag
767
- msgid ""
768
- "Has the %1$sFacebook Sync%2$s setting set to \"Sync and show\" or \"Sync "
769
- "and hide\""
770
- msgstr ""
771
-
772
- #: includes/Admin.php:359
773
- msgid "Close"
774
- msgstr ""
775
-
776
- #: includes/Admin.php:384
777
- #. translators: Placeholders: %1$s - opening <a> link tag, %2$s - closing </a>
778
- #. link tag
779
- msgid ""
780
- "You're removing a product from the Facebook sync that is currently listed "
781
- "in your %1$sFacebook catalog%2$s. Would you like to delete the product from "
782
- "the Facebook catalog as well?"
783
- msgstr ""
784
-
785
- #: includes/Admin.php:413
786
- msgid "Remove from sync only"
787
- msgstr ""
788
-
789
- #: includes/Admin.php:417
790
- msgid "Remove from sync and delete"
791
- msgstr ""
792
-
793
- #: includes/Admin.php:453 includes/Admin.php:1296 includes/Admin.php:1438
794
- msgid "Facebook sync"
795
- msgstr ""
796
-
797
- #: includes/Admin.php:480 includes/Admin.php:511
798
- msgid "Sync and show"
799
- msgstr ""
800
-
801
- #: includes/Admin.php:482 includes/Admin.php:512
802
- msgid "Sync and hide"
803
- msgstr ""
804
-
805
- #: includes/Admin.php:486 includes/Admin.php:513 includes/Admin.php:1300
806
- #: includes/Admin.php:1442
807
- msgid "Do not sync"
808
- msgstr ""
809
-
810
- #: includes/Admin.php:510
811
- msgid "Filter by Facebook sync setting"
812
- msgstr ""
813
-
814
- #: includes/Admin.php:923
815
- msgid "Include in Facebook sync"
816
- msgstr ""
817
-
818
- #: includes/Admin.php:924
819
- msgid "Exclude from Facebook sync"
820
- msgstr ""
821
-
822
- #: includes/Admin.php:1117
823
- #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
824
- #. <a> tag, %4$s - <a> tag
825
- msgid ""
826
- "%1$sHeads up!%2$s If this product was previously visible in Facebook, you "
827
- "may need to delete it from the %3$sFacebook catalog%4$s to completely hide "
828
- "it from customer view."
829
- msgid_plural ""
830
- "%1$sHeads up!%2$s If these products were previously visible in Facebook, "
831
- "you may need to delete them from the %3$sFacebook catalog%4$s to completely "
832
- "hide them from customer view."
833
- msgstr[0] ""
834
- msgstr[1] ""
835
-
836
- #: includes/Admin.php:1124
837
- msgid "Don't show this notice again"
838
- msgstr ""
839
-
840
- #: includes/Admin.php:1158
841
- #. translators: Placeholders: %1$s - number of affected products, %2$s opening
842
- #. HTML <a> tag, %3$s - closing HTML </a> tag, %4$s - opening HTML <a> tag,
843
- #. %5$s - closing HTML </a> tag
844
- msgid ""
845
- "%2$s%1$s product%3$s or some of its variations could not be updated to show "
846
- "in the Facebook catalog — %4$sFacebook Commerce Policies%5$s prohibit "
847
- "selling some product types (like virtual products). You may still advertise "
848
- "Virtual products on Facebook."
849
- msgid_plural ""
850
- "%2$s%1$s products%3$s or some of their variations could not be updated to "
851
- "show in the Facebook catalog — %4$sFacebook Commerce Policies%5$s prohibit "
852
- "selling some product types (like virtual products). You may still advertise "
853
- "Virtual products on Facebook."
854
- msgstr[0] ""
855
- msgstr[1] ""
856
-
857
- #: includes/Admin.php:1224
858
- #. translators: Placeholders: %1$s - opening HTML <strong> tag, %2$s - closing
859
- #. HTML </strong> tag, %3$s - opening HTML <a> tag, %4$s - closing HTML </a>
860
- #. tag
861
- msgid ""
862
- "%1$sHeads up!%2$s Facebook's %3$sCommerce Policies%4$s do not support "
863
- "selling virtual products, so we have hidden your synced Virtual products in "
864
- "your Facebook catalog. You may still advertise Virtual products on Facebook."
865
- msgstr ""
866
-
867
- #: includes/Admin.php:1298 includes/Admin.php:1440
868
- msgid "Sync and show in catalog"
869
  msgstr ""
870
 
871
- #: includes/Admin.php:1299 includes/Admin.php:1441
872
- msgid "Sync and hide in catalog"
873
  msgstr ""
874
 
875
- #: includes/Admin.php:1309 includes/Admin.php:1454
876
- msgid "Facebook Description"
877
  msgstr ""
878
 
879
- #: includes/Admin.php:1311 includes/Admin.php:1456
880
- msgid ""
881
- "Custom (plain-text only) description for product on Facebook. If blank, "
882
- "product description will be used. If product description is blank, "
883
- "shortname will be used."
884
  msgstr ""
885
 
886
- #: includes/Admin.php:1322 includes/Admin.php:1469
887
- msgid "Facebook Product Image"
888
  msgstr ""
889
 
890
- #: includes/Admin.php:1324 includes/Admin.php:1471
891
- msgid ""
892
- "Choose the product image that should be synced to the Facebook catalog for "
893
- "this product. If using a custom image, please enter an absolute URL (e.g. "
894
- "https://domain.com/image.jpg)."
895
  msgstr ""
896
 
897
- #: includes/Admin.php:1326
898
- msgid "Use WooCommerce image"
899
  msgstr ""
900
 
901
- #: includes/Admin.php:1327 includes/Admin.php:1475
902
- msgid "Use custom image"
903
  msgstr ""
904
 
905
- #: includes/Admin.php:1338 includes/Admin.php:1487
906
- msgid "Custom Image URL"
907
  msgstr ""
908
 
909
- #: includes/Admin.php:1349 includes/Admin.php:1500
910
- #. translators: Placeholders %1$s - WC currency symbol
911
- msgid "Facebook Price (%1$s)"
912
  msgstr ""
913
 
914
- #: includes/Admin.php:1353 includes/Admin.php:1504
915
- msgid ""
916
- "Custom price for product on Facebook. Please enter in monetary decimal (.) "
917
- "format without thousand separators and currency symbols. If blank, product "
918
- "price will be used."
919
  msgstr ""
920
 
921
- #: includes/Admin.php:1473
922
- msgid "Use variation image"
923
  msgstr ""
924
 
925
- #: includes/Admin.php:1474
926
- msgid "Use parent image"
927
  msgstr ""
928
 
929
- #: includes/Admin.php:1628
930
- msgid "Close modal panel"
 
931
  msgstr ""
932
 
933
  #: includes/Commerce/Orders.php:433
934
- #. translators: Placeholders: %1$s - order remote id, %2$s - order created by
935
  msgid "Order %1$s paid in %2$s"
936
  msgstr ""
937
 
938
- #: includes/Commerce/Orders.php:585 includes/Commerce/Orders.php:820
 
939
  msgid "Remote ID not found."
940
  msgstr ""
941
 
@@ -943,19 +821,18 @@ msgstr ""
943
  msgid "%s is not a valid shipping carrier code."
944
  msgstr ""
945
 
946
- #: includes/Commerce/Orders.php:610 includes/Commerce/Orders.php:787
 
947
  msgid "No valid Facebook products were found."
948
  msgstr ""
949
 
 
950
  #: includes/Commerce/Orders.php:628
951
- #. translators: Placeholder: %s - sales channel name, like Facebook or
952
- #. Instagram
953
  msgid "%s order fulfilled."
954
  msgstr ""
955
 
 
956
  #: includes/Commerce/Orders.php:638
957
- #. translators: Placeholders: %1$s - sales channel name, like Facebook or
958
- #. Instagram, %2$s - error message
959
  msgid "%1$s order could not be fulfilled. %2$s"
960
  msgstr ""
961
 
@@ -967,27 +844,23 @@ msgstr ""
967
  msgid "Remote ID for parent order not found."
968
  msgstr ""
969
 
 
970
  #: includes/Commerce/Orders.php:719
971
- #. translators: Placeholder: %s - sales channel name, like Facebook or
972
- #. Instagram
973
  msgid "Order refunded on %s."
974
  msgstr ""
975
 
 
976
  #: includes/Commerce/Orders.php:731
977
- #. translators: Placeholders: %1$s - sales channel name, like Facebook or
978
- #. Instagram, %2$s - error message
979
  msgid "Could not refund %1$s order: %2$s"
980
  msgstr ""
981
 
 
982
  #: includes/Commerce/Orders.php:828
983
- #. translators: Placeholder: %s - sales channel name, like Facebook or
984
- #. Instagram
985
  msgid "%s order cancelled."
986
  msgstr ""
987
 
 
988
  #: includes/Commerce/Orders.php:838
989
- #. translators: Placeholders: %1$s - sales channel name, like Facebook or
990
- #. Instagram, %2$s - error message
991
  msgid "%1$s order could not be cancelled. %2$s"
992
  msgstr ""
993
 
@@ -1011,6 +884,50 @@ msgstr ""
1011
  msgid "Other"
1012
  msgstr ""
1013
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1014
  #: includes/Handlers/Connection.php:298
1015
  msgid "Connection successful!"
1016
  msgstr ""
@@ -1023,13 +940,8 @@ msgstr ""
1023
  msgid "Disconnection successful."
1024
  msgstr ""
1025
 
1026
- #: includes/Handlers/Connection.php:428
1027
- #. translators: Placeholders: %s - API error message
1028
- msgid "Could not retrieve page access data. %s"
1029
- msgstr ""
1030
-
1031
- #: includes/Handlers/Connection.php:442
1032
  #. translators: Placeholders: %s - Facebook page ID
 
1033
  msgid "Page %s not authorized."
1034
  msgstr ""
1035
 
@@ -1037,6 +949,11 @@ msgstr ""
1037
  msgid "You do not have permission to finish App Store login."
1038
  msgstr ""
1039
 
 
 
 
 
 
1040
  #: includes/ProductSync/ProductValidator.php:195
1041
  msgid "Product sync is globally disabled."
1042
  msgstr ""
@@ -1050,9 +967,7 @@ msgid "Product must be in stock."
1050
  msgstr ""
1051
 
1052
  #: includes/ProductSync/ProductValidator.php:234
1053
- msgid ""
1054
- "This product cannot be synced to Facebook because it is hidden from your "
1055
- "store catalog."
1056
  msgstr ""
1057
 
1058
  #: includes/ProductSync/ProductValidator.php:249
@@ -1072,9 +987,7 @@ msgid "If product is not simple, variable or variation it must have a price."
1072
  msgstr ""
1073
 
1074
  #: includes/ProductSync/ProductValidator.php:328
1075
- msgid ""
1076
- "Product description is all capital letters. Please change the description "
1077
- "to sentence case in order to allow synchronization of your product."
1078
  msgstr ""
1079
 
1080
  #: includes/ProductSync/ProductValidator.php:331
@@ -1082,9 +995,7 @@ msgid "Product description is too long. Maximum allowed length is 5000 character
1082
  msgstr ""
1083
 
1084
  #: includes/ProductSync/ProductValidator.php:350
1085
- msgid ""
1086
- "Product title is all capital letters. Please change the title to sentence "
1087
- "case in order to allow synchronization of your product."
1088
  msgstr ""
1089
 
1090
  #: includes/ProductSync/ProductValidator.php:353
@@ -1094,91 +1005,3 @@ msgstr ""
1094
  #: includes/ProductSync/ProductValidator.php:377
1095
  msgid "Too many attributes selected for product. Use 4 or less."
1096
  msgstr ""
1097
-
1098
- #: includes/Products/Sync/Background.php:69
1099
- msgid "Job data key \"%s\" not set"
1100
- msgstr ""
1101
-
1102
- #: includes/Products/Sync/Background.php:73
1103
- msgid "Job data key \"%s\" is not an array"
1104
- msgstr ""
1105
-
1106
- #: includes/Products/Sync/Background.php:158
1107
- msgid ""
1108
- "There was an error trying sync products using the Catalog Batch API for job "
1109
- "%1$s: %2$s"
1110
- msgstr ""
1111
-
1112
- #: includes/fbgraph.php:106
1113
- msgid "HTTP %1$s: %2$s"
1114
- msgstr ""
1115
-
1116
- #: includes/fbinfobanner.php:212
1117
- msgid "Click and redirect."
1118
- msgstr ""
1119
-
1120
- #: includes/fbinfobanner.php:213
1121
- msgid "Dismiss this notice."
1122
- msgstr ""
1123
-
1124
- #: includes/fbinfobanner.php:213
1125
- msgid "Dismiss"
1126
- msgstr ""
1127
-
1128
- #: includes/fbproductfeed.php:278
1129
- msgid "Could not create product catalog feed directory"
1130
- msgstr ""
1131
-
1132
- #: includes/fbproductfeed.php:382
1133
- msgid "Could not open the product catalog temporary feed file for writing"
1134
- msgstr ""
1135
-
1136
- #: includes/fbproductfeed.php:389
1137
- msgid "Could not open the product catalog feed file for writing"
1138
- msgstr ""
1139
-
1140
- #: includes/fbproductfeed.php:453
1141
- msgid "Could not rename the product catalog feed file"
1142
- msgstr ""
1143
-
1144
- #: includes/fbwpml.php:115
1145
- msgid "Facebook Visibility"
1146
- msgstr ""
1147
-
1148
- #: includes/fbwpml.php:118
1149
- msgid ""
1150
- "WooCommerce Products with languages that are selected here will be visible "
1151
- "to customers who see your Facebook Shop."
1152
- msgstr ""
1153
-
1154
- #: includes/fbwpml.php:135
1155
- msgid ""
1156
- "Saved. An automated sync from Facebook will run every hour to update the "
1157
- "catalog with any changes you've made."
1158
- msgstr ""
1159
-
1160
- #: includes/fbwpml.php:141
1161
- msgid "Save"
1162
- msgstr ""
1163
-
1164
- #. Plugin URI of the plugin/theme
1165
- msgid "https://github.com/facebookincubator/facebook-for-woocommerce/"
1166
- msgstr ""
1167
-
1168
- #. Description of the plugin/theme
1169
- msgid ""
1170
- "Grow your business on Facebook! Use this official plugin to help sell more "
1171
- "of your products using Facebook. After completing the setup, you'll be "
1172
- "ready to create ads that promote your products and you can also create a "
1173
- "shop section on your Page where customers can browse your products on "
1174
- "Facebook."
1175
- msgstr ""
1176
-
1177
- #. Author URI of the plugin/theme
1178
- msgid "https://www.facebook.com/"
1179
- msgstr ""
1180
-
1181
- #: includes/Locale.php:181
1182
- msgctxt "language"
1183
- msgid "English (United States)"
1184
- msgstr ""
1
  # Copyright (C) 2022 Facebook
2
+ # This file is distributed under the same license as the Facebook for WooCommerce plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Facebook for WooCommerce 2.6.25\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/facebook-for-woocommerce\n"
 
 
 
 
 
 
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2022-10-04T11:52:32+00:00\n"
13
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
+ "X-Generator: WP-CLI 2.5.0\n"
15
+ "X-Domain: facebook-for-woocommerce\n"
16
+
17
+ #. Plugin Name of the plugin
18
+ #: class-wc-facebookcommerce.php:1082
19
+ #: facebook-commerce.php:229
20
+ #: includes/Admin.php:1626
21
+ #: includes/Admin/Settings.php:94
22
+ #: includes/Admin/Settings.php:119
23
+ msgid "Facebook for WooCommerce"
24
+ msgstr ""
25
+
26
+ #. Plugin URI of the plugin
27
+ msgid "https://github.com/facebookincubator/facebook-for-woocommerce/"
28
+ msgstr ""
29
+
30
+ #. Description of the plugin
31
+ msgid "Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook."
32
+ msgstr ""
33
+
34
+ #. Author of the plugin
35
+ #: includes/Admin.php:1253
36
+ #: includes/Admin/Settings.php:95
37
+ #: includes/Admin/Settings.php:330
38
+ msgid "Facebook"
39
+ msgstr ""
40
+
41
+ #. Author URI of the plugin
42
+ msgid "https://www.facebook.com/"
43
+ msgstr ""
44
 
45
+ #. translators: Placeholders %1$s - opening strong HTML tag, %2$s - closing strong HTML tag, %3$s - opening link HTML tag, %4$s - closing link HTML tag
46
  #: class-wc-facebookcommerce.php:271
47
+ msgid "%1$sHeads up!%2$s You're ready to migrate to a more secure, reliable Facebook for WooCommerce connection. Please %3$sclick here%4$s to reconnect!"
 
 
 
 
48
  msgstr ""
49
 
50
+ #. translators: Placeholders %1$s - opening link HTML tag, %2$s - closing link HTML tag
51
  #: class-wc-facebookcommerce.php:292
52
+ msgid "For your convenience, the Facebook for WooCommerce settings are now located under %1$sWooCommerce > Facebook%2$s."
 
 
 
 
53
  msgstr ""
54
 
55
+ #. translators: Placeholders %1$s - opening strong HTML tag, %2$s - closing strong HTML tag, %3$s - opening link HTML tag, %4$s - closing link HTML tag
56
  #: class-wc-facebookcommerce.php:312
57
+ msgid "%1$sFacebook for WooCommerce is almost ready.%2$s To complete your configuration, %3$scomplete the setup steps%4$s."
 
 
 
 
58
  msgstr ""
59
 
60
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - </a> tag
61
  #: class-wc-facebookcommerce.php:344
62
+ msgid "%1$sHeads up!%2$s If you've customized your Facebook Messenger color or greeting settings, please update those settings again from the %3$sManage Connection%4$s area."
 
 
 
 
 
63
  msgstr ""
64
 
65
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - </a> tag
66
  #: class-wc-facebookcommerce.php:367
67
+ msgid "%1$sHeads up!%2$s Your connection to Facebook is no longer valid. Please %3$sclick here%4$s to securely reconnect your account and continue syncing products."
 
 
 
 
 
68
  msgstr ""
69
 
70
+ #. translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing </a> HTML link tag
71
  #: class-wc-facebookcommerce.php:397
 
 
72
  msgid "Heads up! The Facebook menu is now located under the %1$sMarketing%2$s menu."
73
  msgstr ""
74
 
80
  msgid "FB Product Set"
81
  msgstr ""
82
 
 
83
  #. translators: Edit item label
84
+ #: class-wc-facebookcommerce.php:488
85
  msgid "Edit %s"
86
  msgstr ""
87
 
 
88
  #. translators: Add new label
89
+ #: class-wc-facebookcommerce.php:490
90
  msgid "Add new %s"
91
  msgstr ""
92
 
 
93
  #. translators: No items found text
94
+ #: class-wc-facebookcommerce.php:493
95
  msgid "No %s found."
96
  msgstr ""
97
 
 
98
  #. translators: Search label
99
+ #: class-wc-facebookcommerce.php:495
100
  msgid "Search %s."
101
  msgstr ""
102
 
 
103
  #. translators: Text label
104
+ #: class-wc-facebookcommerce.php:497
105
  msgid "Separate %s with commas"
106
  msgstr ""
107
 
 
108
  #. translators: Text label
109
+ #: class-wc-facebookcommerce.php:499
110
  msgid "Choose from the most used %s"
111
  msgstr ""
112
 
114
  msgid "Cannot create the API instance because the access token is missing."
115
  msgstr ""
116
 
 
 
 
 
117
  #: facebook-commerce.php:233
118
  msgid "Facebook Commerce and Dynamic Ads (Pixel) Extension"
119
  msgstr ""
122
  msgid "Nothing to update for product group for %1$s"
123
  msgstr ""
124
 
 
125
  #. translators: Placeholders %1$s - original error message from Facebook API
126
+ #: facebook-commerce.php:1902
127
  msgid "There was an issue connecting to the Facebook API: %1$s"
128
  msgstr ""
129
 
130
+ #: facebook-commerce.php:2227
131
  msgid "Your connection has expired."
132
  msgstr ""
133
 
134
+ #: facebook-commerce.php:2227
135
+ msgid "Please click Manage connection > Advanced Options > Update Token to refresh your connection to Facebook."
 
 
136
  msgstr ""
137
 
 
138
  #. translators: Placeholders %s - error message
139
+ #: facebook-commerce.php:2234
140
  msgid "There was an error trying to sync the products to Facebook. %s"
141
  msgstr ""
142
 
143
+ #: facebook-commerce.php:2257
144
  msgid "Product sync is disabled."
145
  msgstr ""
146
 
147
+ #: facebook-commerce.php:2264
148
  msgid "The plugin is not configured or the Catalog ID is missing."
149
  msgstr ""
150
 
151
+ #: facebook-commerce.php:2287
152
+ msgid "A product sync is in progress. Please wait until the sync finishes before starting a new one."
 
 
153
  msgstr ""
154
 
155
+ #: facebook-commerce.php:2299
156
+ msgid "We've detected that your Facebook Product Catalog is no longer valid. This may happen if it was deleted, but could also be a temporary error. If the error persists, please click Manage connection > Advanced Options > Remove and setup the plugin again."
 
 
 
 
157
  msgstr ""
158
 
159
+ #: facebook-commerce.php:2828
160
  msgid "Hi! We're here to answer any questions you may have."
161
  msgstr ""
162
 
163
+ #: facebook-commerce.php:3218
164
  msgid "Facebook for WooCommerce error:"
165
  msgstr ""
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  #. translators: Placeholders %1$s - original error message from Facebook API
168
+ #: facebook-commerce.php:3587
169
  msgid "There was an issue connecting to the Facebook API: %s"
170
  msgstr ""
171
 
172
+ #. translators: %1$s - plugin name, %2$s - minimum WordPress version required, %3$s - update WordPress link open, %4$s - update WordPress link close
173
  #: facebook-for-woocommerce.php:227
174
+ msgid "%1$s requires WordPress version %2$s or higher. Please %3$supdate WordPress &raquo;%4$s"
 
 
 
 
175
  msgstr ""
176
 
177
+ #. translators: %1$s - Plugin Name, %2$s - activate WooCommerce link open, %3$s - activate WooCommerce link close.
178
  #: facebook-for-woocommerce.php:253
179
+ msgid "%1$s requires WooCommerce to be activated. Please %2$sactivate WooCommerce%3$s."
 
 
 
 
180
  msgstr ""
181
 
182
+ #. translators: %1$s - Plugin Name, %2$s - install WooCommerce link open, %3$s - install WooCommerce link close.
183
  #: facebook-for-woocommerce.php:270
184
+ msgid "%1$s requires WooCommerce to be installed and activated. Please %2$sinstall WooCommerce%3$s."
 
 
 
 
185
  msgstr ""
186
 
187
+ #. translators: %1$s - Plugin Name, %2$s - minimum WooCommerce version, %3$s - update WooCommerce link open, %4$s - update WooCommerce link close, %5$s - download minimum WooCommerce link open, %6$s - download minimum WooCommerce link close.
188
  #: facebook-for-woocommerce.php:290
189
+ msgid "%1$s requires WooCommerce version %2$s or higher. Please %3$supdate WooCommerce%4$s to the latest version, or %5$sdownload the minimum required version &raquo;%6$s"
 
 
 
 
 
 
 
190
  msgstr ""
191
 
192
+ #: includes/Admin.php:117
193
+ msgid "The name is how it appears on Facebook Catalog."
194
  msgstr ""
195
 
196
+ #: includes/Admin.php:183
197
+ msgid "You have selected one or more categories currently excluded from the Facebook sync. Products belonging to the excluded categories will not be added to your FB product set."
198
  msgstr ""
199
 
200
+ #: includes/Admin.php:224
201
+ msgid "Please enter a Google product category and at least one sub-category to sell this product on Instagram."
202
  msgstr ""
203
 
204
+ #: includes/Admin.php:250
205
+ msgid "Search main categories..."
206
  msgstr ""
207
 
208
+ #: includes/Admin.php:251
209
+ msgid "Choose a main category"
210
  msgstr ""
211
 
212
+ #: includes/Admin.php:252
213
+ msgid "Choose a category"
214
  msgstr ""
215
 
216
+ #: includes/Admin.php:309
217
+ msgid "To sell this product on Instagram, please ensure it meets the following requirements:"
218
  msgstr ""
219
 
220
+ #: includes/Admin.php:312
221
+ msgid "Has a price defined"
222
  msgstr ""
223
 
224
+ #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s - </strong> closing HTML tag
225
+ #: includes/Admin.php:318
226
+ msgid "Has %1$sManage Stock%2$s enabled on the %1$sInventory%2$s tab"
227
  msgstr ""
228
 
229
+ #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s - </strong> closing HTML tag
230
+ #: includes/Admin.php:330
231
+ msgid "Has the %1$sFacebook Sync%2$s setting set to \"Sync and show\" or \"Sync and hide\""
232
  msgstr ""
233
 
234
+ #. translators: Placeholders: %1$s - opening <a> link tag, %2$s - closing </a> link tag
235
+ #: includes/Admin.php:384
236
+ msgid "You're removing a product from the Facebook sync that is currently listed in your %1$sFacebook catalog%2$s. Would you like to delete the product from the Facebook catalog as well?"
 
237
  msgstr ""
238
 
239
+ #: includes/Admin.php:453
240
+ #: includes/Admin.php:1296
241
+ #: includes/Admin.php:1438
242
+ msgid "Facebook sync"
 
 
 
243
  msgstr ""
244
 
245
+ #: includes/Admin.php:480
246
+ #: includes/Admin.php:511
247
+ msgid "Sync and show"
 
 
 
248
  msgstr ""
249
 
250
+ #: includes/Admin.php:482
251
+ #: includes/Admin.php:512
252
+ msgid "Sync and hide"
253
  msgstr ""
254
 
255
+ #: includes/Admin.php:486
256
+ #: includes/Admin.php:513
257
+ #: includes/Admin.php:1300
258
+ #: includes/Admin.php:1442
259
+ msgid "Do not sync"
 
 
260
  msgstr ""
261
 
262
+ #: includes/Admin.php:510
263
+ msgid "Filter by Facebook sync setting"
264
  msgstr ""
265
 
266
+ #: includes/Admin.php:923
267
+ msgid "Include in Facebook sync"
268
  msgstr ""
269
 
270
+ #: includes/Admin.php:924
271
+ msgid "Exclude from Facebook sync"
 
 
 
 
272
  msgstr ""
273
 
274
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - <a> tag
275
+ #: includes/Admin.php:1117
276
+ msgid "%1$sHeads up!%2$s If this product was previously visible in Facebook, you may need to delete it from the %3$sFacebook catalog%4$s to completely hide it from customer view."
277
+ msgid_plural "%1$sHeads up!%2$s If these products were previously visible in Facebook, you may need to delete them from the %3$sFacebook catalog%4$s to completely hide them from customer view."
278
+ msgstr[0] ""
279
+ msgstr[1] ""
280
+
281
+ #: includes/Admin.php:1124
282
+ msgid "Don't show this notice again"
283
  msgstr ""
284
 
285
+ #. translators: Placeholders: %1$s - number of affected products, %2$s opening HTML <a> tag, %3$s - closing HTML </a> tag, %4$s - opening HTML <a> tag, %5$s - closing HTML </a> tag
286
+ #: includes/Admin.php:1158
287
+ msgid "%2$s%1$s product%3$s or some of its variations could not be updated to show in the Facebook catalog — %4$sFacebook Commerce Policies%5$s prohibit selling some product types (like virtual products). You may still advertise Virtual products on Facebook."
288
+ msgid_plural "%2$s%1$s products%3$s or some of their variations could not be updated to show in the Facebook catalog — %4$sFacebook Commerce Policies%5$s prohibit selling some product types (like virtual products). You may still advertise Virtual products on Facebook."
289
+ msgstr[0] ""
290
+ msgstr[1] ""
291
+
292
+ #. translators: Placeholders: %1$s - opening HTML <strong> tag, %2$s - closing HTML </strong> tag, %3$s - opening HTML <a> tag, %4$s - closing HTML </a> tag
293
+ #: includes/Admin.php:1224
294
+ msgid "%1$sHeads up!%2$s Facebook's %3$sCommerce Policies%4$s do not support selling virtual products, so we have hidden your synced Virtual products in your Facebook catalog. You may still advertise Virtual products on Facebook."
295
  msgstr ""
296
 
297
+ #: includes/Admin.php:1298
298
+ #: includes/Admin.php:1440
299
+ msgid "Sync and show in catalog"
 
 
300
  msgstr ""
301
 
302
+ #: includes/Admin.php:1299
303
+ #: includes/Admin.php:1441
304
+ msgid "Sync and hide in catalog"
305
  msgstr ""
306
 
307
+ #: includes/Admin.php:1309
308
+ #: includes/Admin.php:1454
309
+ msgid "Facebook Description"
310
  msgstr ""
311
 
312
+ #: includes/Admin.php:1311
313
+ #: includes/Admin.php:1456
314
+ msgid "Custom (plain-text only) description for product on Facebook. If blank, product description will be used. If product description is blank, shortname will be used."
315
  msgstr ""
316
 
317
+ #: includes/Admin.php:1322
318
+ #: includes/Admin.php:1469
319
+ msgid "Facebook Product Image"
320
  msgstr ""
321
 
322
+ #: includes/Admin.php:1324
323
+ #: includes/Admin.php:1471
324
+ msgid "Choose the product image that should be synced to the Facebook catalog for this product. If using a custom image, please enter an absolute URL (e.g. https://domain.com/image.jpg)."
325
  msgstr ""
326
 
327
+ #: includes/Admin.php:1326
328
+ msgid "Use WooCommerce image"
329
  msgstr ""
330
 
331
+ #: includes/Admin.php:1327
332
+ #: includes/Admin.php:1475
333
+ msgid "Use custom image"
334
  msgstr ""
335
 
336
+ #: includes/Admin.php:1338
337
+ #: includes/Admin.php:1487
338
+ msgid "Custom Image URL"
339
  msgstr ""
340
 
341
+ #. translators: Placeholders %1$s - WC currency symbol
342
+ #. translators: Placeholders %1$s - WC currency symbol
343
+ #: includes/Admin.php:1349
344
+ #: includes/Admin.php:1500
345
+ msgid "Facebook Price (%1$s)"
346
  msgstr ""
347
 
348
+ #: includes/Admin.php:1353
349
+ #: includes/Admin.php:1504
350
+ msgid "Custom price for product on Facebook. Please enter in monetary decimal (.) format without thousand separators and currency symbols. If blank, product price will be used."
351
  msgstr ""
352
 
353
+ #: includes/Admin.php:1473
354
+ msgid "Use variation image"
355
+ msgstr ""
356
+
357
+ #: includes/Admin.php:1474
358
+ msgid "Use parent image"
359
+ msgstr ""
360
+
361
+ #: includes/Admin.php:1628
362
+ msgid "Close modal panel"
363
+ msgstr ""
364
+
365
+ #: includes/Admin/Abstract_Settings_Screen.php:73
366
+ msgid "Save changes"
367
+ msgstr ""
368
+
369
+ #: includes/Admin/Enhanced_Catalog_Attribute_Fields.php:104
370
+ msgid "Show advanced options"
371
  msgstr ""
372
 
373
  #: includes/Admin/Products.php:101
374
  msgid "Select values for enhanced attributes for this product"
375
  msgstr ""
376
 
377
+ #: includes/Admin/Products.php:119
378
+ #: includes/Admin/Product_Categories.php:376
379
+ msgid "Category Specific Attributes"
380
+ msgstr ""
381
+
382
  #: includes/Admin/Products.php:140
383
  msgid "Google product category"
384
  msgstr ""
385
 
386
  #: includes/Admin/Products.php:141
387
+ msgid "Choose the Google product category and (optionally) sub-categories associated with this product."
 
 
388
  msgstr ""
389
 
390
  #: includes/Admin/Products.php:214
392
  msgstr ""
393
 
394
  #: includes/Admin/Products.php:216
395
+ msgid "Enable to sell this product on Instagram. Products that are hidden in the Facebook catalog can be synced, but won’t be available for purchase."
 
 
396
  msgstr ""
397
 
398
  #: includes/Admin/Products.php:226
403
  msgid "Click here to learn more."
404
  msgstr ""
405
 
406
+ #. translators: Placeholders %1$s - strong opening tag, %2$s - strong closing tag
407
  #: includes/Admin/Products.php:236
408
+ msgid "To sell this product on Instagram, at least one variation must be synced to Facebook. You can control variation sync on the %1$sVariations%2$s tab with the %1$sFacebook Sync%2$s setting."
 
 
 
 
 
409
  msgstr ""
410
 
411
+ #: includes/Admin/Product_Categories.php:100
412
+ #: includes/Admin/Settings_Screens/Product_Sync.php:121
413
+ msgid "Products and categories that inherit this global setting (i.e. they do not have a specific Google product category set) will use the new default immediately. Are you sure you want to proceed?"
414
+ msgstr ""
415
+
416
+ #: includes/Admin/Product_Categories.php:119
417
+ #: includes/Admin/Settings_Screens/Product_Sync.php:158
418
+ #: includes/AJAX.php:348
419
+ #: includes/AJAX.php:416
420
+ #: includes/AJAX.php:482
421
+ msgid "Cancel"
422
+ msgstr ""
423
+
424
+ #: includes/Admin/Product_Categories.php:123
425
+ #: includes/Admin/Settings_Screens/Product_Sync.php:162
426
+ msgid "Update default Google product category"
427
+ msgstr ""
428
+
429
+ #: includes/Admin/Product_Categories.php:164
430
+ msgid "Facebook catalogs now support category specific fields, to make best use of them you need to select a category. WooCommerce uses the google taxonomy as it is the most widely accepted form of categorisation."
431
+ msgstr ""
432
+
433
+ #: includes/Admin/Product_Categories.php:215
434
+ msgid "Choose a default Google product category for products in this category. Products need at least two category levels defined for tax to be correctly applied."
435
+ msgstr ""
436
+
437
+ #: includes/Admin/Product_Categories.php:233
438
+ #: includes/Admin/Settings_Screens/Product_Sync.php:338
439
+ msgid "Default Google product category"
440
+ msgstr ""
441
+
442
+ #: includes/Admin/Product_Categories.php:358
443
+ msgid "Select default values for enhanced attributes within this category"
444
+ msgstr ""
445
+
446
+ #: includes/Admin/Product_Sets.php:150
447
+ msgid "WC Product Categories"
448
+ msgstr ""
449
+
450
+ #: includes/Admin/Product_Sets.php:182
451
+ msgid "Map FB Product Set to WC Product Categories"
452
+ msgstr ""
453
+
454
+ #: includes/Admin/Product_Sync_Meta_Box.php:37
455
+ msgid "Facebook Product Sync"
456
+ msgstr ""
457
+
458
+ #: includes/Admin/Product_Sync_Meta_Box.php:78
459
+ msgid "Facebook ID:"
460
+ msgstr ""
461
+
462
+ #: includes/Admin/Product_Sync_Meta_Box.php:89
463
+ msgid "Variant IDs:"
464
+ msgstr ""
465
+
466
+ #: includes/Admin/Product_Sync_Meta_Box.php:121
467
+ msgid "Reset Facebook metadata"
468
+ msgstr ""
469
+
470
+ #: includes/Admin/Product_Sync_Meta_Box.php:126
471
+ msgid "Delete product(s) on Facebook"
472
+ msgstr ""
473
+
474
+ #: includes/Admin/Product_Sync_Meta_Box.php:138
475
+ msgid "This product is not yet synced to Facebook."
476
  msgstr ""
477
 
478
  #: includes/Admin/Settings.php:125
510
  msgid "Your settings have been saved."
511
  msgstr ""
512
 
 
513
  #. translators: Placeholders: %s - user-friendly error message
514
+ #: includes/Admin/Settings.php:236
515
  msgid "Your settings could not be saved. %s"
516
  msgstr ""
517
 
518
+ #. translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing </a> HTML link tag
519
  #: includes/Admin/Settings_Screens/Advertise.php:203
 
 
520
  msgid "Please %1$sconnect your store%2$s to Facebook to create ads."
521
  msgstr ""
522
 
523
  #: includes/Admin/Settings_Screens/Advertise.php:221
524
+ msgid "If you are connected to Facebook but cannot display ads, please contact Facebook support."
 
 
525
  msgstr ""
526
 
527
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - </a> tag, %5$s - <a> tag, %6$s - </a> tag
528
  #: includes/Admin/Settings_Screens/Connection.php:58
529
+ msgid "%1$sHeads up!%2$s It looks like there was a problem with reconnecting your site to Facebook. Please %3$sclick here%4$s to try again, or %5$sget in touch with our support team%6$s for assistance."
 
 
 
 
 
530
  msgstr ""
531
 
532
  #: includes/Admin/Settings_Screens/Connection.php:131
618
  msgstr ""
619
 
620
  #: includes/Admin/Settings_Screens/Connection.php:340
621
+ msgid "Experimental feature. Only enable this if you are experiencing problems with feed generation. This is an experimental feature in testing phase."
 
 
622
  msgstr ""
623
 
 
624
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
625
+ #: includes/Admin/Settings_Screens/Messenger.php:114
626
  msgid "%1$sClick here%2$s to manage your Messenger greeting and colors."
627
  msgstr ""
628
 
642
  msgid "Greeting & Colors"
643
  msgstr ""
644
 
 
645
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
646
+ #: includes/Admin/Settings_Screens/Messenger.php:185
647
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage Facebook Messenger."
648
  msgstr ""
649
 
656
  msgid "Product sets"
657
  msgstr ""
658
 
 
659
  #. translators: Placeholders: {count} number of remaining items
660
+ #: includes/Admin/Settings_Screens/Product_Sync.php:82
661
  msgid "{count} item remaining."
662
  msgid_plural "{count} items remaining."
663
  msgstr[0] ""
664
  msgstr[1] ""
665
 
 
666
  #. translators: Placeholders %s - html code for a spinner icon
667
+ #: includes/Admin/Settings_Screens/Product_Sync.php:97
668
  msgid "Your products will now be resynced to Facebook, this may take some time."
669
  msgstr ""
670
 
671
  #: includes/Admin/Settings_Screens/Product_Sync.php:98
672
  msgid ""
673
+ "Facebook for WooCommerce automatically syncs your products on create/update. Are you sure you want to force product resync?\n"
 
674
  "\n"
675
+ "This will query all published products and may take some time. You only need to do this if your products are out of sync or some of your products did not sync."
 
 
676
  msgstr ""
677
 
678
  #: includes/Admin/Settings_Screens/Product_Sync.php:99
684
  msgstr ""
685
 
686
  #: includes/Admin/Settings_Screens/Product_Sync.php:103
687
+ msgid "Something went wrong while uploading the product information, please try again."
 
 
688
  msgstr ""
689
 
 
690
  #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag
691
+ #: includes/Admin/Settings_Screens/Product_Sync.php:136
692
+ msgid "Products and categories that inherit this global setting (they do not have a specific Google product category set) will use the new default immediately. %1$sIf you have cleared the Google Product Category%2$s, items inheriting the default will not be available for Instagram checkout. Are you sure you want to proceed?"
 
 
 
 
693
  msgstr ""
694
 
695
  #: includes/Admin/Settings_Screens/Product_Sync.php:189
741
  msgstr ""
742
 
743
  #: includes/Admin/Settings_Screens/Product_Sync.php:339
744
+ msgid "Choose a default Google product category for your products. Defaults can also be set for product categories. Products need at least two category levels defined for tax to be correctly applied."
 
 
 
745
  msgstr ""
746
 
 
747
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
748
+ #: includes/Admin/Settings_Screens/Product_Sync.php:385
749
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage product sync."
750
  msgstr ""
751
 
752
+ #: includes/AJAX.php:82
753
+ msgid "Invalid nonce."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  msgstr ""
755
 
756
+ #: includes/AJAX.php:89
757
+ msgid "Order ID is required."
758
  msgstr ""
759
 
760
+ #: includes/AJAX.php:93
761
+ msgid "Cancel reason is required."
762
  msgstr ""
763
 
764
+ #: includes/AJAX.php:99
765
+ msgid "A valid Order ID is required."
 
 
 
766
  msgstr ""
767
 
768
+ #: includes/AJAX.php:182
769
+ msgid "Order ID is required"
770
  msgstr ""
771
 
772
+ #: includes/AJAX.php:186
773
+ msgid "Tracking number is required"
 
 
 
774
  msgstr ""
775
 
776
+ #: includes/AJAX.php:190
777
+ msgid "Carrier code is required"
778
  msgstr ""
779
 
780
+ #: includes/AJAX.php:196
781
+ msgid "Order not found"
782
  msgstr ""
783
 
784
+ #: includes/AJAX.php:220
785
+ msgid "Full product sync disabled by filter."
786
  msgstr ""
787
 
788
+ #: includes/AJAX.php:343
789
+ #: includes/AJAX.php:411
790
+ msgid "Go to Settings"
791
  msgstr ""
792
 
793
+ #. translators: Placeholder %s - <br/> tag
794
+ #: includes/AJAX.php:357
795
+ msgid "This product belongs to a category or tag that is excluded from the Facebook catalog sync. It will not sync to Facebook. %sTo sync this product to Facebook, click Go to Settings and remove the category or tag exclusion or click Cancel and update the product's category / tag assignments."
 
 
796
  msgstr ""
797
 
798
+ #: includes/AJAX.php:423
799
+ msgid "One or more of the selected products belongs to a category or tag that is excluded from the Facebook catalog sync. To sync these products to Facebook, please remove the category or tag exclusion from the plugin settings."
800
  msgstr ""
801
 
802
+ #: includes/AJAX.php:476
803
+ msgid "Exclude Products"
804
  msgstr ""
805
 
806
+ #. translators: Placeholder %s - <br/> tags
807
+ #: includes/AJAX.php:491
808
+ msgid "The categories and/or tags that you have selected to exclude from sync contain products that are currently synced to Facebook.%sTo exclude these products from the Facebook sync, click Exclude Products. To review the category / tag exclusion settings, click Cancel."
809
  msgstr ""
810
 
811
  #: includes/Commerce/Orders.php:433
 
812
  msgid "Order %1$s paid in %2$s"
813
  msgstr ""
814
 
815
+ #: includes/Commerce/Orders.php:585
816
+ #: includes/Commerce/Orders.php:820
817
  msgid "Remote ID not found."
818
  msgstr ""
819
 
821
  msgid "%s is not a valid shipping carrier code."
822
  msgstr ""
823
 
824
+ #: includes/Commerce/Orders.php:610
825
+ #: includes/Commerce/Orders.php:787
826
  msgid "No valid Facebook products were found."
827
  msgstr ""
828
 
829
+ #. translators: Placeholder: %s - sales channel name, like Facebook or Instagram
830
  #: includes/Commerce/Orders.php:628
 
 
831
  msgid "%s order fulfilled."
832
  msgstr ""
833
 
834
+ #. translators: Placeholders: %1$s - sales channel name, like Facebook or Instagram, %2$s - error message
835
  #: includes/Commerce/Orders.php:638
 
 
836
  msgid "%1$s order could not be fulfilled. %2$s"
837
  msgstr ""
838
 
844
  msgid "Remote ID for parent order not found."
845
  msgstr ""
846
 
847
+ #. translators: Placeholder: %s - sales channel name, like Facebook or Instagram
848
  #: includes/Commerce/Orders.php:719
 
 
849
  msgid "Order refunded on %s."
850
  msgstr ""
851
 
852
+ #. translators: Placeholders: %1$s - sales channel name, like Facebook or Instagram, %2$s - error message
853
  #: includes/Commerce/Orders.php:731
 
 
854
  msgid "Could not refund %1$s order: %2$s"
855
  msgstr ""
856
 
857
+ #. translators: Placeholder: %s - sales channel name, like Facebook or Instagram
858
  #: includes/Commerce/Orders.php:828
 
 
859
  msgid "%s order cancelled."
860
  msgstr ""
861
 
862
+ #. translators: Placeholders: %1$s - sales channel name, like Facebook or Instagram, %2$s - error message
863
  #: includes/Commerce/Orders.php:838
 
 
864
  msgid "%1$s order could not be cancelled. %2$s"
865
  msgstr ""
866
 
884
  msgid "Other"
885
  msgstr ""
886
 
887
+ #: includes/fbgraph.php:106
888
+ msgid "HTTP %1$s: %2$s"
889
+ msgstr ""
890
+
891
+ #: includes/fbinfobanner.php:212
892
+ msgid "Click and redirect."
893
+ msgstr ""
894
+
895
+ #: includes/fbinfobanner.php:213
896
+ msgid "Dismiss this notice."
897
+ msgstr ""
898
+
899
+ #: includes/fbinfobanner.php:213
900
+ msgid "Dismiss"
901
+ msgstr ""
902
+
903
+ #: includes/fbproductfeed.php:278
904
+ msgid "Could not create product catalog feed directory"
905
+ msgstr ""
906
+
907
+ #: includes/fbproductfeed.php:382
908
+ msgid "Could not open the product catalog temporary feed file for writing"
909
+ msgstr ""
910
+
911
+ #: includes/fbproductfeed.php:389
912
+ msgid "Could not open the product catalog feed file for writing"
913
+ msgstr ""
914
+
915
+ #: includes/fbproductfeed.php:453
916
+ msgid "Could not rename the product catalog feed file"
917
+ msgstr ""
918
+
919
+ #: includes/fbwpml.php:115
920
+ msgid "Facebook Visibility"
921
+ msgstr ""
922
+
923
+ #: includes/fbwpml.php:118
924
+ msgid "WooCommerce Products with languages that are selected here will be visible to customers who see your Facebook Shop."
925
+ msgstr ""
926
+
927
+ #: includes/fbwpml.php:135
928
+ msgid "Saved. An automated sync from Facebook will run every hour to update the catalog with any changes you've made."
929
+ msgstr ""
930
+
931
  #: includes/Handlers/Connection.php:298
932
  msgid "Connection successful!"
933
  msgstr ""
940
  msgid "Disconnection successful."
941
  msgstr ""
942
 
 
 
 
 
 
 
943
  #. translators: Placeholders: %s - Facebook page ID
944
+ #: includes/Handlers/Connection.php:442
945
  msgid "Page %s not authorized."
946
  msgstr ""
947
 
949
  msgid "You do not have permission to finish App Store login."
950
  msgstr ""
951
 
952
+ #: includes/Locale.php:181
953
+ msgctxt "language"
954
+ msgid "English (United States)"
955
+ msgstr ""
956
+
957
  #: includes/ProductSync/ProductValidator.php:195
958
  msgid "Product sync is globally disabled."
959
  msgstr ""
967
  msgstr ""
968
 
969
  #: includes/ProductSync/ProductValidator.php:234
970
+ msgid "This product cannot be synced to Facebook because it is hidden from your store catalog."
 
 
971
  msgstr ""
972
 
973
  #: includes/ProductSync/ProductValidator.php:249
987
  msgstr ""
988
 
989
  #: includes/ProductSync/ProductValidator.php:328
990
+ msgid "Product description is all capital letters. Please change the description to sentence case in order to allow synchronization of your product."
 
 
991
  msgstr ""
992
 
993
  #: includes/ProductSync/ProductValidator.php:331
995
  msgstr ""
996
 
997
  #: includes/ProductSync/ProductValidator.php:350
998
+ msgid "Product title is all capital letters. Please change the title to sentence case in order to allow synchronization of your product."
 
 
999
  msgstr ""
1000
 
1001
  #: includes/ProductSync/ProductValidator.php:353
1005
  #: includes/ProductSync/ProductValidator.php:377
1006
  msgid "Too many attributes selected for product. Use 4 or less."
1007
  msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/Debug/README.md DELETED
@@ -1,24 +0,0 @@
1
- # Debug
2
-
3
- ## Profiling Logger
4
-
5
- The profiling logger can be used to log the time and memory usage of a process in a single request.
6
- Results are logged to WooCommerce logs with the name `facebook_for_woocommerce_profiling`.
7
-
8
- ## Enabling
9
-
10
- Logging must be enabled with a constant in the `wp-config.php` file.
11
-
12
- `define( 'FACEBOOK_FOR_WOOCOMMERCE_PROFILING_LOG_ENABLED', true );`
13
-
14
- ## Code example
15
-
16
- ```php
17
- $profiling = facebook_for_woocommerce()->get_profiling_logger();
18
-
19
- $profiling->start( 'unique_process_name' );
20
-
21
- // Some slow code here
22
-
23
- $profiling->stop( 'unique_process_name' );
24
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: facebook, automattic, woothemes
3
  Tags: facebook, shop, catalog, advertise, pixel, product
4
  Requires at least: 4.4
5
  Tested up to: 6.0
6
- Stable tag: 2.6.24
7
  Requires PHP: 5.6 or greater
8
  MySQL: 5.6 or greater
9
  License: GPLv2 or later
@@ -39,6 +39,10 @@ When opening a bug on GitHub, please give us as many details as possible.
39
 
40
  == Changelog ==
41
 
 
 
 
 
42
  = 2.6.24 - 2022-09-27 =
43
  * Fix - Adds helpful admin notices for correct user roles.
44
  * Fix - Track purchase event flag in session variable instead post meta table.
3
  Tags: facebook, shop, catalog, advertise, pixel, product
4
  Requires at least: 4.4
5
  Tested up to: 6.0
6
+ Stable tag: 2.6.25
7
  Requires PHP: 5.6 or greater
8
  MySQL: 5.6 or greater
9
  License: GPLv2 or later
39
 
40
  == Changelog ==
41
 
42
+ = 2.6.25 - 2022-10-04 =
43
+ * Add - New filter (wc_facebook_product_group_default_variation) to allow customizing a product group's default variation.
44
+ * Update - Remove Skyverge's sake as a dependency from the extension build process.
45
+
46
  = 2.6.24 - 2022-09-27 =
47
  * Fix - Adds helpful admin notices for correct user roles.
48
  * Fix - Track purchase event flag in session variable instead post meta table.
vendor/autoload.php CHANGED
@@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
- return ComposerAutoloaderInit8035102579d2b598a135fccf060682fc::getLoader();
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInit2e29a369fecada7753232e4df9563ad4::getLoader();
vendor/composer/InstalledVersions.php CHANGED
@@ -28,7 +28,7 @@ class InstalledVersions
28
  {
29
  /**
30
  * @var mixed[]|null
31
- * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
32
  */
33
  private static $installed;
34
 
@@ -39,7 +39,7 @@ class InstalledVersions
39
 
40
  /**
41
  * @var array[]
42
- * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
43
  */
44
  private static $installedByVendor = array();
45
 
@@ -243,7 +243,7 @@ class InstalledVersions
243
 
244
  /**
245
  * @return array
246
- * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
247
  */
248
  public static function getRootPackage()
249
  {
@@ -257,7 +257,7 @@ class InstalledVersions
257
  *
258
  * @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.
259
  * @return array[]
260
- * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
261
  */
262
  public static function getRawData()
263
  {
@@ -280,7 +280,7 @@ class InstalledVersions
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
- * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
284
  */
285
  public static function getAllRawData()
286
  {
@@ -303,7 +303,7 @@ class InstalledVersions
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
- * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
307
  */
308
  public static function reload($data)
309
  {
@@ -313,7 +313,7 @@ class InstalledVersions
313
 
314
  /**
315
  * @return array[]
316
- * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
317
  */
318
  private static function getInstalled()
319
  {
28
  {
29
  /**
30
  * @var mixed[]|null
31
+ * @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<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
32
  */
33
  private static $installed;
34
 
39
 
40
  /**
41
  * @var array[]
42
+ * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
43
  */
44
  private static $installedByVendor = array();
45
 
243
 
244
  /**
245
  * @return array
246
+ * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
247
  */
248
  public static function getRootPackage()
249
  {
257
  *
258
  * @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.
259
  * @return array[]
260
+ * @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<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
261
  */
262
  public static function getRawData()
263
  {
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
+ * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
284
  */
285
  public static function getAllRawData()
286
  {
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
+ * @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<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
307
  */
308
  public static function reload($data)
309
  {
313
 
314
  /**
315
  * @return array[]
316
+ * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
317
  */
318
  private static function getInstalled()
319
  {
vendor/composer/autoload_classmap.php CHANGED
@@ -6,5 +6,205 @@ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
 
 
 
 
 
 
 
9
  'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\AbstractChainedJob' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/AbstractChainedJob.php',
10
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\AbstractJob' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/AbstractJob.php',
11
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\ChainedJobInterface' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/ChainedJobInterface.php',
12
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\JobInterface' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/JobInterface.php',
13
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Proxies\\ActionScheduler' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/Proxies/ActionScheduler.php',
14
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Proxies\\ActionSchedulerInterface' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/Proxies/ActionSchedulerInterface.php',
15
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Utilities\\BatchQueryOffset' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/Utilities/BatchQueryOffset.php',
16
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Utilities\\BatchSize' => $vendorDir . '/woocommerce/action-scheduler-job-framework/src/Utilities/BatchSize.php',
17
  'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
18
+ 'Composer\\Installers\\AglInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AglInstaller.php',
19
+ 'Composer\\Installers\\AimeosInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AimeosInstaller.php',
20
+ 'Composer\\Installers\\AnnotateCmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php',
21
+ 'Composer\\Installers\\AsgardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AsgardInstaller.php',
22
+ 'Composer\\Installers\\AttogramInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AttogramInstaller.php',
23
+ 'Composer\\Installers\\BaseInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BaseInstaller.php',
24
+ 'Composer\\Installers\\BitrixInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BitrixInstaller.php',
25
+ 'Composer\\Installers\\BonefishInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BonefishInstaller.php',
26
+ 'Composer\\Installers\\CakePHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php',
27
+ 'Composer\\Installers\\ChefInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ChefInstaller.php',
28
+ 'Composer\\Installers\\CiviCrmInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php',
29
+ 'Composer\\Installers\\ClanCatsFrameworkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php',
30
+ 'Composer\\Installers\\CockpitInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CockpitInstaller.php',
31
+ 'Composer\\Installers\\CodeIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php',
32
+ 'Composer\\Installers\\Concrete5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Concrete5Installer.php',
33
+ 'Composer\\Installers\\CraftInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
34
+ 'Composer\\Installers\\CroogoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
35
+ 'Composer\\Installers\\DecibelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
36
+ 'Composer\\Installers\\DframeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DframeInstaller.php',
37
+ 'Composer\\Installers\\DokuWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
38
+ 'Composer\\Installers\\DolibarrInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
39
+ 'Composer\\Installers\\DrupalInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
40
+ 'Composer\\Installers\\ElggInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ElggInstaller.php',
41
+ 'Composer\\Installers\\EliasisInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/EliasisInstaller.php',
42
+ 'Composer\\Installers\\ExpressionEngineInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php',
43
+ 'Composer\\Installers\\EzPlatformInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php',
44
+ 'Composer\\Installers\\FuelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelInstaller.php',
45
+ 'Composer\\Installers\\FuelphpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php',
46
+ 'Composer\\Installers\\GravInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/GravInstaller.php',
47
+ 'Composer\\Installers\\HuradInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/HuradInstaller.php',
48
+ 'Composer\\Installers\\ImageCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php',
49
+ 'Composer\\Installers\\Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Installer.php',
50
+ 'Composer\\Installers\\ItopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ItopInstaller.php',
51
+ 'Composer\\Installers\\JoomlaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
52
+ 'Composer\\Installers\\KanboardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KanboardInstaller.php',
53
+ 'Composer\\Installers\\KirbyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
54
+ 'Composer\\Installers\\KnownInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KnownInstaller.php',
55
+ 'Composer\\Installers\\KodiCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
56
+ 'Composer\\Installers\\KohanaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
57
+ 'Composer\\Installers\\LanManagementSystemInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php',
58
+ 'Composer\\Installers\\LaravelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LaravelInstaller.php',
59
+ 'Composer\\Installers\\LavaLiteInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php',
60
+ 'Composer\\Installers\\LithiumInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LithiumInstaller.php',
61
+ 'Composer\\Installers\\MODULEWorkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php',
62
+ 'Composer\\Installers\\MODXEvoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php',
63
+ 'Composer\\Installers\\MagentoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MagentoInstaller.php',
64
+ 'Composer\\Installers\\MajimaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MajimaInstaller.php',
65
+ 'Composer\\Installers\\MakoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MakoInstaller.php',
66
+ 'Composer\\Installers\\MantisBTInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php',
67
+ 'Composer\\Installers\\MauticInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MauticInstaller.php',
68
+ 'Composer\\Installers\\MayaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MayaInstaller.php',
69
+ 'Composer\\Installers\\MediaWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php',
70
+ 'Composer\\Installers\\MiaoxingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MiaoxingInstaller.php',
71
+ 'Composer\\Installers\\MicroweberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php',
72
+ 'Composer\\Installers\\ModxInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ModxInstaller.php',
73
+ 'Composer\\Installers\\MoodleInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MoodleInstaller.php',
74
+ 'Composer\\Installers\\OctoberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OctoberInstaller.php',
75
+ 'Composer\\Installers\\OntoWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php',
76
+ 'Composer\\Installers\\OsclassInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OsclassInstaller.php',
77
+ 'Composer\\Installers\\OxidInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OxidInstaller.php',
78
+ 'Composer\\Installers\\PPIInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PPIInstaller.php',
79
+ 'Composer\\Installers\\PantheonInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PantheonInstaller.php',
80
+ 'Composer\\Installers\\PhiftyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php',
81
+ 'Composer\\Installers\\PhpBBInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php',
82
+ 'Composer\\Installers\\PimcoreInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php',
83
+ 'Composer\\Installers\\PiwikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PiwikInstaller.php',
84
+ 'Composer\\Installers\\PlentymarketsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php',
85
+ 'Composer\\Installers\\Plugin' => $vendorDir . '/composer/installers/src/Composer/Installers/Plugin.php',
86
+ 'Composer\\Installers\\PortoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PortoInstaller.php',
87
+ 'Composer\\Installers\\PrestashopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php',
88
+ 'Composer\\Installers\\ProcessWireInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php',
89
+ 'Composer\\Installers\\PuppetInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PuppetInstaller.php',
90
+ 'Composer\\Installers\\PxcmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php',
91
+ 'Composer\\Installers\\RadPHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
92
+ 'Composer\\Installers\\ReIndexInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
93
+ 'Composer\\Installers\\Redaxo5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php',
94
+ 'Composer\\Installers\\RedaxoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
95
+ 'Composer\\Installers\\RoundcubeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
96
+ 'Composer\\Installers\\SMFInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
97
+ 'Composer\\Installers\\ShopwareInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php',
98
+ 'Composer\\Installers\\SilverStripeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php',
99
+ 'Composer\\Installers\\SiteDirectInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php',
100
+ 'Composer\\Installers\\StarbugInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/StarbugInstaller.php',
101
+ 'Composer\\Installers\\SyDESInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SyDESInstaller.php',
102
+ 'Composer\\Installers\\SyliusInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SyliusInstaller.php',
103
+ 'Composer\\Installers\\Symfony1Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
104
+ 'Composer\\Installers\\TYPO3CmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
105
+ 'Composer\\Installers\\TYPO3FlowInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
106
+ 'Composer\\Installers\\TaoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TaoInstaller.php',
107
+ 'Composer\\Installers\\TastyIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php',
108
+ 'Composer\\Installers\\TheliaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
109
+ 'Composer\\Installers\\TuskInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
110
+ 'Composer\\Installers\\UserFrostingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php',
111
+ 'Composer\\Installers\\VanillaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VanillaInstaller.php',
112
+ 'Composer\\Installers\\VgmcpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php',
113
+ 'Composer\\Installers\\WHMCSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php',
114
+ 'Composer\\Installers\\WinterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WinterInstaller.php',
115
+ 'Composer\\Installers\\WolfCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php',
116
+ 'Composer\\Installers\\WordPressInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WordPressInstaller.php',
117
+ 'Composer\\Installers\\YawikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/YawikInstaller.php',
118
+ 'Composer\\Installers\\ZendInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZendInstaller.php',
119
+ 'Composer\\Installers\\ZikulaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php',
120
+ 'SkyVerge\\WooCommerce\\Facebook\\AJAX' => $baseDir . '/includes/AJAX.php',
121
+ 'SkyVerge\\WooCommerce\\Facebook\\API' => $baseDir . '/includes/API.php',
122
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Group\\Products\\Read\\Request' => $baseDir . '/includes/API/Catalog/Product_Group/Products/Read/Request.php',
123
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Group\\Products\\Read\\Response' => $baseDir . '/includes/API/Catalog/Product_Group/Products/Read/Response.php',
124
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Item\\Find\\Request' => $baseDir . '/includes/API/Catalog/Product_Item/Find/Request.php',
125
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Item\\Response' => $baseDir . '/includes/API/Catalog/Product_Item/Response.php',
126
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Request' => $baseDir . '/includes/API/Catalog/Request.php',
127
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Response' => $baseDir . '/includes/API/Catalog/Response.php',
128
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Send_Item_Updates\\Request' => $baseDir . '/includes/API/Catalog/Send_Item_Updates/Request.php',
129
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Send_Item_Updates\\Response' => $baseDir . '/includes/API/Catalog/Send_Item_Updates/Response.php',
130
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Exceptions\\Request_Limit_Reached' => $baseDir . '/includes/API/Exceptions/Request_Limit_Reached.php',
131
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Messenger' => $baseDir . '/includes/API/FBE/Configuration/Messenger.php',
132
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Read\\Response' => $baseDir . '/includes/API/FBE/Configuration/Read/Response.php',
133
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Request' => $baseDir . '/includes/API/FBE/Configuration/Request.php',
134
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Update\\Request' => $baseDir . '/includes/API/FBE/Configuration/Update/Request.php',
135
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Installation\\Read\\Request' => $baseDir . '/includes/API/FBE/Installation/Read/Request.php',
136
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Installation\\Read\\Response' => $baseDir . '/includes/API/FBE/Installation/Read/Response.php',
137
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Installation\\Request' => $baseDir . '/includes/API/FBE/Installation/Request.php',
138
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Abstract_Request' => $baseDir . '/includes/API/Orders/Abstract_Request.php',
139
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Acknowledge\\Request' => $baseDir . '/includes/API/Orders/Acknowledge/Request.php',
140
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Cancel\\Request' => $baseDir . '/includes/API/Orders/Cancel/Request.php',
141
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Fulfillment\\Request' => $baseDir . '/includes/API/Orders/Fulfillment/Request.php',
142
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Order' => $baseDir . '/includes/API/Orders/Order.php',
143
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Read\\Request' => $baseDir . '/includes/API/Orders/Read/Request.php',
144
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Read\\Response' => $baseDir . '/includes/API/Orders/Read/Response.php',
145
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Refund\\Request' => $baseDir . '/includes/API/Orders/Refund/Request.php',
146
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Request' => $baseDir . '/includes/API/Orders/Request.php',
147
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Response' => $baseDir . '/includes/API/Orders/Response.php',
148
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Pages\\Read\\Request' => $baseDir . '/includes/API/Pages/Read/Request.php',
149
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Pages\\Read\\Response' => $baseDir . '/includes/API/Pages/Read/Response.php',
150
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Pixel\\Events\\Request' => $baseDir . '/includes/API/Pixel/Events/Request.php',
151
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Request' => $baseDir . '/includes/API/Request.php',
152
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Response' => $baseDir . '/includes/API/Response.php',
153
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Idempotent_Request' => $baseDir . '/includes/API/Traits/Idempotent_Request.php',
154
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Paginated_Response' => $baseDir . '/includes/API/Traits/Paginated_Response.php',
155
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Rate_Limited_API' => $baseDir . '/includes/API/Traits/Rate_Limited_API.php',
156
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Rate_Limited_Request' => $baseDir . '/includes/API/Traits/Rate_Limited_Request.php',
157
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Rate_Limited_Response' => $baseDir . '/includes/API/Traits/Rate_Limited_Response.php',
158
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\User\\Permissions\\Delete\\Request' => $baseDir . '/includes/API/User/Permissions/Delete/Request.php',
159
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\User\\Request' => $baseDir . '/includes/API/User/Request.php',
160
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\User\\Response' => $baseDir . '/includes/API/User/Response.php',
161
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin' => $baseDir . '/includes/Admin.php',
162
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Abstract_Settings_Screen' => $baseDir . '/includes/Admin/Abstract_Settings_Screen.php',
163
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Enhanced_Catalog_Attribute_Fields' => $baseDir . '/includes/Admin/Enhanced_Catalog_Attribute_Fields.php',
164
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Google_Product_Category_Field' => $baseDir . '/includes/Admin/Google_Product_Category_Field.php',
165
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Categories' => $baseDir . '/includes/Admin/Product_Categories.php',
166
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sets' => $baseDir . '/includes/Admin/Product_Sets.php',
167
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sync_Meta_Box' => $baseDir . '/includes/Admin/Product_Sync_Meta_Box.php',
168
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Products' => $baseDir . '/includes/Admin/Products.php',
169
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings' => $baseDir . '/includes/Admin/Settings.php',
170
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Advertise' => $baseDir . '/includes/Admin/Settings_Screens/Advertise.php',
171
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Connection' => $baseDir . '/includes/Admin/Settings_Screens/Connection.php',
172
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Messenger' => $baseDir . '/includes/Admin/Settings_Screens/Messenger.php',
173
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sets' => $baseDir . '/includes/Admin/Settings_Screens/Product_Sets.php',
174
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sync' => $baseDir . '/includes/Admin/Settings_Screens/Product_Sync.php',
175
+ 'SkyVerge\\WooCommerce\\Facebook\\Commerce' => $baseDir . '/includes/Commerce.php',
176
+ 'SkyVerge\\WooCommerce\\Facebook\\Commerce\\Orders' => $baseDir . '/includes/Commerce/Orders.php',
177
+ 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLogger' => $baseDir . '/includes/Debug/ProfilingLogger.php',
178
+ 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLoggerProcess' => $baseDir . '/includes/Debug/ProfilingLoggerProcess.php',
179
+ 'SkyVerge\\WooCommerce\\Facebook\\Events\\AAMSettings' => $baseDir . '/includes/Events/AAMSettings.php',
180
+ 'SkyVerge\\WooCommerce\\Facebook\\Events\\Event' => $baseDir . '/includes/Events/Event.php',
181
+ 'SkyVerge\\WooCommerce\\Facebook\\Events\\Normalizer' => $baseDir . '/includes/Events/Normalizer.php',
182
+ 'SkyVerge\\WooCommerce\\Facebook\\Feed\\FeedConfigurationDetection' => $baseDir . '/includes/Feed/FeedConfigurationDetection.php',
183
+ 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\Connection' => $baseDir . '/includes/Handlers/Connection.php',
184
+ 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\WebHook' => $baseDir . '/includes/Handlers/WebHook.php',
185
+ 'SkyVerge\\WooCommerce\\Facebook\\Integrations\\Bookings' => $baseDir . '/includes/Integrations/Bookings.php',
186
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\AbstractChainedJob' => $baseDir . '/includes/Jobs/AbstractChainedJob.php',
187
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\CleanupSkyvergeFrameworkJobOptions' => $baseDir . '/includes/Jobs/CleanupSkyvergeFrameworkJobOptions.php',
188
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\GenerateProductFeed' => $baseDir . '/includes/Jobs/GenerateProductFeed.php',
189
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\JobRegistry' => $baseDir . '/includes/Jobs/JobRegistry.php',
190
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\LoggingTrait' => $baseDir . '/includes/Jobs/LoggingTrait.php',
191
+ 'SkyVerge\\WooCommerce\\Facebook\\Lifecycle' => $baseDir . '/includes/Lifecycle.php',
192
+ 'SkyVerge\\WooCommerce\\Facebook\\Locale' => $baseDir . '/includes/Locale.php',
193
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSets\\Sync' => $baseDir . '/includes/ProductSets/Sync.php',
194
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductExcludedException' => $baseDir . '/includes/ProductSync/ProductExcludedException.php',
195
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductInvalidException' => $baseDir . '/includes/ProductSync/ProductInvalidException.php',
196
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductValidator' => $baseDir . '/includes/ProductSync/ProductValidator.php',
197
+ 'SkyVerge\\WooCommerce\\Facebook\\Product_Categories' => $baseDir . '/includes/Product_Categories.php',
198
+ 'SkyVerge\\WooCommerce\\Facebook\\Products' => $baseDir . '/includes/Products.php',
199
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\FBCategories' => $baseDir . '/includes/Products/FBCategories.php',
200
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Feed' => $baseDir . '/includes/Products/Feed.php',
201
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\GoogleProductTaxonomy' => $baseDir . '/includes/Products/GoogleProductTaxonomy.php',
202
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Stock' => $baseDir . '/includes/Products/Stock.php',
203
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync' => $baseDir . '/includes/Products/Sync.php',
204
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync\\Background' => $baseDir . '/includes/Products/Sync/Background.php',
205
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Handle_Virtual_Products_Variations' => $baseDir . '/includes/Utilities/Background_Handle_Virtual_Products_Variations.php',
206
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Remove_Duplicate_Visibility_Meta' => $baseDir . '/includes/Utilities/Background_Remove_Duplicate_Visibility_Meta.php',
207
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Heartbeat' => $baseDir . '/includes/Utilities/Heartbeat.php',
208
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Shipment' => $baseDir . '/includes/Utilities/Shipment.php',
209
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Tracker' => $baseDir . '/includes/Utilities/Tracker.php',
210
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit8035102579d2b598a135fccf060682fc
6
  {
7
  private static $loader;
8
 
@@ -24,12 +24,12 @@ class ComposerAutoloaderInit8035102579d2b598a135fccf060682fc
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit8035102579d2b598a135fccf060682fc', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit8035102579d2b598a135fccf060682fc', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
- call_user_func(\Composer\Autoload\ComposerStaticInit8035102579d2b598a135fccf060682fc::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit2e29a369fecada7753232e4df9563ad4
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit2e29a369fecada7753232e4df9563ad4', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit2e29a369fecada7753232e4df9563ad4', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInit2e29a369fecada7753232e4df9563ad4::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit8035102579d2b598a135fccf060682fc
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'S' =>
@@ -37,15 +37,215 @@ class ComposerStaticInit8035102579d2b598a135fccf060682fc
37
  );
38
 
39
  public static $classMap = array (
 
 
 
 
 
 
 
 
40
  'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  );
42
 
43
  public static function getInitializer(ClassLoader $loader)
44
  {
45
  return \Closure::bind(function () use ($loader) {
46
- $loader->prefixLengthsPsr4 = ComposerStaticInit8035102579d2b598a135fccf060682fc::$prefixLengthsPsr4;
47
- $loader->prefixDirsPsr4 = ComposerStaticInit8035102579d2b598a135fccf060682fc::$prefixDirsPsr4;
48
- $loader->classMap = ComposerStaticInit8035102579d2b598a135fccf060682fc::$classMap;
49
 
50
  }, null, ClassLoader::class);
51
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit2e29a369fecada7753232e4df9563ad4
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'S' =>
37
  );
38
 
39
  public static $classMap = array (
40
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\AbstractChainedJob' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/AbstractChainedJob.php',
41
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\AbstractJob' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/AbstractJob.php',
42
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\ChainedJobInterface' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/ChainedJobInterface.php',
43
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\JobInterface' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/JobInterface.php',
44
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Proxies\\ActionScheduler' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/Proxies/ActionScheduler.php',
45
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Proxies\\ActionSchedulerInterface' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/Proxies/ActionSchedulerInterface.php',
46
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Utilities\\BatchQueryOffset' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/Utilities/BatchQueryOffset.php',
47
+ 'Automattic\\WooCommerce\\ActionSchedulerJobFramework\\Utilities\\BatchSize' => __DIR__ . '/..' . '/woocommerce/action-scheduler-job-framework/src/Utilities/BatchSize.php',
48
  'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
49
+ 'Composer\\Installers\\AglInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AglInstaller.php',
50
+ 'Composer\\Installers\\AimeosInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AimeosInstaller.php',
51
+ 'Composer\\Installers\\AnnotateCmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php',
52
+ 'Composer\\Installers\\AsgardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AsgardInstaller.php',
53
+ 'Composer\\Installers\\AttogramInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AttogramInstaller.php',
54
+ 'Composer\\Installers\\BaseInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BaseInstaller.php',
55
+ 'Composer\\Installers\\BitrixInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BitrixInstaller.php',
56
+ 'Composer\\Installers\\BonefishInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BonefishInstaller.php',
57
+ 'Composer\\Installers\\CakePHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php',
58
+ 'Composer\\Installers\\ChefInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ChefInstaller.php',
59
+ 'Composer\\Installers\\CiviCrmInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php',
60
+ 'Composer\\Installers\\ClanCatsFrameworkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php',
61
+ 'Composer\\Installers\\CockpitInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CockpitInstaller.php',
62
+ 'Composer\\Installers\\CodeIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php',
63
+ 'Composer\\Installers\\Concrete5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Concrete5Installer.php',
64
+ 'Composer\\Installers\\CraftInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
65
+ 'Composer\\Installers\\CroogoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
66
+ 'Composer\\Installers\\DecibelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
67
+ 'Composer\\Installers\\DframeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DframeInstaller.php',
68
+ 'Composer\\Installers\\DokuWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
69
+ 'Composer\\Installers\\DolibarrInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
70
+ 'Composer\\Installers\\DrupalInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
71
+ 'Composer\\Installers\\ElggInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ElggInstaller.php',
72
+ 'Composer\\Installers\\EliasisInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/EliasisInstaller.php',
73
+ 'Composer\\Installers\\ExpressionEngineInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php',
74
+ 'Composer\\Installers\\EzPlatformInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php',
75
+ 'Composer\\Installers\\FuelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelInstaller.php',
76
+ 'Composer\\Installers\\FuelphpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php',
77
+ 'Composer\\Installers\\GravInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/GravInstaller.php',
78
+ 'Composer\\Installers\\HuradInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/HuradInstaller.php',
79
+ 'Composer\\Installers\\ImageCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php',
80
+ 'Composer\\Installers\\Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Installer.php',
81
+ 'Composer\\Installers\\ItopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ItopInstaller.php',
82
+ 'Composer\\Installers\\JoomlaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
83
+ 'Composer\\Installers\\KanboardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KanboardInstaller.php',
84
+ 'Composer\\Installers\\KirbyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
85
+ 'Composer\\Installers\\KnownInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KnownInstaller.php',
86
+ 'Composer\\Installers\\KodiCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
87
+ 'Composer\\Installers\\KohanaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
88
+ 'Composer\\Installers\\LanManagementSystemInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php',
89
+ 'Composer\\Installers\\LaravelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LaravelInstaller.php',
90
+ 'Composer\\Installers\\LavaLiteInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php',
91
+ 'Composer\\Installers\\LithiumInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LithiumInstaller.php',
92
+ 'Composer\\Installers\\MODULEWorkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php',
93
+ 'Composer\\Installers\\MODXEvoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php',
94
+ 'Composer\\Installers\\MagentoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MagentoInstaller.php',
95
+ 'Composer\\Installers\\MajimaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MajimaInstaller.php',
96
+ 'Composer\\Installers\\MakoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MakoInstaller.php',
97
+ 'Composer\\Installers\\MantisBTInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php',
98
+ 'Composer\\Installers\\MauticInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MauticInstaller.php',
99
+ 'Composer\\Installers\\MayaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MayaInstaller.php',
100
+ 'Composer\\Installers\\MediaWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php',
101
+ 'Composer\\Installers\\MiaoxingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MiaoxingInstaller.php',
102
+ 'Composer\\Installers\\MicroweberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php',
103
+ 'Composer\\Installers\\ModxInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ModxInstaller.php',
104
+ 'Composer\\Installers\\MoodleInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MoodleInstaller.php',
105
+ 'Composer\\Installers\\OctoberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OctoberInstaller.php',
106
+ 'Composer\\Installers\\OntoWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php',
107
+ 'Composer\\Installers\\OsclassInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OsclassInstaller.php',
108
+ 'Composer\\Installers\\OxidInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OxidInstaller.php',
109
+ 'Composer\\Installers\\PPIInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PPIInstaller.php',
110
+ 'Composer\\Installers\\PantheonInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PantheonInstaller.php',
111
+ 'Composer\\Installers\\PhiftyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php',
112
+ 'Composer\\Installers\\PhpBBInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php',
113
+ 'Composer\\Installers\\PimcoreInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php',
114
+ 'Composer\\Installers\\PiwikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PiwikInstaller.php',
115
+ 'Composer\\Installers\\PlentymarketsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php',
116
+ 'Composer\\Installers\\Plugin' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Plugin.php',
117
+ 'Composer\\Installers\\PortoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PortoInstaller.php',
118
+ 'Composer\\Installers\\PrestashopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php',
119
+ 'Composer\\Installers\\ProcessWireInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php',
120
+ 'Composer\\Installers\\PuppetInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PuppetInstaller.php',
121
+ 'Composer\\Installers\\PxcmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php',
122
+ 'Composer\\Installers\\RadPHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
123
+ 'Composer\\Installers\\ReIndexInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
124
+ 'Composer\\Installers\\Redaxo5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php',
125
+ 'Composer\\Installers\\RedaxoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
126
+ 'Composer\\Installers\\RoundcubeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
127
+ 'Composer\\Installers\\SMFInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
128
+ 'Composer\\Installers\\ShopwareInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php',
129
+ 'Composer\\Installers\\SilverStripeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php',
130
+ 'Composer\\Installers\\SiteDirectInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php',
131
+ 'Composer\\Installers\\StarbugInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/StarbugInstaller.php',
132
+ 'Composer\\Installers\\SyDESInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SyDESInstaller.php',
133
+ 'Composer\\Installers\\SyliusInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SyliusInstaller.php',
134
+ 'Composer\\Installers\\Symfony1Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
135
+ 'Composer\\Installers\\TYPO3CmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
136
+ 'Composer\\Installers\\TYPO3FlowInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
137
+ 'Composer\\Installers\\TaoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TaoInstaller.php',
138
+ 'Composer\\Installers\\TastyIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php',
139
+ 'Composer\\Installers\\TheliaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
140
+ 'Composer\\Installers\\TuskInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
141
+ 'Composer\\Installers\\UserFrostingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php',
142
+ 'Composer\\Installers\\VanillaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VanillaInstaller.php',
143
+ 'Composer\\Installers\\VgmcpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php',
144
+ 'Composer\\Installers\\WHMCSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php',
145
+ 'Composer\\Installers\\WinterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WinterInstaller.php',
146
+ 'Composer\\Installers\\WolfCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php',
147
+ 'Composer\\Installers\\WordPressInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WordPressInstaller.php',
148
+ 'Composer\\Installers\\YawikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/YawikInstaller.php',
149
+ 'Composer\\Installers\\ZendInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZendInstaller.php',
150
+ 'Composer\\Installers\\ZikulaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php',
151
+ 'SkyVerge\\WooCommerce\\Facebook\\AJAX' => __DIR__ . '/../..' . '/includes/AJAX.php',
152
+ 'SkyVerge\\WooCommerce\\Facebook\\API' => __DIR__ . '/../..' . '/includes/API.php',
153
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Group\\Products\\Read\\Request' => __DIR__ . '/../..' . '/includes/API/Catalog/Product_Group/Products/Read/Request.php',
154
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Group\\Products\\Read\\Response' => __DIR__ . '/../..' . '/includes/API/Catalog/Product_Group/Products/Read/Response.php',
155
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Item\\Find\\Request' => __DIR__ . '/../..' . '/includes/API/Catalog/Product_Item/Find/Request.php',
156
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Product_Item\\Response' => __DIR__ . '/../..' . '/includes/API/Catalog/Product_Item/Response.php',
157
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Request' => __DIR__ . '/../..' . '/includes/API/Catalog/Request.php',
158
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Response' => __DIR__ . '/../..' . '/includes/API/Catalog/Response.php',
159
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Send_Item_Updates\\Request' => __DIR__ . '/../..' . '/includes/API/Catalog/Send_Item_Updates/Request.php',
160
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Catalog\\Send_Item_Updates\\Response' => __DIR__ . '/../..' . '/includes/API/Catalog/Send_Item_Updates/Response.php',
161
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Exceptions\\Request_Limit_Reached' => __DIR__ . '/../..' . '/includes/API/Exceptions/Request_Limit_Reached.php',
162
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Messenger' => __DIR__ . '/../..' . '/includes/API/FBE/Configuration/Messenger.php',
163
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Read\\Response' => __DIR__ . '/../..' . '/includes/API/FBE/Configuration/Read/Response.php',
164
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Request' => __DIR__ . '/../..' . '/includes/API/FBE/Configuration/Request.php',
165
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Configuration\\Update\\Request' => __DIR__ . '/../..' . '/includes/API/FBE/Configuration/Update/Request.php',
166
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Installation\\Read\\Request' => __DIR__ . '/../..' . '/includes/API/FBE/Installation/Read/Request.php',
167
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Installation\\Read\\Response' => __DIR__ . '/../..' . '/includes/API/FBE/Installation/Read/Response.php',
168
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\FBE\\Installation\\Request' => __DIR__ . '/../..' . '/includes/API/FBE/Installation/Request.php',
169
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Abstract_Request' => __DIR__ . '/../..' . '/includes/API/Orders/Abstract_Request.php',
170
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Acknowledge\\Request' => __DIR__ . '/../..' . '/includes/API/Orders/Acknowledge/Request.php',
171
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Cancel\\Request' => __DIR__ . '/../..' . '/includes/API/Orders/Cancel/Request.php',
172
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Fulfillment\\Request' => __DIR__ . '/../..' . '/includes/API/Orders/Fulfillment/Request.php',
173
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Order' => __DIR__ . '/../..' . '/includes/API/Orders/Order.php',
174
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Read\\Request' => __DIR__ . '/../..' . '/includes/API/Orders/Read/Request.php',
175
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Read\\Response' => __DIR__ . '/../..' . '/includes/API/Orders/Read/Response.php',
176
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Refund\\Request' => __DIR__ . '/../..' . '/includes/API/Orders/Refund/Request.php',
177
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Request' => __DIR__ . '/../..' . '/includes/API/Orders/Request.php',
178
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Orders\\Response' => __DIR__ . '/../..' . '/includes/API/Orders/Response.php',
179
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Pages\\Read\\Request' => __DIR__ . '/../..' . '/includes/API/Pages/Read/Request.php',
180
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Pages\\Read\\Response' => __DIR__ . '/../..' . '/includes/API/Pages/Read/Response.php',
181
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Pixel\\Events\\Request' => __DIR__ . '/../..' . '/includes/API/Pixel/Events/Request.php',
182
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Request' => __DIR__ . '/../..' . '/includes/API/Request.php',
183
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Response' => __DIR__ . '/../..' . '/includes/API/Response.php',
184
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Idempotent_Request' => __DIR__ . '/../..' . '/includes/API/Traits/Idempotent_Request.php',
185
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Paginated_Response' => __DIR__ . '/../..' . '/includes/API/Traits/Paginated_Response.php',
186
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Rate_Limited_API' => __DIR__ . '/../..' . '/includes/API/Traits/Rate_Limited_API.php',
187
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Rate_Limited_Request' => __DIR__ . '/../..' . '/includes/API/Traits/Rate_Limited_Request.php',
188
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\Traits\\Rate_Limited_Response' => __DIR__ . '/../..' . '/includes/API/Traits/Rate_Limited_Response.php',
189
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\User\\Permissions\\Delete\\Request' => __DIR__ . '/../..' . '/includes/API/User/Permissions/Delete/Request.php',
190
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\User\\Request' => __DIR__ . '/../..' . '/includes/API/User/Request.php',
191
+ 'SkyVerge\\WooCommerce\\Facebook\\API\\User\\Response' => __DIR__ . '/../..' . '/includes/API/User/Response.php',
192
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin' => __DIR__ . '/../..' . '/includes/Admin.php',
193
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Abstract_Settings_Screen' => __DIR__ . '/../..' . '/includes/Admin/Abstract_Settings_Screen.php',
194
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Enhanced_Catalog_Attribute_Fields' => __DIR__ . '/../..' . '/includes/Admin/Enhanced_Catalog_Attribute_Fields.php',
195
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Google_Product_Category_Field' => __DIR__ . '/../..' . '/includes/Admin/Google_Product_Category_Field.php',
196
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Categories' => __DIR__ . '/../..' . '/includes/Admin/Product_Categories.php',
197
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sets' => __DIR__ . '/../..' . '/includes/Admin/Product_Sets.php',
198
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sync_Meta_Box' => __DIR__ . '/../..' . '/includes/Admin/Product_Sync_Meta_Box.php',
199
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Products' => __DIR__ . '/../..' . '/includes/Admin/Products.php',
200
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings' => __DIR__ . '/../..' . '/includes/Admin/Settings.php',
201
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Advertise' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Advertise.php',
202
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Connection' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Connection.php',
203
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Messenger' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Messenger.php',
204
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sets' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Product_Sets.php',
205
+ 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sync' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Product_Sync.php',
206
+ 'SkyVerge\\WooCommerce\\Facebook\\Commerce' => __DIR__ . '/../..' . '/includes/Commerce.php',
207
+ 'SkyVerge\\WooCommerce\\Facebook\\Commerce\\Orders' => __DIR__ . '/../..' . '/includes/Commerce/Orders.php',
208
+ 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLogger' => __DIR__ . '/../..' . '/includes/Debug/ProfilingLogger.php',
209
+ 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLoggerProcess' => __DIR__ . '/../..' . '/includes/Debug/ProfilingLoggerProcess.php',
210
+ 'SkyVerge\\WooCommerce\\Facebook\\Events\\AAMSettings' => __DIR__ . '/../..' . '/includes/Events/AAMSettings.php',
211
+ 'SkyVerge\\WooCommerce\\Facebook\\Events\\Event' => __DIR__ . '/../..' . '/includes/Events/Event.php',
212
+ 'SkyVerge\\WooCommerce\\Facebook\\Events\\Normalizer' => __DIR__ . '/../..' . '/includes/Events/Normalizer.php',
213
+ 'SkyVerge\\WooCommerce\\Facebook\\Feed\\FeedConfigurationDetection' => __DIR__ . '/../..' . '/includes/Feed/FeedConfigurationDetection.php',
214
+ 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\Connection' => __DIR__ . '/../..' . '/includes/Handlers/Connection.php',
215
+ 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\WebHook' => __DIR__ . '/../..' . '/includes/Handlers/WebHook.php',
216
+ 'SkyVerge\\WooCommerce\\Facebook\\Integrations\\Bookings' => __DIR__ . '/../..' . '/includes/Integrations/Bookings.php',
217
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\AbstractChainedJob' => __DIR__ . '/../..' . '/includes/Jobs/AbstractChainedJob.php',
218
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\CleanupSkyvergeFrameworkJobOptions' => __DIR__ . '/../..' . '/includes/Jobs/CleanupSkyvergeFrameworkJobOptions.php',
219
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\GenerateProductFeed' => __DIR__ . '/../..' . '/includes/Jobs/GenerateProductFeed.php',
220
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\JobRegistry' => __DIR__ . '/../..' . '/includes/Jobs/JobRegistry.php',
221
+ 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\LoggingTrait' => __DIR__ . '/../..' . '/includes/Jobs/LoggingTrait.php',
222
+ 'SkyVerge\\WooCommerce\\Facebook\\Lifecycle' => __DIR__ . '/../..' . '/includes/Lifecycle.php',
223
+ 'SkyVerge\\WooCommerce\\Facebook\\Locale' => __DIR__ . '/../..' . '/includes/Locale.php',
224
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSets\\Sync' => __DIR__ . '/../..' . '/includes/ProductSets/Sync.php',
225
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductExcludedException' => __DIR__ . '/../..' . '/includes/ProductSync/ProductExcludedException.php',
226
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductInvalidException' => __DIR__ . '/../..' . '/includes/ProductSync/ProductInvalidException.php',
227
+ 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductValidator' => __DIR__ . '/../..' . '/includes/ProductSync/ProductValidator.php',
228
+ 'SkyVerge\\WooCommerce\\Facebook\\Product_Categories' => __DIR__ . '/../..' . '/includes/Product_Categories.php',
229
+ 'SkyVerge\\WooCommerce\\Facebook\\Products' => __DIR__ . '/../..' . '/includes/Products.php',
230
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\FBCategories' => __DIR__ . '/../..' . '/includes/Products/FBCategories.php',
231
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Feed' => __DIR__ . '/../..' . '/includes/Products/Feed.php',
232
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\GoogleProductTaxonomy' => __DIR__ . '/../..' . '/includes/Products/GoogleProductTaxonomy.php',
233
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Stock' => __DIR__ . '/../..' . '/includes/Products/Stock.php',
234
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync' => __DIR__ . '/../..' . '/includes/Products/Sync.php',
235
+ 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync\\Background' => __DIR__ . '/../..' . '/includes/Products/Sync/Background.php',
236
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Handle_Virtual_Products_Variations' => __DIR__ . '/../..' . '/includes/Utilities/Background_Handle_Virtual_Products_Variations.php',
237
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Remove_Duplicate_Visibility_Meta' => __DIR__ . '/../..' . '/includes/Utilities/Background_Remove_Duplicate_Visibility_Meta.php',
238
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Heartbeat' => __DIR__ . '/../..' . '/includes/Utilities/Heartbeat.php',
239
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Shipment' => __DIR__ . '/../..' . '/includes/Utilities/Shipment.php',
240
+ 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Tracker' => __DIR__ . '/../..' . '/includes/Utilities/Tracker.php',
241
  );
242
 
243
  public static function getInitializer(ClassLoader $loader)
244
  {
245
  return \Closure::bind(function () use ($loader) {
246
+ $loader->prefixLengthsPsr4 = ComposerStaticInit2e29a369fecada7753232e4df9563ad4::$prefixLengthsPsr4;
247
+ $loader->prefixDirsPsr4 = ComposerStaticInit2e29a369fecada7753232e4df9563ad4::$prefixDirsPsr4;
248
+ $loader->classMap = ComposerStaticInit2e29a369fecada7753232e4df9563ad4::$classMap;
249
 
250
  }, null, ClassLoader::class);
251
  }
vendor/composer/installed.php CHANGED
@@ -1,31 +1,31 @@
1
  <?php return array(
2
  'root' => array(
3
- 'name' => 'facebookincubator/facebook-for-woocommerce',
4
- 'pretty_version' => 'dev-release/2.6.24',
5
- 'version' => 'dev-release/2.6.24',
6
- 'reference' => '36471d38a2f3ab8e533c52fcc6143d008dad1f37',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
 
 
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'composer/installers' => array(
14
  'pretty_version' => 'v1.12.0',
15
  'version' => '1.12.0.0',
16
- 'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
17
  'type' => 'composer-plugin',
18
  'install_path' => __DIR__ . '/./installers',
19
  'aliases' => array(),
 
20
  'dev_requirement' => false,
21
  ),
22
  'facebookincubator/facebook-for-woocommerce' => array(
23
- 'pretty_version' => 'dev-release/2.6.24',
24
- 'version' => 'dev-release/2.6.24',
25
- 'reference' => '36471d38a2f3ab8e533c52fcc6143d008dad1f37',
26
  'type' => 'wordpress-plugin',
27
  'install_path' => __DIR__ . '/../../',
28
  'aliases' => array(),
 
29
  'dev_requirement' => false,
30
  ),
31
  'roundcube/plugin-installer' => array(
@@ -43,19 +43,19 @@
43
  'skyverge/wc-plugin-framework' => array(
44
  'pretty_version' => '5.10.0',
45
  'version' => '5.10.0.0',
46
- 'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
47
  'type' => 'library',
48
  'install_path' => __DIR__ . '/../skyverge/wc-plugin-framework',
49
  'aliases' => array(),
 
50
  'dev_requirement' => false,
51
  ),
52
  'woocommerce/action-scheduler-job-framework' => array(
53
  'pretty_version' => '2.0.0',
54
  'version' => '2.0.0.0',
55
- 'reference' => 'b0b21b9cc87e476ba7f8817050b39274ea7d6732',
56
  'type' => 'library',
57
  'install_path' => __DIR__ . '/../woocommerce/action-scheduler-job-framework',
58
  'aliases' => array(),
 
59
  'dev_requirement' => false,
60
  ),
61
  ),
1
  <?php return array(
2
  'root' => array(
3
+ 'pretty_version' => 'dev-release/2.6.25',
4
+ 'version' => 'dev-release/2.6.25',
 
 
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => '3460cfb6c4a74f0ed4322a9ae4278f45d355576b',
9
+ 'name' => 'facebookincubator/facebook-for-woocommerce',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'composer/installers' => array(
14
  'pretty_version' => 'v1.12.0',
15
  'version' => '1.12.0.0',
 
16
  'type' => 'composer-plugin',
17
  'install_path' => __DIR__ . '/./installers',
18
  'aliases' => array(),
19
+ 'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
20
  'dev_requirement' => false,
21
  ),
22
  'facebookincubator/facebook-for-woocommerce' => array(
23
+ 'pretty_version' => 'dev-release/2.6.25',
24
+ 'version' => 'dev-release/2.6.25',
 
25
  'type' => 'wordpress-plugin',
26
  'install_path' => __DIR__ . '/../../',
27
  'aliases' => array(),
28
+ 'reference' => '3460cfb6c4a74f0ed4322a9ae4278f45d355576b',
29
  'dev_requirement' => false,
30
  ),
31
  'roundcube/plugin-installer' => array(
43
  'skyverge/wc-plugin-framework' => array(
44
  'pretty_version' => '5.10.0',
45
  'version' => '5.10.0.0',
 
46
  'type' => 'library',
47
  'install_path' => __DIR__ . '/../skyverge/wc-plugin-framework',
48
  'aliases' => array(),
49
+ 'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
50
  'dev_requirement' => false,
51
  ),
52
  'woocommerce/action-scheduler-job-framework' => array(
53
  'pretty_version' => '2.0.0',
54
  'version' => '2.0.0.0',
 
55
  'type' => 'library',
56
  'install_path' => __DIR__ . '/../woocommerce/action-scheduler-job-framework',
57
  'aliases' => array(),
58
+ 'reference' => 'b0b21b9cc87e476ba7f8817050b39274ea7d6732',
59
  'dev_requirement' => false,
60
  ),
61
  ),
vendor/composer/installers/.github/workflows/continuous-integration.yml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: "Continuous Integration"
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ env:
8
+ COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist"
9
+ SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT: "1"
10
+
11
+ jobs:
12
+ tests:
13
+ name: "CI"
14
+
15
+ runs-on: ubuntu-latest
16
+
17
+ strategy:
18
+ matrix:
19
+ php-version:
20
+ - "5.3"
21
+ - "5.4"
22
+ - "5.5"
23
+ - "5.6"
24
+ - "7.0"
25
+ - "7.1"
26
+ - "7.2"
27
+ - "7.3"
28
+ - "7.4"
29
+ - "8.0"
30
+ - "8.1"
31
+ dependencies: [locked]
32
+ include:
33
+ - php-version: "5.3"
34
+ dependencies: lowest
35
+ - php-version: "8.1"
36
+ dependencies: lowest
37
+
38
+ steps:
39
+ - name: "Checkout"
40
+ uses: "actions/checkout@v2"
41
+
42
+ - name: "Install PHP"
43
+ uses: "shivammathur/setup-php@v2"
44
+ with:
45
+ coverage: "none"
46
+ php-version: "${{ matrix.php-version }}"
47
+ tools: composer:snapshot
48
+
49
+ - name: Get composer cache directory
50
+ id: composercache
51
+ run: echo "::set-output name=dir::$(composer config cache-files-dir)"
52
+
53
+ - name: Cache dependencies
54
+ uses: actions/cache@v2
55
+ with:
56
+ path: ${{ steps.composercache.outputs.dir }}
57
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
58
+ restore-keys: ${{ runner.os }}-composer-
59
+
60
+ - name: "Handle lowest dependencies update"
61
+ if: "contains(matrix.dependencies, 'lowest')"
62
+ run: "echo \"COMPOSER_FLAGS=$COMPOSER_FLAGS --prefer-lowest\" >> $GITHUB_ENV"
63
+
64
+ - name: "Upgrade phpunit-bridge if needed for php 8 lowest build"
65
+ if: "contains(matrix.php-version, '8.')"
66
+ run: |
67
+ composer require symfony/phpunit-bridge:^5.3.3 --dev --no-update
68
+
69
+ - name: "Install latest dependencies"
70
+ run: |
71
+ # Remove PHPStan as it requires a newer PHP
72
+ composer remove phpstan/phpstan phpstan/phpstan-phpunit --dev --no-update
73
+ composer update ${{ env.COMPOSER_FLAGS }}
74
+
75
+ - name: "Run tests"
76
+ run: "vendor/bin/simple-phpunit --verbose"
vendor/composer/installers/.github/workflows/lint.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: "PHP Lint"
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ tests:
9
+ name: "Lint"
10
+
11
+ runs-on: ubuntu-latest
12
+
13
+ strategy:
14
+ matrix:
15
+ php-version:
16
+ - "5.3"
17
+ - "8.0"
18
+
19
+ steps:
20
+ - name: "Checkout"
21
+ uses: "actions/checkout@v2"
22
+
23
+ - name: "Install PHP"
24
+ uses: "shivammathur/setup-php@v2"
25
+ with:
26
+ coverage: "none"
27
+ php-version: "${{ matrix.php-version }}"
28
+
29
+ - name: "Lint PHP files"
30
+ run: "find src/ -type f -name '*.php' -print0 | xargs -0 -L1 -P4 -- php -l -f"
vendor/composer/installers/.github/workflows/phpstan.yml ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: "PHPStan"
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ env:
8
+ COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist"
9
+ SYMFONY_PHPUNIT_VERSION: ""
10
+
11
+ jobs:
12
+ tests:
13
+ name: "PHPStan"
14
+
15
+ runs-on: ubuntu-latest
16
+
17
+ strategy:
18
+ matrix:
19
+ php-version:
20
+ # pinned to 7.4 because we need PHPUnit 7.5 which does not support PHP 8
21
+ - "7.4"
22
+
23
+ steps:
24
+ - name: "Checkout"
25
+ uses: "actions/checkout@v2"
26
+
27
+ - name: "Install PHP"
28
+ uses: "shivammathur/setup-php@v2"
29
+ with:
30
+ coverage: "none"
31
+ php-version: "${{ matrix.php-version }}"
32
+
33
+ - name: Get composer cache directory
34
+ id: composercache
35
+ run: echo "::set-output name=dir::$(composer config cache-files-dir)"
36
+
37
+ - name: Cache dependencies
38
+ uses: actions/cache@v2
39
+ with:
40
+ path: ${{ steps.composercache.outputs.dir }}
41
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
42
+ restore-keys: ${{ runner.os }}-composer-
43
+
44
+ - name: "Install latest dependencies"
45
+ run: "composer update ${{ env.COMPOSER_FLAGS }}"
46
+
47
+ - name: Run PHPStan
48
+ # Locked to phpunit 7.5 here as newer ones have void return types which break inheritance
49
+ run: |
50
+ composer require --dev phpunit/phpunit:^7.5.20 --with-all-dependencies ${{ env.COMPOSER_FLAGS }}
51
+ vendor/bin/phpstan analyse
vendor/composer/installers/composer.json ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "composer/installers",
3
+ "type": "composer-plugin",
4
+ "license": "MIT",
5
+ "description": "A multi-framework Composer library installer",
6
+ "keywords": [
7
+ "installer",
8
+ "Aimeos",
9
+ "AGL",
10
+ "AnnotateCms",
11
+ "Attogram",
12
+ "Bitrix",
13
+ "CakePHP",
14
+ "Chef",
15
+ "Cockpit",
16
+ "CodeIgniter",
17
+ "concrete5",
18
+ "Craft",
19
+ "Croogo",
20
+ "DokuWiki",
21
+ "Dolibarr",
22
+ "Drupal",
23
+ "Elgg",
24
+ "Eliasis",
25
+ "ExpressionEngine",
26
+ "eZ Platform",
27
+ "FuelPHP",
28
+ "Grav",
29
+ "Hurad",
30
+ "ImageCMS",
31
+ "iTop",
32
+ "Joomla",
33
+ "Kanboard",
34
+ "Known",
35
+ "Kohana",
36
+ "Lan Management System",
37
+ "Laravel",
38
+ "Lavalite",
39
+ "Lithium",
40
+ "Magento",
41
+ "majima",
42
+ "Mako",
43
+ "MantisBT",
44
+ "Mautic",
45
+ "Maya",
46
+ "MODX",
47
+ "MODX Evo",
48
+ "MediaWiki",
49
+ "Miaoxing",
50
+ "OXID",
51
+ "osclass",
52
+ "MODULEWork",
53
+ "Moodle",
54
+ "Pantheon",
55
+ "Piwik",
56
+ "pxcms",
57
+ "phpBB",
58
+ "Plentymarkets",
59
+ "PPI",
60
+ "Puppet",
61
+ "Porto",
62
+ "ProcessWire",
63
+ "RadPHP",
64
+ "ReIndex",
65
+ "Roundcube",
66
+ "shopware",
67
+ "SilverStripe",
68
+ "SMF",
69
+ "Starbug",
70
+ "SyDES",
71
+ "Sylius",
72
+ "symfony",
73
+ "TastyIgniter",
74
+ "Thelia",
75
+ "TYPO3",
76
+ "WHMCS",
77
+ "WolfCMS",
78
+ "WordPress",
79
+ "YAWIK",
80
+ "Zend",
81
+ "Zikula"
82
+ ],
83
+ "homepage": "https://composer.github.io/installers/",
84
+ "authors": [
85
+ {
86
+ "name": "Kyle Robinson Young",
87
+ "email": "kyle@dontkry.com",
88
+ "homepage": "https://github.com/shama"
89
+ }
90
+ ],
91
+ "autoload": {
92
+ "psr-4": { "Composer\\Installers\\": "src/Composer/Installers" }
93
+ },
94
+ "autoload-dev": {
95
+ "psr-4": { "Composer\\Installers\\Test\\": "tests/Composer/Installers/Test" }
96
+ },
97
+ "extra": {
98
+ "class": "Composer\\Installers\\Plugin",
99
+ "branch-alias": {
100
+ "dev-main": "1.x-dev"
101
+ }
102
+ },
103
+ "replace": {
104
+ "shama/baton": "*",
105
+ "roundcube/plugin-installer": "*"
106
+ },
107
+ "require": {
108
+ "composer-plugin-api": "^1.0 || ^2.0"
109
+ },
110
+ "require-dev": {
111
+ "composer/composer": "1.6.* || ^2.0",
112
+ "composer/semver": "^1 || ^3",
113
+ "symfony/phpunit-bridge": "^4.2 || ^5",
114
+ "phpstan/phpstan": "^0.12.55",
115
+ "symfony/process": "^2.3",
116
+ "phpstan/phpstan-phpunit": "^0.12.16"
117
+ },
118
+ "scripts": {
119
+ "test": "SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 vendor/bin/simple-phpunit",
120
+ "phpstan": "vendor/bin/phpstan analyse"
121
+ }
122
+ }
vendor/skyverge/wc-plugin-framework/.dist.env ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WP_ROOT_FOLDER="/path/to/wp/root"
2
+ WP_ADMIN_PATH="/wp-admin"
3
+ ACCEPTANCE_DB_NAME="your_acceptance_db_name"
4
+ ACCEPTANCE_DB_HOST="localhost"
5
+ ACCEPTANCE_DB_USER="root"
6
+ ACCEPTANCE_DB_PASSWORD="root"
7
+ ACCEPTANCE_TABLE_PREFIX="wp_"
8
+ INTEGRATION_DB_NAME="your_integration_db_name"
9
+ INTEGRATION_DB_HOST="localhost"
10
+ INTEGRATION_DB_USER="root"
11
+ INTEGRATION_DB_PASSWORD="root"
12
+ INTEGRATION_TABLE_PREFIX="wp_"
13
+ WP_URL="https://your-test-url.test"
14
+ WP_DOMAIN="your-test-url.test"
15
+ ADMIN_EMAIL="admin@your-test-url.test"
16
+ ADMIN_USERNAME="admin"
17
+ ADMIN_PASSWORD="admin"
vendor/skyverge/wc-plugin-framework/.editorconfig ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is for unifying the coding style for different editors and IDEs
2
+ # editorconfig.org
3
+
4
+ # WordPress Coding Standards
5
+ # http://make.wordpress.org/core/handbook/coding-standards/
6
+
7
+ root = true
8
+
9
+ [*]
10
+ charset = utf-8
11
+ end_of_line = lf
12
+ insert_final_newline = true
13
+ trim_trailing_whitespace = true
14
+ indent_style = tab
15
+
16
+ [{.jshintrc,*.json,*.yml}]
17
+ indent_style = space
18
+ indent_size = 2
19
+
20
+ [{*.txt}]
21
+ end_of_line = crlf
vendor/skyverge/wc-plugin-framework/.gitignore ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # IDEs
2
+ /.settings
3
+ /.project
4
+ /.idea
5
+
6
+ # NPM packages used by Grunt.js
7
+ /node_modules
8
+
9
+ # NPM debug log
10
+ npm-debug.log
11
+
12
+ # Composer
13
+ /vendor
14
+
15
+ # PHPUnit
16
+ /tmp
17
+
18
+ # Misc
19
+ *.zip
20
+ .cache
21
+ .sass-cache*
22
+
23
+ # Tests
24
+ codeception.yml
25
+ .env
26
+ /tests/_data/dump.sql
vendor/skyverge/wc-plugin-framework/.travis.yml ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ sudo: false
2
+
3
+ language: php
4
+
5
+ notifications:
6
+ email: false
7
+
8
+ php:
9
+ - '7.3'
10
+
11
+ matrix:
12
+ fast_finish: true
13
+
14
+ services:
15
+ - mysql
16
+
17
+ cache:
18
+ apt: false
19
+
20
+ env:
21
+ global:
22
+ # the WordPress configuration must match the env variables in codeception.travis.yml
23
+ - WP_ROOT_FOLDER="/tmp/wordpress"
24
+ - WP_ADMIN_PATH="/wp-admin"
25
+ - WP_URL="http://127.0.0.1:8888"
26
+ - WP_DOMAIN="127.0.0.1:8888"
27
+ - ACCEPTANCE_TABLE_PREFIX="wp_"
28
+ - ACCEPTANCE_DB_NAME="memberships_acceptance"
29
+ - ACCEPTANCE_DB_HOST="127.0.0.1"
30
+ - ACCEPTANCE_DB_USER="root"
31
+ - ACCEPTANCE_DB_PASSWORD="" # intentionally blank
32
+ - INTEGRATION_DB_NAME="memberships_integration"
33
+ - INTEGRATION_DB_HOST="127.0.0.1"
34
+ - INTEGRATION_DB_USER="root"
35
+ - INTEGRATION_DB_PASSWORD="" # intentionally blank
36
+ - INTEGRATION_TABLE_PREFIX="wp_"
37
+ - ADMIN_EMAIL="admin@localhost.test"
38
+ - ADMIN_USERNAME="admin"
39
+ - ADMIN_PASSWORD="password"
40
+ matrix:
41
+ - WP_VERSION=latest
42
+
43
+ before_install:
44
+ # create the databases that will be used in the tests
45
+ - mysql -e "create database IF NOT EXISTS $ACCEPTANCE_DB_NAME;" -uroot
46
+ - mysql -e "create database IF NOT EXISTS $INTEGRATION_DB_NAME;" -uroot
47
+ # set up folders
48
+ - mkdir -p $WP_ROOT_FOLDER
49
+ - mkdir tools
50
+ # install wp-cli in the `tools` folder
51
+ - wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -P $(pwd)/tools/
52
+ - chmod +x tools/wp-cli.phar && mv tools/wp-cli.phar tools/wp
53
+ # append the `tools` folder to the PATH
54
+ - export PATH=$PATH:$(pwd)/tools
55
+ # prepend the `vendor/bin` folder the PATH
56
+ - export PATH=vendor/bin:$PATH
57
+
58
+ install:
59
+ - composer install --prefer-dist
60
+ - cd $WP_ROOT_FOLDER
61
+
62
+ # install and configure WordPress
63
+ - wp core download --version=$WP_VERSION
64
+ - wp config create --dbname="$ACCEPTANCE_DB_NAME" --dbuser="$ACCEPTANCE_DB_USER" --dbpass="$ACCEPTANCE_DB_PASSWORD" --dbhost="$ACCEPTANCE_DB_HOST" --dbprefix="$ACCEPTANCE_TABLE_PREFIX"
65
+ - wp core install --url="$WP_URL" --title="Test" --admin_user="$ADMIN_USERNAME" --admin_password="$ADMIN_PASSWORD" --admin_email="$ADMIN_EMAIL" --skip-email
66
+ - wp rewrite structure '/%postname%/' --hard
67
+ - wp core update-db
68
+
69
+ # copy the plugins to the plugins directory
70
+ - cp -r $TRAVIS_BUILD_DIR/tests/_support/plugins/test-plugin $WP_ROOT_FOLDER/wp-content/plugins/
71
+ - cp -r $TRAVIS_BUILD_DIR/tests/_support/plugins/gateway-test-plugin $WP_ROOT_FOLDER/wp-content/plugins/
72
+ - cp -r $TRAVIS_BUILD_DIR/woocommerce $WP_ROOT_FOLDER/wp-content/plugins/test-plugin/vendor/skyverge/wc-plugin-framework
73
+ - cp -r $TRAVIS_BUILD_DIR/woocommerce $WP_ROOT_FOLDER/wp-content/plugins/gateway-test-plugin/vendor/skyverge/wc-plugin-framework
74
+
75
+ # install & activate WooCommerce & the plugin
76
+ - wp plugin install woocommerce --activate
77
+ - wp plugin activate test-plugin
78
+ - wp plugin activate gateway-test-plugin
79
+
80
+ # verify the active plugins
81
+ - wp plugin list --status=active
82
+
83
+ # generate the db export
84
+ - wp db export $TRAVIS_BUILD_DIR/tests/_data/dump.sql
85
+
86
+ # make sure directory is writeable
87
+ - cd $TRAVIS_BUILD_DIR
88
+ - chmod -R 777 $WP_ROOT_FOLDER
89
+
90
+ before_script:
91
+ - php -S "$WP_DOMAIN" -t "$WP_ROOT_FOLDER" >/dev/null 2>&1 &
92
+ - phantomjs --webdriver=4444 >/dev/null 2>&1 &
93
+
94
+ script:
95
+ - codecept run unit
96
+ - codecept run integration
97
+ - codecept run acceptance
98
+
99
+ # change this when merged
100
+ branches:
101
+ only:
102
+ - master
vendor/skyverge/wc-plugin-framework/.tx/config ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ [main]
2
+ host = https://www.transifex.com
3
+
4
+ [wc-plugin-framework.wc-plugin-framework]
5
+ file_filter = woocommerce/i18n/languages/woocommerce-plugin-framework-<lang>.po
6
+ source_file = woocommerce/i18n/languages/woocommerce-plugin-framework.pot
7
+ source_lang = en
8
+ type = PO
9
+
vendor/skyverge/wc-plugin-framework/Gruntfile.js ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ // load all grunt tasks matching the `grunt-*` pattern
6
+ require( 'load-grunt-tasks' )( grunt );
7
+
8
+ // Show elapsed time
9
+ require( 'time-grunt' )( grunt );
10
+
11
+ var _ = require( 'underscore' );
12
+ var path = require( 'path' );
13
+
14
+ var gruntConfig = {};
15
+
16
+ // options
17
+ gruntConfig.options = {};
18
+
19
+ gruntConfig.pkg = grunt.file.readJSON( 'package.json' ),
20
+
21
+ // Set folder templates
22
+ gruntConfig.dirs = {
23
+ lang: 'woocommerce/i18n/languages',
24
+ general: {
25
+ css: 'woocommerce/assets/css',
26
+ js: 'woocommerce/assets/js'
27
+ },
28
+ gateway : {
29
+ css: 'woocommerce/payment-gateway/assets/css',
30
+ js: 'woocommerce/payment-gateway/assets/js'
31
+ }
32
+ };
33
+
34
+ function loadConfig( filepath ) {
35
+ var object = {};
36
+ var key;
37
+
38
+ filepath = path.normalize( path.resolve( process.cwd(), filepath ) + '/' )
39
+
40
+ var files = grunt.file.glob.sync( '*', { cwd: filepath } );
41
+
42
+ files.forEach( function( option ) {
43
+ key = option.replace(/\.js$/,'');
44
+ object = _.extend( object, require( filepath + option )( grunt ) );
45
+ });
46
+
47
+ return object;
48
+ };
49
+
50
+ // load task configs
51
+ gruntConfig = _.extend( gruntConfig, loadConfig( './grunt/configs/' ) );
52
+
53
+ // Init Grunt
54
+ grunt.initConfig( gruntConfig );
55
+
56
+ // Load custom tasks
57
+ grunt.loadTasks( 'grunt/tasks/' );
58
+
59
+ // Register update_translations task
60
+ grunt.registerTask( 'update_translations', [
61
+ 'makepot',
62
+ 'shell:tx_push',
63
+ 'shell:tx_pull',
64
+ 'potomo'
65
+ ] );
66
+
67
+ // Register build task
68
+ grunt.registerTask( 'build', [
69
+ 'coffee',
70
+ 'sass',
71
+ 'update_translations',
72
+ ] );
73
+
74
+ // Register default task
75
+ grunt.registerTask( 'default', [
76
+ 'coffee',
77
+ 'sass',
78
+ 'makepot',
79
+ 'shell:tx_push',
80
+ ] );
81
+
82
+ };
vendor/skyverge/wc-plugin-framework/codeception.dist.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ paths:
2
+ tests: tests
3
+ output: tests/_output
4
+ data: tests/_data
5
+ support: tests/_support
6
+ envs: tests/_envs
7
+ actor_suffix: Tester
8
+ extensions:
9
+ enabled:
10
+ - Codeception\Extension\RunFailed
11
+ commands:
12
+ - Codeception\Command\GenerateWPUnit
13
+ - Codeception\Command\GenerateWPRestApi
14
+ - Codeception\Command\GenerateWPRestController
15
+ - Codeception\Command\GenerateWPRestPostTypeController
16
+ - Codeception\Command\GenerateWPAjax
17
+ - Codeception\Command\GenerateWPCanonical
18
+ - Codeception\Command\GenerateWPXMLRPC
19
+ #- Codeception\Command\DbSnapshot
20
+ #- tad\Codeception\Command\SearchReplace
21
+ params:
22
+ - env
vendor/skyverge/wc-plugin-framework/codeception.local.yml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ extensions:
2
+ enabled:
3
+ - tad\WPBrowser\Extension\Copier
4
+ config:
5
+ tad\WPBrowser\Extension\Copier:
6
+ files:
7
+ woocommerce: 'tests/_support/plugins/test-plugin/vendor/skyverge/wc-plugin-framework/woocommerce'
8
+ tests/_support/plugins/test-plugin: '%WP_ROOT_FOLDER%/wp-content/plugins/test-plugin'
9
+ ./woocommerce: 'tests/_support/plugins/gateway-test-plugin/vendor/skyverge/wc-plugin-framework/woocommerce'
10
+ tests/_support/plugins/gateway-test-plugin: '%WP_ROOT_FOLDER%/wp-content/plugins/gateway-test-plugin'
11
+ params:
12
+ - .env
vendor/skyverge/wc-plugin-framework/composer.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "skyverge/wc-plugin-framework",
3
+ "description": "The official SkyVerge WooCommerce plugin framework",
4
+ "version": "5.10.0",
5
+ "require-dev": {
6
+ "lucatume/wp-browser": "^2.1"
7
+ }
8
+ }
vendor/skyverge/wc-plugin-framework/composer.lock ADDED
@@ -0,0 +1,7236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_readme": [
3
+ "This file locks the dependencies of your project to a known state",
4
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
+ "This file is @generated automatically"
6
+ ],
7
+ "content-hash": "b8c6edf9a53f9b7fbb494a16b6a7272f",
8
+ "packages": [],
9
+ "packages-dev": [
10
+ {
11
+ "name": "antecedent/patchwork",
12
+ "version": "2.1.11",
13
+ "source": {
14
+ "type": "git",
15
+ "url": "https://github.com/antecedent/patchwork.git",
16
+ "reference": "ff7aae02f1c5492716fe13d59de4cfc389b8c4b0"
17
+ },
18
+ "dist": {
19
+ "type": "zip",
20
+ "url": "https://api.github.com/repos/antecedent/patchwork/zipball/ff7aae02f1c5492716fe13d59de4cfc389b8c4b0",
21
+ "reference": "ff7aae02f1c5492716fe13d59de4cfc389b8c4b0",
22
+ "shasum": ""
23
+ },
24
+ "require": {
25
+ "php": ">=5.4.0"
26
+ },
27
+ "require-dev": {
28
+ "phpunit/phpunit": ">=4"
29
+ },
30
+ "type": "library",
31
+ "notification-url": "https://packagist.org/downloads/",
32
+ "license": [
33
+ "MIT"
34
+ ],
35
+ "authors": [
36
+ {
37
+ "name": "Ignas Rudaitis",
38
+ "email": "ignas.rudaitis@gmail.com"
39
+ }
40
+ ],
41
+ "description": "Method redefinition (monkey-patching) functionality for PHP.",
42
+ "homepage": "http://patchwork2.org/",
43
+ "keywords": [
44
+ "aop",
45
+ "aspect",
46
+ "interception",
47
+ "monkeypatching",
48
+ "redefinition",
49
+ "runkit",
50
+ "testing"
51
+ ],
52
+ "time": "2019-10-26T07:10:56+00:00"
53
+ },
54
+ {
55
+ "name": "behat/gherkin",
56
+ "version": "v4.6.0",
57
+ "source": {
58
+ "type": "git",
59
+ "url": "https://github.com/Behat/Gherkin.git",
60
+ "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
61
+ },
62
+ "dist": {
63
+ "type": "zip",
64
+ "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
65
+ "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
66
+ "shasum": ""
67
+ },
68
+ "require": {
69
+ "php": ">=5.3.1"
70
+ },
71
+ "require-dev": {
72
+ "phpunit/phpunit": "~4.5|~5",
73
+ "symfony/phpunit-bridge": "~2.7|~3|~4",
74
+ "symfony/yaml": "~2.3|~3|~4"
75
+ },
76
+ "suggest": {
77
+ "symfony/yaml": "If you want to parse features, represented in YAML files"
78
+ },
79
+ "type": "library",
80
+ "extra": {
81
+ "branch-alias": {
82
+ "dev-master": "4.4-dev"
83
+ }
84
+ },
85
+ "autoload": {
86
+ "psr-0": {
87
+ "Behat\\Gherkin": "src/"
88
+ }
89
+ },
90
+ "notification-url": "https://packagist.org/downloads/",
91
+ "license": [
92
+ "MIT"
93
+ ],
94
+ "authors": [
95
+ {
96
+ "name": "Konstantin Kudryashov",
97
+ "email": "ever.zet@gmail.com",
98
+ "homepage": "http://everzet.com"
99
+ }
100
+ ],
101
+ "description": "Gherkin DSL parser for PHP 5.3",
102
+ "homepage": "http://behat.org/",
103
+ "keywords": [
104
+ "BDD",
105
+ "Behat",
106
+ "Cucumber",
107
+ "DSL",
108
+ "gherkin",
109
+ "parser"
110
+ ],
111
+ "time": "2019-01-16T14:22:17+00:00"
112
+ },
113
+ {
114
+ "name": "codeception/codeception",
115
+ "version": "3.1.2",
116
+ "source": {
117
+ "type": "git",
118
+ "url": "https://github.com/Codeception/Codeception.git",
119
+ "reference": "5ea172de7b1b2e61dcdd50d73f8368886c549fb4"
120
+ },
121
+ "dist": {
122
+ "type": "zip",
123
+ "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5ea172de7b1b2e61dcdd50d73f8368886c549fb4",
124
+ "reference": "5ea172de7b1b2e61dcdd50d73f8368886c549fb4",
125
+ "shasum": ""
126
+ },
127
+ "require": {
128
+ "behat/gherkin": "^4.4.0",
129
+ "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3",
130
+ "codeception/stub": "^2.0 | ^3.0",
131
+ "ext-curl": "*",
132
+ "ext-json": "*",
133
+ "ext-mbstring": "*",
134
+ "facebook/webdriver": "^1.6.0",
135
+ "guzzlehttp/guzzle": "^6.3.0",
136
+ "guzzlehttp/psr7": "~1.4",
137
+ "hoa/console": "~3.0",
138
+ "php": ">=5.6.0 <8.0",
139
+ "symfony/browser-kit": ">=2.7 <5.0",
140
+ "symfony/console": ">=2.7 <5.0",
141
+ "symfony/css-selector": ">=2.7 <5.0",
142
+ "symfony/dom-crawler": ">=2.7 <5.0",
143
+ "symfony/event-dispatcher": ">=2.7 <5.0",
144
+ "symfony/finder": ">=2.7 <5.0",
145
+ "symfony/yaml": ">=2.7 <5.0"
146
+ },
147
+ "require-dev": {
148
+ "codeception/specify": "~0.3",
149
+ "doctrine/annotations": "^1",
150
+ "doctrine/data-fixtures": "^1",
151
+ "doctrine/orm": "^2",
152
+ "flow/jsonpath": "~0.2",
153
+ "monolog/monolog": "~1.8",
154
+ "pda/pheanstalk": "~3.0",
155
+ "php-amqplib/php-amqplib": "~2.4",
156
+ "predis/predis": "^1.0",
157
+ "ramsey/uuid-doctrine": "^1.5",
158
+ "squizlabs/php_codesniffer": "~2.0",
159
+ "symfony/process": ">=2.7 <5.0",
160
+ "vlucas/phpdotenv": "^3.0"
161
+ },
162
+ "suggest": {
163
+ "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
164
+ "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests",
165
+ "codeception/specify": "BDD-style code blocks",
166
+ "codeception/verify": "BDD-style assertions",
167
+ "flow/jsonpath": "For using JSONPath in REST module",
168
+ "league/factory-muffin": "For DataFactory module",
169
+ "league/factory-muffin-faker": "For Faker support in DataFactory module",
170
+ "phpseclib/phpseclib": "for SFTP option in FTP Module",
171
+ "stecman/symfony-console-completion": "For BASH autocompletion",
172
+ "symfony/phpunit-bridge": "For phpunit-bridge support"
173
+ },
174
+ "bin": [
175
+ "codecept"
176
+ ],
177
+ "type": "library",
178
+ "extra": {
179
+ "branch-alias": []
180
+ },
181
+ "autoload": {
182
+ "psr-4": {
183
+ "Codeception\\": "src/Codeception",
184
+ "Codeception\\Extension\\": "ext"
185
+ }
186
+ },
187
+ "notification-url": "https://packagist.org/downloads/",
188
+ "license": [
189
+ "MIT"
190
+ ],
191
+ "authors": [
192
+ {
193
+ "name": "Michael Bodnarchuk",
194
+ "email": "davert@mail.ua",
195
+ "homepage": "http://codegyre.com"
196
+ }
197
+ ],
198
+ "description": "BDD-style testing framework",
199
+ "homepage": "http://codeception.com/",
200
+ "keywords": [
201
+ "BDD",
202
+ "TDD",
203
+ "acceptance testing",
204
+ "functional testing",
205
+ "unit testing"
206
+ ],
207
+ "time": "2019-10-19T13:15:55+00:00"
208
+ },
209
+ {
210
+ "name": "codeception/phpunit-wrapper",
211
+ "version": "8.1.0",
212
+ "source": {
213
+ "type": "git",
214
+ "url": "https://github.com/Codeception/phpunit-wrapper.git",
215
+ "reference": "ee0c1fa08ef6e7f86e3592eccb57139110e5913d"
216
+ },
217
+ "dist": {
218
+ "type": "zip",
219
+ "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/ee0c1fa08ef6e7f86e3592eccb57139110e5913d",
220
+ "reference": "ee0c1fa08ef6e7f86e3592eccb57139110e5913d",
221
+ "shasum": ""
222
+ },
223
+ "require": {
224
+ "php": ">=7.2",
225
+ "phpunit/php-code-coverage": "^7.0",
226
+ "phpunit/phpunit": "^8.0",
227
+ "sebastian/comparator": "^3.0",
228
+ "sebastian/diff": "^3.0"
229
+ },
230
+ "require-dev": {
231
+ "codeception/specify": "*",
232
+ "vlucas/phpdotenv": "^3.0"
233
+ },
234
+ "type": "library",
235
+ "autoload": {
236
+ "psr-4": {
237
+ "Codeception\\PHPUnit\\": "src\\"
238
+ }
239
+ },
240
+ "notification-url": "https://packagist.org/downloads/",
241
+ "license": [
242
+ "MIT"
243
+ ],
244
+ "authors": [
245
+ {
246
+ "name": "Davert",
247
+ "email": "davert.php@resend.cc"
248
+ }
249
+ ],
250
+ "description": "PHPUnit classes used by Codeception",
251
+ "time": "2019-11-24T15:30:35+00:00"
252
+ },
253
+ {
254
+ "name": "codeception/stub",
255
+ "version": "3.6.0",
256
+ "source": {
257
+ "type": "git",
258
+ "url": "https://github.com/Codeception/Stub.git",
259
+ "reference": "94874f511ab1025b1f4cb927884cdda5004ece64"
260
+ },
261
+ "dist": {
262
+ "type": "zip",
263
+ "url": "https://api.github.com/repos/Codeception/Stub/zipball/94874f511ab1025b1f4cb927884cdda5004ece64",
264
+ "reference": "94874f511ab1025b1f4cb927884cdda5004ece64",
265
+ "shasum": ""
266
+ },
267
+ "require": {
268
+ "phpunit/phpunit": "^8.4"
269
+ },
270
+ "type": "library",
271
+ "autoload": {
272
+ "psr-4": {
273
+ "Codeception\\": "src/"
274
+ }
275
+ },
276
+ "notification-url": "https://packagist.org/downloads/",
277
+ "license": [
278
+ "MIT"
279
+ ],
280
+ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
281
+ "time": "2019-11-23T20:11:30+00:00"
282
+ },
283
+ {
284
+ "name": "composer/ca-bundle",
285
+ "version": "1.2.5",
286
+ "source": {
287
+ "type": "git",
288
+ "url": "https://github.com/composer/ca-bundle.git",
289
+ "reference": "62e8fc2dc550e5d6d8c9360c7721662670f58149"
290
+ },
291
+ "dist": {
292
+ "type": "zip",
293
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/62e8fc2dc550e5d6d8c9360c7721662670f58149",
294
+ "reference": "62e8fc2dc550e5d6d8c9360c7721662670f58149",
295
+ "shasum": ""
296
+ },
297
+ "require": {
298
+ "ext-openssl": "*",
299
+ "ext-pcre": "*",
300
+ "php": "^5.3.2 || ^7.0 || ^8.0"
301
+ },
302
+ "require-dev": {
303
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
304
+ "psr/log": "^1.0",
305
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
306
+ },
307
+ "type": "library",
308
+ "extra": {
309
+ "branch-alias": {
310
+ "dev-master": "1.x-dev"
311
+ }
312
+ },
313
+ "autoload": {
314
+ "psr-4": {
315
+ "Composer\\CaBundle\\": "src"
316
+ }
317
+ },
318
+ "notification-url": "https://packagist.org/downloads/",
319
+ "license": [
320
+ "MIT"
321
+ ],
322
+ "authors": [
323
+ {
324
+ "name": "Jordi Boggiano",
325
+ "email": "j.boggiano@seld.be",
326
+ "homepage": "http://seld.be"
327
+ }
328
+ ],
329
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
330
+ "keywords": [
331
+ "cabundle",
332
+ "cacert",
333
+ "certificate",
334
+ "ssl",
335
+ "tls"
336
+ ],
337
+ "time": "2019-12-11T14:44:42+00:00"
338
+ },
339
+ {
340
+ "name": "composer/composer",
341
+ "version": "1.9.1",
342
+ "source": {
343
+ "type": "git",
344
+ "url": "https://github.com/composer/composer.git",
345
+ "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f"
346
+ },
347
+ "dist": {
348
+ "type": "zip",
349
+ "url": "https://api.github.com/repos/composer/composer/zipball/bb01f2180df87ce7992b8331a68904f80439dd2f",
350
+ "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f",
351
+ "shasum": ""
352
+ },
353
+ "require": {
354
+ "composer/ca-bundle": "^1.0",
355
+ "composer/semver": "^1.0",
356
+ "composer/spdx-licenses": "^1.2",
357
+ "composer/xdebug-handler": "^1.1",
358
+ "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
359
+ "php": "^5.3.2 || ^7.0",
360
+ "psr/log": "^1.0",
361
+ "seld/jsonlint": "^1.4",
362
+ "seld/phar-utils": "^1.0",
363
+ "symfony/console": "^2.7 || ^3.0 || ^4.0",
364
+ "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
365
+ "symfony/finder": "^2.7 || ^3.0 || ^4.0",
366
+ "symfony/process": "^2.7 || ^3.0 || ^4.0"
367
+ },
368
+ "conflict": {
369
+ "symfony/console": "2.8.38"
370
+ },
371
+ "require-dev": {
372
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
373
+ "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
374
+ },
375
+ "suggest": {
376
+ "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
377
+ "ext-zip": "Enabling the zip extension allows you to unzip archives",
378
+ "ext-zlib": "Allow gzip compression of HTTP requests"
379
+ },
380
+ "bin": [
381
+ "bin/composer"
382
+ ],
383
+ "type": "library",
384
+ "extra": {
385
+ "branch-alias": {
386
+ "dev-master": "1.9-dev"
387
+ }
388
+ },
389
+ "autoload": {
390
+ "psr-4": {
391
+ "Composer\\": "src/Composer"
392
+ }
393
+ },
394
+ "notification-url": "https://packagist.org/downloads/",
395
+ "license": [
396
+ "MIT"
397
+ ],
398
+ "authors": [
399
+ {
400
+ "name": "Nils Adermann",
401
+ "email": "naderman@naderman.de",
402
+ "homepage": "http://www.naderman.de"
403
+ },
404
+ {
405
+ "name": "Jordi Boggiano",
406
+ "email": "j.boggiano@seld.be",
407
+ "homepage": "http://seld.be"
408
+ }
409
+ ],
410
+ "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
411
+ "homepage": "https://getcomposer.org/",
412
+ "keywords": [
413
+ "autoload",
414
+ "dependency",
415
+ "package"
416
+ ],
417
+ "time": "2019-11-01T16:20:17+00:00"
418
+ },
419
+ {
420
+ "name": "composer/semver",
421
+ "version": "1.5.0",
422
+ "source": {
423
+ "type": "git",
424
+ "url": "https://github.com/composer/semver.git",
425
+ "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e"
426
+ },
427
+ "dist": {
428
+ "type": "zip",
429
+ "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e",
430
+ "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e",
431
+ "shasum": ""
432
+ },
433
+ "require": {
434
+ "php": "^5.3.2 || ^7.0"
435
+ },
436
+ "require-dev": {
437
+ "phpunit/phpunit": "^4.5 || ^5.0.5",
438
+ "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
439
+ },
440
+ "type": "library",
441
+ "extra": {
442
+ "branch-alias": {
443
+ "dev-master": "1.x-dev"
444
+ }
445
+ },
446
+ "autoload": {
447
+ "psr-4": {
448
+ "Composer\\Semver\\": "src"
449
+ }
450
+ },
451
+ "notification-url": "https://packagist.org/downloads/",
452
+ "license": [
453
+ "MIT"
454
+ ],
455
+ "authors": [
456
+ {
457
+ "name": "Nils Adermann",
458
+ "email": "naderman@naderman.de",
459
+ "homepage": "http://www.naderman.de"
460
+ },
461
+ {
462
+ "name": "Jordi Boggiano",
463
+ "email": "j.boggiano@seld.be",
464
+ "homepage": "http://seld.be"
465
+ },
466
+ {
467
+ "name": "Rob Bast",
468
+ "email": "rob.bast@gmail.com",
469
+ "homepage": "http://robbast.nl"
470
+ }
471
+ ],
472
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
473
+ "keywords": [
474
+ "semantic",
475
+ "semver",
476
+ "validation",
477
+ "versioning"
478
+ ],
479
+ "time": "2019-03-19T17:25:45+00:00"
480
+ },
481
+ {
482
+ "name": "composer/spdx-licenses",
483
+ "version": "1.5.2",
484
+ "source": {
485
+ "type": "git",
486
+ "url": "https://github.com/composer/spdx-licenses.git",
487
+ "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5"
488
+ },
489
+ "dist": {
490
+ "type": "zip",
491
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5",
492
+ "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5",
493
+ "shasum": ""
494
+ },
495
+ "require": {
496
+ "php": "^5.3.2 || ^7.0 || ^8.0"
497
+ },
498
+ "require-dev": {
499
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
500
+ },
501
+ "type": "library",
502
+ "extra": {
503
+ "branch-alias": {
504
+ "dev-master": "1.x-dev"
505
+ }
506
+ },
507
+ "autoload": {
508
+ "psr-4": {
509
+ "Composer\\Spdx\\": "src"
510
+ }
511
+ },
512
+ "notification-url": "https://packagist.org/downloads/",
513
+ "license": [
514
+ "MIT"
515
+ ],
516
+ "authors": [
517
+ {
518
+ "name": "Nils Adermann",
519
+ "email": "naderman@naderman.de",
520
+ "homepage": "http://www.naderman.de"
521
+ },
522
+ {
523
+ "name": "Jordi Boggiano",
524
+ "email": "j.boggiano@seld.be",
525
+ "homepage": "http://seld.be"
526
+ },
527
+ {
528
+ "name": "Rob Bast",
529
+ "email": "rob.bast@gmail.com",
530
+ "homepage": "http://robbast.nl"
531
+ }
532
+ ],
533
+ "description": "SPDX licenses list and validation library.",
534
+ "keywords": [
535
+ "license",
536
+ "spdx",
537
+ "validator"
538
+ ],
539
+ "time": "2019-07-29T10:31:59+00:00"
540
+ },
541
+ {
542
+ "name": "composer/xdebug-handler",
543
+ "version": "1.4.0",
544
+ "source": {
545
+ "type": "git",
546
+ "url": "https://github.com/composer/xdebug-handler.git",
547
+ "reference": "cbe23383749496fe0f373345208b79568e4bc248"
548
+ },
549
+ "dist": {
550
+ "type": "zip",
551
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248",
552
+ "reference": "cbe23383749496fe0f373345208b79568e4bc248",
553
+ "shasum": ""
554
+ },
555
+ "require": {
556
+ "php": "^5.3.2 || ^7.0 || ^8.0",
557
+ "psr/log": "^1.0"
558
+ },
559
+ "require-dev": {
560
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
561
+ },
562
+ "type": "library",
563
+ "autoload": {
564
+ "psr-4": {
565
+ "Composer\\XdebugHandler\\": "src"
566
+ }
567
+ },
568
+ "notification-url": "https://packagist.org/downloads/",
569
+ "license": [
570
+ "MIT"
571
+ ],
572
+ "authors": [
573
+ {
574
+ "name": "John Stevenson",
575
+ "email": "john-stevenson@blueyonder.co.uk"
576
+ }
577
+ ],
578
+ "description": "Restarts a process without Xdebug.",
579
+ "keywords": [
580
+ "Xdebug",
581
+ "performance"
582
+ ],
583
+ "time": "2019-11-06T16:40:04+00:00"
584
+ },
585
+ {
586
+ "name": "cweagans/composer-patches",
587
+ "version": "1.6.7",
588
+ "source": {
589
+ "type": "git",
590
+ "url": "https://github.com/cweagans/composer-patches.git",
591
+ "reference": "2e6f72a2ad8d59cd7e2b729f218bf42adb14f590"
592
+ },
593
+ "dist": {
594
+ "type": "zip",
595
+ "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/2e6f72a2ad8d59cd7e2b729f218bf42adb14f590",
596
+ "reference": "2e6f72a2ad8d59cd7e2b729f218bf42adb14f590",
597
+ "shasum": ""
598
+ },
599
+ "require": {
600
+ "composer-plugin-api": "^1.0",
601
+ "php": ">=5.3.0"
602
+ },
603
+ "require-dev": {
604
+ "composer/composer": "~1.0",
605
+ "phpunit/phpunit": "~4.6"
606
+ },
607
+ "type": "composer-plugin",
608
+ "extra": {
609
+ "class": "cweagans\\Composer\\Patches"
610
+ },
611
+ "autoload": {
612
+ "psr-4": {
613
+ "cweagans\\Composer\\": "src"
614
+ }
615
+ },
616
+ "notification-url": "https://packagist.org/downloads/",
617
+ "license": [
618
+ "BSD-3-Clause"
619
+ ],
620
+ "authors": [
621
+ {
622
+ "name": "Cameron Eagans",
623
+ "email": "me@cweagans.net"
624
+ }
625
+ ],
626
+ "description": "Provides a way to patch Composer packages.",
627
+ "time": "2019-08-29T20:11:49+00:00"
628
+ },
629
+ {
630
+ "name": "dg/mysql-dump",
631
+ "version": "v1.5.1",
632
+ "source": {
633
+ "type": "git",
634
+ "url": "https://github.com/dg/MySQL-dump.git",
635
+ "reference": "e0e287b715b43293773a8b0edf8514f606e01780"
636
+ },
637
+ "dist": {
638
+ "type": "zip",
639
+ "url": "https://api.github.com/repos/dg/MySQL-dump/zipball/e0e287b715b43293773a8b0edf8514f606e01780",
640
+ "reference": "e0e287b715b43293773a8b0edf8514f606e01780",
641
+ "shasum": ""
642
+ },
643
+ "require": {
644
+ "php": ">=5.6"
645
+ },
646
+ "type": "library",
647
+ "autoload": {
648
+ "classmap": [
649
+ "src/"
650
+ ]
651
+ },
652
+ "notification-url": "https://packagist.org/downloads/",
653
+ "license": [
654
+ "BSD-3-Clause"
655
+ ],
656
+ "authors": [
657
+ {
658
+ "name": "David Grudl",
659
+ "homepage": "http://davidgrudl.com"
660
+ }
661
+ ],
662
+ "description": "MySQL database dump.",
663
+ "homepage": "https://github.com/dg/MySQL-dump",
664
+ "keywords": [
665
+ "mysql"
666
+ ],
667
+ "time": "2019-09-10T21:36:25+00:00"
668
+ },
669
+ {
670
+ "name": "doctrine/inflector",
671
+ "version": "1.3.1",
672
+ "source": {
673
+ "type": "git",
674
+ "url": "https://github.com/doctrine/inflector.git",
675
+ "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1"
676
+ },
677
+ "dist": {
678
+ "type": "zip",
679
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
680
+ "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
681
+ "shasum": ""
682
+ },
683
+ "require": {
684
+ "php": "^7.1"
685
+ },
686
+ "require-dev": {
687
+ "phpunit/phpunit": "^6.2"
688
+ },
689
+ "type": "library",
690
+ "extra": {
691
+ "branch-alias": {
692
+ "dev-master": "1.3.x-dev"
693
+ }
694
+ },
695
+ "autoload": {
696
+ "psr-4": {
697
+ "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
698
+ }
699
+ },
700
+ "notification-url": "https://packagist.org/downloads/",
701
+ "license": [
702
+ "MIT"
703
+ ],
704
+ "authors": [
705
+ {
706
+ "name": "Guilherme Blanco",
707
+ "email": "guilhermeblanco@gmail.com"
708
+ },
709
+ {
710
+ "name": "Roman Borschel",
711
+ "email": "roman@code-factory.org"
712
+ },
713
+ {
714
+ "name": "Benjamin Eberlei",
715
+ "email": "kontakt@beberlei.de"
716
+ },
717
+ {
718
+ "name": "Jonathan Wage",
719
+ "email": "jonwage@gmail.com"
720
+ },
721
+ {
722
+ "name": "Johannes Schmitt",
723
+ "email": "schmittjoh@gmail.com"
724
+ }
725
+ ],
726
+ "description": "Common String Manipulations with regard to casing and singular/plural rules.",
727
+ "homepage": "http://www.doctrine-project.org",
728
+ "keywords": [
729
+ "inflection",
730
+ "pluralize",
731
+ "singularize",
732
+ "string"
733
+ ],
734
+ "time": "2019-10-30T19:59:35+00:00"
735
+ },
736
+ {
737
+ "name": "doctrine/instantiator",
738
+ "version": "1.3.0",
739
+ "source": {
740
+ "type": "git",
741
+ "url": "https://github.com/doctrine/instantiator.git",
742
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
743
+ },
744
+ "dist": {
745
+ "type": "zip",
746
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
747
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
748
+ "shasum": ""
749
+ },
750
+ "require": {
751
+ "php": "^7.1"
752
+ },
753
+ "require-dev": {
754
+ "doctrine/coding-standard": "^6.0",
755
+ "ext-pdo": "*",
756
+ "ext-phar": "*",
757
+ "phpbench/phpbench": "^0.13",
758
+ "phpstan/phpstan-phpunit": "^0.11",
759
+ "phpstan/phpstan-shim": "^0.11",
760
+ "phpunit/phpunit": "^7.0"
761
+ },
762
+ "type": "library",
763
+ "extra": {
764
+ "branch-alias": {
765
+ "dev-master": "1.2.x-dev"
766
+ }
767
+ },
768
+ "autoload": {
769
+ "psr-4": {
770
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
771
+ }
772
+ },
773
+ "notification-url": "https://packagist.org/downloads/",
774
+ "license": [
775
+ "MIT"
776
+ ],
777
+ "authors": [
778
+ {
779
+ "name": "Marco Pivetta",
780
+ "email": "ocramius@gmail.com",
781
+ "homepage": "http://ocramius.github.com/"
782
+ }
783
+ ],
784
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
785
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
786
+ "keywords": [
787
+ "constructor",
788
+ "instantiate"
789
+ ],
790
+ "time": "2019-10-21T16:45:58+00:00"
791
+ },
792
+ {
793
+ "name": "facebook/webdriver",
794
+ "version": "1.7.1",
795
+ "source": {
796
+ "type": "git",
797
+ "url": "https://github.com/facebook/php-webdriver.git",
798
+ "reference": "e43de70f3c7166169d0f14a374505392734160e5"
799
+ },
800
+ "dist": {
801
+ "type": "zip",
802
+ "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5",
803
+ "reference": "e43de70f3c7166169d0f14a374505392734160e5",
804
+ "shasum": ""
805
+ },
806
+ "require": {
807
+ "ext-curl": "*",
808
+ "ext-json": "*",
809
+ "ext-mbstring": "*",
810
+ "ext-zip": "*",
811
+ "php": "^5.6 || ~7.0",
812
+ "symfony/process": "^2.8 || ^3.1 || ^4.0"
813
+ },
814
+ "require-dev": {
815
+ "friendsofphp/php-cs-fixer": "^2.0",
816
+ "jakub-onderka/php-parallel-lint": "^0.9.2",
817
+ "php-coveralls/php-coveralls": "^2.0",
818
+ "php-mock/php-mock-phpunit": "^1.1",
819
+ "phpunit/phpunit": "^5.7",
820
+ "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0",
821
+ "squizlabs/php_codesniffer": "^2.6",
822
+ "symfony/var-dumper": "^3.3 || ^4.0"
823
+ },
824
+ "suggest": {
825
+ "ext-SimpleXML": "For Firefox profile creation"
826
+ },
827
+ "type": "library",
828
+ "extra": {
829
+ "branch-alias": {
830
+ "dev-community": "1.5-dev"
831
+ }
832
+ },
833
+ "autoload": {
834
+ "psr-4": {
835
+ "Facebook\\WebDriver\\": "lib/"
836
+ }
837
+ },
838
+ "notification-url": "https://packagist.org/downloads/",
839
+ "license": [
840
+ "Apache-2.0"
841
+ ],
842
+ "description": "A PHP client for Selenium WebDriver",
843
+ "homepage": "https://github.com/facebook/php-webdriver",
844
+ "keywords": [
845
+ "facebook",
846
+ "php",
847
+ "selenium",
848
+ "webdriver"
849
+ ],
850
+ "time": "2019-06-13T08:02:18+00:00"
851
+ },
852
+ {
853
+ "name": "gettext/gettext",
854
+ "version": "v4.8.2",
855
+ "source": {
856
+ "type": "git",
857
+ "url": "https://github.com/php-gettext/Gettext.git",
858
+ "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a"
859
+ },
860
+ "dist": {
861
+ "type": "zip",
862
+ "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/e474f872f2c8636cf53fd283ec4ce1218f3d236a",
863
+ "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a",
864
+ "shasum": ""
865
+ },
866
+ "require": {
867
+ "gettext/languages": "^2.3",
868
+ "php": ">=5.4.0"
869
+ },
870
+ "require-dev": {
871
+ "illuminate/view": "*",
872
+ "phpunit/phpunit": "^4.8|^5.7|^6.5",
873
+ "squizlabs/php_codesniffer": "^3.0",
874
+ "symfony/yaml": "~2",
875
+ "twig/extensions": "*",
876
+ "twig/twig": "^1.31|^2.0"
877
+ },
878
+ "suggest": {
879
+ "illuminate/view": "Is necessary if you want to use the Blade extractor",
880
+ "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator",
881
+ "twig/extensions": "Is necessary if you want to use the Twig extractor",
882
+ "twig/twig": "Is necessary if you want to use the Twig extractor"
883
+ },
884
+ "type": "library",
885
+ "autoload": {
886
+ "psr-4": {
887
+ "Gettext\\": "src"
888
+ }
889
+ },
890
+ "notification-url": "https://packagist.org/downloads/",
891
+ "license": [
892
+ "MIT"
893
+ ],
894
+ "authors": [
895
+ {
896
+ "name": "Oscar Otero",
897
+ "email": "oom@oscarotero.com",
898
+ "homepage": "http://oscarotero.com",
899
+ "role": "Developer"
900
+ }
901
+ ],
902
+ "description": "PHP gettext manager",
903
+ "homepage": "https://github.com/oscarotero/Gettext",
904
+ "keywords": [
905
+ "JS",
906
+ "gettext",
907
+ "i18n",
908
+ "mo",
909
+ "po",
910
+ "translation"
911
+ ],
912
+ "time": "2019-12-02T10:21:14+00:00"
913
+ },
914
+ {
915
+ "name": "gettext/languages",
916
+ "version": "2.6.0",
917
+ "source": {
918
+ "type": "git",
919
+ "url": "https://github.com/php-gettext/Languages.git",
920
+ "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618"
921
+ },
922
+ "dist": {
923
+ "type": "zip",
924
+ "url": "https://api.github.com/repos/php-gettext/Languages/zipball/38ea0482f649e0802e475f0ed19fa993bcb7a618",
925
+ "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618",
926
+ "shasum": ""
927
+ },
928
+ "require": {
929
+ "php": ">=5.3"
930
+ },
931
+ "require-dev": {
932
+ "friendsofphp/php-cs-fixer": "^2.16.0",
933
+ "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4"
934
+ },
935
+ "bin": [
936
+ "bin/export-plural-rules"
937
+ ],
938
+ "type": "library",
939
+ "autoload": {
940
+ "psr-4": {
941
+ "Gettext\\Languages\\": "src/"
942
+ }
943
+ },
944
+ "notification-url": "https://packagist.org/downloads/",
945
+ "license": [
946
+ "MIT"
947
+ ],
948
+ "authors": [
949
+ {
950
+ "name": "Michele Locati",
951
+ "email": "mlocati@gmail.com",
952
+ "role": "Developer"
953
+ }
954
+ ],
955
+ "description": "gettext languages with plural rules",
956
+ "homepage": "https://github.com/php-gettext/Languages",
957
+ "keywords": [
958
+ "cldr",
959
+ "i18n",
960
+ "internationalization",
961
+ "l10n",
962
+ "language",
963
+ "languages",
964
+ "localization",
965
+ "php",
966
+ "plural",
967
+ "plural rules",
968
+ "plurals",
969
+ "translate",
970
+ "translations",
971
+ "unicode"
972
+ ],
973
+ "time": "2019-11-13T10:30:21+00:00"
974
+ },
975
+ {
976
+ "name": "gumlet/php-image-resize",
977
+ "version": "1.9.2",
978
+ "source": {
979
+ "type": "git",
980
+ "url": "https://github.com/gumlet/php-image-resize.git",
981
+ "reference": "06339a9c1b167acd58173db226f57957a6617547"
982
+ },
983
+ "dist": {
984
+ "type": "zip",
985
+ "url": "https://api.github.com/repos/gumlet/php-image-resize/zipball/06339a9c1b167acd58173db226f57957a6617547",
986
+ "reference": "06339a9c1b167acd58173db226f57957a6617547",
987
+ "shasum": ""
988
+ },
989
+ "require": {
990
+ "ext-fileinfo": "*",
991
+ "ext-gd": "*",
992
+ "php": ">=5.5.0"
993
+ },
994
+ "require-dev": {
995
+ "apigen/apigen": "^4.1",
996
+ "ext-exif": "*",
997
+ "ext-gd": "*",
998
+ "php-coveralls/php-coveralls": "^2.1",
999
+ "phpunit/phpunit": "^4.8"
1000
+ },
1001
+ "suggest": {
1002
+ "ext-exif": "Auto-rotate jpeg files"
1003
+ },
1004
+ "type": "library",
1005
+ "autoload": {
1006
+ "psr-4": {
1007
+ "Gumlet\\": "lib/"
1008
+ }
1009
+ },
1010
+ "notification-url": "https://packagist.org/downloads/",
1011
+ "license": [
1012
+ "MIT"
1013
+ ],
1014
+ "authors": [
1015
+ {
1016
+ "name": "Aditya Patadia",
1017
+ "homepage": "http://aditya.patadia.org/"
1018
+ }
1019
+ ],
1020
+ "description": "PHP class to re-size and scale images",
1021
+ "homepage": "https://github.com/gumlet/php-image-resize",
1022
+ "keywords": [
1023
+ "image",
1024
+ "php",
1025
+ "resize",
1026
+ "scale"
1027
+ ],
1028
+ "time": "2019-01-01T13:53:00+00:00"
1029
+ },
1030
+ {
1031
+ "name": "guzzlehttp/guzzle",
1032
+ "version": "6.5.0",
1033
+ "source": {
1034
+ "type": "git",
1035
+ "url": "https://github.com/guzzle/guzzle.git",
1036
+ "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5"
1037
+ },
1038
+ "dist": {
1039
+ "type": "zip",
1040
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
1041
+ "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
1042
+ "shasum": ""
1043
+ },
1044
+ "require": {
1045
+ "ext-json": "*",
1046
+ "guzzlehttp/promises": "^1.0",
1047
+ "guzzlehttp/psr7": "^1.6.1",
1048
+ "php": ">=5.5"
1049
+ },
1050
+ "require-dev": {
1051
+ "ext-curl": "*",
1052
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
1053
+ "psr/log": "^1.1"
1054
+ },
1055
+ "suggest": {
1056
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
1057
+ "psr/log": "Required for using the Log middleware"
1058
+ },
1059
+ "type": "library",
1060
+ "extra": {
1061
+ "branch-alias": {
1062
+ "dev-master": "6.5-dev"
1063
+ }
1064
+ },
1065
+ "autoload": {
1066
+ "psr-4": {
1067
+ "GuzzleHttp\\": "src/"
1068
+ },
1069
+ "files": [
1070
+ "src/functions_include.php"
1071
+ ]
1072
+ },
1073
+ "notification-url": "https://packagist.org/downloads/",
1074
+ "license": [
1075
+ "MIT"
1076
+ ],
1077
+ "authors": [
1078
+ {
1079
+ "name": "Michael Dowling",
1080
+ "email": "mtdowling@gmail.com",
1081
+ "homepage": "https://github.com/mtdowling"
1082
+ }
1083
+ ],
1084
+ "description": "Guzzle is a PHP HTTP client library",
1085
+ "homepage": "http://guzzlephp.org/",
1086
+ "keywords": [
1087
+ "client",
1088
+ "curl",
1089
+ "framework",
1090
+ "http",
1091
+ "http client",
1092
+ "rest",
1093
+ "web service"
1094
+ ],
1095
+ "time": "2019-12-07T18:20:45+00:00"
1096
+ },
1097
+ {
1098
+ "name": "guzzlehttp/promises",
1099
+ "version": "v1.3.1",
1100
+ "source": {
1101
+ "type": "git",
1102
+ "url": "https://github.com/guzzle/promises.git",
1103
+ "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
1104
+ },
1105
+ "dist": {
1106
+ "type": "zip",
1107
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
1108
+ "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
1109
+ "shasum": ""
1110
+ },
1111
+ "require": {
1112
+ "php": ">=5.5.0"
1113
+ },
1114
+ "require-dev": {
1115
+ "phpunit/phpunit": "^4.0"
1116
+ },
1117
+ "type": "library",
1118
+ "extra": {
1119
+ "branch-alias": {
1120
+ "dev-master": "1.4-dev"
1121
+ }
1122
+ },
1123
+ "autoload": {
1124
+ "psr-4": {
1125
+ "GuzzleHttp\\Promise\\": "src/"
1126
+ },
1127
+ "files": [
1128
+ "src/functions_include.php"
1129
+ ]
1130
+ },
1131
+ "notification-url": "https://packagist.org/downloads/",
1132
+ "license": [
1133
+ "MIT"
1134
+ ],
1135
+ "authors": [
1136
+ {
1137
+ "name": "Michael Dowling",
1138
+ "email": "mtdowling@gmail.com",
1139
+ "homepage": "https://github.com/mtdowling"
1140
+ }
1141
+ ],
1142
+ "description": "Guzzle promises library",
1143
+ "keywords": [
1144
+ "promise"
1145
+ ],
1146
+ "time": "2016-12-20T10:07:11+00:00"
1147
+ },
1148
+ {
1149
+ "name": "guzzlehttp/psr7",
1150
+ "version": "1.6.1",
1151
+ "source": {
1152
+ "type": "git",
1153
+ "url": "https://github.com/guzzle/psr7.git",
1154
+ "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
1155
+ },
1156
+ "dist": {
1157
+ "type": "zip",
1158
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
1159
+ "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
1160
+ "shasum": ""
1161
+ },
1162
+ "require": {
1163
+ "php": ">=5.4.0",
1164
+ "psr/http-message": "~1.0",
1165
+ "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
1166
+ },
1167
+ "provide": {
1168
+ "psr/http-message-implementation": "1.0"
1169
+ },
1170
+ "require-dev": {
1171
+ "ext-zlib": "*",
1172
+ "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
1173
+ },
1174
+ "suggest": {
1175
+ "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
1176
+ },
1177
+ "type": "library",
1178
+ "extra": {
1179
+ "branch-alias": {
1180
+ "dev-master": "1.6-dev"
1181
+ }
1182
+ },
1183
+ "autoload": {
1184
+ "psr-4": {
1185
+ "GuzzleHttp\\Psr7\\": "src/"
1186
+ },
1187
+ "files": [
1188
+ "src/functions_include.php"
1189
+ ]
1190
+ },
1191
+ "notification-url": "https://packagist.org/downloads/",
1192
+ "license": [
1193
+ "MIT"
1194
+ ],
1195
+ "authors": [
1196
+ {
1197
+ "name": "Michael Dowling",
1198
+ "email": "mtdowling@gmail.com",
1199
+ "homepage": "https://github.com/mtdowling"
1200
+ },
1201
+ {
1202
+ "name": "Tobias Schultze",
1203
+ "homepage": "https://github.com/Tobion"
1204
+ }
1205
+ ],
1206
+ "description": "PSR-7 message implementation that also provides common utility methods",
1207
+ "keywords": [
1208
+ "http",
1209
+ "message",
1210
+ "psr-7",
1211
+ "request",
1212
+ "response",
1213
+ "stream",
1214
+ "uri",
1215
+ "url"
1216
+ ],
1217
+ "time": "2019-07-01T23:21:34+00:00"
1218
+ },
1219
+ {
1220
+ "name": "hautelook/phpass",
1221
+ "version": "0.3.5",
1222
+ "source": {
1223
+ "type": "git",
1224
+ "url": "https://github.com/hautelook/phpass.git",
1225
+ "reference": "b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd"
1226
+ },
1227
+ "dist": {
1228
+ "type": "zip",
1229
+ "url": "https://api.github.com/repos/hautelook/phpass/zipball/b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd",
1230
+ "reference": "b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd",
1231
+ "shasum": ""
1232
+ },
1233
+ "require": {
1234
+ "php": ">=5.3.3"
1235
+ },
1236
+ "type": "library",
1237
+ "autoload": {
1238
+ "psr-0": {
1239
+ "Hautelook": "src/"
1240
+ }
1241
+ },
1242
+ "notification-url": "https://packagist.org/downloads/",
1243
+ "license": [
1244
+ "Public Domain"
1245
+ ],
1246
+ "authors": [
1247
+ {
1248
+ "name": "Solar Designer",
1249
+ "email": "solar@openwall.com",
1250
+ "homepage": "http://openwall.com/phpass/"
1251
+ }
1252
+ ],
1253
+ "description": "Portable PHP password hashing framework",
1254
+ "homepage": "http://github.com/hautelook/phpass/",
1255
+ "keywords": [
1256
+ "blowfish",
1257
+ "crypt",
1258
+ "password",
1259
+ "security"
1260
+ ],
1261
+ "time": "2012-08-31T00:00:00+00:00"
1262
+ },
1263
+ {
1264
+ "name": "hoa/consistency",
1265
+ "version": "1.17.05.02",
1266
+ "source": {
1267
+ "type": "git",
1268
+ "url": "https://github.com/hoaproject/Consistency.git",
1269
+ "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f"
1270
+ },
1271
+ "dist": {
1272
+ "type": "zip",
1273
+ "url": "https://api.github.com/repos/hoaproject/Consistency/zipball/fd7d0adc82410507f332516faf655b6ed22e4c2f",
1274
+ "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f",
1275
+ "shasum": ""
1276
+ },
1277
+ "require": {
1278
+ "hoa/exception": "~1.0",
1279
+ "php": ">=5.5.0"
1280
+ },
1281
+ "require-dev": {
1282
+ "hoa/stream": "~1.0",
1283
+ "hoa/test": "~2.0"
1284
+ },
1285
+ "type": "library",
1286
+ "extra": {
1287
+ "branch-alias": {
1288
+ "dev-master": "1.x-dev"
1289
+ }
1290
+ },
1291
+ "autoload": {
1292
+ "psr-4": {
1293
+ "Hoa\\Consistency\\": "."
1294
+ },
1295
+ "files": [
1296
+ "Prelude.php"
1297
+ ]
1298
+ },
1299
+ "notification-url": "https://packagist.org/downloads/",
1300
+ "license": [
1301
+ "BSD-3-Clause"
1302
+ ],
1303
+ "authors": [
1304
+ {
1305
+ "name": "Ivan Enderlin",
1306
+ "email": "ivan.enderlin@hoa-project.net"
1307
+ },
1308
+ {
1309
+ "name": "Hoa community",
1310
+ "homepage": "https://hoa-project.net/"
1311
+ }
1312
+ ],
1313
+ "description": "The Hoa\\Consistency library.",
1314
+ "homepage": "https://hoa-project.net/",
1315
+ "keywords": [
1316
+ "autoloader",
1317
+ "callable",
1318
+ "consistency",
1319
+ "entity",
1320
+ "flex",
1321
+ "keyword",
1322
+ "library"
1323
+ ],
1324
+ "time": "2017-05-02T12:18:12+00:00"
1325
+ },
1326
+ {
1327
+ "name": "hoa/console",
1328
+ "version": "3.17.05.02",
1329
+ "source": {
1330
+ "type": "git",
1331
+ "url": "https://github.com/hoaproject/Console.git",
1332
+ "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66"
1333
+ },
1334
+ "dist": {
1335
+ "type": "zip",
1336
+ "url": "https://api.github.com/repos/hoaproject/Console/zipball/e231fd3ea70e6d773576ae78de0bdc1daf331a66",
1337
+ "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66",
1338
+ "shasum": ""
1339
+ },
1340
+ "require": {
1341
+ "hoa/consistency": "~1.0",
1342
+ "hoa/event": "~1.0",
1343
+ "hoa/exception": "~1.0",
1344
+ "hoa/file": "~1.0",
1345
+ "hoa/protocol": "~1.0",
1346
+ "hoa/stream": "~1.0",
1347
+ "hoa/ustring": "~4.0"
1348
+ },
1349
+ "require-dev": {
1350
+ "hoa/test": "~2.0"
1351
+ },
1352
+ "suggest": {
1353
+ "ext-pcntl": "To enable hoa://Event/Console/Window:resize.",
1354
+ "hoa/dispatcher": "To use the console kit.",
1355
+ "hoa/router": "To use the console kit."
1356
+ },
1357
+ "type": "library",
1358
+ "extra": {
1359
+ "branch-alias": {
1360
+ "dev-master": "3.x-dev"
1361
+ }
1362
+ },
1363
+ "autoload": {
1364
+ "psr-4": {
1365
+ "Hoa\\Console\\": "."
1366
+ }
1367
+ },
1368
+ "notification-url": "https://packagist.org/downloads/",
1369
+ "license": [
1370
+ "BSD-3-Clause"
1371
+ ],
1372
+ "authors": [
1373
+ {
1374
+ "name": "Ivan Enderlin",
1375
+ "email": "ivan.enderlin@hoa-project.net"
1376
+ },
1377
+ {
1378
+ "name": "Hoa community",
1379
+ "homepage": "https://hoa-project.net/"
1380
+ }
1381
+ ],
1382
+ "description": "The Hoa\\Console library.",
1383
+ "homepage": "https://hoa-project.net/",
1384
+ "keywords": [
1385
+ "autocompletion",
1386
+ "chrome",
1387
+ "cli",
1388
+ "console",
1389
+ "cursor",
1390
+ "getoption",
1391
+ "library",
1392
+ "option",
1393
+ "parser",
1394
+ "processus",
1395
+ "readline",
1396
+ "terminfo",
1397
+ "tput",
1398
+ "window"
1399
+ ],
1400
+ "time": "2017-05-02T12:26:19+00:00"
1401
+ },
1402
+ {
1403
+ "name": "hoa/event",
1404
+ "version": "1.17.01.13",
1405
+ "source": {
1406
+ "type": "git",
1407
+ "url": "https://github.com/hoaproject/Event.git",
1408
+ "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54"
1409
+ },
1410
+ "dist": {
1411
+ "type": "zip",
1412
+ "url": "https://api.github.com/repos/hoaproject/Event/zipball/6c0060dced212ffa3af0e34bb46624f990b29c54",
1413
+ "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54",
1414
+ "shasum": ""
1415
+ },
1416
+ "require": {
1417
+ "hoa/consistency": "~1.0",
1418
+ "hoa/exception": "~1.0"
1419
+ },
1420
+ "require-dev": {
1421
+ "hoa/test": "~2.0"
1422
+ },
1423
+ "type": "library",
1424
+ "extra": {
1425
+ "branch-alias": {
1426
+ "dev-master": "1.x-dev"
1427
+ }
1428
+ },
1429
+ "autoload": {
1430
+ "psr-4": {
1431
+ "Hoa\\Event\\": "."
1432
+ }
1433
+ },
1434
+ "notification-url": "https://packagist.org/downloads/",
1435
+ "license": [
1436
+ "BSD-3-Clause"
1437
+ ],
1438
+ "authors": [
1439
+ {
1440
+ "name": "Ivan Enderlin",
1441
+ "email": "ivan.enderlin@hoa-project.net"
1442
+ },
1443
+ {
1444
+ "name": "Hoa community",
1445
+ "homepage": "https://hoa-project.net/"
1446
+ }
1447
+ ],
1448
+ "description": "The Hoa\\Event library.",
1449
+ "homepage": "https://hoa-project.net/",
1450
+ "keywords": [
1451
+ "event",
1452
+ "library",
1453
+ "listener",
1454
+ "observer"
1455
+ ],
1456
+ "time": "2017-01-13T15:30:50+00:00"
1457
+ },
1458
+ {
1459
+ "name": "hoa/exception",
1460
+ "version": "1.17.01.16",
1461
+ "source": {
1462
+ "type": "git",
1463
+ "url": "https://github.com/hoaproject/Exception.git",
1464
+ "reference": "091727d46420a3d7468ef0595651488bfc3a458f"
1465
+ },
1466
+ "dist": {
1467
+ "type": "zip",
1468
+ "url": "https://api.github.com/repos/hoaproject/Exception/zipball/091727d46420a3d7468ef0595651488bfc3a458f",
1469
+ "reference": "091727d46420a3d7468ef0595651488bfc3a458f",
1470
+ "shasum": ""
1471
+ },
1472
+ "require": {
1473
+ "hoa/consistency": "~1.0",
1474
+ "hoa/event": "~1.0"
1475
+ },
1476
+ "require-dev": {
1477
+ "hoa/test": "~2.0"
1478
+ },
1479
+ "type": "library",
1480
+ "extra": {
1481
+ "branch-alias": {
1482
+ "dev-master": "1.x-dev"
1483
+ }
1484
+ },
1485
+ "autoload": {
1486
+ "psr-4": {
1487
+ "Hoa\\Exception\\": "."
1488
+ }
1489
+ },
1490
+ "notification-url": "https://packagist.org/downloads/",
1491
+ "license": [
1492
+ "BSD-3-Clause"
1493
+ ],
1494
+ "authors": [
1495
+ {
1496
+ "name": "Ivan Enderlin",
1497
+ "email": "ivan.enderlin@hoa-project.net"
1498
+ },
1499
+ {
1500
+ "name": "Hoa community",
1501
+ "homepage": "https://hoa-project.net/"
1502
+ }
1503
+ ],
1504
+ "description": "The Hoa\\Exception library.",
1505
+ "homepage": "https://hoa-project.net/",
1506
+ "keywords": [
1507
+ "exception",
1508
+ "library"
1509
+ ],
1510
+ "time": "2017-01-16T07:53:27+00:00"
1511
+ },
1512
+ {
1513
+ "name": "hoa/file",
1514
+ "version": "1.17.07.11",
1515
+ "source": {
1516
+ "type": "git",
1517
+ "url": "https://github.com/hoaproject/File.git",
1518
+ "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca"
1519
+ },
1520
+ "dist": {
1521
+ "type": "zip",
1522
+ "url": "https://api.github.com/repos/hoaproject/File/zipball/35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca",
1523
+ "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca",
1524
+ "shasum": ""
1525
+ },
1526
+ "require": {
1527
+ "hoa/consistency": "~1.0",
1528
+ "hoa/event": "~1.0",
1529
+ "hoa/exception": "~1.0",
1530
+ "hoa/iterator": "~2.0",
1531
+ "hoa/stream": "~1.0"
1532
+ },
1533
+ "require-dev": {
1534
+ "hoa/test": "~2.0"
1535
+ },
1536
+ "type": "library",
1537
+ "extra": {
1538
+ "branch-alias": {
1539
+ "dev-master": "1.x-dev"
1540
+ }
1541
+ },
1542
+ "autoload": {
1543
+ "psr-4": {
1544
+ "Hoa\\File\\": "."
1545
+ }
1546
+ },
1547
+ "notification-url": "https://packagist.org/downloads/",
1548
+ "license": [
1549
+ "BSD-3-Clause"
1550
+ ],
1551
+ "authors": [
1552
+ {
1553
+ "name": "Ivan Enderlin",
1554
+ "email": "ivan.enderlin@hoa-project.net"
1555
+ },
1556
+ {
1557
+ "name": "Hoa community",
1558
+ "homepage": "https://hoa-project.net/"
1559
+ }
1560
+ ],
1561
+ "description": "The Hoa\\File library.",
1562
+ "homepage": "https://hoa-project.net/",
1563
+ "keywords": [
1564
+ "Socket",
1565
+ "directory",
1566
+ "file",
1567
+ "finder",
1568
+ "library",
1569
+ "link",
1570
+ "temporary"
1571
+ ],
1572
+ "time": "2017-07-11T07:42:15+00:00"
1573
+ },
1574
+ {
1575
+ "name": "hoa/iterator",
1576
+ "version": "2.17.01.10",
1577
+ "source": {
1578
+ "type": "git",
1579
+ "url": "https://github.com/hoaproject/Iterator.git",
1580
+ "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc"
1581
+ },
1582
+ "dist": {
1583
+ "type": "zip",
1584
+ "url": "https://api.github.com/repos/hoaproject/Iterator/zipball/d1120ba09cb4ccd049c86d10058ab94af245f0cc",
1585
+ "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc",
1586
+ "shasum": ""
1587
+ },
1588
+ "require": {
1589
+ "hoa/consistency": "~1.0",
1590
+ "hoa/exception": "~1.0"
1591
+ },
1592
+ "require-dev": {
1593
+ "hoa/test": "~2.0"
1594
+ },
1595
+ "type": "library",
1596
+ "extra": {
1597
+ "branch-alias": {
1598
+ "dev-master": "2.x-dev"
1599
+ }
1600
+ },
1601
+ "autoload": {
1602
+ "psr-4": {
1603
+ "Hoa\\Iterator\\": "."
1604
+ }
1605
+ },
1606
+ "notification-url": "https://packagist.org/downloads/",
1607
+ "license": [
1608
+ "BSD-3-Clause"
1609
+ ],
1610
+ "authors": [
1611
+ {
1612
+ "name": "Ivan Enderlin",
1613
+ "email": "ivan.enderlin@hoa-project.net"
1614
+ },
1615
+ {
1616
+ "name": "Hoa community",
1617
+ "homepage": "https://hoa-project.net/"
1618
+ }
1619
+ ],
1620
+ "description": "The Hoa\\Iterator library.",
1621
+ "homepage": "https://hoa-project.net/",
1622
+ "keywords": [
1623
+ "iterator",
1624
+ "library"
1625
+ ],
1626
+ "time": "2017-01-10T10:34:47+00:00"
1627
+ },
1628
+ {
1629
+ "name": "hoa/protocol",
1630
+ "version": "1.17.01.14",
1631
+ "source": {
1632
+ "type": "git",
1633
+ "url": "https://github.com/hoaproject/Protocol.git",
1634
+ "reference": "5c2cf972151c45f373230da170ea015deecf19e2"
1635
+ },
1636
+ "dist": {
1637
+ "type": "zip",
1638
+ "url": "https://api.github.com/repos/hoaproject/Protocol/zipball/5c2cf972151c45f373230da170ea015deecf19e2",
1639
+ "reference": "5c2cf972151c45f373230da170ea015deecf19e2",
1640
+ "shasum": ""
1641
+ },
1642
+ "require": {
1643
+ "hoa/consistency": "~1.0",
1644
+ "hoa/exception": "~1.0"
1645
+ },
1646
+ "require-dev": {
1647
+ "hoa/test": "~2.0"
1648
+ },
1649
+ "type": "library",
1650
+ "extra": {
1651
+ "branch-alias": {
1652
+ "dev-master": "1.x-dev"
1653
+ }
1654
+ },
1655
+ "autoload": {
1656
+ "psr-4": {
1657
+ "Hoa\\Protocol\\": "."
1658
+ },
1659
+ "files": [
1660
+ "Wrapper.php"
1661
+ ]
1662
+ },
1663
+ "notification-url": "https://packagist.org/downloads/",
1664
+ "license": [
1665
+ "BSD-3-Clause"
1666
+ ],
1667
+ "authors": [
1668
+ {
1669
+ "name": "Ivan Enderlin",
1670
+ "email": "ivan.enderlin@hoa-project.net"
1671
+ },
1672
+ {
1673
+ "name": "Hoa community",
1674
+ "homepage": "https://hoa-project.net/"
1675
+ }
1676
+ ],
1677
+ "description": "The Hoa\\Protocol library.",
1678
+ "homepage": "https://hoa-project.net/",
1679
+ "keywords": [
1680
+ "library",
1681
+ "protocol",
1682
+ "resource",
1683
+ "stream",
1684
+ "wrapper"
1685
+ ],
1686
+ "time": "2017-01-14T12:26:10+00:00"
1687
+ },
1688
+ {
1689
+ "name": "hoa/stream",
1690
+ "version": "1.17.02.21",
1691
+ "source": {
1692
+ "type": "git",
1693
+ "url": "https://github.com/hoaproject/Stream.git",
1694
+ "reference": "3293cfffca2de10525df51436adf88a559151d82"
1695
+ },
1696
+ "dist": {
1697
+ "type": "zip",
1698
+ "url": "https://api.github.com/repos/hoaproject/Stream/zipball/3293cfffca2de10525df51436adf88a559151d82",
1699
+ "reference": "3293cfffca2de10525df51436adf88a559151d82",
1700
+ "shasum": ""
1701
+ },
1702
+ "require": {
1703
+ "hoa/consistency": "~1.0",
1704
+ "hoa/event": "~1.0",
1705
+ "hoa/exception": "~1.0",
1706
+ "hoa/protocol": "~1.0"
1707
+ },
1708
+ "require-dev": {
1709
+ "hoa/test": "~2.0"
1710
+ },
1711
+ "type": "library",
1712
+ "extra": {
1713
+ "branch-alias": {
1714
+ "dev-master": "1.x-dev"
1715
+ }
1716
+ },
1717
+ "autoload": {
1718
+ "psr-4": {
1719
+ "Hoa\\Stream\\": "."
1720
+ }
1721
+ },
1722
+ "notification-url": "https://packagist.org/downloads/",
1723
+ "license": [
1724
+ "BSD-3-Clause"
1725
+ ],
1726
+ "authors": [
1727
+ {
1728
+ "name": "Ivan Enderlin",
1729
+ "email": "ivan.enderlin@hoa-project.net"
1730
+ },
1731
+ {
1732
+ "name": "Hoa community",
1733
+ "homepage": "https://hoa-project.net/"
1734
+ }
1735
+ ],
1736
+ "description": "The Hoa\\Stream library.",
1737
+ "homepage": "https://hoa-project.net/",
1738
+ "keywords": [
1739
+ "Context",
1740
+ "bucket",
1741
+ "composite",
1742
+ "filter",
1743
+ "in",
1744
+ "library",
1745
+ "out",
1746
+ "protocol",
1747
+ "stream",
1748
+ "wrapper"
1749
+ ],
1750
+ "time": "2017-02-21T16:01:06+00:00"
1751
+ },
1752
+ {
1753
+ "name": "hoa/ustring",
1754
+ "version": "4.17.01.16",
1755
+ "source": {
1756
+ "type": "git",
1757
+ "url": "https://github.com/hoaproject/Ustring.git",
1758
+ "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0"
1759
+ },
1760
+ "dist": {
1761
+ "type": "zip",
1762
+ "url": "https://api.github.com/repos/hoaproject/Ustring/zipball/e6326e2739178799b1fe3fdd92029f9517fa17a0",
1763
+ "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0",
1764
+ "shasum": ""
1765
+ },
1766
+ "require": {
1767
+ "hoa/consistency": "~1.0",
1768
+ "hoa/exception": "~1.0"
1769
+ },
1770
+ "require-dev": {
1771
+ "hoa/test": "~2.0"
1772
+ },
1773
+ "suggest": {
1774
+ "ext-iconv": "ext/iconv must be present (or a third implementation) to use Hoa\\Ustring::transcode().",
1775
+ "ext-intl": "To get a better Hoa\\Ustring::toAscii() and Hoa\\Ustring::compareTo()."
1776
+ },
1777
+ "type": "library",
1778
+ "extra": {
1779
+ "branch-alias": {
1780
+ "dev-master": "4.x-dev"
1781
+ }
1782
+ },
1783
+ "autoload": {
1784
+ "psr-4": {
1785
+ "Hoa\\Ustring\\": "."
1786
+ }
1787
+ },
1788
+ "notification-url": "https://packagist.org/downloads/",
1789
+ "license": [
1790
+ "BSD-3-Clause"
1791
+ ],
1792
+ "authors": [
1793
+ {
1794
+ "name": "Ivan Enderlin",
1795
+ "email": "ivan.enderlin@hoa-project.net"
1796
+ },
1797
+ {
1798
+ "name": "Hoa community",
1799
+ "homepage": "https://hoa-project.net/"
1800
+ }
1801
+ ],
1802
+ "description": "The Hoa\\Ustring library.",
1803
+ "homepage": "https://hoa-project.net/",
1804
+ "keywords": [
1805
+ "library",
1806
+ "search",
1807
+ "string",
1808
+ "unicode"
1809
+ ],
1810
+ "time": "2017-01-16T07:08:25+00:00"
1811
+ },
1812
+ {
1813
+ "name": "illuminate/contracts",
1814
+ "version": "v6.7.0",
1815
+ "source": {
1816
+ "type": "git",
1817
+ "url": "https://github.com/illuminate/contracts.git",
1818
+ "reference": "484727dc42f1c9dbffb2182f6fb0d01ca1aba556"
1819
+ },
1820
+ "dist": {
1821
+ "type": "zip",
1822
+ "url": "https://api.github.com/repos/illuminate/contracts/zipball/484727dc42f1c9dbffb2182f6fb0d01ca1aba556",
1823
+ "reference": "484727dc42f1c9dbffb2182f6fb0d01ca1aba556",
1824
+ "shasum": ""
1825
+ },
1826
+ "require": {
1827
+ "php": "^7.2",
1828
+ "psr/container": "^1.0",
1829
+ "psr/simple-cache": "^1.0"
1830
+ },
1831
+ "type": "library",
1832
+ "extra": {
1833
+ "branch-alias": {
1834
+ "dev-master": "6.0-dev"
1835
+ }
1836
+ },
1837
+ "autoload": {
1838
+ "psr-4": {
1839
+ "Illuminate\\Contracts\\": ""
1840
+ }
1841
+ },
1842
+ "notification-url": "https://packagist.org/downloads/",
1843
+ "license": [
1844
+ "MIT"
1845
+ ],
1846
+ "authors": [
1847
+ {
1848
+ "name": "Taylor Otwell",
1849
+ "email": "taylor@laravel.com"
1850
+ }
1851
+ ],
1852
+ "description": "The Illuminate Contracts package.",
1853
+ "homepage": "https://laravel.com",
1854
+ "time": "2019-12-06T13:40:59+00:00"
1855
+ },
1856
+ {
1857
+ "name": "illuminate/support",
1858
+ "version": "v6.7.0",
1859
+ "source": {
1860
+ "type": "git",
1861
+ "url": "https://github.com/illuminate/support.git",
1862
+ "reference": "e720ac31b6baf101ce0da7a58491e1d3ea2a85ce"
1863
+ },
1864
+ "dist": {
1865
+ "type": "zip",
1866
+ "url": "https://api.github.com/repos/illuminate/support/zipball/e720ac31b6baf101ce0da7a58491e1d3ea2a85ce",
1867
+ "reference": "e720ac31b6baf101ce0da7a58491e1d3ea2a85ce",
1868
+ "shasum": ""
1869
+ },
1870
+ "require": {
1871
+ "doctrine/inflector": "^1.1",
1872
+ "ext-json": "*",
1873
+ "ext-mbstring": "*",
1874
+ "illuminate/contracts": "^6.0",
1875
+ "nesbot/carbon": "^2.0",
1876
+ "php": "^7.2"
1877
+ },
1878
+ "conflict": {
1879
+ "tightenco/collect": "<5.5.33"
1880
+ },
1881
+ "suggest": {
1882
+ "illuminate/filesystem": "Required to use the composer class (^6.0).",
1883
+ "moontoast/math": "Required to use ordered UUIDs (^1.1).",
1884
+ "ramsey/uuid": "Required to use Str::uuid() (^3.7).",
1885
+ "symfony/process": "Required to use the composer class (^4.3.4).",
1886
+ "symfony/var-dumper": "Required to use the dd function (^4.3.4).",
1887
+ "vlucas/phpdotenv": "Required to use the Env class and env helper (^3.3)."
1888
+ },
1889
+ "type": "library",
1890
+ "extra": {
1891
+ "branch-alias": {
1892
+ "dev-master": "6.0-dev"
1893
+ }
1894
+ },
1895
+ "autoload": {
1896
+ "psr-4": {
1897
+ "Illuminate\\Support\\": ""
1898
+ },
1899
+ "files": [
1900
+ "helpers.php"
1901
+ ]
1902
+ },
1903
+ "notification-url": "https://packagist.org/downloads/",
1904
+ "license": [
1905
+ "MIT"
1906
+ ],
1907
+ "authors": [
1908
+ {
1909
+ "name": "Taylor Otwell",
1910
+ "email": "taylor@laravel.com"
1911
+ }
1912
+ ],
1913
+ "description": "The Illuminate Support package.",
1914
+ "homepage": "https://laravel.com",
1915
+ "time": "2019-12-06T16:38:15+00:00"
1916
+ },
1917
+ {
1918
+ "name": "justinrainbow/json-schema",
1919
+ "version": "5.2.9",
1920
+ "source": {
1921
+ "type": "git",
1922
+ "url": "https://github.com/justinrainbow/json-schema.git",
1923
+ "reference": "44c6787311242a979fa15c704327c20e7221a0e4"
1924
+ },
1925
+ "dist": {
1926
+ "type": "zip",
1927
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4",
1928
+ "reference": "44c6787311242a979fa15c704327c20e7221a0e4",
1929
+ "shasum": ""
1930
+ },
1931
+ "require": {
1932
+ "php": ">=5.3.3"
1933
+ },
1934
+ "require-dev": {
1935
+ "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
1936
+ "json-schema/json-schema-test-suite": "1.2.0",
1937
+ "phpunit/phpunit": "^4.8.35"
1938
+ },
1939
+ "bin": [
1940
+ "bin/validate-json"
1941
+ ],
1942
+ "type": "library",
1943
+ "extra": {
1944
+ "branch-alias": {
1945
+ "dev-master": "5.0.x-dev"
1946
+ }
1947
+ },
1948
+ "autoload": {
1949
+ "psr-4": {
1950
+ "JsonSchema\\": "src/JsonSchema/"
1951
+ }
1952
+ },
1953
+ "notification-url": "https://packagist.org/downloads/",
1954
+ "license": [
1955
+ "MIT"
1956
+ ],
1957
+ "authors": [
1958
+ {
1959
+ "name": "Bruno Prieto Reis",
1960
+ "email": "bruno.p.reis@gmail.com"
1961
+ },
1962
+ {
1963
+ "name": "Justin Rainbow",
1964
+ "email": "justin.rainbow@gmail.com"
1965
+ },
1966
+ {
1967
+ "name": "Igor Wiedler",
1968
+ "email": "igor@wiedler.ch"
1969
+ },
1970
+ {
1971
+ "name": "Robert Schönthal",
1972
+ "email": "seroscho@googlemail.com"
1973
+ }
1974
+ ],
1975
+ "description": "A library to validate a json schema.",
1976
+ "homepage": "https://github.com/justinrainbow/json-schema",
1977
+ "keywords": [
1978
+ "json",
1979
+ "schema"
1980
+ ],
1981
+ "time": "2019-09-25T14:49:45+00:00"
1982
+ },
1983
+ {
1984
+ "name": "lucatume/wp-browser",
1985
+ "version": "2.2.32",
1986
+ "source": {
1987
+ "type": "git",
1988
+ "url": "https://github.com/lucatume/wp-browser.git",
1989
+ "reference": "64b06c6612bc4c8a3a0d6d95996fe6676f259220"
1990
+ },
1991
+ "dist": {
1992
+ "type": "zip",
1993
+ "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/64b06c6612bc4c8a3a0d6d95996fe6676f259220",
1994
+ "reference": "64b06c6612bc4c8a3a0d6d95996fe6676f259220",
1995
+ "shasum": ""
1996
+ },
1997
+ "require": {
1998
+ "antecedent/patchwork": "^2.0",
1999
+ "codeception/codeception": "^2.5 || ^3.0",
2000
+ "dg/mysql-dump": "^1.3",
2001
+ "ext-fileinfo": "*",
2002
+ "ext-iconv": "*",
2003
+ "ext-json": "*",
2004
+ "ext-pdo": "*",
2005
+ "gumlet/php-image-resize": "^1.6",
2006
+ "mikemclin/laravel-wp-password": "~2.0.0",
2007
+ "php": ">=5.6.0",
2008
+ "symfony/filesystem": "^3.0",
2009
+ "symfony/process": ">=2.7 <5.0",
2010
+ "vlucas/phpdotenv": "^3.0",
2011
+ "vria/nodiacritic": "^0.1.2",
2012
+ "wp-cli/wp-cli-bundle": ">=2.0 <3.0.0",
2013
+ "zordius/lightncandy": "^1.2"
2014
+ },
2015
+ "require-dev": {
2016
+ "erusev/parsedown": "^1.7",
2017
+ "lucatume/codeception-snapshot-assertions": "^0.2.2",
2018
+ "mikey179/vfsstream": "^1.6",
2019
+ "phpstan/phpstan": "^0.11.15",
2020
+ "phpstan/phpstan-shim": "^0.11.15",
2021
+ "squizlabs/php_codesniffer": "^3.4",
2022
+ "szepeviktor/phpstan-wordpress": "^0.2.0",
2023
+ "victorjonsson/markdowndocs": "dev-master"
2024
+ },
2025
+ "type": "library",
2026
+ "autoload": {
2027
+ "psr-4": {
2028
+ "Codeception\\": "src/Codeception",
2029
+ "tad\\": "src/tad"
2030
+ },
2031
+ "files": [
2032
+ "src/tad/WPBrowser/functions.php",
2033
+ "src/tad/WPBrowser/utils.php",
2034
+ "src/tad/WPBrowser/wp-polyfills.php"
2035
+ ]
2036
+ },
2037
+ "notification-url": "https://packagist.org/downloads/",
2038
+ "license": [
2039
+ "MIT"
2040
+ ],
2041
+ "authors": [
2042
+ {
2043
+ "name": "theAverageDev (Luca Tumedei)",
2044
+ "email": "luca@theaveragedev.com",
2045
+ "homepage": "http://theaveragedev.com",
2046
+ "role": "Developer"
2047
+ }
2048
+ ],
2049
+ "description": "WordPress extension of the PhpBrowser class.",
2050
+ "homepage": "http://github.com/lucatume/wp-browser",
2051
+ "keywords": [
2052
+ "codeception",
2053
+ "wordpress"
2054
+ ],
2055
+ "time": "2019-11-26T11:25:03+00:00"
2056
+ },
2057
+ {
2058
+ "name": "mck89/peast",
2059
+ "version": "v1.10",
2060
+ "source": {
2061
+ "type": "git",
2062
+ "url": "https://github.com/mck89/peast.git",
2063
+ "reference": "ce12201132d953a13f41565c82122a5fe2616837"
2064
+ },
2065
+ "dist": {
2066
+ "type": "zip",
2067
+ "url": "https://api.github.com/repos/mck89/peast/zipball/ce12201132d953a13f41565c82122a5fe2616837",
2068
+ "reference": "ce12201132d953a13f41565c82122a5fe2616837",
2069
+ "shasum": ""
2070
+ },
2071
+ "require": {
2072
+ "php": ">=5.4.0"
2073
+ },
2074
+ "require-dev": {
2075
+ "phpunit/phpunit": "^4.0|^5.0"
2076
+ },
2077
+ "type": "library",
2078
+ "extra": {
2079
+ "branch-alias": {
2080
+ "dev-master": "1.10.0-dev"
2081
+ }
2082
+ },
2083
+ "autoload": {
2084
+ "psr-4": {
2085
+ "Peast\\": "lib/Peast/",
2086
+ "Peast\\test\\": "test/Peast/"
2087
+ }
2088
+ },
2089
+ "notification-url": "https://packagist.org/downloads/",
2090
+ "license": [
2091
+ "MIT"
2092
+ ],
2093
+ "authors": [
2094
+ {
2095
+ "name": "Marco Marchiò",
2096
+ "email": "marco.mm89@gmail.com"
2097
+ }
2098
+ ],
2099
+ "description": "Peast is PHP library that generates AST for JavaScript code",
2100
+ "time": "2019-11-22T18:07:58+00:00"
2101
+ },
2102
+ {
2103
+ "name": "mikemclin/laravel-wp-password",
2104
+ "version": "2.0.1",
2105
+ "source": {
2106
+ "type": "git",
2107
+ "url": "https://github.com/mikemclin/laravel-wp-password.git",
2108
+ "reference": "84ff1113ff6866cdb0350c176dc3c843383e4819"
2109
+ },
2110
+ "dist": {
2111
+ "type": "zip",
2112
+ "url": "https://api.github.com/repos/mikemclin/laravel-wp-password/zipball/84ff1113ff6866cdb0350c176dc3c843383e4819",
2113
+ "reference": "84ff1113ff6866cdb0350c176dc3c843383e4819",
2114
+ "shasum": ""
2115
+ },
2116
+ "require": {
2117
+ "hautelook/phpass": "0.3.*",
2118
+ "illuminate/support": ">=4.0.0",
2119
+ "php": ">=5.3.0"
2120
+ },
2121
+ "replace": {
2122
+ "mikemclin/laravel-wp-password": "self.version"
2123
+ },
2124
+ "require-dev": {
2125
+ "mockery/mockery": "~0.9",
2126
+ "phpunit/phpunit": "~4.0",
2127
+ "satooshi/php-coveralls": "dev-master"
2128
+ },
2129
+ "type": "laravel-package",
2130
+ "extra": {
2131
+ "laravel": {
2132
+ "providers": [
2133
+ "MikeMcLin\\WpPassword\\WpPasswordProvider"
2134
+ ],
2135
+ "aliases": {
2136
+ "WpPassword": "MikeMcLin\\WpPassword\\Facades\\WpPassword"
2137
+ }
2138
+ }
2139
+ },
2140
+ "autoload": {
2141
+ "psr-4": {
2142
+ "MikeMcLin\\WpPassword\\": "src/"
2143
+ }
2144
+ },
2145
+ "notification-url": "https://packagist.org/downloads/",
2146
+ "license": [
2147
+ "MIT"
2148
+ ],
2149
+ "authors": [
2150
+ {
2151
+ "name": "Mike McLin",
2152
+ "email": "mike@mikemclin.com",
2153
+ "homepage": "http://mikemclin.net"
2154
+ }
2155
+ ],
2156
+ "description": "Laravel package that checks and creates WordPress password hashes",
2157
+ "homepage": "https://github.com/mikemclin/laravel-wp-password",
2158
+ "keywords": [
2159
+ "hashing",
2160
+ "laravel",
2161
+ "password",
2162
+ "wordpress"
2163
+ ],
2164
+ "time": "2018-01-11T14:12:02+00:00"
2165
+ },
2166
+ {
2167
+ "name": "mustache/mustache",
2168
+ "version": "v2.13.0",
2169
+ "source": {
2170
+ "type": "git",
2171
+ "url": "https://github.com/bobthecow/mustache.php.git",
2172
+ "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4"
2173
+ },
2174
+ "dist": {
2175
+ "type": "zip",
2176
+ "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4",
2177
+ "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4",
2178
+ "shasum": ""
2179
+ },
2180
+ "require": {
2181
+ "php": ">=5.2.4"
2182
+ },
2183
+ "require-dev": {
2184
+ "friendsofphp/php-cs-fixer": "~1.11",
2185
+ "phpunit/phpunit": "~3.7|~4.0|~5.0"
2186
+ },
2187
+ "type": "library",
2188
+ "autoload": {
2189
+ "psr-0": {
2190
+ "Mustache": "src/"
2191
+ }
2192
+ },
2193
+ "notification-url": "https://packagist.org/downloads/",
2194
+ "license": [
2195
+ "MIT"
2196
+ ],
2197
+ "authors": [
2198
+ {
2199
+ "name": "Justin Hileman",
2200
+ "email": "justin@justinhileman.info",
2201
+ "homepage": "http://justinhileman.com"
2202
+ }
2203
+ ],
2204
+ "description": "A Mustache implementation in PHP.",
2205
+ "homepage": "https://github.com/bobthecow/mustache.php",
2206
+ "keywords": [
2207
+ "mustache",
2208
+ "templating"
2209
+ ],
2210
+ "time": "2019-11-23T21:40:31+00:00"
2211
+ },
2212
+ {
2213
+ "name": "myclabs/deep-copy",
2214
+ "version": "1.9.3",
2215
+ "source": {
2216
+ "type": "git",
2217
+ "url": "https://github.com/myclabs/DeepCopy.git",
2218
+ "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea"
2219
+ },
2220
+ "dist": {
2221
+ "type": "zip",
2222
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea",
2223
+ "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea",
2224
+ "shasum": ""
2225
+ },
2226
+ "require": {
2227
+ "php": "^7.1"
2228
+ },
2229
+ "replace": {
2230
+ "myclabs/deep-copy": "self.version"
2231
+ },
2232
+ "require-dev": {
2233
+ "doctrine/collections": "^1.0",
2234
+ "doctrine/common": "^2.6",
2235
+ "phpunit/phpunit": "^7.1"
2236
+ },
2237
+ "type": "library",
2238
+ "autoload": {
2239
+ "psr-4": {
2240
+ "DeepCopy\\": "src/DeepCopy/"
2241
+ },
2242
+ "files": [
2243
+ "src/DeepCopy/deep_copy.php"
2244
+ ]
2245
+ },
2246
+ "notification-url": "https://packagist.org/downloads/",
2247
+ "license": [
2248
+ "MIT"
2249
+ ],
2250
+ "description": "Create deep copies (clones) of your objects",
2251
+ "keywords": [
2252
+ "clone",
2253
+ "copy",
2254
+ "duplicate",
2255
+ "object",
2256
+ "object graph"
2257
+ ],
2258
+ "time": "2019-08-09T12:45:53+00:00"
2259
+ },
2260
+ {
2261
+ "name": "nb/oxymel",
2262
+ "version": "v0.1.0",
2263
+ "source": {
2264
+ "type": "git",
2265
+ "url": "https://github.com/nb/oxymel.git",
2266
+ "reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c"
2267
+ },
2268
+ "dist": {
2269
+ "type": "zip",
2270
+ "url": "https://api.github.com/repos/nb/oxymel/zipball/cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c",
2271
+ "reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c",
2272
+ "shasum": ""
2273
+ },
2274
+ "require": {
2275
+ "php": ">=5.2.4"
2276
+ },
2277
+ "type": "library",
2278
+ "autoload": {
2279
+ "psr-0": {
2280
+ "Oxymel": ""
2281
+ }
2282
+ },
2283
+ "notification-url": "https://packagist.org/downloads/",
2284
+ "license": [
2285
+ "MIT"
2286
+ ],
2287
+ "authors": [
2288
+ {
2289
+ "name": "Nikolay Bachiyski",
2290
+ "email": "nb@nikolay.bg",
2291
+ "homepage": "http://extrapolate.me/"
2292
+ }
2293
+ ],
2294
+ "description": "A sweet XML builder",
2295
+ "homepage": "https://github.com/nb/oxymel",
2296
+ "keywords": [
2297
+ "xml"
2298
+ ],
2299
+ "time": "2013-02-24T15:01:54+00:00"
2300
+ },
2301
+ {
2302
+ "name": "nesbot/carbon",
2303
+ "version": "2.27.0",
2304
+ "source": {
2305
+ "type": "git",
2306
+ "url": "https://github.com/briannesbitt/Carbon.git",
2307
+ "reference": "13b8485a8690f103bf19cba64879c218b102b726"
2308
+ },
2309
+ "dist": {
2310
+ "type": "zip",
2311
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/13b8485a8690f103bf19cba64879c218b102b726",
2312
+ "reference": "13b8485a8690f103bf19cba64879c218b102b726",
2313
+ "shasum": ""
2314
+ },
2315
+ "require": {
2316
+ "ext-json": "*",
2317
+ "php": "^7.1.8 || ^8.0",
2318
+ "symfony/translation": "^3.4 || ^4.0 || ^5.0"
2319
+ },
2320
+ "require-dev": {
2321
+ "friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
2322
+ "kylekatarnls/multi-tester": "^1.1",
2323
+ "phpmd/phpmd": "dev-php-7.1-compatibility",
2324
+ "phpstan/phpstan": "^0.11",
2325
+ "phpunit/phpunit": "^7.5 || ^8.0",
2326
+ "squizlabs/php_codesniffer": "^3.4"
2327
+ },
2328
+ "bin": [
2329
+ "bin/carbon"
2330
+ ],
2331
+ "type": "library",
2332
+ "extra": {
2333
+ "branch-alias": {
2334
+ "dev-master": "2.x-dev"
2335
+ },
2336
+ "laravel": {
2337
+ "providers": [
2338
+ "Carbon\\Laravel\\ServiceProvider"
2339
+ ]
2340
+ }
2341
+ },
2342
+ "autoload": {
2343
+ "psr-4": {
2344
+ "Carbon\\": "src/Carbon/"
2345
+ }
2346
+ },
2347
+ "notification-url": "https://packagist.org/downloads/",
2348
+ "license": [
2349
+ "MIT"
2350
+ ],
2351
+ "authors": [
2352
+ {
2353
+ "name": "Brian Nesbitt",
2354
+ "email": "brian@nesbot.com",
2355
+ "homepage": "http://nesbot.com"
2356
+ },
2357
+ {
2358
+ "name": "kylekatarnls",
2359
+ "homepage": "http://github.com/kylekatarnls"
2360
+ }
2361
+ ],
2362
+ "description": "An API extension for DateTime that supports 281 different languages.",
2363
+ "homepage": "http://carbon.nesbot.com",
2364
+ "keywords": [
2365
+ "date",
2366
+ "datetime",
2367
+ "time"
2368
+ ],
2369
+ "time": "2019-11-20T06:59:06+00:00"
2370
+ },
2371
+ {
2372
+ "name": "phar-io/manifest",
2373
+ "version": "1.0.3",
2374
+ "source": {
2375
+ "type": "git",
2376
+ "url": "https://github.com/phar-io/manifest.git",
2377
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
2378
+ },
2379
+ "dist": {
2380
+ "type": "zip",
2381
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
2382
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
2383
+ "shasum": ""
2384
+ },
2385
+ "require": {
2386
+ "ext-dom": "*",
2387
+ "ext-phar": "*",
2388
+ "phar-io/version": "^2.0",
2389
+ "php": "^5.6 || ^7.0"
2390
+ },
2391
+ "type": "library",
2392
+ "extra": {
2393
+ "branch-alias": {
2394
+ "dev-master": "1.0.x-dev"
2395
+ }
2396
+ },
2397
+ "autoload": {
2398
+ "classmap": [
2399
+ "src/"
2400
+ ]
2401
+ },
2402
+ "notification-url": "https://packagist.org/downloads/",
2403
+ "license": [
2404
+ "BSD-3-Clause"
2405
+ ],
2406
+ "authors": [
2407
+ {
2408
+ "name": "Arne Blankerts",
2409
+ "email": "arne@blankerts.de",
2410
+ "role": "Developer"
2411
+ },
2412
+ {
2413
+ "name": "Sebastian Heuer",
2414
+ "email": "sebastian@phpeople.de",
2415
+ "role": "Developer"
2416
+ },
2417
+ {
2418
+ "name": "Sebastian Bergmann",
2419
+ "email": "sebastian@phpunit.de",
2420
+ "role": "Developer"
2421
+ }
2422
+ ],
2423
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
2424
+ "time": "2018-07-08T19:23:20+00:00"
2425
+ },
2426
+ {
2427
+ "name": "phar-io/version",
2428
+ "version": "2.0.1",
2429
+ "source": {
2430
+ "type": "git",
2431
+ "url": "https://github.com/phar-io/version.git",
2432
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
2433
+ },
2434
+ "dist": {
2435
+ "type": "zip",
2436
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
2437
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
2438
+ "shasum": ""
2439
+ },
2440
+ "require": {
2441
+ "php": "^5.6 || ^7.0"
2442
+ },
2443
+ "type": "library",
2444
+ "autoload": {
2445
+ "classmap": [
2446
+ "src/"
2447
+ ]
2448
+ },
2449
+ "notification-url": "https://packagist.org/downloads/",
2450
+ "license": [
2451
+ "BSD-3-Clause"
2452
+ ],
2453
+ "authors": [
2454
+ {
2455
+ "name": "Arne Blankerts",
2456
+ "email": "arne@blankerts.de",
2457
+ "role": "Developer"
2458
+ },
2459
+ {
2460
+ "name": "Sebastian Heuer",
2461
+ "email": "sebastian@phpeople.de",
2462
+ "role": "Developer"
2463
+ },
2464
+ {
2465
+ "name": "Sebastian Bergmann",
2466
+ "email": "sebastian@phpunit.de",
2467
+ "role": "Developer"
2468
+ }
2469
+ ],
2470
+ "description": "Library for handling version information and constraints",
2471
+ "time": "2018-07-08T19:19:57+00:00"
2472
+ },
2473
+ {
2474
+ "name": "phpdocumentor/reflection-common",
2475
+ "version": "2.0.0",
2476
+ "source": {
2477
+ "type": "git",
2478
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
2479
+ "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
2480
+ },
2481
+ "dist": {
2482
+ "type": "zip",
2483
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
2484
+ "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
2485
+ "shasum": ""
2486
+ },
2487
+ "require": {
2488
+ "php": ">=7.1"
2489
+ },
2490
+ "require-dev": {
2491
+ "phpunit/phpunit": "~6"
2492
+ },
2493
+ "type": "library",
2494
+ "extra": {
2495
+ "branch-alias": {
2496
+ "dev-master": "2.x-dev"
2497
+ }
2498
+ },
2499
+ "autoload": {
2500
+ "psr-4": {
2501
+ "phpDocumentor\\Reflection\\": "src/"
2502
+ }
2503
+ },
2504
+ "notification-url": "https://packagist.org/downloads/",
2505
+ "license": [
2506
+ "MIT"
2507
+ ],
2508
+ "authors": [
2509
+ {
2510
+ "name": "Jaap van Otterdijk",
2511
+ "email": "opensource@ijaap.nl"
2512
+ }
2513
+ ],
2514
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
2515
+ "homepage": "http://www.phpdoc.org",
2516
+ "keywords": [
2517
+ "FQSEN",
2518
+ "phpDocumentor",
2519
+ "phpdoc",
2520
+ "reflection",
2521
+ "static analysis"
2522
+ ],
2523
+ "time": "2018-08-07T13:53:10+00:00"
2524
+ },
2525
+ {
2526
+ "name": "phpdocumentor/reflection-docblock",
2527
+ "version": "4.3.2",
2528
+ "source": {
2529
+ "type": "git",
2530
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
2531
+ "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e"
2532
+ },
2533
+ "dist": {
2534
+ "type": "zip",
2535
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
2536
+ "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
2537
+ "shasum": ""
2538
+ },
2539
+ "require": {
2540
+ "php": "^7.0",
2541
+ "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
2542
+ "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
2543
+ "webmozart/assert": "^1.0"
2544
+ },
2545
+ "require-dev": {
2546
+ "doctrine/instantiator": "^1.0.5",
2547
+ "mockery/mockery": "^1.0",
2548
+ "phpunit/phpunit": "^6.4"
2549
+ },
2550
+ "type": "library",
2551
+ "extra": {
2552
+ "branch-alias": {
2553
+ "dev-master": "4.x-dev"
2554
+ }
2555
+ },
2556
+ "autoload": {
2557
+ "psr-4": {
2558
+ "phpDocumentor\\Reflection\\": [
2559
+ "src/"
2560
+ ]
2561
+ }
2562
+ },
2563
+ "notification-url": "https://packagist.org/downloads/",
2564
+ "license": [
2565
+ "MIT"
2566
+ ],
2567
+ "authors": [
2568
+ {
2569
+ "name": "Mike van Riel",
2570
+ "email": "me@mikevanriel.com"
2571
+ }
2572
+ ],
2573
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
2574
+ "time": "2019-09-12T14:27:41+00:00"
2575
+ },
2576
+ {
2577
+ "name": "phpdocumentor/type-resolver",
2578
+ "version": "1.0.1",
2579
+ "source": {
2580
+ "type": "git",
2581
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
2582
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
2583
+ },
2584
+ "dist": {
2585
+ "type": "zip",
2586
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
2587
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
2588
+ "shasum": ""
2589
+ },
2590
+ "require": {
2591
+ "php": "^7.1",
2592
+ "phpdocumentor/reflection-common": "^2.0"
2593
+ },
2594
+ "require-dev": {
2595
+ "ext-tokenizer": "^7.1",
2596
+ "mockery/mockery": "~1",
2597
+ "phpunit/phpunit": "^7.0"
2598
+ },
2599
+ "type": "library",
2600
+ "extra": {
2601
+ "branch-alias": {
2602
+ "dev-master": "1.x-dev"
2603
+ }
2604
+ },
2605
+ "autoload": {
2606
+ "psr-4": {
2607
+ "phpDocumentor\\Reflection\\": "src"
2608
+ }
2609
+ },
2610
+ "notification-url": "https://packagist.org/downloads/",
2611
+ "license": [
2612
+ "MIT"
2613
+ ],
2614
+ "authors": [
2615
+ {
2616
+ "name": "Mike van Riel",
2617
+ "email": "me@mikevanriel.com"
2618
+ }
2619
+ ],
2620
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
2621
+ "time": "2019-08-22T18:11:29+00:00"
2622
+ },
2623
+ {
2624
+ "name": "phpoption/phpoption",
2625
+ "version": "1.6.1",
2626
+ "source": {
2627
+ "type": "git",
2628
+ "url": "https://github.com/schmittjoh/php-option.git",
2629
+ "reference": "a8593bf5176bf3d3f2966942c530be19b44ec87c"
2630
+ },
2631
+ "dist": {
2632
+ "type": "zip",
2633
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/a8593bf5176bf3d3f2966942c530be19b44ec87c",
2634
+ "reference": "a8593bf5176bf3d3f2966942c530be19b44ec87c",
2635
+ "shasum": ""
2636
+ },
2637
+ "require": {
2638
+ "php": "^5.5.9 || ^7.0"
2639
+ },
2640
+ "require-dev": {
2641
+ "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0"
2642
+ },
2643
+ "type": "library",
2644
+ "extra": {
2645
+ "branch-alias": {
2646
+ "dev-master": "1.6-dev"
2647
+ }
2648
+ },
2649
+ "autoload": {
2650
+ "psr-4": {
2651
+ "PhpOption\\": "src/PhpOption/"
2652
+ }
2653
+ },
2654
+ "notification-url": "https://packagist.org/downloads/",
2655
+ "license": [
2656
+ "Apache-2.0"
2657
+ ],
2658
+ "authors": [
2659
+ {
2660
+ "name": "Johannes M. Schmitt",
2661
+ "email": "schmittjoh@gmail.com"
2662
+ },
2663
+ {
2664
+ "name": "Graham Campbell",
2665
+ "email": "graham@alt-three.com"
2666
+ }
2667
+ ],
2668
+ "description": "Option Type for PHP",
2669
+ "keywords": [
2670
+ "language",
2671
+ "option",
2672
+ "php",
2673
+ "type"
2674
+ ],
2675
+ "time": "2019-12-11T13:45:14+00:00"
2676
+ },
2677
+ {
2678
+ "name": "phpspec/prophecy",
2679
+ "version": "1.9.0",
2680
+ "source": {
2681
+ "type": "git",
2682
+ "url": "https://github.com/phpspec/prophecy.git",
2683
+ "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203"
2684
+ },
2685
+ "dist": {
2686
+ "type": "zip",
2687
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203",
2688
+ "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203",
2689
+ "shasum": ""
2690
+ },
2691
+ "require": {
2692
+ "doctrine/instantiator": "^1.0.2",
2693
+ "php": "^5.3|^7.0",
2694
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
2695
+ "sebastian/comparator": "^1.1|^2.0|^3.0",
2696
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0"
2697
+ },
2698
+ "require-dev": {
2699
+ "phpspec/phpspec": "^2.5|^3.2",
2700
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
2701
+ },
2702
+ "type": "library",
2703
+ "extra": {
2704
+ "branch-alias": {
2705
+ "dev-master": "1.8.x-dev"
2706
+ }
2707
+ },
2708
+ "autoload": {
2709
+ "psr-4": {
2710
+ "Prophecy\\": "src/Prophecy"
2711
+ }
2712
+ },
2713
+ "notification-url": "https://packagist.org/downloads/",
2714
+ "license": [
2715
+ "MIT"
2716
+ ],
2717
+ "authors": [
2718
+ {
2719
+ "name": "Konstantin Kudryashov",
2720
+ "email": "ever.zet@gmail.com",
2721
+ "homepage": "http://everzet.com"
2722
+ },
2723
+ {
2724
+ "name": "Marcello Duarte",
2725
+ "email": "marcello.duarte@gmail.com"
2726
+ }
2727
+ ],
2728
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
2729
+ "homepage": "https://github.com/phpspec/prophecy",
2730
+ "keywords": [
2731
+ "Double",
2732
+ "Dummy",
2733
+ "fake",
2734
+ "mock",
2735
+ "spy",
2736
+ "stub"
2737
+ ],
2738
+ "time": "2019-10-03T11:07:50+00:00"
2739
+ },
2740
+ {
2741
+ "name": "phpunit/php-code-coverage",
2742
+ "version": "7.0.10",
2743
+ "source": {
2744
+ "type": "git",
2745
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
2746
+ "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf"
2747
+ },
2748
+ "dist": {
2749
+ "type": "zip",
2750
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf",
2751
+ "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf",
2752
+ "shasum": ""
2753
+ },
2754
+ "require": {
2755
+ "ext-dom": "*",
2756
+ "ext-xmlwriter": "*",
2757
+ "php": "^7.2",
2758
+ "phpunit/php-file-iterator": "^2.0.2",
2759
+ "phpunit/php-text-template": "^1.2.1",
2760
+ "phpunit/php-token-stream": "^3.1.1",
2761
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
2762
+ "sebastian/environment": "^4.2.2",
2763
+ "sebastian/version": "^2.0.1",
2764
+ "theseer/tokenizer": "^1.1.3"
2765
+ },
2766
+ "require-dev": {
2767
+ "phpunit/phpunit": "^8.2.2"
2768
+ },
2769
+ "suggest": {
2770
+ "ext-xdebug": "^2.7.2"
2771
+ },
2772
+ "type": "library",
2773
+ "extra": {
2774
+ "branch-alias": {
2775
+ "dev-master": "7.0-dev"
2776
+ }
2777
+ },
2778
+ "autoload": {
2779
+ "classmap": [
2780
+ "src/"
2781
+ ]
2782
+ },
2783
+ "notification-url": "https://packagist.org/downloads/",
2784
+ "license": [
2785
+ "BSD-3-Clause"
2786
+ ],
2787
+ "authors": [
2788
+ {
2789
+ "name": "Sebastian Bergmann",
2790
+ "email": "sebastian@phpunit.de",
2791
+ "role": "lead"
2792
+ }
2793
+ ],
2794
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
2795
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
2796
+ "keywords": [
2797
+ "coverage",
2798
+ "testing",
2799
+ "xunit"
2800
+ ],
2801
+ "time": "2019-11-20T13:55:58+00:00"
2802
+ },
2803
+ {
2804
+ "name": "phpunit/php-file-iterator",
2805
+ "version": "2.0.2",
2806
+ "source": {
2807
+ "type": "git",
2808
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
2809
+ "reference": "050bedf145a257b1ff02746c31894800e5122946"
2810
+ },
2811
+ "dist": {
2812
+ "type": "zip",
2813
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
2814
+ "reference": "050bedf145a257b1ff02746c31894800e5122946",
2815
+ "shasum": ""
2816
+ },
2817
+ "require": {
2818
+ "php": "^7.1"
2819
+ },
2820
+ "require-dev": {
2821
+ "phpunit/phpunit": "^7.1"
2822
+ },
2823
+ "type": "library",
2824
+ "extra": {
2825
+ "branch-alias": {
2826
+ "dev-master": "2.0.x-dev"
2827
+ }
2828
+ },
2829
+ "autoload": {
2830
+ "classmap": [
2831
+ "src/"
2832
+ ]
2833
+ },
2834
+ "notification-url": "https://packagist.org/downloads/",
2835
+ "license": [
2836
+ "BSD-3-Clause"
2837
+ ],
2838
+ "authors": [
2839
+ {
2840
+ "name": "Sebastian Bergmann",
2841
+ "email": "sebastian@phpunit.de",
2842
+ "role": "lead"
2843
+ }
2844
+ ],
2845
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
2846
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
2847
+ "keywords": [
2848
+ "filesystem",
2849
+ "iterator"
2850
+ ],
2851
+ "time": "2018-09-13T20:33:42+00:00"
2852
+ },
2853
+ {
2854
+ "name": "phpunit/php-text-template",
2855
+ "version": "1.2.1",
2856
+ "source": {
2857
+ "type": "git",
2858
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
2859
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
2860
+ },
2861
+ "dist": {
2862
+ "type": "zip",
2863
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2864
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2865
+ "shasum": ""
2866
+ },
2867
+ "require": {
2868
+ "php": ">=5.3.3"
2869
+ },
2870
+ "type": "library",
2871
+ "autoload": {
2872
+ "classmap": [
2873
+ "src/"
2874
+ ]
2875
+ },
2876
+ "notification-url": "https://packagist.org/downloads/",
2877
+ "license": [
2878
+ "BSD-3-Clause"
2879
+ ],
2880
+ "authors": [
2881
+ {
2882
+ "name": "Sebastian Bergmann",
2883
+ "email": "sebastian@phpunit.de",
2884
+ "role": "lead"
2885
+ }
2886
+ ],
2887
+ "description": "Simple template engine.",
2888
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
2889
+ "keywords": [
2890
+ "template"
2891
+ ],
2892
+ "time": "2015-06-21T13:50:34+00:00"
2893
+ },
2894
+ {
2895
+ "name": "phpunit/php-timer",
2896
+ "version": "2.1.2",
2897
+ "source": {
2898
+ "type": "git",
2899
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
2900
+ "reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
2901
+ },
2902
+ "dist": {
2903
+ "type": "zip",
2904
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
2905
+ "reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
2906
+ "shasum": ""
2907
+ },
2908
+ "require": {
2909
+ "php": "^7.1"
2910
+ },
2911
+ "require-dev": {
2912
+ "phpunit/phpunit": "^7.0"
2913
+ },
2914
+ "type": "library",
2915
+ "extra": {
2916
+ "branch-alias": {
2917
+ "dev-master": "2.1-dev"
2918
+ }
2919
+ },
2920
+ "autoload": {
2921
+ "classmap": [
2922
+ "src/"
2923
+ ]
2924
+ },
2925
+ "notification-url": "https://packagist.org/downloads/",
2926
+ "license": [
2927
+ "BSD-3-Clause"
2928
+ ],
2929
+ "authors": [
2930
+ {
2931
+ "name": "Sebastian Bergmann",
2932
+ "email": "sebastian@phpunit.de",
2933
+ "role": "lead"
2934
+ }
2935
+ ],
2936
+ "description": "Utility class for timing",
2937
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
2938
+ "keywords": [
2939
+ "timer"
2940
+ ],
2941
+ "time": "2019-06-07T04:22:29+00:00"
2942
+ },
2943
+ {
2944
+ "name": "phpunit/php-token-stream",
2945
+ "version": "3.1.1",
2946
+ "source": {
2947
+ "type": "git",
2948
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
2949
+ "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
2950
+ },
2951
+ "dist": {
2952
+ "type": "zip",
2953
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
2954
+ "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
2955
+ "shasum": ""
2956
+ },
2957
+ "require": {
2958
+ "ext-tokenizer": "*",
2959
+ "php": "^7.1"
2960
+ },
2961
+ "require-dev": {
2962
+ "phpunit/phpunit": "^7.0"
2963
+ },
2964
+ "type": "library",
2965
+ "extra": {
2966
+ "branch-alias": {
2967
+ "dev-master": "3.1-dev"
2968
+ }
2969
+ },
2970
+ "autoload": {
2971
+ "classmap": [
2972
+ "src/"
2973
+ ]
2974
+ },
2975
+ "notification-url": "https://packagist.org/downloads/",
2976
+ "license": [
2977
+ "BSD-3-Clause"
2978
+ ],
2979
+ "authors": [
2980
+ {
2981
+ "name": "Sebastian Bergmann",
2982
+ "email": "sebastian@phpunit.de"
2983
+ }
2984
+ ],
2985
+ "description": "Wrapper around PHP's tokenizer extension.",
2986
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
2987
+ "keywords": [
2988
+ "tokenizer"
2989
+ ],
2990
+ "time": "2019-09-17T06:23:10+00:00"
2991
+ },
2992
+ {
2993
+ "name": "phpunit/phpunit",
2994
+ "version": "8.5.0",
2995
+ "source": {
2996
+ "type": "git",
2997
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
2998
+ "reference": "3ee1c1fd6fc264480c25b6fb8285edefe1702dab"
2999
+ },
3000
+ "dist": {
3001
+ "type": "zip",
3002
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3ee1c1fd6fc264480c25b6fb8285edefe1702dab",
3003
+ "reference": "3ee1c1fd6fc264480c25b6fb8285edefe1702dab",
3004
+ "shasum": ""
3005
+ },
3006
+ "require": {
3007
+ "doctrine/instantiator": "^1.2.0",
3008
+ "ext-dom": "*",
3009
+ "ext-json": "*",
3010
+ "ext-libxml": "*",
3011
+ "ext-mbstring": "*",
3012
+ "ext-xml": "*",
3013
+ "ext-xmlwriter": "*",
3014
+ "myclabs/deep-copy": "^1.9.1",
3015
+ "phar-io/manifest": "^1.0.3",
3016
+ "phar-io/version": "^2.0.1",
3017
+ "php": "^7.2",
3018
+ "phpspec/prophecy": "^1.8.1",
3019
+ "phpunit/php-code-coverage": "^7.0.7",
3020
+ "phpunit/php-file-iterator": "^2.0.2",
3021
+ "phpunit/php-text-template": "^1.2.1",
3022
+ "phpunit/php-timer": "^2.1.2",
3023
+ "sebastian/comparator": "^3.0.2",
3024
+ "sebastian/diff": "^3.0.2",
3025
+ "sebastian/environment": "^4.2.2",
3026
+ "sebastian/exporter": "^3.1.1",
3027
+ "sebastian/global-state": "^3.0.0",
3028
+ "sebastian/object-enumerator": "^3.0.3",
3029
+ "sebastian/resource-operations": "^2.0.1",
3030
+ "sebastian/type": "^1.1.3",
3031
+ "sebastian/version": "^2.0.1"
3032
+ },
3033
+ "require-dev": {
3034
+ "ext-pdo": "*"
3035
+ },
3036
+ "suggest": {
3037
+ "ext-soap": "*",
3038
+ "ext-xdebug": "*",
3039
+ "phpunit/php-invoker": "^2.0.0"
3040
+ },
3041
+ "bin": [
3042
+ "phpunit"
3043
+ ],
3044
+ "type": "library",
3045
+ "extra": {
3046
+ "branch-alias": {
3047
+ "dev-master": "8.5-dev"
3048
+ }
3049
+ },
3050
+ "autoload": {
3051
+ "classmap": [
3052
+ "src/"
3053
+ ]
3054
+ },
3055
+ "notification-url": "https://packagist.org/downloads/",
3056
+ "license": [
3057
+ "BSD-3-Clause"
3058
+ ],
3059
+ "authors": [
3060
+ {
3061
+ "name": "Sebastian Bergmann",
3062
+ "email": "sebastian@phpunit.de",
3063
+ "role": "lead"
3064
+ }
3065
+ ],
3066
+ "description": "The PHP Unit Testing framework.",
3067
+ "homepage": "https://phpunit.de/",
3068
+ "keywords": [
3069
+ "phpunit",
3070
+ "testing",
3071
+ "xunit"
3072
+ ],
3073
+ "time": "2019-12-06T05:41:38+00:00"
3074
+ },
3075
+ {
3076
+ "name": "psr/container",
3077
+ "version": "1.0.0",
3078
+ "source": {
3079
+ "type": "git",
3080
+ "url": "https://github.com/php-fig/container.git",
3081
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
3082
+ },
3083
+ "dist": {
3084
+ "type": "zip",
3085
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
3086
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
3087
+ "shasum": ""
3088
+ },
3089
+ "require": {
3090
+ "php": ">=5.3.0"
3091
+ },
3092
+ "type": "library",
3093
+ "extra": {
3094
+ "branch-alias": {
3095
+ "dev-master": "1.0.x-dev"
3096
+ }
3097
+ },
3098
+ "autoload": {
3099
+ "psr-4": {
3100
+ "Psr\\Container\\": "src/"
3101
+ }
3102
+ },
3103
+ "notification-url": "https://packagist.org/downloads/",
3104
+ "license": [
3105
+ "MIT"
3106
+ ],
3107
+ "authors": [
3108
+ {
3109
+ "name": "PHP-FIG",
3110
+ "homepage": "http://www.php-fig.org/"
3111
+ }
3112
+ ],
3113
+ "description": "Common Container Interface (PHP FIG PSR-11)",
3114
+ "homepage": "https://github.com/php-fig/container",
3115
+ "keywords": [
3116
+ "PSR-11",
3117
+ "container",
3118
+ "container-interface",
3119
+ "container-interop",
3120
+ "psr"
3121
+ ],
3122
+ "time": "2017-02-14T16:28:37+00:00"
3123
+ },
3124
+ {
3125
+ "name": "psr/http-message",
3126
+ "version": "1.0.1",
3127
+ "source": {
3128
+ "type": "git",
3129
+ "url": "https://github.com/php-fig/http-message.git",
3130
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
3131
+ },
3132
+ "dist": {
3133
+ "type": "zip",
3134
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
3135
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
3136
+ "shasum": ""
3137
+ },
3138
+ "require": {
3139
+ "php": ">=5.3.0"
3140
+ },
3141
+ "type": "library",
3142
+ "extra": {
3143
+ "branch-alias": {
3144
+ "dev-master": "1.0.x-dev"
3145
+ }
3146
+ },
3147
+ "autoload": {
3148
+ "psr-4": {
3149
+ "Psr\\Http\\Message\\": "src/"
3150
+ }
3151
+ },
3152
+ "notification-url": "https://packagist.org/downloads/",
3153
+ "license": [
3154
+ "MIT"
3155
+ ],
3156
+ "authors": [
3157
+ {
3158
+ "name": "PHP-FIG",
3159
+ "homepage": "http://www.php-fig.org/"
3160
+ }
3161
+ ],
3162
+ "description": "Common interface for HTTP messages",
3163
+ "homepage": "https://github.com/php-fig/http-message",
3164
+ "keywords": [
3165
+ "http",
3166
+ "http-message",
3167
+ "psr",
3168
+ "psr-7",
3169
+ "request",
3170
+ "response"
3171
+ ],
3172
+ "time": "2016-08-06T14:39:51+00:00"
3173
+ },
3174
+ {
3175
+ "name": "psr/log",
3176
+ "version": "1.1.2",
3177
+ "source": {
3178
+ "type": "git",
3179
+ "url": "https://github.com/php-fig/log.git",
3180
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
3181
+ },
3182
+ "dist": {
3183
+ "type": "zip",
3184
+ "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
3185
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
3186
+ "shasum": ""
3187
+ },
3188
+ "require": {
3189
+ "php": ">=5.3.0"
3190
+ },
3191
+ "type": "library",
3192
+ "extra": {
3193
+ "branch-alias": {
3194
+ "dev-master": "1.1.x-dev"
3195
+ }
3196
+ },
3197
+ "autoload": {
3198
+ "psr-4": {
3199
+ "Psr\\Log\\": "Psr/Log/"
3200
+ }
3201
+ },
3202
+ "notification-url": "https://packagist.org/downloads/",
3203
+ "license": [
3204
+ "MIT"
3205
+ ],
3206
+ "authors": [
3207
+ {
3208
+ "name": "PHP-FIG",
3209
+ "homepage": "http://www.php-fig.org/"
3210
+ }
3211
+ ],
3212
+ "description": "Common interface for logging libraries",
3213
+ "homepage": "https://github.com/php-fig/log",
3214
+ "keywords": [
3215
+ "log",
3216
+ "psr",
3217
+ "psr-3"
3218
+ ],
3219
+ "time": "2019-11-01T11:05:21+00:00"
3220
+ },
3221
+ {
3222
+ "name": "psr/simple-cache",
3223
+ "version": "1.0.1",
3224
+ "source": {
3225
+ "type": "git",
3226
+ "url": "https://github.com/php-fig/simple-cache.git",
3227
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
3228
+ },
3229
+ "dist": {
3230
+ "type": "zip",
3231
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
3232
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
3233
+ "shasum": ""
3234
+ },
3235
+ "require": {
3236
+ "php": ">=5.3.0"
3237
+ },
3238
+ "type": "library",
3239
+ "extra": {
3240
+ "branch-alias": {
3241
+ "dev-master": "1.0.x-dev"
3242
+ }
3243
+ },
3244
+ "autoload": {
3245
+ "psr-4": {
3246
+ "Psr\\SimpleCache\\": "src/"
3247
+ }
3248
+ },
3249
+ "notification-url": "https://packagist.org/downloads/",
3250
+ "license": [
3251
+ "MIT"
3252
+ ],
3253
+ "authors": [
3254
+ {
3255
+ "name": "PHP-FIG",
3256
+ "homepage": "http://www.php-fig.org/"
3257
+ }
3258
+ ],
3259
+ "description": "Common interfaces for simple caching",
3260
+ "keywords": [
3261
+ "cache",
3262
+ "caching",
3263
+ "psr",
3264
+ "psr-16",
3265
+ "simple-cache"
3266
+ ],
3267
+ "time": "2017-10-23T01:57:42+00:00"
3268
+ },
3269
+ {
3270
+ "name": "ralouphie/getallheaders",
3271
+ "version": "3.0.3",
3272
+ "source": {
3273
+ "type": "git",
3274
+ "url": "https://github.com/ralouphie/getallheaders.git",
3275
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
3276
+ },
3277
+ "dist": {
3278
+ "type": "zip",
3279
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
3280
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
3281
+ "shasum": ""
3282
+ },
3283
+ "require": {
3284
+ "php": ">=5.6"
3285
+ },
3286
+ "require-dev": {
3287
+ "php-coveralls/php-coveralls": "^2.1",
3288
+ "phpunit/phpunit": "^5 || ^6.5"
3289
+ },
3290
+ "type": "library",
3291
+ "autoload": {
3292
+ "files": [
3293
+ "src/getallheaders.php"
3294
+ ]
3295
+ },
3296
+ "notification-url": "https://packagist.org/downloads/",
3297
+ "license": [
3298
+ "MIT"
3299
+ ],
3300
+ "authors": [
3301
+ {
3302
+ "name": "Ralph Khattar",
3303
+ "email": "ralph.khattar@gmail.com"
3304
+ }
3305
+ ],
3306
+ "description": "A polyfill for getallheaders.",
3307
+ "time": "2019-03-08T08:55:37+00:00"
3308
+ },
3309
+ {
3310
+ "name": "rmccue/requests",
3311
+ "version": "v1.7.0",
3312
+ "source": {
3313
+ "type": "git",
3314
+ "url": "https://github.com/rmccue/Requests.git",
3315
+ "reference": "87932f52ffad70504d93f04f15690cf16a089546"
3316
+ },
3317
+ "dist": {
3318
+ "type": "zip",
3319
+ "url": "https://api.github.com/repos/rmccue/Requests/zipball/87932f52ffad70504d93f04f15690cf16a089546",
3320
+ "reference": "87932f52ffad70504d93f04f15690cf16a089546",
3321
+ "shasum": ""
3322
+ },
3323
+ "require": {
3324
+ "php": ">=5.2"
3325
+ },
3326
+ "require-dev": {
3327
+ "requests/test-server": "dev-master"
3328
+ },
3329
+ "type": "library",
3330
+ "autoload": {
3331
+ "psr-0": {
3332
+ "Requests": "library/"
3333
+ }
3334
+ },
3335
+ "notification-url": "https://packagist.org/downloads/",
3336
+ "license": [
3337
+ "ISC"
3338
+ ],
3339
+ "authors": [
3340
+ {
3341
+ "name": "Ryan McCue",
3342
+ "homepage": "http://ryanmccue.info"
3343
+ }
3344
+ ],
3345
+ "description": "A HTTP library written in PHP, for human beings.",
3346
+ "homepage": "http://github.com/rmccue/Requests",
3347
+ "keywords": [
3348
+ "curl",
3349
+ "fsockopen",
3350
+ "http",
3351
+ "idna",
3352
+ "ipv6",
3353
+ "iri",
3354
+ "sockets"
3355
+ ],
3356
+ "time": "2016-10-13T00:11:37+00:00"
3357
+ },
3358
+ {
3359
+ "name": "sebastian/code-unit-reverse-lookup",
3360
+ "version": "1.0.1",
3361
+ "source": {
3362
+ "type": "git",
3363
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
3364
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
3365
+ },
3366
+ "dist": {
3367
+ "type": "zip",
3368
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
3369
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
3370
+ "shasum": ""
3371
+ },
3372
+ "require": {
3373
+ "php": "^5.6 || ^7.0"
3374
+ },
3375
+ "require-dev": {
3376
+ "phpunit/phpunit": "^5.7 || ^6.0"
3377
+ },
3378
+ "type": "library",
3379
+ "extra": {
3380
+ "branch-alias": {
3381
+ "dev-master": "1.0.x-dev"
3382
+ }
3383
+ },
3384
+ "autoload": {
3385
+ "classmap": [
3386
+ "src/"
3387
+ ]
3388
+ },
3389
+ "notification-url": "https://packagist.org/downloads/",
3390
+ "license": [
3391
+ "BSD-3-Clause"
3392
+ ],
3393
+ "authors": [
3394
+ {
3395
+ "name": "Sebastian Bergmann",
3396
+ "email": "sebastian@phpunit.de"
3397
+ }
3398
+ ],
3399
+ "description": "Looks up which function or method a line of code belongs to",
3400
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
3401
+ "time": "2017-03-04T06:30:41+00:00"
3402
+ },
3403
+ {
3404
+ "name": "sebastian/comparator",
3405
+ "version": "3.0.2",
3406
+ "source": {
3407
+ "type": "git",
3408
+ "url": "https://github.com/sebastianbergmann/comparator.git",
3409
+ "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
3410
+ },
3411
+ "dist": {
3412
+ "type": "zip",
3413
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
3414
+ "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
3415
+ "shasum": ""
3416
+ },
3417
+ "require": {
3418
+ "php": "^7.1",
3419
+ "sebastian/diff": "^3.0",
3420
+ "sebastian/exporter": "^3.1"
3421
+ },
3422
+ "require-dev": {
3423
+ "phpunit/phpunit": "^7.1"
3424
+ },
3425
+ "type": "library",
3426
+ "extra": {
3427
+ "branch-alias": {
3428
+ "dev-master": "3.0-dev"
3429
+ }
3430
+ },
3431
+ "autoload": {
3432
+ "classmap": [
3433
+ "src/"
3434
+ ]
3435
+ },
3436
+ "notification-url": "https://packagist.org/downloads/",
3437
+ "license": [
3438
+ "BSD-3-Clause"
3439
+ ],
3440
+ "authors": [
3441
+ {
3442
+ "name": "Jeff Welch",
3443
+ "email": "whatthejeff@gmail.com"
3444
+ },
3445
+ {
3446
+ "name": "Volker Dusch",
3447
+ "email": "github@wallbash.com"
3448
+ },
3449
+ {
3450
+ "name": "Bernhard Schussek",
3451
+ "email": "bschussek@2bepublished.at"
3452
+ },
3453
+ {
3454
+ "name": "Sebastian Bergmann",
3455
+ "email": "sebastian@phpunit.de"
3456
+ }
3457
+ ],
3458
+ "description": "Provides the functionality to compare PHP values for equality",
3459
+ "homepage": "https://github.com/sebastianbergmann/comparator",
3460
+ "keywords": [
3461
+ "comparator",
3462
+ "compare",
3463
+ "equality"
3464
+ ],
3465
+ "time": "2018-07-12T15:12:46+00:00"
3466
+ },
3467
+ {
3468
+ "name": "sebastian/diff",
3469
+ "version": "3.0.2",
3470
+ "source": {
3471
+ "type": "git",
3472
+ "url": "https://github.com/sebastianbergmann/diff.git",
3473
+ "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
3474
+ },
3475
+ "dist": {
3476
+ "type": "zip",
3477
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
3478
+ "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
3479
+ "shasum": ""
3480
+ },
3481
+ "require": {
3482
+ "php": "^7.1"
3483
+ },
3484
+ "require-dev": {
3485
+ "phpunit/phpunit": "^7.5 || ^8.0",
3486
+ "symfony/process": "^2 || ^3.3 || ^4"
3487
+ },
3488
+ "type": "library",
3489
+ "extra": {
3490
+ "branch-alias": {
3491
+ "dev-master": "3.0-dev"
3492
+ }
3493
+ },
3494
+ "autoload": {
3495
+ "classmap": [
3496
+ "src/"
3497
+ ]
3498
+ },
3499
+ "notification-url": "https://packagist.org/downloads/",
3500
+ "license": [
3501
+ "BSD-3-Clause"
3502
+ ],
3503
+ "authors": [
3504
+ {
3505
+ "name": "Kore Nordmann",
3506
+ "email": "mail@kore-nordmann.de"
3507
+ },
3508
+ {
3509
+ "name": "Sebastian Bergmann",
3510
+ "email": "sebastian@phpunit.de"
3511
+ }
3512
+ ],
3513
+ "description": "Diff implementation",
3514
+ "homepage": "https://github.com/sebastianbergmann/diff",
3515
+ "keywords": [
3516
+ "diff",
3517
+ "udiff",
3518
+ "unidiff",
3519
+ "unified diff"
3520
+ ],
3521
+ "time": "2019-02-04T06:01:07+00:00"
3522
+ },
3523
+ {
3524
+ "name": "sebastian/environment",
3525
+ "version": "4.2.3",
3526
+ "source": {
3527
+ "type": "git",
3528
+ "url": "https://github.com/sebastianbergmann/environment.git",
3529
+ "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368"
3530
+ },
3531
+ "dist": {
3532
+ "type": "zip",
3533
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
3534
+ "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
3535
+ "shasum": ""
3536
+ },
3537
+ "require": {
3538
+ "php": "^7.1"
3539
+ },
3540
+ "require-dev": {
3541
+ "phpunit/phpunit": "^7.5"
3542
+ },
3543
+ "suggest": {
3544
+ "ext-posix": "*"
3545
+ },
3546
+ "type": "library",
3547
+ "extra": {
3548
+ "branch-alias": {
3549
+ "dev-master": "4.2-dev"
3550
+ }
3551
+ },
3552
+ "autoload": {
3553
+ "classmap": [
3554
+ "src/"
3555
+ ]
3556
+ },
3557
+ "notification-url": "https://packagist.org/downloads/",
3558
+ "license": [
3559
+ "BSD-3-Clause"
3560
+ ],
3561
+ "authors": [
3562
+ {
3563
+ "name": "Sebastian Bergmann",
3564
+ "email": "sebastian@phpunit.de"
3565
+ }
3566
+ ],
3567
+ "description": "Provides functionality to handle HHVM/PHP environments",
3568
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
3569
+ "keywords": [
3570
+ "Xdebug",
3571
+ "environment",
3572
+ "hhvm"
3573
+ ],
3574
+ "time": "2019-11-20T08:46:58+00:00"
3575
+ },
3576
+ {
3577
+ "name": "sebastian/exporter",
3578
+ "version": "3.1.2",
3579
+ "source": {
3580
+ "type": "git",
3581
+ "url": "https://github.com/sebastianbergmann/exporter.git",
3582
+ "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
3583
+ },
3584
+ "dist": {
3585
+ "type": "zip",
3586
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
3587
+ "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
3588
+ "shasum": ""
3589
+ },
3590
+ "require": {
3591
+ "php": "^7.0",
3592
+ "sebastian/recursion-context": "^3.0"
3593
+ },
3594
+ "require-dev": {
3595
+ "ext-mbstring": "*",
3596
+ "phpunit/phpunit": "^6.0"
3597
+ },
3598
+ "type": "library",
3599
+ "extra": {
3600
+ "branch-alias": {
3601
+ "dev-master": "3.1.x-dev"
3602
+ }
3603
+ },
3604
+ "autoload": {
3605
+ "classmap": [
3606
+ "src/"
3607
+ ]
3608
+ },
3609
+ "notification-url": "https://packagist.org/downloads/",
3610
+ "license": [
3611
+ "BSD-3-Clause"
3612
+ ],
3613
+ "authors": [
3614
+ {
3615
+ "name": "Sebastian Bergmann",
3616
+ "email": "sebastian@phpunit.de"
3617
+ },
3618
+ {
3619
+ "name": "Jeff Welch",
3620
+ "email": "whatthejeff@gmail.com"
3621
+ },
3622
+ {
3623
+ "name": "Volker Dusch",
3624
+ "email": "github@wallbash.com"
3625
+ },
3626
+ {
3627
+ "name": "Adam Harvey",
3628
+ "email": "aharvey@php.net"
3629
+ },
3630
+ {
3631
+ "name": "Bernhard Schussek",
3632
+ "email": "bschussek@gmail.com"
3633
+ }
3634
+ ],
3635
+ "description": "Provides the functionality to export PHP variables for visualization",
3636
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
3637
+ "keywords": [
3638
+ "export",
3639
+ "exporter"
3640
+ ],
3641
+ "time": "2019-09-14T09:02:43+00:00"
3642
+ },
3643
+ {
3644
+ "name": "sebastian/global-state",
3645
+ "version": "3.0.0",
3646
+ "source": {
3647
+ "type": "git",
3648
+ "url": "https://github.com/sebastianbergmann/global-state.git",
3649
+ "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
3650
+ },
3651
+ "dist": {
3652
+ "type": "zip",
3653
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
3654
+ "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
3655
+ "shasum": ""
3656
+ },
3657
+ "require": {
3658
+ "php": "^7.2",
3659
+ "sebastian/object-reflector": "^1.1.1",
3660
+ "sebastian/recursion-context": "^3.0"
3661
+ },
3662
+ "require-dev": {
3663
+ "ext-dom": "*",
3664
+ "phpunit/phpunit": "^8.0"
3665
+ },
3666
+ "suggest": {
3667
+ "ext-uopz": "*"
3668
+ },
3669
+ "type": "library",
3670
+ "extra": {
3671
+ "branch-alias": {
3672
+ "dev-master": "3.0-dev"
3673
+ }
3674
+ },
3675
+ "autoload": {
3676
+ "classmap": [
3677
+ "src/"
3678
+ ]
3679
+ },
3680
+ "notification-url": "https://packagist.org/downloads/",
3681
+ "license": [
3682
+ "BSD-3-Clause"
3683
+ ],
3684
+ "authors": [
3685
+ {
3686
+ "name": "Sebastian Bergmann",
3687
+ "email": "sebastian@phpunit.de"
3688
+ }
3689
+ ],
3690
+ "description": "Snapshotting of global state",
3691
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
3692
+ "keywords": [
3693
+ "global state"
3694
+ ],
3695
+ "time": "2019-02-01T05:30:01+00:00"
3696
+ },
3697
+ {
3698
+ "name": "sebastian/object-enumerator",
3699
+ "version": "3.0.3",
3700
+ "source": {
3701
+ "type": "git",
3702
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
3703
+ "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
3704
+ },
3705
+ "dist": {
3706
+ "type": "zip",
3707
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
3708
+ "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
3709
+ "shasum": ""
3710
+ },
3711
+ "require": {
3712
+ "php": "^7.0",
3713
+ "sebastian/object-reflector": "^1.1.1",
3714
+ "sebastian/recursion-context": "^3.0"
3715
+ },
3716
+ "require-dev": {
3717
+ "phpunit/phpunit": "^6.0"
3718
+ },
3719
+ "type": "library",
3720
+ "extra": {
3721
+ "branch-alias": {
3722
+ "dev-master": "3.0.x-dev"
3723
+ }
3724
+ },
3725
+ "autoload": {
3726
+ "classmap": [
3727
+ "src/"
3728
+ ]
3729
+ },
3730
+ "notification-url": "https://packagist.org/downloads/",
3731
+ "license": [
3732
+ "BSD-3-Clause"
3733
+ ],
3734
+ "authors": [
3735
+ {
3736
+ "name": "Sebastian Bergmann",
3737
+ "email": "sebastian@phpunit.de"
3738
+ }
3739
+ ],
3740
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
3741
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
3742
+ "time": "2017-08-03T12:35:26+00:00"
3743
+ },
3744
+ {
3745
+ "name": "sebastian/object-reflector",
3746
+ "version": "1.1.1",
3747
+ "source": {
3748
+ "type": "git",
3749
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
3750
+ "reference": "773f97c67f28de00d397be301821b06708fca0be"
3751
+ },
3752
+ "dist": {
3753
+ "type": "zip",
3754
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
3755
+ "reference": "773f97c67f28de00d397be301821b06708fca0be",
3756
+ "shasum": ""
3757
+ },
3758
+ "require": {
3759
+ "php": "^7.0"
3760
+ },
3761
+ "require-dev": {
3762
+ "phpunit/phpunit": "^6.0"
3763
+ },
3764
+ "type": "library",
3765
+ "extra": {
3766
+ "branch-alias": {
3767
+ "dev-master": "1.1-dev"
3768
+ }
3769
+ },
3770
+ "autoload": {
3771
+ "classmap": [
3772
+ "src/"
3773
+ ]
3774
+ },
3775
+ "notification-url": "https://packagist.org/downloads/",
3776
+ "license": [
3777
+ "BSD-3-Clause"
3778
+ ],
3779
+ "authors": [
3780
+ {
3781
+ "name": "Sebastian Bergmann",
3782
+ "email": "sebastian@phpunit.de"
3783
+ }
3784
+ ],
3785
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
3786
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
3787
+ "time": "2017-03-29T09:07:27+00:00"
3788
+ },
3789
+ {
3790
+ "name": "sebastian/recursion-context",
3791
+ "version": "3.0.0",
3792
+ "source": {
3793
+ "type": "git",
3794
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
3795
+ "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
3796
+ },
3797
+ "dist": {
3798
+ "type": "zip",
3799
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
3800
+ "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
3801
+ "shasum": ""
3802
+ },
3803
+ "require": {
3804
+ "php": "^7.0"
3805
+ },
3806
+ "require-dev": {
3807
+ "phpunit/phpunit": "^6.0"
3808
+ },
3809
+ "type": "library",
3810
+ "extra": {
3811
+ "branch-alias": {
3812
+ "dev-master": "3.0.x-dev"
3813
+ }
3814
+ },
3815
+ "autoload": {
3816
+ "classmap": [
3817
+ "src/"
3818
+ ]
3819
+ },
3820
+ "notification-url": "https://packagist.org/downloads/",
3821
+ "license": [
3822
+ "BSD-3-Clause"
3823
+ ],
3824
+ "authors": [
3825
+ {
3826
+ "name": "Jeff Welch",
3827
+ "email": "whatthejeff@gmail.com"
3828
+ },
3829
+ {
3830
+ "name": "Sebastian Bergmann",
3831
+ "email": "sebastian@phpunit.de"
3832
+ },
3833
+ {
3834
+ "name": "Adam Harvey",
3835
+ "email": "aharvey@php.net"
3836
+ }
3837
+ ],
3838
+ "description": "Provides functionality to recursively process PHP variables",
3839
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
3840
+ "time": "2017-03-03T06:23:57+00:00"
3841
+ },
3842
+ {
3843
+ "name": "sebastian/resource-operations",
3844
+ "version": "2.0.1",
3845
+ "source": {
3846
+ "type": "git",
3847
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
3848
+ "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
3849
+ },
3850
+ "dist": {
3851
+ "type": "zip",
3852
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
3853
+ "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
3854
+ "shasum": ""
3855
+ },
3856
+ "require": {
3857
+ "php": "^7.1"
3858
+ },
3859
+ "type": "library",
3860
+ "extra": {
3861
+ "branch-alias": {
3862
+ "dev-master": "2.0-dev"
3863
+ }
3864
+ },
3865
+ "autoload": {
3866
+ "classmap": [
3867
+ "src/"
3868
+ ]
3869
+ },
3870
+ "notification-url": "https://packagist.org/downloads/",
3871
+ "license": [
3872
+ "BSD-3-Clause"
3873
+ ],
3874
+ "authors": [
3875
+ {
3876
+ "name": "Sebastian Bergmann",
3877
+ "email": "sebastian@phpunit.de"
3878
+ }
3879
+ ],
3880
+ "description": "Provides a list of PHP built-in functions that operate on resources",
3881
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
3882
+ "time": "2018-10-04T04:07:39+00:00"
3883
+ },
3884
+ {
3885
+ "name": "sebastian/type",
3886
+ "version": "1.1.3",
3887
+ "source": {
3888
+ "type": "git",
3889
+ "url": "https://github.com/sebastianbergmann/type.git",
3890
+ "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
3891
+ },
3892
+ "dist": {
3893
+ "type": "zip",
3894
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
3895
+ "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
3896
+ "shasum": ""
3897
+ },
3898
+ "require": {
3899
+ "php": "^7.2"
3900
+ },
3901
+ "require-dev": {
3902
+ "phpunit/phpunit": "^8.2"
3903
+ },
3904
+ "type": "library",
3905
+ "extra": {
3906
+ "branch-alias": {
3907
+ "dev-master": "1.1-dev"
3908
+ }
3909
+ },
3910
+ "autoload": {
3911
+ "classmap": [
3912
+ "src/"
3913
+ ]
3914
+ },
3915
+ "notification-url": "https://packagist.org/downloads/",
3916
+ "license": [
3917
+ "BSD-3-Clause"
3918
+ ],
3919
+ "authors": [
3920
+ {
3921
+ "name": "Sebastian Bergmann",
3922
+ "email": "sebastian@phpunit.de",
3923
+ "role": "lead"
3924
+ }
3925
+ ],
3926
+ "description": "Collection of value objects that represent the types of the PHP type system",
3927
+ "homepage": "https://github.com/sebastianbergmann/type",
3928
+ "time": "2019-07-02T08:10:15+00:00"
3929
+ },
3930
+ {
3931
+ "name": "sebastian/version",
3932
+ "version": "2.0.1",
3933
+ "source": {
3934
+ "type": "git",
3935
+ "url": "https://github.com/sebastianbergmann/version.git",
3936
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
3937
+ },
3938
+ "dist": {
3939
+ "type": "zip",
3940
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
3941
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
3942
+ "shasum": ""
3943
+ },
3944
+ "require": {
3945
+ "php": ">=5.6"
3946
+ },
3947
+ "type": "library",
3948
+ "extra": {
3949
+ "branch-alias": {
3950
+ "dev-master": "2.0.x-dev"
3951
+ }
3952
+ },
3953
+ "autoload": {
3954
+ "classmap": [
3955
+ "src/"
3956
+ ]
3957
+ },
3958
+ "notification-url": "https://packagist.org/downloads/",
3959
+ "license": [
3960
+ "BSD-3-Clause"
3961
+ ],
3962
+ "authors": [
3963
+ {
3964
+ "name": "Sebastian Bergmann",
3965
+ "email": "sebastian@phpunit.de",
3966
+ "role": "lead"
3967
+ }
3968
+ ],
3969
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
3970
+ "homepage": "https://github.com/sebastianbergmann/version",
3971
+ "time": "2016-10-03T07:35:21+00:00"
3972
+ },
3973
+ {
3974
+ "name": "seld/jsonlint",
3975
+ "version": "1.7.2",
3976
+ "source": {
3977
+ "type": "git",
3978
+ "url": "https://github.com/Seldaek/jsonlint.git",
3979
+ "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19"
3980
+ },
3981
+ "dist": {
3982
+ "type": "zip",
3983
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19",
3984
+ "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19",
3985
+ "shasum": ""
3986
+ },
3987
+ "require": {
3988
+ "php": "^5.3 || ^7.0"
3989
+ },
3990
+ "require-dev": {
3991
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
3992
+ },
3993
+ "bin": [
3994
+ "bin/jsonlint"
3995
+ ],
3996
+ "type": "library",
3997
+ "autoload": {
3998
+ "psr-4": {
3999
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
4000
+ }
4001
+ },
4002
+ "notification-url": "https://packagist.org/downloads/",
4003
+ "license": [
4004
+ "MIT"
4005
+ ],
4006
+ "authors": [
4007
+ {
4008
+ "name": "Jordi Boggiano",
4009
+ "email": "j.boggiano@seld.be",
4010
+ "homepage": "http://seld.be"
4011
+ }
4012
+ ],
4013
+ "description": "JSON Linter",
4014
+ "keywords": [
4015
+ "json",
4016
+ "linter",
4017
+ "parser",
4018
+ "validator"
4019
+ ],
4020
+ "time": "2019-10-24T14:27:39+00:00"
4021
+ },
4022
+ {
4023
+ "name": "seld/phar-utils",
4024
+ "version": "1.0.1",
4025
+ "source": {
4026
+ "type": "git",
4027
+ "url": "https://github.com/Seldaek/phar-utils.git",
4028
+ "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
4029
+ },
4030
+ "dist": {
4031
+ "type": "zip",
4032
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
4033
+ "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
4034
+ "shasum": ""
4035
+ },
4036
+ "require": {
4037
+ "php": ">=5.3"
4038
+ },
4039
+ "type": "library",
4040
+ "extra": {
4041
+ "branch-alias": {
4042
+ "dev-master": "1.x-dev"
4043
+ }
4044
+ },
4045
+ "autoload": {
4046
+ "psr-4": {
4047
+ "Seld\\PharUtils\\": "src/"
4048
+ }
4049
+ },
4050
+ "notification-url": "https://packagist.org/downloads/",
4051
+ "license": [
4052
+ "MIT"
4053
+ ],
4054
+ "authors": [
4055
+ {
4056
+ "name": "Jordi Boggiano",
4057
+ "email": "j.boggiano@seld.be"
4058
+ }
4059
+ ],
4060
+ "description": "PHAR file format utilities, for when PHP phars you up",
4061
+ "keywords": [
4062
+ "phra"
4063
+ ],
4064
+ "time": "2015-10-13T18:44:15+00:00"
4065
+ },
4066
+ {
4067
+ "name": "symfony/browser-kit",
4068
+ "version": "v4.4.1",
4069
+ "source": {
4070
+ "type": "git",
4071
+ "url": "https://github.com/symfony/browser-kit.git",
4072
+ "reference": "e19e465c055137938afd40cfddd687e7511bbbf0"
4073
+ },
4074
+ "dist": {
4075
+ "type": "zip",
4076
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e19e465c055137938afd40cfddd687e7511bbbf0",
4077
+ "reference": "e19e465c055137938afd40cfddd687e7511bbbf0",
4078
+ "shasum": ""
4079
+ },
4080
+ "require": {
4081
+ "php": "^7.1.3",
4082
+ "symfony/dom-crawler": "^3.4|^4.0|^5.0"
4083
+ },
4084
+ "require-dev": {
4085
+ "symfony/css-selector": "^3.4|^4.0|^5.0",
4086
+ "symfony/http-client": "^4.3|^5.0",
4087
+ "symfony/mime": "^4.3|^5.0",
4088
+ "symfony/process": "^3.4|^4.0|^5.0"
4089
+ },
4090
+ "suggest": {
4091
+ "symfony/process": ""
4092
+ },
4093
+ "type": "library",
4094
+ "extra": {
4095
+ "branch-alias": {
4096
+ "dev-master": "4.4-dev"
4097
+ }
4098
+ },
4099
+ "autoload": {
4100
+ "psr-4": {
4101
+ "Symfony\\Component\\BrowserKit\\": ""
4102
+ },
4103
+ "exclude-from-classmap": [
4104
+ "/Tests/"
4105
+ ]
4106
+ },
4107
+ "notification-url": "https://packagist.org/downloads/",
4108
+ "license": [
4109
+ "MIT"
4110
+ ],
4111
+ "authors": [
4112
+ {
4113
+ "name": "Fabien Potencier",
4114
+ "email": "fabien@symfony.com"
4115
+ },
4116
+ {
4117
+ "name": "Symfony Community",
4118
+ "homepage": "https://symfony.com/contributors"
4119
+ }
4120
+ ],
4121
+ "description": "Symfony BrowserKit Component",
4122
+ "homepage": "https://symfony.com",
4123
+ "time": "2019-10-28T20:30:34+00:00"
4124
+ },
4125
+ {
4126
+ "name": "symfony/console",
4127
+ "version": "v4.4.1",
4128
+ "source": {
4129
+ "type": "git",
4130
+ "url": "https://github.com/symfony/console.git",
4131
+ "reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201"
4132
+ },
4133
+ "dist": {
4134
+ "type": "zip",
4135
+ "url": "https://api.github.com/repos/symfony/console/zipball/f0aea3df20d15635b3cb9730ca5eea1c65b7f201",
4136
+ "reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201",
4137
+ "shasum": ""
4138
+ },
4139
+ "require": {
4140
+ "php": "^7.1.3",
4141
+ "symfony/polyfill-mbstring": "~1.0",
4142
+ "symfony/polyfill-php73": "^1.8",
4143
+ "symfony/service-contracts": "^1.1|^2"
4144
+ },
4145
+ "conflict": {
4146
+ "symfony/dependency-injection": "<3.4",
4147
+ "symfony/event-dispatcher": "<4.3|>=5",
4148
+ "symfony/lock": "<4.4",
4149
+ "symfony/process": "<3.3"
4150
+ },
4151
+ "provide": {
4152
+ "psr/log-implementation": "1.0"
4153
+ },
4154
+ "require-dev": {
4155
+ "psr/log": "~1.0",
4156
+ "symfony/config": "^3.4|^4.0|^5.0",
4157
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
4158
+ "symfony/event-dispatcher": "^4.3",
4159
+ "symfony/lock": "^4.4|^5.0",
4160
+ "symfony/process": "^3.4|^4.0|^5.0",
4161
+ "symfony/var-dumper": "^4.3|^5.0"
4162
+ },
4163
+ "suggest": {
4164
+ "psr/log": "For using the console logger",
4165
+ "symfony/event-dispatcher": "",
4166
+ "symfony/lock": "",
4167
+ "symfony/process": ""
4168
+ },
4169
+ "type": "library",
4170
+ "extra": {
4171
+ "branch-alias": {
4172
+ "dev-master": "4.4-dev"
4173
+ }
4174
+ },
4175
+ "autoload": {
4176
+ "psr-4": {
4177
+ "Symfony\\Component\\Console\\": ""
4178
+ },
4179
+ "exclude-from-classmap": [
4180
+ "/Tests/"
4181
+ ]
4182
+ },
4183
+ "notification-url": "https://packagist.org/downloads/",
4184
+ "license": [
4185
+ "MIT"
4186
+ ],
4187
+ "authors": [
4188
+ {
4189
+ "name": "Fabien Potencier",
4190
+ "email": "fabien@symfony.com"
4191
+ },
4192
+ {
4193
+ "name": "Symfony Community",
4194
+ "homepage": "https://symfony.com/contributors"
4195
+ }
4196
+ ],
4197
+ "description": "Symfony Console Component",
4198
+ "homepage": "https://symfony.com",
4199
+ "time": "2019-12-01T10:06:17+00:00"
4200
+ },
4201
+ {
4202
+ "name": "symfony/css-selector",
4203
+ "version": "v4.4.1",
4204
+ "source": {
4205
+ "type": "git",
4206
+ "url": "https://github.com/symfony/css-selector.git",
4207
+ "reference": "64acec7e0d67125e9f4656c68d4a38a42ab5a0b7"
4208
+ },
4209
+ "dist": {
4210
+ "type": "zip",
4211
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/64acec7e0d67125e9f4656c68d4a38a42ab5a0b7",
4212
+ "reference": "64acec7e0d67125e9f4656c68d4a38a42ab5a0b7",
4213
+ "shasum": ""
4214
+ },
4215
+ "require": {
4216
+ "php": "^7.1.3"
4217
+ },
4218
+ "type": "library",
4219
+ "extra": {
4220
+ "branch-alias": {
4221
+ "dev-master": "4.4-dev"
4222
+ }
4223
+ },
4224
+ "autoload": {
4225
+ "psr-4": {
4226
+ "Symfony\\Component\\CssSelector\\": ""
4227
+ },
4228
+ "exclude-from-classmap": [
4229
+ "/Tests/"
4230
+ ]
4231
+ },
4232
+ "notification-url": "https://packagist.org/downloads/",
4233
+ "license": [
4234
+ "MIT"
4235
+ ],
4236
+ "authors": [
4237
+ {
4238
+ "name": "Fabien Potencier",
4239
+ "email": "fabien@symfony.com"
4240
+ },
4241
+ {
4242
+ "name": "Jean-François Simon",
4243
+ "email": "jeanfrancois.simon@sensiolabs.com"
4244
+ },
4245
+ {
4246
+ "name": "Symfony Community",
4247
+ "homepage": "https://symfony.com/contributors"
4248
+ }
4249
+ ],
4250
+ "description": "Symfony CssSelector Component",
4251
+ "homepage": "https://symfony.com",
4252
+ "time": "2019-10-12T00:35:04+00:00"
4253
+ },
4254
+ {
4255
+ "name": "symfony/dom-crawler",
4256
+ "version": "v4.4.1",
4257
+ "source": {
4258
+ "type": "git",
4259
+ "url": "https://github.com/symfony/dom-crawler.git",
4260
+ "reference": "36bbcab9369fc2f583220890efd43bf262d563fd"
4261
+ },
4262
+ "dist": {
4263
+ "type": "zip",
4264
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/36bbcab9369fc2f583220890efd43bf262d563fd",
4265
+ "reference": "36bbcab9369fc2f583220890efd43bf262d563fd",
4266
+ "shasum": ""
4267
+ },
4268
+ "require": {
4269
+ "php": "^7.1.3",
4270
+ "symfony/polyfill-ctype": "~1.8",
4271
+ "symfony/polyfill-mbstring": "~1.0"
4272
+ },
4273
+ "conflict": {
4274
+ "masterminds/html5": "<2.6"
4275
+ },
4276
+ "require-dev": {
4277
+ "masterminds/html5": "^2.6",
4278
+ "symfony/css-selector": "^3.4|^4.0|^5.0"
4279
+ },
4280
+ "suggest": {
4281
+ "symfony/css-selector": ""
4282
+ },
4283
+ "type": "library",
4284
+ "extra": {
4285
+ "branch-alias": {
4286
+ "dev-master": "4.4-dev"
4287
+ }
4288
+ },
4289
+ "autoload": {
4290
+ "psr-4": {
4291
+ "Symfony\\Component\\DomCrawler\\": ""
4292
+ },
4293
+ "exclude-from-classmap": [
4294
+ "/Tests/"
4295
+ ]
4296
+ },
4297
+ "notification-url": "https://packagist.org/downloads/",
4298
+ "license": [
4299
+ "MIT"
4300
+ ],
4301
+ "authors": [
4302
+ {
4303
+ "name": "Fabien Potencier",
4304
+ "email": "fabien@symfony.com"
4305
+ },
4306
+ {
4307
+ "name": "Symfony Community",
4308
+ "homepage": "https://symfony.com/contributors"
4309
+ }
4310
+ ],
4311
+ "description": "Symfony DomCrawler Component",
4312
+ "homepage": "https://symfony.com",
4313
+ "time": "2019-10-29T11:38:30+00:00"
4314
+ },
4315
+ {
4316
+ "name": "symfony/event-dispatcher",
4317
+ "version": "v4.4.1",
4318
+ "source": {
4319
+ "type": "git",
4320
+ "url": "https://github.com/symfony/event-dispatcher.git",
4321
+ "reference": "b3c3068a72623287550fe20b84a2b01dcba2686f"
4322
+ },
4323
+ "dist": {
4324
+ "type": "zip",
4325
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b3c3068a72623287550fe20b84a2b01dcba2686f",
4326
+ "reference": "b3c3068a72623287550fe20b84a2b01dcba2686f",
4327
+ "shasum": ""
4328
+ },
4329
+ "require": {
4330
+ "php": "^7.1.3",
4331
+ "symfony/event-dispatcher-contracts": "^1.1"
4332
+ },
4333
+ "conflict": {
4334
+ "symfony/dependency-injection": "<3.4"
4335
+ },
4336
+ "provide": {
4337
+ "psr/event-dispatcher-implementation": "1.0",
4338
+ "symfony/event-dispatcher-implementation": "1.1"
4339
+ },
4340
+ "require-dev": {
4341
+ "psr/log": "~1.0",
4342
+ "symfony/config": "^3.4|^4.0|^5.0",
4343
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
4344
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
4345
+ "symfony/http-foundation": "^3.4|^4.0|^5.0",
4346
+ "symfony/service-contracts": "^1.1|^2",
4347
+ "symfony/stopwatch": "^3.4|^4.0|^5.0"
4348
+ },
4349
+ "suggest": {
4350
+ "symfony/dependency-injection": "",
4351
+ "symfony/http-kernel": ""
4352
+ },
4353
+ "type": "library",
4354
+ "extra": {
4355
+ "branch-alias": {
4356
+ "dev-master": "4.4-dev"
4357
+ }
4358
+ },
4359
+ "autoload": {
4360
+ "psr-4": {
4361
+ "Symfony\\Component\\EventDispatcher\\": ""
4362
+ },
4363
+ "exclude-from-classmap": [
4364
+ "/Tests/"
4365
+ ]
4366
+ },
4367
+ "notification-url": "https://packagist.org/downloads/",
4368
+ "license": [
4369
+ "MIT"
4370
+ ],
4371
+ "authors": [
4372
+ {
4373
+ "name": "Fabien Potencier",
4374
+ "email": "fabien@symfony.com"
4375
+ },
4376
+ {
4377
+ "name": "Symfony Community",
4378
+ "homepage": "https://symfony.com/contributors"
4379
+ }
4380
+ ],
4381
+ "description": "Symfony EventDispatcher Component",
4382
+ "homepage": "https://symfony.com",
4383
+ "time": "2019-11-28T13:33:56+00:00"
4384
+ },
4385
+ {
4386
+ "name": "symfony/event-dispatcher-contracts",
4387
+ "version": "v1.1.7",
4388
+ "source": {
4389
+ "type": "git",
4390
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
4391
+ "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18"
4392
+ },
4393
+ "dist": {
4394
+ "type": "zip",
4395
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18",
4396
+ "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18",
4397
+ "shasum": ""
4398
+ },
4399
+ "require": {
4400
+ "php": "^7.1.3"
4401
+ },
4402
+ "suggest": {
4403
+ "psr/event-dispatcher": "",
4404
+ "symfony/event-dispatcher-implementation": ""
4405
+ },
4406
+ "type": "library",
4407
+ "extra": {
4408
+ "branch-alias": {
4409
+ "dev-master": "1.1-dev"
4410
+ }
4411
+ },
4412
+ "autoload": {
4413
+ "psr-4": {
4414
+ "Symfony\\Contracts\\EventDispatcher\\": ""
4415
+ }
4416
+ },
4417
+ "notification-url": "https://packagist.org/downloads/",
4418
+ "license": [
4419
+ "MIT"
4420
+ ],
4421
+ "authors": [
4422
+ {
4423
+ "name": "Nicolas Grekas",
4424
+ "email": "p@tchwork.com"
4425
+ },
4426
+ {
4427
+ "name": "Symfony Community",
4428
+ "homepage": "https://symfony.com/contributors"
4429
+ }
4430
+ ],
4431
+ "description": "Generic abstractions related to dispatching event",
4432
+ "homepage": "https://symfony.com",
4433
+ "keywords": [
4434
+ "abstractions",
4435
+ "contracts",
4436
+ "decoupling",
4437
+ "interfaces",
4438
+ "interoperability",
4439
+ "standards"
4440
+ ],
4441
+ "time": "2019-09-17T09:54:03+00:00"
4442
+ },
4443
+ {
4444
+ "name": "symfony/filesystem",
4445
+ "version": "v3.4.36",
4446
+ "source": {
4447
+ "type": "git",
4448
+ "url": "https://github.com/symfony/filesystem.git",
4449
+ "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2"
4450
+ },
4451
+ "dist": {
4452
+ "type": "zip",
4453
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/00cdad0936d06fab136944bc2342b762b1c3a4a2",
4454
+ "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2",
4455
+ "shasum": ""
4456
+ },
4457
+ "require": {
4458
+ "php": "^5.5.9|>=7.0.8",
4459
+ "symfony/polyfill-ctype": "~1.8"
4460
+ },
4461
+ "type": "library",
4462
+ "extra": {
4463
+ "branch-alias": {
4464
+ "dev-master": "3.4-dev"
4465
+ }
4466
+ },
4467
+ "autoload": {
4468
+ "psr-4": {
4469
+ "Symfony\\Component\\Filesystem\\": ""
4470
+ },
4471
+ "exclude-from-classmap": [
4472
+ "/Tests/"
4473
+ ]
4474
+ },
4475
+ "notification-url": "https://packagist.org/downloads/",
4476
+ "license": [
4477
+ "MIT"
4478
+ ],
4479
+ "authors": [
4480
+ {
4481
+ "name": "Fabien Potencier",
4482
+ "email": "fabien@symfony.com"
4483
+ },
4484
+ {
4485
+ "name": "Symfony Community",
4486
+ "homepage": "https://symfony.com/contributors"
4487
+ }
4488
+ ],
4489
+ "description": "Symfony Filesystem Component",
4490
+ "homepage": "https://symfony.com",
4491
+ "time": "2019-11-25T16:36:22+00:00"
4492
+ },
4493
+ {
4494
+ "name": "symfony/finder",
4495
+ "version": "v4.4.1",
4496
+ "source": {
4497
+ "type": "git",
4498
+ "url": "https://github.com/symfony/finder.git",
4499
+ "reference": "ce8743441da64c41e2a667b8eb66070444ed911e"
4500
+ },
4501
+ "dist": {
4502
+ "type": "zip",
4503
+ "url": "https://api.github.com/repos/symfony/finder/zipball/ce8743441da64c41e2a667b8eb66070444ed911e",
4504
+ "reference": "ce8743441da64c41e2a667b8eb66070444ed911e",
4505
+ "shasum": ""
4506
+ },
4507
+ "require": {
4508
+ "php": "^7.1.3"
4509
+ },
4510
+ "type": "library",
4511
+ "extra": {
4512
+ "branch-alias": {
4513
+ "dev-master": "4.4-dev"
4514
+ }
4515
+ },
4516
+ "autoload": {
4517
+ "psr-4": {
4518
+ "Symfony\\Component\\Finder\\": ""
4519
+ },
4520
+ "exclude-from-classmap": [
4521
+ "/Tests/"
4522
+ ]
4523
+ },
4524
+ "notification-url": "https://packagist.org/downloads/",
4525
+ "license": [
4526
+ "MIT"
4527
+ ],
4528
+ "authors": [
4529
+ {
4530
+ "name": "Fabien Potencier",
4531
+ "email": "fabien@symfony.com"
4532
+ },
4533
+ {
4534
+ "name": "Symfony Community",
4535
+ "homepage": "https://symfony.com/contributors"
4536
+ }
4537
+ ],
4538
+ "description": "Symfony Finder Component",
4539
+ "homepage": "https://symfony.com",
4540
+ "time": "2019-11-17T21:56:56+00:00"
4541
+ },
4542
+ {
4543
+ "name": "symfony/polyfill-ctype",
4544
+ "version": "v1.13.1",
4545
+ "source": {
4546
+ "type": "git",
4547
+ "url": "https://github.com/symfony/polyfill-ctype.git",
4548
+ "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
4549
+ },
4550
+ "dist": {
4551
+ "type": "zip",
4552
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
4553
+ "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
4554
+ "shasum": ""
4555
+ },
4556
+ "require": {
4557
+ "php": ">=5.3.3"
4558
+ },
4559
+ "suggest": {
4560
+ "ext-ctype": "For best performance"
4561
+ },
4562
+ "type": "library",
4563
+ "extra": {
4564
+ "branch-alias": {
4565
+ "dev-master": "1.13-dev"
4566
+ }
4567
+ },
4568
+ "autoload": {
4569
+ "psr-4": {
4570
+ "Symfony\\Polyfill\\Ctype\\": ""
4571
+ },
4572
+ "files": [
4573
+ "bootstrap.php"
4574
+ ]
4575
+ },
4576
+ "notification-url": "https://packagist.org/downloads/",
4577
+ "license": [
4578
+ "MIT"
4579
+ ],
4580
+ "authors": [
4581
+ {
4582
+ "name": "Gert de Pagter",
4583
+ "email": "BackEndTea@gmail.com"
4584
+ },
4585
+ {
4586
+ "name": "Symfony Community",
4587
+ "homepage": "https://symfony.com/contributors"
4588
+ }
4589
+ ],
4590
+ "description": "Symfony polyfill for ctype functions",
4591
+ "homepage": "https://symfony.com",
4592
+ "keywords": [
4593
+ "compatibility",
4594
+ "ctype",
4595
+ "polyfill",
4596
+ "portable"
4597
+ ],
4598
+ "time": "2019-11-27T13:56:44+00:00"
4599
+ },
4600
+ {
4601
+ "name": "symfony/polyfill-mbstring",
4602
+ "version": "v1.13.1",
4603
+ "source": {
4604
+ "type": "git",
4605
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
4606
+ "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
4607
+ },
4608
+ "dist": {
4609
+ "type": "zip",
4610
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
4611
+ "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
4612
+ "shasum": ""
4613
+ },
4614
+ "require": {
4615
+ "php": ">=5.3.3"
4616
+ },
4617
+ "suggest": {
4618
+ "ext-mbstring": "For best performance"
4619
+ },
4620
+ "type": "library",
4621
+ "extra": {
4622
+ "branch-alias": {
4623
+ "dev-master": "1.13-dev"
4624
+ }
4625
+ },
4626
+ "autoload": {
4627
+ "psr-4": {
4628
+ "Symfony\\Polyfill\\Mbstring\\": ""
4629
+ },
4630
+ "files": [
4631
+ "bootstrap.php"
4632
+ ]
4633
+ },
4634
+ "notification-url": "https://packagist.org/downloads/",
4635
+ "license": [
4636
+ "MIT"
4637
+ ],
4638
+ "authors": [
4639
+ {
4640
+ "name": "Nicolas Grekas",
4641
+ "email": "p@tchwork.com"
4642
+ },
4643
+ {
4644
+ "name": "Symfony Community",
4645
+ "homepage": "https://symfony.com/contributors"
4646
+ }
4647
+ ],
4648
+ "description": "Symfony polyfill for the Mbstring extension",
4649
+ "homepage": "https://symfony.com",
4650
+ "keywords": [
4651
+ "compatibility",
4652
+ "mbstring",
4653
+ "polyfill",
4654
+ "portable",
4655
+ "shim"
4656
+ ],
4657
+ "time": "2019-11-27T14:18:11+00:00"
4658
+ },
4659
+ {
4660
+ "name": "symfony/polyfill-php73",
4661
+ "version": "v1.13.1",
4662
+ "source": {
4663
+ "type": "git",
4664
+ "url": "https://github.com/symfony/polyfill-php73.git",
4665
+ "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f"
4666
+ },
4667
+ "dist": {
4668
+ "type": "zip",
4669
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f",
4670
+ "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f",
4671
+ "shasum": ""
4672
+ },
4673
+ "require": {
4674
+ "php": ">=5.3.3"
4675
+ },
4676
+ "type": "library",
4677
+ "extra": {
4678
+ "branch-alias": {
4679
+ "dev-master": "1.13-dev"
4680
+ }
4681
+ },
4682
+ "autoload": {
4683
+ "psr-4": {
4684
+ "Symfony\\Polyfill\\Php73\\": ""
4685
+ },
4686
+ "files": [
4687
+ "bootstrap.php"
4688
+ ],
4689
+ "classmap": [
4690
+ "Resources/stubs"
4691
+ ]
4692
+ },
4693
+ "notification-url": "https://packagist.org/downloads/",
4694
+ "license": [
4695
+ "MIT"
4696
+ ],
4697
+ "authors": [
4698
+ {
4699
+ "name": "Nicolas Grekas",
4700
+ "email": "p@tchwork.com"
4701
+ },
4702
+ {
4703
+ "name": "Symfony Community",
4704
+ "homepage": "https://symfony.com/contributors"
4705
+ }
4706
+ ],
4707
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
4708
+ "homepage": "https://symfony.com",
4709
+ "keywords": [
4710
+ "compatibility",
4711
+ "polyfill",
4712
+ "portable",
4713
+ "shim"
4714
+ ],
4715
+ "time": "2019-11-27T16:25:15+00:00"
4716
+ },
4717
+ {
4718
+ "name": "symfony/process",
4719
+ "version": "v4.4.1",
4720
+ "source": {
4721
+ "type": "git",
4722
+ "url": "https://github.com/symfony/process.git",
4723
+ "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726"
4724
+ },
4725
+ "dist": {
4726
+ "type": "zip",
4727
+ "url": "https://api.github.com/repos/symfony/process/zipball/51c0135ef3f44c5803b33dc60e96bf4f77752726",
4728
+ "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726",
4729
+ "shasum": ""
4730
+ },
4731
+ "require": {
4732
+ "php": "^7.1.3"
4733
+ },
4734
+ "type": "library",
4735
+ "extra": {
4736
+ "branch-alias": {
4737
+ "dev-master": "4.4-dev"
4738
+ }
4739
+ },
4740
+ "autoload": {
4741
+ "psr-4": {
4742
+ "Symfony\\Component\\Process\\": ""
4743
+ },
4744
+ "exclude-from-classmap": [
4745
+ "/Tests/"
4746
+ ]
4747
+ },
4748
+ "notification-url": "https://packagist.org/downloads/",
4749
+ "license": [
4750
+ "MIT"
4751
+ ],
4752
+ "authors": [
4753
+ {
4754
+ "name": "Fabien Potencier",
4755
+ "email": "fabien@symfony.com"
4756
+ },
4757
+ {
4758
+ "name": "Symfony Community",
4759
+ "homepage": "https://symfony.com/contributors"
4760
+ }
4761
+ ],
4762
+ "description": "Symfony Process Component",
4763
+ "homepage": "https://symfony.com",
4764
+ "time": "2019-11-28T13:33:56+00:00"
4765
+ },
4766
+ {
4767
+ "name": "symfony/service-contracts",
4768
+ "version": "v2.0.1",
4769
+ "source": {
4770
+ "type": "git",
4771
+ "url": "https://github.com/symfony/service-contracts.git",
4772
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749"
4773
+ },
4774
+ "dist": {
4775
+ "type": "zip",
4776
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
4777
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749",
4778
+ "shasum": ""
4779
+ },
4780
+ "require": {
4781
+ "php": "^7.2.5",
4782
+ "psr/container": "^1.0"
4783
+ },
4784
+ "suggest": {
4785
+ "symfony/service-implementation": ""
4786
+ },
4787
+ "type": "library",
4788
+ "extra": {
4789
+ "branch-alias": {
4790
+ "dev-master": "2.0-dev"
4791
+ }
4792
+ },
4793
+ "autoload": {
4794
+ "psr-4": {
4795
+ "Symfony\\Contracts\\Service\\": ""
4796
+ }
4797
+ },
4798
+ "notification-url": "https://packagist.org/downloads/",
4799
+ "license": [
4800
+ "MIT"
4801
+ ],
4802
+ "authors": [
4803
+ {
4804
+ "name": "Nicolas Grekas",
4805
+ "email": "p@tchwork.com"
4806
+ },
4807
+ {
4808
+ "name": "Symfony Community",
4809
+ "homepage": "https://symfony.com/contributors"
4810
+ }
4811
+ ],
4812
+ "description": "Generic abstractions related to writing services",
4813
+ "homepage": "https://symfony.com",
4814
+ "keywords": [
4815
+ "abstractions",
4816
+ "contracts",
4817
+ "decoupling",
4818
+ "interfaces",
4819
+ "interoperability",
4820
+ "standards"
4821
+ ],
4822
+ "time": "2019-11-18T17:27:11+00:00"
4823
+ },
4824
+ {
4825
+ "name": "symfony/translation",
4826
+ "version": "v5.0.1",
4827
+ "source": {
4828
+ "type": "git",
4829
+ "url": "https://github.com/symfony/translation.git",
4830
+ "reference": "e86df1b0f1672362ecf96023faf2c42241c41330"
4831
+ },
4832
+ "dist": {
4833
+ "type": "zip",
4834
+ "url": "https://api.github.com/repos/symfony/translation/zipball/e86df1b0f1672362ecf96023faf2c42241c41330",
4835
+ "reference": "e86df1b0f1672362ecf96023faf2c42241c41330",
4836
+ "shasum": ""
4837
+ },
4838
+ "require": {
4839
+ "php": "^7.2.5",
4840
+ "symfony/polyfill-mbstring": "~1.0",
4841
+ "symfony/translation-contracts": "^2"
4842
+ },
4843
+ "conflict": {
4844
+ "symfony/config": "<4.4",
4845
+ "symfony/dependency-injection": "<5.0",
4846
+ "symfony/http-kernel": "<5.0",
4847
+ "symfony/twig-bundle": "<5.0",
4848
+ "symfony/yaml": "<4.4"
4849
+ },
4850
+ "provide": {
4851
+ "symfony/translation-implementation": "2.0"
4852
+ },
4853
+ "require-dev": {
4854
+ "psr/log": "~1.0",
4855
+ "symfony/config": "^4.4|^5.0",
4856
+ "symfony/console": "^4.4|^5.0",
4857
+ "symfony/dependency-injection": "^5.0",
4858
+ "symfony/finder": "^4.4|^5.0",
4859
+ "symfony/http-kernel": "^5.0",
4860
+ "symfony/intl": "^4.4|^5.0",
4861
+ "symfony/service-contracts": "^1.1.2|^2",
4862
+ "symfony/yaml": "^4.4|^5.0"
4863
+ },
4864
+ "suggest": {
4865
+ "psr/log-implementation": "To use logging capability in translator",
4866
+ "symfony/config": "",
4867
+ "symfony/yaml": ""
4868
+ },
4869
+ "type": "library",
4870
+ "extra": {
4871
+ "branch-alias": {
4872
+ "dev-master": "5.0-dev"
4873
+ }
4874
+ },
4875
+ "autoload": {
4876
+ "psr-4": {
4877
+ "Symfony\\Component\\Translation\\": ""
4878
+ },
4879
+ "exclude-from-classmap": [
4880
+ "/Tests/"
4881
+ ]
4882
+ },
4883
+ "notification-url": "https://packagist.org/downloads/",
4884
+ "license": [
4885
+ "MIT"
4886
+ ],
4887
+ "authors": [
4888
+ {
4889
+ "name": "Fabien Potencier",
4890
+ "email": "fabien@symfony.com"
4891
+ },
4892
+ {
4893
+ "name": "Symfony Community",
4894
+ "homepage": "https://symfony.com/contributors"
4895
+ }
4896
+ ],
4897
+ "description": "Symfony Translation Component",
4898
+ "homepage": "https://symfony.com",
4899
+ "time": "2019-11-18T17:27:11+00:00"
4900
+ },
4901
+ {
4902
+ "name": "symfony/translation-contracts",
4903
+ "version": "v2.0.1",
4904
+ "source": {
4905
+ "type": "git",
4906
+ "url": "https://github.com/symfony/translation-contracts.git",
4907
+ "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed"
4908
+ },
4909
+ "dist": {
4910
+ "type": "zip",
4911
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed",
4912
+ "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed",
4913
+ "shasum": ""
4914
+ },
4915
+ "require": {
4916
+ "php": "^7.2.5"
4917
+ },
4918
+ "suggest": {
4919
+ "symfony/translation-implementation": ""
4920
+ },
4921
+ "type": "library",
4922
+ "extra": {
4923
+ "branch-alias": {
4924
+ "dev-master": "2.0-dev"
4925
+ }
4926
+ },
4927
+ "autoload": {
4928
+ "psr-4": {
4929
+ "Symfony\\Contracts\\Translation\\": ""
4930
+ }
4931
+ },
4932
+ "notification-url": "https://packagist.org/downloads/",
4933
+ "license": [
4934
+ "MIT"
4935
+ ],
4936
+ "authors": [
4937
+ {
4938
+ "name": "Nicolas Grekas",
4939
+ "email": "p@tchwork.com"
4940
+ },
4941
+ {
4942
+ "name": "Symfony Community",
4943
+ "homepage": "https://symfony.com/contributors"
4944
+ }
4945
+ ],
4946
+ "description": "Generic abstractions related to translation",
4947
+ "homepage": "https://symfony.com",
4948
+ "keywords": [
4949
+ "abstractions",
4950
+ "contracts",
4951
+ "decoupling",
4952
+ "interfaces",
4953
+ "interoperability",
4954
+ "standards"
4955
+ ],
4956
+ "time": "2019-11-18T17:27:11+00:00"
4957
+ },
4958
+ {
4959
+ "name": "symfony/yaml",
4960
+ "version": "v4.4.1",
4961
+ "source": {
4962
+ "type": "git",
4963
+ "url": "https://github.com/symfony/yaml.git",
4964
+ "reference": "76de473358fe802578a415d5bb43c296cf09d211"
4965
+ },
4966
+ "dist": {
4967
+ "type": "zip",
4968
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/76de473358fe802578a415d5bb43c296cf09d211",
4969
+ "reference": "76de473358fe802578a415d5bb43c296cf09d211",
4970
+ "shasum": ""
4971
+ },
4972
+ "require": {
4973
+ "php": "^7.1.3",
4974
+ "symfony/polyfill-ctype": "~1.8"
4975
+ },
4976
+ "conflict": {
4977
+ "symfony/console": "<3.4"
4978
+ },
4979
+ "require-dev": {
4980
+ "symfony/console": "^3.4|^4.0|^5.0"
4981
+ },
4982
+ "suggest": {
4983
+ "symfony/console": "For validating YAML files using the lint command"
4984
+ },
4985
+ "type": "library",
4986
+ "extra": {
4987
+ "branch-alias": {
4988
+ "dev-master": "4.4-dev"
4989
+ }
4990
+ },
4991
+ "autoload": {
4992
+ "psr-4": {
4993
+ "Symfony\\Component\\Yaml\\": ""
4994
+ },
4995
+ "exclude-from-classmap": [
4996
+ "/Tests/"
4997
+ ]
4998
+ },
4999
+ "notification-url": "https://packagist.org/downloads/",
5000
+ "license": [
5001
+ "MIT"
5002
+ ],
5003
+ "authors": [
5004
+ {
5005
+ "name": "Fabien Potencier",
5006
+ "email": "fabien@symfony.com"
5007
+ },
5008
+ {
5009
+ "name": "Symfony Community",
5010
+ "homepage": "https://symfony.com/contributors"
5011
+ }
5012
+ ],
5013
+ "description": "Symfony Yaml Component",
5014
+ "homepage": "https://symfony.com",
5015
+ "time": "2019-11-12T14:51:11+00:00"
5016
+ },
5017
+ {
5018
+ "name": "theseer/tokenizer",
5019
+ "version": "1.1.3",
5020
+ "source": {
5021
+ "type": "git",
5022
+ "url": "https://github.com/theseer/tokenizer.git",
5023
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
5024
+ },
5025
+ "dist": {
5026
+ "type": "zip",
5027
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
5028
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
5029
+ "shasum": ""
5030
+ },
5031
+ "require": {
5032
+ "ext-dom": "*",
5033
+ "ext-tokenizer": "*",
5034
+ "ext-xmlwriter": "*",
5035
+ "php": "^7.0"
5036
+ },
5037
+ "type": "library",
5038
+ "autoload": {
5039
+ "classmap": [
5040
+ "src/"
5041
+ ]
5042
+ },
5043
+ "notification-url": "https://packagist.org/downloads/",
5044
+ "license": [
5045
+ "BSD-3-Clause"
5046
+ ],
5047
+ "authors": [
5048
+ {
5049
+ "name": "Arne Blankerts",
5050
+ "email": "arne@blankerts.de",
5051
+ "role": "Developer"
5052
+ }
5053
+ ],
5054
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
5055
+ "time": "2019-06-13T22:48:21+00:00"
5056
+ },
5057
+ {
5058
+ "name": "vlucas/phpdotenv",
5059
+ "version": "v3.6.0",
5060
+ "source": {
5061
+ "type": "git",
5062
+ "url": "https://github.com/vlucas/phpdotenv.git",
5063
+ "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156"
5064
+ },
5065
+ "dist": {
5066
+ "type": "zip",
5067
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1bdf24f065975594f6a117f0f1f6cabf1333b156",
5068
+ "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156",
5069
+ "shasum": ""
5070
+ },
5071
+ "require": {
5072
+ "php": "^5.4 || ^7.0",
5073
+ "phpoption/phpoption": "^1.5",
5074
+ "symfony/polyfill-ctype": "^1.9"
5075
+ },
5076
+ "require-dev": {
5077
+ "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0"
5078
+ },
5079
+ "type": "library",
5080
+ "extra": {
5081
+ "branch-alias": {
5082
+ "dev-master": "3.6-dev"
5083
+ }
5084
+ },
5085
+ "autoload": {
5086
+ "psr-4": {
5087
+ "Dotenv\\": "src/"
5088
+ }
5089
+ },
5090
+ "notification-url": "https://packagist.org/downloads/",
5091
+ "license": [
5092
+ "BSD-3-Clause"
5093
+ ],
5094
+ "authors": [
5095
+ {
5096
+ "name": "Graham Campbell",
5097
+ "email": "graham@alt-three.com",
5098
+ "homepage": "https://gjcampbell.co.uk/"
5099
+ },
5100
+ {
5101
+ "name": "Vance Lucas",
5102
+ "email": "vance@vancelucas.com",
5103
+ "homepage": "https://vancelucas.com/"
5104
+ }
5105
+ ],
5106
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
5107
+ "keywords": [
5108
+ "dotenv",
5109
+ "env",
5110
+ "environment"
5111
+ ],
5112
+ "time": "2019-09-10T21:37:39+00:00"
5113
+ },
5114
+ {
5115
+ "name": "vria/nodiacritic",
5116
+ "version": "0.1.2",
5117
+ "source": {
5118
+ "type": "git",
5119
+ "url": "https://github.com/vria/nodiacritic.git",
5120
+ "reference": "3efeb60fb2586fe3ce8ff0f3c122d380717b8b07"
5121
+ },
5122
+ "dist": {
5123
+ "type": "zip",
5124
+ "url": "https://api.github.com/repos/vria/nodiacritic/zipball/3efeb60fb2586fe3ce8ff0f3c122d380717b8b07",
5125
+ "reference": "3efeb60fb2586fe3ce8ff0f3c122d380717b8b07",
5126
+ "shasum": ""
5127
+ },
5128
+ "require": {
5129
+ "php": ">=5.3.3"
5130
+ },
5131
+ "require-dev": {
5132
+ "phpunit/phpunit": "4.8.*"
5133
+ },
5134
+ "type": "library",
5135
+ "autoload": {
5136
+ "psr-4": {
5137
+ "VRia\\Utils\\": "src/"
5138
+ }
5139
+ },
5140
+ "notification-url": "https://packagist.org/downloads/",
5141
+ "license": [
5142
+ "GPL-2.0"
5143
+ ],
5144
+ "authors": [
5145
+ {
5146
+ "name": "Riabchenko Vlad",
5147
+ "email": "contact@vria.eu",
5148
+ "homepage": "http://vria.eu"
5149
+ }
5150
+ ],
5151
+ "description": "Tiny helper function that removes all diacritical signs from characters",
5152
+ "homepage": "https://github.com/vria/nodiacritic",
5153
+ "keywords": [
5154
+ "accent",
5155
+ "diacritic",
5156
+ "filter",
5157
+ "string",
5158
+ "text"
5159
+ ],
5160
+ "time": "2016-09-17T22:03:11+00:00"
5161
+ },
5162
+ {
5163
+ "name": "webmozart/assert",
5164
+ "version": "1.6.0",
5165
+ "source": {
5166
+ "type": "git",
5167
+ "url": "https://github.com/webmozart/assert.git",
5168
+ "reference": "573381c0a64f155a0d9a23f4b0c797194805b925"
5169
+ },
5170
+ "dist": {
5171
+ "type": "zip",
5172
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925",
5173
+ "reference": "573381c0a64f155a0d9a23f4b0c797194805b925",
5174
+ "shasum": ""
5175
+ },
5176
+ "require": {
5177
+ "php": "^5.3.3 || ^7.0",
5178
+ "symfony/polyfill-ctype": "^1.8"
5179
+ },
5180
+ "conflict": {
5181
+ "vimeo/psalm": "<3.6.0"
5182
+ },
5183
+ "require-dev": {
5184
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
5185
+ },
5186
+ "type": "library",
5187
+ "autoload": {
5188
+ "psr-4": {
5189
+ "Webmozart\\Assert\\": "src/"
5190
+ }
5191
+ },
5192
+ "notification-url": "https://packagist.org/downloads/",
5193
+ "license": [
5194
+ "MIT"
5195
+ ],
5196
+ "authors": [
5197
+ {
5198
+ "name": "Bernhard Schussek",
5199
+ "email": "bschussek@gmail.com"
5200
+ }
5201
+ ],
5202
+ "description": "Assertions to validate method input/output with nice error messages.",
5203
+ "keywords": [
5204
+ "assert",
5205
+ "check",
5206
+ "validate"
5207
+ ],
5208
+ "time": "2019-11-24T13:36:37+00:00"
5209
+ },
5210
+ {
5211
+ "name": "wp-cli/cache-command",
5212
+ "version": "v2.0.3",
5213
+ "source": {
5214
+ "type": "git",
5215
+ "url": "https://github.com/wp-cli/cache-command.git",
5216
+ "reference": "d3264aecf0e981b61adc020f5f6664f6538b7434"
5217
+ },
5218
+ "dist": {
5219
+ "type": "zip",
5220
+ "url": "https://api.github.com/repos/wp-cli/cache-command/zipball/d3264aecf0e981b61adc020f5f6664f6538b7434",
5221
+ "reference": "d3264aecf0e981b61adc020f5f6664f6538b7434",
5222
+ "shasum": ""
5223
+ },
5224
+ "require": {
5225
+ "wp-cli/wp-cli": "^2"
5226
+ },
5227
+ "require-dev": {
5228
+ "wp-cli/entity-command": "^1.3 || ^2",
5229
+ "wp-cli/wp-cli-tests": "^2.1"
5230
+ },
5231
+ "type": "wp-cli-package",
5232
+ "extra": {
5233
+ "branch-alias": {
5234
+ "dev-master": "2.x-dev"
5235
+ },
5236
+ "bundled": true,
5237
+ "commands": [
5238
+ "cache",
5239
+ "cache add",
5240
+ "cache decr",
5241
+ "cache delete",
5242
+ "cache flush",
5243
+ "cache get",
5244
+ "cache incr",
5245
+ "cache replace",
5246
+ "cache set",
5247
+ "cache type",
5248
+ "transient",
5249
+ "transient delete",
5250
+ "transient get",
5251
+ "transient set",
5252
+ "transient type",
5253
+ "transient list"
5254
+ ]
5255
+ },
5256
+ "autoload": {
5257
+ "psr-4": {
5258
+ "": "src/"
5259
+ },
5260
+ "files": [
5261
+ "cache-command.php"
5262
+ ]
5263
+ },
5264
+ "notification-url": "https://packagist.org/downloads/",
5265
+ "license": [
5266
+ "MIT"
5267
+ ],
5268
+ "authors": [
5269
+ {
5270
+ "name": "Daniel Bachhuber",
5271
+ "email": "daniel@runcommand.io",
5272
+ "homepage": "https://runcommand.io"
5273
+ }
5274
+ ],
5275
+ "description": "Manages object and transient caches.",
5276
+ "homepage": "https://github.com/wp-cli/cache-command",
5277
+ "time": "2019-11-12T01:43:12+00:00"
5278
+ },
5279
+ {
5280
+ "name": "wp-cli/checksum-command",
5281
+ "version": "v2.0.3",
5282
+ "source": {
5283
+ "type": "git",
5284
+ "url": "https://github.com/wp-cli/checksum-command.git",
5285
+ "reference": "7db66668ec116c5ccef7bc27b4354fa81b85018a"
5286
+ },
5287
+ "dist": {
5288
+ "type": "zip",
5289
+ "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/7db66668ec116c5ccef7bc27b4354fa81b85018a",
5290
+ "reference": "7db66668ec116c5ccef7bc27b4354fa81b85018a",
5291
+ "shasum": ""
5292
+ },
5293
+ "require": {
5294
+ "wp-cli/wp-cli": "^2"
5295
+ },
5296
+ "require-dev": {
5297
+ "wp-cli/extension-command": "^1.2 || ^2",
5298
+ "wp-cli/wp-cli-tests": "^2.1"
5299
+ },
5300
+ "type": "wp-cli-package",
5301
+ "extra": {
5302
+ "branch-alias": {
5303
+ "dev-master": "2.x-dev"
5304
+ },
5305
+ "bundled": true,
5306
+ "commands": [
5307
+ "core verify-checksums",
5308
+ "plugin verify-checksums"
5309
+ ]
5310
+ },
5311
+ "autoload": {
5312
+ "psr-4": {
5313
+ "": "src/"
5314
+ },
5315
+ "files": [
5316
+ "checksum-command.php"
5317
+ ]
5318
+ },
5319
+ "notification-url": "https://packagist.org/downloads/",
5320
+ "license": [
5321
+ "MIT"
5322
+ ],
5323
+ "authors": [
5324
+ {
5325
+ "name": "Daniel Bachhuber",
5326
+ "email": "daniel@runcommand.io",
5327
+ "homepage": "https://runcommand.io"
5328
+ }
5329
+ ],
5330
+ "description": "Verifies file integrity by comparing to published checksums.",
5331
+ "homepage": "https://github.com/wp-cli/checksum-command",
5332
+ "time": "2019-04-25T00:28:02+00:00"
5333
+ },
5334
+ {
5335
+ "name": "wp-cli/config-command",
5336
+ "version": "v2.0.5",
5337
+ "source": {
5338
+ "type": "git",
5339
+ "url": "https://github.com/wp-cli/config-command.git",
5340
+ "reference": "9530dc42eebcae1fde10ad9e4aad312e06267eb9"
5341
+ },
5342
+ "dist": {
5343
+ "type": "zip",
5344
+ "url": "https://api.github.com/repos/wp-cli/config-command/zipball/9530dc42eebcae1fde10ad9e4aad312e06267eb9",
5345
+ "reference": "9530dc42eebcae1fde10ad9e4aad312e06267eb9",
5346
+ "shasum": ""
5347
+ },
5348
+ "require": {
5349
+ "wp-cli/wp-cli": "^2",
5350
+ "wp-cli/wp-config-transformer": "^1.2.1"
5351
+ },
5352
+ "require-dev": {
5353
+ "wp-cli/db-command": "^1.3 || ^2",
5354
+ "wp-cli/wp-cli-tests": "^2.1"
5355
+ },
5356
+ "type": "wp-cli-package",
5357
+ "extra": {
5358
+ "branch-alias": {
5359
+ "dev-master": "2.x-dev"
5360
+ },
5361
+ "bundled": true,
5362
+ "commands": [
5363
+ "config",
5364
+ "config edit",
5365
+ "config delete",
5366
+ "config create",
5367
+ "config get",
5368
+ "config has",
5369
+ "config list",
5370
+ "config path",
5371
+ "config set",
5372
+ "config shuffle-salts"
5373
+ ]
5374
+ },
5375
+ "autoload": {
5376
+ "psr-4": {
5377
+ "": "src/"
5378
+ },
5379
+ "files": [
5380
+ "config-command.php"
5381
+ ]
5382
+ },
5383
+ "notification-url": "https://packagist.org/downloads/",
5384
+ "license": [
5385
+ "MIT"
5386
+ ],
5387
+ "authors": [
5388
+ {
5389
+ "name": "Daniel Bachhuber",
5390
+ "email": "daniel@runcommand.io",
5391
+ "homepage": "https://runcommand.io"
5392
+ },
5393
+ {
5394
+ "name": "Alain Schlesser",
5395
+ "email": "alain.schlesser@gmail.com",
5396
+ "homepage": "https://www.alainschlesser.com"
5397
+ }
5398
+ ],
5399
+ "description": "Generates and reads the wp-config.php file.",
5400
+ "homepage": "https://github.com/wp-cli/config-command",
5401
+ "time": "2019-11-12T01:43:26+00:00"
5402
+ },
5403
+ {
5404
+ "name": "wp-cli/core-command",
5405
+ "version": "v2.0.8",
5406
+ "source": {
5407
+ "type": "git",
5408
+ "url": "https://github.com/wp-cli/core-command.git",
5409
+ "reference": "be62a9364c77a99698364a888362a8c8b9414f2f"
5410
+ },
5411
+ "dist": {
5412
+ "type": "zip",
5413
+ "url": "https://api.github.com/repos/wp-cli/core-command/zipball/be62a9364c77a99698364a888362a8c8b9414f2f",
5414
+ "reference": "be62a9364c77a99698364a888362a8c8b9414f2f",
5415
+ "shasum": ""
5416
+ },
5417
+ "require": {
5418
+ "composer/semver": "^1.4",
5419
+ "wp-cli/wp-cli": "^2.4"
5420
+ },
5421
+ "require-dev": {
5422
+ "wp-cli/checksum-command": "^1 || ^2",
5423
+ "wp-cli/db-command": "^1.3 || ^2",
5424
+ "wp-cli/entity-command": "^1.3 || ^2",
5425
+ "wp-cli/extension-command": "^1.2 || ^2",
5426
+ "wp-cli/wp-cli-tests": "^2.1"
5427
+ },
5428
+ "type": "wp-cli-package",
5429
+ "extra": {
5430
+ "branch-alias": {
5431
+ "dev-master": "2.x-dev"
5432
+ },
5433
+ "bundled": true,
5434
+ "commands": [
5435
+ "core",
5436
+ "core check-update",
5437
+ "core download",
5438
+ "core install",
5439
+ "core is-installed",
5440
+ "core multisite-convert",
5441
+ "core multisite-install",
5442
+ "core update",
5443
+ "core update-db",
5444
+ "core version"
5445
+ ]
5446
+ },
5447
+ "autoload": {
5448
+ "psr-4": {
5449
+ "": "src/"
5450
+ },
5451
+ "files": [
5452
+ "core-command.php"
5453
+ ]
5454
+ },
5455
+ "notification-url": "https://packagist.org/downloads/",
5456
+ "license": [
5457
+ "MIT"
5458
+ ],
5459
+ "authors": [
5460
+ {
5461
+ "name": "Daniel Bachhuber",
5462
+ "email": "daniel@runcommand.io",
5463
+ "homepage": "https://runcommand.io"
5464
+ }
5465
+ ],
5466
+ "description": "Downloads, installs, updates, and manages a WordPress installation.",
5467
+ "homepage": "https://github.com/wp-cli/core-command",
5468
+ "time": "2019-11-12T15:31:38+00:00"
5469
+ },
5470
+ {
5471
+ "name": "wp-cli/cron-command",
5472
+ "version": "v2.0.3",
5473
+ "source": {
5474
+ "type": "git",
5475
+ "url": "https://github.com/wp-cli/cron-command.git",
5476
+ "reference": "b6d0c8ff69cc56d5316a35a7a2fcc314c4069585"
5477
+ },
5478
+ "dist": {
5479
+ "type": "zip",
5480
+ "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/b6d0c8ff69cc56d5316a35a7a2fcc314c4069585",
5481
+ "reference": "b6d0c8ff69cc56d5316a35a7a2fcc314c4069585",
5482
+ "shasum": ""
5483
+ },
5484
+ "require": {
5485
+ "wp-cli/wp-cli": "^2"
5486
+ },
5487
+ "require-dev": {
5488
+ "wp-cli/entity-command": "^1.3 || ^2",
5489
+ "wp-cli/wp-cli-tests": "^2.1"
5490
+ },
5491
+ "type": "wp-cli-package",
5492
+ "extra": {
5493
+ "branch-alias": {
5494
+ "dev-master": "2.x-dev"
5495
+ },
5496
+ "bundled": true,
5497
+ "commands": [
5498
+ "cron",
5499
+ "cron test",
5500
+ "cron event",
5501
+ "cron event delete",
5502
+ "cron event list",
5503
+ "cron event run",
5504
+ "cron event schedule",
5505
+ "cron schedule",
5506
+ "cron schedule list"
5507
+ ]
5508
+ },
5509
+ "autoload": {
5510
+ "psr-4": {
5511
+ "": "src/"
5512
+ },
5513
+ "files": [
5514
+ "cron-command.php"
5515
+ ]
5516
+ },
5517
+ "notification-url": "https://packagist.org/downloads/",
5518
+ "license": [
5519
+ "MIT"
5520
+ ],
5521
+ "authors": [
5522
+ {
5523
+ "name": "Daniel Bachhuber",
5524
+ "email": "daniel@runcommand.io",
5525
+ "homepage": "https://runcommand.io"
5526
+ }
5527
+ ],
5528
+ "description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.",
5529
+ "homepage": "https://github.com/wp-cli/cron-command",
5530
+ "time": "2019-04-24T07:31:46+00:00"
5531
+ },
5532
+ {
5533
+ "name": "wp-cli/db-command",
5534
+ "version": "v2.0.5",
5535
+ "source": {
5536
+ "type": "git",
5537
+ "url": "https://github.com/wp-cli/db-command.git",
5538
+ "reference": "119cf31491577d0a79ad42021dfeb8ac1138342b"
5539
+ },
5540
+ "dist": {
5541
+ "type": "zip",
5542
+ "url": "https://api.github.com/repos/wp-cli/db-command/zipball/119cf31491577d0a79ad42021dfeb8ac1138342b",
5543
+ "reference": "119cf31491577d0a79ad42021dfeb8ac1138342b",
5544
+ "shasum": ""
5545
+ },
5546
+ "require": {
5547
+ "wp-cli/wp-cli": "^2"
5548
+ },
5549
+ "require-dev": {
5550
+ "wp-cli/entity-command": "^1.3 || ^2",
5551
+ "wp-cli/wp-cli-tests": "^2.1"
5552
+ },
5553
+ "type": "wp-cli-package",
5554
+ "extra": {
5555
+ "branch-alias": {
5556
+ "dev-master": "2.x-dev"
5557
+ },
5558
+ "bundled": true,
5559
+ "commands": [
5560
+ "db",
5561
+ "db clean",
5562
+ "db create",
5563
+ "db drop",
5564
+ "db reset",
5565
+ "db check",
5566
+ "db optimize",
5567
+ "db prefix",
5568
+ "db repair",
5569
+ "db cli",
5570
+ "db query",
5571
+ "db export",
5572
+ "db import",
5573
+ "db search",
5574
+ "db tables",
5575
+ "db size",
5576
+ "db columns"
5577
+ ]
5578
+ },
5579
+ "autoload": {
5580
+ "psr-4": {
5581
+ "": "src/"
5582
+ },
5583
+ "files": [
5584
+ "db-command.php"
5585
+ ]
5586
+ },
5587
+ "notification-url": "https://packagist.org/downloads/",
5588
+ "license": [
5589
+ "MIT"
5590
+ ],
5591
+ "authors": [
5592
+ {
5593
+ "name": "Daniel Bachhuber",
5594
+ "email": "daniel@runcommand.io",
5595
+ "homepage": "https://runcommand.io"
5596
+ }
5597
+ ],
5598
+ "description": "Performs basic database operations using credentials stored in wp-config.php.",
5599
+ "homepage": "https://github.com/wp-cli/db-command",
5600
+ "time": "2019-11-12T05:05:58+00:00"
5601
+ },
5602
+ {
5603
+ "name": "wp-cli/embed-command",
5604
+ "version": "v2.0.4",
5605
+ "source": {
5606
+ "type": "git",
5607
+ "url": "https://github.com/wp-cli/embed-command.git",
5608
+ "reference": "f67fd41a056c6cb847e8601e058fa836b9e5d325"
5609
+ },
5610
+ "dist": {
5611
+ "type": "zip",
5612
+ "url": "https://api.github.com/repos/wp-cli/embed-command/zipball/f67fd41a056c6cb847e8601e058fa836b9e5d325",
5613
+ "reference": "f67fd41a056c6cb847e8601e058fa836b9e5d325",
5614
+ "shasum": ""
5615
+ },
5616
+ "require": {
5617
+ "wp-cli/wp-cli": "^2"
5618
+ },
5619
+ "require-dev": {
5620
+ "wp-cli/entity-command": "^1.3 || ^2",
5621
+ "wp-cli/wp-cli-tests": "^2.1"
5622
+ },
5623
+ "type": "wp-cli-package",
5624
+ "extra": {
5625
+ "branch-alias": {
5626
+ "dev-master": "2.x-dev"
5627
+ },
5628
+ "bundled": true,
5629
+ "commands": [
5630
+ "embed",
5631
+ "embed fetch",
5632
+ "embed provider",
5633
+ "embed provider list",
5634
+ "embed provider match",
5635
+ "embed handler",
5636
+ "embed handler list",
5637
+ "embed cache",
5638
+ "embed cache clear",
5639
+ "embed cache find",
5640
+ "embed cache trigger"
5641
+ ]
5642
+ },
5643
+ "autoload": {
5644
+ "psr-4": {
5645
+ "WP_CLI\\Embeds\\": "src/"
5646
+ },
5647
+ "files": [
5648
+ "embed-command.php"
5649
+ ]
5650
+ },
5651
+ "notification-url": "https://packagist.org/downloads/",
5652
+ "license": [
5653
+ "MIT"
5654
+ ],
5655
+ "authors": [
5656
+ {
5657
+ "name": "Pascal Birchler",
5658
+ "homepage": "https://pascalbirchler.com/"
5659
+ }
5660
+ ],
5661
+ "description": "Inspects oEmbed providers, clears embed cache, and more.",
5662
+ "homepage": "https://github.com/wp-cli/embed-command",
5663
+ "time": "2019-11-12T01:43:50+00:00"
5664
+ },
5665
+ {
5666
+ "name": "wp-cli/entity-command",
5667
+ "version": "v2.0.7",
5668
+ "source": {
5669
+ "type": "git",
5670
+ "url": "https://github.com/wp-cli/entity-command.git",
5671
+ "reference": "0df89e4fba48177acf768bff9c00cda95a3fe5b9"
5672
+ },
5673
+ "dist": {
5674
+ "type": "zip",
5675
+ "url": "https://api.github.com/repos/wp-cli/entity-command/zipball/0df89e4fba48177acf768bff9c00cda95a3fe5b9",
5676
+ "reference": "0df89e4fba48177acf768bff9c00cda95a3fe5b9",
5677
+ "shasum": ""
5678
+ },
5679
+ "require": {
5680
+ "wp-cli/wp-cli": "^2"
5681
+ },
5682
+ "require-dev": {
5683
+ "wp-cli/cache-command": "^1 || ^2",
5684
+ "wp-cli/db-command": "^1.3 || ^2",
5685
+ "wp-cli/extension-command": "^1.2 || ^2",
5686
+ "wp-cli/media-command": "^1.1 || ^2",
5687
+ "wp-cli/wp-cli-tests": "^2.1"
5688
+ },
5689
+ "type": "wp-cli-package",
5690
+ "extra": {
5691
+ "branch-alias": {
5692
+ "dev-master": "2.x-dev"
5693
+ },
5694
+ "bundled": true,
5695
+ "commands": [
5696
+ "comment",
5697
+ "comment approve",
5698
+ "comment count",
5699
+ "comment create",
5700
+ "comment delete",
5701
+ "comment exists",
5702
+ "comment generate",
5703
+ "comment get",
5704
+ "comment list",
5705
+ "comment meta",
5706
+ "comment meta add",
5707
+ "comment meta delete",
5708
+ "comment meta get",
5709
+ "comment meta list",
5710
+ "comment meta patch",
5711
+ "comment meta pluck",
5712
+ "comment meta update",
5713
+ "comment recount",
5714
+ "comment spam",
5715
+ "comment status",
5716
+ "comment trash",
5717
+ "comment unapprove",
5718
+ "comment unspam",
5719
+ "comment untrash",
5720
+ "comment update",
5721
+ "menu",
5722
+ "menu create",
5723
+ "menu delete",
5724
+ "menu item",
5725
+ "menu item add-custom",
5726
+ "menu item add-post",
5727
+ "menu item add-term",
5728
+ "menu item delete",
5729
+ "menu item list",
5730
+ "menu item update",
5731
+ "menu list",
5732
+ "menu location",
5733
+ "menu location assign",
5734
+ "menu location list",
5735
+ "menu location remove",
5736
+ "network meta",
5737
+ "network meta add",
5738
+ "network meta delete",
5739
+ "network meta get",
5740
+ "network meta list",
5741
+ "network meta patch",
5742
+ "network meta pluck",
5743
+ "network meta update",
5744
+ "option",
5745
+ "option add",
5746
+ "option delete",
5747
+ "option get",
5748
+ "option list",
5749
+ "option patch",
5750
+ "option pluck",
5751
+ "option update",
5752
+ "post",
5753
+ "post create",
5754
+ "post delete",
5755
+ "post edit",
5756
+ "post exists",
5757
+ "post generate",
5758
+ "post get",
5759
+ "post list",
5760
+ "post meta",
5761
+ "post meta add",
5762
+ "post meta delete",
5763
+ "post meta get",
5764
+ "post meta list",
5765
+ "post meta patch",
5766
+ "post meta pluck",
5767
+ "post meta update",
5768
+ "post term",
5769
+ "post term add",
5770
+ "post term list",
5771
+ "post term remove",
5772
+ "post term set",
5773
+ "post update",
5774
+ "post-type",
5775
+ "post-type get",
5776
+ "post-type list",
5777
+ "site",
5778
+ "site activate",
5779
+ "site archive",
5780
+ "site create",
5781
+ "site deactivate",
5782
+ "site delete",
5783
+ "site empty",
5784
+ "site list",
5785
+ "site mature",
5786
+ "site option",
5787
+ "site private",
5788
+ "site public",
5789
+ "site spam",
5790
+ "site unarchive",
5791
+ "site unmature",
5792
+ "site unspam",
5793
+ "taxonomy",
5794
+ "taxonomy get",
5795
+ "taxonomy list",
5796
+ "term",
5797
+ "term create",
5798
+ "term delete",
5799
+ "term generate",
5800
+ "term get",
5801
+ "term list",
5802
+ "term meta",
5803
+ "term meta add",
5804
+ "term meta delete",
5805
+ "term meta get",
5806
+ "term meta list",
5807
+ "term meta patch",
5808
+ "term meta pluck",
5809
+ "term meta update",
5810
+ "term recount",
5811
+ "term update",
5812
+ "user",
5813
+ "user add-cap",
5814
+ "user add-role",
5815
+ "user create",
5816
+ "user delete",
5817
+ "user generate",
5818
+ "user get",
5819
+ "user import-csv",
5820
+ "user list",
5821
+ "user list-caps",
5822
+ "user meta",
5823
+ "user meta add",
5824
+ "user meta delete",
5825
+ "user meta get",
5826
+ "user meta list",
5827
+ "user meta patch",
5828
+ "user meta pluck",
5829
+ "user meta update",
5830
+ "user remove-cap",
5831
+ "user remove-role",
5832
+ "user reset-password",
5833
+ "user session",
5834
+ "user session destroy",
5835
+ "user session list",
5836
+ "user set-role",
5837
+ "user spam",
5838
+ "user term",
5839
+ "user term add",
5840
+ "user term list",
5841
+ "user term remove",
5842
+ "user term set",
5843
+ "user unspam",
5844
+ "user update"
5845
+ ]
5846
+ },
5847
+ "autoload": {
5848
+ "psr-4": {
5849
+ "": "src/",
5850
+ "WP_CLI\\": "src/WP_CLI"
5851
+ },
5852
+ "files": [
5853
+ "entity-command.php"
5854
+ ]
5855
+ },
5856
+ "notification-url": "https://packagist.org/downloads/",
5857
+ "license": [
5858
+ "MIT"
5859
+ ],
5860
+ "authors": [
5861
+ {
5862
+ "name": "Daniel Bachhuber",
5863
+ "email": "daniel@runcommand.io",
5864
+ "homepage": "https://runcommand.io"
5865
+ }
5866
+ ],
5867
+ "description": "Manage WordPress comments, menus, options, posts, sites, terms, and users.",
5868
+ "homepage": "https://github.com/wp-cli/entity-command",
5869
+ "time": "2019-11-12T11:32:14+00:00"
5870
+ },
5871
+ {
5872
+ "name": "wp-cli/eval-command",
5873
+ "version": "v2.0.5",
5874
+ "source": {
5875
+ "type": "git",
5876
+ "url": "https://github.com/wp-cli/eval-command.git",
5877
+ "reference": "945aaebc761a694cf302985088ef6b19a4567643"
5878
+ },
5879
+ "dist": {
5880
+ "type": "zip",
5881
+ "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/945aaebc761a694cf302985088ef6b19a4567643",
5882
+ "reference": "945aaebc761a694cf302985088ef6b19a4567643",
5883
+ "shasum": ""
5884
+ },
5885
+ "require": {
5886
+ "wp-cli/wp-cli": "^2"
5887
+ },
5888
+ "require-dev": {
5889
+ "wp-cli/wp-cli-tests": "^2.1"
5890
+ },
5891
+ "type": "wp-cli-package",
5892
+ "extra": {
5893
+ "branch-alias": {
5894
+ "dev-master": "2.x-dev"
5895
+ },
5896
+ "bundled": true,
5897
+ "commands": [
5898
+ "eval",
5899
+ "eval-file"
5900
+ ]
5901
+ },
5902
+ "autoload": {
5903
+ "psr-4": {
5904
+ "": "src/"
5905
+ },
5906
+ "files": [
5907
+ "eval-command.php"
5908
+ ]
5909
+ },
5910
+ "notification-url": "https://packagist.org/downloads/",
5911
+ "license": [
5912
+ "MIT"
5913
+ ],
5914
+ "authors": [
5915
+ {
5916
+ "name": "Daniel Bachhuber",
5917
+ "email": "daniel@runcommand.io",
5918
+ "homepage": "https://runcommand.io"
5919
+ }
5920
+ ],
5921
+ "description": "Executes arbitrary PHP code or files.",
5922
+ "homepage": "https://github.com/wp-cli/eval-command",
5923
+ "time": "2019-11-12T01:36:20+00:00"
5924
+ },
5925
+ {
5926
+ "name": "wp-cli/export-command",
5927
+ "version": "v2.0.3",
5928
+ "source": {
5929
+ "type": "git",
5930
+ "url": "https://github.com/wp-cli/export-command.git",
5931
+ "reference": "a31b1777a199a8437127ad3db1b6b92e9cb5cd9b"
5932
+ },
5933
+ "dist": {
5934
+ "type": "zip",
5935
+ "url": "https://api.github.com/repos/wp-cli/export-command/zipball/a31b1777a199a8437127ad3db1b6b92e9cb5cd9b",
5936
+ "reference": "a31b1777a199a8437127ad3db1b6b92e9cb5cd9b",
5937
+ "shasum": ""
5938
+ },
5939
+ "require": {
5940
+ "nb/oxymel": "~0.1.0",
5941
+ "wp-cli/wp-cli": "^2"
5942
+ },
5943
+ "require-dev": {
5944
+ "wp-cli/db-command": "^1.3 || ^2",
5945
+ "wp-cli/entity-command": "^1.3 || ^2",
5946
+ "wp-cli/extension-command": "^1.2 || ^2",
5947
+ "wp-cli/import-command": "^1 || ^2",
5948
+ "wp-cli/wp-cli-tests": "^2.1"
5949
+ },
5950
+ "type": "wp-cli-package",
5951
+ "extra": {
5952
+ "branch-alias": {
5953
+ "dev-master": "2.x-dev"
5954
+ },
5955
+ "bundled": true,
5956
+ "commands": [
5957
+ "export"
5958
+ ]
5959
+ },
5960
+ "autoload": {
5961
+ "psr-4": {
5962
+ "": "src/"
5963
+ },
5964
+ "files": [
5965
+ "export-command.php"
5966
+ ]
5967
+ },
5968
+ "notification-url": "https://packagist.org/downloads/",
5969
+ "license": [
5970
+ "MIT"
5971
+ ],
5972
+ "authors": [
5973
+ {
5974
+ "name": "Daniel Bachhuber",
5975
+ "email": "daniel@runcommand.io",
5976
+ "homepage": "https://runcommand.io"
5977
+ }
5978
+ ],
5979
+ "description": "Exports WordPress content to a WXR file.",
5980
+ "homepage": "https://github.com/wp-cli/export-command",
5981
+ "time": "2019-07-16T16:39:17+00:00"
5982
+ },
5983
+ {
5984
+ "name": "wp-cli/extension-command",
5985
+ "version": "v2.0.7",
5986
+ "source": {
5987
+ "type": "git",
5988
+ "url": "https://github.com/wp-cli/extension-command.git",
5989
+ "reference": "e397cf208c0df679656a87041bf34129e7e3d922"
5990
+ },
5991
+ "dist": {
5992
+ "type": "zip",
5993
+ "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/e397cf208c0df679656a87041bf34129e7e3d922",
5994
+ "reference": "e397cf208c0df679656a87041bf34129e7e3d922",
5995
+ "shasum": ""
5996
+ },
5997
+ "require": {
5998
+ "composer/semver": "^1.4",
5999
+ "wp-cli/wp-cli": "^2"
6000
+ },
6001
+ "require-dev": {
6002
+ "wp-cli/entity-command": "^1.3 || ^2",
6003
+ "wp-cli/scaffold-command": "^1.2 || ^2",
6004
+ "wp-cli/wp-cli-tests": "^2.1.6"
6005
+ },
6006
+ "type": "wp-cli-package",
6007
+ "extra": {
6008
+ "branch-alias": {
6009
+ "dev-master": "2.x-dev"
6010
+ },
6011
+ "bundled": true,
6012
+ "commands": [
6013
+ "plugin",
6014
+ "plugin activate",
6015
+ "plugin deactivate",
6016
+ "plugin delete",
6017
+ "plugin get",
6018
+ "plugin install",
6019
+ "plugin is-installed",
6020
+ "plugin list",
6021
+ "plugin path",
6022
+ "plugin search",
6023
+ "plugin status",
6024
+ "plugin toggle",
6025
+ "plugin uninstall",
6026
+ "plugin update",
6027
+ "theme",
6028
+ "theme activate",
6029
+ "theme delete",
6030
+ "theme disable",
6031
+ "theme enable",
6032
+ "theme get",
6033
+ "theme install",
6034
+ "theme is-installed",
6035
+ "theme list",
6036
+ "theme mod",
6037
+ "theme mod get",
6038
+ "theme mod set",
6039
+ "theme mod remove",
6040
+ "theme path",
6041
+ "theme search",
6042
+ "theme status",
6043
+ "theme update",
6044
+ "theme mod list"
6045
+ ]
6046
+ },
6047
+ "autoload": {
6048
+ "psr-4": {
6049
+ "": "src/"
6050
+ },
6051
+ "files": [
6052
+ "extension-command.php"
6053
+ ]
6054
+ },
6055
+ "notification-url": "https://packagist.org/downloads/",
6056
+ "license": [
6057
+ "MIT"
6058
+ ],
6059
+ "authors": [
6060
+ {
6061
+ "name": "Daniel Bachhuber",
6062
+ "email": "daniel@runcommand.io",
6063
+ "homepage": "https://runcommand.io"
6064
+ }
6065
+ ],
6066
+ "description": "Manages plugins and themes, including installs, activations, and updates.",
6067
+ "homepage": "https://github.com/wp-cli/extension-command",
6068
+ "time": "2019-11-08T20:23:53+00:00"
6069
+ },
6070
+ {
6071
+ "name": "wp-cli/i18n-command",
6072
+ "version": "v2.2.1",
6073
+ "source": {
6074
+ "type": "git",
6075
+ "url": "https://github.com/wp-cli/i18n-command.git",
6076
+ "reference": "6a0582103ecf4a28b3086eac55a9fe590bd3dc96"
6077
+ },
6078
+ "dist": {
6079
+ "type": "zip",
6080
+ "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/6a0582103ecf4a28b3086eac55a9fe590bd3dc96",
6081
+ "reference": "6a0582103ecf4a28b3086eac55a9fe590bd3dc96",
6082
+ "shasum": ""
6083
+ },
6084
+ "require": {
6085
+ "gettext/gettext": "^4.8",
6086
+ "mck89/peast": "^1.8",
6087
+ "wp-cli/wp-cli": "^2"
6088
+ },
6089
+ "require-dev": {
6090
+ "wp-cli/scaffold-command": "^1.2 || ^2",
6091
+ "wp-cli/wp-cli-tests": "^2.1.3"
6092
+ },
6093
+ "type": "wp-cli-package",
6094
+ "extra": {
6095
+ "branch-alias": {
6096
+ "dev-master": "2.x-dev"
6097
+ },
6098
+ "bundled": true,
6099
+ "commands": [
6100
+ "i18n",
6101
+ "i18n make-pot",
6102
+ "i18n make-json"
6103
+ ]
6104
+ },
6105
+ "autoload": {
6106
+ "psr-4": {
6107
+ "WP_CLI\\I18n\\": "src/"
6108
+ },
6109
+ "files": [
6110
+ "i18n-command.php"
6111
+ ]
6112
+ },
6113
+ "notification-url": "https://packagist.org/downloads/",
6114
+ "license": [
6115
+ "MIT"
6116
+ ],
6117
+ "authors": [
6118
+ {
6119
+ "name": "Pascal Birchler",
6120
+ "homepage": "https://pascalbirchler.com/"
6121
+ }
6122
+ ],
6123
+ "description": "Provides internationalization tools for WordPress projects.",
6124
+ "homepage": "https://github.com/wp-cli/i18n-command",
6125
+ "time": "2019-11-12T06:57:35+00:00"
6126
+ },
6127
+ {
6128
+ "name": "wp-cli/import-command",
6129
+ "version": "v2.0.2",
6130
+ "source": {
6131
+ "type": "git",
6132
+ "url": "https://github.com/wp-cli/import-command.git",
6133
+ "reference": "e28a7f55138ceb53f2ff5926874d8e5582c87db8"
6134
+ },
6135
+ "dist": {
6136
+ "type": "zip",
6137
+ "url": "https://api.github.com/repos/wp-cli/import-command/zipball/e28a7f55138ceb53f2ff5926874d8e5582c87db8",
6138
+ "reference": "e28a7f55138ceb53f2ff5926874d8e5582c87db8",
6139
+ "shasum": ""
6140
+ },
6141
+ "require": {
6142
+ "wp-cli/wp-cli": "^2"
6143
+ },
6144
+ "require-dev": {
6145
+ "wp-cli/entity-command": "^1.3 || ^2",
6146
+ "wp-cli/export-command": "^1 || ^2",
6147
+ "wp-cli/extension-command": "^1.2 || ^2",
6148
+ "wp-cli/wp-cli-tests": "^2.1"
6149
+ },
6150
+ "type": "wp-cli-package",
6151
+ "extra": {
6152
+ "branch-alias": {
6153
+ "dev-master": "2.x-dev"
6154
+ },
6155
+ "bundled": true,
6156
+ "commands": [
6157
+ "import"
6158
+ ]
6159
+ },
6160
+ "autoload": {
6161
+ "psr-4": {
6162
+ "": "src/"
6163
+ },
6164
+ "files": [
6165
+ "import-command.php"
6166
+ ]
6167
+ },
6168
+ "notification-url": "https://packagist.org/downloads/",
6169
+ "license": [
6170
+ "MIT"
6171
+ ],
6172
+ "authors": [
6173
+ {
6174
+ "name": "Daniel Bachhuber",
6175
+ "email": "daniel@runcommand.io",
6176
+ "homepage": "https://runcommand.io"
6177
+ }
6178
+ ],
6179
+ "description": "Imports content from a given WXR file.",
6180
+ "homepage": "https://github.com/wp-cli/import-command",
6181
+ "time": "2019-04-19T14:32:57+00:00"
6182
+ },
6183
+ {
6184
+ "name": "wp-cli/language-command",
6185
+ "version": "v2.0.5",
6186
+ "source": {
6187
+ "type": "git",
6188
+ "url": "https://github.com/wp-cli/language-command.git",
6189
+ "reference": "a14a385efffba2060f947afa85f7ffd7e7cda5d7"
6190
+ },
6191
+ "dist": {
6192
+ "type": "zip",
6193
+ "url": "https://api.github.com/repos/wp-cli/language-command/zipball/a14a385efffba2060f947afa85f7ffd7e7cda5d7",
6194
+ "reference": "a14a385efffba2060f947afa85f7ffd7e7cda5d7",
6195
+ "shasum": ""
6196
+ },
6197
+ "require": {
6198
+ "wp-cli/wp-cli": "^2"
6199
+ },
6200
+ "require-dev": {
6201
+ "wp-cli/db-command": "^1.3 || ^2",
6202
+ "wp-cli/entity-command": "^1.3 || ^2",
6203
+ "wp-cli/extension-command": "^1.2 || ^2",
6204
+ "wp-cli/wp-cli-tests": "^2.1"
6205
+ },
6206
+ "type": "wp-cli-package",
6207
+ "extra": {
6208
+ "branch-alias": {
6209
+ "dev-master": "2.x-dev"
6210
+ },
6211
+ "bundled": true,
6212
+ "commands": [
6213
+ "language",
6214
+ "language core",
6215
+ "language core activate",
6216
+ "language core is-installed",
6217
+ "language core install",
6218
+ "language core list",
6219
+ "language core uninstall",
6220
+ "language core update",
6221
+ "language plugin",
6222
+ "language plugin is-installed",
6223
+ "language plugin install",
6224
+ "language plugin list",
6225
+ "language plugin uninstall",
6226
+ "language plugin update",
6227
+ "language theme",
6228
+ "language theme is-installed",
6229
+ "language theme install",
6230
+ "language theme list",
6231
+ "language theme uninstall",
6232
+ "language theme update"
6233
+ ]
6234
+ },
6235
+ "autoload": {
6236
+ "psr-4": {
6237
+ "": "src/"
6238
+ },
6239
+ "files": [
6240
+ "language-command.php"
6241
+ ]
6242
+ },
6243
+ "notification-url": "https://packagist.org/downloads/",
6244
+ "license": [
6245
+ "MIT"
6246
+ ],
6247
+ "authors": [
6248
+ {
6249
+ "name": "Daniel Bachhuber",
6250
+ "email": "daniel@runcommand.io",
6251
+ "homepage": "https://runcommand.io"
6252
+ }
6253
+ ],
6254
+ "description": "Installs, activates, and manages language packs.",
6255
+ "homepage": "https://github.com/wp-cli/language-command",
6256
+ "time": "2019-11-12T01:33:31+00:00"
6257
+ },
6258
+ {
6259
+ "name": "wp-cli/maintenance-mode-command",
6260
+ "version": "v2.0.2",
6261
+ "source": {
6262
+ "type": "git",
6263
+ "url": "https://github.com/wp-cli/maintenance-mode-command.git",
6264
+ "reference": "3c80e731e1032607a2e9589ae6b6398e95c05b91"
6265
+ },
6266
+ "dist": {
6267
+ "type": "zip",
6268
+ "url": "https://api.github.com/repos/wp-cli/maintenance-mode-command/zipball/3c80e731e1032607a2e9589ae6b6398e95c05b91",
6269
+ "reference": "3c80e731e1032607a2e9589ae6b6398e95c05b91",
6270
+ "shasum": ""
6271
+ },
6272
+ "require": {
6273
+ "wp-cli/wp-cli": "^2"
6274
+ },
6275
+ "require-dev": {
6276
+ "wp-cli/wp-cli-tests": "^2.1"
6277
+ },
6278
+ "type": "wp-cli-package",
6279
+ "extra": {
6280
+ "branch-alias": {
6281
+ "dev-master": "2.x-dev"
6282
+ },
6283
+ "bundled": true,
6284
+ "commands": [
6285
+ "maintenance-mode",
6286
+ "maintenance-mode activate",
6287
+ "maintenance-mode deactivate",
6288
+ "maintenance-mode status",
6289
+ "maintenance-mode is-active"
6290
+ ]
6291
+ },
6292
+ "autoload": {
6293
+ "psr-4": {
6294
+ "WP_CLI\\MaintenanceMode\\": "src/"
6295
+ },
6296
+ "files": [
6297
+ "maintenance-mode-command.php"
6298
+ ]
6299
+ },
6300
+ "notification-url": "https://packagist.org/downloads/",
6301
+ "license": [
6302
+ "MIT"
6303
+ ],
6304
+ "authors": [
6305
+ {
6306
+ "name": "Thrijith Thankachan",
6307
+ "email": "thrijith13@gmail.com",
6308
+ "homepage": "https://thrijith.com"
6309
+ }
6310
+ ],
6311
+ "description": "Activates, deactivates or checks the status of the maintenance mode of a site.",
6312
+ "homepage": "https://github.com/wp-cli/maintenance-mode-command",
6313
+ "time": "2019-11-12T01:32:41+00:00"
6314
+ },
6315
+ {
6316
+ "name": "wp-cli/media-command",
6317
+ "version": "v2.0.7",
6318
+ "source": {
6319
+ "type": "git",
6320
+ "url": "https://github.com/wp-cli/media-command.git",
6321
+ "reference": "0b7fbee4c4aa9335b83fd5c65183808949ba1c8e"
6322
+ },
6323
+ "dist": {
6324
+ "type": "zip",
6325
+ "url": "https://api.github.com/repos/wp-cli/media-command/zipball/0b7fbee4c4aa9335b83fd5c65183808949ba1c8e",
6326
+ "reference": "0b7fbee4c4aa9335b83fd5c65183808949ba1c8e",
6327
+ "shasum": ""
6328
+ },
6329
+ "require": {
6330
+ "wp-cli/wp-cli": "^2"
6331
+ },
6332
+ "require-dev": {
6333
+ "wp-cli/entity-command": "^1.3 || ^2",
6334
+ "wp-cli/extension-command": "^2.0",
6335
+ "wp-cli/wp-cli-tests": "^2.1"
6336
+ },
6337
+ "type": "wp-cli-package",
6338
+ "extra": {
6339
+ "branch-alias": {
6340
+ "dev-master": "2.x-dev"
6341
+ },
6342
+ "bundled": true,
6343
+ "commands": [
6344
+ "media",
6345
+ "media import",
6346
+ "media regenerate",
6347
+ "media image-size"
6348
+ ]
6349
+ },
6350
+ "autoload": {
6351
+ "psr-4": {
6352
+ "": "src/"
6353
+ },
6354
+ "files": [
6355
+ "media-command.php"
6356
+ ]
6357
+ },
6358
+ "notification-url": "https://packagist.org/downloads/",
6359
+ "license": [
6360
+ "MIT"
6361
+ ],
6362
+ "authors": [
6363
+ {
6364
+ "name": "Daniel Bachhuber",
6365
+ "email": "daniel@runcommand.io",
6366
+ "homepage": "https://runcommand.io"
6367
+ }
6368
+ ],
6369
+ "description": "Imports files as attachments, regenerates thumbnails, or lists registered image sizes.",
6370
+ "homepage": "https://github.com/wp-cli/media-command",
6371
+ "time": "2019-11-12T11:32:15+00:00"
6372
+ },
6373
+ {
6374
+ "name": "wp-cli/mustangostang-spyc",
6375
+ "version": "0.6.3",
6376
+ "source": {
6377
+ "type": "git",
6378
+ "url": "https://github.com/wp-cli/spyc.git",
6379
+ "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7"
6380
+ },
6381
+ "dist": {
6382
+ "type": "zip",
6383
+ "url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
6384
+ "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
6385
+ "shasum": ""
6386
+ },
6387
+ "require": {
6388
+ "php": ">=5.3.1"
6389
+ },
6390
+ "require-dev": {
6391
+ "phpunit/phpunit": "4.3.*@dev"
6392
+ },
6393
+ "type": "library",
6394
+ "extra": {
6395
+ "branch-alias": {
6396
+ "dev-master": "0.5.x-dev"
6397
+ }
6398
+ },
6399
+ "autoload": {
6400
+ "psr-4": {
6401
+ "Mustangostang\\": "src/"
6402
+ },
6403
+ "files": [
6404
+ "includes/functions.php"
6405
+ ]
6406
+ },
6407
+ "notification-url": "https://packagist.org/downloads/",
6408
+ "license": [
6409
+ "MIT"
6410
+ ],
6411
+ "authors": [
6412
+ {
6413
+ "name": "mustangostang",
6414
+ "email": "vlad.andersen@gmail.com"
6415
+ }
6416
+ ],
6417
+ "description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)",
6418
+ "homepage": "https://github.com/mustangostang/spyc/",
6419
+ "time": "2017-04-25T11:26:20+00:00"
6420
+ },
6421
+ {
6422
+ "name": "wp-cli/package-command",
6423
+ "version": "v2.0.5",
6424
+ "source": {
6425
+ "type": "git",
6426
+ "url": "https://github.com/wp-cli/package-command.git",
6427
+ "reference": "52fea16f3cec0577b9c417a19ebc0f328c38d853"
6428
+ },
6429
+ "dist": {
6430
+ "type": "zip",
6431
+ "url": "https://api.github.com/repos/wp-cli/package-command/zipball/52fea16f3cec0577b9c417a19ebc0f328c38d853",
6432
+ "reference": "52fea16f3cec0577b9c417a19ebc0f328c38d853",
6433
+ "shasum": ""
6434
+ },
6435
+ "require": {
6436
+ "composer/composer": ">=1.2.0 <1.7.0 || ^1.7.1",
6437
+ "ext-json": "*",
6438
+ "wp-cli/wp-cli": "^2.1"
6439
+ },
6440
+ "require-dev": {
6441
+ "wp-cli/scaffold-command": "^1 || ^2",
6442
+ "wp-cli/wp-cli-tests": "^2.1"
6443
+ },
6444
+ "type": "wp-cli-package",
6445
+ "extra": {
6446
+ "branch-alias": {
6447
+ "dev-master": "2.x-dev"
6448
+ },
6449
+ "bundled": true,
6450
+ "commands": [
6451
+ "package",
6452
+ "package browse",
6453
+ "package install",
6454
+ "package list",
6455
+ "package update",
6456
+ "package uninstall"
6457
+ ]
6458
+ },
6459
+ "autoload": {
6460
+ "psr-4": {
6461
+ "": "src/"
6462
+ },
6463
+ "files": [
6464
+ "package-command.php"
6465
+ ]
6466
+ },
6467
+ "notification-url": "https://packagist.org/downloads/",
6468
+ "license": [
6469
+ "MIT"
6470
+ ],
6471
+ "authors": [
6472
+ {
6473
+ "name": "Daniel Bachhuber",
6474
+ "email": "daniel@runcommand.io",
6475
+ "homepage": "https://runcommand.io"
6476
+ }
6477
+ ],
6478
+ "description": "Lists, installs, and removes WP-CLI packages.",
6479
+ "homepage": "https://github.com/wp-cli/package-command",
6480
+ "time": "2019-04-24T09:34:35+00:00"
6481
+ },
6482
+ {
6483
+ "name": "wp-cli/php-cli-tools",
6484
+ "version": "v0.11.11",
6485
+ "source": {
6486
+ "type": "git",
6487
+ "url": "https://github.com/wp-cli/php-cli-tools.git",
6488
+ "reference": "fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f"
6489
+ },
6490
+ "dist": {
6491
+ "type": "zip",
6492
+ "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f",
6493
+ "reference": "fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f",
6494
+ "shasum": ""
6495
+ },
6496
+ "require": {
6497
+ "php": ">= 5.3.0"
6498
+ },
6499
+ "type": "library",
6500
+ "autoload": {
6501
+ "psr-0": {
6502
+ "cli": "lib/"
6503
+ },
6504
+ "files": [
6505
+ "lib/cli/cli.php"
6506
+ ]
6507
+ },
6508
+ "notification-url": "https://packagist.org/downloads/",
6509
+ "license": [
6510
+ "MIT"
6511
+ ],
6512
+ "authors": [
6513
+ {
6514
+ "name": "James Logsdon",
6515
+ "email": "jlogsdon@php.net",
6516
+ "role": "Developer"
6517
+ },
6518
+ {
6519
+ "name": "Daniel Bachhuber",
6520
+ "email": "daniel@handbuilt.co",
6521
+ "role": "Maintainer"
6522
+ }
6523
+ ],
6524
+ "description": "Console utilities for PHP",
6525
+ "homepage": "http://github.com/wp-cli/php-cli-tools",
6526
+ "keywords": [
6527
+ "cli",
6528
+ "console"
6529
+ ],
6530
+ "time": "2018-09-04T13:28:00+00:00"
6531
+ },
6532
+ {
6533
+ "name": "wp-cli/rewrite-command",
6534
+ "version": "v2.0.4",
6535
+ "source": {
6536
+ "type": "git",
6537
+ "url": "https://github.com/wp-cli/rewrite-command.git",
6538
+ "reference": "3879bcbf7e695f68097cedb8415ed04915a25465"
6539
+ },
6540
+ "dist": {
6541
+ "type": "zip",
6542
+ "url": "https://api.github.com/repos/wp-cli/rewrite-command/zipball/3879bcbf7e695f68097cedb8415ed04915a25465",
6543
+ "reference": "3879bcbf7e695f68097cedb8415ed04915a25465",
6544
+ "shasum": ""
6545
+ },
6546
+ "require": {
6547
+ "wp-cli/wp-cli": "^2"
6548
+ },
6549
+ "require-dev": {
6550
+ "wp-cli/entity-command": "^1.3 || ^2",
6551
+ "wp-cli/wp-cli-tests": "^2.1"
6552
+ },
6553
+ "type": "wp-cli-package",
6554
+ "extra": {
6555
+ "branch-alias": {
6556
+ "dev-master": "2.x-dev"
6557
+ },
6558
+ "bundled": true,
6559
+ "commands": [
6560
+ "rewrite",
6561
+ "rewrite flush",
6562
+ "rewrite list",
6563
+ "rewrite structure"
6564
+ ]
6565
+ },
6566
+ "autoload": {
6567
+ "psr-4": {
6568
+ "": "src/"
6569
+ },
6570
+ "files": [
6571
+ "rewrite-command.php"
6572
+ ]
6573
+ },
6574
+ "notification-url": "https://packagist.org/downloads/",
6575
+ "license": [
6576
+ "MIT"
6577
+ ],
6578
+ "authors": [
6579
+ {
6580
+ "name": "Daniel Bachhuber",
6581
+ "email": "daniel@runcommand.io",
6582
+ "homepage": "https://runcommand.io"
6583
+ }
6584
+ ],
6585
+ "description": "Lists or flushes the site's rewrite rules, updates the permalink structure.",
6586
+ "homepage": "https://github.com/wp-cli/rewrite-command",
6587
+ "time": "2019-11-12T01:31:23+00:00"
6588
+ },
6589
+ {
6590
+ "name": "wp-cli/role-command",
6591
+ "version": "v2.0.3",
6592
+ "source": {
6593
+ "type": "git",
6594
+ "url": "https://github.com/wp-cli/role-command.git",
6595
+ "reference": "bad54a1b02331ee6460cc6a6f967e37dd91e07a3"
6596
+ },
6597
+ "dist": {
6598
+ "type": "zip",
6599
+ "url": "https://api.github.com/repos/wp-cli/role-command/zipball/bad54a1b02331ee6460cc6a6f967e37dd91e07a3",
6600
+ "reference": "bad54a1b02331ee6460cc6a6f967e37dd91e07a3",
6601
+ "shasum": ""
6602
+ },
6603
+ "require": {
6604
+ "wp-cli/wp-cli": "^2"
6605
+ },
6606
+ "require-dev": {
6607
+ "wp-cli/wp-cli-tests": "^2.1"
6608
+ },
6609
+ "type": "wp-cli-package",
6610
+ "extra": {
6611
+ "branch-alias": {
6612
+ "dev-master": "2.x-dev"
6613
+ },
6614
+ "bundled": true,
6615
+ "commands": [
6616
+ "role",
6617
+ "role create",
6618
+ "role delete",
6619
+ "role exists",
6620
+ "role list",
6621
+ "role reset",
6622
+ "cap",
6623
+ "cap add",
6624
+ "cap list",
6625
+ "cap remove"
6626
+ ]
6627
+ },
6628
+ "autoload": {
6629
+ "psr-4": {
6630
+ "": "src/"
6631
+ },
6632
+ "files": [
6633
+ "role-command.php"
6634
+ ]
6635
+ },
6636
+ "notification-url": "https://packagist.org/downloads/",
6637
+ "license": [
6638
+ "MIT"
6639
+ ],
6640
+ "authors": [
6641
+ {
6642
+ "name": "Daniel Bachhuber",
6643
+ "email": "daniel@runcommand.io",
6644
+ "homepage": "https://runcommand.io"
6645
+ }
6646
+ ],
6647
+ "description": "Adds, removes, lists, and resets roles and capabilities.",
6648
+ "homepage": "https://github.com/wp-cli/role-command",
6649
+ "time": "2019-11-12T01:30:59+00:00"
6650
+ },
6651
+ {
6652
+ "name": "wp-cli/scaffold-command",
6653
+ "version": "v2.0.7",
6654
+ "source": {
6655
+ "type": "git",
6656
+ "url": "https://github.com/wp-cli/scaffold-command.git",
6657
+ "reference": "fe73e6f71c2a03908bb5ceac17a0e408544a868a"
6658
+ },
6659
+ "dist": {
6660
+ "type": "zip",
6661
+ "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/fe73e6f71c2a03908bb5ceac17a0e408544a868a",
6662
+ "reference": "fe73e6f71c2a03908bb5ceac17a0e408544a868a",
6663
+ "shasum": ""
6664
+ },
6665
+ "require": {
6666
+ "php": "^5.4 || ^7.0",
6667
+ "wp-cli/wp-cli": "^2"
6668
+ },
6669
+ "require-dev": {
6670
+ "wp-cli/extension-command": "^1.2 || ^2",
6671
+ "wp-cli/wp-cli-tests": "^2.1"
6672
+ },
6673
+ "type": "wp-cli-package",
6674
+ "extra": {
6675
+ "branch-alias": {
6676
+ "dev-master": "2.x-dev"
6677
+ },
6678
+ "bundled": true,
6679
+ "commands": [
6680
+ "scaffold",
6681
+ "scaffold underscores",
6682
+ "scaffold block",
6683
+ "scaffold child-theme",
6684
+ "scaffold plugin",
6685
+ "scaffold plugin-tests",
6686
+ "scaffold post-type",
6687
+ "scaffold taxonomy",
6688
+ "scaffold theme-tests"
6689
+ ]
6690
+ },
6691
+ "autoload": {
6692
+ "psr-4": {
6693
+ "": "src/"
6694
+ },
6695
+ "files": [
6696
+ "scaffold-command.php"
6697
+ ]
6698
+ },
6699
+ "notification-url": "https://packagist.org/downloads/",
6700
+ "license": [
6701
+ "MIT"
6702
+ ],
6703
+ "authors": [
6704
+ {
6705
+ "name": "Daniel Bachhuber",
6706
+ "email": "daniel@runcommand.io",
6707
+ "homepage": "https://runcommand.io"
6708
+ }
6709
+ ],
6710
+ "description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.",
6711
+ "homepage": "https://github.com/wp-cli/scaffold-command",
6712
+ "time": "2019-11-12T11:32:15+00:00"
6713
+ },
6714
+ {
6715
+ "name": "wp-cli/search-replace-command",
6716
+ "version": "v2.0.5",
6717
+ "source": {
6718
+ "type": "git",
6719
+ "url": "https://github.com/wp-cli/search-replace-command.git",
6720
+ "reference": "d53ae0715d3701ef22826d5c7b46973a1b24e472"
6721
+ },
6722
+ "dist": {
6723
+ "type": "zip",
6724
+ "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/d53ae0715d3701ef22826d5c7b46973a1b24e472",
6725
+ "reference": "d53ae0715d3701ef22826d5c7b46973a1b24e472",
6726
+ "shasum": ""
6727
+ },
6728
+ "require": {
6729
+ "wp-cli/wp-cli": "^2"
6730
+ },
6731
+ "require-dev": {
6732
+ "wp-cli/db-command": "^1.3 || ^2",
6733
+ "wp-cli/entity-command": "^1.3 || ^2",
6734
+ "wp-cli/extension-command": "^1.2 || ^2",
6735
+ "wp-cli/wp-cli-tests": "^2.1"
6736
+ },
6737
+ "type": "wp-cli-package",
6738
+ "extra": {
6739
+ "branch-alias": {
6740
+ "dev-master": "2.x-dev"
6741
+ },
6742
+ "bundled": true,
6743
+ "commands": [
6744
+ "search-replace"
6745
+ ]
6746
+ },
6747
+ "autoload": {
6748
+ "psr-4": {
6749
+ "": "src/"
6750
+ },
6751
+ "files": [
6752
+ "search-replace-command.php"
6753
+ ]
6754
+ },
6755
+ "notification-url": "https://packagist.org/downloads/",
6756
+ "license": [
6757
+ "MIT"
6758
+ ],
6759
+ "authors": [
6760
+ {
6761
+ "name": "Daniel Bachhuber",
6762
+ "email": "daniel@runcommand.io",
6763
+ "homepage": "https://runcommand.io"
6764
+ }
6765
+ ],
6766
+ "description": "Searches/replaces strings in the database.",
6767
+ "homepage": "https://github.com/wp-cli/search-replace-command",
6768
+ "time": "2019-11-12T01:29:55+00:00"
6769
+ },
6770
+ {
6771
+ "name": "wp-cli/server-command",
6772
+ "version": "v2.0.4",
6773
+ "source": {
6774
+ "type": "git",
6775
+ "url": "https://github.com/wp-cli/server-command.git",
6776
+ "reference": "b0c8db803aea2133973a9a35b0d94fb62487b456"
6777
+ },
6778
+ "dist": {
6779
+ "type": "zip",
6780
+ "url": "https://api.github.com/repos/wp-cli/server-command/zipball/b0c8db803aea2133973a9a35b0d94fb62487b456",
6781
+ "reference": "b0c8db803aea2133973a9a35b0d94fb62487b456",
6782
+ "shasum": ""
6783
+ },
6784
+ "require": {
6785
+ "wp-cli/wp-cli": "^2"
6786
+ },
6787
+ "require-dev": {
6788
+ "wp-cli/wp-cli-tests": "^2.1"
6789
+ },
6790
+ "type": "wp-cli-package",
6791
+ "extra": {
6792
+ "branch-alias": {
6793
+ "dev-master": "2.x-dev"
6794
+ },
6795
+ "bundled": true,
6796
+ "commands": [
6797
+ "server"
6798
+ ]
6799
+ },
6800
+ "autoload": {
6801
+ "psr-4": {
6802
+ "": "src/"
6803
+ },
6804
+ "files": [
6805
+ "server-command.php"
6806
+ ]
6807
+ },
6808
+ "notification-url": "https://packagist.org/downloads/",
6809
+ "license": [
6810
+ "MIT"
6811
+ ],
6812
+ "authors": [
6813
+ {
6814
+ "name": "Daniel Bachhuber",
6815
+ "email": "daniel@runcommand.io",
6816
+ "homepage": "https://runcommand.io"
6817
+ }
6818
+ ],
6819
+ "description": "Launches PHP's built-in web server for a specific WordPress installation.",
6820
+ "homepage": "https://github.com/wp-cli/server-command",
6821
+ "time": "2019-11-12T11:32:15+00:00"
6822
+ },
6823
+ {
6824
+ "name": "wp-cli/shell-command",
6825
+ "version": "v2.0.4",
6826
+ "source": {
6827
+ "type": "git",
6828
+ "url": "https://github.com/wp-cli/shell-command.git",
6829
+ "reference": "293cc82fe6e99c0168bf834787ac5d0e17825723"
6830
+ },
6831
+ "dist": {
6832
+ "type": "zip",
6833
+ "url": "https://api.github.com/repos/wp-cli/shell-command/zipball/293cc82fe6e99c0168bf834787ac5d0e17825723",
6834
+ "reference": "293cc82fe6e99c0168bf834787ac5d0e17825723",
6835
+ "shasum": ""
6836
+ },
6837
+ "require": {
6838
+ "wp-cli/wp-cli": "^2"
6839
+ },
6840
+ "require-dev": {
6841
+ "wp-cli/wp-cli-tests": "^2.1"
6842
+ },
6843
+ "type": "wp-cli-package",
6844
+ "extra": {
6845
+ "branch-alias": {
6846
+ "dev-master": "2.x-dev"
6847
+ },
6848
+ "bundled": true,
6849
+ "commands": [
6850
+ "shell"
6851
+ ]
6852
+ },
6853
+ "autoload": {
6854
+ "psr-4": {
6855
+ "": "src/",
6856
+ "WP_CLI\\": "src/WP_CLI"
6857
+ },
6858
+ "files": [
6859
+ "shell-command.php"
6860
+ ]
6861
+ },
6862
+ "notification-url": "https://packagist.org/downloads/",
6863
+ "license": [
6864
+ "MIT"
6865
+ ],
6866
+ "authors": [
6867
+ {
6868
+ "name": "Daniel Bachhuber",
6869
+ "email": "daniel@runcommand.io",
6870
+ "homepage": "https://runcommand.io"
6871
+ }
6872
+ ],
6873
+ "description": "Opens an interactive PHP console for running and testing PHP code.",
6874
+ "homepage": "https://github.com/wp-cli/shell-command",
6875
+ "time": "2019-11-12T01:29:25+00:00"
6876
+ },
6877
+ {
6878
+ "name": "wp-cli/super-admin-command",
6879
+ "version": "v2.0.3",
6880
+ "source": {
6881
+ "type": "git",
6882
+ "url": "https://github.com/wp-cli/super-admin-command.git",
6883
+ "reference": "b3f3078d25c17ee586a5f31cb5ce3553613e85b4"
6884
+ },
6885
+ "dist": {
6886
+ "type": "zip",
6887
+ "url": "https://api.github.com/repos/wp-cli/super-admin-command/zipball/b3f3078d25c17ee586a5f31cb5ce3553613e85b4",
6888
+ "reference": "b3f3078d25c17ee586a5f31cb5ce3553613e85b4",
6889
+ "shasum": ""
6890
+ },
6891
+ "require": {
6892
+ "wp-cli/wp-cli": "^2"
6893
+ },
6894
+ "require-dev": {
6895
+ "wp-cli/entity-command": "^1.3 || ^2",
6896
+ "wp-cli/wp-cli-tests": "^2.1"
6897
+ },
6898
+ "type": "wp-cli-package",
6899
+ "extra": {
6900
+ "branch-alias": {
6901
+ "dev-master": "2.x-dev"
6902
+ },
6903
+ "bundled": true,
6904
+ "commands": [
6905
+ "super-admin",
6906
+ "super-admin add",
6907
+ "super-admin list",
6908
+ "super-admin remove"
6909
+ ]
6910
+ },
6911
+ "autoload": {
6912
+ "psr-4": {
6913
+ "": "src/"
6914
+ },
6915
+ "files": [
6916
+ "super-admin-command.php"
6917
+ ]
6918
+ },
6919
+ "notification-url": "https://packagist.org/downloads/",
6920
+ "license": [
6921
+ "MIT"
6922
+ ],
6923
+ "authors": [
6924
+ {
6925
+ "name": "Daniel Bachhuber",
6926
+ "email": "daniel@runcommand.io",
6927
+ "homepage": "https://runcommand.io"
6928
+ }
6929
+ ],
6930
+ "description": "Lists, adds, or removes super admin users on a multisite installation.",
6931
+ "homepage": "https://github.com/wp-cli/super-admin-command",
6932
+ "time": "2019-11-12T01:28:59+00:00"
6933
+ },
6934
+ {
6935
+ "name": "wp-cli/widget-command",
6936
+ "version": "v2.0.2",
6937
+ "source": {
6938
+ "type": "git",
6939
+ "url": "https://github.com/wp-cli/widget-command.git",
6940
+ "reference": "58a1b2d2221cee852eb8a589535aaadb1217bb74"
6941
+ },
6942
+ "dist": {
6943
+ "type": "zip",
6944
+ "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/58a1b2d2221cee852eb8a589535aaadb1217bb74",
6945
+ "reference": "58a1b2d2221cee852eb8a589535aaadb1217bb74",
6946
+ "shasum": ""
6947
+ },
6948
+ "require": {
6949
+ "wp-cli/wp-cli": "^2"
6950
+ },
6951
+ "require-dev": {
6952
+ "wp-cli/extension-command": "^1.2 || ^2",
6953
+ "wp-cli/wp-cli-tests": "^2.1"
6954
+ },
6955
+ "type": "wp-cli-package",
6956
+ "extra": {
6957
+ "branch-alias": {
6958
+ "dev-master": "2.x-dev"
6959
+ },
6960
+ "bundled": true,
6961
+ "commands": [
6962
+ "widget",
6963
+ "widget add",
6964
+ "widget deactivate",
6965
+ "widget delete",
6966
+ "widget list",
6967
+ "widget move",
6968
+ "widget reset",
6969
+ "widget update",
6970
+ "sidebar",
6971
+ "sidebar list"
6972
+ ]
6973
+ },
6974
+ "autoload": {
6975
+ "psr-4": {
6976
+ "": "src/"
6977
+ },
6978
+ "files": [
6979
+ "widget-command.php"
6980
+ ]
6981
+ },
6982
+ "notification-url": "https://packagist.org/downloads/",
6983
+ "license": [
6984
+ "MIT"
6985
+ ],
6986
+ "authors": [
6987
+ {
6988
+ "name": "Daniel Bachhuber",
6989
+ "email": "daniel@runcommand.io",
6990
+ "homepage": "https://runcommand.io"
6991
+ }
6992
+ ],
6993
+ "description": "Adds, moves, and removes widgets; lists sidebars.",
6994
+ "homepage": "https://github.com/wp-cli/widget-command",
6995
+ "time": "2019-04-25T00:25:21+00:00"
6996
+ },
6997
+ {
6998
+ "name": "wp-cli/wp-cli",
6999
+ "version": "v2.4.0",
7000
+ "source": {
7001
+ "type": "git",
7002
+ "url": "https://github.com/wp-cli/wp-cli.git",
7003
+ "reference": "74c949c74708e3a88ad0add70f3236c8675dfd85"
7004
+ },
7005
+ "dist": {
7006
+ "type": "zip",
7007
+ "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/74c949c74708e3a88ad0add70f3236c8675dfd85",
7008
+ "reference": "74c949c74708e3a88ad0add70f3236c8675dfd85",
7009
+ "shasum": ""
7010
+ },
7011
+ "require": {
7012
+ "cweagans/composer-patches": "^1.6",
7013
+ "ext-curl": "*",
7014
+ "mustache/mustache": "~2.4",
7015
+ "php": "^5.4 || ^7.0",
7016
+ "rmccue/requests": "~1.6",
7017
+ "symfony/finder": ">2.7",
7018
+ "wp-cli/mustangostang-spyc": "^0.6.3",
7019
+ "wp-cli/php-cli-tools": "~0.11.2"
7020
+ },
7021
+ "require-dev": {
7022
+ "roave/security-advisories": "dev-master",
7023
+ "wp-cli/db-command": "^1.3 || ^2",
7024
+ "wp-cli/entity-command": "^1.2 || ^2",
7025
+ "wp-cli/extension-command": "^1.1 || ^2",
7026
+ "wp-cli/package-command": "^1 || ^2",
7027
+ "wp-cli/wp-cli-tests": "^2.1"
7028
+ },
7029
+ "suggest": {
7030
+ "ext-readline": "Include for a better --prompt implementation",
7031
+ "ext-zip": "Needed to support extraction of ZIP archives when doing downloads or updates"
7032
+ },
7033
+ "bin": [
7034
+ "bin/wp",
7035
+ "bin/wp.bat"
7036
+ ],
7037
+ "type": "library",
7038
+ "extra": {
7039
+ "branch-alias": {
7040
+ "dev-master": "2.4.x-dev"
7041
+ },
7042
+ "patches": {
7043
+ "mustache/mustache": {
7044
+ "Avoid notices on PHP 7.4+": "https://patch-diff.githubusercontent.com/raw/bobthecow/mustache.php/pull/349.patch"
7045
+ }
7046
+ }
7047
+ },
7048
+ "autoload": {
7049
+ "psr-0": {
7050
+ "WP_CLI": "php"
7051
+ }
7052
+ },
7053
+ "notification-url": "https://packagist.org/downloads/",
7054
+ "license": [
7055
+ "MIT"
7056
+ ],
7057
+ "description": "WP-CLI framework",
7058
+ "homepage": "https://wp-cli.org",
7059
+ "keywords": [
7060
+ "cli",
7061
+ "wordpress"
7062
+ ],
7063
+ "time": "2019-11-12T15:26:05+00:00"
7064
+ },
7065
+ {
7066
+ "name": "wp-cli/wp-cli-bundle",
7067
+ "version": "v2.4.0",
7068
+ "source": {
7069
+ "type": "git",
7070
+ "url": "https://github.com/wp-cli/wp-cli-bundle.git",
7071
+ "reference": "713bc75b2f88550920dedc4f2ad3e1daf9f76326"
7072
+ },
7073
+ "dist": {
7074
+ "type": "zip",
7075
+ "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/713bc75b2f88550920dedc4f2ad3e1daf9f76326",
7076
+ "reference": "713bc75b2f88550920dedc4f2ad3e1daf9f76326",
7077
+ "shasum": ""
7078
+ },
7079
+ "require": {
7080
+ "cweagans/composer-patches": "^1.6",
7081
+ "php": ">=5.4",
7082
+ "wp-cli/cache-command": "^2",
7083
+ "wp-cli/checksum-command": "^2",
7084
+ "wp-cli/config-command": "^2",
7085
+ "wp-cli/core-command": "^2",
7086
+ "wp-cli/cron-command": "^2",
7087
+ "wp-cli/db-command": "^2",
7088
+ "wp-cli/embed-command": "^2",
7089
+ "wp-cli/entity-command": "^2",
7090
+ "wp-cli/eval-command": "^2",
7091
+ "wp-cli/export-command": "^2",
7092
+ "wp-cli/extension-command": "^2",
7093
+ "wp-cli/i18n-command": "^2",
7094
+ "wp-cli/import-command": "^2",
7095
+ "wp-cli/language-command": "^2",
7096
+ "wp-cli/maintenance-mode-command": "^2",
7097
+ "wp-cli/media-command": "^2",
7098
+ "wp-cli/package-command": "^2",
7099
+ "wp-cli/rewrite-command": "^2",
7100
+ "wp-cli/role-command": "^2",
7101
+ "wp-cli/scaffold-command": "^2",
7102
+ "wp-cli/search-replace-command": "^2",
7103
+ "wp-cli/server-command": "^2",
7104
+ "wp-cli/shell-command": "^2",
7105
+ "wp-cli/super-admin-command": "^2",
7106
+ "wp-cli/widget-command": "^2",
7107
+ "wp-cli/wp-cli": "^2.4"
7108
+ },
7109
+ "require-dev": {
7110
+ "roave/security-advisories": "dev-master",
7111
+ "wp-cli/wp-cli-tests": "^2.1"
7112
+ },
7113
+ "suggest": {
7114
+ "psy/psysh": "Enhanced `wp shell` functionality"
7115
+ },
7116
+ "type": "library",
7117
+ "extra": {
7118
+ "branch-alias": {
7119
+ "dev-master": "2.1.x-dev"
7120
+ },
7121
+ "enable-patching": true
7122
+ },
7123
+ "notification-url": "https://packagist.org/downloads/",
7124
+ "license": [
7125
+ "MIT"
7126
+ ],
7127
+ "description": "WP-CLI bundle package with default commands.",
7128
+ "homepage": "https://wp-cli.org",
7129
+ "keywords": [
7130
+ "cli",
7131
+ "wordpress"
7132
+ ],
7133
+ "time": "2019-11-12T17:43:58+00:00"
7134
+ },
7135
+ {
7136
+ "name": "wp-cli/wp-config-transformer",
7137
+ "version": "v1.2.6",
7138
+ "source": {
7139
+ "type": "git",
7140
+ "url": "https://github.com/wp-cli/wp-config-transformer.git",
7141
+ "reference": "1ca98343443a8e4585865db5f50e8e6121fee70b"
7142
+ },
7143
+ "dist": {
7144
+ "type": "zip",
7145
+ "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/1ca98343443a8e4585865db5f50e8e6121fee70b",
7146
+ "reference": "1ca98343443a8e4585865db5f50e8e6121fee70b",
7147
+ "shasum": ""
7148
+ },
7149
+ "require": {
7150
+ "php": ">=5.3.29"
7151
+ },
7152
+ "require-dev": {
7153
+ "composer/composer": "^1.5.6",
7154
+ "phpunit/phpunit": "^6.5.5",
7155
+ "wp-coding-standards/wpcs": "^0.14.0 || ^1.0.0 || ^2.0.0"
7156
+ },
7157
+ "type": "library",
7158
+ "autoload": {
7159
+ "files": [
7160
+ "src/WPConfigTransformer.php"
7161
+ ]
7162
+ },
7163
+ "notification-url": "https://packagist.org/downloads/",
7164
+ "license": [
7165
+ "MIT"
7166
+ ],
7167
+ "authors": [
7168
+ {
7169
+ "name": "Frankie Jarrett",
7170
+ "email": "fjarrett@gmail.com"
7171
+ }
7172
+ ],
7173
+ "description": "Programmatically edit a wp-config.php file.",
7174
+ "time": "2019-07-23T17:24:43+00:00"
7175
+ },
7176
+ {
7177
+ "name": "zordius/lightncandy",
7178
+ "version": "v1.2.4",
7179
+ "source": {
7180
+ "type": "git",
7181
+ "url": "https://github.com/zordius/lightncandy.git",
7182
+ "reference": "dfdb910ae7b59e274f1ff97d29b724871f01b4cc"
7183
+ },
7184
+ "dist": {
7185
+ "type": "zip",
7186
+ "url": "https://api.github.com/repos/zordius/lightncandy/zipball/dfdb910ae7b59e274f1ff97d29b724871f01b4cc",
7187
+ "reference": "dfdb910ae7b59e274f1ff97d29b724871f01b4cc",
7188
+ "shasum": ""
7189
+ },
7190
+ "require": {
7191
+ "php": ">=5.4.0"
7192
+ },
7193
+ "require-dev": {
7194
+ "phpunit/phpunit": "^7"
7195
+ },
7196
+ "type": "library",
7197
+ "extra": {
7198
+ "branch-alias": {
7199
+ "dev-master": "1.2.5-dev"
7200
+ }
7201
+ },
7202
+ "autoload": {
7203
+ "psr-4": {
7204
+ "LightnCandy\\": "src"
7205
+ }
7206
+ },
7207
+ "notification-url": "https://packagist.org/downloads/",
7208
+ "license": [
7209
+ "MIT"
7210
+ ],
7211
+ "authors": [
7212
+ {
7213
+ "name": "Zordius Chen",
7214
+ "email": "zordius@gmail.com"
7215
+ }
7216
+ ],
7217
+ "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).",
7218
+ "homepage": "https://github.com/zordius/lightncandy",
7219
+ "keywords": [
7220
+ "handlebars",
7221
+ "logicless",
7222
+ "mustache",
7223
+ "php",
7224
+ "template"
7225
+ ],
7226
+ "time": "2019-06-09T04:10:55+00:00"
7227
+ }
7228
+ ],
7229
+ "aliases": [],
7230
+ "minimum-stability": "stable",
7231
+ "stability-flags": [],
7232
+ "prefer-stable": false,
7233
+ "prefer-lowest": false,
7234
+ "platform": [],
7235
+ "platform-dev": []
7236
+ }
vendor/skyverge/wc-plugin-framework/exclude-patterns.txt ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ resources/js/app.js
2
+ resources/vendor
3
+ (.*/)?autoload.php
4
+ sample.env
5
+ # Library Folders
6
+ node_modules
7
+ (.*/)?node_modules/
8
+ vendor
9
+ (.*/)?vendor/
10
+ # Lock Files are not always in the root
11
+ .*composer.lock
12
+ .*package.json
13
+ .*package-lock.json
14
+ .pnp.js
15
+ .*Pipfile.lock
16
+ .*yarn.lock
17
+ # Ignore inline images
18
+ .*\.css$
19
+ .*\.scss$
20
+ .*\.ico$
21
+ .*\.jpg$
22
+ .*\.png$
23
+ .*\.svg$
24
+ # Ignore uploaded logs
25
+ .*\.log$
26
+ # Frontend Build Files
27
+ build
28
+ data
29
+ public/js/app.js
vendor/skyverge/wc-plugin-framework/grunt/configs/coffee.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ var config = {};
6
+
7
+ // Compile CoffeeScript
8
+ config.coffee = {
9
+ compile: {
10
+ options: {
11
+ sourceMap: true
12
+ },
13
+ files: [
14
+ {
15
+ expand: true,
16
+ cwd: '<%= dirs.general.js %>/admin/',
17
+ dest: '<%= dirs.general.js %>/admin/',
18
+ src: '*.coffee',
19
+ ext: '.min.js'
20
+ }
21
+ ]
22
+ }
23
+ };
24
+
25
+ return config;
26
+ };
vendor/skyverge/wc-plugin-framework/grunt/configs/makepot.js ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ var config = {};
6
+
7
+ // The makepot task extracts gettext messages from source
8
+ // code and generates the POT file
9
+ config.makepot = {
10
+ framework: {
11
+ options: {
12
+ cwd: 'woocommerce',
13
+ domainPath: 'i18n/languages',
14
+ exclude: [],
15
+ potFilename: 'woocommerce-plugin-framework.pot',
16
+ mainFile: 'index.php',
17
+ potHeaders: {
18
+ 'report-msgid-bugs-to': 'https://support.woocommerce.com/hc/',
19
+ 'project-id-version': '<%= pkg.title %> <%= pkg.version %>',
20
+ },
21
+ processPot: function( pot ) {
22
+ delete pot.headers['x-generator'];
23
+ return pot;
24
+ }, // jshint ignore:line
25
+ type: 'wp-plugin',
26
+ updateTimestamp: false,
27
+ updatePoFiles: true,
28
+ }
29
+ }
30
+ };
31
+
32
+ return config;
33
+ };
vendor/skyverge/wc-plugin-framework/grunt/configs/potomo.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ var config = {};
6
+
7
+ // The potomo task compiles PO files to MO files
8
+ config.potomo = {
9
+ framework: {
10
+ options: {
11
+ poDel: false,
12
+ },
13
+ files: [{
14
+ expand: true,
15
+ cwd: '<%= dirs.lang %>',
16
+ src: ['*.po'],
17
+ dest: '<%= dirs.lang %>',
18
+ ext: '.mo',
19
+ nonull: true
20
+ }]
21
+ }
22
+ };
23
+
24
+ return config;
25
+ };
vendor/skyverge/wc-plugin-framework/grunt/configs/sass.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ var config = {};
6
+
7
+ // Compile all .scss files.
8
+ config.sass = {
9
+ compile: {
10
+ options: {
11
+ style: 'compressed',
12
+ sourcemap: true
13
+ },
14
+ files: [
15
+ {
16
+ expand: true,
17
+ cwd: '<%= dirs.general.css %>/admin/',
18
+ dest: '<%= dirs.general.css %>/admin/',
19
+ src: ['*.scss', '!_*.scss'],
20
+ ext: '.min.css'
21
+ },
22
+ {
23
+ expand: true,
24
+ cwd: '<%= dirs.gateway.css %>/admin/',
25
+ dest: '<%= dirs.gateway.css %>/admin/',
26
+ src: ['*.scss', '!_*.scss'],
27
+ ext: '.min.css'
28
+ },
29
+ {
30
+ expand: true,
31
+ cwd: '<%= dirs.gateway.css %>/frontend/',
32
+ dest: '<%= dirs.gateway.css %>/frontend/',
33
+ src: ['*.scss', '!_*.scss'],
34
+ ext: '.min.css'
35
+ }
36
+ ]
37
+ }
38
+ };
39
+
40
+ return config;
41
+ };
vendor/skyverge/wc-plugin-framework/grunt/configs/shell.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ var config = {};
6
+
7
+ // The update_translations task updates any existing translations with
8
+ // messages from the POT file and compiles them to MO files.
9
+ config.shell = {
10
+
11
+ tx_push: {
12
+ options: {
13
+ failOnError: false,
14
+ },
15
+ command: 'tx push -s --skip'
16
+ },
17
+
18
+ tx_pull: {
19
+ options: {
20
+ failOnError: false,
21
+ },
22
+ command: 'tx pull -a --skip '
23
+ },
24
+
25
+ };
26
+
27
+ return config;
28
+ };
vendor/skyverge/wc-plugin-framework/grunt/tasks/parsepo.js ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jshint node:true */
2
+ module.exports = function( grunt ) {
3
+ 'use strict';
4
+
5
+ var fs = require('fs'),
6
+ gp = require('gettext-parser'),
7
+ util = grunt.option( 'util' );
8
+
9
+ // Parse and adjust PO headers.
10
+ grunt.registerTask( 'parsepo', 'Custom parse PO task.', function () {
11
+
12
+ var files = grunt.file.expand( grunt.config( 'dirs.lang' ) + '/*.po' );
13
+
14
+ if ( ! files.length ) {
15
+ return;
16
+ }
17
+
18
+ files.forEach( function (file) {
19
+
20
+ var input = fs.readFileSync( file ),
21
+ po = gp.po.parse( input );
22
+
23
+ // Set PO file headers to reflect the current version number.
24
+ po.headers['project-id-version'] = grunt.config( 'pkg.title' ) + ' ' + grunt.config( 'pkg.version' );
25
+
26
+ fs.writeFileSync( file, gp.po.compile( po ) );
27
+ } );
28
+
29
+ } );
30
+
31
+ };
vendor/skyverge/wc-plugin-framework/package-lock.json ADDED
@@ -0,0 +1,8749 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "wc-plugin-framework",
3
+ "version": "5.10.0",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "@babel/code-frame": {
8
+ "version": "7.10.4",
9
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
10
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
11
+ "dev": true,
12
+ "requires": {
13
+ "@babel/highlight": "^7.10.4"
14
+ }
15
+ },
16
+ "@babel/compat-data": {
17
+ "version": "7.12.1",
18
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz",
19
+ "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==",
20
+ "dev": true
21
+ },
22
+ "@babel/core": {
23
+ "version": "7.12.3",
24
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
25
+ "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
26
+ "dev": true,
27
+ "requires": {
28
+ "@babel/code-frame": "^7.10.4",
29
+ "@babel/generator": "^7.12.1",
30
+ "@babel/helper-module-transforms": "^7.12.1",
31
+ "@babel/helpers": "^7.12.1",
32
+ "@babel/parser": "^7.12.3",
33
+ "@babel/template": "^7.10.4",
34
+ "@babel/traverse": "^7.12.1",
35
+ "@babel/types": "^7.12.1",
36
+ "convert-source-map": "^1.7.0",
37
+ "debug": "^4.1.0",
38
+ "gensync": "^1.0.0-beta.1",
39
+ "json5": "^2.1.2",
40
+ "lodash": "^4.17.19",
41
+ "resolve": "^1.3.2",
42
+ "semver": "^5.4.1",
43
+ "source-map": "^0.5.0"
44
+ },
45
+ "dependencies": {
46
+ "source-map": {
47
+ "version": "0.5.7",
48
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
49
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
50
+ "dev": true
51
+ }
52
+ }
53
+ },
54
+ "@babel/generator": {
55
+ "version": "7.12.1",
56
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz",
57
+ "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==",
58
+ "dev": true,
59
+ "requires": {
60
+ "@babel/types": "^7.12.1",
61
+ "jsesc": "^2.5.1",
62
+ "source-map": "^0.5.0"
63
+ },
64
+ "dependencies": {
65
+ "source-map": {
66
+ "version": "0.5.7",
67
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
68
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
69
+ "dev": true
70
+ }
71
+ }
72
+ },
73
+ "@babel/helper-annotate-as-pure": {
74
+ "version": "7.10.4",
75
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
76
+ "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
77
+ "dev": true,
78
+ "requires": {
79
+ "@babel/types": "^7.10.4"
80
+ }
81
+ },
82
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
83
+ "version": "7.10.4",
84
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
85
+ "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
86
+ "dev": true,
87
+ "requires": {
88
+ "@babel/helper-explode-assignable-expression": "^7.10.4",
89
+ "@babel/types": "^7.10.4"
90
+ }
91
+ },
92
+ "@babel/helper-builder-react-jsx": {
93
+ "version": "7.10.4",
94
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz",
95
+ "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==",
96
+ "dev": true,
97
+ "requires": {
98
+ "@babel/helper-annotate-as-pure": "^7.10.4",
99
+ "@babel/types": "^7.10.4"
100
+ }
101
+ },
102
+ "@babel/helper-builder-react-jsx-experimental": {
103
+ "version": "7.12.4",
104
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz",
105
+ "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==",
106
+ "dev": true,
107
+ "requires": {
108
+ "@babel/helper-annotate-as-pure": "^7.10.4",
109
+ "@babel/helper-module-imports": "^7.12.1",
110
+ "@babel/types": "^7.12.1"
111
+ }
112
+ },
113
+ "@babel/helper-compilation-targets": {
114
+ "version": "7.12.1",
115
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz",
116
+ "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==",
117
+ "dev": true,
118
+ "requires": {
119
+ "@babel/compat-data": "^7.12.1",
120
+ "@babel/helper-validator-option": "^7.12.1",
121
+ "browserslist": "^4.12.0",
122
+ "semver": "^5.5.0"
123
+ }
124
+ },
125
+ "@babel/helper-create-class-features-plugin": {
126
+ "version": "7.12.1",
127
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
128
+ "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
129
+ "dev": true,
130
+ "requires": {
131
+ "@babel/helper-function-name": "^7.10.4",
132
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
133
+ "@babel/helper-optimise-call-expression": "^7.10.4",
134
+ "@babel/helper-replace-supers": "^7.12.1",
135
+ "@babel/helper-split-export-declaration": "^7.10.4"
136
+ }
137
+ },
138
+ "@babel/helper-create-regexp-features-plugin": {
139
+ "version": "7.12.1",
140
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz",
141
+ "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==",
142
+ "dev": true,
143
+ "requires": {
144
+ "@babel/helper-annotate-as-pure": "^7.10.4",
145
+ "@babel/helper-regex": "^7.10.4",
146
+ "regexpu-core": "^4.7.1"
147
+ }
148
+ },
149
+ "@babel/helper-define-map": {
150
+ "version": "7.10.5",
151
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
152
+ "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
153
+ "dev": true,
154
+ "requires": {
155
+ "@babel/helper-function-name": "^7.10.4",
156
+ "@babel/types": "^7.10.5",
157
+ "lodash": "^4.17.19"
158
+ }
159
+ },
160
+ "@babel/helper-explode-assignable-expression": {
161
+ "version": "7.12.1",
162
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz",
163
+ "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
164
+ "dev": true,
165
+ "requires": {
166
+ "@babel/types": "^7.12.1"
167
+ }
168
+ },
169
+ "@babel/helper-function-name": {
170
+ "version": "7.10.4",
171
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
172
+ "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
173
+ "dev": true,
174
+ "requires": {
175
+ "@babel/helper-get-function-arity": "^7.10.4",
176
+ "@babel/template": "^7.10.4",
177
+ "@babel/types": "^7.10.4"
178
+ }
179
+ },
180
+ "@babel/helper-get-function-arity": {
181
+ "version": "7.10.4",
182
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
183
+ "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
184
+ "dev": true,
185
+ "requires": {
186
+ "@babel/types": "^7.10.4"
187
+ }
188
+ },
189
+ "@babel/helper-hoist-variables": {
190
+ "version": "7.10.4",
191
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
192
+ "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
193
+ "dev": true,
194
+ "requires": {
195
+ "@babel/types": "^7.10.4"
196
+ }
197
+ },
198
+ "@babel/helper-member-expression-to-functions": {
199
+ "version": "7.12.1",
200
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz",
201
+ "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==",
202
+ "dev": true,
203
+ "requires": {
204
+ "@babel/types": "^7.12.1"
205
+ }
206
+ },
207
+ "@babel/helper-module-imports": {
208
+ "version": "7.12.1",
209
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz",
210
+ "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==",
211
+ "dev": true,
212
+ "requires": {
213
+ "@babel/types": "^7.12.1"
214
+ }
215
+ },
216
+ "@babel/helper-module-transforms": {
217
+ "version": "7.12.1",
218
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
219
+ "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
220
+ "dev": true,
221
+ "requires": {
222
+ "@babel/helper-module-imports": "^7.12.1",
223
+ "@babel/helper-replace-supers": "^7.12.1",
224
+ "@babel/helper-simple-access": "^7.12.1",
225
+ "@babel/helper-split-export-declaration": "^7.11.0",
226
+ "@babel/helper-validator-identifier": "^7.10.4",
227
+ "@babel/template": "^7.10.4",
228
+ "@babel/traverse": "^7.12.1",
229
+ "@babel/types": "^7.12.1",
230
+ "lodash": "^4.17.19"
231
+ }
232
+ },
233
+ "@babel/helper-optimise-call-expression": {
234
+ "version": "7.10.4",
235
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
236
+ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
237
+ "dev": true,
238
+ "requires": {
239
+ "@babel/types": "^7.10.4"
240
+ }
241
+ },
242
+ "@babel/helper-plugin-utils": {
243
+ "version": "7.10.4",
244
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
245
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
246
+ "dev": true
247
+ },
248
+ "@babel/helper-regex": {
249
+ "version": "7.10.5",
250
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz",
251
+ "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==",
252
+ "dev": true,
253
+ "requires": {
254
+ "lodash": "^4.17.19"
255
+ }
256
+ },
257
+ "@babel/helper-remap-async-to-generator": {
258
+ "version": "7.12.1",
259
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz",
260
+ "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==",
261
+ "dev": true,
262
+ "requires": {
263
+ "@babel/helper-annotate-as-pure": "^7.10.4",
264
+ "@babel/helper-wrap-function": "^7.10.4",
265
+ "@babel/types": "^7.12.1"
266
+ }
267
+ },
268
+ "@babel/helper-replace-supers": {
269
+ "version": "7.12.1",
270
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz",
271
+ "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==",
272
+ "dev": true,
273
+ "requires": {
274
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
275
+ "@babel/helper-optimise-call-expression": "^7.10.4",
276
+ "@babel/traverse": "^7.12.1",
277
+ "@babel/types": "^7.12.1"
278
+ }
279
+ },
280
+ "@babel/helper-simple-access": {
281
+ "version": "7.12.1",
282
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
283
+ "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
284
+ "dev": true,
285
+ "requires": {
286
+ "@babel/types": "^7.12.1"
287
+ }
288
+ },
289
+ "@babel/helper-skip-transparent-expression-wrappers": {
290
+ "version": "7.12.1",
291
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
292
+ "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
293
+ "dev": true,
294
+ "requires": {
295
+ "@babel/types": "^7.12.1"
296
+ }
297
+ },
298
+ "@babel/helper-split-export-declaration": {
299
+ "version": "7.11.0",
300
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
301
+ "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
302
+ "dev": true,
303
+ "requires": {
304
+ "@babel/types": "^7.11.0"
305
+ }
306
+ },
307
+ "@babel/helper-validator-identifier": {
308
+ "version": "7.10.4",
309
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
310
+ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
311
+ "dev": true
312
+ },
313
+ "@babel/helper-validator-option": {
314
+ "version": "7.12.1",
315
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz",
316
+ "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==",
317
+ "dev": true
318
+ },
319
+ "@babel/helper-wrap-function": {
320
+ "version": "7.12.3",
321
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz",
322
+ "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==",
323
+ "dev": true,
324
+ "requires": {
325
+ "@babel/helper-function-name": "^7.10.4",
326
+ "@babel/template": "^7.10.4",
327
+ "@babel/traverse": "^7.10.4",
328
+ "@babel/types": "^7.10.4"
329
+ }
330
+ },
331
+ "@babel/helpers": {
332
+ "version": "7.12.1",
333
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz",
334
+ "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==",
335
+ "dev": true,
336
+ "requires": {
337
+ "@babel/template": "^7.10.4",
338
+ "@babel/traverse": "^7.12.1",
339
+ "@babel/types": "^7.12.1"
340
+ }
341
+ },
342
+ "@babel/highlight": {
343
+ "version": "7.10.4",
344
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
345
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
346
+ "dev": true,
347
+ "requires": {
348
+ "@babel/helper-validator-identifier": "^7.10.4",
349
+ "chalk": "^2.0.0",
350
+ "js-tokens": "^4.0.0"
351
+ },
352
+ "dependencies": {
353
+ "ansi-styles": {
354
+ "version": "3.2.1",
355
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
356
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
357
+ "dev": true,
358
+ "requires": {
359
+ "color-convert": "^1.9.0"
360
+ }
361
+ },
362
+ "chalk": {
363
+ "version": "2.4.2",
364
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
365
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
366
+ "dev": true,
367
+ "requires": {
368
+ "ansi-styles": "^3.2.1",
369
+ "escape-string-regexp": "^1.0.5",
370
+ "supports-color": "^5.3.0"
371
+ }
372
+ },
373
+ "supports-color": {
374
+ "version": "5.5.0",
375
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
376
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
377
+ "dev": true,
378
+ "requires": {
379
+ "has-flag": "^3.0.0"
380
+ }
381
+ }
382
+ }
383
+ },
384
+ "@babel/parser": {
385
+ "version": "7.12.3",
386
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz",
387
+ "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==",
388
+ "dev": true
389
+ },
390
+ "@babel/plugin-proposal-async-generator-functions": {
391
+ "version": "7.12.1",
392
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz",
393
+ "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==",
394
+ "dev": true,
395
+ "requires": {
396
+ "@babel/helper-plugin-utils": "^7.10.4",
397
+ "@babel/helper-remap-async-to-generator": "^7.12.1",
398
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
399
+ }
400
+ },
401
+ "@babel/plugin-proposal-class-properties": {
402
+ "version": "7.12.1",
403
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz",
404
+ "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==",
405
+ "dev": true,
406
+ "requires": {
407
+ "@babel/helper-create-class-features-plugin": "^7.12.1",
408
+ "@babel/helper-plugin-utils": "^7.10.4"
409
+ }
410
+ },
411
+ "@babel/plugin-proposal-dynamic-import": {
412
+ "version": "7.12.1",
413
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz",
414
+ "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==",
415
+ "dev": true,
416
+ "requires": {
417
+ "@babel/helper-plugin-utils": "^7.10.4",
418
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
419
+ }
420
+ },
421
+ "@babel/plugin-proposal-export-namespace-from": {
422
+ "version": "7.12.1",
423
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz",
424
+ "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==",
425
+ "dev": true,
426
+ "requires": {
427
+ "@babel/helper-plugin-utils": "^7.10.4",
428
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
429
+ }
430
+ },
431
+ "@babel/plugin-proposal-json-strings": {
432
+ "version": "7.12.1",
433
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz",
434
+ "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==",
435
+ "dev": true,
436
+ "requires": {
437
+ "@babel/helper-plugin-utils": "^7.10.4",
438
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
439
+ }
440
+ },
441
+ "@babel/plugin-proposal-logical-assignment-operators": {
442
+ "version": "7.12.1",
443
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz",
444
+ "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==",
445
+ "dev": true,
446
+ "requires": {
447
+ "@babel/helper-plugin-utils": "^7.10.4",
448
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
449
+ }
450
+ },
451
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
452
+ "version": "7.12.1",
453
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz",
454
+ "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==",
455
+ "dev": true,
456
+ "requires": {
457
+ "@babel/helper-plugin-utils": "^7.10.4",
458
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
459
+ }
460
+ },
461
+ "@babel/plugin-proposal-numeric-separator": {
462
+ "version": "7.12.1",
463
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz",
464
+ "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==",
465
+ "dev": true,
466
+ "requires": {
467
+ "@babel/helper-plugin-utils": "^7.10.4",
468
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
469
+ }
470
+ },
471
+ "@babel/plugin-proposal-object-rest-spread": {
472
+ "version": "7.12.1",
473
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
474
+ "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
475
+ "dev": true,
476
+ "requires": {
477
+ "@babel/helper-plugin-utils": "^7.10.4",
478
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
479
+ "@babel/plugin-transform-parameters": "^7.12.1"
480
+ }
481
+ },
482
+ "@babel/plugin-proposal-optional-catch-binding": {
483
+ "version": "7.12.1",
484
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz",
485
+ "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==",
486
+ "dev": true,
487
+ "requires": {
488
+ "@babel/helper-plugin-utils": "^7.10.4",
489
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
490
+ }
491
+ },
492
+ "@babel/plugin-proposal-optional-chaining": {
493
+ "version": "7.12.1",
494
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz",
495
+ "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==",
496
+ "dev": true,
497
+ "requires": {
498
+ "@babel/helper-plugin-utils": "^7.10.4",
499
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
500
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
501
+ }
502
+ },
503
+ "@babel/plugin-proposal-private-methods": {
504
+ "version": "7.12.1",
505
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
506
+ "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
507
+ "dev": true,
508
+ "requires": {
509
+ "@babel/helper-create-class-features-plugin": "^7.12.1",
510
+ "@babel/helper-plugin-utils": "^7.10.4"
511
+ }
512
+ },
513
+ "@babel/plugin-proposal-unicode-property-regex": {
514
+ "version": "7.12.1",
515
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz",
516
+ "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==",
517
+ "dev": true,
518
+ "requires": {
519
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1",
520
+ "@babel/helper-plugin-utils": "^7.10.4"
521
+ }
522
+ },
523
+ "@babel/plugin-syntax-async-generators": {
524
+ "version": "7.8.4",
525
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
526
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
527
+ "dev": true,
528
+ "requires": {
529
+ "@babel/helper-plugin-utils": "^7.8.0"
530
+ }
531
+ },
532
+ "@babel/plugin-syntax-class-properties": {
533
+ "version": "7.12.1",
534
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz",
535
+ "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==",
536
+ "dev": true,
537
+ "requires": {
538
+ "@babel/helper-plugin-utils": "^7.10.4"
539
+ }
540
+ },
541
+ "@babel/plugin-syntax-dynamic-import": {
542
+ "version": "7.8.3",
543
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
544
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
545
+ "dev": true,
546
+ "requires": {
547
+ "@babel/helper-plugin-utils": "^7.8.0"
548
+ }
549
+ },
550
+ "@babel/plugin-syntax-export-namespace-from": {
551
+ "version": "7.8.3",
552
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
553
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
554
+ "dev": true,
555
+ "requires": {
556
+ "@babel/helper-plugin-utils": "^7.8.3"
557
+ }
558
+ },
559
+ "@babel/plugin-syntax-flow": {
560
+ "version": "7.12.1",
561
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz",
562
+ "integrity": "sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==",
563
+ "dev": true,
564
+ "requires": {
565
+ "@babel/helper-plugin-utils": "^7.10.4"
566
+ }
567
+ },
568
+ "@babel/plugin-syntax-json-strings": {
569
+ "version": "7.8.3",
570
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
571
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
572
+ "dev": true,
573
+ "requires": {
574
+ "@babel/helper-plugin-utils": "^7.8.0"
575
+ }
576
+ },
577
+ "@babel/plugin-syntax-jsx": {
578
+ "version": "7.12.1",
579
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
580
+ "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
581
+ "dev": true,
582
+ "requires": {
583
+ "@babel/helper-plugin-utils": "^7.10.4"
584
+ }
585
+ },
586
+ "@babel/plugin-syntax-logical-assignment-operators": {
587
+ "version": "7.10.4",
588
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
589
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
590
+ "dev": true,
591
+ "requires": {
592
+ "@babel/helper-plugin-utils": "^7.10.4"
593
+ }
594
+ },
595
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
596
+ "version": "7.8.3",
597
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
598
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
599
+ "dev": true,
600
+ "requires": {
601
+ "@babel/helper-plugin-utils": "^7.8.0"
602
+ }
603
+ },
604
+ "@babel/plugin-syntax-numeric-separator": {
605
+ "version": "7.10.4",
606
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
607
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
608
+ "dev": true,
609
+ "requires": {
610
+ "@babel/helper-plugin-utils": "^7.10.4"
611
+ }
612
+ },
613
+ "@babel/plugin-syntax-object-rest-spread": {
614
+ "version": "7.8.3",
615
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
616
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
617
+ "dev": true,
618
+ "requires": {
619
+ "@babel/helper-plugin-utils": "^7.8.0"
620
+ }
621
+ },
622
+ "@babel/plugin-syntax-optional-catch-binding": {
623
+ "version": "7.8.3",
624
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
625
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
626
+ "dev": true,
627
+ "requires": {
628
+ "@babel/helper-plugin-utils": "^7.8.0"
629
+ }
630
+ },
631
+ "@babel/plugin-syntax-optional-chaining": {
632
+ "version": "7.8.3",
633
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
634
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
635
+ "dev": true,
636
+ "requires": {
637
+ "@babel/helper-plugin-utils": "^7.8.0"
638
+ }
639
+ },
640
+ "@babel/plugin-syntax-top-level-await": {
641
+ "version": "7.12.1",
642
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz",
643
+ "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==",
644
+ "dev": true,
645
+ "requires": {
646
+ "@babel/helper-plugin-utils": "^7.10.4"
647
+ }
648
+ },
649
+ "@babel/plugin-transform-arrow-functions": {
650
+ "version": "7.12.1",
651
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz",
652
+ "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==",
653
+ "dev": true,
654
+ "requires": {
655
+ "@babel/helper-plugin-utils": "^7.10.4"
656
+ }
657
+ },
658
+ "@babel/plugin-transform-async-to-generator": {
659
+ "version": "7.12.1",
660
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz",
661
+ "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==",
662
+ "dev": true,
663
+ "requires": {
664
+ "@babel/helper-module-imports": "^7.12.1",
665
+ "@babel/helper-plugin-utils": "^7.10.4",
666
+ "@babel/helper-remap-async-to-generator": "^7.12.1"
667
+ }
668
+ },
669
+ "@babel/plugin-transform-block-scoped-functions": {
670
+ "version": "7.12.1",
671
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz",
672
+ "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==",
673
+ "dev": true,
674
+ "requires": {
675
+ "@babel/helper-plugin-utils": "^7.10.4"
676
+ }
677
+ },
678
+ "@babel/plugin-transform-block-scoping": {
679
+ "version": "7.12.1",
680
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz",
681
+ "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==",
682
+ "dev": true,
683
+ "requires": {
684
+ "@babel/helper-plugin-utils": "^7.10.4"
685
+ }
686
+ },
687
+ "@babel/plugin-transform-classes": {
688
+ "version": "7.12.1",
689
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz",
690
+ "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==",
691
+ "dev": true,
692
+ "requires": {
693
+ "@babel/helper-annotate-as-pure": "^7.10.4",
694
+ "@babel/helper-define-map": "^7.10.4",
695
+ "@babel/helper-function-name": "^7.10.4",
696
+ "@babel/helper-optimise-call-expression": "^7.10.4",
697
+ "@babel/helper-plugin-utils": "^7.10.4",
698
+ "@babel/helper-replace-supers": "^7.12.1",
699
+ "@babel/helper-split-export-declaration": "^7.10.4",
700
+ "globals": "^11.1.0"
701
+ }
702
+ },
703
+ "@babel/plugin-transform-computed-properties": {
704
+ "version": "7.12.1",
705
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz",
706
+ "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==",
707
+ "dev": true,
708
+ "requires": {
709
+ "@babel/helper-plugin-utils": "^7.10.4"
710
+ }
711
+ },
712
+ "@babel/plugin-transform-destructuring": {
713
+ "version": "7.12.1",
714
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz",
715
+ "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==",
716
+ "dev": true,
717
+ "requires": {
718
+ "@babel/helper-plugin-utils": "^7.10.4"
719
+ }
720
+ },
721
+ "@babel/plugin-transform-dotall-regex": {
722
+ "version": "7.12.1",
723
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz",
724
+ "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==",
725
+ "dev": true,
726
+ "requires": {
727
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1",
728
+ "@babel/helper-plugin-utils": "^7.10.4"
729
+ }
730
+ },
731
+ "@babel/plugin-transform-duplicate-keys": {
732
+ "version": "7.12.1",
733
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz",
734
+ "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==",
735
+ "dev": true,
736
+ "requires": {
737
+ "@babel/helper-plugin-utils": "^7.10.4"
738
+ }
739
+ },
740
+ "@babel/plugin-transform-exponentiation-operator": {
741
+ "version": "7.12.1",
742
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz",
743
+ "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==",
744
+ "dev": true,
745
+ "requires": {
746
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
747
+ "@babel/helper-plugin-utils": "^7.10.4"
748
+ }
749
+ },
750
+ "@babel/plugin-transform-flow-strip-types": {
751
+ "version": "7.12.1",
752
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz",
753
+ "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==",
754
+ "dev": true,
755
+ "requires": {
756
+ "@babel/helper-plugin-utils": "^7.10.4",
757
+ "@babel/plugin-syntax-flow": "^7.12.1"
758
+ }
759
+ },
760
+ "@babel/plugin-transform-for-of": {
761
+ "version": "7.12.1",
762
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz",
763
+ "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==",
764
+ "dev": true,
765
+ "requires": {
766
+ "@babel/helper-plugin-utils": "^7.10.4"
767
+ }
768
+ },
769
+ "@babel/plugin-transform-function-name": {
770
+ "version": "7.12.1",
771
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz",
772
+ "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==",
773
+ "dev": true,
774
+ "requires": {
775
+ "@babel/helper-function-name": "^7.10.4",
776
+ "@babel/helper-plugin-utils": "^7.10.4"
777
+ }
778
+ },
779
+ "@babel/plugin-transform-literals": {
780
+ "version": "7.12.1",
781
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz",
782
+ "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==",
783
+ "dev": true,
784
+ "requires": {
785
+ "@babel/helper-plugin-utils": "^7.10.4"
786
+ }
787
+ },
788
+ "@babel/plugin-transform-member-expression-literals": {
789
+ "version": "7.12.1",
790
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz",
791
+ "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==",
792
+ "dev": true,
793
+ "requires": {
794
+ "@babel/helper-plugin-utils": "^7.10.4"
795
+ }
796
+ },
797
+ "@babel/plugin-transform-modules-amd": {
798
+ "version": "7.12.1",
799
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz",
800
+ "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==",
801
+ "dev": true,
802
+ "requires": {
803
+ "@babel/helper-module-transforms": "^7.12.1",
804
+ "@babel/helper-plugin-utils": "^7.10.4",
805
+ "babel-plugin-dynamic-import-node": "^2.3.3"
806
+ }
807
+ },
808
+ "@babel/plugin-transform-modules-commonjs": {
809
+ "version": "7.12.1",
810
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz",
811
+ "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==",
812
+ "dev": true,
813
+ "requires": {
814
+ "@babel/helper-module-transforms": "^7.12.1",
815
+ "@babel/helper-plugin-utils": "^7.10.4",
816
+ "@babel/helper-simple-access": "^7.12.1",
817
+ "babel-plugin-dynamic-import-node": "^2.3.3"
818
+ }
819
+ },
820
+ "@babel/plugin-transform-modules-systemjs": {
821
+ "version": "7.12.1",
822
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz",
823
+ "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==",
824
+ "dev": true,
825
+ "requires": {
826
+ "@babel/helper-hoist-variables": "^7.10.4",
827
+ "@babel/helper-module-transforms": "^7.12.1",
828
+ "@babel/helper-plugin-utils": "^7.10.4",
829
+ "@babel/helper-validator-identifier": "^7.10.4",
830
+ "babel-plugin-dynamic-import-node": "^2.3.3"
831
+ }
832
+ },
833
+ "@babel/plugin-transform-modules-umd": {
834
+ "version": "7.12.1",
835
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz",
836
+ "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==",
837
+ "dev": true,
838
+ "requires": {
839
+ "@babel/helper-module-transforms": "^7.12.1",
840
+ "@babel/helper-plugin-utils": "^7.10.4"
841
+ }
842
+ },
843
+ "@babel/plugin-transform-named-capturing-groups-regex": {
844
+ "version": "7.12.1",
845
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz",
846
+ "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==",
847
+ "dev": true,
848
+ "requires": {
849
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1"
850
+ }
851
+ },
852
+ "@babel/plugin-transform-new-target": {
853
+ "version": "7.12.1",
854
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz",
855
+ "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==",
856
+ "dev": true,
857
+ "requires": {
858
+ "@babel/helper-plugin-utils": "^7.10.4"
859
+ }
860
+ },
861
+ "@babel/plugin-transform-object-super": {
862
+ "version": "7.12.1",
863
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz",
864
+ "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==",
865
+ "dev": true,
866
+ "requires": {
867
+ "@babel/helper-plugin-utils": "^7.10.4",
868
+ "@babel/helper-replace-supers": "^7.12.1"
869
+ }
870
+ },
871
+ "@babel/plugin-transform-parameters": {
872
+ "version": "7.12.1",
873
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz",
874
+ "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==",
875
+ "dev": true,
876
+ "requires": {
877
+ "@babel/helper-plugin-utils": "^7.10.4"
878
+ }
879
+ },
880
+ "@babel/plugin-transform-property-literals": {
881
+ "version": "7.12.1",
882
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz",
883
+ "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==",
884
+ "dev": true,
885
+ "requires": {
886
+ "@babel/helper-plugin-utils": "^7.10.4"
887
+ }
888
+ },
889
+ "@babel/plugin-transform-react-jsx": {
890
+ "version": "7.12.1",
891
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz",
892
+ "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==",
893
+ "dev": true,
894
+ "requires": {
895
+ "@babel/helper-builder-react-jsx": "^7.10.4",
896
+ "@babel/helper-builder-react-jsx-experimental": "^7.12.1",
897
+ "@babel/helper-plugin-utils": "^7.10.4",
898
+ "@babel/plugin-syntax-jsx": "^7.12.1"
899
+ }
900
+ },
901
+ "@babel/plugin-transform-regenerator": {
902
+ "version": "7.12.1",
903
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz",
904
+ "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==",
905
+ "dev": true,
906
+ "requires": {
907
+ "regenerator-transform": "^0.14.2"
908
+ }
909
+ },
910
+ "@babel/plugin-transform-reserved-words": {
911
+ "version": "7.12.1",
912
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz",
913
+ "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==",
914
+ "dev": true,
915
+ "requires": {
916
+ "@babel/helper-plugin-utils": "^7.10.4"
917
+ }
918
+ },
919
+ "@babel/plugin-transform-shorthand-properties": {
920
+ "version": "7.12.1",
921
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz",
922
+ "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==",
923
+ "dev": true,
924
+ "requires": {
925
+ "@babel/helper-plugin-utils": "^7.10.4"
926
+ }
927
+ },
928
+ "@babel/plugin-transform-spread": {
929
+ "version": "7.12.1",
930
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz",
931
+ "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==",
932
+ "dev": true,
933
+ "requires": {
934
+ "@babel/helper-plugin-utils": "^7.10.4",
935
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
936
+ }
937
+ },
938
+ "@babel/plugin-transform-sticky-regex": {
939
+ "version": "7.12.1",
940
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz",
941
+ "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==",
942
+ "dev": true,
943
+ "requires": {
944
+ "@babel/helper-plugin-utils": "^7.10.4",
945
+ "@babel/helper-regex": "^7.10.4"
946
+ }
947
+ },
948
+ "@babel/plugin-transform-template-literals": {
949
+ "version": "7.12.1",
950
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz",
951
+ "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==",
952
+ "dev": true,
953
+ "requires": {
954
+ "@babel/helper-plugin-utils": "^7.10.4"
955
+ }
956
+ },
957
+ "@babel/plugin-transform-typeof-symbol": {
958
+ "version": "7.12.1",
959
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz",
960
+ "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==",
961
+ "dev": true,
962
+ "requires": {
963
+ "@babel/helper-plugin-utils": "^7.10.4"
964
+ }
965
+ },
966
+ "@babel/plugin-transform-unicode-escapes": {
967
+ "version": "7.12.1",
968
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz",
969
+ "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==",
970
+ "dev": true,
971
+ "requires": {
972
+ "@babel/helper-plugin-utils": "^7.10.4"
973
+ }
974
+ },
975
+ "@babel/plugin-transform-unicode-regex": {
976
+ "version": "7.12.1",
977
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz",
978
+ "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==",
979
+ "dev": true,
980
+ "requires": {
981
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1",
982
+ "@babel/helper-plugin-utils": "^7.10.4"
983
+ }
984
+ },
985
+ "@babel/preset-env": {
986
+ "version": "7.12.1",
987
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz",
988
+ "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==",
989
+ "dev": true,
990
+ "requires": {
991
+ "@babel/compat-data": "^7.12.1",
992
+ "@babel/helper-compilation-targets": "^7.12.1",
993
+ "@babel/helper-module-imports": "^7.12.1",
994
+ "@babel/helper-plugin-utils": "^7.10.4",
995
+ "@babel/helper-validator-option": "^7.12.1",
996
+ "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
997
+ "@babel/plugin-proposal-class-properties": "^7.12.1",
998
+ "@babel/plugin-proposal-dynamic-import": "^7.12.1",
999
+ "@babel/plugin-proposal-export-namespace-from": "^7.12.1",
1000
+ "@babel/plugin-proposal-json-strings": "^7.12.1",
1001
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
1002
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
1003
+ "@babel/plugin-proposal-numeric-separator": "^7.12.1",
1004
+ "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
1005
+ "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
1006
+ "@babel/plugin-proposal-optional-chaining": "^7.12.1",
1007
+ "@babel/plugin-proposal-private-methods": "^7.12.1",
1008
+ "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
1009
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
1010
+ "@babel/plugin-syntax-class-properties": "^7.12.1",
1011
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
1012
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
1013
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
1014
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
1015
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
1016
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
1017
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
1018
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
1019
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
1020
+ "@babel/plugin-syntax-top-level-await": "^7.12.1",
1021
+ "@babel/plugin-transform-arrow-functions": "^7.12.1",
1022
+ "@babel/plugin-transform-async-to-generator": "^7.12.1",
1023
+ "@babel/plugin-transform-block-scoped-functions": "^7.12.1",
1024
+ "@babel/plugin-transform-block-scoping": "^7.12.1",
1025
+ "@babel/plugin-transform-classes": "^7.12.1",
1026
+ "@babel/plugin-transform-computed-properties": "^7.12.1",
1027
+ "@babel/plugin-transform-destructuring": "^7.12.1",
1028
+ "@babel/plugin-transform-dotall-regex": "^7.12.1",
1029
+ "@babel/plugin-transform-duplicate-keys": "^7.12.1",
1030
+ "@babel/plugin-transform-exponentiation-operator": "^7.12.1",
1031
+ "@babel/plugin-transform-for-of": "^7.12.1",
1032
+ "@babel/plugin-transform-function-name": "^7.12.1",
1033
+ "@babel/plugin-transform-literals": "^7.12.1",
1034
+ "@babel/plugin-transform-member-expression-literals": "^7.12.1",
1035
+ "@babel/plugin-transform-modules-amd": "^7.12.1",
1036
+ "@babel/plugin-transform-modules-commonjs": "^7.12.1",
1037
+ "@babel/plugin-transform-modules-systemjs": "^7.12.1",
1038
+ "@babel/plugin-transform-modules-umd": "^7.12.1",
1039
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1",
1040
+ "@babel/plugin-transform-new-target": "^7.12.1",
1041
+ "@babel/plugin-transform-object-super": "^7.12.1",
1042
+ "@babel/plugin-transform-parameters": "^7.12.1",
1043
+ "@babel/plugin-transform-property-literals": "^7.12.1",
1044
+ "@babel/plugin-transform-regenerator": "^7.12.1",
1045
+ "@babel/plugin-transform-reserved-words": "^7.12.1",
1046
+ "@babel/plugin-transform-shorthand-properties": "^7.12.1",
1047
+ "@babel/plugin-transform-spread": "^7.12.1",
1048
+ "@babel/plugin-transform-sticky-regex": "^7.12.1",
1049
+ "@babel/plugin-transform-template-literals": "^7.12.1",
1050
+ "@babel/plugin-transform-typeof-symbol": "^7.12.1",
1051
+ "@babel/plugin-transform-unicode-escapes": "^7.12.1",
1052
+ "@babel/plugin-transform-unicode-regex": "^7.12.1",
1053
+ "@babel/preset-modules": "^0.1.3",
1054
+ "@babel/types": "^7.12.1",
1055
+ "core-js-compat": "^3.6.2",
1056
+ "semver": "^5.5.0"
1057
+ }
1058
+ },
1059
+ "@babel/preset-modules": {
1060
+ "version": "0.1.4",
1061
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
1062
+ "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
1063
+ "dev": true,
1064
+ "requires": {
1065
+ "@babel/helper-plugin-utils": "^7.0.0",
1066
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
1067
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
1068
+ "@babel/types": "^7.4.4",
1069
+ "esutils": "^2.0.2"
1070
+ }
1071
+ },
1072
+ "@babel/runtime": {
1073
+ "version": "7.12.1",
1074
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
1075
+ "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
1076
+ "dev": true,
1077
+ "requires": {
1078
+ "regenerator-runtime": "^0.13.4"
1079
+ }
1080
+ },
1081
+ "@babel/template": {
1082
+ "version": "7.10.4",
1083
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
1084
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
1085
+ "dev": true,
1086
+ "requires": {
1087
+ "@babel/code-frame": "^7.10.4",
1088
+ "@babel/parser": "^7.10.4",
1089
+ "@babel/types": "^7.10.4"
1090
+ }
1091
+ },
1092
+ "@babel/traverse": {
1093
+ "version": "7.12.1",
1094
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz",
1095
+ "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==",
1096
+ "dev": true,
1097
+ "requires": {
1098
+ "@babel/code-frame": "^7.10.4",
1099
+ "@babel/generator": "^7.12.1",
1100
+ "@babel/helper-function-name": "^7.10.4",
1101
+ "@babel/helper-split-export-declaration": "^7.11.0",
1102
+ "@babel/parser": "^7.12.1",
1103
+ "@babel/types": "^7.12.1",
1104
+ "debug": "^4.1.0",
1105
+ "globals": "^11.1.0",
1106
+ "lodash": "^4.17.19"
1107
+ }
1108
+ },
1109
+ "@babel/types": {
1110
+ "version": "7.12.1",
1111
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
1112
+ "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
1113
+ "dev": true,
1114
+ "requires": {
1115
+ "@babel/helper-validator-identifier": "^7.10.4",
1116
+ "lodash": "^4.17.19",
1117
+ "to-fast-properties": "^2.0.0"
1118
+ }
1119
+ },
1120
+ "@iarna/toml": {
1121
+ "version": "2.2.5",
1122
+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
1123
+ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
1124
+ "dev": true
1125
+ },
1126
+ "@mrmlnc/readdir-enhanced": {
1127
+ "version": "2.2.1",
1128
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
1129
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
1130
+ "dev": true,
1131
+ "requires": {
1132
+ "call-me-maybe": "^1.0.1",
1133
+ "glob-to-regexp": "^0.3.0"
1134
+ }
1135
+ },
1136
+ "@nodelib/fs.stat": {
1137
+ "version": "1.1.3",
1138
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
1139
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
1140
+ "dev": true
1141
+ },
1142
+ "@parcel/fs": {
1143
+ "version": "1.11.0",
1144
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz",
1145
+ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==",
1146
+ "dev": true,
1147
+ "requires": {
1148
+ "@parcel/utils": "^1.11.0",
1149
+ "mkdirp": "^0.5.1",
1150
+ "rimraf": "^2.6.2"
1151
+ },
1152
+ "dependencies": {
1153
+ "rimraf": {
1154
+ "version": "2.7.1",
1155
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
1156
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
1157
+ "dev": true,
1158
+ "requires": {
1159
+ "glob": "^7.1.3"
1160
+ }
1161
+ }
1162
+ }
1163
+ },
1164
+ "@parcel/logger": {
1165
+ "version": "1.11.1",
1166
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz",
1167
+ "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==",
1168
+ "dev": true,
1169
+ "requires": {
1170
+ "@parcel/workers": "^1.11.0",
1171
+ "chalk": "^2.1.0",
1172
+ "grapheme-breaker": "^0.3.2",
1173
+ "ora": "^2.1.0",
1174
+ "strip-ansi": "^4.0.0"
1175
+ },
1176
+ "dependencies": {
1177
+ "ansi-regex": {
1178
+ "version": "3.0.0",
1179
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
1180
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
1181
+ "dev": true
1182
+ },
1183
+ "ansi-styles": {
1184
+ "version": "3.2.1",
1185
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1186
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1187
+ "dev": true,
1188
+ "requires": {
1189
+ "color-convert": "^1.9.0"
1190
+ }
1191
+ },
1192
+ "chalk": {
1193
+ "version": "2.4.2",
1194
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1195
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1196
+ "dev": true,
1197
+ "requires": {
1198
+ "ansi-styles": "^3.2.1",
1199
+ "escape-string-regexp": "^1.0.5",
1200
+ "supports-color": "^5.3.0"
1201
+ }
1202
+ },
1203
+ "strip-ansi": {
1204
+ "version": "4.0.0",
1205
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1206
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1207
+ "dev": true,
1208
+ "requires": {
1209
+ "ansi-regex": "^3.0.0"
1210
+ }
1211
+ },
1212
+ "supports-color": {
1213
+ "version": "5.5.0",
1214
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1215
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1216
+ "dev": true,
1217
+ "requires": {
1218
+ "has-flag": "^3.0.0"
1219
+ }
1220
+ }
1221
+ }
1222
+ },
1223
+ "@parcel/utils": {
1224
+ "version": "1.11.0",
1225
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz",
1226
+ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==",
1227
+ "dev": true
1228
+ },
1229
+ "@parcel/watcher": {
1230
+ "version": "1.12.1",
1231
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz",
1232
+ "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==",
1233
+ "dev": true,
1234
+ "requires": {
1235
+ "@parcel/utils": "^1.11.0",
1236
+ "chokidar": "^2.1.5"
1237
+ }
1238
+ },
1239
+ "@parcel/workers": {
1240
+ "version": "1.11.0",
1241
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz",
1242
+ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==",
1243
+ "dev": true,
1244
+ "requires": {
1245
+ "@parcel/utils": "^1.11.0",
1246
+ "physical-cpu-count": "^2.0.0"
1247
+ }
1248
+ },
1249
+ "@types/q": {
1250
+ "version": "1.5.4",
1251
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
1252
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
1253
+ "dev": true
1254
+ },
1255
+ "abab": {
1256
+ "version": "2.0.5",
1257
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
1258
+ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
1259
+ "dev": true
1260
+ },
1261
+ "acorn": {
1262
+ "version": "7.4.1",
1263
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
1264
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
1265
+ "dev": true
1266
+ },
1267
+ "acorn-globals": {
1268
+ "version": "4.3.4",
1269
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
1270
+ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
1271
+ "dev": true,
1272
+ "requires": {
1273
+ "acorn": "^6.0.1",
1274
+ "acorn-walk": "^6.0.1"
1275
+ },
1276
+ "dependencies": {
1277
+ "acorn": {
1278
+ "version": "6.4.2",
1279
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
1280
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
1281
+ "dev": true
1282
+ }
1283
+ }
1284
+ },
1285
+ "acorn-walk": {
1286
+ "version": "6.2.0",
1287
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
1288
+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
1289
+ "dev": true
1290
+ },
1291
+ "ajv": {
1292
+ "version": "6.12.6",
1293
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1294
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1295
+ "dev": true,
1296
+ "requires": {
1297
+ "fast-deep-equal": "^3.1.1",
1298
+ "fast-json-stable-stringify": "^2.0.0",
1299
+ "json-schema-traverse": "^0.4.1",
1300
+ "uri-js": "^4.2.2"
1301
+ }
1302
+ },
1303
+ "alphanum-sort": {
1304
+ "version": "1.0.2",
1305
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
1306
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
1307
+ "dev": true
1308
+ },
1309
+ "ansi-regex": {
1310
+ "version": "0.2.1",
1311
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
1312
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
1313
+ "dev": true
1314
+ },
1315
+ "ansi-styles": {
1316
+ "version": "1.1.0",
1317
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
1318
+ "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
1319
+ "dev": true
1320
+ },
1321
+ "ansi-to-html": {
1322
+ "version": "0.6.14",
1323
+ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz",
1324
+ "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==",
1325
+ "dev": true,
1326
+ "requires": {
1327
+ "entities": "^1.1.2"
1328
+ }
1329
+ },
1330
+ "anymatch": {
1331
+ "version": "2.0.0",
1332
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
1333
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
1334
+ "dev": true,
1335
+ "requires": {
1336
+ "micromatch": "^3.1.4",
1337
+ "normalize-path": "^2.1.1"
1338
+ },
1339
+ "dependencies": {
1340
+ "normalize-path": {
1341
+ "version": "2.1.1",
1342
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1343
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1344
+ "dev": true,
1345
+ "requires": {
1346
+ "remove-trailing-separator": "^1.0.1"
1347
+ }
1348
+ }
1349
+ }
1350
+ },
1351
+ "argparse": {
1352
+ "version": "1.0.10",
1353
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
1354
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
1355
+ "dev": true,
1356
+ "requires": {
1357
+ "sprintf-js": "~1.0.2"
1358
+ },
1359
+ "dependencies": {
1360
+ "sprintf-js": {
1361
+ "version": "1.0.3",
1362
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1363
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1364
+ "dev": true
1365
+ }
1366
+ }
1367
+ },
1368
+ "arr-diff": {
1369
+ "version": "4.0.0",
1370
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
1371
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
1372
+ "dev": true
1373
+ },
1374
+ "arr-flatten": {
1375
+ "version": "1.1.0",
1376
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
1377
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
1378
+ "dev": true
1379
+ },
1380
+ "arr-union": {
1381
+ "version": "3.1.0",
1382
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
1383
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
1384
+ "dev": true
1385
+ },
1386
+ "array-equal": {
1387
+ "version": "1.0.0",
1388
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
1389
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
1390
+ "dev": true
1391
+ },
1392
+ "array-unique": {
1393
+ "version": "0.3.2",
1394
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
1395
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
1396
+ "dev": true
1397
+ },
1398
+ "asn1": {
1399
+ "version": "0.2.4",
1400
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
1401
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
1402
+ "dev": true,
1403
+ "requires": {
1404
+ "safer-buffer": "~2.1.0"
1405
+ }
1406
+ },
1407
+ "asn1.js": {
1408
+ "version": "5.4.1",
1409
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
1410
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
1411
+ "dev": true,
1412
+ "requires": {
1413
+ "bn.js": "^4.0.0",
1414
+ "inherits": "^2.0.1",
1415
+ "minimalistic-assert": "^1.0.0",
1416
+ "safer-buffer": "^2.1.0"
1417
+ },
1418
+ "dependencies": {
1419
+ "bn.js": {
1420
+ "version": "4.11.9",
1421
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
1422
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
1423
+ "dev": true
1424
+ }
1425
+ }
1426
+ },
1427
+ "assert": {
1428
+ "version": "1.5.0",
1429
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
1430
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
1431
+ "dev": true,
1432
+ "requires": {
1433
+ "object-assign": "^4.1.1",
1434
+ "util": "0.10.3"
1435
+ },
1436
+ "dependencies": {
1437
+ "inherits": {
1438
+ "version": "2.0.1",
1439
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
1440
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
1441
+ "dev": true
1442
+ },
1443
+ "util": {
1444
+ "version": "0.10.3",
1445
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
1446
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
1447
+ "dev": true,
1448
+ "requires": {
1449
+ "inherits": "2.0.1"
1450
+ }
1451
+ }
1452
+ }
1453
+ },
1454
+ "assert-plus": {
1455
+ "version": "1.0.0",
1456
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
1457
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
1458
+ "dev": true
1459
+ },
1460
+ "assign-symbols": {
1461
+ "version": "1.0.0",
1462
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
1463
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
1464
+ "dev": true
1465
+ },
1466
+ "async": {
1467
+ "version": "0.9.2",
1468
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
1469
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
1470
+ "dev": true
1471
+ },
1472
+ "async-each": {
1473
+ "version": "1.0.3",
1474
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
1475
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
1476
+ "dev": true
1477
+ },
1478
+ "async-limiter": {
1479
+ "version": "1.0.1",
1480
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
1481
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
1482
+ "dev": true
1483
+ },
1484
+ "asynckit": {
1485
+ "version": "0.4.0",
1486
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1487
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
1488
+ "dev": true
1489
+ },
1490
+ "atob": {
1491
+ "version": "2.1.2",
1492
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
1493
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
1494
+ "dev": true
1495
+ },
1496
+ "aws-sign2": {
1497
+ "version": "0.7.0",
1498
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
1499
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
1500
+ "dev": true
1501
+ },
1502
+ "aws4": {
1503
+ "version": "1.10.1",
1504
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
1505
+ "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
1506
+ "dev": true
1507
+ },
1508
+ "babel-plugin-dynamic-import-node": {
1509
+ "version": "2.3.3",
1510
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
1511
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
1512
+ "dev": true,
1513
+ "requires": {
1514
+ "object.assign": "^4.1.0"
1515
+ }
1516
+ },
1517
+ "babel-runtime": {
1518
+ "version": "6.26.0",
1519
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
1520
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
1521
+ "dev": true,
1522
+ "requires": {
1523
+ "core-js": "^2.4.0",
1524
+ "regenerator-runtime": "^0.11.0"
1525
+ },
1526
+ "dependencies": {
1527
+ "regenerator-runtime": {
1528
+ "version": "0.11.1",
1529
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
1530
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
1531
+ "dev": true
1532
+ }
1533
+ }
1534
+ },
1535
+ "babel-types": {
1536
+ "version": "6.26.0",
1537
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
1538
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
1539
+ "dev": true,
1540
+ "requires": {
1541
+ "babel-runtime": "^6.26.0",
1542
+ "esutils": "^2.0.2",
1543
+ "lodash": "^4.17.4",
1544
+ "to-fast-properties": "^1.0.3"
1545
+ },
1546
+ "dependencies": {
1547
+ "to-fast-properties": {
1548
+ "version": "1.0.3",
1549
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
1550
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
1551
+ "dev": true
1552
+ }
1553
+ }
1554
+ },
1555
+ "babylon-walk": {
1556
+ "version": "1.0.2",
1557
+ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
1558
+ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=",
1559
+ "dev": true,
1560
+ "requires": {
1561
+ "babel-runtime": "^6.11.6",
1562
+ "babel-types": "^6.15.0",
1563
+ "lodash.clone": "^4.5.0"
1564
+ }
1565
+ },
1566
+ "balanced-match": {
1567
+ "version": "1.0.0",
1568
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
1569
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
1570
+ "dev": true
1571
+ },
1572
+ "base": {
1573
+ "version": "0.11.2",
1574
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
1575
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
1576
+ "dev": true,
1577
+ "requires": {
1578
+ "cache-base": "^1.0.1",
1579
+ "class-utils": "^0.3.5",
1580
+ "component-emitter": "^1.2.1",
1581
+ "define-property": "^1.0.0",
1582
+ "isobject": "^3.0.1",
1583
+ "mixin-deep": "^1.2.0",
1584
+ "pascalcase": "^0.1.1"
1585
+ },
1586
+ "dependencies": {
1587
+ "define-property": {
1588
+ "version": "1.0.0",
1589
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
1590
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
1591
+ "dev": true,
1592
+ "requires": {
1593
+ "is-descriptor": "^1.0.0"
1594
+ }
1595
+ },
1596
+ "is-accessor-descriptor": {
1597
+ "version": "1.0.0",
1598
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
1599
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
1600
+ "dev": true,
1601
+ "requires": {
1602
+ "kind-of": "^6.0.0"
1603
+ }
1604
+ },
1605
+ "is-data-descriptor": {
1606
+ "version": "1.0.0",
1607
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
1608
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
1609
+ "dev": true,
1610
+ "requires": {
1611
+ "kind-of": "^6.0.0"
1612
+ }
1613
+ },
1614
+ "is-descriptor": {
1615
+ "version": "1.0.2",
1616
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
1617
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
1618
+ "dev": true,
1619
+ "requires": {
1620
+ "is-accessor-descriptor": "^1.0.0",
1621
+ "is-data-descriptor": "^1.0.0",
1622
+ "kind-of": "^6.0.2"
1623
+ }
1624
+ },
1625
+ "kind-of": {
1626
+ "version": "6.0.3",
1627
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
1628
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
1629
+ "dev": true
1630
+ }
1631
+ }
1632
+ },
1633
+ "base64-js": {
1634
+ "version": "1.3.1",
1635
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
1636
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
1637
+ "dev": true
1638
+ },
1639
+ "bcrypt-pbkdf": {
1640
+ "version": "1.0.2",
1641
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
1642
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
1643
+ "dev": true,
1644
+ "requires": {
1645
+ "tweetnacl": "^0.14.3"
1646
+ }
1647
+ },
1648
+ "binary-extensions": {
1649
+ "version": "1.13.1",
1650
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
1651
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
1652
+ "dev": true
1653
+ },
1654
+ "bindings": {
1655
+ "version": "1.5.0",
1656
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
1657
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
1658
+ "dev": true,
1659
+ "requires": {
1660
+ "file-uri-to-path": "1.0.0"
1661
+ }
1662
+ },
1663
+ "bn.js": {
1664
+ "version": "5.1.3",
1665
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
1666
+ "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==",
1667
+ "dev": true
1668
+ },
1669
+ "boolbase": {
1670
+ "version": "1.0.0",
1671
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
1672
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
1673
+ "dev": true
1674
+ },
1675
+ "brace-expansion": {
1676
+ "version": "1.1.11",
1677
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1678
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1679
+ "dev": true,
1680
+ "requires": {
1681
+ "balanced-match": "^1.0.0",
1682
+ "concat-map": "0.0.1"
1683
+ }
1684
+ },
1685
+ "braces": {
1686
+ "version": "2.3.2",
1687
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
1688
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
1689
+ "dev": true,
1690
+ "requires": {
1691
+ "arr-flatten": "^1.1.0",
1692
+ "array-unique": "^0.3.2",
1693
+ "extend-shallow": "^2.0.1",
1694
+ "fill-range": "^4.0.0",
1695
+ "isobject": "^3.0.1",
1696
+ "repeat-element": "^1.1.2",
1697
+ "snapdragon": "^0.8.1",
1698
+ "snapdragon-node": "^2.0.1",
1699
+ "split-string": "^3.0.2",
1700
+ "to-regex": "^3.0.1"
1701
+ },
1702
+ "dependencies": {
1703
+ "extend-shallow": {
1704
+ "version": "2.0.1",
1705
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1706
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1707
+ "dev": true,
1708
+ "requires": {
1709
+ "is-extendable": "^0.1.0"
1710
+ }
1711
+ }
1712
+ }
1713
+ },
1714
+ "brfs": {
1715
+ "version": "1.6.1",
1716
+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
1717
+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
1718
+ "dev": true,
1719
+ "requires": {
1720
+ "quote-stream": "^1.0.1",
1721
+ "resolve": "^1.1.5",
1722
+ "static-module": "^2.2.0",
1723
+ "through2": "^2.0.0"
1724
+ }
1725
+ },
1726
+ "brorand": {
1727
+ "version": "1.1.0",
1728
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
1729
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
1730
+ "dev": true
1731
+ },
1732
+ "browser-process-hrtime": {
1733
+ "version": "1.0.0",
1734
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
1735
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
1736
+ "dev": true
1737
+ },
1738
+ "browserify-aes": {
1739
+ "version": "1.2.0",
1740
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
1741
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
1742
+ "dev": true,
1743
+ "requires": {
1744
+ "buffer-xor": "^1.0.3",
1745
+ "cipher-base": "^1.0.0",
1746
+ "create-hash": "^1.1.0",
1747
+ "evp_bytestokey": "^1.0.3",
1748
+ "inherits": "^2.0.1",
1749
+ "safe-buffer": "^5.0.1"
1750
+ }
1751
+ },
1752
+ "browserify-cipher": {
1753
+ "version": "1.0.1",
1754
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
1755
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
1756
+ "dev": true,
1757
+ "requires": {
1758
+ "browserify-aes": "^1.0.4",
1759
+ "browserify-des": "^1.0.0",
1760
+ "evp_bytestokey": "^1.0.0"
1761
+ }
1762
+ },
1763
+ "browserify-des": {
1764
+ "version": "1.0.2",
1765
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
1766
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
1767
+ "dev": true,
1768
+ "requires": {
1769
+ "cipher-base": "^1.0.1",
1770
+ "des.js": "^1.0.0",
1771
+ "inherits": "^2.0.1",
1772
+ "safe-buffer": "^5.1.2"
1773
+ }
1774
+ },
1775
+ "browserify-rsa": {
1776
+ "version": "4.0.1",
1777
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
1778
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
1779
+ "dev": true,
1780
+ "requires": {
1781
+ "bn.js": "^4.1.0",
1782
+ "randombytes": "^2.0.1"
1783
+ },
1784
+ "dependencies": {
1785
+ "bn.js": {
1786
+ "version": "4.11.9",
1787
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
1788
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
1789
+ "dev": true
1790
+ }
1791
+ }
1792
+ },
1793
+ "browserify-sign": {
1794
+ "version": "4.2.1",
1795
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
1796
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
1797
+ "dev": true,
1798
+ "requires": {
1799
+ "bn.js": "^5.1.1",
1800
+ "browserify-rsa": "^4.0.1",
1801
+ "create-hash": "^1.2.0",
1802
+ "create-hmac": "^1.1.7",
1803
+ "elliptic": "^6.5.3",
1804
+ "inherits": "^2.0.4",
1805
+ "parse-asn1": "^5.1.5",
1806
+ "readable-stream": "^3.6.0",
1807
+ "safe-buffer": "^5.2.0"
1808
+ },
1809
+ "dependencies": {
1810
+ "readable-stream": {
1811
+ "version": "3.6.0",
1812
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1813
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1814
+ "dev": true,
1815
+ "requires": {
1816
+ "inherits": "^2.0.3",
1817
+ "string_decoder": "^1.1.1",
1818
+ "util-deprecate": "^1.0.1"
1819
+ }
1820
+ }
1821
+ }
1822
+ },
1823
+ "browserslist": {
1824
+ "version": "4.14.5",
1825
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz",
1826
+ "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==",
1827
+ "dev": true,
1828
+ "requires": {
1829
+ "caniuse-lite": "^1.0.30001135",
1830
+ "electron-to-chromium": "^1.3.571",
1831
+ "escalade": "^3.1.0",
1832
+ "node-releases": "^1.1.61"
1833
+ }
1834
+ },
1835
+ "buffer": {
1836
+ "version": "4.9.2",
1837
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
1838
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
1839
+ "dev": true,
1840
+ "requires": {
1841
+ "base64-js": "^1.0.2",
1842
+ "ieee754": "^1.1.4",
1843
+ "isarray": "^1.0.0"
1844
+ }
1845
+ },
1846
+ "buffer-equal": {
1847
+ "version": "0.0.1",
1848
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
1849
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
1850
+ "dev": true
1851
+ },
1852
+ "buffer-from": {
1853
+ "version": "1.1.1",
1854
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
1855
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
1856
+ "dev": true
1857
+ },
1858
+ "buffer-xor": {
1859
+ "version": "1.0.3",
1860
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
1861
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
1862
+ "dev": true
1863
+ },
1864
+ "builtin-status-codes": {
1865
+ "version": "3.0.0",
1866
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
1867
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
1868
+ "dev": true
1869
+ },
1870
+ "cache-base": {
1871
+ "version": "1.0.1",
1872
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
1873
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
1874
+ "dev": true,
1875
+ "requires": {
1876
+ "collection-visit": "^1.0.0",
1877
+ "component-emitter": "^1.2.1",
1878
+ "get-value": "^2.0.6",
1879
+ "has-value": "^1.0.0",
1880
+ "isobject": "^3.0.1",
1881
+ "set-value": "^2.0.0",
1882
+ "to-object-path": "^0.3.0",
1883
+ "union-value": "^1.0.0",
1884
+ "unset-value": "^1.0.0"
1885
+ }
1886
+ },
1887
+ "call-me-maybe": {
1888
+ "version": "1.0.1",
1889
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
1890
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
1891
+ "dev": true
1892
+ },
1893
+ "caller-callsite": {
1894
+ "version": "2.0.0",
1895
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
1896
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
1897
+ "dev": true,
1898
+ "requires": {
1899
+ "callsites": "^2.0.0"
1900
+ }
1901
+ },
1902
+ "caller-path": {
1903
+ "version": "2.0.0",
1904
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
1905
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
1906
+ "dev": true,
1907
+ "requires": {
1908
+ "caller-callsite": "^2.0.0"
1909
+ }
1910
+ },
1911
+ "callsites": {
1912
+ "version": "2.0.0",
1913
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
1914
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
1915
+ "dev": true
1916
+ },
1917
+ "caniuse-api": {
1918
+ "version": "3.0.0",
1919
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
1920
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
1921
+ "dev": true,
1922
+ "requires": {
1923
+ "browserslist": "^4.0.0",
1924
+ "caniuse-lite": "^1.0.0",
1925
+ "lodash.memoize": "^4.1.2",
1926
+ "lodash.uniq": "^4.5.0"
1927
+ }
1928
+ },
1929
+ "caniuse-lite": {
1930
+ "version": "1.0.30001148",
1931
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz",
1932
+ "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==",
1933
+ "dev": true
1934
+ },
1935
+ "caseless": {
1936
+ "version": "0.12.0",
1937
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
1938
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
1939
+ "dev": true
1940
+ },
1941
+ "chalk": {
1942
+ "version": "0.5.1",
1943
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
1944
+ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
1945
+ "dev": true,
1946
+ "requires": {
1947
+ "ansi-styles": "^1.1.0",
1948
+ "escape-string-regexp": "^1.0.0",
1949
+ "has-ansi": "^0.1.0",
1950
+ "strip-ansi": "^0.3.0",
1951
+ "supports-color": "^0.2.0"
1952
+ }
1953
+ },
1954
+ "chokidar": {
1955
+ "version": "2.1.8",
1956
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
1957
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
1958
+ "dev": true,
1959
+ "requires": {
1960
+ "anymatch": "^2.0.0",
1961
+ "async-each": "^1.0.1",
1962
+ "braces": "^2.3.2",
1963
+ "fsevents": "^1.2.7",
1964
+ "glob-parent": "^3.1.0",
1965
+ "inherits": "^2.0.3",
1966
+ "is-binary-path": "^1.0.0",
1967
+ "is-glob": "^4.0.0",
1968
+ "normalize-path": "^3.0.0",
1969
+ "path-is-absolute": "^1.0.0",
1970
+ "readdirp": "^2.2.1",
1971
+ "upath": "^1.1.1"
1972
+ }
1973
+ },
1974
+ "cipher-base": {
1975
+ "version": "1.0.4",
1976
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
1977
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
1978
+ "dev": true,
1979
+ "requires": {
1980
+ "inherits": "^2.0.1",
1981
+ "safe-buffer": "^5.0.1"
1982
+ }
1983
+ },
1984
+ "class-utils": {
1985
+ "version": "0.3.6",
1986
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
1987
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
1988
+ "dev": true,
1989
+ "requires": {
1990
+ "arr-union": "^3.1.0",
1991
+ "define-property": "^0.2.5",
1992
+ "isobject": "^3.0.0",
1993
+ "static-extend": "^0.1.1"
1994
+ },
1995
+ "dependencies": {
1996
+ "define-property": {
1997
+ "version": "0.2.5",
1998
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
1999
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2000
+ "dev": true,
2001
+ "requires": {
2002
+ "is-descriptor": "^0.1.0"
2003
+ }
2004
+ }
2005
+ }
2006
+ },
2007
+ "cli-cursor": {
2008
+ "version": "2.1.0",
2009
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
2010
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
2011
+ "dev": true,
2012
+ "requires": {
2013
+ "restore-cursor": "^2.0.0"
2014
+ }
2015
+ },
2016
+ "cli-spinners": {
2017
+ "version": "1.3.1",
2018
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
2019
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
2020
+ "dev": true
2021
+ },
2022
+ "clone": {
2023
+ "version": "2.1.2",
2024
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
2025
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
2026
+ "dev": true
2027
+ },
2028
+ "coa": {
2029
+ "version": "2.0.2",
2030
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
2031
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
2032
+ "dev": true,
2033
+ "requires": {
2034
+ "@types/q": "^1.5.1",
2035
+ "chalk": "^2.4.1",
2036
+ "q": "^1.1.2"
2037
+ },
2038
+ "dependencies": {
2039
+ "ansi-styles": {
2040
+ "version": "3.2.1",
2041
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2042
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2043
+ "dev": true,
2044
+ "requires": {
2045
+ "color-convert": "^1.9.0"
2046
+ }
2047
+ },
2048
+ "chalk": {
2049
+ "version": "2.4.2",
2050
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2051
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2052
+ "dev": true,
2053
+ "requires": {
2054
+ "ansi-styles": "^3.2.1",
2055
+ "escape-string-regexp": "^1.0.5",
2056
+ "supports-color": "^5.3.0"
2057
+ }
2058
+ },
2059
+ "supports-color": {
2060
+ "version": "5.5.0",
2061
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2062
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2063
+ "dev": true,
2064
+ "requires": {
2065
+ "has-flag": "^3.0.0"
2066
+ }
2067
+ }
2068
+ }
2069
+ },
2070
+ "coffeescript": {
2071
+ "version": "2.5.1",
2072
+ "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.5.1.tgz",
2073
+ "integrity": "sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ==",
2074
+ "dev": true
2075
+ },
2076
+ "collection-visit": {
2077
+ "version": "1.0.0",
2078
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
2079
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
2080
+ "dev": true,
2081
+ "requires": {
2082
+ "map-visit": "^1.0.0",
2083
+ "object-visit": "^1.0.0"
2084
+ }
2085
+ },
2086
+ "color": {
2087
+ "version": "3.1.3",
2088
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
2089
+ "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
2090
+ "dev": true,
2091
+ "requires": {
2092
+ "color-convert": "^1.9.1",
2093
+ "color-string": "^1.5.4"
2094
+ }
2095
+ },
2096
+ "color-convert": {
2097
+ "version": "1.9.3",
2098
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2099
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2100
+ "requires": {
2101
+ "color-name": "1.1.3"
2102
+ }
2103
+ },
2104
+ "color-name": {
2105
+ "version": "1.1.3",
2106
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2107
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
2108
+ },
2109
+ "color-string": {
2110
+ "version": "1.5.4",
2111
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
2112
+ "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
2113
+ "dev": true,
2114
+ "requires": {
2115
+ "color-name": "^1.0.0",
2116
+ "simple-swizzle": "^0.2.2"
2117
+ }
2118
+ },
2119
+ "combined-stream": {
2120
+ "version": "1.0.8",
2121
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
2122
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
2123
+ "dev": true,
2124
+ "requires": {
2125
+ "delayed-stream": "~1.0.0"
2126
+ }
2127
+ },
2128
+ "command-exists": {
2129
+ "version": "1.2.9",
2130
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
2131
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
2132
+ "dev": true
2133
+ },
2134
+ "commander": {
2135
+ "version": "2.20.3",
2136
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
2137
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
2138
+ "dev": true
2139
+ },
2140
+ "component-emitter": {
2141
+ "version": "1.3.0",
2142
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
2143
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
2144
+ "dev": true
2145
+ },
2146
+ "concat-map": {
2147
+ "version": "0.0.1",
2148
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
2149
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
2150
+ "dev": true
2151
+ },
2152
+ "concat-stream": {
2153
+ "version": "1.6.2",
2154
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
2155
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
2156
+ "dev": true,
2157
+ "requires": {
2158
+ "buffer-from": "^1.0.0",
2159
+ "inherits": "^2.0.3",
2160
+ "readable-stream": "^2.2.2",
2161
+ "typedarray": "^0.0.6"
2162
+ }
2163
+ },
2164
+ "console-browserify": {
2165
+ "version": "1.2.0",
2166
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
2167
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
2168
+ "dev": true
2169
+ },
2170
+ "constants-browserify": {
2171
+ "version": "1.0.0",
2172
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
2173
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
2174
+ "dev": true
2175
+ },
2176
+ "convert-source-map": {
2177
+ "version": "1.7.0",
2178
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
2179
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
2180
+ "dev": true,
2181
+ "requires": {
2182
+ "safe-buffer": "~5.1.1"
2183
+ },
2184
+ "dependencies": {
2185
+ "safe-buffer": {
2186
+ "version": "5.1.2",
2187
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2188
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2189
+ "dev": true
2190
+ }
2191
+ }
2192
+ },
2193
+ "copy-descriptor": {
2194
+ "version": "0.1.1",
2195
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
2196
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
2197
+ "dev": true
2198
+ },
2199
+ "core-js": {
2200
+ "version": "2.6.11",
2201
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
2202
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
2203
+ "dev": true
2204
+ },
2205
+ "core-js-compat": {
2206
+ "version": "3.6.5",
2207
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
2208
+ "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
2209
+ "dev": true,
2210
+ "requires": {
2211
+ "browserslist": "^4.8.5",
2212
+ "semver": "7.0.0"
2213
+ },
2214
+ "dependencies": {
2215
+ "semver": {
2216
+ "version": "7.0.0",
2217
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
2218
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
2219
+ "dev": true
2220
+ }
2221
+ }
2222
+ },
2223
+ "core-util-is": {
2224
+ "version": "1.0.2",
2225
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
2226
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
2227
+ "dev": true
2228
+ },
2229
+ "cosmiconfig": {
2230
+ "version": "5.2.1",
2231
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
2232
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
2233
+ "dev": true,
2234
+ "requires": {
2235
+ "import-fresh": "^2.0.0",
2236
+ "is-directory": "^0.3.1",
2237
+ "js-yaml": "^3.13.1",
2238
+ "parse-json": "^4.0.0"
2239
+ },
2240
+ "dependencies": {
2241
+ "parse-json": {
2242
+ "version": "4.0.0",
2243
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
2244
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
2245
+ "dev": true,
2246
+ "requires": {
2247
+ "error-ex": "^1.3.1",
2248
+ "json-parse-better-errors": "^1.0.1"
2249
+ }
2250
+ }
2251
+ }
2252
+ },
2253
+ "create-ecdh": {
2254
+ "version": "4.0.4",
2255
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
2256
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
2257
+ "dev": true,
2258
+ "requires": {
2259
+ "bn.js": "^4.1.0",
2260
+ "elliptic": "^6.5.3"
2261
+ },
2262
+ "dependencies": {
2263
+ "bn.js": {
2264
+ "version": "4.11.9",
2265
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
2266
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
2267
+ "dev": true
2268
+ }
2269
+ }
2270
+ },
2271
+ "create-hash": {
2272
+ "version": "1.2.0",
2273
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
2274
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
2275
+ "dev": true,
2276
+ "requires": {
2277
+ "cipher-base": "^1.0.1",
2278
+ "inherits": "^2.0.1",
2279
+ "md5.js": "^1.3.4",
2280
+ "ripemd160": "^2.0.1",
2281
+ "sha.js": "^2.4.0"
2282
+ }
2283
+ },
2284
+ "create-hmac": {
2285
+ "version": "1.1.7",
2286
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
2287
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
2288
+ "dev": true,
2289
+ "requires": {
2290
+ "cipher-base": "^1.0.3",
2291
+ "create-hash": "^1.1.0",
2292
+ "inherits": "^2.0.1",
2293
+ "ripemd160": "^2.0.0",
2294
+ "safe-buffer": "^5.0.1",
2295
+ "sha.js": "^2.4.8"
2296
+ }
2297
+ },
2298
+ "cross-spawn": {
2299
+ "version": "0.2.9",
2300
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.9.tgz",
2301
+ "integrity": "sha1-vWf5bAfvtjA7f+lMHpefiEeOCjk=",
2302
+ "dev": true,
2303
+ "requires": {
2304
+ "lru-cache": "^2.5.0"
2305
+ }
2306
+ },
2307
+ "crypto-browserify": {
2308
+ "version": "3.12.0",
2309
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
2310
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
2311
+ "dev": true,
2312
+ "requires": {
2313
+ "browserify-cipher": "^1.0.0",
2314
+ "browserify-sign": "^4.0.0",
2315
+ "create-ecdh": "^4.0.0",
2316
+ "create-hash": "^1.1.0",
2317
+ "create-hmac": "^1.1.0",
2318
+ "diffie-hellman": "^5.0.0",
2319
+ "inherits": "^2.0.1",
2320
+ "pbkdf2": "^3.0.3",
2321
+ "public-encrypt": "^4.0.0",
2322
+ "randombytes": "^2.0.0",
2323
+ "randomfill": "^1.0.3"
2324
+ }
2325
+ },
2326
+ "css-color-names": {
2327
+ "version": "0.0.4",
2328
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
2329
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
2330
+ "dev": true
2331
+ },
2332
+ "css-declaration-sorter": {
2333
+ "version": "4.0.1",
2334
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
2335
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
2336
+ "dev": true,
2337
+ "requires": {
2338
+ "postcss": "^7.0.1",
2339
+ "timsort": "^0.3.0"
2340
+ }
2341
+ },
2342
+ "css-modules-loader-core": {
2343
+ "version": "1.1.0",
2344
+ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz",
2345
+ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=",
2346
+ "dev": true,
2347
+ "requires": {
2348
+ "icss-replace-symbols": "1.1.0",
2349
+ "postcss": "6.0.1",
2350
+ "postcss-modules-extract-imports": "1.1.0",
2351
+ "postcss-modules-local-by-default": "1.2.0",
2352
+ "postcss-modules-scope": "1.1.0",
2353
+ "postcss-modules-values": "1.3.0"
2354
+ },
2355
+ "dependencies": {
2356
+ "ansi-regex": {
2357
+ "version": "2.1.1",
2358
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
2359
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
2360
+ "dev": true
2361
+ },
2362
+ "ansi-styles": {
2363
+ "version": "2.2.1",
2364
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
2365
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
2366
+ "dev": true
2367
+ },
2368
+ "chalk": {
2369
+ "version": "1.1.3",
2370
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
2371
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
2372
+ "dev": true,
2373
+ "requires": {
2374
+ "ansi-styles": "^2.2.1",
2375
+ "escape-string-regexp": "^1.0.2",
2376
+ "has-ansi": "^2.0.0",
2377
+ "strip-ansi": "^3.0.0",
2378
+ "supports-color": "^2.0.0"
2379
+ },
2380
+ "dependencies": {
2381
+ "supports-color": {
2382
+ "version": "2.0.0",
2383
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
2384
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
2385
+ "dev": true
2386
+ }
2387
+ }
2388
+ },
2389
+ "has-ansi": {
2390
+ "version": "2.0.0",
2391
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
2392
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
2393
+ "dev": true,
2394
+ "requires": {
2395
+ "ansi-regex": "^2.0.0"
2396
+ }
2397
+ },
2398
+ "has-flag": {
2399
+ "version": "1.0.0",
2400
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
2401
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
2402
+ "dev": true
2403
+ },
2404
+ "postcss": {
2405
+ "version": "6.0.1",
2406
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
2407
+ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
2408
+ "dev": true,
2409
+ "requires": {
2410
+ "chalk": "^1.1.3",
2411
+ "source-map": "^0.5.6",
2412
+ "supports-color": "^3.2.3"
2413
+ }
2414
+ },
2415
+ "source-map": {
2416
+ "version": "0.5.7",
2417
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2418
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2419
+ "dev": true
2420
+ },
2421
+ "strip-ansi": {
2422
+ "version": "3.0.1",
2423
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2424
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2425
+ "dev": true,
2426
+ "requires": {
2427
+ "ansi-regex": "^2.0.0"
2428
+ }
2429
+ },
2430
+ "supports-color": {
2431
+ "version": "3.2.3",
2432
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
2433
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
2434
+ "dev": true,
2435
+ "requires": {
2436
+ "has-flag": "^1.0.0"
2437
+ }
2438
+ }
2439
+ }
2440
+ },
2441
+ "css-select": {
2442
+ "version": "2.1.0",
2443
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
2444
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
2445
+ "dev": true,
2446
+ "requires": {
2447
+ "boolbase": "^1.0.0",
2448
+ "css-what": "^3.2.1",
2449
+ "domutils": "^1.7.0",
2450
+ "nth-check": "^1.0.2"
2451
+ }
2452
+ },
2453
+ "css-select-base-adapter": {
2454
+ "version": "0.1.1",
2455
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
2456
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
2457
+ "dev": true
2458
+ },
2459
+ "css-selector-tokenizer": {
2460
+ "version": "0.7.3",
2461
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz",
2462
+ "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==",
2463
+ "dev": true,
2464
+ "requires": {
2465
+ "cssesc": "^3.0.0",
2466
+ "fastparse": "^1.1.2"
2467
+ }
2468
+ },
2469
+ "css-tree": {
2470
+ "version": "1.0.0-alpha.37",
2471
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
2472
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
2473
+ "dev": true,
2474
+ "requires": {
2475
+ "mdn-data": "2.0.4",
2476
+ "source-map": "^0.6.1"
2477
+ },
2478
+ "dependencies": {
2479
+ "source-map": {
2480
+ "version": "0.6.1",
2481
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2482
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2483
+ "dev": true
2484
+ }
2485
+ }
2486
+ },
2487
+ "css-what": {
2488
+ "version": "3.4.2",
2489
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
2490
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
2491
+ "dev": true
2492
+ },
2493
+ "cssesc": {
2494
+ "version": "3.0.0",
2495
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
2496
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
2497
+ "dev": true
2498
+ },
2499
+ "cssnano": {
2500
+ "version": "4.1.10",
2501
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
2502
+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
2503
+ "dev": true,
2504
+ "requires": {
2505
+ "cosmiconfig": "^5.0.0",
2506
+ "cssnano-preset-default": "^4.0.7",
2507
+ "is-resolvable": "^1.0.0",
2508
+ "postcss": "^7.0.0"
2509
+ }
2510
+ },
2511
+ "cssnano-preset-default": {
2512
+ "version": "4.0.7",
2513
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
2514
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
2515
+ "dev": true,
2516
+ "requires": {
2517
+ "css-declaration-sorter": "^4.0.1",
2518
+ "cssnano-util-raw-cache": "^4.0.1",
2519
+ "postcss": "^7.0.0",
2520
+ "postcss-calc": "^7.0.1",
2521
+ "postcss-colormin": "^4.0.3",
2522
+ "postcss-convert-values": "^4.0.1",
2523
+ "postcss-discard-comments": "^4.0.2",
2524
+ "postcss-discard-duplicates": "^4.0.2",
2525
+ "postcss-discard-empty": "^4.0.1",
2526
+ "postcss-discard-overridden": "^4.0.1",
2527
+ "postcss-merge-longhand": "^4.0.11",
2528
+ "postcss-merge-rules": "^4.0.3",
2529
+ "postcss-minify-font-values": "^4.0.2",
2530
+ "postcss-minify-gradients": "^4.0.2",
2531
+ "postcss-minify-params": "^4.0.2",
2532
+ "postcss-minify-selectors": "^4.0.2",
2533
+ "postcss-normalize-charset": "^4.0.1",
2534
+ "postcss-normalize-display-values": "^4.0.2",
2535
+ "postcss-normalize-positions": "^4.0.2",
2536
+ "postcss-normalize-repeat-style": "^4.0.2",
2537
+ "postcss-normalize-string": "^4.0.2",
2538
+ "postcss-normalize-timing-functions": "^4.0.2",
2539
+ "postcss-normalize-unicode": "^4.0.1",
2540
+ "postcss-normalize-url": "^4.0.1",
2541
+ "postcss-normalize-whitespace": "^4.0.2",
2542
+ "postcss-ordered-values": "^4.1.2",
2543
+ "postcss-reduce-initial": "^4.0.3",
2544
+ "postcss-reduce-transforms": "^4.0.2",
2545
+ "postcss-svgo": "^4.0.2",
2546
+ "postcss-unique-selectors": "^4.0.1"
2547
+ }
2548
+ },
2549
+ "cssnano-util-get-arguments": {
2550
+ "version": "4.0.0",
2551
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
2552
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
2553
+ "dev": true
2554
+ },
2555
+ "cssnano-util-get-match": {
2556
+ "version": "4.0.0",
2557
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
2558
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
2559
+ "dev": true
2560
+ },
2561
+ "cssnano-util-raw-cache": {
2562
+ "version": "4.0.1",
2563
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
2564
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
2565
+ "dev": true,
2566
+ "requires": {
2567
+ "postcss": "^7.0.0"
2568
+ }
2569
+ },
2570
+ "cssnano-util-same-parent": {
2571
+ "version": "4.0.1",
2572
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
2573
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
2574
+ "dev": true
2575
+ },
2576
+ "csso": {
2577
+ "version": "4.0.3",
2578
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
2579
+ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
2580
+ "dev": true,
2581
+ "requires": {
2582
+ "css-tree": "1.0.0-alpha.39"
2583
+ },
2584
+ "dependencies": {
2585
+ "css-tree": {
2586
+ "version": "1.0.0-alpha.39",
2587
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
2588
+ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
2589
+ "dev": true,
2590
+ "requires": {
2591
+ "mdn-data": "2.0.6",
2592
+ "source-map": "^0.6.1"
2593
+ }
2594
+ },
2595
+ "mdn-data": {
2596
+ "version": "2.0.6",
2597
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
2598
+ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
2599
+ "dev": true
2600
+ },
2601
+ "source-map": {
2602
+ "version": "0.6.1",
2603
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2604
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2605
+ "dev": true
2606
+ }
2607
+ }
2608
+ },
2609
+ "cssom": {
2610
+ "version": "0.3.8",
2611
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
2612
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
2613
+ "dev": true
2614
+ },
2615
+ "cssstyle": {
2616
+ "version": "1.4.0",
2617
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
2618
+ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
2619
+ "dev": true,
2620
+ "requires": {
2621
+ "cssom": "0.3.x"
2622
+ }
2623
+ },
2624
+ "dargs": {
2625
+ "version": "4.1.0",
2626
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
2627
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
2628
+ "dev": true,
2629
+ "requires": {
2630
+ "number-is-nan": "^1.0.0"
2631
+ }
2632
+ },
2633
+ "dashdash": {
2634
+ "version": "1.14.1",
2635
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
2636
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
2637
+ "dev": true,
2638
+ "requires": {
2639
+ "assert-plus": "^1.0.0"
2640
+ }
2641
+ },
2642
+ "data-urls": {
2643
+ "version": "1.1.0",
2644
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
2645
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
2646
+ "dev": true,
2647
+ "requires": {
2648
+ "abab": "^2.0.0",
2649
+ "whatwg-mimetype": "^2.2.0",
2650
+ "whatwg-url": "^7.0.0"
2651
+ }
2652
+ },
2653
+ "deasync": {
2654
+ "version": "0.1.20",
2655
+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.20.tgz",
2656
+ "integrity": "sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ==",
2657
+ "dev": true,
2658
+ "requires": {
2659
+ "bindings": "^1.5.0",
2660
+ "node-addon-api": "^1.7.1"
2661
+ }
2662
+ },
2663
+ "debug": {
2664
+ "version": "4.2.0",
2665
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
2666
+ "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
2667
+ "dev": true,
2668
+ "requires": {
2669
+ "ms": "2.1.2"
2670
+ }
2671
+ },
2672
+ "decode-uri-component": {
2673
+ "version": "0.2.0",
2674
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
2675
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
2676
+ "dev": true
2677
+ },
2678
+ "deep-is": {
2679
+ "version": "0.1.3",
2680
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
2681
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
2682
+ "dev": true
2683
+ },
2684
+ "defaults": {
2685
+ "version": "1.0.3",
2686
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
2687
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
2688
+ "dev": true,
2689
+ "requires": {
2690
+ "clone": "^1.0.2"
2691
+ },
2692
+ "dependencies": {
2693
+ "clone": {
2694
+ "version": "1.0.4",
2695
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
2696
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
2697
+ "dev": true
2698
+ }
2699
+ }
2700
+ },
2701
+ "define-properties": {
2702
+ "version": "1.1.3",
2703
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
2704
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
2705
+ "dev": true,
2706
+ "requires": {
2707
+ "object-keys": "^1.0.12"
2708
+ }
2709
+ },
2710
+ "define-property": {
2711
+ "version": "2.0.2",
2712
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
2713
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
2714
+ "dev": true,
2715
+ "requires": {
2716
+ "is-descriptor": "^1.0.2",
2717
+ "isobject": "^3.0.1"
2718
+ },
2719
+ "dependencies": {
2720
+ "is-accessor-descriptor": {
2721
+ "version": "1.0.0",
2722
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
2723
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
2724
+ "dev": true,
2725
+ "requires": {
2726
+ "kind-of": "^6.0.0"
2727
+ }
2728
+ },
2729
+ "is-data-descriptor": {
2730
+ "version": "1.0.0",
2731
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
2732
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
2733
+ "dev": true,
2734
+ "requires": {
2735
+ "kind-of": "^6.0.0"
2736
+ }
2737
+ },
2738
+ "is-descriptor": {
2739
+ "version": "1.0.2",
2740
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
2741
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
2742
+ "dev": true,
2743
+ "requires": {
2744
+ "is-accessor-descriptor": "^1.0.0",
2745
+ "is-data-descriptor": "^1.0.0",
2746
+ "kind-of": "^6.0.2"
2747
+ }
2748
+ },
2749
+ "kind-of": {
2750
+ "version": "6.0.3",
2751
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
2752
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
2753
+ "dev": true
2754
+ }
2755
+ }
2756
+ },
2757
+ "delayed-stream": {
2758
+ "version": "1.0.0",
2759
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
2760
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
2761
+ "dev": true
2762
+ },
2763
+ "depd": {
2764
+ "version": "1.1.2",
2765
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
2766
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
2767
+ "dev": true
2768
+ },
2769
+ "des.js": {
2770
+ "version": "1.0.1",
2771
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
2772
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
2773
+ "dev": true,
2774
+ "requires": {
2775
+ "inherits": "^2.0.1",
2776
+ "minimalistic-assert": "^1.0.0"
2777
+ }
2778
+ },
2779
+ "destroy": {
2780
+ "version": "1.0.4",
2781
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
2782
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
2783
+ "dev": true
2784
+ },
2785
+ "diffie-hellman": {
2786
+ "version": "5.0.3",
2787
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
2788
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
2789
+ "dev": true,
2790
+ "requires": {
2791
+ "bn.js": "^4.1.0",
2792
+ "miller-rabin": "^4.0.0",
2793
+ "randombytes": "^2.0.0"
2794
+ },
2795
+ "dependencies": {
2796
+ "bn.js": {
2797
+ "version": "4.11.9",
2798
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
2799
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
2800
+ "dev": true
2801
+ }
2802
+ }
2803
+ },
2804
+ "dom-serializer": {
2805
+ "version": "0.2.2",
2806
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
2807
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
2808
+ "dev": true,
2809
+ "requires": {
2810
+ "domelementtype": "^2.0.1",
2811
+ "entities": "^2.0.0"
2812
+ },
2813
+ "dependencies": {
2814
+ "domelementtype": {
2815
+ "version": "2.0.2",
2816
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
2817
+ "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==",
2818
+ "dev": true
2819
+ },
2820
+ "entities": {
2821
+ "version": "2.0.3",
2822
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
2823
+ "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
2824
+ "dev": true
2825
+ }
2826
+ }
2827
+ },
2828
+ "domain-browser": {
2829
+ "version": "1.2.0",
2830
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
2831
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
2832
+ "dev": true
2833
+ },
2834
+ "domelementtype": {
2835
+ "version": "1.3.1",
2836
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
2837
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
2838
+ "dev": true
2839
+ },
2840
+ "domexception": {
2841
+ "version": "1.0.1",
2842
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
2843
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
2844
+ "dev": true,
2845
+ "requires": {
2846
+ "webidl-conversions": "^4.0.2"
2847
+ }
2848
+ },
2849
+ "domhandler": {
2850
+ "version": "2.4.2",
2851
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
2852
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
2853
+ "dev": true,
2854
+ "requires": {
2855
+ "domelementtype": "1"
2856
+ }
2857
+ },
2858
+ "domutils": {
2859
+ "version": "1.7.0",
2860
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
2861
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
2862
+ "dev": true,
2863
+ "requires": {
2864
+ "dom-serializer": "0",
2865
+ "domelementtype": "1"
2866
+ }
2867
+ },
2868
+ "dot-prop": {
2869
+ "version": "5.3.0",
2870
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
2871
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
2872
+ "dev": true,
2873
+ "requires": {
2874
+ "is-obj": "^2.0.0"
2875
+ }
2876
+ },
2877
+ "dotenv": {
2878
+ "version": "5.0.1",
2879
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
2880
+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
2881
+ "dev": true
2882
+ },
2883
+ "dotenv-expand": {
2884
+ "version": "5.1.0",
2885
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
2886
+ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
2887
+ "dev": true
2888
+ },
2889
+ "duplexer2": {
2890
+ "version": "0.1.4",
2891
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
2892
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
2893
+ "dev": true,
2894
+ "requires": {
2895
+ "readable-stream": "^2.0.2"
2896
+ }
2897
+ },
2898
+ "ecc-jsbn": {
2899
+ "version": "0.1.2",
2900
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
2901
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
2902
+ "dev": true,
2903
+ "requires": {
2904
+ "jsbn": "~0.1.0",
2905
+ "safer-buffer": "^2.1.0"
2906
+ }
2907
+ },
2908
+ "ee-first": {
2909
+ "version": "1.1.1",
2910
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
2911
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
2912
+ "dev": true
2913
+ },
2914
+ "electron-to-chromium": {
2915
+ "version": "1.3.580",
2916
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.580.tgz",
2917
+ "integrity": "sha512-5flHTbRpptO6h3lQUG4zdSAxryAS3PrZOkLpLS0DL5/y2LBf+l9HJ8X6UBorNs1QRBrMR7u/QvkdK+GlekW1kQ==",
2918
+ "dev": true
2919
+ },
2920
+ "elliptic": {
2921
+ "version": "6.5.3",
2922
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
2923
+ "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
2924
+ "dev": true,
2925
+ "requires": {
2926
+ "bn.js": "^4.4.0",
2927
+ "brorand": "^1.0.1",
2928
+ "hash.js": "^1.0.0",
2929
+ "hmac-drbg": "^1.0.0",
2930
+ "inherits": "^2.0.1",
2931
+ "minimalistic-assert": "^1.0.0",
2932
+ "minimalistic-crypto-utils": "^1.0.0"
2933
+ },
2934
+ "dependencies": {
2935
+ "bn.js": {
2936
+ "version": "4.11.9",
2937
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
2938
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
2939
+ "dev": true
2940
+ }
2941
+ }
2942
+ },
2943
+ "encodeurl": {
2944
+ "version": "1.0.2",
2945
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2946
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
2947
+ "dev": true
2948
+ },
2949
+ "encoding": {
2950
+ "version": "0.1.12",
2951
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
2952
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
2953
+ "dev": true,
2954
+ "requires": {
2955
+ "iconv-lite": "~0.4.13"
2956
+ }
2957
+ },
2958
+ "entities": {
2959
+ "version": "1.1.2",
2960
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
2961
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
2962
+ "dev": true
2963
+ },
2964
+ "envinfo": {
2965
+ "version": "7.7.3",
2966
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz",
2967
+ "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==",
2968
+ "dev": true
2969
+ },
2970
+ "error-ex": {
2971
+ "version": "1.3.2",
2972
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
2973
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
2974
+ "dev": true,
2975
+ "requires": {
2976
+ "is-arrayish": "^0.2.1"
2977
+ }
2978
+ },
2979
+ "es-abstract": {
2980
+ "version": "1.18.0-next.1",
2981
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
2982
+ "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
2983
+ "dev": true,
2984
+ "requires": {
2985
+ "es-to-primitive": "^1.2.1",
2986
+ "function-bind": "^1.1.1",
2987
+ "has": "^1.0.3",
2988
+ "has-symbols": "^1.0.1",
2989
+ "is-callable": "^1.2.2",
2990
+ "is-negative-zero": "^2.0.0",
2991
+ "is-regex": "^1.1.1",
2992
+ "object-inspect": "^1.8.0",
2993
+ "object-keys": "^1.1.1",
2994
+ "object.assign": "^4.1.1",
2995
+ "string.prototype.trimend": "^1.0.1",
2996
+ "string.prototype.trimstart": "^1.0.1"
2997
+ }
2998
+ },
2999
+ "es-to-primitive": {
3000
+ "version": "1.2.1",
3001
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
3002
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
3003
+ "dev": true,
3004
+ "requires": {
3005
+ "is-callable": "^1.1.4",
3006
+ "is-date-object": "^1.0.1",
3007
+ "is-symbol": "^1.0.2"
3008
+ }
3009
+ },
3010
+ "escalade": {
3011
+ "version": "3.1.1",
3012
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
3013
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
3014
+ "dev": true
3015
+ },
3016
+ "escape-html": {
3017
+ "version": "1.0.3",
3018
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
3019
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
3020
+ "dev": true
3021
+ },
3022
+ "escape-string-regexp": {
3023
+ "version": "1.0.5",
3024
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3025
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
3026
+ },
3027
+ "escodegen": {
3028
+ "version": "1.9.1",
3029
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
3030
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
3031
+ "dev": true,
3032
+ "requires": {
3033
+ "esprima": "^3.1.3",
3034
+ "estraverse": "^4.2.0",
3035
+ "esutils": "^2.0.2",
3036
+ "optionator": "^0.8.1",
3037
+ "source-map": "~0.6.1"
3038
+ },
3039
+ "dependencies": {
3040
+ "source-map": {
3041
+ "version": "0.6.1",
3042
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3043
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3044
+ "dev": true,
3045
+ "optional": true
3046
+ }
3047
+ }
3048
+ },
3049
+ "esprima": {
3050
+ "version": "3.1.3",
3051
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
3052
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
3053
+ "dev": true
3054
+ },
3055
+ "estraverse": {
3056
+ "version": "4.3.0",
3057
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
3058
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
3059
+ "dev": true
3060
+ },
3061
+ "esutils": {
3062
+ "version": "2.0.3",
3063
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
3064
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
3065
+ "dev": true
3066
+ },
3067
+ "etag": {
3068
+ "version": "1.8.1",
3069
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
3070
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
3071
+ "dev": true
3072
+ },
3073
+ "events": {
3074
+ "version": "3.2.0",
3075
+ "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
3076
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
3077
+ "dev": true
3078
+ },
3079
+ "evp_bytestokey": {
3080
+ "version": "1.0.3",
3081
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
3082
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
3083
+ "dev": true,
3084
+ "requires": {
3085
+ "md5.js": "^1.3.4",
3086
+ "safe-buffer": "^5.1.1"
3087
+ }
3088
+ },
3089
+ "expand-brackets": {
3090
+ "version": "2.1.4",
3091
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
3092
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
3093
+ "dev": true,
3094
+ "requires": {
3095
+ "debug": "^2.3.3",
3096
+ "define-property": "^0.2.5",
3097
+ "extend-shallow": "^2.0.1",
3098
+ "posix-character-classes": "^0.1.0",
3099
+ "regex-not": "^1.0.0",
3100
+ "snapdragon": "^0.8.1",
3101
+ "to-regex": "^3.0.1"
3102
+ },
3103
+ "dependencies": {
3104
+ "debug": {
3105
+ "version": "2.6.9",
3106
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
3107
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
3108
+ "dev": true,
3109
+ "requires": {
3110
+ "ms": "2.0.0"
3111
+ }
3112
+ },
3113
+ "define-property": {
3114
+ "version": "0.2.5",
3115
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
3116
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
3117
+ "dev": true,
3118
+ "requires": {
3119
+ "is-descriptor": "^0.1.0"
3120
+ }
3121
+ },
3122
+ "extend-shallow": {
3123
+ "version": "2.0.1",
3124
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3125
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3126
+ "dev": true,
3127
+ "requires": {
3128
+ "is-extendable": "^0.1.0"
3129
+ }
3130
+ },
3131
+ "ms": {
3132
+ "version": "2.0.0",
3133
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3134
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
3135
+ "dev": true
3136
+ }
3137
+ }
3138
+ },
3139
+ "extend": {
3140
+ "version": "3.0.2",
3141
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
3142
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
3143
+ "dev": true
3144
+ },
3145
+ "extend-shallow": {
3146
+ "version": "3.0.2",
3147
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
3148
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
3149
+ "dev": true,
3150
+ "requires": {
3151
+ "assign-symbols": "^1.0.0",
3152
+ "is-extendable": "^1.0.1"
3153
+ },
3154
+ "dependencies": {
3155
+ "is-extendable": {
3156
+ "version": "1.0.1",
3157
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
3158
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
3159
+ "dev": true,
3160
+ "requires": {
3161
+ "is-plain-object": "^2.0.4"
3162
+ }
3163
+ }
3164
+ }
3165
+ },
3166
+ "extglob": {
3167
+ "version": "2.0.4",
3168
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
3169
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
3170
+ "dev": true,
3171
+ "requires": {
3172
+ "array-unique": "^0.3.2",
3173
+ "define-property": "^1.0.0",
3174
+ "expand-brackets": "^2.1.4",
3175
+ "extend-shallow": "^2.0.1",
3176
+ "fragment-cache": "^0.2.1",
3177
+ "regex-not": "^1.0.0",
3178
+ "snapdragon": "^0.8.1",
3179
+ "to-regex": "^3.0.1"
3180
+ },
3181
+ "dependencies": {
3182
+ "define-property": {
3183
+ "version": "1.0.0",
3184
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
3185
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
3186
+ "dev": true,
3187
+ "requires": {
3188
+ "is-descriptor": "^1.0.0"
3189
+ }
3190
+ },
3191
+ "extend-shallow": {
3192
+ "version": "2.0.1",
3193
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3194
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3195
+ "dev": true,
3196
+ "requires": {
3197
+ "is-extendable": "^0.1.0"
3198
+ }
3199
+ },
3200
+ "is-accessor-descriptor": {
3201
+ "version": "1.0.0",
3202
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
3203
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
3204
+ "dev": true,
3205
+ "requires": {
3206
+ "kind-of": "^6.0.0"
3207
+ }
3208
+ },
3209
+ "is-data-descriptor": {
3210
+ "version": "1.0.0",
3211
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
3212
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
3213
+ "dev": true,
3214
+ "requires": {
3215
+ "kind-of": "^6.0.0"
3216
+ }
3217
+ },
3218
+ "is-descriptor": {
3219
+ "version": "1.0.2",
3220
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
3221
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
3222
+ "dev": true,
3223
+ "requires": {
3224
+ "is-accessor-descriptor": "^1.0.0",
3225
+ "is-data-descriptor": "^1.0.0",
3226
+ "kind-of": "^6.0.2"
3227
+ }
3228
+ },
3229
+ "kind-of": {
3230
+ "version": "6.0.3",
3231
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
3232
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
3233
+ "dev": true
3234
+ }
3235
+ }
3236
+ },
3237
+ "extsprintf": {
3238
+ "version": "1.3.0",
3239
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
3240
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
3241
+ "dev": true
3242
+ },
3243
+ "falafel": {
3244
+ "version": "2.2.4",
3245
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz",
3246
+ "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==",
3247
+ "dev": true,
3248
+ "requires": {
3249
+ "acorn": "^7.1.1",
3250
+ "foreach": "^2.0.5",
3251
+ "isarray": "^2.0.1",
3252
+ "object-keys": "^1.0.6"
3253
+ },
3254
+ "dependencies": {
3255
+ "isarray": {
3256
+ "version": "2.0.5",
3257
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
3258
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
3259
+ "dev": true
3260
+ }
3261
+ }
3262
+ },
3263
+ "fast-deep-equal": {
3264
+ "version": "3.1.3",
3265
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
3266
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
3267
+ "dev": true
3268
+ },
3269
+ "fast-glob": {
3270
+ "version": "2.2.7",
3271
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
3272
+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
3273
+ "dev": true,
3274
+ "requires": {
3275
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
3276
+ "@nodelib/fs.stat": "^1.1.2",
3277
+ "glob-parent": "^3.1.0",
3278
+ "is-glob": "^4.0.0",
3279
+ "merge2": "^1.2.3",
3280
+ "micromatch": "^3.1.10"
3281
+ }
3282
+ },
3283
+ "fast-json-stable-stringify": {
3284
+ "version": "2.1.0",
3285
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
3286
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
3287
+ "dev": true
3288
+ },
3289
+ "fast-levenshtein": {
3290
+ "version": "2.0.6",
3291
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
3292
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
3293
+ "dev": true
3294
+ },
3295
+ "fastparse": {
3296
+ "version": "1.1.2",
3297
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
3298
+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
3299
+ "dev": true
3300
+ },
3301
+ "file-uri-to-path": {
3302
+ "version": "1.0.0",
3303
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
3304
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
3305
+ "dev": true
3306
+ },
3307
+ "filesize": {
3308
+ "version": "3.6.1",
3309
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
3310
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
3311
+ "dev": true
3312
+ },
3313
+ "fill-range": {
3314
+ "version": "4.0.0",
3315
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
3316
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
3317
+ "dev": true,
3318
+ "requires": {
3319
+ "extend-shallow": "^2.0.1",
3320
+ "is-number": "^3.0.0",
3321
+ "repeat-string": "^1.6.1",
3322
+ "to-regex-range": "^2.1.0"
3323
+ },
3324
+ "dependencies": {
3325
+ "extend-shallow": {
3326
+ "version": "2.0.1",
3327
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3328
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3329
+ "dev": true,
3330
+ "requires": {
3331
+ "is-extendable": "^0.1.0"
3332
+ }
3333
+ }
3334
+ }
3335
+ },
3336
+ "for-in": {
3337
+ "version": "1.0.2",
3338
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
3339
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
3340
+ "dev": true
3341
+ },
3342
+ "foreach": {
3343
+ "version": "2.0.5",
3344
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
3345
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
3346
+ "dev": true
3347
+ },
3348
+ "forever-agent": {
3349
+ "version": "0.6.1",
3350
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
3351
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
3352
+ "dev": true
3353
+ },
3354
+ "form-data": {
3355
+ "version": "2.3.3",
3356
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
3357
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
3358
+ "dev": true,
3359
+ "requires": {
3360
+ "asynckit": "^0.4.0",
3361
+ "combined-stream": "^1.0.6",
3362
+ "mime-types": "^2.1.12"
3363
+ }
3364
+ },
3365
+ "fragment-cache": {
3366
+ "version": "0.2.1",
3367
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
3368
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
3369
+ "dev": true,
3370
+ "requires": {
3371
+ "map-cache": "^0.2.2"
3372
+ }
3373
+ },
3374
+ "fresh": {
3375
+ "version": "0.5.2",
3376
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
3377
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
3378
+ "dev": true
3379
+ },
3380
+ "fs.realpath": {
3381
+ "version": "1.0.0",
3382
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3383
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
3384
+ "dev": true
3385
+ },
3386
+ "fsevents": {
3387
+ "version": "1.2.13",
3388
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
3389
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
3390
+ "dev": true,
3391
+ "optional": true,
3392
+ "requires": {
3393
+ "bindings": "^1.5.0",
3394
+ "nan": "^2.12.1"
3395
+ }
3396
+ },
3397
+ "function-bind": {
3398
+ "version": "1.1.1",
3399
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
3400
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
3401
+ "dev": true
3402
+ },
3403
+ "gensync": {
3404
+ "version": "1.0.0-beta.1",
3405
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
3406
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
3407
+ "dev": true
3408
+ },
3409
+ "get-port": {
3410
+ "version": "3.2.0",
3411
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
3412
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
3413
+ "dev": true
3414
+ },
3415
+ "get-value": {
3416
+ "version": "2.0.6",
3417
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
3418
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
3419
+ "dev": true
3420
+ },
3421
+ "getpass": {
3422
+ "version": "0.1.7",
3423
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
3424
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
3425
+ "dev": true,
3426
+ "requires": {
3427
+ "assert-plus": "^1.0.0"
3428
+ }
3429
+ },
3430
+ "gettext-parser": {
3431
+ "version": "1.4.0",
3432
+ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
3433
+ "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
3434
+ "dev": true,
3435
+ "requires": {
3436
+ "encoding": "^0.1.12",
3437
+ "safe-buffer": "^5.1.1"
3438
+ }
3439
+ },
3440
+ "glob": {
3441
+ "version": "7.1.6",
3442
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
3443
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
3444
+ "dev": true,
3445
+ "requires": {
3446
+ "fs.realpath": "^1.0.0",
3447
+ "inflight": "^1.0.4",
3448
+ "inherits": "2",
3449
+ "minimatch": "^3.0.4",
3450
+ "once": "^1.3.0",
3451
+ "path-is-absolute": "^1.0.0"
3452
+ }
3453
+ },
3454
+ "glob-parent": {
3455
+ "version": "3.1.0",
3456
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
3457
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
3458
+ "dev": true,
3459
+ "requires": {
3460
+ "is-glob": "^3.1.0",
3461
+ "path-dirname": "^1.0.0"
3462
+ },
3463
+ "dependencies": {
3464
+ "is-glob": {
3465
+ "version": "3.1.0",
3466
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
3467
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
3468
+ "dev": true,
3469
+ "requires": {
3470
+ "is-extglob": "^2.1.0"
3471
+ }
3472
+ }
3473
+ }
3474
+ },
3475
+ "glob-to-regexp": {
3476
+ "version": "0.3.0",
3477
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
3478
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
3479
+ "dev": true
3480
+ },
3481
+ "globals": {
3482
+ "version": "11.12.0",
3483
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
3484
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
3485
+ "dev": true
3486
+ },
3487
+ "graceful-fs": {
3488
+ "version": "4.2.4",
3489
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
3490
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
3491
+ "dev": true
3492
+ },
3493
+ "grapheme-breaker": {
3494
+ "version": "0.3.2",
3495
+ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz",
3496
+ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=",
3497
+ "dev": true,
3498
+ "requires": {
3499
+ "brfs": "^1.2.0",
3500
+ "unicode-trie": "^0.3.1"
3501
+ }
3502
+ },
3503
+ "grunt": {
3504
+ "version": "0.4.5",
3505
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
3506
+ "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
3507
+ "dev": true,
3508
+ "requires": {
3509
+ "async": "~0.1.22",
3510
+ "coffee-script": "~1.3.3",
3511
+ "colors": "~0.6.2",
3512
+ "dateformat": "1.0.2-1.2.3",
3513
+ "eventemitter2": "~0.4.13",
3514
+ "exit": "~0.1.1",
3515
+ "findup-sync": "~0.1.2",
3516
+ "getobject": "~0.1.0",
3517
+ "glob": "~3.1.21",
3518
+ "grunt-legacy-log": "~0.1.0",
3519
+ "grunt-legacy-util": "~0.2.0",
3520
+ "hooker": "~0.2.3",
3521
+ "iconv-lite": "~0.2.11",
3522
+ "js-yaml": "~2.0.5",
3523
+ "lodash": "~0.9.2",
3524
+ "minimatch": "~0.2.12",
3525
+ "nopt": "~1.0.10",
3526
+ "rimraf": "~2.2.8",
3527
+ "underscore.string": "~2.2.1",
3528
+ "which": "~1.0.5"
3529
+ },
3530
+ "dependencies": {
3531
+ "async": {
3532
+ "version": "0.1.22",
3533
+ "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
3534
+ "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
3535
+ "dev": true
3536
+ },
3537
+ "coffee-script": {
3538
+ "version": "1.3.3",
3539
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
3540
+ "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
3541
+ "dev": true
3542
+ },
3543
+ "colors": {
3544
+ "version": "0.6.2",
3545
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
3546
+ "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
3547
+ "dev": true
3548
+ },
3549
+ "dateformat": {
3550
+ "version": "1.0.2-1.2.3",
3551
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
3552
+ "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
3553
+ "dev": true
3554
+ },
3555
+ "eventemitter2": {
3556
+ "version": "0.4.14",
3557
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
3558
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
3559
+ "dev": true
3560
+ },
3561
+ "exit": {
3562
+ "version": "0.1.2",
3563
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
3564
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
3565
+ "dev": true
3566
+ },
3567
+ "findup-sync": {
3568
+ "version": "0.1.3",
3569
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
3570
+ "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
3571
+ "dev": true,
3572
+ "requires": {
3573
+ "glob": "~3.2.9",
3574
+ "lodash": "~2.4.1"
3575
+ },
3576
+ "dependencies": {
3577
+ "glob": {
3578
+ "version": "3.2.11",
3579
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
3580
+ "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
3581
+ "dev": true,
3582
+ "requires": {
3583
+ "inherits": "2",
3584
+ "minimatch": "0.3"
3585
+ },
3586
+ "dependencies": {
3587
+ "inherits": {
3588
+ "version": "2.0.3",
3589
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
3590
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
3591
+ "dev": true
3592
+ },
3593
+ "minimatch": {
3594
+ "version": "0.3.0",
3595
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
3596
+ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
3597
+ "dev": true,
3598
+ "requires": {
3599
+ "lru-cache": "2",
3600
+ "sigmund": "~1.0.0"
3601
+ },
3602
+ "dependencies": {
3603
+ "lru-cache": {
3604
+ "version": "2.7.3",
3605
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
3606
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
3607
+ "dev": true
3608
+ },
3609
+ "sigmund": {
3610
+ "version": "1.0.1",
3611
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
3612
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
3613
+ "dev": true
3614
+ }
3615
+ }
3616
+ }
3617
+ }
3618
+ },
3619
+ "lodash": {
3620
+ "version": "2.4.2",
3621
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
3622
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
3623
+ "dev": true
3624
+ }
3625
+ }
3626
+ },
3627
+ "getobject": {
3628
+ "version": "0.1.0",
3629
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
3630
+ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
3631
+ "dev": true
3632
+ },
3633
+ "glob": {
3634
+ "version": "3.1.21",
3635
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
3636
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
3637
+ "dev": true,
3638
+ "requires": {
3639
+ "graceful-fs": "~1.2.0",
3640
+ "inherits": "1",
3641
+ "minimatch": "~0.2.11"
3642
+ },
3643
+ "dependencies": {
3644
+ "graceful-fs": {
3645
+ "version": "1.2.3",
3646
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
3647
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
3648
+ "dev": true
3649
+ },
3650
+ "inherits": {
3651
+ "version": "1.0.2",
3652
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
3653
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
3654
+ "dev": true
3655
+ }
3656
+ }
3657
+ },
3658
+ "grunt-legacy-log": {
3659
+ "version": "0.1.3",
3660
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
3661
+ "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
3662
+ "dev": true,
3663
+ "requires": {
3664
+ "colors": "~0.6.2",
3665
+ "grunt-legacy-log-utils": "~0.1.1",
3666
+ "hooker": "~0.2.3",
3667
+ "lodash": "~2.4.1",
3668
+ "underscore.string": "~2.3.3"
3669
+ },
3670
+ "dependencies": {
3671
+ "grunt-legacy-log-utils": {
3672
+ "version": "0.1.1",
3673
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
3674
+ "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
3675
+ "dev": true,
3676
+ "requires": {
3677
+ "colors": "~0.6.2",
3678
+ "lodash": "~2.4.1",
3679
+ "underscore.string": "~2.3.3"
3680
+ }
3681
+ },
3682
+ "lodash": {
3683
+ "version": "2.4.2",
3684
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
3685
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
3686
+ "dev": true
3687
+ },
3688
+ "underscore.string": {
3689
+ "version": "2.3.3",
3690
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
3691
+ "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
3692
+ "dev": true
3693
+ }
3694
+ }
3695
+ },
3696
+ "grunt-legacy-util": {
3697
+ "version": "0.2.0",
3698
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
3699
+ "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
3700
+ "dev": true,
3701
+ "requires": {
3702
+ "async": "~0.1.22",
3703
+ "exit": "~0.1.1",
3704
+ "getobject": "~0.1.0",
3705
+ "hooker": "~0.2.3",
3706
+ "lodash": "~0.9.2",
3707
+ "underscore.string": "~2.2.1",
3708
+ "which": "~1.0.5"
3709
+ }
3710
+ },
3711
+ "hooker": {
3712
+ "version": "0.2.3",
3713
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
3714
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
3715
+ "dev": true
3716
+ },
3717
+ "iconv-lite": {
3718
+ "version": "0.2.11",
3719
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
3720
+ "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
3721
+ "dev": true
3722
+ },
3723
+ "js-yaml": {
3724
+ "version": "2.0.5",
3725
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
3726
+ "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
3727
+ "dev": true,
3728
+ "requires": {
3729
+ "argparse": "~ 0.1.11",
3730
+ "esprima": "~ 1.0.2"
3731
+ },
3732
+ "dependencies": {
3733
+ "argparse": {
3734
+ "version": "0.1.16",
3735
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
3736
+ "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
3737
+ "dev": true,
3738
+ "requires": {
3739
+ "underscore": "~1.7.0",
3740
+ "underscore.string": "~2.4.0"
3741
+ },
3742
+ "dependencies": {
3743
+ "underscore": {
3744
+ "version": "1.7.0",
3745
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
3746
+ "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
3747
+ "dev": true
3748
+ },
3749
+ "underscore.string": {
3750
+ "version": "2.4.0",
3751
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
3752
+ "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
3753
+ "dev": true
3754
+ }
3755
+ }
3756
+ },
3757
+ "esprima": {
3758
+ "version": "1.0.4",
3759
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
3760
+ "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
3761
+ "dev": true
3762
+ }
3763
+ }
3764
+ },
3765
+ "lodash": {
3766
+ "version": "0.9.2",
3767
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
3768
+ "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
3769
+ "dev": true
3770
+ },
3771
+ "minimatch": {
3772
+ "version": "0.2.14",
3773
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
3774
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
3775
+ "dev": true,
3776
+ "requires": {
3777
+ "lru-cache": "2",
3778
+ "sigmund": "~1.0.0"
3779
+ },
3780
+ "dependencies": {
3781
+ "lru-cache": {
3782
+ "version": "2.7.3",
3783
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
3784
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
3785
+ "dev": true
3786
+ },
3787
+ "sigmund": {
3788
+ "version": "1.0.1",
3789
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
3790
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
3791
+ "dev": true
3792
+ }
3793
+ }
3794
+ },
3795
+ "nopt": {
3796
+ "version": "1.0.10",
3797
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
3798
+ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
3799
+ "dev": true,
3800
+ "requires": {
3801
+ "abbrev": "1"
3802
+ },
3803
+ "dependencies": {
3804
+ "abbrev": {
3805
+ "version": "1.0.9",
3806
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
3807
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
3808
+ "dev": true
3809
+ }
3810
+ }
3811
+ },
3812
+ "rimraf": {
3813
+ "version": "2.2.8",
3814
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
3815
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
3816
+ "dev": true
3817
+ },
3818
+ "underscore.string": {
3819
+ "version": "2.2.1",
3820
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
3821
+ "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
3822
+ "dev": true
3823
+ },
3824
+ "which": {
3825
+ "version": "1.0.9",
3826
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
3827
+ "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
3828
+ "dev": true
3829
+ }
3830
+ }
3831
+ },
3832
+ "grunt-contrib-clean": {
3833
+ "version": "0.6.0",
3834
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz",
3835
+ "integrity": "sha1-9TLbpLghJnTHwBPhRr2mY4uQSPY=",
3836
+ "dev": true,
3837
+ "requires": {
3838
+ "rimraf": "~2.2.1"
3839
+ },
3840
+ "dependencies": {
3841
+ "ansi-regex": {
3842
+ "version": "3.0.0",
3843
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
3844
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
3845
+ },
3846
+ "ansi-styles": {
3847
+ "version": "3.2.1",
3848
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
3849
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
3850
+ "requires": {
3851
+ "color-convert": "^1.9.0"
3852
+ }
3853
+ },
3854
+ "chalk": {
3855
+ "version": "2.4.2",
3856
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
3857
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
3858
+ "requires": {
3859
+ "ansi-styles": "^3.2.1",
3860
+ "escape-string-regexp": "^1.0.5",
3861
+ "supports-color": "^5.3.0"
3862
+ }
3863
+ },
3864
+ "rimraf": {
3865
+ "version": "2.2.8",
3866
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
3867
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
3868
+ "dev": true
3869
+ },
3870
+ "strip-ansi": {
3871
+ "version": "4.0.0",
3872
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
3873
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
3874
+ "requires": {
3875
+ "ansi-regex": "^3.0.0"
3876
+ }
3877
+ },
3878
+ "supports-color": {
3879
+ "version": "5.5.0",
3880
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
3881
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
3882
+ "requires": {
3883
+ "has-flag": "^3.0.0"
3884
+ }
3885
+ }
3886
+ }
3887
+ },
3888
+ "grunt-contrib-coffee": {
3889
+ "version": "0.13.0",
3890
+ "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-0.13.0.tgz",
3891
+ "integrity": "sha1-N2RP8Qi7iOmEH+vg7AM3rZPhmU4=",
3892
+ "dev": true,
3893
+ "requires": {
3894
+ "chalk": "^0.5.1",
3895
+ "coffee-script": "~1.9.1",
3896
+ "lodash": "^3.1.0",
3897
+ "uri-path": "0.0.2"
3898
+ },
3899
+ "dependencies": {
3900
+ "chalk": {
3901
+ "version": "0.5.1",
3902
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
3903
+ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
3904
+ "dev": true,
3905
+ "requires": {
3906
+ "ansi-styles": "^1.1.0",
3907
+ "escape-string-regexp": "^1.0.0",
3908
+ "has-ansi": "^0.1.0",
3909
+ "strip-ansi": "^0.3.0",
3910
+ "supports-color": "^0.2.0"
3911
+ },
3912
+ "dependencies": {
3913
+ "ansi-styles": {
3914
+ "version": "1.1.0",
3915
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
3916
+ "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
3917
+ "dev": true
3918
+ },
3919
+ "escape-string-regexp": {
3920
+ "version": "1.0.5",
3921
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3922
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
3923
+ "dev": true
3924
+ },
3925
+ "has-ansi": {
3926
+ "version": "0.1.0",
3927
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
3928
+ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
3929
+ "dev": true,
3930
+ "requires": {
3931
+ "ansi-regex": "^0.2.0"
3932
+ },
3933
+ "dependencies": {
3934
+ "ansi-regex": {
3935
+ "version": "0.2.1",
3936
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
3937
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
3938
+ "dev": true
3939
+ }
3940
+ }
3941
+ },
3942
+ "strip-ansi": {
3943
+ "version": "0.3.0",
3944
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
3945
+ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
3946
+ "dev": true,
3947
+ "requires": {
3948
+ "ansi-regex": "^0.2.1"
3949
+ },
3950
+ "dependencies": {
3951
+ "ansi-regex": {
3952
+ "version": "0.2.1",
3953
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
3954
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
3955
+ "dev": true
3956
+ }
3957
+ }
3958
+ },
3959
+ "supports-color": {
3960
+ "version": "0.2.0",
3961
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
3962
+ "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
3963
+ "dev": true
3964
+ }
3965
+ }
3966
+ },
3967
+ "coffee-script": {
3968
+ "version": "1.9.3",
3969
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.9.3.tgz",
3970
+ "integrity": "sha1-WW5ug/z8tnxZZKtw1ES+/wrASsc=",
3971
+ "dev": true
3972
+ },
3973
+ "lodash": {
3974
+ "version": "3.10.1",
3975
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
3976
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
3977
+ "dev": true
3978
+ },
3979
+ "uri-path": {
3980
+ "version": "0.0.2",
3981
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-0.0.2.tgz",
3982
+ "integrity": "sha1-gD6wHy/rF5J9zOD2GH5yt19T9VQ=",
3983
+ "dev": true
3984
+ }
3985
+ }
3986
+ },
3987
+ "grunt-contrib-sass": {
3988
+ "version": "0.9.2",
3989
+ "resolved": "https://registry.npmjs.org/grunt-contrib-sass/-/grunt-contrib-sass-0.9.2.tgz",
3990
+ "integrity": "sha1-dJ8OeChOkUUsWlf+BE3eNEiVE8Y=",
3991
+ "dev": true,
3992
+ "requires": {
3993
+ "async": "^0.9.0",
3994
+ "chalk": "^0.5.1",
3995
+ "cross-spawn": "^0.2.3",
3996
+ "dargs": "^4.0.0",
3997
+ "which": "^1.0.5"
3998
+ }
3999
+ },
4000
+ "grunt-newer": {
4001
+ "version": "1.1.2",
4002
+ "resolved": "https://registry.npmjs.org/grunt-newer/-/grunt-newer-1.1.2.tgz",
4003
+ "integrity": "sha1-jyXWyUUJDb6OkZzLPnPj9agIJKA=",
4004
+ "dev": true,
4005
+ "requires": {
4006
+ "async": "0.9.0",
4007
+ "rimraf": "2.2.8"
4008
+ },
4009
+ "dependencies": {
4010
+ "async": {
4011
+ "version": "0.9.0",
4012
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz",
4013
+ "integrity": "sha1-rDYTsdqb7RtHUQu0ZRuJMeRxRsc=",
4014
+ "dev": true
4015
+ },
4016
+ "postcss-value-parser": {
4017
+ "version": "4.1.0",
4018
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
4019
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
4020
+ },
4021
+ "rimraf": {
4022
+ "version": "2.2.8",
4023
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
4024
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
4025
+ "dev": true
4026
+ }
4027
+ }
4028
+ },
4029
+ "grunt-notify": {
4030
+ "version": "0.4.5",
4031
+ "resolved": "https://registry.npmjs.org/grunt-notify/-/grunt-notify-0.4.5.tgz",
4032
+ "integrity": "sha1-BSk5kGFhENtrwK0V5sBZL/4YrDE=",
4033
+ "dev": true,
4034
+ "requires": {
4035
+ "semver": "^5.1.0",
4036
+ "stack-parser": "^0.0.1",
4037
+ "which": "^1.2.4"
4038
+ },
4039
+ "dependencies": {
4040
+ "semver": {
4041
+ "version": "5.3.0",
4042
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
4043
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
4044
+ "dev": true
4045
+ },
4046
+ "stack-parser": {
4047
+ "version": "0.0.1",
4048
+ "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz",
4049
+ "integrity": "sha1-fTtjoXiH6eLCv1Xb0zGP40o50ec=",
4050
+ "dev": true
4051
+ },
4052
+ "which": {
4053
+ "version": "1.2.12",
4054
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.12.tgz",
4055
+ "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=",
4056
+ "dev": true,
4057
+ "requires": {
4058
+ "isexe": "^1.1.1"
4059
+ },
4060
+ "dependencies": {
4061
+ "isexe": {
4062
+ "version": "1.1.2",
4063
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz",
4064
+ "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=",
4065
+ "dev": true
4066
+ }
4067
+ }
4068
+ }
4069
+ }
4070
+ },
4071
+ "grunt-potomo": {
4072
+ "version": "3.5.0",
4073
+ "resolved": "https://registry.npmjs.org/grunt-potomo/-/grunt-potomo-3.5.0.tgz",
4074
+ "integrity": "sha1-WtjG9+djrVtRg55cbTI1gGLHN5U=",
4075
+ "dev": true,
4076
+ "requires": {
4077
+ "shelljs": "~0.7.5"
4078
+ },
4079
+ "dependencies": {
4080
+ "shelljs": {
4081
+ "version": "0.7.6",
4082
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz",
4083
+ "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=",
4084
+ "dev": true,
4085
+ "requires": {
4086
+ "glob": "^7.0.0",
4087
+ "interpret": "^1.0.0",
4088
+ "rechoir": "^0.6.2"
4089
+ },
4090
+ "dependencies": {
4091
+ "glob": {
4092
+ "version": "7.1.1",
4093
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
4094
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
4095
+ "dev": true,
4096
+ "requires": {
4097
+ "fs.realpath": "^1.0.0",
4098
+ "inflight": "^1.0.4",
4099
+ "inherits": "2",
4100
+ "minimatch": "^3.0.2",
4101
+ "once": "^1.3.0",
4102
+ "path-is-absolute": "^1.0.0"
4103
+ },
4104
+ "dependencies": {
4105
+ "fs.realpath": {
4106
+ "version": "1.0.0",
4107
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
4108
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
4109
+ "dev": true
4110
+ },
4111
+ "inflight": {
4112
+ "version": "1.0.6",
4113
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4114
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4115
+ "dev": true,
4116
+ "requires": {
4117
+ "once": "^1.3.0",
4118
+ "wrappy": "1"
4119
+ },
4120
+ "dependencies": {
4121
+ "wrappy": {
4122
+ "version": "1.0.2",
4123
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
4124
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
4125
+ "dev": true
4126
+ }
4127
+ }
4128
+ },
4129
+ "inherits": {
4130
+ "version": "2.0.3",
4131
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
4132
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
4133
+ "dev": true
4134
+ },
4135
+ "minimatch": {
4136
+ "version": "3.0.3",
4137
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
4138
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
4139
+ "dev": true,
4140
+ "requires": {
4141
+ "brace-expansion": "^1.0.0"
4142
+ },
4143
+ "dependencies": {
4144
+ "brace-expansion": {
4145
+ "version": "1.1.6",
4146
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
4147
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
4148
+ "dev": true,
4149
+ "requires": {
4150
+ "balanced-match": "^0.4.1",
4151
+ "concat-map": "0.0.1"
4152
+ },
4153
+ "dependencies": {
4154
+ "balanced-match": {
4155
+ "version": "0.4.2",
4156
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
4157
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
4158
+ "dev": true
4159
+ },
4160
+ "concat-map": {
4161
+ "version": "0.0.1",
4162
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
4163
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
4164
+ "dev": true
4165
+ }
4166
+ }
4167
+ }
4168
+ }
4169
+ },
4170
+ "once": {
4171
+ "version": "1.4.0",
4172
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
4173
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
4174
+ "dev": true,
4175
+ "requires": {
4176
+ "wrappy": "1"
4177
+ },
4178
+ "dependencies": {
4179
+ "wrappy": {
4180
+ "version": "1.0.2",
4181
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
4182
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
4183
+ "dev": true
4184
+ }
4185
+ }
4186
+ },
4187
+ "path-is-absolute": {
4188
+ "version": "1.0.1",
4189
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
4190
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
4191
+ "dev": true
4192
+ }
4193
+ }
4194
+ },
4195
+ "interpret": {
4196
+ "version": "1.0.1",
4197
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz",
4198
+ "integrity": "sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw=",
4199
+ "dev": true
4200
+ },
4201
+ "rechoir": {
4202
+ "version": "0.6.2",
4203
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
4204
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
4205
+ "dev": true,
4206
+ "requires": {
4207
+ "resolve": "^1.1.6"
4208
+ },
4209
+ "dependencies": {
4210
+ "resolve": {
4211
+ "version": "1.2.0",
4212
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz",
4213
+ "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=",
4214
+ "dev": true
4215
+ }
4216
+ }
4217
+ }
4218
+ }
4219
+ }
4220
+ }
4221
+ },
4222
+ "grunt-shell": {
4223
+ "version": "1.3.1",
4224
+ "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-1.3.1.tgz",
4225
+ "integrity": "sha1-XivuzQXV03h/pAECjVcz1dQ7m9E=",
4226
+ "dev": true,
4227
+ "requires": {
4228
+ "chalk": "^1.0.0",
4229
+ "npm-run-path": "^1.0.0",
4230
+ "object-assign": "^4.0.0"
4231
+ },
4232
+ "dependencies": {
4233
+ "chalk": {
4234
+ "version": "1.1.3",
4235
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
4236
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
4237
+ "dev": true,
4238
+ "requires": {
4239
+ "ansi-styles": "^2.2.1",
4240
+ "escape-string-regexp": "^1.0.2",
4241
+ "has-ansi": "^2.0.0",
4242
+ "strip-ansi": "^3.0.0",
4243
+ "supports-color": "^2.0.0"
4244
+ },
4245
+ "dependencies": {
4246
+ "ansi-styles": {
4247
+ "version": "2.2.1",
4248
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
4249
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
4250
+ "dev": true
4251
+ },
4252
+ "escape-string-regexp": {
4253
+ "version": "1.0.5",
4254
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
4255
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
4256
+ "dev": true
4257
+ },
4258
+ "has-ansi": {
4259
+ "version": "2.0.0",
4260
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
4261
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
4262
+ "dev": true,
4263
+ "requires": {
4264
+ "ansi-regex": "^2.0.0"
4265
+ },
4266
+ "dependencies": {
4267
+ "ansi-regex": {
4268
+ "version": "2.1.1",
4269
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
4270
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
4271
+ "dev": true
4272
+ }
4273
+ }
4274
+ },
4275
+ "strip-ansi": {
4276
+ "version": "3.0.1",
4277
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
4278
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
4279
+ "dev": true,
4280
+ "requires": {
4281
+ "ansi-regex": "^2.0.0"
4282
+ },
4283
+ "dependencies": {
4284
+ "ansi-regex": {
4285
+ "version": "2.1.1",
4286
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
4287
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
4288
+ "dev": true
4289
+ }
4290
+ }
4291
+ },
4292
+ "supports-color": {
4293
+ "version": "2.0.0",
4294
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
4295
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
4296
+ "dev": true
4297
+ }
4298
+ }
4299
+ },
4300
+ "npm-run-path": {
4301
+ "version": "1.0.0",
4302
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
4303
+ "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
4304
+ "dev": true,
4305
+ "requires": {
4306
+ "path-key": "^1.0.0"
4307
+ },
4308
+ "dependencies": {
4309
+ "path-key": {
4310
+ "version": "1.0.0",
4311
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz",
4312
+ "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=",
4313
+ "dev": true
4314
+ }
4315
+ }
4316
+ },
4317
+ "object-assign": {
4318
+ "version": "4.1.1",
4319
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
4320
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
4321
+ "dev": true
4322
+ }
4323
+ }
4324
+ },
4325
+ "grunt-text-replace": {
4326
+ "version": "0.4.0",
4327
+ "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz",
4328
+ "integrity": "sha1-252c5Z4v5J2id+nbwZXD4Rz7FsI=",
4329
+ "dev": true
4330
+ },
4331
+ "grunt-wp-i18n": {
4332
+ "version": "0.5.4",
4333
+ "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-0.5.4.tgz",
4334
+ "integrity": "sha1-hynlrU9LIxJpch8xcWVNLGKVVJI=",
4335
+ "dev": true,
4336
+ "requires": {
4337
+ "async": "~0.9.0",
4338
+ "gettext-parser": "~1.1.0",
4339
+ "grunt": "~0.4.5",
4340
+ "underscore": "~1.8.2",
4341
+ "underscore.string": "~3.0.3"
4342
+ },
4343
+ "dependencies": {
4344
+ "async": {
4345
+ "version": "0.9.2",
4346
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
4347
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
4348
+ "dev": true
4349
+ },
4350
+ "gettext-parser": {
4351
+ "version": "1.1.2",
4352
+ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.1.2.tgz",
4353
+ "integrity": "sha1-zw8MnJCJrtsO5RSZKRg+ncQ1hKc=",
4354
+ "dev": true,
4355
+ "requires": {
4356
+ "encoding": "^0.1.11"
4357
+ },
4358
+ "dependencies": {
4359
+ "encoding": {
4360
+ "version": "0.1.12",
4361
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
4362
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
4363
+ "dev": true,
4364
+ "requires": {
4365
+ "iconv-lite": "~0.4.13"
4366
+ },
4367
+ "dependencies": {
4368
+ "iconv-lite": {
4369
+ "version": "0.4.15",
4370
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
4371
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
4372
+ "dev": true
4373
+ }
4374
+ }
4375
+ }
4376
+ }
4377
+ },
4378
+ "underscore.string": {
4379
+ "version": "3.0.3",
4380
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.0.3.tgz",
4381
+ "integrity": "sha1-Rhe4waJQz25QZPu7Nj0PqWzxRVI=",
4382
+ "dev": true
4383
+ }
4384
+ }
4385
+ },
4386
+ "har-schema": {
4387
+ "version": "2.0.0",
4388
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
4389
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
4390
+ "dev": true
4391
+ },
4392
+ "har-validator": {
4393
+ "version": "5.1.5",
4394
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
4395
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
4396
+ "dev": true,
4397
+ "requires": {
4398
+ "ajv": "^6.12.3",
4399
+ "har-schema": "^2.0.0"
4400
+ }
4401
+ },
4402
+ "has": {
4403
+ "version": "1.0.3",
4404
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
4405
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
4406
+ "dev": true,
4407
+ "requires": {
4408
+ "function-bind": "^1.1.1"
4409
+ }
4410
+ },
4411
+ "has-ansi": {
4412
+ "version": "0.1.0",
4413
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
4414
+ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
4415
+ "dev": true,
4416
+ "requires": {
4417
+ "ansi-regex": "^0.2.0"
4418
+ }
4419
+ },
4420
+ "has-flag": {
4421
+ "version": "3.0.0",
4422
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
4423
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
4424
+ },
4425
+ "has-symbols": {
4426
+ "version": "1.0.1",
4427
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
4428
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
4429
+ "dev": true
4430
+ },
4431
+ "has-value": {
4432
+ "version": "1.0.0",
4433
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
4434
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
4435
+ "dev": true,
4436
+ "requires": {
4437
+ "get-value": "^2.0.6",
4438
+ "has-values": "^1.0.0",
4439
+ "isobject": "^3.0.0"
4440
+ }
4441
+ },
4442
+ "has-values": {
4443
+ "version": "1.0.0",
4444
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
4445
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
4446
+ "dev": true,
4447
+ "requires": {
4448
+ "is-number": "^3.0.0",
4449
+ "kind-of": "^4.0.0"
4450
+ },
4451
+ "dependencies": {
4452
+ "kind-of": {
4453
+ "version": "4.0.0",
4454
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
4455
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
4456
+ "dev": true,
4457
+ "requires": {
4458
+ "is-buffer": "^1.1.5"
4459
+ }
4460
+ }
4461
+ }
4462
+ },
4463
+ "hash-base": {
4464
+ "version": "3.1.0",
4465
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
4466
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
4467
+ "dev": true,
4468
+ "requires": {
4469
+ "inherits": "^2.0.4",
4470
+ "readable-stream": "^3.6.0",
4471
+ "safe-buffer": "^5.2.0"
4472
+ },
4473
+ "dependencies": {
4474
+ "readable-stream": {
4475
+ "version": "3.6.0",
4476
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
4477
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
4478
+ "dev": true,
4479
+ "requires": {
4480
+ "inherits": "^2.0.3",
4481
+ "string_decoder": "^1.1.1",
4482
+ "util-deprecate": "^1.0.1"
4483
+ }
4484
+ }
4485
+ }
4486
+ },
4487
+ "hash.js": {
4488
+ "version": "1.1.7",
4489
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
4490
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
4491
+ "dev": true,
4492
+ "requires": {
4493
+ "inherits": "^2.0.3",
4494
+ "minimalistic-assert": "^1.0.1"
4495
+ }
4496
+ },
4497
+ "hex-color-regex": {
4498
+ "version": "1.1.0",
4499
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
4500
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
4501
+ "dev": true
4502
+ },
4503
+ "hmac-drbg": {
4504
+ "version": "1.0.1",
4505
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
4506
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
4507
+ "dev": true,
4508
+ "requires": {
4509
+ "hash.js": "^1.0.3",
4510
+ "minimalistic-assert": "^1.0.0",
4511
+ "minimalistic-crypto-utils": "^1.0.1"
4512
+ }
4513
+ },
4514
+ "hsl-regex": {
4515
+ "version": "1.0.0",
4516
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
4517
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
4518
+ "dev": true
4519
+ },
4520
+ "hsla-regex": {
4521
+ "version": "1.0.0",
4522
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
4523
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
4524
+ "dev": true
4525
+ },
4526
+ "html-comment-regex": {
4527
+ "version": "1.1.2",
4528
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
4529
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
4530
+ "dev": true
4531
+ },
4532
+ "html-encoding-sniffer": {
4533
+ "version": "1.0.2",
4534
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
4535
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
4536
+ "dev": true,
4537
+ "requires": {
4538
+ "whatwg-encoding": "^1.0.1"
4539
+ }
4540
+ },
4541
+ "html-tags": {
4542
+ "version": "1.2.0",
4543
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz",
4544
+ "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=",
4545
+ "dev": true
4546
+ },
4547
+ "htmlnano": {
4548
+ "version": "0.2.6",
4549
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.6.tgz",
4550
+ "integrity": "sha512-HUY/99maFsWX2LRoGJpZ/8QRLCkyY0UU1El3wgLLFAHQlD3mCxCJJNcWJk5SBqaU49MLhIWVDW6cGBeuemvaPQ==",
4551
+ "dev": true,
4552
+ "requires": {
4553
+ "cssnano": "^4.1.10",
4554
+ "normalize-html-whitespace": "^1.0.0",
4555
+ "posthtml": "^0.13.1",
4556
+ "posthtml-render": "^1.2.2",
4557
+ "purgecss": "^2.3.0",
4558
+ "svgo": "^1.3.2",
4559
+ "terser": "^4.8.0",
4560
+ "uncss": "^0.17.3"
4561
+ },
4562
+ "dependencies": {
4563
+ "posthtml": {
4564
+ "version": "0.13.4",
4565
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.13.4.tgz",
4566
+ "integrity": "sha512-i2oTo/+dwXGC6zaAQSF6WZEQSbEqu10hsvg01DWzGAfZmy31Iiy9ktPh9nnXDfZiYytjxTIvxoK4TI0uk4QWpw==",
4567
+ "dev": true,
4568
+ "requires": {
4569
+ "posthtml-parser": "^0.5.0",
4570
+ "posthtml-render": "^1.2.3"
4571
+ }
4572
+ },
4573
+ "posthtml-parser": {
4574
+ "version": "0.5.0",
4575
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.5.0.tgz",
4576
+ "integrity": "sha512-BsZFAqOeX9lkJJPKG2JmGgtm6t++WibU7FeS40FNNGZ1KS2szRSRQ8Wr2JLvikDgAecrQ/9V4sjugTAin2+KVw==",
4577
+ "dev": true,
4578
+ "requires": {
4579
+ "htmlparser2": "^3.9.2"
4580
+ }
4581
+ },
4582
+ "source-map": {
4583
+ "version": "0.6.1",
4584
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
4585
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
4586
+ "dev": true
4587
+ },
4588
+ "terser": {
4589
+ "version": "4.8.0",
4590
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
4591
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
4592
+ "dev": true,
4593
+ "requires": {
4594
+ "commander": "^2.20.0",
4595
+ "source-map": "~0.6.1",
4596
+ "source-map-support": "~0.5.12"
4597
+ }
4598
+ }
4599
+ }
4600
+ },
4601
+ "htmlparser2": {
4602
+ "version": "3.10.1",
4603
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
4604
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
4605
+ "dev": true,
4606
+ "requires": {
4607
+ "domelementtype": "^1.3.1",
4608
+ "domhandler": "^2.3.0",
4609
+ "domutils": "^1.5.1",
4610
+ "entities": "^1.1.1",
4611
+ "inherits": "^2.0.1",
4612
+ "readable-stream": "^3.1.1"
4613
+ },
4614
+ "dependencies": {
4615
+ "readable-stream": {
4616
+ "version": "3.6.0",
4617
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
4618
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
4619
+ "dev": true,
4620
+ "requires": {
4621
+ "inherits": "^2.0.3",
4622
+ "string_decoder": "^1.1.1",
4623
+ "util-deprecate": "^1.0.1"
4624
+ }
4625
+ }
4626
+ }
4627
+ },
4628
+ "http-errors": {
4629
+ "version": "1.7.3",
4630
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
4631
+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
4632
+ "dev": true,
4633
+ "requires": {
4634
+ "depd": "~1.1.2",
4635
+ "inherits": "2.0.4",
4636
+ "setprototypeof": "1.1.1",
4637
+ "statuses": ">= 1.5.0 < 2",
4638
+ "toidentifier": "1.0.0"
4639
+ }
4640
+ },
4641
+ "http-signature": {
4642
+ "version": "1.2.0",
4643
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
4644
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
4645
+ "dev": true,
4646
+ "requires": {
4647
+ "assert-plus": "^1.0.0",
4648
+ "jsprim": "^1.2.2",
4649
+ "sshpk": "^1.7.0"
4650
+ }
4651
+ },
4652
+ "https-browserify": {
4653
+ "version": "1.0.0",
4654
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
4655
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
4656
+ "dev": true
4657
+ },
4658
+ "iconv-lite": {
4659
+ "version": "0.4.24",
4660
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
4661
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
4662
+ "dev": true,
4663
+ "requires": {
4664
+ "safer-buffer": ">= 2.1.2 < 3"
4665
+ },
4666
+ "dependencies": {
4667
+ "bn.js": {
4668
+ "version": "4.11.9",
4669
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
4670
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
4671
+ }
4672
+ }
4673
+ },
4674
+ "icss-replace-symbols": {
4675
+ "version": "1.1.0",
4676
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
4677
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
4678
+ "dev": true
4679
+ },
4680
+ "ieee754": {
4681
+ "version": "1.1.13",
4682
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
4683
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
4684
+ "dev": true
4685
+ },
4686
+ "import-fresh": {
4687
+ "version": "2.0.0",
4688
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
4689
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
4690
+ "dev": true,
4691
+ "requires": {
4692
+ "caller-path": "^2.0.0",
4693
+ "resolve-from": "^3.0.0"
4694
+ }
4695
+ },
4696
+ "indexes-of": {
4697
+ "version": "1.0.1",
4698
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
4699
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
4700
+ "dev": true
4701
+ },
4702
+ "inflight": {
4703
+ "version": "1.0.6",
4704
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4705
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4706
+ "dev": true,
4707
+ "requires": {
4708
+ "once": "^1.3.0",
4709
+ "wrappy": "1"
4710
+ }
4711
+ },
4712
+ "inherits": {
4713
+ "version": "2.0.4",
4714
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4715
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
4716
+ "dev": true
4717
+ },
4718
+ "is-absolute-url": {
4719
+ "version": "2.1.0",
4720
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
4721
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
4722
+ "dev": true
4723
+ },
4724
+ "is-accessor-descriptor": {
4725
+ "version": "0.1.6",
4726
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
4727
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
4728
+ "dev": true,
4729
+ "requires": {
4730
+ "kind-of": "^3.0.2"
4731
+ }
4732
+ },
4733
+ "is-arrayish": {
4734
+ "version": "0.2.1",
4735
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
4736
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
4737
+ "dev": true
4738
+ },
4739
+ "is-binary-path": {
4740
+ "version": "1.0.1",
4741
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
4742
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
4743
+ "dev": true,
4744
+ "requires": {
4745
+ "binary-extensions": "^1.0.0"
4746
+ }
4747
+ },
4748
+ "is-buffer": {
4749
+ "version": "1.1.6",
4750
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
4751
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
4752
+ "dev": true
4753
+ },
4754
+ "is-callable": {
4755
+ "version": "1.2.2",
4756
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
4757
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
4758
+ "dev": true
4759
+ },
4760
+ "is-color-stop": {
4761
+ "version": "1.1.0",
4762
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
4763
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
4764
+ "dev": true,
4765
+ "requires": {
4766
+ "css-color-names": "^0.0.4",
4767
+ "hex-color-regex": "^1.1.0",
4768
+ "hsl-regex": "^1.0.0",
4769
+ "hsla-regex": "^1.0.0",
4770
+ "rgb-regex": "^1.0.1",
4771
+ "rgba-regex": "^1.0.0"
4772
+ }
4773
+ },
4774
+ "is-core-module": {
4775
+ "version": "2.0.0",
4776
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz",
4777
+ "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==",
4778
+ "dev": true,
4779
+ "requires": {
4780
+ "has": "^1.0.3"
4781
+ }
4782
+ },
4783
+ "is-data-descriptor": {
4784
+ "version": "0.1.4",
4785
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
4786
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
4787
+ "dev": true,
4788
+ "requires": {
4789
+ "kind-of": "^3.0.2"
4790
+ }
4791
+ },
4792
+ "is-date-object": {
4793
+ "version": "1.0.2",
4794
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
4795
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
4796
+ "dev": true
4797
+ },
4798
+ "is-descriptor": {
4799
+ "version": "0.1.6",
4800
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
4801
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
4802
+ "dev": true,
4803
+ "requires": {
4804
+ "is-accessor-descriptor": "^0.1.6",
4805
+ "is-data-descriptor": "^0.1.4",
4806
+ "kind-of": "^5.0.0"
4807
+ },
4808
+ "dependencies": {
4809
+ "kind-of": {
4810
+ "version": "5.1.0",
4811
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
4812
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
4813
+ "dev": true
4814
+ }
4815
+ }
4816
+ },
4817
+ "is-directory": {
4818
+ "version": "0.3.1",
4819
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
4820
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
4821
+ "dev": true
4822
+ },
4823
+ "is-extendable": {
4824
+ "version": "0.1.1",
4825
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
4826
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
4827
+ "dev": true
4828
+ },
4829
+ "is-extglob": {
4830
+ "version": "2.1.1",
4831
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
4832
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
4833
+ "dev": true
4834
+ },
4835
+ "is-glob": {
4836
+ "version": "4.0.1",
4837
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
4838
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
4839
+ "dev": true,
4840
+ "requires": {
4841
+ "is-extglob": "^2.1.1"
4842
+ }
4843
+ },
4844
+ "is-html": {
4845
+ "version": "1.1.0",
4846
+ "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz",
4847
+ "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=",
4848
+ "dev": true,
4849
+ "requires": {
4850
+ "html-tags": "^1.0.0"
4851
+ }
4852
+ },
4853
+ "is-negative-zero": {
4854
+ "version": "2.0.0",
4855
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
4856
+ "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
4857
+ "dev": true
4858
+ },
4859
+ "is-number": {
4860
+ "version": "3.0.0",
4861
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
4862
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
4863
+ "dev": true,
4864
+ "requires": {
4865
+ "kind-of": "^3.0.2"
4866
+ }
4867
+ },
4868
+ "is-obj": {
4869
+ "version": "2.0.0",
4870
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
4871
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
4872
+ "dev": true
4873
+ },
4874
+ "is-plain-object": {
4875
+ "version": "2.0.4",
4876
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
4877
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
4878
+ "dev": true,
4879
+ "requires": {
4880
+ "isobject": "^3.0.1"
4881
+ }
4882
+ },
4883
+ "is-regex": {
4884
+ "version": "1.1.1",
4885
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
4886
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
4887
+ "dev": true,
4888
+ "requires": {
4889
+ "has-symbols": "^1.0.1"
4890
+ }
4891
+ },
4892
+ "is-resolvable": {
4893
+ "version": "1.1.0",
4894
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
4895
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
4896
+ "dev": true
4897
+ },
4898
+ "is-svg": {
4899
+ "version": "3.0.0",
4900
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
4901
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
4902
+ "dev": true,
4903
+ "requires": {
4904
+ "html-comment-regex": "^1.1.0"
4905
+ }
4906
+ },
4907
+ "is-symbol": {
4908
+ "version": "1.0.3",
4909
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
4910
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
4911
+ "dev": true,
4912
+ "requires": {
4913
+ "has-symbols": "^1.0.1"
4914
+ }
4915
+ },
4916
+ "is-typedarray": {
4917
+ "version": "1.0.0",
4918
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
4919
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
4920
+ "dev": true
4921
+ },
4922
+ "is-url": {
4923
+ "version": "1.2.4",
4924
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
4925
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
4926
+ "dev": true
4927
+ },
4928
+ "is-windows": {
4929
+ "version": "1.0.2",
4930
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
4931
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
4932
+ "dev": true
4933
+ },
4934
+ "is-wsl": {
4935
+ "version": "1.1.0",
4936
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
4937
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
4938
+ "dev": true
4939
+ },
4940
+ "isarray": {
4941
+ "version": "1.0.0",
4942
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
4943
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
4944
+ "dev": true
4945
+ },
4946
+ "isexe": {
4947
+ "version": "2.0.0",
4948
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4949
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
4950
+ "dev": true
4951
+ },
4952
+ "isobject": {
4953
+ "version": "3.0.1",
4954
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
4955
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
4956
+ "dev": true
4957
+ },
4958
+ "isstream": {
4959
+ "version": "0.1.2",
4960
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
4961
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
4962
+ "dev": true
4963
+ },
4964
+ "js-tokens": {
4965
+ "version": "4.0.0",
4966
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
4967
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
4968
+ "dev": true
4969
+ },
4970
+ "js-yaml": {
4971
+ "version": "3.14.0",
4972
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
4973
+ "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
4974
+ "dev": true,
4975
+ "requires": {
4976
+ "argparse": "^1.0.7",
4977
+ "esprima": "^4.0.0"
4978
+ },
4979
+ "dependencies": {
4980
+ "esprima": {
4981
+ "version": "4.0.1",
4982
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
4983
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
4984
+ "dev": true
4985
+ }
4986
+ }
4987
+ },
4988
+ "jsbn": {
4989
+ "version": "0.1.1",
4990
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
4991
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
4992
+ "dev": true
4993
+ },
4994
+ "jsdom": {
4995
+ "version": "14.1.0",
4996
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz",
4997
+ "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==",
4998
+ "dev": true,
4999
+ "requires": {
5000
+ "abab": "^2.0.0",
5001
+ "acorn": "^6.0.4",
5002
+ "acorn-globals": "^4.3.0",
5003
+ "array-equal": "^1.0.0",
5004
+ "cssom": "^0.3.4",
5005
+ "cssstyle": "^1.1.1",
5006
+ "data-urls": "^1.1.0",
5007
+ "domexception": "^1.0.1",
5008
+ "escodegen": "^1.11.0",
5009
+ "html-encoding-sniffer": "^1.0.2",
5010
+ "nwsapi": "^2.1.3",
5011
+ "parse5": "5.1.0",
5012
+ "pn": "^1.1.0",
5013
+ "request": "^2.88.0",
5014
+ "request-promise-native": "^1.0.5",
5015
+ "saxes": "^3.1.9",
5016
+ "symbol-tree": "^3.2.2",
5017
+ "tough-cookie": "^2.5.0",
5018
+ "w3c-hr-time": "^1.0.1",
5019
+ "w3c-xmlserializer": "^1.1.2",
5020
+ "webidl-conversions": "^4.0.2",
5021
+ "whatwg-encoding": "^1.0.5",
5022
+ "whatwg-mimetype": "^2.3.0",
5023
+ "whatwg-url": "^7.0.0",
5024
+ "ws": "^6.1.2",
5025
+ "xml-name-validator": "^3.0.0"
5026
+ },
5027
+ "dependencies": {
5028
+ "acorn": {
5029
+ "version": "6.4.2",
5030
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
5031
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
5032
+ "dev": true
5033
+ },
5034
+ "escodegen": {
5035
+ "version": "1.14.3",
5036
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
5037
+ "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
5038
+ "dev": true,
5039
+ "requires": {
5040
+ "esprima": "^4.0.1",
5041
+ "estraverse": "^4.2.0",
5042
+ "esutils": "^2.0.2",
5043
+ "optionator": "^0.8.1",
5044
+ "source-map": "~0.6.1"
5045
+ }
5046
+ },
5047
+ "esprima": {
5048
+ "version": "4.0.1",
5049
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
5050
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
5051
+ "dev": true
5052
+ },
5053
+ "source-map": {
5054
+ "version": "0.6.1",
5055
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
5056
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
5057
+ "dev": true,
5058
+ "optional": true
5059
+ },
5060
+ "ws": {
5061
+ "version": "6.2.1",
5062
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
5063
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
5064
+ "dev": true,
5065
+ "requires": {
5066
+ "async-limiter": "~1.0.0"
5067
+ }
5068
+ }
5069
+ }
5070
+ },
5071
+ "jsesc": {
5072
+ "version": "2.5.2",
5073
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
5074
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
5075
+ "dev": true
5076
+ },
5077
+ "json-parse-better-errors": {
5078
+ "version": "1.0.2",
5079
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
5080
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
5081
+ "dev": true
5082
+ },
5083
+ "json-schema": {
5084
+ "version": "0.2.3",
5085
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
5086
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
5087
+ "dev": true
5088
+ },
5089
+ "json-schema-traverse": {
5090
+ "version": "0.4.1",
5091
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
5092
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
5093
+ "dev": true
5094
+ },
5095
+ "json-stringify-safe": {
5096
+ "version": "5.0.1",
5097
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
5098
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
5099
+ "dev": true
5100
+ },
5101
+ "json5": {
5102
+ "version": "2.1.3",
5103
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
5104
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
5105
+ "dev": true,
5106
+ "requires": {
5107
+ "minimist": "^1.2.5"
5108
+ }
5109
+ },
5110
+ "jsprim": {
5111
+ "version": "1.4.1",
5112
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
5113
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
5114
+ "dev": true,
5115
+ "requires": {
5116
+ "assert-plus": "1.0.0",
5117
+ "extsprintf": "1.3.0",
5118
+ "json-schema": "0.2.3",
5119
+ "verror": "1.10.0"
5120
+ }
5121
+ },
5122
+ "kind-of": {
5123
+ "version": "3.2.2",
5124
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
5125
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
5126
+ "dev": true,
5127
+ "requires": {
5128
+ "is-buffer": "^1.1.5"
5129
+ }
5130
+ },
5131
+ "levn": {
5132
+ "version": "0.3.0",
5133
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
5134
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
5135
+ "dev": true,
5136
+ "requires": {
5137
+ "prelude-ls": "~1.1.2",
5138
+ "type-check": "~0.3.2"
5139
+ }
5140
+ },
5141
+ "load-grunt-tasks": {
5142
+ "version": "3.2.0",
5143
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.2.0.tgz",
5144
+ "integrity": "sha1-Jf5+QUugZFp1K7BvUkkbQiMyA28=",
5145
+ "dev": true,
5146
+ "requires": {
5147
+ "findup-sync": "^0.2.1",
5148
+ "multimatch": "^2.0.0"
5149
+ },
5150
+ "dependencies": {
5151
+ "findup-sync": {
5152
+ "version": "0.2.1",
5153
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.2.1.tgz",
5154
+ "integrity": "sha1-4KkKRQB1xJRm7lE3MgV1FLgeh4w=",
5155
+ "dev": true,
5156
+ "requires": {
5157
+ "glob": "~4.3.0"
5158
+ },
5159
+ "dependencies": {
5160
+ "glob": {
5161
+ "version": "4.3.5",
5162
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz",
5163
+ "integrity": "sha1-gPuwjKVA8jiszl0R0em8QedRc9M=",
5164
+ "dev": true,
5165
+ "requires": {
5166
+ "inflight": "^1.0.4",
5167
+ "inherits": "2",
5168
+ "minimatch": "^2.0.1",
5169
+ "once": "^1.3.0"
5170
+ },
5171
+ "dependencies": {
5172
+ "inflight": {
5173
+ "version": "1.0.6",
5174
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
5175
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
5176
+ "dev": true,
5177
+ "requires": {
5178
+ "once": "^1.3.0",
5179
+ "wrappy": "1"
5180
+ },
5181
+ "dependencies": {
5182
+ "wrappy": {
5183
+ "version": "1.0.2",
5184
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5185
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5186
+ "dev": true
5187
+ }
5188
+ }
5189
+ },
5190
+ "inherits": {
5191
+ "version": "2.0.3",
5192
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
5193
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
5194
+ "dev": true
5195
+ },
5196
+ "minimatch": {
5197
+ "version": "2.0.10",
5198
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
5199
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
5200
+ "dev": true,
5201
+ "requires": {
5202
+ "brace-expansion": "^1.0.0"
5203
+ },
5204
+ "dependencies": {
5205
+ "brace-expansion": {
5206
+ "version": "1.1.6",
5207
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
5208
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
5209
+ "dev": true,
5210
+ "requires": {
5211
+ "balanced-match": "^0.4.1",
5212
+ "concat-map": "0.0.1"
5213
+ },
5214
+ "dependencies": {
5215
+ "balanced-match": {
5216
+ "version": "0.4.2",
5217
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
5218
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
5219
+ "dev": true
5220
+ },
5221
+ "concat-map": {
5222
+ "version": "0.0.1",
5223
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
5224
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
5225
+ "dev": true
5226
+ }
5227
+ }
5228
+ }
5229
+ }
5230
+ },
5231
+ "once": {
5232
+ "version": "1.4.0",
5233
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5234
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5235
+ "dev": true,
5236
+ "requires": {
5237
+ "wrappy": "1"
5238
+ },
5239
+ "dependencies": {
5240
+ "wrappy": {
5241
+ "version": "1.0.2",
5242
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5243
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5244
+ "dev": true
5245
+ }
5246
+ }
5247
+ }
5248
+ }
5249
+ }
5250
+ }
5251
+ },
5252
+ "multimatch": {
5253
+ "version": "2.1.0",
5254
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
5255
+ "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
5256
+ "dev": true,
5257
+ "requires": {
5258
+ "array-differ": "^1.0.0",
5259
+ "array-union": "^1.0.1",
5260
+ "arrify": "^1.0.0",
5261
+ "minimatch": "^3.0.0"
5262
+ },
5263
+ "dependencies": {
5264
+ "array-differ": {
5265
+ "version": "1.0.0",
5266
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
5267
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
5268
+ "dev": true
5269
+ },
5270
+ "array-union": {
5271
+ "version": "1.0.2",
5272
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
5273
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
5274
+ "dev": true,
5275
+ "requires": {
5276
+ "array-uniq": "^1.0.1"
5277
+ },
5278
+ "dependencies": {
5279
+ "array-uniq": {
5280
+ "version": "1.0.3",
5281
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
5282
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
5283
+ "dev": true
5284
+ }
5285
+ }
5286
+ },
5287
+ "arrify": {
5288
+ "version": "1.0.1",
5289
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
5290
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
5291
+ "dev": true
5292
+ },
5293
+ "minimatch": {
5294
+ "version": "3.0.3",
5295
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
5296
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
5297
+ "dev": true,
5298
+ "requires": {
5299
+ "brace-expansion": "^1.0.0"
5300
+ },
5301
+ "dependencies": {
5302
+ "brace-expansion": {
5303
+ "version": "1.1.6",
5304
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
5305
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
5306
+ "dev": true,
5307
+ "requires": {
5308
+ "balanced-match": "^0.4.1",
5309
+ "concat-map": "0.0.1"
5310
+ },
5311
+ "dependencies": {
5312
+ "balanced-match": {
5313
+ "version": "0.4.2",
5314
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
5315
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
5316
+ "dev": true
5317
+ },
5318
+ "concat-map": {
5319
+ "version": "0.0.1",
5320
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
5321
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
5322
+ "dev": true
5323
+ }
5324
+ }
5325
+ }
5326
+ }
5327
+ }
5328
+ }
5329
+ }
5330
+ }
5331
+ },
5332
+ "lodash": {
5333
+ "version": "4.17.20",
5334
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
5335
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
5336
+ "dev": true
5337
+ },
5338
+ "lodash.clone": {
5339
+ "version": "4.5.0",
5340
+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
5341
+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
5342
+ "dev": true
5343
+ },
5344
+ "lodash.memoize": {
5345
+ "version": "4.1.2",
5346
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
5347
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
5348
+ "dev": true
5349
+ },
5350
+ "lodash.sortby": {
5351
+ "version": "4.7.0",
5352
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
5353
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
5354
+ "dev": true
5355
+ },
5356
+ "lodash.uniq": {
5357
+ "version": "4.5.0",
5358
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
5359
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
5360
+ "dev": true
5361
+ },
5362
+ "log-symbols": {
5363
+ "version": "2.2.0",
5364
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
5365
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
5366
+ "dev": true,
5367
+ "requires": {
5368
+ "chalk": "^2.0.1"
5369
+ },
5370
+ "dependencies": {
5371
+ "ansi-styles": {
5372
+ "version": "3.2.1",
5373
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
5374
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
5375
+ "dev": true,
5376
+ "requires": {
5377
+ "color-convert": "^1.9.0"
5378
+ }
5379
+ },
5380
+ "chalk": {
5381
+ "version": "2.4.2",
5382
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
5383
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
5384
+ "dev": true,
5385
+ "requires": {
5386
+ "ansi-styles": "^3.2.1",
5387
+ "escape-string-regexp": "^1.0.5",
5388
+ "supports-color": "^5.3.0"
5389
+ }
5390
+ },
5391
+ "supports-color": {
5392
+ "version": "5.5.0",
5393
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
5394
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
5395
+ "dev": true,
5396
+ "requires": {
5397
+ "has-flag": "^3.0.0"
5398
+ }
5399
+ }
5400
+ }
5401
+ },
5402
+ "lru-cache": {
5403
+ "version": "2.7.3",
5404
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
5405
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
5406
+ "dev": true
5407
+ },
5408
+ "magic-string": {
5409
+ "version": "0.22.5",
5410
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
5411
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
5412
+ "dev": true,
5413
+ "requires": {
5414
+ "vlq": "^0.2.2"
5415
+ }
5416
+ },
5417
+ "map-cache": {
5418
+ "version": "0.2.2",
5419
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
5420
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
5421
+ "dev": true
5422
+ },
5423
+ "map-visit": {
5424
+ "version": "1.0.0",
5425
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
5426
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
5427
+ "dev": true,
5428
+ "requires": {
5429
+ "object-visit": "^1.0.0"
5430
+ }
5431
+ },
5432
+ "md5.js": {
5433
+ "version": "1.3.5",
5434
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
5435
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
5436
+ "dev": true,
5437
+ "requires": {
5438
+ "hash-base": "^3.0.0",
5439
+ "inherits": "^2.0.1",
5440
+ "safe-buffer": "^5.1.2"
5441
+ }
5442
+ },
5443
+ "mdn-data": {
5444
+ "version": "2.0.4",
5445
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
5446
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
5447
+ "dev": true
5448
+ },
5449
+ "merge-source-map": {
5450
+ "version": "1.0.4",
5451
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
5452
+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
5453
+ "dev": true,
5454
+ "requires": {
5455
+ "source-map": "^0.5.6"
5456
+ },
5457
+ "dependencies": {
5458
+ "source-map": {
5459
+ "version": "0.5.7",
5460
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
5461
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
5462
+ "dev": true
5463
+ }
5464
+ }
5465
+ },
5466
+ "merge2": {
5467
+ "version": "1.4.1",
5468
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
5469
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
5470
+ "dev": true
5471
+ },
5472
+ "micromatch": {
5473
+ "version": "3.1.10",
5474
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
5475
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
5476
+ "dev": true,
5477
+ "requires": {
5478
+ "arr-diff": "^4.0.0",
5479
+ "array-unique": "^0.3.2",
5480
+ "braces": "^2.3.1",
5481
+ "define-property": "^2.0.2",
5482
+ "extend-shallow": "^3.0.2",
5483
+ "extglob": "^2.0.4",
5484
+ "fragment-cache": "^0.2.1",
5485
+ "kind-of": "^6.0.2",
5486
+ "nanomatch": "^1.2.9",
5487
+ "object.pick": "^1.3.0",
5488
+ "regex-not": "^1.0.0",
5489
+ "snapdragon": "^0.8.1",
5490
+ "to-regex": "^3.0.2"
5491
+ },
5492
+ "dependencies": {
5493
+ "kind-of": {
5494
+ "version": "6.0.3",
5495
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
5496
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
5497
+ "dev": true
5498
+ }
5499
+ }
5500
+ },
5501
+ "miller-rabin": {
5502
+ "version": "4.0.1",
5503
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
5504
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
5505
+ "dev": true,
5506
+ "requires": {
5507
+ "bn.js": "^4.0.0",
5508
+ "brorand": "^1.0.1"
5509
+ },
5510
+ "dependencies": {
5511
+ "bn.js": {
5512
+ "version": "4.11.9",
5513
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
5514
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
5515
+ "dev": true
5516
+ }
5517
+ }
5518
+ },
5519
+ "mime": {
5520
+ "version": "1.6.0",
5521
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
5522
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
5523
+ "dev": true
5524
+ },
5525
+ "mime-db": {
5526
+ "version": "1.44.0",
5527
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
5528
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
5529
+ "dev": true
5530
+ },
5531
+ "mime-types": {
5532
+ "version": "2.1.27",
5533
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
5534
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
5535
+ "dev": true,
5536
+ "requires": {
5537
+ "mime-db": "1.44.0"
5538
+ }
5539
+ },
5540
+ "mimic-fn": {
5541
+ "version": "1.2.0",
5542
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
5543
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
5544
+ "dev": true
5545
+ },
5546
+ "minimalistic-assert": {
5547
+ "version": "1.0.1",
5548
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
5549
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
5550
+ "dev": true
5551
+ },
5552
+ "minimalistic-crypto-utils": {
5553
+ "version": "1.0.1",
5554
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
5555
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
5556
+ "dev": true
5557
+ },
5558
+ "minimatch": {
5559
+ "version": "3.0.4",
5560
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
5561
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
5562
+ "dev": true,
5563
+ "requires": {
5564
+ "brace-expansion": "^1.1.7"
5565
+ }
5566
+ },
5567
+ "minimist": {
5568
+ "version": "1.2.5",
5569
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
5570
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
5571
+ "dev": true
5572
+ },
5573
+ "mixin-deep": {
5574
+ "version": "1.3.2",
5575
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
5576
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
5577
+ "dev": true,
5578
+ "requires": {
5579
+ "for-in": "^1.0.2",
5580
+ "is-extendable": "^1.0.1"
5581
+ },
5582
+ "dependencies": {
5583
+ "is-extendable": {
5584
+ "version": "1.0.1",
5585
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
5586
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
5587
+ "dev": true,
5588
+ "requires": {
5589
+ "is-plain-object": "^2.0.4"
5590
+ }
5591
+ }
5592
+ }
5593
+ },
5594
+ "mkdirp": {
5595
+ "version": "0.5.5",
5596
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
5597
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
5598
+ "dev": true,
5599
+ "requires": {
5600
+ "minimist": "^1.2.5"
5601
+ }
5602
+ },
5603
+ "ms": {
5604
+ "version": "2.1.2",
5605
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
5606
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
5607
+ "dev": true
5608
+ },
5609
+ "nan": {
5610
+ "version": "2.14.2",
5611
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
5612
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
5613
+ "dev": true,
5614
+ "optional": true
5615
+ },
5616
+ "nanomatch": {
5617
+ "version": "1.2.13",
5618
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
5619
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
5620
+ "dev": true,
5621
+ "requires": {
5622
+ "arr-diff": "^4.0.0",
5623
+ "array-unique": "^0.3.2",
5624
+ "define-property": "^2.0.2",
5625
+ "extend-shallow": "^3.0.2",
5626
+ "fragment-cache": "^0.2.1",
5627
+ "is-windows": "^1.0.2",
5628
+ "kind-of": "^6.0.2",
5629
+ "object.pick": "^1.3.0",
5630
+ "regex-not": "^1.0.0",
5631
+ "snapdragon": "^0.8.1",
5632
+ "to-regex": "^3.0.1"
5633
+ },
5634
+ "dependencies": {
5635
+ "kind-of": {
5636
+ "version": "6.0.3",
5637
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
5638
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
5639
+ "dev": true
5640
+ }
5641
+ }
5642
+ },
5643
+ "nice-try": {
5644
+ "version": "1.0.5",
5645
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
5646
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
5647
+ "dev": true
5648
+ },
5649
+ "node-addon-api": {
5650
+ "version": "1.7.2",
5651
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
5652
+ "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
5653
+ "dev": true
5654
+ },
5655
+ "node-forge": {
5656
+ "version": "0.7.6",
5657
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
5658
+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
5659
+ "dev": true
5660
+ },
5661
+ "node-libs-browser": {
5662
+ "version": "2.2.1",
5663
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
5664
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
5665
+ "dev": true,
5666
+ "requires": {
5667
+ "assert": "^1.1.1",
5668
+ "browserify-zlib": "^0.2.0",
5669
+ "buffer": "^4.3.0",
5670
+ "console-browserify": "^1.1.0",
5671
+ "constants-browserify": "^1.0.0",
5672
+ "crypto-browserify": "^3.11.0",
5673
+ "domain-browser": "^1.1.1",
5674
+ "events": "^3.0.0",
5675
+ "https-browserify": "^1.0.0",
5676
+ "os-browserify": "^0.3.0",
5677
+ "path-browserify": "0.0.1",
5678
+ "process": "^0.11.10",
5679
+ "punycode": "^1.2.4",
5680
+ "querystring-es3": "^0.2.0",
5681
+ "readable-stream": "^2.3.3",
5682
+ "stream-browserify": "^2.0.1",
5683
+ "stream-http": "^2.7.2",
5684
+ "string_decoder": "^1.0.0",
5685
+ "timers-browserify": "^2.0.4",
5686
+ "tty-browserify": "0.0.0",
5687
+ "url": "^0.11.0",
5688
+ "util": "^0.11.0",
5689
+ "vm-browserify": "^1.0.1"
5690
+ },
5691
+ "dependencies": {
5692
+ "browserify-zlib": {
5693
+ "version": "0.2.0",
5694
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
5695
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
5696
+ "dev": true,
5697
+ "requires": {
5698
+ "pako": "~1.0.5"
5699
+ }
5700
+ },
5701
+ "pako": {
5702
+ "version": "1.0.11",
5703
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
5704
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
5705
+ "dev": true
5706
+ },
5707
+ "punycode": {
5708
+ "version": "1.4.1",
5709
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
5710
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
5711
+ "dev": true
5712
+ }
5713
+ }
5714
+ },
5715
+ "node-releases": {
5716
+ "version": "1.1.63",
5717
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz",
5718
+ "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==",
5719
+ "dev": true
5720
+ },
5721
+ "normalize-html-whitespace": {
5722
+ "version": "1.0.0",
5723
+ "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz",
5724
+ "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==",
5725
+ "dev": true
5726
+ },
5727
+ "normalize-path": {
5728
+ "version": "3.0.0",
5729
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
5730
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
5731
+ "dev": true
5732
+ },
5733
+ "normalize-url": {
5734
+ "version": "3.3.0",
5735
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
5736
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
5737
+ "dev": true
5738
+ },
5739
+ "nth-check": {
5740
+ "version": "1.0.2",
5741
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
5742
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
5743
+ "dev": true,
5744
+ "requires": {
5745
+ "boolbase": "~1.0.0"
5746
+ }
5747
+ },
5748
+ "number-is-nan": {
5749
+ "version": "1.0.1",
5750
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
5751
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
5752
+ "dev": true
5753
+ },
5754
+ "nwsapi": {
5755
+ "version": "2.2.0",
5756
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
5757
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
5758
+ "dev": true
5759
+ },
5760
+ "oauth-sign": {
5761
+ "version": "0.9.0",
5762
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
5763
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
5764
+ "dev": true
5765
+ },
5766
+ "object-assign": {
5767
+ "version": "4.1.1",
5768
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
5769
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
5770
+ "dev": true
5771
+ },
5772
+ "object-copy": {
5773
+ "version": "0.1.0",
5774
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
5775
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
5776
+ "dev": true,
5777
+ "requires": {
5778
+ "copy-descriptor": "^0.1.0",
5779
+ "define-property": "^0.2.5",
5780
+ "kind-of": "^3.0.3"
5781
+ },
5782
+ "dependencies": {
5783
+ "define-property": {
5784
+ "version": "0.2.5",
5785
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
5786
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
5787
+ "dev": true,
5788
+ "requires": {
5789
+ "is-descriptor": "^0.1.0"
5790
+ }
5791
+ }
5792
+ }
5793
+ },
5794
+ "object-inspect": {
5795
+ "version": "1.8.0",
5796
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
5797
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
5798
+ "dev": true
5799
+ },
5800
+ "object-keys": {
5801
+ "version": "1.1.1",
5802
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
5803
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
5804
+ "dev": true
5805
+ },
5806
+ "object-visit": {
5807
+ "version": "1.0.1",
5808
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
5809
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
5810
+ "dev": true,
5811
+ "requires": {
5812
+ "isobject": "^3.0.0"
5813
+ }
5814
+ },
5815
+ "object.assign": {
5816
+ "version": "4.1.1",
5817
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz",
5818
+ "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==",
5819
+ "dev": true,
5820
+ "requires": {
5821
+ "define-properties": "^1.1.3",
5822
+ "es-abstract": "^1.18.0-next.0",
5823
+ "has-symbols": "^1.0.1",
5824
+ "object-keys": "^1.1.1"
5825
+ }
5826
+ },
5827
+ "object.getownpropertydescriptors": {
5828
+ "version": "2.1.0",
5829
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
5830
+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
5831
+ "dev": true,
5832
+ "requires": {
5833
+ "define-properties": "^1.1.3",
5834
+ "es-abstract": "^1.17.0-next.1"
5835
+ },
5836
+ "dependencies": {
5837
+ "es-abstract": {
5838
+ "version": "1.17.7",
5839
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
5840
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
5841
+ "dev": true,
5842
+ "requires": {
5843
+ "es-to-primitive": "^1.2.1",
5844
+ "function-bind": "^1.1.1",
5845
+ "has": "^1.0.3",
5846
+ "has-symbols": "^1.0.1",
5847
+ "is-callable": "^1.2.2",
5848
+ "is-regex": "^1.1.1",
5849
+ "object-inspect": "^1.8.0",
5850
+ "object-keys": "^1.1.1",
5851
+ "object.assign": "^4.1.1",
5852
+ "string.prototype.trimend": "^1.0.1",
5853
+ "string.prototype.trimstart": "^1.0.1"
5854
+ }
5855
+ }
5856
+ }
5857
+ },
5858
+ "object.pick": {
5859
+ "version": "1.3.0",
5860
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
5861
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
5862
+ "dev": true,
5863
+ "requires": {
5864
+ "isobject": "^3.0.1"
5865
+ }
5866
+ },
5867
+ "object.values": {
5868
+ "version": "1.1.1",
5869
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
5870
+ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
5871
+ "dev": true,
5872
+ "requires": {
5873
+ "define-properties": "^1.1.3",
5874
+ "es-abstract": "^1.17.0-next.1",
5875
+ "function-bind": "^1.1.1",
5876
+ "has": "^1.0.3"
5877
+ },
5878
+ "dependencies": {
5879
+ "es-abstract": {
5880
+ "version": "1.17.7",
5881
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
5882
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
5883
+ "dev": true,
5884
+ "requires": {
5885
+ "es-to-primitive": "^1.2.1",
5886
+ "function-bind": "^1.1.1",
5887
+ "has": "^1.0.3",
5888
+ "has-symbols": "^1.0.1",
5889
+ "is-callable": "^1.2.2",
5890
+ "is-regex": "^1.1.1",
5891
+ "object-inspect": "^1.8.0",
5892
+ "object-keys": "^1.1.1",
5893
+ "object.assign": "^4.1.1",
5894
+ "string.prototype.trimend": "^1.0.1",
5895
+ "string.prototype.trimstart": "^1.0.1"
5896
+ }
5897
+ }
5898
+ }
5899
+ },
5900
+ "on-finished": {
5901
+ "version": "2.3.0",
5902
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
5903
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
5904
+ "dev": true,
5905
+ "requires": {
5906
+ "ee-first": "1.1.1"
5907
+ }
5908
+ },
5909
+ "once": {
5910
+ "version": "1.4.0",
5911
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5912
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5913
+ "dev": true,
5914
+ "requires": {
5915
+ "wrappy": "1"
5916
+ }
5917
+ },
5918
+ "onetime": {
5919
+ "version": "2.0.1",
5920
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
5921
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
5922
+ "dev": true,
5923
+ "requires": {
5924
+ "mimic-fn": "^1.0.0"
5925
+ }
5926
+ },
5927
+ "opn": {
5928
+ "version": "5.5.0",
5929
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
5930
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
5931
+ "dev": true,
5932
+ "requires": {
5933
+ "is-wsl": "^1.1.0"
5934
+ }
5935
+ },
5936
+ "optionator": {
5937
+ "version": "0.8.3",
5938
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
5939
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
5940
+ "dev": true,
5941
+ "requires": {
5942
+ "deep-is": "~0.1.3",
5943
+ "fast-levenshtein": "~2.0.6",
5944
+ "levn": "~0.3.0",
5945
+ "prelude-ls": "~1.1.2",
5946
+ "type-check": "~0.3.2",
5947
+ "word-wrap": "~1.2.3"
5948
+ }
5949
+ },
5950
+ "ora": {
5951
+ "version": "2.1.0",
5952
+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
5953
+ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
5954
+ "dev": true,
5955
+ "requires": {
5956
+ "chalk": "^2.3.1",
5957
+ "cli-cursor": "^2.1.0",
5958
+ "cli-spinners": "^1.1.0",
5959
+ "log-symbols": "^2.2.0",
5960
+ "strip-ansi": "^4.0.0",
5961
+ "wcwidth": "^1.0.1"
5962
+ },
5963
+ "dependencies": {
5964
+ "ansi-regex": {
5965
+ "version": "3.0.0",
5966
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
5967
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
5968
+ "dev": true
5969
+ },
5970
+ "ansi-styles": {
5971
+ "version": "3.2.1",
5972
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
5973
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
5974
+ "dev": true,
5975
+ "requires": {
5976
+ "color-convert": "^1.9.0"
5977
+ }
5978
+ },
5979
+ "chalk": {
5980
+ "version": "2.4.2",
5981
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
5982
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
5983
+ "dev": true,
5984
+ "requires": {
5985
+ "ansi-styles": "^3.2.1",
5986
+ "escape-string-regexp": "^1.0.5",
5987
+ "supports-color": "^5.3.0"
5988
+ }
5989
+ },
5990
+ "strip-ansi": {
5991
+ "version": "4.0.0",
5992
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
5993
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
5994
+ "dev": true,
5995
+ "requires": {
5996
+ "ansi-regex": "^3.0.0"
5997
+ }
5998
+ },
5999
+ "supports-color": {
6000
+ "version": "5.5.0",
6001
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6002
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6003
+ "dev": true,
6004
+ "requires": {
6005
+ "has-flag": "^3.0.0"
6006
+ }
6007
+ }
6008
+ }
6009
+ },
6010
+ "os-browserify": {
6011
+ "version": "0.3.0",
6012
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
6013
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
6014
+ "dev": true
6015
+ },
6016
+ "pako": {
6017
+ "version": "0.2.9",
6018
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
6019
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
6020
+ "dev": true
6021
+ },
6022
+ "parcel-bundler": {
6023
+ "version": "1.12.4",
6024
+ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.4.tgz",
6025
+ "integrity": "sha512-G+iZGGiPEXcRzw0fiRxWYCKxdt/F7l9a0xkiU4XbcVRJCSlBnioWEwJMutOCCpoQmaQtjB4RBHDGIHN85AIhLQ==",
6026
+ "dev": true,
6027
+ "requires": {
6028
+ "@babel/code-frame": "^7.0.0",
6029
+ "@babel/core": "^7.4.4",
6030
+ "@babel/generator": "^7.4.4",
6031
+ "@babel/parser": "^7.4.4",
6032
+ "@babel/plugin-transform-flow-strip-types": "^7.4.4",
6033
+ "@babel/plugin-transform-modules-commonjs": "^7.4.4",
6034
+ "@babel/plugin-transform-react-jsx": "^7.0.0",
6035
+ "@babel/preset-env": "^7.4.4",
6036
+ "@babel/runtime": "^7.4.4",
6037
+ "@babel/template": "^7.4.4",
6038
+ "@babel/traverse": "^7.4.4",
6039
+ "@babel/types": "^7.4.4",
6040
+ "@iarna/toml": "^2.2.0",
6041
+ "@parcel/fs": "^1.11.0",
6042
+ "@parcel/logger": "^1.11.1",
6043
+ "@parcel/utils": "^1.11.0",
6044
+ "@parcel/watcher": "^1.12.1",
6045
+ "@parcel/workers": "^1.11.0",
6046
+ "ansi-to-html": "^0.6.4",
6047
+ "babylon-walk": "^1.0.2",
6048
+ "browserslist": "^4.1.0",
6049
+ "chalk": "^2.1.0",
6050
+ "clone": "^2.1.1",
6051
+ "command-exists": "^1.2.6",
6052
+ "commander": "^2.11.0",
6053
+ "core-js": "^2.6.5",
6054
+ "cross-spawn": "^6.0.4",
6055
+ "css-modules-loader-core": "^1.1.0",
6056
+ "cssnano": "^4.0.0",
6057
+ "deasync": "^0.1.14",
6058
+ "dotenv": "^5.0.0",
6059
+ "dotenv-expand": "^5.1.0",
6060
+ "envinfo": "^7.3.1",
6061
+ "fast-glob": "^2.2.2",
6062
+ "filesize": "^3.6.0",
6063
+ "get-port": "^3.2.0",
6064
+ "htmlnano": "^0.2.2",
6065
+ "is-glob": "^4.0.0",
6066
+ "is-url": "^1.2.2",
6067
+ "js-yaml": "^3.10.0",
6068
+ "json5": "^1.0.1",
6069
+ "micromatch": "^3.0.4",
6070
+ "mkdirp": "^0.5.1",
6071
+ "node-forge": "^0.7.1",
6072
+ "node-libs-browser": "^2.0.0",
6073
+ "opn": "^5.1.0",
6074
+ "postcss": "^7.0.11",
6075
+ "postcss-value-parser": "^3.3.1",
6076
+ "posthtml": "^0.11.2",
6077
+ "posthtml-parser": "^0.4.0",
6078
+ "posthtml-render": "^1.1.3",
6079
+ "resolve": "^1.4.0",
6080
+ "semver": "^5.4.1",
6081
+ "serialize-to-js": "^3.0.0",
6082
+ "serve-static": "^1.12.4",
6083
+ "source-map": "0.6.1",
6084
+ "terser": "^3.7.3",
6085
+ "v8-compile-cache": "^2.0.0",
6086
+ "ws": "^5.1.1"
6087
+ },
6088
+ "dependencies": {
6089
+ "ansi-styles": {
6090
+ "version": "3.2.1",
6091
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6092
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6093
+ "dev": true,
6094
+ "requires": {
6095
+ "color-convert": "^1.9.0"
6096
+ }
6097
+ },
6098
+ "chalk": {
6099
+ "version": "2.4.2",
6100
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6101
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6102
+ "dev": true,
6103
+ "requires": {
6104
+ "ansi-styles": "^3.2.1",
6105
+ "escape-string-regexp": "^1.0.5",
6106
+ "supports-color": "^5.3.0"
6107
+ }
6108
+ },
6109
+ "cross-spawn": {
6110
+ "version": "6.0.5",
6111
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
6112
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
6113
+ "dev": true,
6114
+ "requires": {
6115
+ "nice-try": "^1.0.4",
6116
+ "path-key": "^2.0.1",
6117
+ "semver": "^5.5.0",
6118
+ "shebang-command": "^1.2.0",
6119
+ "which": "^1.2.9"
6120
+ }
6121
+ },
6122
+ "json5": {
6123
+ "version": "1.0.1",
6124
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
6125
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
6126
+ "dev": true,
6127
+ "requires": {
6128
+ "minimist": "^1.2.0"
6129
+ }
6130
+ },
6131
+ "supports-color": {
6132
+ "version": "5.5.0",
6133
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6134
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6135
+ "dev": true,
6136
+ "requires": {
6137
+ "has-flag": "^3.0.0"
6138
+ }
6139
+ }
6140
+ }
6141
+ },
6142
+ "parse-asn1": {
6143
+ "version": "5.1.6",
6144
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
6145
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
6146
+ "dev": true,
6147
+ "requires": {
6148
+ "asn1.js": "^5.2.0",
6149
+ "browserify-aes": "^1.0.0",
6150
+ "evp_bytestokey": "^1.0.0",
6151
+ "pbkdf2": "^3.0.3",
6152
+ "safe-buffer": "^5.1.1"
6153
+ }
6154
+ },
6155
+ "parse5": {
6156
+ "version": "5.1.0",
6157
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
6158
+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
6159
+ "dev": true
6160
+ },
6161
+ "parseurl": {
6162
+ "version": "1.3.3",
6163
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
6164
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
6165
+ "dev": true
6166
+ },
6167
+ "pascalcase": {
6168
+ "version": "0.1.1",
6169
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
6170
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
6171
+ "dev": true
6172
+ },
6173
+ "path-browserify": {
6174
+ "version": "0.0.1",
6175
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
6176
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
6177
+ "dev": true
6178
+ },
6179
+ "path-dirname": {
6180
+ "version": "1.0.2",
6181
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
6182
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
6183
+ "dev": true
6184
+ },
6185
+ "path-is-absolute": {
6186
+ "version": "1.0.1",
6187
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
6188
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
6189
+ "dev": true
6190
+ },
6191
+ "path-key": {
6192
+ "version": "2.0.1",
6193
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
6194
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
6195
+ "dev": true
6196
+ },
6197
+ "path-parse": {
6198
+ "version": "1.0.6",
6199
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
6200
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
6201
+ "dev": true
6202
+ },
6203
+ "pbkdf2": {
6204
+ "version": "3.1.1",
6205
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
6206
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
6207
+ "dev": true,
6208
+ "requires": {
6209
+ "create-hash": "^1.1.2",
6210
+ "create-hmac": "^1.1.4",
6211
+ "ripemd160": "^2.0.1",
6212
+ "safe-buffer": "^5.0.1",
6213
+ "sha.js": "^2.4.8"
6214
+ }
6215
+ },
6216
+ "performance-now": {
6217
+ "version": "2.1.0",
6218
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
6219
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
6220
+ "dev": true
6221
+ },
6222
+ "physical-cpu-count": {
6223
+ "version": "2.0.0",
6224
+ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz",
6225
+ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=",
6226
+ "dev": true
6227
+ },
6228
+ "pn": {
6229
+ "version": "1.1.0",
6230
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
6231
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
6232
+ "dev": true
6233
+ },
6234
+ "posix-character-classes": {
6235
+ "version": "0.1.1",
6236
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
6237
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
6238
+ "dev": true
6239
+ },
6240
+ "postcss": {
6241
+ "version": "7.0.35",
6242
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
6243
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
6244
+ "dev": true,
6245
+ "requires": {
6246
+ "chalk": "^2.4.2",
6247
+ "source-map": "^0.6.1",
6248
+ "supports-color": "^6.1.0"
6249
+ },
6250
+ "dependencies": {
6251
+ "ansi-styles": {
6252
+ "version": "3.2.1",
6253
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6254
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6255
+ "dev": true,
6256
+ "requires": {
6257
+ "color-convert": "^1.9.0"
6258
+ }
6259
+ },
6260
+ "chalk": {
6261
+ "version": "2.4.2",
6262
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6263
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6264
+ "dev": true,
6265
+ "requires": {
6266
+ "ansi-styles": "^3.2.1",
6267
+ "escape-string-regexp": "^1.0.5",
6268
+ "supports-color": "^5.3.0"
6269
+ },
6270
+ "dependencies": {
6271
+ "supports-color": {
6272
+ "version": "5.5.0",
6273
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6274
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6275
+ "dev": true,
6276
+ "requires": {
6277
+ "has-flag": "^3.0.0"
6278
+ }
6279
+ }
6280
+ }
6281
+ },
6282
+ "supports-color": {
6283
+ "version": "6.1.0",
6284
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
6285
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
6286
+ "dev": true,
6287
+ "requires": {
6288
+ "has-flag": "^3.0.0"
6289
+ }
6290
+ }
6291
+ }
6292
+ },
6293
+ "postcss-calc": {
6294
+ "version": "7.0.5",
6295
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
6296
+ "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
6297
+ "dev": true,
6298
+ "requires": {
6299
+ "postcss": "^7.0.27",
6300
+ "postcss-selector-parser": "^6.0.2",
6301
+ "postcss-value-parser": "^4.0.2"
6302
+ },
6303
+ "dependencies": {
6304
+ "postcss-value-parser": {
6305
+ "version": "4.1.0",
6306
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
6307
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
6308
+ "dev": true
6309
+ }
6310
+ }
6311
+ },
6312
+ "postcss-colormin": {
6313
+ "version": "4.0.3",
6314
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
6315
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
6316
+ "dev": true,
6317
+ "requires": {
6318
+ "browserslist": "^4.0.0",
6319
+ "color": "^3.0.0",
6320
+ "has": "^1.0.0",
6321
+ "postcss": "^7.0.0",
6322
+ "postcss-value-parser": "^3.0.0"
6323
+ }
6324
+ },
6325
+ "postcss-convert-values": {
6326
+ "version": "4.0.1",
6327
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
6328
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
6329
+ "dev": true,
6330
+ "requires": {
6331
+ "postcss": "^7.0.0",
6332
+ "postcss-value-parser": "^3.0.0"
6333
+ }
6334
+ },
6335
+ "postcss-discard-comments": {
6336
+ "version": "4.0.2",
6337
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
6338
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
6339
+ "dev": true,
6340
+ "requires": {
6341
+ "postcss": "^7.0.0"
6342
+ }
6343
+ },
6344
+ "postcss-discard-duplicates": {
6345
+ "version": "4.0.2",
6346
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
6347
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
6348
+ "dev": true,
6349
+ "requires": {
6350
+ "postcss": "^7.0.0"
6351
+ }
6352
+ },
6353
+ "postcss-discard-empty": {
6354
+ "version": "4.0.1",
6355
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
6356
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
6357
+ "dev": true,
6358
+ "requires": {
6359
+ "postcss": "^7.0.0"
6360
+ }
6361
+ },
6362
+ "postcss-discard-overridden": {
6363
+ "version": "4.0.1",
6364
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
6365
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
6366
+ "dev": true,
6367
+ "requires": {
6368
+ "postcss": "^7.0.0"
6369
+ }
6370
+ },
6371
+ "postcss-merge-longhand": {
6372
+ "version": "4.0.11",
6373
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
6374
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
6375
+ "dev": true,
6376
+ "requires": {
6377
+ "css-color-names": "0.0.4",
6378
+ "postcss": "^7.0.0",
6379
+ "postcss-value-parser": "^3.0.0",
6380
+ "stylehacks": "^4.0.0"
6381
+ }
6382
+ },
6383
+ "postcss-merge-rules": {
6384
+ "version": "4.0.3",
6385
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
6386
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
6387
+ "dev": true,
6388
+ "requires": {
6389
+ "browserslist": "^4.0.0",
6390
+ "caniuse-api": "^3.0.0",
6391
+ "cssnano-util-same-parent": "^4.0.0",
6392
+ "postcss": "^7.0.0",
6393
+ "postcss-selector-parser": "^3.0.0",
6394
+ "vendors": "^1.0.0"
6395
+ },
6396
+ "dependencies": {
6397
+ "postcss-selector-parser": {
6398
+ "version": "3.1.2",
6399
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
6400
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
6401
+ "dev": true,
6402
+ "requires": {
6403
+ "dot-prop": "^5.2.0",
6404
+ "indexes-of": "^1.0.1",
6405
+ "uniq": "^1.0.1"
6406
+ }
6407
+ }
6408
+ }
6409
+ },
6410
+ "postcss-minify-font-values": {
6411
+ "version": "4.0.2",
6412
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
6413
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
6414
+ "dev": true,
6415
+ "requires": {
6416
+ "postcss": "^7.0.0",
6417
+ "postcss-value-parser": "^3.0.0"
6418
+ }
6419
+ },
6420
+ "postcss-minify-gradients": {
6421
+ "version": "4.0.2",
6422
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
6423
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
6424
+ "dev": true,
6425
+ "requires": {
6426
+ "cssnano-util-get-arguments": "^4.0.0",
6427
+ "is-color-stop": "^1.0.0",
6428
+ "postcss": "^7.0.0",
6429
+ "postcss-value-parser": "^3.0.0"
6430
+ }
6431
+ },
6432
+ "postcss-minify-params": {
6433
+ "version": "4.0.2",
6434
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
6435
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
6436
+ "dev": true,
6437
+ "requires": {
6438
+ "alphanum-sort": "^1.0.0",
6439
+ "browserslist": "^4.0.0",
6440
+ "cssnano-util-get-arguments": "^4.0.0",
6441
+ "postcss": "^7.0.0",
6442
+ "postcss-value-parser": "^3.0.0",
6443
+ "uniqs": "^2.0.0"
6444
+ }
6445
+ },
6446
+ "postcss-minify-selectors": {
6447
+ "version": "4.0.2",
6448
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
6449
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
6450
+ "dev": true,
6451
+ "requires": {
6452
+ "alphanum-sort": "^1.0.0",
6453
+ "has": "^1.0.0",
6454
+ "postcss": "^7.0.0",
6455
+ "postcss-selector-parser": "^3.0.0"
6456
+ },
6457
+ "dependencies": {
6458
+ "postcss-selector-parser": {
6459
+ "version": "3.1.2",
6460
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
6461
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
6462
+ "dev": true,
6463
+ "requires": {
6464
+ "dot-prop": "^5.2.0",
6465
+ "indexes-of": "^1.0.1",
6466
+ "uniq": "^1.0.1"
6467
+ }
6468
+ }
6469
+ }
6470
+ },
6471
+ "postcss-modules-extract-imports": {
6472
+ "version": "1.1.0",
6473
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
6474
+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
6475
+ "dev": true,
6476
+ "requires": {
6477
+ "postcss": "^6.0.1"
6478
+ },
6479
+ "dependencies": {
6480
+ "ansi-styles": {
6481
+ "version": "3.2.1",
6482
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6483
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6484
+ "dev": true,
6485
+ "requires": {
6486
+ "color-convert": "^1.9.0"
6487
+ }
6488
+ },
6489
+ "chalk": {
6490
+ "version": "2.4.2",
6491
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6492
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6493
+ "dev": true,
6494
+ "requires": {
6495
+ "ansi-styles": "^3.2.1",
6496
+ "escape-string-regexp": "^1.0.5",
6497
+ "supports-color": "^5.3.0"
6498
+ }
6499
+ },
6500
+ "postcss": {
6501
+ "version": "6.0.23",
6502
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
6503
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
6504
+ "dev": true,
6505
+ "requires": {
6506
+ "chalk": "^2.4.1",
6507
+ "source-map": "^0.6.1",
6508
+ "supports-color": "^5.4.0"
6509
+ }
6510
+ },
6511
+ "source-map": {
6512
+ "version": "0.6.1",
6513
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6514
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6515
+ "dev": true
6516
+ },
6517
+ "supports-color": {
6518
+ "version": "5.5.0",
6519
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6520
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6521
+ "dev": true,
6522
+ "requires": {
6523
+ "has-flag": "^3.0.0"
6524
+ }
6525
+ }
6526
+ }
6527
+ },
6528
+ "postcss-modules-local-by-default": {
6529
+ "version": "1.2.0",
6530
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
6531
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
6532
+ "dev": true,
6533
+ "requires": {
6534
+ "css-selector-tokenizer": "^0.7.0",
6535
+ "postcss": "^6.0.1"
6536
+ },
6537
+ "dependencies": {
6538
+ "ansi-styles": {
6539
+ "version": "3.2.1",
6540
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6541
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6542
+ "dev": true,
6543
+ "requires": {
6544
+ "color-convert": "^1.9.0"
6545
+ }
6546
+ },
6547
+ "chalk": {
6548
+ "version": "2.4.2",
6549
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6550
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6551
+ "dev": true,
6552
+ "requires": {
6553
+ "ansi-styles": "^3.2.1",
6554
+ "escape-string-regexp": "^1.0.5",
6555
+ "supports-color": "^5.3.0"
6556
+ }
6557
+ },
6558
+ "postcss": {
6559
+ "version": "6.0.23",
6560
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
6561
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
6562
+ "dev": true,
6563
+ "requires": {
6564
+ "chalk": "^2.4.1",
6565
+ "source-map": "^0.6.1",
6566
+ "supports-color": "^5.4.0"
6567
+ }
6568
+ },
6569
+ "source-map": {
6570
+ "version": "0.6.1",
6571
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6572
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6573
+ "dev": true
6574
+ },
6575
+ "supports-color": {
6576
+ "version": "5.5.0",
6577
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6578
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6579
+ "dev": true,
6580
+ "requires": {
6581
+ "has-flag": "^3.0.0"
6582
+ }
6583
+ }
6584
+ }
6585
+ },
6586
+ "postcss-modules-scope": {
6587
+ "version": "1.1.0",
6588
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
6589
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
6590
+ "dev": true,
6591
+ "requires": {
6592
+ "css-selector-tokenizer": "^0.7.0",
6593
+ "postcss": "^6.0.1"
6594
+ },
6595
+ "dependencies": {
6596
+ "ansi-styles": {
6597
+ "version": "3.2.1",
6598
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6599
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6600
+ "dev": true,
6601
+ "requires": {
6602
+ "color-convert": "^1.9.0"
6603
+ }
6604
+ },
6605
+ "chalk": {
6606
+ "version": "2.4.2",
6607
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6608
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6609
+ "dev": true,
6610
+ "requires": {
6611
+ "ansi-styles": "^3.2.1",
6612
+ "escape-string-regexp": "^1.0.5",
6613
+ "supports-color": "^5.3.0"
6614
+ }
6615
+ },
6616
+ "postcss": {
6617
+ "version": "6.0.23",
6618
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
6619
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
6620
+ "dev": true,
6621
+ "requires": {
6622
+ "chalk": "^2.4.1",
6623
+ "source-map": "^0.6.1",
6624
+ "supports-color": "^5.4.0"
6625
+ }
6626
+ },
6627
+ "source-map": {
6628
+ "version": "0.6.1",
6629
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6630
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6631
+ "dev": true
6632
+ },
6633
+ "supports-color": {
6634
+ "version": "5.5.0",
6635
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6636
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6637
+ "dev": true,
6638
+ "requires": {
6639
+ "has-flag": "^3.0.0"
6640
+ }
6641
+ }
6642
+ }
6643
+ },
6644
+ "postcss-modules-values": {
6645
+ "version": "1.3.0",
6646
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
6647
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
6648
+ "dev": true,
6649
+ "requires": {
6650
+ "icss-replace-symbols": "^1.1.0",
6651
+ "postcss": "^6.0.1"
6652
+ },
6653
+ "dependencies": {
6654
+ "ansi-styles": {
6655
+ "version": "3.2.1",
6656
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6657
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6658
+ "dev": true,
6659
+ "requires": {
6660
+ "color-convert": "^1.9.0"
6661
+ }
6662
+ },
6663
+ "chalk": {
6664
+ "version": "2.4.2",
6665
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6666
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6667
+ "dev": true,
6668
+ "requires": {
6669
+ "ansi-styles": "^3.2.1",
6670
+ "escape-string-regexp": "^1.0.5",
6671
+ "supports-color": "^5.3.0"
6672
+ }
6673
+ },
6674
+ "postcss": {
6675
+ "version": "6.0.23",
6676
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
6677
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
6678
+ "dev": true,
6679
+ "requires": {
6680
+ "chalk": "^2.4.1",
6681
+ "source-map": "^0.6.1",
6682
+ "supports-color": "^5.4.0"
6683
+ }
6684
+ },
6685
+ "source-map": {
6686
+ "version": "0.6.1",
6687
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6688
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6689
+ "dev": true
6690
+ },
6691
+ "supports-color": {
6692
+ "version": "5.5.0",
6693
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6694
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6695
+ "dev": true,
6696
+ "requires": {
6697
+ "has-flag": "^3.0.0"
6698
+ }
6699
+ }
6700
+ }
6701
+ },
6702
+ "postcss-normalize-charset": {
6703
+ "version": "4.0.1",
6704
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
6705
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
6706
+ "dev": true,
6707
+ "requires": {
6708
+ "postcss": "^7.0.0"
6709
+ }
6710
+ },
6711
+ "postcss-normalize-display-values": {
6712
+ "version": "4.0.2",
6713
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
6714
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
6715
+ "dev": true,
6716
+ "requires": {
6717
+ "cssnano-util-get-match": "^4.0.0",
6718
+ "postcss": "^7.0.0",
6719
+ "postcss-value-parser": "^3.0.0"
6720
+ }
6721
+ },
6722
+ "postcss-normalize-positions": {
6723
+ "version": "4.0.2",
6724
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
6725
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
6726
+ "dev": true,
6727
+ "requires": {
6728
+ "cssnano-util-get-arguments": "^4.0.0",
6729
+ "has": "^1.0.0",
6730
+ "postcss": "^7.0.0",
6731
+ "postcss-value-parser": "^3.0.0"
6732
+ }
6733
+ },
6734
+ "postcss-normalize-repeat-style": {
6735
+ "version": "4.0.2",
6736
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
6737
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
6738
+ "dev": true,
6739
+ "requires": {
6740
+ "cssnano-util-get-arguments": "^4.0.0",
6741
+ "cssnano-util-get-match": "^4.0.0",
6742
+ "postcss": "^7.0.0",
6743
+ "postcss-value-parser": "^3.0.0"
6744
+ }
6745
+ },
6746
+ "postcss-normalize-string": {
6747
+ "version": "4.0.2",
6748
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
6749
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
6750
+ "dev": true,
6751
+ "requires": {
6752
+ "has": "^1.0.0",
6753
+ "postcss": "^7.0.0",
6754
+ "postcss-value-parser": "^3.0.0"
6755
+ }
6756
+ },
6757
+ "postcss-normalize-timing-functions": {
6758
+ "version": "4.0.2",
6759
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
6760
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
6761
+ "dev": true,
6762
+ "requires": {
6763
+ "cssnano-util-get-match": "^4.0.0",
6764
+ "postcss": "^7.0.0",
6765
+ "postcss-value-parser": "^3.0.0"
6766
+ }
6767
+ },
6768
+ "postcss-normalize-unicode": {
6769
+ "version": "4.0.1",
6770
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
6771
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
6772
+ "dev": true,
6773
+ "requires": {
6774
+ "browserslist": "^4.0.0",
6775
+ "postcss": "^7.0.0",
6776
+ "postcss-value-parser": "^3.0.0"
6777
+ }
6778
+ },
6779
+ "postcss-normalize-url": {
6780
+ "version": "4.0.1",
6781
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
6782
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
6783
+ "dev": true,
6784
+ "requires": {
6785
+ "is-absolute-url": "^2.0.0",
6786
+ "normalize-url": "^3.0.0",
6787
+ "postcss": "^7.0.0",
6788
+ "postcss-value-parser": "^3.0.0"
6789
+ }
6790
+ },
6791
+ "postcss-normalize-whitespace": {
6792
+ "version": "4.0.2",
6793
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
6794
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
6795
+ "dev": true,
6796
+ "requires": {
6797
+ "postcss": "^7.0.0",
6798
+ "postcss-value-parser": "^3.0.0"
6799
+ }
6800
+ },
6801
+ "postcss-ordered-values": {
6802
+ "version": "4.1.2",
6803
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
6804
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
6805
+ "dev": true,
6806
+ "requires": {
6807
+ "cssnano-util-get-arguments": "^4.0.0",
6808
+ "postcss": "^7.0.0",
6809
+ "postcss-value-parser": "^3.0.0"
6810
+ }
6811
+ },
6812
+ "postcss-reduce-initial": {
6813
+ "version": "4.0.3",
6814
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
6815
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
6816
+ "dev": true,
6817
+ "requires": {
6818
+ "browserslist": "^4.0.0",
6819
+ "caniuse-api": "^3.0.0",
6820
+ "has": "^1.0.0",
6821
+ "postcss": "^7.0.0"
6822
+ }
6823
+ },
6824
+ "postcss-reduce-transforms": {
6825
+ "version": "4.0.2",
6826
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
6827
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
6828
+ "dev": true,
6829
+ "requires": {
6830
+ "cssnano-util-get-match": "^4.0.0",
6831
+ "has": "^1.0.0",
6832
+ "postcss": "^7.0.0",
6833
+ "postcss-value-parser": "^3.0.0"
6834
+ }
6835
+ },
6836
+ "postcss-selector-parser": {
6837
+ "version": "6.0.4",
6838
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
6839
+ "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
6840
+ "dev": true,
6841
+ "requires": {
6842
+ "cssesc": "^3.0.0",
6843
+ "indexes-of": "^1.0.1",
6844
+ "uniq": "^1.0.1",
6845
+ "util-deprecate": "^1.0.2"
6846
+ }
6847
+ },
6848
+ "postcss-svgo": {
6849
+ "version": "4.0.2",
6850
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
6851
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
6852
+ "dev": true,
6853
+ "requires": {
6854
+ "is-svg": "^3.0.0",
6855
+ "postcss": "^7.0.0",
6856
+ "postcss-value-parser": "^3.0.0",
6857
+ "svgo": "^1.0.0"
6858
+ }
6859
+ },
6860
+ "postcss-unique-selectors": {
6861
+ "version": "4.0.1",
6862
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
6863
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
6864
+ "dev": true,
6865
+ "requires": {
6866
+ "alphanum-sort": "^1.0.0",
6867
+ "postcss": "^7.0.0",
6868
+ "uniqs": "^2.0.0"
6869
+ }
6870
+ },
6871
+ "postcss-value-parser": {
6872
+ "version": "3.3.1",
6873
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
6874
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
6875
+ "dev": true
6876
+ },
6877
+ "posthtml": {
6878
+ "version": "0.11.6",
6879
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz",
6880
+ "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==",
6881
+ "dev": true,
6882
+ "requires": {
6883
+ "posthtml-parser": "^0.4.1",
6884
+ "posthtml-render": "^1.1.5"
6885
+ }
6886
+ },
6887
+ "posthtml-parser": {
6888
+ "version": "0.4.2",
6889
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz",
6890
+ "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==",
6891
+ "dev": true,
6892
+ "requires": {
6893
+ "htmlparser2": "^3.9.2"
6894
+ }
6895
+ },
6896
+ "posthtml-render": {
6897
+ "version": "1.2.3",
6898
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.3.tgz",
6899
+ "integrity": "sha512-rGGayND//VwTlsYKNqdILsA7U/XP0WJa6SMcdAEoqc2WRM5QExplGg/h9qbTuHz7mc2PvaXU+6iNxItvr5aHMg==",
6900
+ "dev": true
6901
+ },
6902
+ "prelude-ls": {
6903
+ "version": "1.1.2",
6904
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
6905
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
6906
+ "dev": true
6907
+ },
6908
+ "process": {
6909
+ "version": "0.11.10",
6910
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
6911
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
6912
+ "dev": true
6913
+ },
6914
+ "process-nextick-args": {
6915
+ "version": "2.0.1",
6916
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
6917
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
6918
+ "dev": true
6919
+ },
6920
+ "psl": {
6921
+ "version": "1.8.0",
6922
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
6923
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
6924
+ "dev": true
6925
+ },
6926
+ "public-encrypt": {
6927
+ "version": "4.0.3",
6928
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
6929
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
6930
+ "dev": true,
6931
+ "requires": {
6932
+ "bn.js": "^4.1.0",
6933
+ "browserify-rsa": "^4.0.0",
6934
+ "create-hash": "^1.1.0",
6935
+ "parse-asn1": "^5.0.0",
6936
+ "randombytes": "^2.0.1",
6937
+ "safe-buffer": "^5.1.2"
6938
+ },
6939
+ "dependencies": {
6940
+ "bn.js": {
6941
+ "version": "4.11.9",
6942
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
6943
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
6944
+ "dev": true
6945
+ }
6946
+ }
6947
+ },
6948
+ "punycode": {
6949
+ "version": "2.1.1",
6950
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
6951
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
6952
+ "dev": true
6953
+ },
6954
+ "purgecss": {
6955
+ "version": "2.3.0",
6956
+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz",
6957
+ "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==",
6958
+ "dev": true,
6959
+ "requires": {
6960
+ "commander": "^5.0.0",
6961
+ "glob": "^7.0.0",
6962
+ "postcss": "7.0.32",
6963
+ "postcss-selector-parser": "^6.0.2"
6964
+ },
6965
+ "dependencies": {
6966
+ "ansi-styles": {
6967
+ "version": "3.2.1",
6968
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
6969
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
6970
+ "dev": true,
6971
+ "requires": {
6972
+ "color-convert": "^1.9.0"
6973
+ }
6974
+ },
6975
+ "chalk": {
6976
+ "version": "2.4.2",
6977
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
6978
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
6979
+ "dev": true,
6980
+ "requires": {
6981
+ "ansi-styles": "^3.2.1",
6982
+ "escape-string-regexp": "^1.0.5",
6983
+ "supports-color": "^5.3.0"
6984
+ },
6985
+ "dependencies": {
6986
+ "supports-color": {
6987
+ "version": "5.5.0",
6988
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6989
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6990
+ "dev": true,
6991
+ "requires": {
6992
+ "has-flag": "^3.0.0"
6993
+ }
6994
+ }
6995
+ }
6996
+ },
6997
+ "commander": {
6998
+ "version": "5.1.0",
6999
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
7000
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
7001
+ "dev": true
7002
+ },
7003
+ "postcss": {
7004
+ "version": "7.0.32",
7005
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
7006
+ "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
7007
+ "dev": true,
7008
+ "requires": {
7009
+ "chalk": "^2.4.2",
7010
+ "source-map": "^0.6.1",
7011
+ "supports-color": "^6.1.0"
7012
+ }
7013
+ },
7014
+ "supports-color": {
7015
+ "version": "6.1.0",
7016
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
7017
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
7018
+ "dev": true,
7019
+ "requires": {
7020
+ "has-flag": "^3.0.0"
7021
+ }
7022
+ }
7023
+ }
7024
+ },
7025
+ "q": {
7026
+ "version": "1.5.1",
7027
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
7028
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
7029
+ "dev": true
7030
+ },
7031
+ "qs": {
7032
+ "version": "6.5.2",
7033
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
7034
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
7035
+ "dev": true
7036
+ },
7037
+ "querystring": {
7038
+ "version": "0.2.0",
7039
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
7040
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
7041
+ "dev": true
7042
+ },
7043
+ "querystring-es3": {
7044
+ "version": "0.2.1",
7045
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
7046
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
7047
+ "dev": true
7048
+ },
7049
+ "quote-stream": {
7050
+ "version": "1.0.2",
7051
+ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
7052
+ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
7053
+ "dev": true,
7054
+ "requires": {
7055
+ "buffer-equal": "0.0.1",
7056
+ "minimist": "^1.1.3",
7057
+ "through2": "^2.0.0"
7058
+ }
7059
+ },
7060
+ "randombytes": {
7061
+ "version": "2.1.0",
7062
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
7063
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
7064
+ "dev": true,
7065
+ "requires": {
7066
+ "safe-buffer": "^5.1.0"
7067
+ }
7068
+ },
7069
+ "randomfill": {
7070
+ "version": "1.0.4",
7071
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
7072
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
7073
+ "dev": true,
7074
+ "requires": {
7075
+ "randombytes": "^2.0.5",
7076
+ "safe-buffer": "^5.1.0"
7077
+ }
7078
+ },
7079
+ "range-parser": {
7080
+ "version": "1.2.1",
7081
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
7082
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
7083
+ "dev": true
7084
+ },
7085
+ "readable-stream": {
7086
+ "version": "2.3.7",
7087
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
7088
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
7089
+ "dev": true,
7090
+ "requires": {
7091
+ "core-util-is": "~1.0.0",
7092
+ "inherits": "~2.0.3",
7093
+ "isarray": "~1.0.0",
7094
+ "process-nextick-args": "~2.0.0",
7095
+ "safe-buffer": "~5.1.1",
7096
+ "string_decoder": "~1.1.1",
7097
+ "util-deprecate": "~1.0.1"
7098
+ },
7099
+ "dependencies": {
7100
+ "safe-buffer": {
7101
+ "version": "5.1.2",
7102
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
7103
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
7104
+ "dev": true
7105
+ }
7106
+ }
7107
+ },
7108
+ "readdirp": {
7109
+ "version": "2.2.1",
7110
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
7111
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
7112
+ "dev": true,
7113
+ "requires": {
7114
+ "graceful-fs": "^4.1.11",
7115
+ "micromatch": "^3.1.10",
7116
+ "readable-stream": "^2.0.2"
7117
+ }
7118
+ },
7119
+ "regenerate": {
7120
+ "version": "1.4.1",
7121
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
7122
+ "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==",
7123
+ "dev": true
7124
+ },
7125
+ "regenerate-unicode-properties": {
7126
+ "version": "8.2.0",
7127
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
7128
+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
7129
+ "dev": true,
7130
+ "requires": {
7131
+ "regenerate": "^1.4.0"
7132
+ }
7133
+ },
7134
+ "regenerator-runtime": {
7135
+ "version": "0.13.7",
7136
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
7137
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
7138
+ "dev": true
7139
+ },
7140
+ "regenerator-transform": {
7141
+ "version": "0.14.5",
7142
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
7143
+ "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
7144
+ "dev": true,
7145
+ "requires": {
7146
+ "@babel/runtime": "^7.8.4"
7147
+ }
7148
+ },
7149
+ "regex-not": {
7150
+ "version": "1.0.2",
7151
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
7152
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
7153
+ "dev": true,
7154
+ "requires": {
7155
+ "extend-shallow": "^3.0.2",
7156
+ "safe-regex": "^1.1.0"
7157
+ }
7158
+ },
7159
+ "regexpu-core": {
7160
+ "version": "4.7.1",
7161
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
7162
+ "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
7163
+ "dev": true,
7164
+ "requires": {
7165
+ "regenerate": "^1.4.0",
7166
+ "regenerate-unicode-properties": "^8.2.0",
7167
+ "regjsgen": "^0.5.1",
7168
+ "regjsparser": "^0.6.4",
7169
+ "unicode-match-property-ecmascript": "^1.0.4",
7170
+ "unicode-match-property-value-ecmascript": "^1.2.0"
7171
+ }
7172
+ },
7173
+ "regjsgen": {
7174
+ "version": "0.5.2",
7175
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
7176
+ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
7177
+ "dev": true
7178
+ },
7179
+ "regjsparser": {
7180
+ "version": "0.6.4",
7181
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
7182
+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
7183
+ "dev": true,
7184
+ "requires": {
7185
+ "jsesc": "~0.5.0"
7186
+ },
7187
+ "dependencies": {
7188
+ "jsesc": {
7189
+ "version": "0.5.0",
7190
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
7191
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
7192
+ "dev": true
7193
+ }
7194
+ }
7195
+ },
7196
+ "remove-trailing-separator": {
7197
+ "version": "1.1.0",
7198
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
7199
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
7200
+ "dev": true
7201
+ },
7202
+ "repeat-element": {
7203
+ "version": "1.1.3",
7204
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
7205
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
7206
+ "dev": true
7207
+ },
7208
+ "repeat-string": {
7209
+ "version": "1.6.1",
7210
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
7211
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
7212
+ "dev": true
7213
+ },
7214
+ "request": {
7215
+ "version": "2.88.2",
7216
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
7217
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
7218
+ "dev": true,
7219
+ "requires": {
7220
+ "aws-sign2": "~0.7.0",
7221
+ "aws4": "^1.8.0",
7222
+ "caseless": "~0.12.0",
7223
+ "combined-stream": "~1.0.6",
7224
+ "extend": "~3.0.2",
7225
+ "forever-agent": "~0.6.1",
7226
+ "form-data": "~2.3.2",
7227
+ "har-validator": "~5.1.3",
7228
+ "http-signature": "~1.2.0",
7229
+ "is-typedarray": "~1.0.0",
7230
+ "isstream": "~0.1.2",
7231
+ "json-stringify-safe": "~5.0.1",
7232
+ "mime-types": "~2.1.19",
7233
+ "oauth-sign": "~0.9.0",
7234
+ "performance-now": "^2.1.0",
7235
+ "qs": "~6.5.2",
7236
+ "safe-buffer": "^5.1.2",
7237
+ "tough-cookie": "~2.5.0",
7238
+ "tunnel-agent": "^0.6.0",
7239
+ "uuid": "^3.3.2"
7240
+ }
7241
+ },
7242
+ "request-promise-core": {
7243
+ "version": "1.1.4",
7244
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
7245
+ "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
7246
+ "dev": true,
7247
+ "requires": {
7248
+ "lodash": "^4.17.19"
7249
+ }
7250
+ },
7251
+ "request-promise-native": {
7252
+ "version": "1.0.9",
7253
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
7254
+ "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
7255
+ "dev": true,
7256
+ "requires": {
7257
+ "request-promise-core": "1.1.4",
7258
+ "stealthy-require": "^1.1.1",
7259
+ "tough-cookie": "^2.3.3"
7260
+ }
7261
+ },
7262
+ "resolve": {
7263
+ "version": "1.18.1",
7264
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
7265
+ "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
7266
+ "dev": true,
7267
+ "requires": {
7268
+ "is-core-module": "^2.0.0",
7269
+ "path-parse": "^1.0.6"
7270
+ }
7271
+ },
7272
+ "resolve-from": {
7273
+ "version": "3.0.0",
7274
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
7275
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
7276
+ "dev": true
7277
+ },
7278
+ "resolve-url": {
7279
+ "version": "0.2.1",
7280
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
7281
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
7282
+ "dev": true
7283
+ },
7284
+ "restore-cursor": {
7285
+ "version": "2.0.0",
7286
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
7287
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
7288
+ "dev": true,
7289
+ "requires": {
7290
+ "onetime": "^2.0.0",
7291
+ "signal-exit": "^3.0.2"
7292
+ }
7293
+ },
7294
+ "ret": {
7295
+ "version": "0.1.15",
7296
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
7297
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
7298
+ "dev": true
7299
+ },
7300
+ "rgb-regex": {
7301
+ "version": "1.0.1",
7302
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
7303
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
7304
+ "dev": true
7305
+ },
7306
+ "rgba-regex": {
7307
+ "version": "1.0.0",
7308
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
7309
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
7310
+ "dev": true
7311
+ },
7312
+ "rimraf": {
7313
+ "version": "3.0.2",
7314
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
7315
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
7316
+ "dev": true,
7317
+ "requires": {
7318
+ "glob": "^7.1.3"
7319
+ }
7320
+ },
7321
+ "ripemd160": {
7322
+ "version": "2.0.2",
7323
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
7324
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
7325
+ "dev": true,
7326
+ "requires": {
7327
+ "hash-base": "^3.0.0",
7328
+ "inherits": "^2.0.1"
7329
+ }
7330
+ },
7331
+ "safe-buffer": {
7332
+ "version": "5.2.0",
7333
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
7334
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
7335
+ "dev": true
7336
+ },
7337
+ "safe-regex": {
7338
+ "version": "1.1.0",
7339
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
7340
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
7341
+ "dev": true,
7342
+ "requires": {
7343
+ "ret": "~0.1.10"
7344
+ }
7345
+ },
7346
+ "safer-buffer": {
7347
+ "version": "2.1.2",
7348
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
7349
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
7350
+ "dev": true
7351
+ },
7352
+ "sax": {
7353
+ "version": "1.2.4",
7354
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
7355
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
7356
+ "dev": true
7357
+ },
7358
+ "saxes": {
7359
+ "version": "3.1.11",
7360
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
7361
+ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
7362
+ "dev": true,
7363
+ "requires": {
7364
+ "xmlchars": "^2.1.1"
7365
+ }
7366
+ },
7367
+ "semver": {
7368
+ "version": "5.7.1",
7369
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
7370
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
7371
+ "dev": true
7372
+ },
7373
+ "send": {
7374
+ "version": "0.17.1",
7375
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
7376
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
7377
+ "dev": true,
7378
+ "requires": {
7379
+ "debug": "2.6.9",
7380
+ "depd": "~1.1.2",
7381
+ "destroy": "~1.0.4",
7382
+ "encodeurl": "~1.0.2",
7383
+ "escape-html": "~1.0.3",
7384
+ "etag": "~1.8.1",
7385
+ "fresh": "0.5.2",
7386
+ "http-errors": "~1.7.2",
7387
+ "mime": "1.6.0",
7388
+ "ms": "2.1.1",
7389
+ "on-finished": "~2.3.0",
7390
+ "range-parser": "~1.2.1",
7391
+ "statuses": "~1.5.0"
7392
+ },
7393
+ "dependencies": {
7394
+ "debug": {
7395
+ "version": "2.6.9",
7396
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
7397
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
7398
+ "dev": true,
7399
+ "requires": {
7400
+ "ms": "2.0.0"
7401
+ },
7402
+ "dependencies": {
7403
+ "ms": {
7404
+ "version": "2.0.0",
7405
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
7406
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
7407
+ "dev": true
7408
+ }
7409
+ }
7410
+ },
7411
+ "ms": {
7412
+ "version": "2.1.1",
7413
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
7414
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
7415
+ "dev": true
7416
+ }
7417
+ }
7418
+ },
7419
+ "serialize-to-js": {
7420
+ "version": "3.1.1",
7421
+ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.1.tgz",
7422
+ "integrity": "sha512-F+NGU0UHMBO4Q965tjw7rvieNVjlH6Lqi2emq/Lc9LUURYJbiCzmpi4Cy1OOjjVPtxu0c+NE85LU6968Wko5ZA==",
7423
+ "dev": true
7424
+ },
7425
+ "serve-static": {
7426
+ "version": "1.14.1",
7427
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
7428
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
7429
+ "dev": true,
7430
+ "requires": {
7431
+ "encodeurl": "~1.0.2",
7432
+ "escape-html": "~1.0.3",
7433
+ "parseurl": "~1.3.3",
7434
+ "send": "0.17.1"
7435
+ }
7436
+ },
7437
+ "set-value": {
7438
+ "version": "2.0.1",
7439
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
7440
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
7441
+ "dev": true,
7442
+ "requires": {
7443
+ "extend-shallow": "^2.0.1",
7444
+ "is-extendable": "^0.1.1",
7445
+ "is-plain-object": "^2.0.3",
7446
+ "split-string": "^3.0.1"
7447
+ },
7448
+ "dependencies": {
7449
+ "extend-shallow": {
7450
+ "version": "2.0.1",
7451
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
7452
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
7453
+ "dev": true,
7454
+ "requires": {
7455
+ "is-extendable": "^0.1.0"
7456
+ }
7457
+ }
7458
+ }
7459
+ },
7460
+ "setimmediate": {
7461
+ "version": "1.0.5",
7462
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
7463
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
7464
+ "dev": true
7465
+ },
7466
+ "setprototypeof": {
7467
+ "version": "1.1.1",
7468
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
7469
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
7470
+ "dev": true
7471
+ },
7472
+ "sha.js": {
7473
+ "version": "2.4.11",
7474
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
7475
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
7476
+ "dev": true,
7477
+ "requires": {
7478
+ "inherits": "^2.0.1",
7479
+ "safe-buffer": "^5.0.1"
7480
+ }
7481
+ },
7482
+ "shallow-copy": {
7483
+ "version": "0.0.1",
7484
+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
7485
+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
7486
+ "dev": true
7487
+ },
7488
+ "shebang-command": {
7489
+ "version": "1.2.0",
7490
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
7491
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
7492
+ "dev": true,
7493
+ "requires": {
7494
+ "shebang-regex": "^1.0.0"
7495
+ }
7496
+ },
7497
+ "shebang-regex": {
7498
+ "version": "1.0.0",
7499
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
7500
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
7501
+ "dev": true
7502
+ },
7503
+ "signal-exit": {
7504
+ "version": "3.0.3",
7505
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
7506
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
7507
+ "dev": true
7508
+ },
7509
+ "simple-swizzle": {
7510
+ "version": "0.2.2",
7511
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
7512
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
7513
+ "dev": true,
7514
+ "requires": {
7515
+ "is-arrayish": "^0.3.1"
7516
+ },
7517
+ "dependencies": {
7518
+ "is-arrayish": {
7519
+ "version": "0.3.2",
7520
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
7521
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
7522
+ "dev": true
7523
+ }
7524
+ }
7525
+ },
7526
+ "snapdragon": {
7527
+ "version": "0.8.2",
7528
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
7529
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
7530
+ "dev": true,
7531
+ "requires": {
7532
+ "base": "^0.11.1",
7533
+ "debug": "^2.2.0",
7534
+ "define-property": "^0.2.5",
7535
+ "extend-shallow": "^2.0.1",
7536
+ "map-cache": "^0.2.2",
7537
+ "source-map": "^0.5.6",
7538
+ "source-map-resolve": "^0.5.0",
7539
+ "use": "^3.1.0"
7540
+ },
7541
+ "dependencies": {
7542
+ "debug": {
7543
+ "version": "2.6.9",
7544
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
7545
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
7546
+ "dev": true,
7547
+ "requires": {
7548
+ "ms": "2.0.0"
7549
+ }
7550
+ },
7551
+ "define-property": {
7552
+ "version": "0.2.5",
7553
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
7554
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
7555
+ "dev": true,
7556
+ "requires": {
7557
+ "is-descriptor": "^0.1.0"
7558
+ }
7559
+ },
7560
+ "extend-shallow": {
7561
+ "version": "2.0.1",
7562
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
7563
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
7564
+ "dev": true,
7565
+ "requires": {
7566
+ "is-extendable": "^0.1.0"
7567
+ }
7568
+ },
7569
+ "ms": {
7570
+ "version": "2.0.0",
7571
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
7572
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
7573
+ "dev": true
7574
+ },
7575
+ "source-map": {
7576
+ "version": "0.5.7",
7577
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
7578
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
7579
+ "dev": true
7580
+ }
7581
+ }
7582
+ },
7583
+ "snapdragon-node": {
7584
+ "version": "2.1.1",
7585
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
7586
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
7587
+ "dev": true,
7588
+ "requires": {
7589
+ "define-property": "^1.0.0",
7590
+ "isobject": "^3.0.0",
7591
+ "snapdragon-util": "^3.0.1"
7592
+ },
7593
+ "dependencies": {
7594
+ "define-property": {
7595
+ "version": "1.0.0",
7596
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
7597
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
7598
+ "dev": true,
7599
+ "requires": {
7600
+ "is-descriptor": "^1.0.0"
7601
+ }
7602
+ },
7603
+ "is-accessor-descriptor": {
7604
+ "version": "1.0.0",
7605
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
7606
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
7607
+ "dev": true,
7608
+ "requires": {
7609
+ "kind-of": "^6.0.0"
7610
+ }
7611
+ },
7612
+ "is-data-descriptor": {
7613
+ "version": "1.0.0",
7614
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
7615
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
7616
+ "dev": true,
7617
+ "requires": {
7618
+ "kind-of": "^6.0.0"
7619
+ }
7620
+ },
7621
+ "is-descriptor": {
7622
+ "version": "1.0.2",
7623
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
7624
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
7625
+ "dev": true,
7626
+ "requires": {
7627
+ "is-accessor-descriptor": "^1.0.0",
7628
+ "is-data-descriptor": "^1.0.0",
7629
+ "kind-of": "^6.0.2"
7630
+ }
7631
+ },
7632
+ "kind-of": {
7633
+ "version": "6.0.3",
7634
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
7635
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
7636
+ "dev": true
7637
+ }
7638
+ }
7639
+ },
7640
+ "snapdragon-util": {
7641
+ "version": "3.0.1",
7642
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
7643
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
7644
+ "dev": true,
7645
+ "requires": {
7646
+ "kind-of": "^3.2.0"
7647
+ }
7648
+ },
7649
+ "source-map": {
7650
+ "version": "0.6.1",
7651
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
7652
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
7653
+ "dev": true
7654
+ },
7655
+ "source-map-resolve": {
7656
+ "version": "0.5.3",
7657
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
7658
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
7659
+ "dev": true,
7660
+ "requires": {
7661
+ "atob": "^2.1.2",
7662
+ "decode-uri-component": "^0.2.0",
7663
+ "resolve-url": "^0.2.1",
7664
+ "source-map-url": "^0.4.0",
7665
+ "urix": "^0.1.0"
7666
+ }
7667
+ },
7668
+ "source-map-support": {
7669
+ "version": "0.5.19",
7670
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
7671
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
7672
+ "dev": true,
7673
+ "requires": {
7674
+ "buffer-from": "^1.0.0",
7675
+ "source-map": "^0.6.0"
7676
+ }
7677
+ },
7678
+ "source-map-url": {
7679
+ "version": "0.4.0",
7680
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
7681
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
7682
+ "dev": true
7683
+ },
7684
+ "split-string": {
7685
+ "version": "3.1.0",
7686
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
7687
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
7688
+ "dev": true,
7689
+ "requires": {
7690
+ "extend-shallow": "^3.0.0"
7691
+ }
7692
+ },
7693
+ "sprintf-js": {
7694
+ "version": "1.1.2",
7695
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
7696
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
7697
+ "dev": true
7698
+ },
7699
+ "sshpk": {
7700
+ "version": "1.16.1",
7701
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
7702
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
7703
+ "dev": true,
7704
+ "requires": {
7705
+ "asn1": "~0.2.3",
7706
+ "assert-plus": "^1.0.0",
7707
+ "bcrypt-pbkdf": "^1.0.0",
7708
+ "dashdash": "^1.12.0",
7709
+ "ecc-jsbn": "~0.1.1",
7710
+ "getpass": "^0.1.1",
7711
+ "jsbn": "~0.1.0",
7712
+ "safer-buffer": "^2.0.2",
7713
+ "tweetnacl": "~0.14.0"
7714
+ }
7715
+ },
7716
+ "stable": {
7717
+ "version": "0.1.8",
7718
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
7719
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
7720
+ "dev": true
7721
+ },
7722
+ "static-eval": {
7723
+ "version": "2.1.0",
7724
+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz",
7725
+ "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==",
7726
+ "dev": true,
7727
+ "requires": {
7728
+ "escodegen": "^1.11.1"
7729
+ },
7730
+ "dependencies": {
7731
+ "escodegen": {
7732
+ "version": "1.14.3",
7733
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
7734
+ "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
7735
+ "dev": true,
7736
+ "requires": {
7737
+ "esprima": "^4.0.1",
7738
+ "estraverse": "^4.2.0",
7739
+ "esutils": "^2.0.2",
7740
+ "optionator": "^0.8.1",
7741
+ "source-map": "~0.6.1"
7742
+ }
7743
+ },
7744
+ "esprima": {
7745
+ "version": "4.0.1",
7746
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
7747
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
7748
+ "dev": true
7749
+ }
7750
+ }
7751
+ },
7752
+ "static-extend": {
7753
+ "version": "0.1.2",
7754
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
7755
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
7756
+ "dev": true,
7757
+ "requires": {
7758
+ "define-property": "^0.2.5",
7759
+ "object-copy": "^0.1.0"
7760
+ },
7761
+ "dependencies": {
7762
+ "define-property": {
7763
+ "version": "0.2.5",
7764
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
7765
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
7766
+ "dev": true,
7767
+ "requires": {
7768
+ "is-descriptor": "^0.1.0"
7769
+ }
7770
+ }
7771
+ }
7772
+ },
7773
+ "static-module": {
7774
+ "version": "2.2.5",
7775
+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
7776
+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
7777
+ "dev": true,
7778
+ "requires": {
7779
+ "concat-stream": "~1.6.0",
7780
+ "convert-source-map": "^1.5.1",
7781
+ "duplexer2": "~0.1.4",
7782
+ "escodegen": "~1.9.0",
7783
+ "falafel": "^2.1.0",
7784
+ "has": "^1.0.1",
7785
+ "magic-string": "^0.22.4",
7786
+ "merge-source-map": "1.0.4",
7787
+ "object-inspect": "~1.4.0",
7788
+ "quote-stream": "~1.0.2",
7789
+ "readable-stream": "~2.3.3",
7790
+ "shallow-copy": "~0.0.1",
7791
+ "static-eval": "^2.0.0",
7792
+ "through2": "~2.0.3"
7793
+ },
7794
+ "dependencies": {
7795
+ "object-inspect": {
7796
+ "version": "1.4.1",
7797
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
7798
+ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==",
7799
+ "dev": true
7800
+ }
7801
+ }
7802
+ },
7803
+ "statuses": {
7804
+ "version": "1.5.0",
7805
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
7806
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
7807
+ "dev": true
7808
+ },
7809
+ "stealthy-require": {
7810
+ "version": "1.1.1",
7811
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
7812
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
7813
+ "dev": true
7814
+ },
7815
+ "stream-browserify": {
7816
+ "version": "2.0.2",
7817
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
7818
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
7819
+ "dev": true,
7820
+ "requires": {
7821
+ "inherits": "~2.0.1",
7822
+ "readable-stream": "^2.0.2"
7823
+ }
7824
+ },
7825
+ "stream-http": {
7826
+ "version": "2.8.3",
7827
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
7828
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
7829
+ "dev": true,
7830
+ "requires": {
7831
+ "builtin-status-codes": "^3.0.0",
7832
+ "inherits": "^2.0.1",
7833
+ "readable-stream": "^2.3.6",
7834
+ "to-arraybuffer": "^1.0.0",
7835
+ "xtend": "^4.0.0"
7836
+ }
7837
+ },
7838
+ "string.prototype.trimend": {
7839
+ "version": "1.0.1",
7840
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
7841
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
7842
+ "dev": true,
7843
+ "requires": {
7844
+ "define-properties": "^1.1.3",
7845
+ "es-abstract": "^1.17.5"
7846
+ },
7847
+ "dependencies": {
7848
+ "es-abstract": {
7849
+ "version": "1.17.7",
7850
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
7851
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
7852
+ "dev": true,
7853
+ "requires": {
7854
+ "es-to-primitive": "^1.2.1",
7855
+ "function-bind": "^1.1.1",
7856
+ "has": "^1.0.3",
7857
+ "has-symbols": "^1.0.1",
7858
+ "is-callable": "^1.2.2",
7859
+ "is-regex": "^1.1.1",
7860
+ "object-inspect": "^1.8.0",
7861
+ "object-keys": "^1.1.1",
7862
+ "object.assign": "^4.1.1",
7863
+ "string.prototype.trimend": "^1.0.1",
7864
+ "string.prototype.trimstart": "^1.0.1"
7865
+ }
7866
+ }
7867
+ }
7868
+ },
7869
+ "string.prototype.trimstart": {
7870
+ "version": "1.0.1",
7871
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
7872
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
7873
+ "dev": true,
7874
+ "requires": {
7875
+ "define-properties": "^1.1.3",
7876
+ "es-abstract": "^1.17.5"
7877
+ },
7878
+ "dependencies": {
7879
+ "es-abstract": {
7880
+ "version": "1.17.7",
7881
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
7882
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
7883
+ "dev": true,
7884
+ "requires": {
7885
+ "es-to-primitive": "^1.2.1",
7886
+ "function-bind": "^1.1.1",
7887
+ "has": "^1.0.3",
7888
+ "has-symbols": "^1.0.1",
7889
+ "is-callable": "^1.2.2",
7890
+ "is-regex": "^1.1.1",
7891
+ "object-inspect": "^1.8.0",
7892
+ "object-keys": "^1.1.1",
7893
+ "object.assign": "^4.1.1",
7894
+ "string.prototype.trimend": "^1.0.1",
7895
+ "string.prototype.trimstart": "^1.0.1"
7896
+ }
7897
+ }
7898
+ }
7899
+ },
7900
+ "string_decoder": {
7901
+ "version": "1.1.1",
7902
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
7903
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
7904
+ "dev": true,
7905
+ "requires": {
7906
+ "safe-buffer": "~5.1.0"
7907
+ },
7908
+ "dependencies": {
7909
+ "safe-buffer": {
7910
+ "version": "5.1.2",
7911
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
7912
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
7913
+ "dev": true
7914
+ }
7915
+ }
7916
+ },
7917
+ "strip-ansi": {
7918
+ "version": "0.3.0",
7919
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
7920
+ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
7921
+ "dev": true,
7922
+ "requires": {
7923
+ "ansi-regex": "^0.2.1"
7924
+ }
7925
+ },
7926
+ "stylehacks": {
7927
+ "version": "4.0.3",
7928
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
7929
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
7930
+ "dev": true,
7931
+ "requires": {
7932
+ "browserslist": "^4.0.0",
7933
+ "postcss": "^7.0.0",
7934
+ "postcss-selector-parser": "^3.0.0"
7935
+ },
7936
+ "dependencies": {
7937
+ "postcss-selector-parser": {
7938
+ "version": "3.1.2",
7939
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
7940
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
7941
+ "dev": true,
7942
+ "requires": {
7943
+ "dot-prop": "^5.2.0",
7944
+ "indexes-of": "^1.0.1",
7945
+ "uniq": "^1.0.1"
7946
+ }
7947
+ }
7948
+ }
7949
+ },
7950
+ "supports-color": {
7951
+ "version": "0.2.0",
7952
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
7953
+ "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
7954
+ "dev": true
7955
+ },
7956
+ "svgo": {
7957
+ "version": "1.3.2",
7958
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
7959
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
7960
+ "dev": true,
7961
+ "requires": {
7962
+ "chalk": "^2.4.1",
7963
+ "coa": "^2.0.2",
7964
+ "css-select": "^2.0.0",
7965
+ "css-select-base-adapter": "^0.1.1",
7966
+ "css-tree": "1.0.0-alpha.37",
7967
+ "csso": "^4.0.2",
7968
+ "js-yaml": "^3.13.1",
7969
+ "mkdirp": "~0.5.1",
7970
+ "object.values": "^1.1.0",
7971
+ "sax": "~1.2.4",
7972
+ "stable": "^0.1.8",
7973
+ "unquote": "~1.1.1",
7974
+ "util.promisify": "~1.0.0"
7975
+ },
7976
+ "dependencies": {
7977
+ "ansi-styles": {
7978
+ "version": "3.2.1",
7979
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
7980
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
7981
+ "dev": true,
7982
+ "requires": {
7983
+ "color-convert": "^1.9.0"
7984
+ }
7985
+ },
7986
+ "chalk": {
7987
+ "version": "2.4.2",
7988
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
7989
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
7990
+ "dev": true,
7991
+ "requires": {
7992
+ "ansi-styles": "^3.2.1",
7993
+ "escape-string-regexp": "^1.0.5",
7994
+ "supports-color": "^5.3.0"
7995
+ }
7996
+ },
7997
+ "supports-color": {
7998
+ "version": "5.5.0",
7999
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
8000
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
8001
+ "dev": true,
8002
+ "requires": {
8003
+ "has-flag": "^3.0.0"
8004
+ }
8005
+ }
8006
+ }
8007
+ },
8008
+ "symbol-tree": {
8009
+ "version": "3.2.4",
8010
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
8011
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
8012
+ "dev": true
8013
+ },
8014
+ "terser": {
8015
+ "version": "3.17.0",
8016
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
8017
+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
8018
+ "dev": true,
8019
+ "requires": {
8020
+ "commander": "^2.19.0",
8021
+ "source-map": "~0.6.1",
8022
+ "source-map-support": "~0.5.10"
8023
+ }
8024
+ },
8025
+ "through2": {
8026
+ "version": "2.0.5",
8027
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
8028
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
8029
+ "dev": true,
8030
+ "requires": {
8031
+ "readable-stream": "~2.3.6",
8032
+ "xtend": "~4.0.1"
8033
+ }
8034
+ },
8035
+ "time-grunt": {
8036
+ "version": "1.2.2",
8037
+ "resolved": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.2.2.tgz",
8038
+ "integrity": "sha1-k88k1LficEuBPu27e8AMrU7zcwk=",
8039
+ "dev": true,
8040
+ "requires": {
8041
+ "chalk": "^1.0.0",
8042
+ "date-time": "^1.0.0",
8043
+ "figures": "^1.0.0",
8044
+ "hooker": "^0.2.3",
8045
+ "number-is-nan": "^1.0.0",
8046
+ "pretty-ms": "^2.1.0",
8047
+ "text-table": "^0.2.0"
8048
+ },
8049
+ "dependencies": {
8050
+ "chalk": {
8051
+ "version": "1.1.3",
8052
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
8053
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
8054
+ "dev": true,
8055
+ "requires": {
8056
+ "ansi-styles": "^2.2.1",
8057
+ "escape-string-regexp": "^1.0.2",
8058
+ "has-ansi": "^2.0.0",
8059
+ "strip-ansi": "^3.0.0",
8060
+ "supports-color": "^2.0.0"
8061
+ },
8062
+ "dependencies": {
8063
+ "ansi-styles": {
8064
+ "version": "2.2.1",
8065
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
8066
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
8067
+ "dev": true
8068
+ },
8069
+ "escape-string-regexp": {
8070
+ "version": "1.0.5",
8071
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
8072
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
8073
+ "dev": true
8074
+ },
8075
+ "has-ansi": {
8076
+ "version": "2.0.0",
8077
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
8078
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
8079
+ "dev": true,
8080
+ "requires": {
8081
+ "ansi-regex": "^2.0.0"
8082
+ },
8083
+ "dependencies": {
8084
+ "ansi-regex": {
8085
+ "version": "2.1.1",
8086
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
8087
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
8088
+ "dev": true
8089
+ }
8090
+ }
8091
+ },
8092
+ "strip-ansi": {
8093
+ "version": "3.0.1",
8094
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
8095
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
8096
+ "dev": true,
8097
+ "requires": {
8098
+ "ansi-regex": "^2.0.0"
8099
+ },
8100
+ "dependencies": {
8101
+ "ansi-regex": {
8102
+ "version": "2.1.1",
8103
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
8104
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
8105
+ "dev": true
8106
+ }
8107
+ }
8108
+ },
8109
+ "supports-color": {
8110
+ "version": "2.0.0",
8111
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
8112
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
8113
+ "dev": true
8114
+ }
8115
+ }
8116
+ },
8117
+ "date-time": {
8118
+ "version": "1.1.0",
8119
+ "resolved": "https://registry.npmjs.org/date-time/-/date-time-1.1.0.tgz",
8120
+ "integrity": "sha1-GIdtC9pMGf5w3Tv0sDTygbEqQLY=",
8121
+ "dev": true,
8122
+ "requires": {
8123
+ "time-zone": "^0.1.0"
8124
+ },
8125
+ "dependencies": {
8126
+ "time-zone": {
8127
+ "version": "0.1.0",
8128
+ "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-0.1.0.tgz",
8129
+ "integrity": "sha1-Sncotqwo2w4Aj1FAQ/1VW9VXO0Y=",
8130
+ "dev": true
8131
+ }
8132
+ }
8133
+ },
8134
+ "figures": {
8135
+ "version": "1.7.0",
8136
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
8137
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
8138
+ "dev": true,
8139
+ "requires": {
8140
+ "escape-string-regexp": "^1.0.5",
8141
+ "object-assign": "^4.1.0"
8142
+ },
8143
+ "dependencies": {
8144
+ "escape-string-regexp": {
8145
+ "version": "1.0.5",
8146
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
8147
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
8148
+ "dev": true
8149
+ },
8150
+ "object-assign": {
8151
+ "version": "4.1.1",
8152
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
8153
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
8154
+ "dev": true
8155
+ }
8156
+ }
8157
+ },
8158
+ "hooker": {
8159
+ "version": "0.2.3",
8160
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
8161
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
8162
+ "dev": true
8163
+ },
8164
+ "number-is-nan": {
8165
+ "version": "1.0.1",
8166
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
8167
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
8168
+ "dev": true
8169
+ },
8170
+ "pretty-ms": {
8171
+ "version": "2.1.0",
8172
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz",
8173
+ "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=",
8174
+ "dev": true,
8175
+ "requires": {
8176
+ "is-finite": "^1.0.1",
8177
+ "parse-ms": "^1.0.0",
8178
+ "plur": "^1.0.0"
8179
+ },
8180
+ "dependencies": {
8181
+ "is-finite": {
8182
+ "version": "1.0.2",
8183
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
8184
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
8185
+ "dev": true,
8186
+ "requires": {
8187
+ "number-is-nan": "^1.0.0"
8188
+ }
8189
+ },
8190
+ "parse-ms": {
8191
+ "version": "1.0.1",
8192
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz",
8193
+ "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=",
8194
+ "dev": true
8195
+ },
8196
+ "plur": {
8197
+ "version": "1.0.0",
8198
+ "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz",
8199
+ "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=",
8200
+ "dev": true
8201
+ }
8202
+ }
8203
+ },
8204
+ "text-table": {
8205
+ "version": "0.2.0",
8206
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
8207
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
8208
+ "dev": true
8209
+ }
8210
+ }
8211
+ },
8212
+ "timers-browserify": {
8213
+ "version": "2.0.11",
8214
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
8215
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
8216
+ "dev": true,
8217
+ "requires": {
8218
+ "setimmediate": "^1.0.4"
8219
+ }
8220
+ },
8221
+ "timsort": {
8222
+ "version": "0.3.0",
8223
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
8224
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
8225
+ "dev": true
8226
+ },
8227
+ "tiny-inflate": {
8228
+ "version": "1.0.3",
8229
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
8230
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
8231
+ "dev": true
8232
+ },
8233
+ "to-arraybuffer": {
8234
+ "version": "1.0.1",
8235
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
8236
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
8237
+ "dev": true
8238
+ },
8239
+ "to-fast-properties": {
8240
+ "version": "2.0.0",
8241
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
8242
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
8243
+ "dev": true
8244
+ },
8245
+ "to-object-path": {
8246
+ "version": "0.3.0",
8247
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
8248
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
8249
+ "dev": true,
8250
+ "requires": {
8251
+ "kind-of": "^3.0.2"
8252
+ }
8253
+ },
8254
+ "to-regex": {
8255
+ "version": "3.0.2",
8256
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
8257
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
8258
+ "dev": true,
8259
+ "requires": {
8260
+ "define-property": "^2.0.2",
8261
+ "extend-shallow": "^3.0.2",
8262
+ "regex-not": "^1.0.2",
8263
+ "safe-regex": "^1.1.0"
8264
+ }
8265
+ },
8266
+ "to-regex-range": {
8267
+ "version": "2.1.1",
8268
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
8269
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
8270
+ "dev": true,
8271
+ "requires": {
8272
+ "is-number": "^3.0.0",
8273
+ "repeat-string": "^1.6.1"
8274
+ }
8275
+ },
8276
+ "toidentifier": {
8277
+ "version": "1.0.0",
8278
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
8279
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
8280
+ "dev": true
8281
+ },
8282
+ "tough-cookie": {
8283
+ "version": "2.5.0",
8284
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
8285
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
8286
+ "dev": true,
8287
+ "requires": {
8288
+ "psl": "^1.1.28",
8289
+ "punycode": "^2.1.1"
8290
+ }
8291
+ },
8292
+ "tr46": {
8293
+ "version": "1.0.1",
8294
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
8295
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
8296
+ "dev": true,
8297
+ "requires": {
8298
+ "punycode": "^2.1.0"
8299
+ }
8300
+ },
8301
+ "tty-browserify": {
8302
+ "version": "0.0.0",
8303
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
8304
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
8305
+ "dev": true
8306
+ },
8307
+ "tunnel-agent": {
8308
+ "version": "0.6.0",
8309
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
8310
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
8311
+ "dev": true,
8312
+ "requires": {
8313
+ "safe-buffer": "^5.0.1"
8314
+ }
8315
+ },
8316
+ "tweetnacl": {
8317
+ "version": "0.14.5",
8318
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
8319
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
8320
+ "dev": true
8321
+ },
8322
+ "type-check": {
8323
+ "version": "0.3.2",
8324
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
8325
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
8326
+ "dev": true,
8327
+ "requires": {
8328
+ "prelude-ls": "~1.1.2"
8329
+ }
8330
+ },
8331
+ "typedarray": {
8332
+ "version": "0.0.6",
8333
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
8334
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
8335
+ "dev": true
8336
+ },
8337
+ "uncss": {
8338
+ "version": "0.17.3",
8339
+ "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz",
8340
+ "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==",
8341
+ "dev": true,
8342
+ "requires": {
8343
+ "commander": "^2.20.0",
8344
+ "glob": "^7.1.4",
8345
+ "is-absolute-url": "^3.0.1",
8346
+ "is-html": "^1.1.0",
8347
+ "jsdom": "^14.1.0",
8348
+ "lodash": "^4.17.15",
8349
+ "postcss": "^7.0.17",
8350
+ "postcss-selector-parser": "6.0.2",
8351
+ "request": "^2.88.0"
8352
+ },
8353
+ "dependencies": {
8354
+ "is-absolute-url": {
8355
+ "version": "3.0.3",
8356
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
8357
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
8358
+ "dev": true
8359
+ },
8360
+ "postcss-selector-parser": {
8361
+ "version": "6.0.2",
8362
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
8363
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
8364
+ "dev": true,
8365
+ "requires": {
8366
+ "cssesc": "^3.0.0",
8367
+ "indexes-of": "^1.0.1",
8368
+ "uniq": "^1.0.1"
8369
+ }
8370
+ }
8371
+ }
8372
+ },
8373
+ "underscore": {
8374
+ "version": "1.8.3",
8375
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
8376
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
8377
+ "dev": true
8378
+ },
8379
+ "underscore.string": {
8380
+ "version": "3.3.5",
8381
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz",
8382
+ "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==",
8383
+ "dev": true,
8384
+ "requires": {
8385
+ "sprintf-js": "^1.0.3",
8386
+ "util-deprecate": "^1.0.2"
8387
+ }
8388
+ },
8389
+ "unicode-canonical-property-names-ecmascript": {
8390
+ "version": "1.0.4",
8391
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
8392
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
8393
+ "dev": true
8394
+ },
8395
+ "unicode-match-property-ecmascript": {
8396
+ "version": "1.0.4",
8397
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
8398
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
8399
+ "dev": true,
8400
+ "requires": {
8401
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
8402
+ "unicode-property-aliases-ecmascript": "^1.0.4"
8403
+ }
8404
+ },
8405
+ "unicode-match-property-value-ecmascript": {
8406
+ "version": "1.2.0",
8407
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
8408
+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
8409
+ "dev": true
8410
+ },
8411
+ "unicode-property-aliases-ecmascript": {
8412
+ "version": "1.1.0",
8413
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
8414
+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
8415
+ "dev": true
8416
+ },
8417
+ "unicode-trie": {
8418
+ "version": "0.3.1",
8419
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
8420
+ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
8421
+ "dev": true,
8422
+ "requires": {
8423
+ "pako": "^0.2.5",
8424
+ "tiny-inflate": "^1.0.0"
8425
+ }
8426
+ },
8427
+ "union-value": {
8428
+ "version": "1.0.1",
8429
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
8430
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
8431
+ "dev": true,
8432
+ "requires": {
8433
+ "arr-union": "^3.1.0",
8434
+ "get-value": "^2.0.6",
8435
+ "is-extendable": "^0.1.1",
8436
+ "set-value": "^2.0.1"
8437
+ }
8438
+ },
8439
+ "uniq": {
8440
+ "version": "1.0.1",
8441
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
8442
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
8443
+ "dev": true
8444
+ },
8445
+ "uniqs": {
8446
+ "version": "2.0.0",
8447
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
8448
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
8449
+ "dev": true
8450
+ },
8451
+ "unquote": {
8452
+ "version": "1.1.1",
8453
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
8454
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
8455
+ "dev": true
8456
+ },
8457
+ "unset-value": {
8458
+ "version": "1.0.0",
8459
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
8460
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
8461
+ "dev": true,
8462
+ "requires": {
8463
+ "has-value": "^0.3.1",
8464
+ "isobject": "^3.0.0"
8465
+ },
8466
+ "dependencies": {
8467
+ "has-value": {
8468
+ "version": "0.3.1",
8469
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
8470
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
8471
+ "dev": true,
8472
+ "requires": {
8473
+ "get-value": "^2.0.3",
8474
+ "has-values": "^0.1.4",
8475
+ "isobject": "^2.0.0"
8476
+ },
8477
+ "dependencies": {
8478
+ "isobject": {
8479
+ "version": "2.1.0",
8480
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
8481
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
8482
+ "dev": true,
8483
+ "requires": {
8484
+ "isarray": "1.0.0"
8485
+ }
8486
+ }
8487
+ }
8488
+ },
8489
+ "has-values": {
8490
+ "version": "0.1.4",
8491
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
8492
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
8493
+ "dev": true
8494
+ }
8495
+ }
8496
+ },
8497
+ "upath": {
8498
+ "version": "1.2.0",
8499
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
8500
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
8501
+ "dev": true
8502
+ },
8503
+ "uri-js": {
8504
+ "version": "4.4.0",
8505
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
8506
+ "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
8507
+ "dev": true,
8508
+ "requires": {
8509
+ "punycode": "^2.1.0"
8510
+ }
8511
+ },
8512
+ "urix": {
8513
+ "version": "0.1.0",
8514
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
8515
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
8516
+ "dev": true
8517
+ },
8518
+ "url": {
8519
+ "version": "0.11.0",
8520
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
8521
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
8522
+ "dev": true,
8523
+ "requires": {
8524
+ "punycode": "1.3.2",
8525
+ "querystring": "0.2.0"
8526
+ },
8527
+ "dependencies": {
8528
+ "punycode": {
8529
+ "version": "1.3.2",
8530
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
8531
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
8532
+ "dev": true
8533
+ }
8534
+ }
8535
+ },
8536
+ "use": {
8537
+ "version": "3.1.1",
8538
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
8539
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
8540
+ "dev": true
8541
+ },
8542
+ "util": {
8543
+ "version": "0.11.1",
8544
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
8545
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
8546
+ "dev": true,
8547
+ "requires": {
8548
+ "inherits": "2.0.3"
8549
+ },
8550
+ "dependencies": {
8551
+ "inherits": {
8552
+ "version": "2.0.3",
8553
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
8554
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
8555
+ "dev": true
8556
+ }
8557
+ }
8558
+ },
8559
+ "util-deprecate": {
8560
+ "version": "1.0.2",
8561
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
8562
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
8563
+ "dev": true
8564
+ },
8565
+ "util.promisify": {
8566
+ "version": "1.0.1",
8567
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
8568
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
8569
+ "dev": true,
8570
+ "requires": {
8571
+ "define-properties": "^1.1.3",
8572
+ "es-abstract": "^1.17.2",
8573
+ "has-symbols": "^1.0.1",
8574
+ "object.getownpropertydescriptors": "^2.1.0"
8575
+ },
8576
+ "dependencies": {
8577
+ "es-abstract": {
8578
+ "version": "1.17.7",
8579
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
8580
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
8581
+ "dev": true,
8582
+ "requires": {
8583
+ "es-to-primitive": "^1.2.1",
8584
+ "function-bind": "^1.1.1",
8585
+ "has": "^1.0.3",
8586
+ "has-symbols": "^1.0.1",
8587
+ "is-callable": "^1.2.2",
8588
+ "is-regex": "^1.1.1",
8589
+ "object-inspect": "^1.8.0",
8590
+ "object-keys": "^1.1.1",
8591
+ "object.assign": "^4.1.1",
8592
+ "string.prototype.trimend": "^1.0.1",
8593
+ "string.prototype.trimstart": "^1.0.1"
8594
+ }
8595
+ }
8596
+ }
8597
+ },
8598
+ "uuid": {
8599
+ "version": "3.4.0",
8600
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
8601
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
8602
+ "dev": true
8603
+ },
8604
+ "v8-compile-cache": {
8605
+ "version": "2.1.1",
8606
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
8607
+ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
8608
+ "dev": true
8609
+ },
8610
+ "vendors": {
8611
+ "version": "1.0.4",
8612
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
8613
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
8614
+ "dev": true
8615
+ },
8616
+ "verror": {
8617
+ "version": "1.10.0",
8618
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
8619
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
8620
+ "dev": true,
8621
+ "requires": {
8622
+ "assert-plus": "^1.0.0",
8623
+ "core-util-is": "1.0.2",
8624
+ "extsprintf": "^1.2.0"
8625
+ }
8626
+ },
8627
+ "vlq": {
8628
+ "version": "0.2.3",
8629
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
8630
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
8631
+ "dev": true
8632
+ },
8633
+ "vm-browserify": {
8634
+ "version": "1.1.2",
8635
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
8636
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
8637
+ "dev": true
8638
+ },
8639
+ "w3c-hr-time": {
8640
+ "version": "1.0.2",
8641
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
8642
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
8643
+ "dev": true,
8644
+ "requires": {
8645
+ "browser-process-hrtime": "^1.0.0"
8646
+ }
8647
+ },
8648
+ "w3c-xmlserializer": {
8649
+ "version": "1.1.2",
8650
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
8651
+ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
8652
+ "dev": true,
8653
+ "requires": {
8654
+ "domexception": "^1.0.1",
8655
+ "webidl-conversions": "^4.0.2",
8656
+ "xml-name-validator": "^3.0.0"
8657
+ }
8658
+ },
8659
+ "wcwidth": {
8660
+ "version": "1.0.1",
8661
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
8662
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
8663
+ "dev": true,
8664
+ "requires": {
8665
+ "defaults": "^1.0.3"
8666
+ }
8667
+ },
8668
+ "webidl-conversions": {
8669
+ "version": "4.0.2",
8670
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
8671
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
8672
+ "dev": true
8673
+ },
8674
+ "whatwg-encoding": {
8675
+ "version": "1.0.5",
8676
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
8677
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
8678
+ "dev": true,
8679
+ "requires": {
8680
+ "iconv-lite": "0.4.24"
8681
+ }
8682
+ },
8683
+ "whatwg-mimetype": {
8684
+ "version": "2.3.0",
8685
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
8686
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
8687
+ "dev": true
8688
+ },
8689
+ "whatwg-url": {
8690
+ "version": "7.1.0",
8691
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
8692
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
8693
+ "dev": true,
8694
+ "requires": {
8695
+ "lodash.sortby": "^4.7.0",
8696
+ "tr46": "^1.0.1",
8697
+ "webidl-conversions": "^4.0.2"
8698
+ }
8699
+ },
8700
+ "which": {
8701
+ "version": "1.3.1",
8702
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
8703
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
8704
+ "dev": true,
8705
+ "requires": {
8706
+ "isexe": "^2.0.0"
8707
+ }
8708
+ },
8709
+ "word-wrap": {
8710
+ "version": "1.2.3",
8711
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
8712
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
8713
+ "dev": true
8714
+ },
8715
+ "wrappy": {
8716
+ "version": "1.0.2",
8717
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
8718
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
8719
+ "dev": true
8720
+ },
8721
+ "ws": {
8722
+ "version": "5.2.2",
8723
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
8724
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
8725
+ "dev": true,
8726
+ "requires": {
8727
+ "async-limiter": "~1.0.0"
8728
+ }
8729
+ },
8730
+ "xml-name-validator": {
8731
+ "version": "3.0.0",
8732
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
8733
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
8734
+ "dev": true
8735
+ },
8736
+ "xmlchars": {
8737
+ "version": "2.2.0",
8738
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
8739
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
8740
+ "dev": true
8741
+ },
8742
+ "xtend": {
8743
+ "version": "4.0.2",
8744
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
8745
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
8746
+ "dev": true
8747
+ }
8748
+ }
8749
+ }
vendor/skyverge/wc-plugin-framework/package.json ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "wc-plugin-framework",
3
+ "version": "5.10.0",
4
+ "title": "WooCommerce Plugin Framework",
5
+ "author": "SkyVerge Team",
6
+ "homepage": "https://github.com/skyverge/wc-plugin-framework#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/skyverge/wc-plugin-framework.git"
10
+ },
11
+ "license": "GPL-3.0",
12
+ "bugs": {
13
+ "url": "https://github.com/skyverge/wc-plugin-framework/issues"
14
+ },
15
+ "engines": {
16
+ "node": ">= 0.10.0"
17
+ },
18
+ "scripts": {
19
+ "clean": "rimraf woocommerce/payment-gateway/assets/dist",
20
+ "build:parcel": "parcel build 'woocommerce/payment-gateway/assets/js/**/*.js' 'woocommerce/payment-gateway/assets/js/**/*.coffee' --out-dir woocommerce/payment-gateway/assets/dist --public-url ..",
21
+ "build": "grunt default && npm run build:parcel"
22
+ },
23
+ "devDependencies": {
24
+ "coffeescript": "^2.5.1",
25
+ "gettext-parser": "^1.4.0",
26
+ "grunt": "~0.4.5",
27
+ "grunt-contrib-clean": "~0.6.0",
28
+ "grunt-contrib-coffee": "~0.13.0",
29
+ "grunt-contrib-sass": "~0.9.2",
30
+ "grunt-newer": "~1.1.1",
31
+ "grunt-notify": "^0.4.5",
32
+ "grunt-potomo": "^3.5.0",
33
+ "grunt-shell": "^1.3.1",
34
+ "grunt-text-replace": "^0.4.0",
35
+ "grunt-wp-i18n": "^0.5.4",
36
+ "load-grunt-tasks": "~3.2.0",
37
+ "parcel-bundler": "^1.12.4",
38
+ "rimraf": "^3.0.2",
39
+ "time-grunt": "~1.2.1",
40
+ "underscore": "~1.8.3",
41
+ "underscore.string": "~3.3.5"
42
+ }
43
+ }
vendor/skyverge/wc-plugin-framework/readme.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ # WooCommerce Plugin Framework
2
+
3
+ [![Built with Grunt](https://gruntjs.com/cdn/builtwith.svg)](http://gruntjs.com/) [![Build Status](https://travis-ci.org/skyverge/wc-plugin-framework.svg?branch=master)](https://travis-ci.org/skyverge/wc-plugin-framework) [![Coverage Status](https://coveralls.io/repos/skyverge/wc-plugin-framework/badge.svg?branch=master&service=github)](https://coveralls.io/github/skyverge/wc-plugin-framework?branch=master) [![Code Climate](https://codeclimate.com/github/skyverge/wc-plugin-framework/badges/gpa.svg)](https://codeclimate.com/github/skyverge/wc-plugin-framework)
4
+
5
+ The SkyVerge WooCommerce Plugin Framework is a set of related classes and helpers that make it easy to build and maintain WooCommerce extensions.
vendor/skyverge/wc-plugin-framework/tests/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # WooCommerce Plugin Framework Tests
2
+
3
+ ## Setup
4
+
5
+ 1) Install dependencies with `composer install`
6
+ 1) Copy the `.dist.env` file to `.env` and fill in your local environment variables. Note: be sure to use a local environment that is separate from your usual development environment, and point the acceptance and integration variables to two separate databases.
7
+ 1) Copy the `codeception.local.yml` file to `codeception.yml`. You can use this file to add any custom Codeception configurations.
8
+
9
+ ## Running Tests
10
+
11
+ From the root directory, run:
12
+ - `vendor/bin/codecept run unit` for unit tests
13
+ - `vendor/bin/codecept run integration` for integration tests
14
+
15
+ // TODO: acceptance test instructions.
vendor/skyverge/wc-plugin-framework/tests/_archive/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ src_dir: .
2
+ coverage_clover: ./tmp/clover.xml
3
+ json_path: ./tmp/coveralls-upload.json
vendor/skyverge/wc-plugin-framework/tests/_archive/.travis.yml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: php
2
+
3
+ php:
4
+ - '7.1'
5
+ - '7.2'
6
+
7
+ install:
8
+ - composer install
9
+
10
+ script: php vendor/bin/phpunit --testsuite unit --configuration phpunit.travis.xml
11
+
12
+ after_script:
13
+ - php vendor/bin/php-coveralls -v
vendor/skyverge/wc-plugin-framework/tests/_archive/README.md ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # WooCommerce Plugin Framework Tests
2
+
3
+ ## Setup
4
+
5
+ 1) Install dependencies with Composer:
6
+
7
+ $ composer install
8
+
9
+ 2) Verify that you've installed the dependencies correctly:
10
+
11
+ $ vendor/bin/phpunit --version
12
+
13
+ 3) Have a drink, you're done!
14
+
15
+ ## Running Tests
16
+
17
+ In the root directory, run phpunit:
18
+
19
+ $ vendor/bin/phpunit
20
+
21
+ The tests will execute and you'll be presented with a summary. Code coverage documentation is automatically generated as HTML in the `tmp/coverage` directory.
22
+
23
+ Note that unit tests are run by default, see the sections below for information on running the specific test suites.
24
+
25
+ You can run specific tests by providing the path and filename to the test class:
26
+
27
+ $ phpunit tests/unit-tests/api/webhooks
28
+
29
+ A text code coverage summary can be displayed using the `--coverage-text` option:
30
+
31
+ $ phpunit --coverage-text
32
+
33
+ ## Unit Tests
34
+
35
+ We use [wpMock](https://github.com/10up/wp_mock) to unit test without loading WordPress or WooCommerce. It is a mocking framework specifically designed for use with WordPress. Unit tests are the default test suite run when executing `phpunit`.
36
+
37
+ ## Integration Tests
38
+
39
+ Integration is a bit of a misnomer here, but our goal is to test the framework code with live WordPress/WooCommerce install. To run integration tests, run:
40
+
41
+ $ vendor/bin/phpunit --testsuite integration
42
+
43
+ TODO: installing WP/WC, etc
44
+
45
+ ## Writing Tests
46
+
47
+ * Each test file should roughly correspond to an associated source file, e.g. the `plugin.php` file covers the `class-sv-wc-helper.php` file
48
+ * Each test method should cover a single method or function with a single assertion. Make liberal use of data providers to reduce code duplication and enhance the range of data tested against the method.
49
+ * A single method or function can have multiple associated test methods if it's a large or complex method
50
+ * Use the test coverage HTML report (under `tmp/coverage/index.html`) to examine which lines your tests are covering and aim for 100% coverage
51
+ * For code that cannot be tested (e.g. conditional code for a certain PHP version or a missing extension), you can exclude the code from coverage using a comment: `// @codeCoverageIgnoreStart` and `// @codeCoverageIgnoreEnd`.
52
+ * In addition to covering each line of a method/function, make sure to test common input and edge cases.
53
+ * Prefer `assertsEquals()` where possible as it tests both type & equality
54
+ * Remember that only methods prefixed with `test` will be run so use helper methods liberally to keep test methods small and reduce code duplication. If there is a common helper method used in multiple test files, consider adding it to the `Test_Case` class so it can be shared.
55
+ * When writing integration tests, remember that filters persist between test cases so be sure to remove them in your test method or in the `tearDown()` method.
56
+
57
+ ## Automated Tests
58
+
59
+ Tests are automatically run with [Travis-CI](https://travis-ci.org) for each commit and pull request.
60
+
61
+ ## Code Coverage
62
+
63
+ Code coverage is available on [Coveralls](https://coveralls.io/) which receives updated data after each Travis build.
64
+
65
+ ## TODO
66
+ * Automatically test PHP 5.2/5.3 compat using [PHPCompatibility](https://github.com/wimg/PHPCompatibility)
vendor/skyverge/wc-plugin-framework/tests/_archive/bootstrap.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Patchwork must loaded first
4
+ require_once( dirname( dirname( __FILE__ ) ) . '/vendor/antecedent/patchwork/Patchwork.php' );
5
+
6
+ /**
7
+ * WC Plugin Framework Unit/Integration Tests Bootstrap
8
+ *
9
+ * @since 4.0.1-1
10
+ */
11
+ class SV_WC_Plugin_Framework_Tests_Bootstrap {
12
+
13
+
14
+ /** @var \SV_WC_Plugin_Framework_Tests_Bootstrap instance */
15
+ protected static $instance = null;
16
+
17
+ public $test_suite;
18
+
19
+ /** @var string testing directory */
20
+ public $tests_dir;
21
+
22
+ /** @var string framework directory */
23
+ public $framework_dir;
24
+
25
+
26
+ /**
27
+ * Setup the unit testing environment
28
+ *
29
+ * @since 4.0.1-1
30
+ */
31
+ public function __construct() {
32
+
33
+ ini_set( 'display_errors','on' );
34
+ error_reporting( E_ALL );
35
+
36
+ $this->tests_dir = dirname( __FILE__ );
37
+ $this->framework_dir = dirname( $this->tests_dir );
38
+
39
+ // set test type, default to unit if not set
40
+ $arg_key = array_search( '--testsuite', $GLOBALS['argv'] ) + 1;
41
+ $this->test_suite = ( $arg_key > 1 ) ? $GLOBALS['argv'][ $arg_key ] : 'unit';
42
+
43
+ // wpMock
44
+ require_once( $this->framework_dir . '/vendor/autoload.php' );
45
+
46
+ if ( $this->is_unit_tests() ) {
47
+
48
+ // framework exits; if not defined
49
+ define( 'ABSPATH', true );
50
+
51
+ require_once( $this->tests_dir . '/unit/test-case.php' );
52
+
53
+ } else {
54
+
55
+ // TODO
56
+ require_once( $this->tests_dir . '/integration/test-case.php' );
57
+ }
58
+
59
+ // load framework files
60
+ $this->load_framework();
61
+ }
62
+
63
+
64
+ public function load_framework() {
65
+
66
+ require_once( $this->framework_dir . '/woocommerce/class-sv-wc-plugin.php' );
67
+ require_once( $this->framework_dir . '/woocommerce/class-sv-wc-helper.php' );
68
+ require_once( $this->framework_dir . '/woocommerce/class-sv-wc-plugin-compatibility.php' );
69
+ require_once( $this->framework_dir . '/woocommerce/compatibility/abstract-sv-wc-data-compatibility.php' );
70
+ require_once( $this->framework_dir . '/woocommerce/compatibility/class-sv-wc-order-compatibility.php' );
71
+
72
+ // API
73
+ require_once( $this->framework_dir . '/woocommerce/api/interface-sv-wc-api-request.php' );
74
+ require_once( $this->framework_dir . '/woocommerce/api/interface-sv-wc-api-response.php' );
75
+ require_once( $this->framework_dir . '/woocommerce/api/abstract-sv-wc-api-json-request.php' );
76
+ require_once( $this->framework_dir . '/woocommerce/api/abstract-sv-wc-api-json-response.php' );
77
+
78
+ // payment gateways
79
+ require_once( $this->framework_dir . '/woocommerce/payment-gateway/class-sv-wc-payment-gateway-helper.php' );
80
+ require_once( $this->framework_dir . '/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-token.php' );
81
+ require_once( $this->framework_dir . '/woocommerce/payment-gateway/api/class-sv-wc-payment-gateway-api-response-message-helper.php' );
82
+ require_once( $this->framework_dir . '/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-request.php' );
83
+ require_once( $this->framework_dir . '/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-response.php' );
84
+ require_once( $this->framework_dir . '/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-payment-response.php' );
85
+
86
+ // addresses
87
+ require_once( $this->framework_dir . '/woocommerce/Addresses/Address.php' );
88
+ require_once( $this->framework_dir . '/woocommerce/Addresses/Customer_Address.php' );
89
+
90
+
91
+ echo "Loaded Framework..." . PHP_EOL;
92
+ }
93
+
94
+
95
+ public function get_tests_path() {
96
+ return $this->tests_dir;
97
+ }
98
+
99
+ public function get_framework_path() {
100
+ return $this->framework_dir;
101
+ }
102
+
103
+ public function is_unit_tests() {
104
+ return 'unit' === $this->test_suite;
105
+ }
106
+
107
+ public function is_integration_tests() {
108
+
109
+ return 'integration' === $this->test_suite;
110
+ }
111
+
112
+ /**
113
+ * Get the single class instance
114
+ *
115
+ * @since 2.2
116
+ * @return \SV_WC_Plugin_Framework_Tests_Bootstrap
117
+ */
118
+ public static function instance() {
119
+ if ( is_null( self::$instance ) ) {
120
+ self::$instance = new self();
121
+ }
122
+ return self::$instance;
123
+ }
124
+
125
+ }
126
+
127
+
128
+ function bootstrap() {
129
+ return SV_WC_Plugin_Framework_Tests_Bootstrap::instance();
130
+ }
131
+
132
+ bootstrap();
vendor/skyverge/wc-plugin-framework/tests/_archive/integration/plugin.php ADDED
File without changes
vendor/skyverge/wc-plugin-framework/tests/_archive/integration/test-case.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WC_Plugin_Framework\Integration_Tests;
4
+
5
+ //class Test_Case extends \PHPUnit_Framework_TestCase {
6
+ //
7
+ //
8
+ //}
vendor/skyverge/wc-plugin-framework/tests/_archive/phpunit.travis.xml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit
3
+ bootstrap="tests/bootstrap.php"
4
+ backupGlobals="false"
5
+ colors="true"
6
+ convertErrorsToExceptions="true"
7
+ convertNoticesToExceptions="true"
8
+ convertWarningsToExceptions="true"
9
+ verbose="true"
10
+ >
11
+ <testsuites>
12
+ <testsuite name="unit">
13
+ <directory suffix=".php">./tests/unit</directory>
14
+ </testsuite>
15
+ <testsuite name="integration">
16
+ <directory suffix=".php">./tests/integration</directory>
17
+ </testsuite>
18
+ </testsuites>
19
+ <filter>
20
+ <blacklist>
21
+ <directory suffix=".php">./vendor/</directory>
22
+ <directory suffix=".php">./i18n/</directory>
23
+ <directory suffix=".php">./tests/</directory>
24
+ <directory suffix=".php">./tmp/</directory>
25
+ </blacklist>
26
+ </filter>
27
+ <logging>
28
+ <log type="coverage-clover" target="./tmp/clover.xml" charset="UTF-8" />
29
+ </logging>
30
+ </phpunit>
vendor/skyverge/wc-plugin-framework/tests/_archive/phpunit.xml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit
3
+ bootstrap="tests/bootstrap.php"
4
+ backupGlobals="false"
5
+ colors="true"
6
+ convertErrorsToExceptions="true"
7
+ convertNoticesToExceptions="true"
8
+ convertWarningsToExceptions="true"
9
+ verbose="true"
10
+ >
11
+ <testsuites>
12
+ <testsuite name="unit">
13
+ <directory suffix=".php">./tests/unit/</directory>
14
+ <directory suffix=".php">./tests/unit/*</directory>
15
+ </testsuite>
16
+ <testsuite name="integration">
17
+ <directory suffix=".php">./tests/integration</directory>
18
+ </testsuite>
19
+ </testsuites>
20
+ <filter>
21
+ <blacklist>
22
+ <directory suffix=".php">./vendor/</directory>
23
+ <directory suffix=".php">./i18n/</directory>
24
+ <directory suffix=".php">./tests/</directory>
25
+ <directory suffix=".php">./tmp/</directory>
26
+ </blacklist>
27
+ </filter>
28
+ <logging>
29
+ <log type="coverage-html" target="./tmp/coverage" charset="UTF-8" />
30
+ </logging>
31
+ </phpunit>
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/Addresses/Address.php ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit\Addresses;
4
+
5
+ use SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for PluginFramework\Addresses\Address
10
+ */
11
+ class Address extends Unit\Test_Case {
12
+
13
+
14
+ /** Getter Methods ************************************************************************************************/
15
+
16
+
17
+ /**
18
+ * Tests the get_line_1() method.
19
+ */
20
+ public function test_get_line_1() {
21
+
22
+ $address = $this->get_address();
23
+
24
+ $this->assertEquals( '', $address->get_line_1() );
25
+ }
26
+
27
+
28
+ /**
29
+ * Tests the get_line_2() method.
30
+ */
31
+ public function test_get_line_2() {
32
+
33
+ $address = $this->get_address();
34
+
35
+ $this->assertEquals( '', $address->get_line_2() );
36
+ }
37
+
38
+
39
+ /**
40
+ * Tests the get_line_3() method.
41
+ */
42
+ public function test_get_line_3() {
43
+
44
+ $address = $this->get_address();
45
+
46
+ $this->assertEquals( '', $address->get_line_3() );
47
+ }
48
+
49
+
50
+ /**
51
+ * Tests the get_locality() method.
52
+ */
53
+ public function test_get_locality() {
54
+
55
+ $address = $this->get_address();
56
+
57
+ $this->assertEquals( '', $address->get_locality() );
58
+ }
59
+
60
+
61
+ /**
62
+ * Tests the get_region() method.
63
+ */
64
+ public function test_get_region() {
65
+
66
+ $address = $this->get_address();
67
+
68
+ $this->assertEquals( '', $address->get_region() );
69
+ }
70
+
71
+
72
+ /**
73
+ * Tests the get_country() method.
74
+ */
75
+ public function test_get_country() {
76
+
77
+ $address = $this->get_address();
78
+
79
+ $this->assertEquals( '', $address->get_country() );
80
+ }
81
+
82
+
83
+ /**
84
+ * Tests the get_postcode() method.
85
+ */
86
+ public function test_get_postcode() {
87
+
88
+ $address = $this->get_address();
89
+
90
+ $this->assertEquals( '', $address->get_postcode() );
91
+ }
92
+
93
+
94
+ /** Setter Methods ************************************************************************************************/
95
+
96
+
97
+ /**
98
+ * Tests the set_line_1() method.
99
+ */
100
+ public function test_set_line_1() {
101
+
102
+ $address = $this->get_address();
103
+
104
+ $address->set_line_1( '1313 Mockingbird Lane' );
105
+
106
+ $this->assertEquals( '1313 Mockingbird Lane', $address->get_line_1() );
107
+ }
108
+
109
+
110
+ /**
111
+ * Tests the set_line_2() method.
112
+ */
113
+ public function test_set_line_2() {
114
+
115
+ $address = $this->get_address();
116
+
117
+ $address->set_line_2( 'Suite 0' );
118
+
119
+ $this->assertEquals( 'Suite 0', $address->get_line_2() );
120
+ }
121
+
122
+
123
+ /**
124
+ * Tests the set_line_3() method.
125
+ */
126
+ public function test_set_line_3() {
127
+
128
+ $address = $this->get_address();
129
+
130
+ $address->set_line_3( 'c/o Herman Munster' );
131
+
132
+ $this->assertEquals( 'c/o Herman Munster', $address->get_line_3() );
133
+ }
134
+
135
+
136
+ /**
137
+ * Tests the set_locality() method.
138
+ */
139
+ public function test_set_locality() {
140
+
141
+ $address = $this->get_address();
142
+
143
+ $address->set_locality( 'Mockingbird Heights' );
144
+
145
+ $this->assertEquals( 'Mockingbird Heights', $address->get_locality() );
146
+ }
147
+
148
+
149
+ /**
150
+ * Tests the set_region() method.
151
+ */
152
+ public function test_set_region() {
153
+
154
+ $address = $this->get_address();
155
+
156
+ $address->set_region( 'CA' );
157
+
158
+ $this->assertEquals( 'CA', $address->get_region() );
159
+ }
160
+
161
+
162
+ /**
163
+ * Tests the set_country() method.
164
+ */
165
+ public function test_set_country() {
166
+
167
+ $address = $this->get_address();
168
+
169
+ $address->set_country( 'USA' );
170
+
171
+ $this->assertEquals( 'USA', $address->get_country() );
172
+ }
173
+
174
+
175
+ /**
176
+ * Tests the set_postcode() method.
177
+ */
178
+ public function test_set_postcode() {
179
+
180
+ $address = $this->get_address();
181
+
182
+ $address->set_postcode( '90000' );
183
+
184
+ $this->assertEquals( '90000', $address->get_postcode() );
185
+ }
186
+
187
+
188
+ /** Utility Methods ***********************************************************************************************/
189
+
190
+
191
+ /**
192
+ * Gets a new address object without data populated.
193
+ *
194
+ * @since 5.3.0-dev
195
+ *
196
+ * @return PluginFramework\Addresses\Address
197
+ */
198
+ protected function get_address() {
199
+
200
+ return new PluginFramework\Addresses\Address();
201
+ }
202
+
203
+
204
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/Addresses/Customer_Address.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit\Addresses;
4
+
5
+ use SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for PluginFramework\Addresses\Address
10
+ */
11
+ class Customer_Address extends Address {
12
+
13
+
14
+ public function setUp() {
15
+
16
+ parent::setUp();
17
+
18
+ // define WC as 3.0 to use order getter methods
19
+ if ( ! defined( 'WC_VERSION' ) ) {
20
+ define( 'WC_VERSION', '3.0' );
21
+ }
22
+ }
23
+
24
+
25
+ /** Getter Methods ************************************************************************************************/
26
+
27
+
28
+ /**
29
+ * Tests the get_first_name() method.
30
+ */
31
+ public function test_get_first_name() {
32
+
33
+ $address = $this->get_address();
34
+
35
+ $this->assertEquals( '', $address->get_first_name() );
36
+ }
37
+
38
+
39
+ /**
40
+ * Tests the get_last_name() method.
41
+ */
42
+ public function test_get_last_name() {
43
+
44
+ $address = $this->get_address();
45
+
46
+ $this->assertEquals( '', $address->get_last_name() );
47
+ }
48
+
49
+
50
+ /** Setter Methods ************************************************************************************************/
51
+
52
+
53
+ /**
54
+ * Tests the set_first_name() method.
55
+ */
56
+ public function test_set_first_name() {
57
+
58
+ $address = $this->get_address();
59
+
60
+ $address->set_first_name( 'Herman' );
61
+
62
+ $this->assertEquals( 'Herman', $address->get_first_name() );
63
+ }
64
+
65
+
66
+ /**
67
+ * Tests the set_last_name() method.
68
+ */
69
+ public function test_set_last_name() {
70
+
71
+ $address = $this->get_address();
72
+
73
+ $address->set_last_name( 'Munster' );
74
+
75
+ $this->assertEquals( 'Munster', $address->get_last_name() );
76
+ }
77
+
78
+
79
+ /**
80
+ * Tests the set_from_order() method.
81
+ *
82
+ * Uses the order billing address.
83
+ */
84
+ public function test_set_from_order_billing() {
85
+
86
+ $address = $this->get_address();
87
+
88
+ $address->set_from_order( $this->get_order() );
89
+
90
+ $this->assertEquals( 'Herman', $address->get_first_name() );
91
+ $this->assertEquals( 'Munster', $address->get_last_name() );
92
+ $this->assertEquals( '1313 Mockingbird Lane', $address->get_line_1() );
93
+ $this->assertEquals( 'Suite 0', $address->get_line_2() );
94
+ $this->assertEquals( '', $address->get_line_3() ); // WC Orders have no line 3
95
+ $this->assertEquals( 'Mockingbird Heights', $address->get_locality() );
96
+ $this->assertEquals( 'CA', $address->get_region() );
97
+ $this->assertEquals( 'USA', $address->get_country() );
98
+ $this->assertEquals( '90000', $address->get_postcode() );
99
+ }
100
+
101
+
102
+ /**
103
+ * Tests the set_from_order() method.
104
+ *
105
+ * Uses the order shipping address.
106
+ */
107
+ public function test_set_from_order_shipping() {
108
+
109
+ $address = $this->get_address();
110
+
111
+ $address->set_from_order( $this->get_order(), 'shipping' );
112
+
113
+ $this->assertEquals( 'Eddie', $address->get_first_name() );
114
+ $this->assertEquals( 'Munster', $address->get_last_name() );
115
+ $this->assertEquals( '1313 Mockingbird Lane', $address->get_line_1() );
116
+ $this->assertEquals( 'Suite 1', $address->get_line_2() );
117
+ $this->assertEquals( '', $address->get_line_3() ); // WC Orders have no line 3
118
+ $this->assertEquals( 'Mockingbird Heights', $address->get_locality() );
119
+ $this->assertEquals( 'CA', $address->get_region() );
120
+ $this->assertEquals( 'USA', $address->get_country() );
121
+ $this->assertEquals( '90000', $address->get_postcode() );
122
+ }
123
+
124
+
125
+ /** Utility Methods ***********************************************************************************************/
126
+
127
+
128
+ /**
129
+ * Gets a mock order with billing and shipping address info.
130
+ *
131
+ * @return \PHPUnit_Framework_MockObject_MockObject
132
+ */
133
+ protected function get_order() {
134
+
135
+ // create a mock class for WC_Order
136
+ $order = $this->getMockBuilder( 'WC_Order' )->setMethods( [
137
+ 'get_billing_first_name',
138
+ 'get_billing_last_name',
139
+ 'get_billing_address_1',
140
+ 'get_billing_address_2',
141
+ 'get_billing_city',
142
+ 'get_billing_state',
143
+ 'get_billing_country',
144
+ 'get_billing_postcode',
145
+ 'get_shipping_first_name',
146
+ 'get_shipping_last_name',
147
+ 'get_shipping_address_1',
148
+ 'get_shipping_address_2',
149
+ 'get_shipping_city',
150
+ 'get_shipping_state',
151
+ 'get_shipping_country',
152
+ 'get_shipping_postcode',
153
+ ] )->getMock();
154
+
155
+ $order->method( 'get_billing_first_name' )->willReturn( 'Herman' );
156
+ $order->method( 'get_billing_last_name' )->willReturn( 'Munster' );
157
+ $order->method( 'get_billing_address_1' )->willReturn( '1313 Mockingbird Lane' );
158
+ $order->method( 'get_billing_address_2' )->willReturn( 'Suite 0' );
159
+ $order->method( 'get_billing_city' )->willReturn( 'Mockingbird Heights' );
160
+ $order->method( 'get_billing_state' )->willReturn( 'CA' );
161
+ $order->method( 'get_billing_country' )->willReturn( 'USA' );
162
+ $order->method( 'get_billing_postcode' )->willReturn( '90000' );
163
+ $order->method( 'get_shipping_first_name' )->willReturn( 'Eddie' );
164
+ $order->method( 'get_shipping_last_name' )->willReturn( 'Munster' );
165
+ $order->method( 'get_shipping_address_1' )->willReturn( '1313 Mockingbird Lane' );
166
+ $order->method( 'get_shipping_address_2' )->willReturn( 'Suite 1' );
167
+ $order->method( 'get_shipping_city' )->willReturn( 'Mockingbird Heights' );
168
+ $order->method( 'get_shipping_state' )->willReturn( 'CA' );
169
+ $order->method( 'get_shipping_country' )->willReturn( 'USA' );
170
+ $order->method( 'get_shipping_postcode' )->willReturn( '90000' );
171
+
172
+ return $order;
173
+ }
174
+
175
+
176
+ protected function get_address() {
177
+
178
+ return new PluginFramework\Addresses\Customer_Address();
179
+ }
180
+
181
+
182
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/helper.php ADDED
@@ -0,0 +1,900 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \Patchwork as p;
7
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
8
+
9
+ /**
10
+ * Helper Class Unit Tests
11
+ *
12
+ * @package SkyVerge\WooCommerce\PluginFramework\Tests\Unit
13
+ * @since 4.0.1-1
14
+ */
15
+ class Helper extends Test_Case {
16
+
17
+
18
+ /** Test string functions *************************************************/
19
+
20
+
21
+ /**
22
+ * Test str_starts_with() when multibyte functions are *not* enabled
23
+ *
24
+ * @since 4.3.0
25
+ * @see \SV_WC_Helper::str_starts_with()
26
+ * @param bool $asserts_as_true true if data passes true assert, passes false assertion otherwise
27
+ * @param string $haystack
28
+ * @param string $needle
29
+ * @dataProvider provider_str_starts_with_ascii
30
+ */
31
+ public function test_str_starts_with_ascii( $asserts_as_true, $haystack, $needle ) {
32
+
33
+ // force ASCII handling
34
+ p\redefine( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper::multibyte_loaded', function() { return false; } );
35
+
36
+ if ( $asserts_as_true ) {
37
+ $this->assertTrue( PluginFramework\SV_WC_Helper::str_starts_with( $haystack, $needle ) );
38
+ } else {
39
+ $this->assertFalse( PluginFramework\SV_WC_Helper::str_starts_with( $haystack, $needle ) );
40
+ }
41
+ }
42
+
43
+
44
+ /**
45
+ * Data Provider for str_starts_with() ASCII test
46
+ *
47
+ * @since 4.3.0
48
+ * @return array
49
+ */
50
+ public function provider_str_starts_with_ascii() {
51
+
52
+ return [
53
+ [ true, 'SkyVerge', 'Sky' ],
54
+ [ true, 'SkyVerge', '' ], // empty needle
55
+ [ true, 'SkyVerge', 'ಠ' ], // empty needle as a result of ASCII replacement
56
+ [ true, 'ಠ_ಠ', 'ಠ' ], // ASCII for both haystack/needle
57
+ [ false, 'SkyVerge', 'verge' ],
58
+ [ false, 'SkyVerge', 'sky' ] // case-sensitivity
59
+ ];
60
+ }
61
+
62
+
63
+ /**
64
+ * Test str_starts_with() when multibyte functions are enabled
65
+ *
66
+ * @since 4.3.0
67
+ * @see \SV_WC_Helper::str_starts_with()
68
+ * @param bool $asserts_as_true true if data passes true assert, passes false assertion otherwise
69
+ * @param string $haystack
70
+ * @param string $needle
71
+ * @dataProvider provider_str_starts_with_mb
72
+ */
73
+ public function test_str_starts_with_mb( $asserts_as_true, $haystack, $needle ) {
74
+
75
+ if ( ! extension_loaded( 'mbstring' ) ) {
76
+ $this->markTestSkipped( 'Multibyte string functions are not available, skipping.' );
77
+ }
78
+
79
+ if ( $asserts_as_true ) {
80
+ $this->assertTrue( PluginFramework\SV_WC_Helper::str_starts_with( $haystack, $needle ) );
81
+ } else {
82
+ $this->assertFalse( PluginFramework\SV_WC_Helper::str_starts_with( $haystack, $needle ) );
83
+ }
84
+ }
85
+
86
+
87
+ /**
88
+ * Data Provider for str_starts_with() multibyte test
89
+ *
90
+ * @since 4.3.0
91
+ * @return array
92
+ */
93
+ public function provider_str_starts_with_mb() {
94
+
95
+ return [
96
+ [ true, 'SkyVerge', 'Sky' ],
97
+ [ true, 'SkyVerge', '' ], // empty needle
98
+ [ false, 'SkyVerge', 'ಠ' ], // UTF-8
99
+ [ true, 'ಠ_ಠ', 'ಠ' ], // UTF-8
100
+ [ false, 'SkyVerge', 'verge' ],
101
+ [ false, 'SkyVerge', 'sky' ] // case-sensitivity
102
+ ];
103
+ }
104
+
105
+
106
+ /**
107
+ * Test str_ends_with() when multibyte functions are *not* enabled
108
+ *
109
+ * @since 4.3.0
110
+ * @see \SV_WC_Helper::str_ends_with()
111
+ * @param bool $asserts_as_true true if data passes true assert, passes false assertion otherwise
112
+ * @param string $haystack
113
+ * @param string $needle
114
+ * @dataProvider provider_str_ends_with_ascii
115
+ */
116
+ public function test_str_ends_with_ascii( $asserts_as_true, $haystack, $needle ) {
117
+
118
+ // force ASCII handling
119
+ p\redefine( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper::multibyte_loaded', function() { return false; } );
120
+
121
+ if ( $asserts_as_true ) {
122
+ $this->assertTrue( PluginFramework\SV_WC_Helper::str_ends_with( $haystack, $needle ) );
123
+ } else {
124
+ $this->assertFalse( PluginFramework\SV_WC_Helper::str_ends_with( $haystack, $needle ) );
125
+ }
126
+ }
127
+
128
+
129
+ /**
130
+ * Data Provider for str_ends_with() ASCII test
131
+ *
132
+ * @since 4.3.0
133
+ * @return array
134
+ */
135
+ public function provider_str_ends_with_ascii() {
136
+
137
+ return [
138
+ [ true, 'SkyVerge', 'erge' ],
139
+ [ true, 'SkyVerge', '' ], // empty needle
140
+ [ false, 'SkyVerge', 'ಠ' ], // empty needle as a result of ASCII replacement
141
+ [ false, 'ಠ_ಠ', 'ಠ' ], // ASCII replaced as empty string for both haystack/needle
142
+ [ false, 'SkyVerge', 'sky' ],
143
+ [ false, 'SkyVerge', 'verge' ] // case-sensitivity
144
+ ];
145
+ }
146
+
147
+
148
+ /**
149
+ * Test str_ends_with() when multibyte functions are enabled
150
+ *
151
+ * @since 4.3.0
152
+ * @see \SV_WC_Helper::str_ends_with()
153
+ * @param bool $asserts_as_true true if data passes true assert, passes false assertion otherwise
154
+ * @param string $haystack
155
+ * @param string $needle
156
+ * @dataProvider provider_str_ends_with_mb
157
+ */
158
+ public function test_str_ends_with_mb( $asserts_as_true, $haystack, $needle ) {
159
+
160
+ if ( ! extension_loaded( 'mbstring' ) ) {
161
+ $this->markTestSkipped( 'Multibyte string functions are not available, skipping.' );
162
+ }
163
+
164
+ if ( $asserts_as_true ) {
165
+ $this->assertTrue( PluginFramework\SV_WC_Helper::str_ends_with( $haystack, $needle ) );
166
+ } else {
167
+ $this->assertFalse( PluginFramework\SV_WC_Helper::str_ends_with( $haystack, $needle ) );
168
+ }
169
+ }
170
+
171
+
172
+ /**
173
+ * Data Provider for str_ends_with() multibyte test
174
+ *
175
+ * @since 4.3.0
176
+ * @return array
177
+ */
178
+ public function provider_str_ends_with_mb() {
179
+
180
+ return [
181
+ [ true, 'SkyVerge', 'erge' ],
182
+ [ true, 'SkyVerge', '' ], // empty needle
183
+ [ false, 'SkyVerge', 'ಠ' ], // UTF-8
184
+ [ true, 'ಠ_ಠ', 'ಠ' ], // UTF-8
185
+ [ false, 'SkyVerge', 'sky' ],
186
+ [ false, 'SkyVerge', 'verge' ] // case-sensitivity
187
+ ];
188
+ }
189
+
190
+
191
+ /**
192
+ * Test \SV_WC_Helper::str_to_ascii()
193
+ *
194
+ * @see \SV_WC_Helper::str_to_ascii()
195
+ * @since 4.3.0
196
+ * @dataProvider provider_test_str_to_ascii
197
+ */
198
+ public function test_str_to_ascii( $string, $ascii ) {
199
+
200
+ $this->assertEquals( PluginFramework\SV_WC_Helper::str_to_ascii( $string ), $ascii );
201
+ }
202
+
203
+
204
+ /**
205
+ * Data provider for UTF-8 to pure ASCII strings
206
+ *
207
+ * @since 4.3.0
208
+ * @return array
209
+ */
210
+ public function provider_test_str_to_ascii() {
211
+
212
+ return [
213
+ [ 'skyverge', 'skyverge' ],
214
+ [ 'a\bc`1/2*3', 'a\bc`1/2*3' ],
215
+ [ 'question mark�', 'question mark' ],
216
+ [ 'poker♠1♣2♥3♦abc', 'poker123abc' ],
217
+ [ 'one half ½', 'one half ' ], // note the whitespace on the right
218
+ [ '10¢', '10' ] // that's not a c, that's ¢ as in cent, on some fonts this might not be obvious
219
+ ];
220
+ }
221
+
222
+
223
+ /**
224
+ * Test str_to_sane_utf8()
225
+ *
226
+ * @see \SV_WC_Helper::str_to_sane_utf8()
227
+ * @since 4.3.0
228
+ * @dataProvider provider_test_str_to_sane_utf8
229
+ */
230
+ public function test_str_to_sane_utf8( $string, $utf8 ) {
231
+
232
+ $this->assertEquals( PluginFramework\SV_WC_Helper::str_to_sane_utf8( $string ), $utf8 );
233
+ }
234
+
235
+
236
+ /**
237
+ * Data provider for crazy UTF-8 to sane UTF-8 strings
238
+ *
239
+ * @since 4.3.0
240
+ * @return array
241
+ */
242
+ public function provider_test_str_to_sane_utf8() {
243
+
244
+ return [
245
+ [ 'إن شاء الله!', 'إن شاء الله!' ], // non-latin UTF-8, but still sane
246
+ [ 'a\bc`1/2*3', 'a\bc1/2*3' ],
247
+ [ 'question mark�', 'question mark' ],
248
+ [ 'poker♠1♣2♥3♦abc', 'poker123abc' ],
249
+ [ 'one half ½', 'one half ' ], // note the whitespace on the right
250
+ [ '10¢', '10¢' ] // that's not a c, that's ¢ as in cent, on some fonts this might not be obvious
251
+ ];
252
+ }
253
+
254
+
255
+ /**
256
+ * Test str_exists() when multibyte functions are *not* enabled
257
+ *
258
+ * @since 4.3.0
259
+ * @see \SV_WC_Helper::str_exists()
260
+ * @param bool $asserts_as_true true if data passes true assert, passes false assertion otherwise
261
+ * @param string $haystack
262
+ * @param string $needle
263
+ * @dataProvider provider_str_exists_ascii
264
+ */
265
+ public function test_str_exists_ascii( $asserts_as_true, $haystack, $needle ) {
266
+
267
+ // force ASCII handling
268
+ p\redefine( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper::multibyte_loaded', function() { return false; } );
269
+
270
+ if ( $asserts_as_true ) {
271
+ $this->assertTrue( PluginFramework\SV_WC_Helper::str_exists( $haystack, $needle ) );
272
+ } else {
273
+ $this->assertFalse( PluginFramework\SV_WC_Helper::str_exists( $haystack, $needle ) );
274
+ }
275
+ }
276
+
277
+
278
+ /**
279
+ * Data Provider for str_exists() ASCII test
280
+ *
281
+ * @since 4.3.0
282
+ * @return array
283
+ */
284
+ public function provider_str_exists_ascii() {
285
+
286
+ return [
287
+ [ true, 'SkyVerge', 'erge' ],
288
+ [ false, 'SkyVerge', '' ], // empty needle
289
+ [ false, 'SkyVerge', 'ಠ' ], // UTF-8
290
+ [ false, 'ಠ_ಠ', 'ಠ' ], // UTF-8 that does exist in string, but doesn't when forced to ASCII
291
+ [ false, 'SkyVerge', 'sky' ], // case-sensitivity
292
+ [ true, 'SkyVerge', 'V' ], // single-char, case-sensitive
293
+ ];
294
+ }
295
+
296
+
297
+ /**
298
+ * Test str_exists() when multibyte functions are enabled
299
+ *
300
+ * @since 4.3.0
301
+ * @see \SV_WC_Helper::str_exists()
302
+ * @param bool $asserts_as_true true if data passes true assert, passes false assertion otherwise
303
+ * @param string $haystack
304
+ * @param string $needle
305
+ * @dataProvider provider_str_exists_mb
306
+ */
307
+ public function test_str_exists_mb( $asserts_as_true, $haystack, $needle ) {
308
+
309
+ if ( ! extension_loaded( 'mbstring' ) ) {
310
+ $this->markTestSkipped( 'Multibyte string functions are not available, skipping.' );
311
+ }
312
+
313
+ if ( $asserts_as_true ) {
314
+ $this->assertTrue( PluginFramework\SV_WC_Helper::str_exists( $haystack, $needle ) );
315
+ } else {
316
+ $this->assertFalse( PluginFramework\SV_WC_Helper::str_exists( $haystack, $needle ) );
317
+ }
318
+ }
319
+
320
+
321
+ /**
322
+ * Data Provider for str_exists() multibyte test
323
+ *
324
+ * @since 4.3.0
325
+ * @return array
326
+ */
327
+ public function provider_str_exists_mb() {
328
+
329
+ return [
330
+ [ true, 'SkyVerge', 'erge' ],
331
+ [ false, 'SkyVerge', '' ], // empty needle
332
+ [ false, 'SkyVerge', 'ಠ' ], // UTF-8
333
+ [ true, 'ಠ_ಠ', 'ಠ' ], // UTF-8 that does exist in string
334
+ [ false, 'SkyVerge', 'sky' ], // case-sensitivity
335
+ [ true, 'SkyVerge', 'V' ], // single-char, case-sensitive
336
+ ];
337
+ }
338
+
339
+
340
+ /**
341
+ * Test str_truncate() when multibyte functions are *not* enabled
342
+ *
343
+ * @since 4.3.0
344
+ * @see \SV_WC_Helper::str_truncate()
345
+ */
346
+ public function test_str_truncate_ascii() {
347
+
348
+ // force ASCII handling
349
+ p\redefine( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper::multibyte_loaded', function() { return false; } );
350
+
351
+ $the_string = 'The quick brown fox jumps ಠ_ಠ';
352
+
353
+ // no truncation needed / non-ASCII removed
354
+ $this->assertEquals( 'The quick brown fox jumps _', PluginFramework\SV_WC_Helper::str_truncate( $the_string, 30 ) );
355
+
356
+ // simple truncation
357
+ $this->assertEquals( 'The quick brown ...', PluginFramework\SV_WC_Helper::str_truncate( $the_string, 19 ) );
358
+
359
+ // custom omission string
360
+ $this->assertEquals( 'The quick brown fo-', PluginFramework\SV_WC_Helper::str_truncate( $the_string, 19, '-' ) );
361
+ }
362
+
363
+
364
+ /**
365
+ * Test str_truncate() when multibyte functions are enabled
366
+ *
367
+ * @since 4.3.0
368
+ * @see \SV_WC_Helper::str_truncate()
369
+ */
370
+ public function test_str_truncate_mb() {
371
+
372
+ if ( ! extension_loaded( 'mbstring' ) ) {
373
+ $this->markTestSkipped( 'Multibyte string functions are not available, skipping.' );
374
+ }
375
+
376
+ $the_string = 'The quick brown fox jumps ಠ_ಠ';
377
+
378
+ // no truncation needed
379
+ $this->assertEquals( 'The quick brown fox jumps ಠ_ಠ', PluginFramework\SV_WC_Helper::str_truncate( $the_string, 30 ) );
380
+
381
+ // simple truncation
382
+ $this->assertEquals( 'The quick brown ...', PluginFramework\SV_WC_Helper::str_truncate( $the_string, 19 ) );
383
+
384
+ // custom omission string
385
+ $this->assertEquals( 'The quick brown fox jumps ಠ-', PluginFramework\SV_WC_Helper::str_truncate( $the_string, 28, '-' ) );
386
+ }
387
+
388
+
389
+ /** Test WC notice functions **********************************************/
390
+
391
+
392
+ /**
393
+ * Test SV_WC_Helper::wc_notice_count()
394
+ *
395
+ * @see \SV_WC_Helper::wc_notice_count()
396
+ * @since 4.3.0
397
+ */
398
+ public function test_wc_notice_count() {
399
+
400
+ // set up args
401
+ $type = 'error';
402
+ $count = 666;
403
+
404
+ // test 0 return value if function doens't exist
405
+ $this->assertEquals( 0, PluginFramework\SV_WC_Helper::wc_notice_count( $type ) );
406
+
407
+ // mock wc_notice_count() function
408
+ Mock::wpFunction( 'wc_notice_count', array(
409
+ 'args' => array( $type ),
410
+ 'return' => $count,
411
+ ) );
412
+
413
+ // test the return value is as expected
414
+ $this->assertEquals( $count, PluginFramework\SV_WC_Helper::wc_notice_count( $type ) );
415
+ }
416
+
417
+
418
+ /**
419
+ * Test SV_WC_Helper::wc_add_notice()
420
+ *
421
+ * @see \SV_WC_Helper::wc_add_notice()
422
+ * @since 4.3.0
423
+ */
424
+ public function test_wc_add_notice() {
425
+
426
+ // set up args
427
+ $message = 'This is a success message.';
428
+ $type = 'success';
429
+
430
+ // mock wc_add_notice() function
431
+ Mock::wpFunction( 'wc_add_notice', array(
432
+ 'args' => array( $message, $type ),
433
+ 'return' => null,
434
+ ) );
435
+
436
+ $this->assertNull( PluginFramework\SV_WC_Helper::wc_add_notice( $message, $type ) );
437
+ }
438
+
439
+
440
+ /**
441
+ * Test SV_WC_Helper::wc_print_notice()
442
+ *
443
+ * @see \SV_WC_Helper::wc_print_notice()
444
+ * @since 4.3.0
445
+ */
446
+ public function test_wc_print_notice() {
447
+
448
+ // set up args
449
+ $message = 'This is a notice message.';
450
+ $type = 'notice';
451
+
452
+ // mock wc_print_notice() function
453
+ Mock::wpFunction( 'wc_print_notice', array(
454
+ 'args' => array( $message, $type ),
455
+ 'return' => null,
456
+ ) );
457
+
458
+ $this->assertNull( PluginFramework\SV_WC_Helper::wc_print_notice( $message, $type ) );
459
+ }
460
+
461
+
462
+ /**
463
+ * Test SV_WC_Helper::get_wc_log_file_url()
464
+ *
465
+ * @see SV_WC_Helper::get_wc_log_file_url()
466
+ * @since 4.3.0
467
+ */
468
+ public function test_get_wc_log_file_url() {
469
+
470
+ // set up args
471
+ $admin_url = 'http://skyverge.dev/wp-admin/';
472
+ $handle = 'plugin';
473
+ $path = 'admin.php?page=wc-status&tab=logs&log_file=' . $handle . '-' . $handle . '-log';
474
+
475
+ // mock wp_hash() function
476
+ Mock::wpPassthruFunction( 'wp_hash' );
477
+
478
+ // mock sanitize_file_name() function
479
+ Mock::wpPassthruFunction( 'sanitize_file_name' );
480
+
481
+ // mock admin_url() function
482
+ Mock::wpFunction( 'admin_url', array(
483
+ 'args' => array( $path ),
484
+ 'return' => $admin_url . $path,
485
+ ) );
486
+
487
+ $this->assertEquals( $admin_url . $path, PluginFramework\SV_WC_Helper::get_wc_log_file_url( $handle ) );
488
+ }
489
+
490
+
491
+ /**
492
+ * Test \SV_WC_Helper::get_post()
493
+ *
494
+ * @see \SV_WC_Helper::get_post()
495
+ * @since 4.3.0
496
+ */
497
+ public function test_get_post() {
498
+
499
+ $key = 'sv_test_key';
500
+
501
+ // Test for an unset key
502
+ $this->assertEquals( '', PluginFramework\SV_WC_Helper::get_post( $key ) );
503
+
504
+ $_POST[ $key ] = 'value';
505
+
506
+ // Check that a value is returned
507
+ $this->assertEquals( 'value', PluginFramework\SV_WC_Helper::get_post( $key ) );
508
+
509
+ $_POST[ $key ] = ' untrimmed-value ';
510
+
511
+ // Check that the value is trimmed
512
+ $this->assertEquals( 'untrimmed-value', PluginFramework\SV_WC_Helper::get_post( $key ) );
513
+ }
514
+
515
+
516
+ /**
517
+ * Test \SV_WC_Helper::get_order_line_items()
518
+ *
519
+ * @see \SV_WC_Helper::get_order_line_items()
520
+ * @since 4.3.0
521
+ */
522
+ public function test_get_order_line_items() {
523
+
524
+
525
+ $expected_item = new \stdClass();
526
+ $expected_item->id = 777;
527
+ $expected_item->name = 'SkyShirt';
528
+ $expected_item->description = '';
529
+ $expected_item->quantity = 1;
530
+ $expected_item->item_total = '99.99';
531
+ $expected_item->line_total = '99.99';
532
+ $expected_item->meta = null;
533
+ $expected_item->product = $this->get_wc_product_mock();
534
+ $expected_item->item = $this->get_wc_item_data();
535
+
536
+ $this->getMockBuilder( 'WC_Order_Item_Meta_Mock' )
537
+ ->setMethods( [ 'get_formatted'] )
538
+ ->setMockClassName( 'WC_Order_Item_Meta' )
539
+ ->getMock()
540
+ ->method( 'get_formatted' )
541
+ ->willReturn( [ 'label' => 'Size', 'value' => 'Large' ] );
542
+
543
+ $actual_line_items = PluginFramework\SV_WC_Helper::get_order_line_items( $this->get_wc_order_mock() );
544
+
545
+ $this->assertEquals( [ $expected_item ], $actual_line_items );
546
+
547
+ $actual_line_items = current( $actual_line_items );
548
+
549
+ $this->assertObjectHasAttribute( 'id', $actual_line_items );
550
+ $this->assertObjectHasAttribute( 'name', $actual_line_items );
551
+ $this->assertObjectHasAttribute( 'description', $actual_line_items );
552
+ $this->assertObjectHasAttribute( 'quantity', $actual_line_items );
553
+ $this->assertObjectHasAttribute( 'item_total', $actual_line_items );
554
+ $this->assertObjectHasAttribute( 'line_total', $actual_line_items );
555
+ $this->assertObjectHasAttribute( 'meta', $actual_line_items );
556
+ $this->assertObjectHasAttribute( 'product', $actual_line_items );
557
+ $this->assertObjectHasAttribute( 'item', $actual_line_items );
558
+ }
559
+
560
+
561
+ /**
562
+ * Get a simple mock object for the WC_Order class
563
+ *
564
+ * @since 4.3.0
565
+ * @return \WC_Order mocked order object
566
+ */
567
+ protected function get_wc_order_mock() {
568
+
569
+ // create a mock class for WC_Order
570
+ $order = $this->getMockBuilder( 'WC_Order' )->setMethods( [
571
+ 'get_items',
572
+ 'get_product_from_item',
573
+ 'get_item_total',
574
+ 'get_line_total',
575
+ ] )->getMock();
576
+
577
+ // stub WC_Order::get_items()
578
+ $order->method( 'get_items' )->willReturn( [ 777 => $this->get_wc_item_data() ] );
579
+
580
+ // stub WC_Order::get_product_from_item()
581
+ $order->method( 'get_product_from_item' )->willReturn( $this->get_wc_product_mock() );
582
+
583
+ // stub WC_Order::get_item_total()/get_line_total()
584
+ $order->method( 'get_item_total' )->willReturn( '99.99' );
585
+ $order->method( 'get_line_total' )->willReturn( '99.99' );
586
+
587
+
588
+ return $order;
589
+ }
590
+
591
+
592
+ /**
593
+ * Get a simple mock object for the WC_Product class
594
+ *
595
+ * @since 4.3.0
596
+ * @return \PHPUnit_Framework_MockObject_Builder_InvocationMocker
597
+ */
598
+ protected function get_wc_product_mock() {
599
+ return $this->getMockBuilder( 'WC_Product' )->setMethods( [ 'get_sku' ] )->getMock()->method( 'get_sku' )->willReturn( 'SKYSHIRT' );
600
+ }
601
+
602
+
603
+ /**
604
+ * Returns an array of item data that matches the format WC returns item data
605
+ * in
606
+ *
607
+ * @since 4.3.0
608
+ * @return array
609
+ */
610
+ protected function get_wc_item_data() {
611
+
612
+ return [
613
+ 'name' => 'SkyShirt',
614
+ 'type' => 'line_item',
615
+ 'item_meta' => [ 'label' => 'Size', 'value' => 'Large' ],
616
+ 'item_meta_array' => [ ],
617
+ 'qty' => 1,
618
+ 'tax_class' => '',
619
+ 'product_id' => 666,
620
+ 'variation_id' => 0,
621
+ 'line_subtotal' => '99.99',
622
+ 'line_total' => '99.99',
623
+ 'line_tax' => '0',
624
+ 'line_tax_data' => '',
625
+ ];
626
+ }
627
+
628
+
629
+ /**
630
+ * Test \SV_WC_Helper::get_request()
631
+ *
632
+ * @see \SV_WC_Helper::get_request()
633
+ * @since 4.3.0
634
+ * @dataProvider provider_test_get_request_associative_array
635
+ */
636
+ public function test_get_request( $request_key, $request_value ) {
637
+
638
+ $_REQUEST[ $request_key ] = $request_value;
639
+
640
+ $this->assertEquals( PluginFramework\SV_WC_Helper::get_request( $request_key ), trim( $request_value ) );
641
+ $this->assertEquals( PluginFramework\SV_WC_Helper::get_request( 'invalidKey' ), '' );
642
+ }
643
+
644
+
645
+ /**
646
+ * Test \SV_WC_Helper::array_insert_after
647
+ *
648
+ * @see \SV_WC_Helper::array_insert_after()
649
+ * @since 4.3.0
650
+ */
651
+ public function test_array_insert_after() {
652
+
653
+ $target_array = array(
654
+ '1' => 1,
655
+ '2' => 2,
656
+ '3' => 3,
657
+ );
658
+
659
+ $added_array = array(
660
+ '2.5' => 2.5,
661
+ );
662
+
663
+ $insert_point = '2';
664
+
665
+ $this->assertArrayHasKey( key( $added_array ), PluginFramework\SV_WC_Helper::array_insert_after( $target_array, $insert_point, $added_array ) );
666
+
667
+ // Test a key that doesn't exist
668
+ $insert_point = 'bad-key';
669
+
670
+ $this->assertEquals( $target_array, PluginFramework\SV_WC_Helper::array_insert_after( $target_array, $insert_point, $added_array ) );
671
+ }
672
+
673
+
674
+ /**
675
+ * Test SV_WC_Helper::f__
676
+ *
677
+ * @since 4.3.0
678
+ */
679
+ public function test_f__() {
680
+
681
+ $string = 'String';
682
+
683
+ Mock::wpPassthruFunction( '__' );
684
+
685
+ $this->assertEquals( $string, PluginFramework\SV_WC_Helper::f__( $string ) );
686
+ }
687
+
688
+ /**
689
+ * Test SV_WC_Helper::f_x
690
+ *
691
+ * @since 4.3.0
692
+ */
693
+ public function test_f_x() {
694
+
695
+ $string = 'String';
696
+
697
+ Mock::wpPassthruFunction( '_x' );
698
+
699
+ $this->assertEquals( $string, PluginFramework\SV_WC_Helper::f_x( $string, 'string-context' ) );
700
+ }
701
+
702
+ /*
703
+ * Test SV_WC_Helper::f_e
704
+ *
705
+ * @since 4.3.0
706
+ */
707
+ public function test_f_e() {
708
+
709
+ $string = 'String';
710
+
711
+ Mock::wpFunction( '_e', array(
712
+ 'args' => array( $string, '*' ),
713
+ 'return' => function( $string ) { echo $string; },
714
+ ) );
715
+
716
+ PluginFramework\SV_WC_Helper::f_e( $string );
717
+
718
+ $this->expectOutputString( $string );
719
+ }
720
+
721
+
722
+ /**
723
+ * Test \SV_WC_Helper::array_to_xml()
724
+ *
725
+ * @see \SV_WC_Helper::array_to_xml()
726
+ * @since 4.3.0
727
+ */
728
+ public function test_array_to_xml() {
729
+
730
+ $xml = new \XMLWriter();
731
+ $xml->openMemory();
732
+ $xml->startDocument( '1.0', 'UTF-8' );
733
+
734
+ PluginFramework\SV_WC_Helper::array_to_xml( $xml, 'foo', array(
735
+ array( 'value' ),
736
+ array(
737
+ 'bar' => array(
738
+ 'baz' => 'value'
739
+ ),
740
+ 'baz' => '<invalid-value',
741
+ ),
742
+ array( '@attributes' => array(
743
+ 'attribute' => 'value',
744
+ ) ),
745
+ ) );
746
+
747
+ $xml->endDocument();
748
+
749
+ $output = $xml->outputMemory();
750
+
751
+ // Mind newlines, empty last line and indentation
752
+ $expected = <<<MSG
753
+ <?xml version="1.0" encoding="UTF-8"?>
754
+ <foo>value</foo><foo><bar><baz>value</baz></bar><baz><![CDATA[<invalid-value]]></baz></foo><foo attribute="value"/>
755
+
756
+ MSG;
757
+ $this->assertEquals( $output, $expected );
758
+ }
759
+
760
+
761
+ /**
762
+ * Test \SV_WC_Helper::list_array_items()
763
+ *
764
+ * @see \SV_WC_Helper::list_array_items()
765
+ *
766
+ * @since 5.2.0
767
+ *
768
+ * @dataProvider provider_test_list_array_items
769
+ */
770
+ public function test_list_array_items( $items, $conjunction, $separator, $expected ) {
771
+
772
+ $this->assertEquals( $expected, PluginFramework\SV_WC_Helper::list_array_items( $items, $conjunction, $separator ) );
773
+ }
774
+
775
+
776
+ /**
777
+ * Data provider for test_list_array_items()
778
+ *
779
+ * @since 5.2.0
780
+ *
781
+ * @return array
782
+ */
783
+ public function provider_test_list_array_items() {
784
+
785
+ $items = [ 'one', 'two', 'three', 'four', 'five' ];
786
+
787
+ return [
788
+ [ $items, null, '', 'one, two, three, four, and five' ], // method defaults
789
+ [ $items, new \stdClass(), new \stdClass(), 'one, two, three, four, and five' ], // bad param types
790
+ [ $items, 'or', '', 'one, two, three, four, or five' ], // custom conjunction
791
+ [ $items, '', '; ', 'one; two; three; four; five' ], // empty conjunction, custom separator
792
+ [ $items, 'with', '; ', 'one; two; three; four; with five' ], // custom conjunction, custom separator
793
+ [ array_slice( $items, 0, 3 ), null, '', 'one, two, and three' ], // 3 items
794
+ [ array_slice( $items, 0, 2 ), null, '', 'one and two' ], // 2 items
795
+ [ array_slice( $items, 0, 2 ), 'or', '', 'one or two' ], // 2 items, custom conjunction
796
+ [ array_slice( $items, 0, 2 ), 'or', '; ', 'one or two' ], // 2 items, custom conjunction, custom separator
797
+ [ [ 'one' ], '', '', 'one' ], // 1 item
798
+ [ [], 'or', '; ', '' ], // no items
799
+ ];
800
+ }
801
+
802
+
803
+ /**
804
+ * Test \SV_WC_Helper::number_format()
805
+ *
806
+ * @see \SV_WC_Helper::number_format()
807
+ * @since 4.3.0
808
+ * @dataProvider provider_test_number_format
809
+ */
810
+ public function test_number_format( $original_number, $formatted_number ) {
811
+
812
+ $result = PluginFramework\SV_WC_Helper::number_format( $original_number );
813
+
814
+ $this->assertTrue( is_numeric( $result ), true );
815
+ $this->assertEquals( $result, $formatted_number );
816
+ }
817
+
818
+
819
+ /**
820
+ * Test SV_WC_Helper::convert_country_code()
821
+ *
822
+ * @dataProvider provider_test_convert_country_code
823
+ * @since 4.3.0
824
+ */
825
+ public function test_convert_country_code( $input_code, $converted_code ) {
826
+
827
+ $this->assertEquals( $converted_code, PluginFramework\SV_WC_Helper::convert_country_code( $input_code ) );
828
+
829
+ // 2 digits codes are converted into 3 digits and vice versa
830
+ if ( 2 === strlen( $input_code ) ) {
831
+ $this->assertEquals( strlen( $converted_code ), 3 );
832
+ } elseif ( 3 === strlen( $input_code ) ) {
833
+ $this->assertEquals( strlen( $converted_code ), 2 );
834
+ }
835
+ }
836
+
837
+
838
+ /**
839
+ * Convert Country code provider
840
+ *
841
+ * @since 4.3.0
842
+ */
843
+ public function provider_test_convert_country_code() {
844
+
845
+ return [
846
+ [ 'US', 'USA' ],
847
+ [ 'CA', 'CAN' ],
848
+ [ 'ES', 'ESP' ],
849
+ [ 'ITA', 'IT' ],
850
+ [ 'ZAF', 'ZA' ],
851
+ ];
852
+ }
853
+
854
+
855
+ /**
856
+ * Get an array with formatted numbers
857
+ *
858
+ * @since 4.3.0
859
+ * @return array
860
+ */
861
+ public function provider_test_number_format() {
862
+
863
+ return [
864
+ [ '1', '1.00' ],
865
+ [ '10', '10.00' ],
866
+ [ '1000', '1000.00' ],
867
+ [ '1.23', '1.23' ],
868
+ [ '10.20', '10.20' ],
869
+ [ '10.201', '10.20' ],
870
+ [ '1000.90', '1000.90'],
871
+ ];
872
+ }
873
+
874
+
875
+ /**
876
+ * Provider for an associative array with different keys and values
877
+ *
878
+ * @since 4.3.0
879
+ * @return array
880
+ */
881
+ public function provider_test_get_request_associative_array() {
882
+
883
+ return [ [
884
+ 'empty' , '',
885
+ 'integer' , 123,
886
+ 'float' , 1.23,
887
+ 'string' , 'abc',
888
+ 'whitespace' , ' abc ',
889
+ 'true' , true,
890
+ 'false' , false,
891
+ 'array' , [ 'a', 'b', 'c' ],
892
+ 'array_assoc' , [ 'a' => 'x', 'b' => 'y', 'c' => 'z' ],
893
+ 'CaMeLKey' , 'CaMeLvalue',
894
+ 'UCKey' , 'UCValue',
895
+ 'lckey' , 'lcvalue',
896
+ ] ];
897
+ }
898
+
899
+
900
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-api-response-message-helper.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for \SV_WC_Payment_Gateway_API_Response_Message_Helper
10
+ *
11
+ * @since 4.5.0
12
+ */
13
+ class Payment_Gateway_API_Response_Message_Helper extends Test_Case {
14
+
15
+
16
+ /**
17
+ * Tests for \SV_WC_Payment_Gateway_API_Response_Message_Helper::get_user_messages()
18
+ *
19
+ * @since 4.5.0
20
+ * @dataProvider provider_test_get_user_messages
21
+ */
22
+ public function test_get_user_messages( $message_ids, $expected ) {
23
+
24
+ $helper = new PluginFramework\SV_WC_Payment_Gateway_API_Response_Message_Helper;
25
+
26
+ Mock::wpPassthruFunction( 'esc_html__' );
27
+
28
+ $this->assertEquals( $expected, $helper->get_user_messages( $message_ids ) );
29
+ }
30
+
31
+
32
+ /**
33
+ * Data provider for test_get_user_messages()
34
+ *
35
+ * @since 4.5.0
36
+ * @return array
37
+ */
38
+ public function provider_test_get_user_messages() {
39
+
40
+ return [
41
+ [ array( 'error' ), 'An error occurred, please try again or try an alternate form of payment' ], // single known message
42
+ [ array( 'unkown' ), null ], // unknown message
43
+ [ array( 'error', 'card_number_missing' ), 'An error occurred, please try again or try an alternate form of payment Please enter your card number and try again.' ], // test concat
44
+ [ array( 'card_number_missing', 'unkown' ), 'Please enter your card number and try again.' ], // test concat with one unknown
45
+ ];
46
+ }
47
+
48
+
49
+ /**
50
+ * Tests for \SV_WC_Payment_Gateway_API_Response_Message_Helper::get_user_message()
51
+ *
52
+ * @since 4.5.0
53
+ * @dataProvider provider_test_get_user_message
54
+ */
55
+ public function test_get_user_message( $message_id, $expected ) {
56
+
57
+ $helper = new PluginFramework\SV_WC_Payment_Gateway_API_Response_Message_Helper;
58
+
59
+ Mock::wpPassthruFunction( 'esc_html__' );
60
+
61
+ $this->assertEquals( $expected, $helper->get_user_message( $message_id ) );
62
+ }
63
+
64
+
65
+ /**
66
+ * Data provider for test_get_user_message()
67
+ *
68
+ * @since 4.5.0
69
+ * @return array
70
+ */
71
+ public function provider_test_get_user_message() {
72
+
73
+ return [
74
+ [ 'error', 'An error occurred, please try again or try an alternate form of payment' ], // known message
75
+ [ 'unkown', null ], // unknown message
76
+ ];
77
+ }
78
+
79
+
80
+ // TODO: Test the `wc_payment_gateway_transaction_response_user_message` filter once \WP_Mock::onFilter() is sorted {CW 2016-10-21}
81
+
82
+
83
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-helper.php ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for \SV_WC_Payment_Gateway_Helper
10
+ *
11
+ * @since 4.5.0
12
+ */
13
+ class Payment_Gateway_Helper extends Test_Case {
14
+
15
+
16
+ /**
17
+ * Test true for \SV_WC_Payment_Gateway_Helper::luhn_check()
18
+ *
19
+ * @since 4.5.0
20
+ */
21
+ public function test_luhn_check_true() {
22
+
23
+ $this->assertTrue( PluginFramework\SV_WC_Payment_Gateway_Helper::luhn_check( '4222222222222' ) );
24
+ }
25
+
26
+
27
+ /**
28
+ * Test false for \SV_WC_Payment_Gateway_Helper::luhn_check()
29
+ *
30
+ * @since 4.5.0
31
+ */
32
+ public function test_luhn_check_false() {
33
+
34
+ $this->assertFalse( PluginFramework\SV_WC_Payment_Gateway_Helper::luhn_check( '4222222222222222' ) );
35
+ }
36
+
37
+
38
+ /**
39
+ * Tests for \SV_WC_Payment_Gateway_Helper::normalize_card_type()
40
+ *
41
+ * @since 4.5.0
42
+ * @dataProvider provider_test_normalize_card_type
43
+ */
44
+ public function test_normalize_card_type( $card_type, $expected ) {
45
+
46
+ Mock::wpPassthruFunction( 'esc_html_x' );
47
+
48
+ Mock::wpFunction( 'wp_list_pluck', array(
49
+ 'return' => array(
50
+ 'mastercard' => array( 'mc' ),
51
+ 'amex' => array( 'americanexpress' ),
52
+ ),
53
+ ) );
54
+
55
+ $this->assertEquals( $expected, PluginFramework\SV_WC_Payment_Gateway_Helper::normalize_card_type( $card_type ) );
56
+ }
57
+
58
+
59
+ /**
60
+ * Data provider for test_normalize_card_type()
61
+ *
62
+ * @since 4.5.0
63
+ * @return array
64
+ */
65
+ public function provider_test_normalize_card_type() {
66
+
67
+ return array(
68
+ array( 'visa', 'visa' ), // nothing to do
69
+ array( 'VISA', 'visa' ), // captalization
70
+ array( 'mc', 'mastercard' ), // existing variation
71
+ array( 'americanexpress', 'amex' ),
72
+ array( 'space-buck', 'space-buck' ), // unknown card type
73
+ );
74
+ }
75
+
76
+
77
+ /**
78
+ * Tests for \SV_WC_Payment_Gateway_Helper::card_type_from_account_number()
79
+ *
80
+ * @since 4.5.0
81
+ * @dataProvider provider_test_card_type_from_account_number
82
+ */
83
+ public function test_card_type_from_account_number( $account_number, $card_type ) {
84
+
85
+ $this->assertEquals( $card_type, PluginFramework\SV_WC_Payment_Gateway_Helper::card_type_from_account_number( $account_number ) );
86
+ }
87
+
88
+
89
+ /**
90
+ * Data provider for test_card_type_from_account_number()
91
+ *
92
+ * @since 4.5.0
93
+ * @return array
94
+ */
95
+ public function provider_test_card_type_from_account_number() {
96
+
97
+ return array(
98
+ array( '4222222222222', 'visa' ),
99
+ array( '5555555555554444', 'mastercard' ),
100
+ array( '2223000048400011', 'mastercard' ),
101
+ array( '371449635398431', 'amex' ),
102
+ array( '6011111111111117', 'discover' ),
103
+ array( '38520000023237', 'dinersclub' ),
104
+ array( '3566002020360505', 'jcb' ),
105
+ array( '6759649826438453', 'maestro' ),
106
+ array( '1234567890123456', null ), // unknown type
107
+ );
108
+ }
109
+
110
+
111
+ /**
112
+ * Tests for \SV_WC_Payment_Gateway_Helper::payment_type_to_name()
113
+ *
114
+ * @since 4.5.0
115
+ * @dataProvider provider_test_payment_type_to_name
116
+ */
117
+ public function test_payment_type_to_name( $type, $expected ) {
118
+
119
+ Mock::wpPassthruFunction( 'esc_html__' );
120
+ Mock::wpPassthruFunction( 'esc_html_x' );
121
+
122
+ Mock::wpFunction( 'wp_list_pluck', array(
123
+ 'return_in_order' => array(
124
+ array(
125
+ 'mastercard' => array( 'mc' ),
126
+ ),
127
+ array(
128
+ 'visa' => 'Visa',
129
+ 'mastercard' => 'MasterCard',
130
+ ),
131
+ ),
132
+ ) );
133
+
134
+ $this->assertEquals( $expected, PluginFramework\SV_WC_Payment_Gateway_Helper::payment_type_to_name( $type ) );
135
+ }
136
+
137
+
138
+ /**
139
+ * Data provider for test_payment_type_to_name()
140
+ *
141
+ * @since 4.5.0
142
+ * @return array
143
+ */
144
+ public function provider_test_payment_type_to_name() {
145
+
146
+ return array(
147
+ array( 'visa', 'Visa' ),
148
+ array( 'VISA', 'Visa' ),
149
+ array( 'mc', 'MasterCard' ),
150
+ array( 'mc', 'MasterCard' ),
151
+ array( '', 'Account' ),
152
+ array( 'space-buck', 'Space Buck' ),
153
+ );
154
+ }
155
+
156
+
157
+ /**
158
+ * Tests the returned array structure of \SV_WC_Payment_Gateway_Helper::get_card_types()
159
+ *
160
+ * @since 4.5.0
161
+ */
162
+ public function test_get_card_types_structure() {
163
+
164
+ foreach ( PluginFramework\SV_WC_Payment_Gateway_Helper::get_card_types() as $card_type ) {
165
+ $this->assertArrayHasKey( 'name', $card_type );
166
+ $this->assertArrayHasKey( 'variations', $card_type );
167
+ }
168
+ }
169
+
170
+
171
+ /**
172
+ * Tests that \SV_WC_Payment_Gateway_Helper::get_card_types() contains the known types.
173
+ *
174
+ * @since 4.5.0
175
+ * @dataProvider provider_test_get_card_types_roll_call
176
+ */
177
+ public function test_get_card_types_roll_call( $card_type ) {
178
+
179
+ $this->assertArrayHasKey( $card_type, PluginFramework\SV_WC_Payment_Gateway_Helper::get_card_types() );
180
+ }
181
+
182
+
183
+ /**
184
+ * Data provider for test_get_card_types_roll_call()
185
+ *
186
+ * @since 4.5.0
187
+ * @return array
188
+ */
189
+ public function provider_test_get_card_types_roll_call() {
190
+
191
+ return array(
192
+ array( 'visa' ),
193
+ array( 'mastercard' ),
194
+ array( 'amex' ),
195
+ array( 'dinersclub' ),
196
+ array( 'discover' ),
197
+ array( 'jcb' ),
198
+ array( 'cartebleue' ),
199
+ array( 'maestro' ),
200
+ array( 'laser' ),
201
+ );
202
+ }
203
+
204
+
205
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-payment-token.php ADDED
@@ -0,0 +1,347 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for \SV_WC_Payment_Gateway_Payment_Token
10
+ *
11
+ * @since 4.5.0
12
+ */
13
+ class Payment_Gateway_Payment_Token extends Test_Case {
14
+
15
+
16
+ /**
17
+ * Tests for \SV_WC_Payment_Gateway_Payment_Token::__construct()
18
+ *
19
+ * Simply tests that the token ID and data are set.
20
+ *
21
+ * @since 4.5.0
22
+ */
23
+ public function test__construct() {
24
+
25
+ $data = array(
26
+ 'type' => 'credit_card',
27
+ );
28
+
29
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', $data );
30
+
31
+ $this->assertEquals( 'mock-token', $token->get_id() );
32
+ $this->assertEquals( $data, $token->to_datastore_format() );
33
+ }
34
+
35
+
36
+ /**
37
+ * Tests for \SV_WC_Payment_Gateway_Payment_Token::__construct()
38
+ *
39
+ * Tests that the card type is correctly set in all situations.
40
+ *
41
+ * @since 4.5.0
42
+ * @dataProvider provider_test__construct_set_card_type
43
+ */
44
+ public function test__construct_set_card_type( $data, $expected ) {
45
+
46
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', $data );
47
+
48
+ $this->assertEquals( $expected, $token->get_card_type() );
49
+ }
50
+
51
+
52
+ /**
53
+ * Data provider for test__construct_set_card_type()
54
+ *
55
+ * @since 4.5.0
56
+ * @return array
57
+ */
58
+ public function provider_test__construct_set_card_type() {
59
+
60
+ return [
61
+ [ array( 'type' => 'not_credit_card' ), null ], // non-credit card type
62
+ [ array( 'type' => 'credit_card' ), null ], // credit card, but no card info
63
+ [ array( 'type' => 'credit_card', 'account_number' => '4222222222222' ), 'visa' ], // set card type by card number
64
+ [ array( 'type' => 'credit_card', 'card_type' => 'VISA' ), 'visa' ], // be sure card type is normalized
65
+ [ array(), null ], // type not set
66
+ ];
67
+ }
68
+
69
+
70
+ /**
71
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_default()
72
+ *
73
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::is_default()
74
+ *
75
+ * @since 4.5.0
76
+ */
77
+ public function test_set_default() {
78
+
79
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
80
+
81
+ $this->assertFalse( $token->is_default() );
82
+
83
+ $token->set_default( true );
84
+
85
+ $this->assertTrue( $token->is_default() );
86
+ }
87
+
88
+
89
+ /**
90
+ * Tests true for \SV_WC_Payment_Gateway_Payment_Token::is_credit_card()
91
+ *
92
+ * @since 4.5.0
93
+ */
94
+ public function test_is_credit_card_true() {
95
+
96
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array(
97
+ 'type' => 'credit_card',
98
+ ) );
99
+
100
+ $this->assertTrue( $token->is_credit_card() );
101
+ }
102
+
103
+
104
+ /**
105
+ * Tests false for \SV_WC_Payment_Gateway_Payment_Token::is_credit_card()
106
+ *
107
+ * @since 4.5.0
108
+ */
109
+ public function test_is_credit_card_false() {
110
+
111
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array(
112
+ 'type' => 'check',
113
+ ) );
114
+
115
+ $this->assertFalse( $token->is_credit_card() );
116
+ }
117
+
118
+
119
+ /**
120
+ * Tests true for \SV_WC_Payment_Gateway_Payment_Token::is_echeck()
121
+ *
122
+ * @since 4.5.0
123
+ */
124
+ public function test_is_echeck_true() {
125
+
126
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array(
127
+ 'type' => 'check',
128
+ ) );
129
+
130
+ $this->assertTrue( $token->is_echeck() );
131
+ }
132
+
133
+
134
+ /**
135
+ * Tests false for \SV_WC_Payment_Gateway_Payment_Token::is_echeck()
136
+ *
137
+ * @since 4.5.0
138
+ */
139
+ public function test_is_echeck_false() {
140
+
141
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array(
142
+ 'type' => 'credit_card',
143
+ ) );
144
+
145
+ $this->assertFalse( $token->is_echeck() );
146
+ }
147
+
148
+
149
+ /**
150
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_card_type()
151
+ *
152
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_account_type()
153
+ *
154
+ * @since 4.5.0
155
+ */
156
+ public function test_set_card_type() {
157
+
158
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
159
+
160
+ $this->assertNull( $token->get_card_type() );
161
+
162
+ $token->set_card_type( 'visa' );
163
+
164
+ $this->assertEquals( 'visa', $token->get_card_type() );
165
+ }
166
+
167
+
168
+ /**
169
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_account_type()
170
+ *
171
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_account_type()
172
+ *
173
+ * @since 4.5.0
174
+ */
175
+ public function test_set_account_type() {
176
+
177
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
178
+
179
+ $this->assertNull( $token->get_account_type() );
180
+
181
+ $token->set_account_type( 'checking' );
182
+
183
+ $this->assertEquals( 'checking', $token->get_account_type() );
184
+ }
185
+
186
+
187
+ /**
188
+ * Tests for \SV_WC_Payment_Gateway_Payment_Token::get_type_full()
189
+ *
190
+ * @since 4.5.0
191
+ * @dataProvider provider_test_get_type_full
192
+ */
193
+ public function test_get_type_full( $data, $expected ) {
194
+
195
+ Mock::wpFunction( 'wp_list_pluck', array(
196
+ 'return' => array(),
197
+ ) );
198
+
199
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', $data );
200
+
201
+ Mock::wpPassthruFunction( 'esc_html__' );
202
+ Mock::wpPassthruFunction( 'esc_html_x' );
203
+
204
+ $this->assertEquals( $expected, $token->get_type_full() );
205
+ }
206
+
207
+
208
+ /**
209
+ * Data provider for test_get_type_full()
210
+ *
211
+ * @since 4.5.0
212
+ * @return array
213
+ */
214
+ public function provider_test_get_type_full() {
215
+
216
+ return [
217
+ [ array( 'type' => 'credit_card' ), 'Credit / Debit Card' ],
218
+ [ array( 'type' => 'credit_card', 'card_type' => 'visa' ), 'Visa' ],
219
+ ];
220
+ }
221
+
222
+
223
+ /**
224
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_last_four()
225
+ *
226
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_last_four()
227
+ *
228
+ * @since 4.5.0
229
+ */
230
+ public function test_set_last_four() {
231
+
232
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
233
+
234
+ $this->assertNull( $token->get_last_four() );
235
+
236
+ $token->set_last_four( '1234' );
237
+
238
+ $this->assertEquals( '1234', $token->get_last_four() );
239
+ }
240
+
241
+
242
+ /**
243
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_exp_month()
244
+ *
245
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_exp_month()
246
+ *
247
+ * @since 4.5.0
248
+ */
249
+ public function test_set_exp_month() {
250
+
251
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
252
+
253
+ $this->assertNull( $token->get_exp_month() );
254
+
255
+ $token->set_exp_month( '01' );
256
+
257
+ $this->assertEquals( '01', $token->get_exp_month() );
258
+ }
259
+
260
+
261
+ /**
262
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_exp_year()
263
+ *
264
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_exp_year()
265
+ *
266
+ * @since 4.5.0
267
+ */
268
+ public function test_set_exp_year() {
269
+
270
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
271
+
272
+ $this->assertNull( $token->get_exp_year() );
273
+
274
+ $token->set_exp_year( '85' );
275
+
276
+ $this->assertEquals( '85', $token->get_exp_year() );
277
+ }
278
+
279
+
280
+ /**
281
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::get_exp_date()
282
+ *
283
+ * @since 4.5.0
284
+ */
285
+ public function test_get_exp_date() {
286
+
287
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array(
288
+ 'exp_month' => '01',
289
+ 'exp_year' => '1985',
290
+ ) );
291
+
292
+ $this->assertEquals( '01/85', $token->get_exp_date() );
293
+ }
294
+
295
+
296
+ /**
297
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_image_url()
298
+ *
299
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_image_url()
300
+ *
301
+ * @since 4.5.0
302
+ */
303
+ public function test_set_image_url() {
304
+
305
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
306
+
307
+ $token->set_image_url( 'http://example.com/1234.jpg' );
308
+
309
+ $this->assertEquals( 'http://example.com/1234.jpg', $token->get_image_url() );
310
+ }
311
+
312
+
313
+ /**
314
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_nickname()
315
+ *
316
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_nickname()
317
+ *
318
+ * @since 5.2.2
319
+ */
320
+ public function test_set_nickname() {
321
+
322
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
323
+
324
+ $token->set_nickname( 'new-payment-method' );
325
+
326
+ $this->assertEquals( 'new-payment-method', $token->get_nickname() );
327
+ }
328
+
329
+
330
+ /**
331
+ * Tests \SV_WC_Payment_Gateway_Payment_Token::set_billing_hash()
332
+ *
333
+ * Also provides coverage for \SV_WC_Payment_Gateway_Payment_Token::get_billing_hash()
334
+ *
335
+ * @since 5.3.0-dev
336
+ */
337
+ public function test_set_billing_hash() {
338
+
339
+ $token = new PluginFramework\SV_WC_Payment_Gateway_Payment_Token( 'mock-token', array() );
340
+
341
+ $token->set_billing_hash( 'hash' );
342
+
343
+ $this->assertEquals( 'hash', $token->get_billing_hash() );
344
+ }
345
+
346
+
347
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway/apple-pay-api-request.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for \SV_WC_Payment_Gateway_Apple_Pay_API_Request
10
+ *
11
+ * @since 4.7.0
12
+ */
13
+ class Payment_Gateway_Apple_Pay_API_Request extends Test_Case {
14
+
15
+
16
+ /**
17
+ * Tests for \SV_WC_Payment_Gateway_Apple_Pay_API_Request::set_merchant_data()
18
+ *
19
+ * @since 4.7.0
20
+ * @dataProvider provider_test_set_merchant_data
21
+ */
22
+ public function test_set_merchant_data( $merchant_id, $domain_name, $display_name, $expected ) {
23
+
24
+ $gateway = $this->getMockBuilder( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway' )->getMock();
25
+
26
+ $request = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Request( $gateway );
27
+
28
+ $request->set_merchant_data( $merchant_id, $domain_name, $display_name );
29
+
30
+ $this->assertEquals( $expected, $request->to_string() );
31
+ }
32
+
33
+
34
+ /**
35
+ * Data provider for test_set_merchant_data()
36
+ *
37
+ * @since 4.5.0
38
+ * @return array
39
+ */
40
+ public function provider_test_set_merchant_data() {
41
+
42
+ return array(
43
+ array(
44
+ 'merchant',
45
+ 'https://domain.com',
46
+ 'Domain',
47
+ json_encode( array(
48
+ 'merchantIdentifier' => 'merchant',
49
+ 'domainName' => 'domain.com',
50
+ 'displayName' => 'Domain',
51
+ ) ),
52
+ ),
53
+ array(
54
+ 'merchant',
55
+ 'http://domain.com',
56
+ 'Domain',
57
+ json_encode( array(
58
+ 'merchantIdentifier' => 'merchant',
59
+ 'domainName' => 'domain.com',
60
+ 'displayName' => 'Domain',
61
+ ) ),
62
+ ),
63
+ );
64
+ }
65
+
66
+
67
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway/apple-pay-api-response.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for \SV_WC_Payment_Gateway_Apple_Pay_API_Response
10
+ *
11
+ * @since 4.7.0
12
+ */
13
+ class Payment_Gateway_Apple_Pay_API_Response extends Test_Case {
14
+
15
+
16
+ /**
17
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_status_code()
18
+ *
19
+ * @since 4.7.0
20
+ */
21
+ public function test_get_status_code() {
22
+
23
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Response( $this->get_error_response_data() );
24
+
25
+ $this->assertEquals( '123', $response->get_status_code() );
26
+ }
27
+
28
+
29
+ /**
30
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_status_code()
31
+ *
32
+ * @since 4.7.0
33
+ */
34
+ public function test_get_status_code_blank() {
35
+
36
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Response( '' );
37
+
38
+ $this->assertNull( $response->get_status_code() );
39
+ }
40
+
41
+
42
+ /**
43
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_status_message()
44
+ *
45
+ * @since 4.7.0
46
+ */
47
+ public function test_get_status_message() {
48
+
49
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Response( $this->get_error_response_data() );
50
+
51
+ $this->assertEquals( 'Error', $response->get_status_message() );
52
+ }
53
+
54
+
55
+ /**
56
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_status_message()
57
+ *
58
+ * @since 4.7.0
59
+ */
60
+ public function test_get_status_message_blank() {
61
+
62
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Response( '' );
63
+
64
+ $this->assertNull( $response->get_status_message() );
65
+ }
66
+
67
+
68
+ /**
69
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_merchant_session()
70
+ *
71
+ * @since 4.7.0
72
+ */
73
+ public function test_get_merchant_session() {
74
+
75
+ $data = json_encode( array( 'response' ) );
76
+
77
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Response( $data );
78
+
79
+ $this->assertEquals( $data, $response->get_merchant_session() );
80
+ }
81
+
82
+
83
+ /**
84
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_merchant_session()
85
+ *
86
+ * @since 4.7.0
87
+ */
88
+ public function test_get_merchant_session_blank() {
89
+
90
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_API_Response( '' );
91
+
92
+ $this->assertEquals( '', $response->get_merchant_session() );
93
+ }
94
+
95
+
96
+ /**
97
+ * Gets an example error response.
98
+ *
99
+ * @since 4.7.0
100
+ * @return string
101
+ */
102
+ private function get_error_response_data() {
103
+
104
+ $data = array(
105
+ 'statusCode' => '123',
106
+ 'statusMessage' => 'Error',
107
+ );
108
+
109
+ return json_encode( $data );
110
+ }
111
+
112
+
113
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway/apple-pay-payment-response.php ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Unit tests for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response
10
+ *
11
+ * @since 4.7.0
12
+ */
13
+ class Payment_Gateway_Apple_Pay_Payment_Response extends Test_Case {
14
+
15
+
16
+ /**
17
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_payment_data()
18
+ *
19
+ * @since 4.7.0
20
+ */
21
+ public function test_get_payment_data() {
22
+
23
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( $this->get_valid_response_data() );
24
+
25
+ $this->assertEquals( array( 'This is the payment data.' ), $response->get_payment_data() );
26
+ }
27
+
28
+
29
+ /**
30
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_payment_data()
31
+ *
32
+ * @since 4.7.0
33
+ */
34
+ public function test_get_payment_data_blank() {
35
+
36
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( '' );
37
+
38
+ $this->assertEquals( array(), $response->get_payment_data() );
39
+ }
40
+
41
+
42
+ /**
43
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_transaction_id()
44
+ *
45
+ * @since 4.7.0
46
+ */
47
+ public function test_get_transaction_id() {
48
+
49
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( $this->get_valid_response_data() );
50
+
51
+ $this->assertEquals( '12345', $response->get_transaction_id() );
52
+ }
53
+
54
+
55
+ /**
56
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_transaction_id()
57
+ *
58
+ * @since 4.7.0
59
+ */
60
+ public function test_get_transaction_id_blank() {
61
+
62
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( '' );
63
+
64
+ $this->assertEquals( '', $response->get_transaction_id() );
65
+ }
66
+
67
+
68
+ /**
69
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_card_type()
70
+ *
71
+ * @since 4.7.0
72
+ */
73
+ public function test_get_card_type() {
74
+
75
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( $this->get_valid_response_data() );
76
+
77
+ $this->assertEquals( 'visa', $response->get_card_type() );
78
+ }
79
+
80
+
81
+ /**
82
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_card_type()
83
+ *
84
+ * @since 4.7.0
85
+ */
86
+ public function test_get_card_type_blank() {
87
+
88
+ Mock::wpFunction( 'wp_list_pluck', array(
89
+ 'return' => array(
90
+ 'visa' => array( 'Visa' ),
91
+ ),
92
+ ) );
93
+
94
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( '' );
95
+
96
+ $this->assertEquals( 'card', $response->get_card_type() );
97
+ }
98
+
99
+
100
+ /**
101
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_last_four()
102
+ *
103
+ * @since 4.7.0
104
+ */
105
+ public function test_get_last_four() {
106
+
107
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( $this->get_valid_response_data() );
108
+
109
+ $this->assertEquals( '1234', $response->get_last_four() );
110
+ }
111
+
112
+
113
+ /**
114
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_last_four()
115
+ *
116
+ * @since 4.7.0
117
+ */
118
+ public function test_get_last_four_blank() {
119
+
120
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( '' );
121
+
122
+ $this->assertEquals( '', $response->get_last_four() );
123
+ }
124
+
125
+
126
+ /**
127
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_billing_address()
128
+ *
129
+ * @since 4.7.0
130
+ */
131
+ public function test_get_billing_address() {
132
+
133
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( $this->get_valid_response_data() );
134
+
135
+ $expected = array(
136
+ 'first_name' => 'Lloyd',
137
+ 'last_name' => 'Christmas',
138
+ 'address_1' => '333 E Wonderview Ave.',
139
+ 'address_2' => 'Room 217',
140
+ 'city' => 'Estes Park',
141
+ 'state' => 'CO',
142
+ 'postcode' => '80517',
143
+ 'country' => 'US',
144
+ 'email' => 'lloyd@igotworms.com',
145
+ 'phone' => '(123) 555-1234',
146
+ );
147
+
148
+ $this->assertEquals( $expected, $response->get_billing_address() );
149
+ }
150
+
151
+
152
+ /**
153
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_billing_address()
154
+ *
155
+ * @since 4.7.0
156
+ */
157
+ public function test_get_billing_address_blank() {
158
+
159
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( '' );
160
+
161
+ $expected = array(
162
+ 'first_name' => '',
163
+ 'last_name' => '',
164
+ 'address_1' => '',
165
+ 'address_2' => '',
166
+ 'city' => '',
167
+ 'state' => '',
168
+ 'postcode' => '',
169
+ 'country' => '',
170
+ );
171
+
172
+ $this->assertEquals( $expected, $response->get_billing_address() );
173
+ }
174
+
175
+
176
+ /**
177
+ * Test for \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_shipping_address()
178
+ *
179
+ * @since 4.7.0
180
+ */
181
+ public function test_get_shipping_address() {
182
+
183
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( $this->get_valid_response_data() );
184
+
185
+ $expected = array(
186
+ 'first_name' => 'Mary',
187
+ 'last_name' => 'Swanson',
188
+ 'address_1' => '2250 Deer Valley Drive',
189
+ 'address_2' => '',
190
+ 'city' => 'Aspen',
191
+ 'state' => 'CO',
192
+ 'postcode' => '81611',
193
+ 'country' => 'US',
194
+ );
195
+
196
+ $this->assertEquals( $expected, $response->get_shipping_address() );
197
+ }
198
+
199
+
200
+ /**
201
+ * Test for blank \SV_WC_Payment_Gateway_Apple_Pay_Payment_Response::get_shipping_address()
202
+ *
203
+ * @since 4.7.0
204
+ */
205
+ public function test_get_shipping_address_blank() {
206
+
207
+ $response = new PluginFramework\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response( '' );
208
+
209
+ $expected = array(
210
+ 'first_name' => '',
211
+ 'last_name' => '',
212
+ 'address_1' => '',
213
+ 'address_2' => '',
214
+ 'city' => '',
215
+ 'state' => '',
216
+ 'postcode' => '',
217
+ 'country' => '',
218
+ );
219
+
220
+ $this->assertEquals( $expected, $response->get_shipping_address() );
221
+ }
222
+
223
+
224
+ private function get_valid_response_data() {
225
+
226
+ $data = array(
227
+ 'token' => array(
228
+ 'paymentData' => array( 'This is the payment data.' ),
229
+ 'transactionIdentifier' => '12345',
230
+ 'paymentMethod' => array(
231
+ 'network' => 'Visa',
232
+ 'displayName' => 'Visa 1234',
233
+ ),
234
+ ),
235
+ 'billingContact' => array(
236
+ 'givenName' => 'Lloyd',
237
+ 'familyName' => 'Christmas',
238
+ 'addressLines' => array(
239
+ '333 E Wonderview Ave.',
240
+ 'Room 217',
241
+ ),
242
+ 'locality' => 'Estes Park',
243
+ 'administrativeArea' => 'CO',
244
+ 'postalCode' => '80517',
245
+ 'countryCode' => 'us', // Apple returns this as lowercase
246
+ ),
247
+ 'shippingContact' => array(
248
+ 'givenName' => 'Mary',
249
+ 'familyName' => 'Swanson',
250
+ 'addressLines' => array(
251
+ '2250 Deer Valley Drive',
252
+ ),
253
+ 'locality' => 'Aspen',
254
+ 'administrativeArea' => 'CO',
255
+ 'postalCode' => '81611',
256
+ 'countryCode' => 'us',
257
+ 'emailAddress' => 'lloyd@igotworms.com', // The shipping address contains the email & phone
258
+ 'phoneNumber' => '(123) 555-1234', // The tests ensure they end up with the billing address as per WC standards
259
+ ),
260
+ );
261
+
262
+ return json_encode( $data );
263
+ }
264
+
265
+
266
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/plugin.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ use \WP_Mock as Mock;
6
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as PluginFramework;
7
+
8
+ /**
9
+ * Plugin Test
10
+ *
11
+ * @package SV_WC_Plugin_Framework\Tests
12
+ * @since 4.0.1-1
13
+ */
14
+ class Plugin extends Test_Case {
15
+
16
+ public function test_constructor() {
17
+
18
+ $this->assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin', $this->plugin() );
19
+ }
20
+
21
+ public function test_clone() {
22
+
23
+ Mock::wpFunction( '_doing_it_wrong', array(
24
+ 'args' => array( '__clone', '*', '*' ),
25
+ 'return' => function() { echo "foo"; },
26
+ ) );
27
+
28
+ Mock::wpPassthruFunction( '__' );
29
+ Mock::wpPassthruFunction( 'esc_html__' );
30
+
31
+ clone $this->plugin();
32
+
33
+ $this->expectOutputString( 'foo' );
34
+ }
35
+
36
+ public function test_plug_action_links() {
37
+
38
+ $actions = array();
39
+
40
+ $new_actions = $this->plugin()->plugin_action_links( $actions );
41
+
42
+ $this->assertEquals( $new_actions, array() );
43
+ }
44
+
45
+
46
+ public function test_get_id() {
47
+
48
+ $this->assertEquals( 'mock', $this->plugin()->get_id() );
49
+ }
50
+
51
+ public function test_get_id_dasherized() {
52
+
53
+ $this->assertEquals( 'mock', $this->plugin()->get_id_dasherized() );
54
+ }
55
+
56
+ public function test_get_version() {
57
+
58
+ $this->assertEquals( '7.7.7', $this->plugin()->get_version() );
59
+ }
60
+
61
+ public function test_get_plugin_version_name() {
62
+
63
+ $this->assertEquals( 'wc_mock_version', $this->plugin()->get_plugin_version_name() );
64
+ }
65
+
66
+ public function test_get_api_log_message() {
67
+
68
+ $data = array(
69
+ 'method' => 'POST',
70
+ 'uri' => 'http://skyverge.com',
71
+ 'user-agent' => 'WooCommerce-Mock/0.1.0 (WooCommerce/2.4.0; WordPress/4.2.3)',
72
+ 'headers' => array( 'content-type' => 'application/xml', 'accept' => 'application/xml' ),
73
+ 'body' => '<?xml version="1.0" encoding="UTF-8"?><sv></sv>',
74
+ 'duration' => '7.77s',
75
+ );
76
+
77
+ $expected_message = <<<MSG
78
+ Request
79
+ method: POST
80
+ uri: http://skyverge.com
81
+ user-agent: WooCommerce-Mock/0.1.0 (WooCommerce/2.4.0; WordPress/4.2.3)
82
+ headers: Array
83
+ (
84
+ [content-type] => application/xml
85
+ [accept] => application/xml
86
+ )
87
+ body: <?xml version="1.0" encoding="UTF-8"?><sv></sv>
88
+ duration: 7.77s
89
+
90
+ MSG;
91
+
92
+ $actual_message = $this->plugin()->get_api_log_message( $data );
93
+
94
+ $this->assertEquals( $expected_message, $actual_message );
95
+ }
96
+
97
+ protected function plugin() {
98
+
99
+ // functions used as part of constructor
100
+ Mock::wpPassthruFunction( 'untrailingslashit' );
101
+ Mock::wpPassthruFunction( 'trailingslashit' );
102
+
103
+ Mock::wpFunction( 'plugin_dir_path', array(
104
+ 'args' => bootstrap()->get_framework_path() . '/woocommerce/class-sv-wc-plugin.php',
105
+ 'return' => bootstrap()->get_framework_path() . '/woocommerce',
106
+ ) );
107
+
108
+ Mock::wpFunction( 'is_admin', array(
109
+ 'return' => true,
110
+ ) );
111
+
112
+ Mock::wpPassthruFunction( 'plugin_basename' );
113
+
114
+ Mock::wpFunction( 'has_action', array(
115
+ 'return' => true,
116
+ ) );
117
+
118
+ Mock::wpPassthruFunction( 'register_activation_hook' );
119
+ Mock::wpPassthruFunction( 'register_deactivation_hook' );
120
+
121
+ Mock::wpFunction( 'is_ajax', array( 'return' => false ) );
122
+
123
+ Mock::wpPassthruFunction( 'wp_parse_args' );
124
+
125
+ $args = array(
126
+ 'mock',
127
+ '7.7.7',
128
+ array(
129
+ 'dependencies' => array(
130
+ 'php_extensions' => array( 'json' ),
131
+ 'php_functions' => array(),
132
+ 'php_settings' => array(),
133
+ ),
134
+ 'text_domain' => 'mock',
135
+ ),
136
+ );
137
+
138
+ return $this->getMockBuilder( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin' )
139
+ ->setConstructorArgs( $args )
140
+ ->getMockForAbstractClass();
141
+ }
142
+
143
+ }
vendor/skyverge/wc-plugin-framework/tests/_archive/unit/test-case.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\PluginFramework\Tests\Unit;
4
+
5
+ class Test_Case extends \PHPUnit\Framework\TestCase {
6
+
7
+
8
+ public function setUp() {
9
+
10
+ \WP_Mock::setUp();
11
+ }
12
+
13
+ public function tearDown() {
14
+
15
+ \WP_Mock::tearDown();
16
+ }
17
+
18
+
19
+ }
vendor/skyverge/wc-plugin-framework/tests/_data/.gitkeep ADDED
File without changes
vendor/skyverge/wc-plugin-framework/tests/_output/.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
1
+ *
2
+ !.gitignore
vendor/skyverge/wc-plugin-framework/tests/_support/AcceptanceTester.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Inherited Methods
6
+ * @method void wantToTest($text)
7
+ * @method void wantTo($text)
8
+ * @method void execute($callable)
9
+ * @method void expectTo($prediction)
10
+ * @method void expect($prediction)
11
+ * @method void amGoingTo($argumentation)
12
+ * @method void am($role)
13
+ * @method void lookForwardTo($achieveValue)
14
+ * @method void comment($description)
15
+ * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
16
+ *
17
+ * @SuppressWarnings(PHPMD)
18
+ */
19
+ class AcceptanceTester extends \Codeception\Actor
20
+ {
21
+ use _generated\AcceptanceTesterActions;
22
+
23
+ /**
24
+ * Define custom actions here
25
+ */
26
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/FunctionalTester.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Inherited Methods
6
+ * @method void wantToTest($text)
7
+ * @method void wantTo($text)
8
+ * @method void execute($callable)
9
+ * @method void expectTo($prediction)
10
+ * @method void expect($prediction)
11
+ * @method void amGoingTo($argumentation)
12
+ * @method void am($role)
13
+ * @method void lookForwardTo($achieveValue)
14
+ * @method void comment($description)
15
+ * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
16
+ *
17
+ * @SuppressWarnings(PHPMD)
18
+ */
19
+ class FunctionalTester extends \Codeception\Actor
20
+ {
21
+ use _generated\FunctionalTesterActions;
22
+
23
+ /**
24
+ * Define custom actions here
25
+ */
26
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Acceptance.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Helper;
3
+
4
+ // here you can define custom actions
5
+ // all public methods declared in helper class will be available in $I
6
+
7
+ class Acceptance extends \Codeception\Module
8
+ {
9
+
10
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Functional.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Helper;
3
+
4
+ // here you can define custom actions
5
+ // all public methods declared in helper class will be available in $I
6
+
7
+ class Functional extends \Codeception\Module
8
+ {
9
+
10
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Integration.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Helper;
3
+
4
+ // here you can define custom actions
5
+ // all public methods declared in helper class will be available in $I
6
+
7
+ class Integration extends \Codeception\Module
8
+ {
9
+
10
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/Helper/Unit.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Helper;
3
+
4
+ // here you can define custom actions
5
+ // all public methods declared in helper class will be available in $I
6
+
7
+ class Unit extends \Codeception\Module
8
+ {
9
+
10
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/IntegrationTester.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Inherited Methods
6
+ * @method void wantToTest($text)
7
+ * @method void wantTo($text)
8
+ * @method void execute($callable)
9
+ * @method void expectTo($prediction)
10
+ * @method void expect($prediction)
11
+ * @method void amGoingTo($argumentation)
12
+ * @method void am($role)
13
+ * @method void lookForwardTo($achieveValue)
14
+ * @method void comment($description)
15
+ * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
16
+ *
17
+ * @SuppressWarnings(PHPMD)
18
+ */
19
+ class IntegrationTester extends \Codeception\Actor
20
+ {
21
+ use _generated\IntegrationTesterActions;
22
+
23
+ /**
24
+ * Define custom actions here
25
+ */
26
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/UnitTester.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Inherited Methods
6
+ * @method void wantToTest($text)
7
+ * @method void wantTo($text)
8
+ * @method void execute($callable)
9
+ * @method void expectTo($prediction)
10
+ * @method void expect($prediction)
11
+ * @method void amGoingTo($argumentation)
12
+ * @method void am($role)
13
+ * @method void lookForwardTo($achieveValue)
14
+ * @method void comment($description)
15
+ * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
16
+ *
17
+ * @SuppressWarnings(PHPMD)
18
+ */
19
+ class UnitTester extends \Codeception\Actor
20
+ {
21
+ use _generated\UnitTesterActions;
22
+
23
+ /**
24
+ * Define custom actions here
25
+ */
26
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/_generated/.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
1
+ *
2
+ !.gitignore
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/gateway-test-plugin.php ADDED
@@ -0,0 +1,375 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: Gateway Test Plugin
4
+ * Plugin URI: http://www.woocommerce.com/products/
5
+ * Description: Gateway tests plugin
6
+ * Author: SkyVerge
7
+ * Author URI: https://skyverge.com
8
+ * Version: 1.0.0
9
+ * Text Domain: gateway-test-plugin
10
+ * Domain Path: /i18n/languages/
11
+ *
12
+ * Copyright: (c) 2011-2019, SkyVerge, Inc. (info@skyverge.com)
13
+ *
14
+ * License: GNU General Public License v3.0
15
+ * License URI: http://www.gnu.org/licenses/gpl-3.0.html
16
+ *
17
+ * @author SkyVerge
18
+ * @copyright Copyright (c) 2011-2019, SkyVerge, Inc.
19
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0
20
+ */
21
+
22
+ defined( 'ABSPATH' ) or exit;
23
+
24
+ /**
25
+ * The plugin loader class.
26
+ *
27
+ * @since 1.0.0
28
+ */
29
+ class SV_WC_Framework_Gateway_Test_Plugin_Loader {
30
+
31
+
32
+ /** minimum PHP version required by this plugin */
33
+ const MINIMUM_PHP_VERSION = '5.6.0';
34
+
35
+ /** minimum WordPress version required by this plugin */
36
+ const MINIMUM_WP_VERSION = '4.4';
37
+
38
+ /** minimum WooCommerce version required by this plugin */
39
+ const MINIMUM_WC_VERSION = '3.0.9';
40
+
41
+ /** SkyVerge plugin framework version used by this plugin */
42
+ const FRAMEWORK_VERSION = '5.4.2';
43
+
44
+ /** the plugin name, for displaying notices */
45
+ const PLUGIN_NAME = 'WooCommerce Framework Gateway Test Plugin';
46
+
47
+
48
+ /** @var SV_WC_Framework_Gateway_Test_Plugin_Loader single instance of this class */
49
+ protected static $instance;
50
+
51
+ /** @var array the admin notices to add */
52
+ protected $notices = array();
53
+
54
+
55
+ /**
56
+ * Constructs the class.
57
+ *
58
+ * @since 1.0.0
59
+ */
60
+ protected function __construct() {
61
+
62
+ register_activation_hook( __FILE__, array( $this, 'activation_check' ) );
63
+
64
+ add_action( 'admin_init', array( $this, 'check_environment' ) );
65
+ add_action( 'admin_init', array( $this, 'add_plugin_notices' ) );
66
+
67
+ add_action( 'admin_notices', array( $this, 'admin_notices' ), 15 );
68
+
69
+ add_filter( 'woocommerce_prevent_automatic_wizard_redirect', '__return_true' );
70
+
71
+ // if the environment check fails, initialize the plugin
72
+ if ( $this->is_environment_compatible() ) {
73
+ add_action( 'plugins_loaded', array( $this, 'init_plugin' ) );
74
+ }
75
+ }
76
+
77
+
78
+ /**
79
+ * Cloning instances is forbidden due to singleton pattern.
80
+ *
81
+ * @since 1.0.0
82
+ */
83
+ public function __clone() {
84
+ _doing_it_wrong( __FUNCTION__, sprintf( 'You cannot clone instances of %s.', get_class( $this ) ), '1.0.0' );
85
+ }
86
+
87
+
88
+ /**
89
+ * Unserializing instances is forbidden due to singleton pattern.
90
+ *
91
+ * @since 1.0.0
92
+ */
93
+ public function __wakeup() {
94
+ _doing_it_wrong( __FUNCTION__, sprintf( 'You cannot unserialize instances of %s.', get_class( $this ) ), '1.0.0' );
95
+ }
96
+
97
+
98
+ /**
99
+ * Initializes the plugin.
100
+ *
101
+ * @since 1.0.0
102
+ */
103
+ public function init_plugin() {
104
+
105
+ if ( ! $this->plugins_compatible() ) {
106
+ return;
107
+ }
108
+
109
+ $this->load_framework();
110
+
111
+ // autoload plugin and vendor files
112
+ $loader = require_once( plugin_dir_path( __FILE__ ) . 'vendor/autoload.php' );
113
+
114
+ // register plugin namespace with autoloader
115
+ $loader->addPsr4( 'SkyVerge\\WooCommerce\\GatewayTestPlugin\\', __DIR__ . '/includes' );
116
+
117
+ require_once( plugin_dir_path( __FILE__ ) . 'includes/Functions.php' );
118
+
119
+ // fire it up!
120
+ sv_wc_gateway_test_plugin();
121
+ }
122
+
123
+
124
+ /**
125
+ * Loads the base framework classes.
126
+ *
127
+ * @since 1.0.0
128
+ */
129
+ protected function load_framework() {
130
+
131
+
132
+ if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\' . $this->get_framework_version_namespace() . '\\SV_WC_Plugin' ) ) {
133
+ require_once( __DIR__ . '/vendor/skyverge/wc-plugin-framework/woocommerce/class-sv-wc-plugin.php' );
134
+ }
135
+
136
+ if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\' . $this->get_framework_version_namespace() . '\\SV_WC_Payment_Gateway_Plugin' ) ) {
137
+ require_once( __DIR__ . '/vendor/skyverge/wc-plugin-framework/woocommerce/payment-gateway/class-sv-wc-payment-gateway-plugin.php' );
138
+ }
139
+ }
140
+
141
+
142
+ /**
143
+ * Gets the framework version in namespace form.
144
+ *
145
+ * @since 1.0.0
146
+ *
147
+ * @return string
148
+ */
149
+ protected function get_framework_version_namespace() {
150
+
151
+ return 'v' . str_replace( '.', '_', $this->get_framework_version() );
152
+ }
153
+
154
+
155
+ /**
156
+ * Gets the famework version used by this plugin.
157
+ *
158
+ * @since 1.0.0
159
+ *
160
+ * @return string
161
+ */
162
+ protected function get_framework_version() {
163
+
164
+ return self::FRAMEWORK_VERSION;
165
+ }
166
+
167
+
168
+ /**
169
+ * Checks the server environment and other factors and deactivates plugins as necessary.
170
+ *
171
+ * Based on http://wptavern.com/how-to-prevent-wordpress-plugins-from-activating-on-sites-with-incompatible-hosting-environments
172
+ *
173
+ * @since 1.0.0
174
+ */
175
+ public function activation_check() {
176
+
177
+ if ( ! $this->is_environment_compatible() ) {
178
+
179
+ $this->deactivate_plugin();
180
+
181
+ wp_die( self::PLUGIN_NAME . ' could not be activated. ' . $this->get_environment_message() );
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Checks the environment on loading WordPress, just in case the environment changes after activation.
187
+ *
188
+ * @since 1.0.0
189
+ */
190
+ public function check_environment() {
191
+
192
+ if ( ! $this->is_environment_compatible() && is_plugin_active( plugin_basename( __FILE__ ) ) ) {
193
+
194
+ $this->deactivate_plugin();
195
+
196
+ $this->add_admin_notice( 'bad_environment', 'error', self::PLUGIN_NAME . ' has been deactivated. ' . $this->get_environment_message() );
197
+ }
198
+ }
199
+
200
+
201
+ /**
202
+ * Adds notices for out-of-date WordPress and/or WooCommerce versions.
203
+ *
204
+ * @since 1.0.0
205
+ */
206
+ public function add_plugin_notices() {
207
+
208
+ if ( ! $this->is_wp_compatible() ) {
209
+
210
+ $this->add_admin_notice( 'update_wordpress', 'error', sprintf(
211
+ '%s requires WordPress version %s or higher. Please %supdate WordPress &raquo;%s',
212
+ '<strong>' . self::PLUGIN_NAME . '</strong>',
213
+ self::MINIMUM_WP_VERSION,
214
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">', '</a>'
215
+ ) );
216
+ }
217
+
218
+ if ( ! $this->is_wc_compatible() ) {
219
+
220
+ $this->add_admin_notice( 'update_woocommerce', 'error', sprintf(
221
+ '%1$s requires WooCommerce version %2$s or higher. Please %3$supdate WooCommerce%4$s to the latest version, or %5$sdownload the minimum required version &raquo;%6$s',
222
+ '<strong>' . self::PLUGIN_NAME . '</strong>',
223
+ self::MINIMUM_WC_VERSION,
224
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">', '</a>',
225
+ '<a href="' . esc_url( 'https://downloads.wordpress.org/plugin/woocommerce.' . self::MINIMUM_WC_VERSION . '.zip' ) . '">', '</a>'
226
+ ) );
227
+ }
228
+ }
229
+
230
+
231
+ /**
232
+ * Determines if the required plugins are compatible.
233
+ *
234
+ * @since 1.0.0
235
+ *
236
+ * @return bool
237
+ */
238
+ protected function plugins_compatible() {
239
+
240
+ return $this->is_wp_compatible() && $this->is_wc_compatible();
241
+ }
242
+
243
+
244
+ /**
245
+ * Determines if the WordPress compatible.
246
+ *
247
+ * @since 1.0.0
248
+ *
249
+ * @return bool
250
+ */
251
+ protected function is_wp_compatible() {
252
+
253
+ if ( ! self::MINIMUM_WP_VERSION ) {
254
+ return true;
255
+ }
256
+
257
+ return version_compare( get_bloginfo( 'version' ), self::MINIMUM_WP_VERSION, '>=' );
258
+ }
259
+
260
+
261
+ /**
262
+ * Determines if the WooCommerce compatible.
263
+ *
264
+ * @since 1.0.0
265
+ *
266
+ * @return bool
267
+ */
268
+ protected function is_wc_compatible() {
269
+
270
+ if ( ! self::MINIMUM_WC_VERSION ) {
271
+ return true;
272
+ }
273
+
274
+ return defined( 'WC_VERSION' ) && version_compare( WC_VERSION, self::MINIMUM_WC_VERSION, '>=' );
275
+ }
276
+
277
+
278
+ /**
279
+ * Deactivates the plugin.
280
+ *
281
+ * @since 1.0.0
282
+ */
283
+ protected function deactivate_plugin() {
284
+
285
+ deactivate_plugins( plugin_basename( __FILE__ ) );
286
+
287
+ if ( isset( $_GET['activate'] ) ) {
288
+ unset( $_GET['activate'] );
289
+ }
290
+ }
291
+
292
+
293
+ /**
294
+ * Adds an admin notice to be displayed.
295
+ *
296
+ * @since 1.0.0
297
+ */
298
+ public function add_admin_notice( $slug, $class, $message ) {
299
+
300
+ $this->notices[ $slug ] = array(
301
+ 'class' => $class,
302
+ 'message' => $message
303
+ );
304
+ }
305
+
306
+
307
+ /**
308
+ * Displays any admin notices added with \SV_WC_Framework_Test_Plugin_Loader::add_admin_notice()
309
+ *
310
+ * @since 1.0.0
311
+ */
312
+ public function admin_notices() {
313
+
314
+ foreach ( (array) $this->notices as $notice_key => $notice ) {
315
+
316
+ echo "<div class='" . esc_attr( $notice['class'] ) . "'><p>";
317
+ echo wp_kses( $notice['message'], array( 'a' => array( 'href' => array() ) ) );
318
+ echo "</p></div>";
319
+ }
320
+ }
321
+
322
+
323
+ /**
324
+ * Determines if the server environment is compatible with this plugin.
325
+ *
326
+ * Override this method to add checks for more than just the PHP version.
327
+ *
328
+ * @since 1.0.0
329
+ *
330
+ * @return bool
331
+ */
332
+ protected function is_environment_compatible() {
333
+
334
+ return version_compare( PHP_VERSION, self::MINIMUM_PHP_VERSION, '>=' );
335
+ }
336
+
337
+
338
+ /**
339
+ * Gets the message for display when the environment is incompatible with this plugin.
340
+ *
341
+ * @since 1.0.0
342
+ *
343
+ * @return string
344
+ */
345
+ protected function get_environment_message() {
346
+
347
+ $message = sprintf( 'The minimum PHP version required for this plugin is %1$s. You are running %2$s.', self::MINIMUM_PHP_VERSION, PHP_VERSION );
348
+
349
+ return $message;
350
+ }
351
+
352
+
353
+ /**
354
+ * Gets the main \SV_WC_Framework_Gateway_Test_Plugin_Loader instance.
355
+ *
356
+ * Ensures only one instance can be loaded.
357
+ *
358
+ * @since 1.0.0
359
+ *
360
+ * @return \SV_WC_Framework_Gateway_Test_Plugin_Loader
361
+ */
362
+ public static function instance() {
363
+
364
+ if ( null === self::$instance ) {
365
+ self::$instance = new self();
366
+ }
367
+
368
+ return self::$instance;
369
+ }
370
+
371
+
372
+ }
373
+
374
+ // fire it up!
375
+ SV_WC_Framework_Gateway_Test_Plugin_Loader::instance();
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/API.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\GatewayTestPlugin;
4
+
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
6
+
7
+ defined( 'ABSPATH' ) or exit;
8
+
9
+ class API implements Framework\SV_WC_Payment_Gateway_API {
10
+
11
+ public function credit_card_authorization( \WC_Order $order ) { }
12
+
13
+ public function credit_card_charge( \WC_Order $order ) { }
14
+
15
+ public function credit_card_capture( \WC_Order $order ) { }
16
+
17
+ public function check_debit( \WC_Order $order ) { }
18
+
19
+ public function refund( \WC_Order $order ) { }
20
+
21
+ public function void( \WC_Order $order ) { }
22
+
23
+ public function tokenize_payment_method( \WC_Order $order ) { }
24
+
25
+ public function update_tokenized_payment_method( \WC_Order $order ) { }
26
+
27
+ public function supports_update_tokenized_payment_method() { }
28
+
29
+ public function remove_tokenized_payment_method( $token, $customer_id ) { }
30
+
31
+ public function supports_remove_tokenized_payment_method() {
32
+
33
+ return false;
34
+ }
35
+
36
+ public function get_tokenized_payment_methods( $customer_id ) { }
37
+
38
+ public function supports_get_tokenized_payment_methods() { }
39
+
40
+ public function get_request() { }
41
+
42
+ public function get_response() { }
43
+
44
+ public function get_order() { }
45
+ }
46
+
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/Functions.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) or exit;
4
+
5
+ /**
6
+ * Gets the main plugin instance.
7
+ *
8
+ * @since 1.0.0
9
+ *
10
+ * @return \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin
11
+ */
12
+ function sv_wc_gateway_test_plugin() {
13
+
14
+ return \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin::instance();
15
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/Gateway.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SkyVerge\WooCommerce\GatewayTestPlugin;
4
+
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
6
+
7
+ defined( 'ABSPATH' ) or exit;
8
+
9
+ class Gateway extends Framework\SV_WC_Payment_Gateway {
10
+
11
+ public function __construct() {
12
+
13
+ parent::__construct(
14
+ 'test_gateway',
15
+ sv_wc_gateway_test_plugin(),
16
+ [
17
+ 'method_title' => __( 'Test Gateway', 'sv-wc-gateway-test-plugin' ),
18
+ 'supports' => [
19
+ self::FEATURE_PAYMENT_FORM,
20
+ self::FEATURE_APPLE_PAY,
21
+ ],
22
+ ]
23
+ );
24
+ }
25
+
26
+
27
+ protected function get_method_form_fields() {
28
+
29
+ return [];
30
+ }
31
+
32
+
33
+ public function get_api() {
34
+
35
+ return new API();
36
+ }
37
+
38
+
39
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/includes/Plugin.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace SkyVerge\WooCommerce\GatewayTestPlugin;
3
+
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
5
+
6
+ defined( 'ABSPATH' ) or exit;
7
+
8
+ class Plugin extends Framework\SV_WC_Payment_Gateway_Plugin {
9
+
10
+
11
+ /** @var Plugin single instance of this plugin */
12
+ protected static $instance;
13
+
14
+ /** string version number */
15
+ const VERSION = '1.0.0';
16
+
17
+ /** string the plugin ID */
18
+ const PLUGIN_ID = 'gateway_test_plugin';
19
+
20
+
21
+ /**
22
+ * Constructs the class.
23
+ *
24
+ * @since 1.0.0
25
+ */
26
+ public function __construct() {
27
+
28
+ parent::__construct(
29
+ self::PLUGIN_ID,
30
+ self::VERSION,
31
+ [
32
+ 'text_domain' => 'sv-wc-gateway-test-plugin',
33
+ 'gateways' => [
34
+ 'test_gateway' => '\SkyVerge\WooCommerce\GatewayTestPlugin\Gateway',
35
+ ]
36
+ ]
37
+ );
38
+
39
+ add_filter( 'wc_payment_gateway_gateway_test_plugin_activate_apple_pay', '__return_true' );
40
+
41
+ // make this plugin's gateway the one set up for Apple Pay
42
+ add_filter( 'pre_option_sv_wc_apple_pay_payment_gateway', function () {
43
+
44
+ return $this->get_gateway()->get_id();
45
+ } );
46
+ }
47
+
48
+
49
+ public function get_documentation_url() {
50
+
51
+ return 'https://example.com';
52
+ }
53
+
54
+
55
+ public function get_settings_url( $plugin_id = null ) {
56
+
57
+ return admin_url( 'admin.php?page=wc-settings' );
58
+ }
59
+
60
+
61
+ public function get_plugin_name() {
62
+
63
+ return 'Framework Gateway Test Plugin';
64
+ }
65
+
66
+
67
+ protected function get_file() {
68
+
69
+ return __DIR__;
70
+ }
71
+
72
+
73
+ /** Helper methods ******************************************************/
74
+
75
+
76
+ /**
77
+ * Gets the main plugin instance.
78
+ *
79
+ * Ensures only one instance is/can be loaded.
80
+ *
81
+ * @see sv_wc_gateway_test_plugin()
82
+ *
83
+ * @since 1.0.0
84
+ *
85
+ * @return Plugin
86
+ */
87
+ public static function instance() {
88
+
89
+ if ( null === self::$instance ) {
90
+ self::$instance = new self();
91
+ }
92
+
93
+ return self::$instance;
94
+ }
95
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer' . '/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInit2b60470ec0a0de26f215153bc861554d::getLoader();
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ * $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ * // register classes with namespaces
21
+ * $loader->add('Symfony\Component', __DIR__.'/component');
22
+ * $loader->add('Symfony', __DIR__.'/framework');
23
+ *
24
+ * // activate the autoloader
25
+ * $loader->register();
26
+ *
27
+ * // to enable searching the include path (eg. for PEAR packages)
28
+ * $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see http://www.php-fig.org/psr/psr-0/
41
+ * @see http://www.php-fig.org/psr/psr-4/
42
+ */
43
+ class ClassLoader
44
+ {
45
+ // PSR-4
46
+ private $prefixLengthsPsr4 = array();
47
+ private $prefixDirsPsr4 = array();
48
+ private $fallbackDirsPsr4 = array();
49
+
50
+ // PSR-0
51
+ private $prefixesPsr0 = array();
52
+ private $fallbackDirsPsr0 = array();
53
+
54
+ private $useIncludePath = false;
55
+ private $classMap = array();
56
+ private $classMapAuthoritative = false;
57
+ private $missingClasses = array();
58
+
59
+ public function getPrefixes()
60
+ {
61
+ if (!empty($this->prefixesPsr0)) {
62
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
63
+ }
64
+
65
+ return array();
66
+ }
67
+
68
+ public function getPrefixesPsr4()
69
+ {
70
+ return $this->prefixDirsPsr4;
71
+ }
72
+
73
+ public function getFallbackDirs()
74
+ {
75
+ return $this->fallbackDirsPsr0;
76
+ }
77
+
78
+ public function getFallbackDirsPsr4()
79
+ {
80
+ return $this->fallbackDirsPsr4;
81
+ }
82
+
83
+ public function getClassMap()
84
+ {
85
+ return $this->classMap;
86
+ }
87
+
88
+ /**
89
+ * @param array $classMap Class to filename map
90
+ */
91
+ public function addClassMap(array $classMap)
92
+ {
93
+ if ($this->classMap) {
94
+ $this->classMap = array_merge($this->classMap, $classMap);
95
+ } else {
96
+ $this->classMap = $classMap;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Registers a set of PSR-0 directories for a given prefix, either
102
+ * appending or prepending to the ones previously set for this prefix.
103
+ *
104
+ * @param string $prefix The prefix
105
+ * @param array|string $paths The PSR-0 root directories
106
+ * @param bool $prepend Whether to prepend the directories
107
+ */
108
+ public function add($prefix, $paths, $prepend = false)
109
+ {
110
+ if (!$prefix) {
111
+ if ($prepend) {
112
+ $this->fallbackDirsPsr0 = array_merge(
113
+ (array) $paths,
114
+ $this->fallbackDirsPsr0
115
+ );
116
+ } else {
117
+ $this->fallbackDirsPsr0 = array_merge(
118
+ $this->fallbackDirsPsr0,
119
+ (array) $paths
120
+ );
121
+ }
122
+
123
+ return;
124
+ }
125
+
126
+ $first = $prefix[0];
127
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
128
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
129
+
130
+ return;
131
+ }
132
+ if ($prepend) {
133
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
134
+ (array) $paths,
135
+ $this->prefixesPsr0[$first][$prefix]
136
+ );
137
+ } else {
138
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
139
+ $this->prefixesPsr0[$first][$prefix],
140
+ (array) $paths
141
+ );
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Registers a set of PSR-4 directories for a given namespace, either
147
+ * appending or prepending to the ones previously set for this namespace.
148
+ *
149
+ * @param string $prefix The prefix/namespace, with trailing '\\'
150
+ * @param array|string $paths The PSR-4 base directories
151
+ * @param bool $prepend Whether to prepend the directories
152
+ *
153
+ * @throws \InvalidArgumentException
154
+ */
155
+ public function addPsr4($prefix, $paths, $prepend = false)
156
+ {
157
+ if (!$prefix) {
158
+ // Register directories for the root namespace.
159
+ if ($prepend) {
160
+ $this->fallbackDirsPsr4 = array_merge(
161
+ (array) $paths,
162
+ $this->fallbackDirsPsr4
163
+ );
164
+ } else {
165
+ $this->fallbackDirsPsr4 = array_merge(
166
+ $this->fallbackDirsPsr4,
167
+ (array) $paths
168
+ );
169
+ }
170
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
171
+ // Register directories for a new namespace.
172
+ $length = strlen($prefix);
173
+ if ('\\' !== $prefix[$length - 1]) {
174
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
175
+ }
176
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
177
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
178
+ } elseif ($prepend) {
179
+ // Prepend directories for an already registered namespace.
180
+ $this->prefixDirsPsr4[$prefix] = array_merge(
181
+ (array) $paths,
182
+ $this->prefixDirsPsr4[$prefix]
183
+ );
184
+ } else {
185
+ // Append directories for an already registered namespace.
186
+ $this->prefixDirsPsr4[$prefix] = array_merge(
187
+ $this->prefixDirsPsr4[$prefix],
188
+ (array) $paths
189
+ );
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Registers a set of PSR-0 directories for a given prefix,
195
+ * replacing any others previously set for this prefix.
196
+ *
197
+ * @param string $prefix The prefix
198
+ * @param array|string $paths The PSR-0 base directories
199
+ */
200
+ public function set($prefix, $paths)
201
+ {
202
+ if (!$prefix) {
203
+ $this->fallbackDirsPsr0 = (array) $paths;
204
+ } else {
205
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Registers a set of PSR-4 directories for a given namespace,
211
+ * replacing any others previously set for this namespace.
212
+ *
213
+ * @param string $prefix The prefix/namespace, with trailing '\\'
214
+ * @param array|string $paths The PSR-4 base directories
215
+ *
216
+ * @throws \InvalidArgumentException
217
+ */
218
+ public function setPsr4($prefix, $paths)
219
+ {
220
+ if (!$prefix) {
221
+ $this->fallbackDirsPsr4 = (array) $paths;
222
+ } else {
223
+ $length = strlen($prefix);
224
+ if ('\\' !== $prefix[$length - 1]) {
225
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
226
+ }
227
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
228
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Turns on searching the include path for class files.
234
+ *
235
+ * @param bool $useIncludePath
236
+ */
237
+ public function setUseIncludePath($useIncludePath)
238
+ {
239
+ $this->useIncludePath = $useIncludePath;
240
+ }
241
+
242
+ /**
243
+ * Can be used to check if the autoloader uses the include path to check
244
+ * for classes.
245
+ *
246
+ * @return bool
247
+ */
248
+ public function getUseIncludePath()
249
+ {
250
+ return $this->useIncludePath;
251
+ }
252
+
253
+ /**
254
+ * Turns off searching the prefix and fallback directories for classes
255
+ * that have not been registered with the class map.
256
+ *
257
+ * @param bool $classMapAuthoritative
258
+ */
259
+ public function setClassMapAuthoritative($classMapAuthoritative)
260
+ {
261
+ $this->classMapAuthoritative = $classMapAuthoritative;
262
+ }
263
+
264
+ /**
265
+ * Should class lookup fail if not found in the current class map?
266
+ *
267
+ * @return bool
268
+ */
269
+ public function isClassMapAuthoritative()
270
+ {
271
+ return $this->classMapAuthoritative;
272
+ }
273
+
274
+ /**
275
+ * Registers this instance as an autoloader.
276
+ *
277
+ * @param bool $prepend Whether to prepend the autoloader or not
278
+ */
279
+ public function register($prepend = false)
280
+ {
281
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
282
+ }
283
+
284
+ /**
285
+ * Unregisters this instance as an autoloader.
286
+ */
287
+ public function unregister()
288
+ {
289
+ spl_autoload_unregister(array($this, 'loadClass'));
290
+ }
291
+
292
+ /**
293
+ * Loads the given class or interface.
294
+ *
295
+ * @param string $class The name of the class
296
+ * @return bool|null True if loaded, null otherwise
297
+ */
298
+ public function loadClass($class)
299
+ {
300
+ if ($file = $this->findFile($class)) {
301
+ includeFile($file);
302
+
303
+ return true;
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Finds the path to the file where the class is defined.
309
+ *
310
+ * @param string $class The name of the class
311
+ *
312
+ * @return string|false The path if found, false otherwise
313
+ */
314
+ public function findFile($class)
315
+ {
316
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
+ if ('\\' == $class[0]) {
318
+ $class = substr($class, 1);
319
+ }
320
+
321
+ // class map lookup
322
+ if (isset($this->classMap[$class])) {
323
+ return $this->classMap[$class];
324
+ }
325
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
326
+ return false;
327
+ }
328
+
329
+ $file = $this->findFileWithExtension($class, '.php');
330
+
331
+ // Search for Hack files if we are running on HHVM
332
+ if (false === $file && defined('HHVM_VERSION')) {
333
+ $file = $this->findFileWithExtension($class, '.hh');
334
+ }
335
+
336
+ if (false === $file) {
337
+ // Remember that this class does not exist.
338
+ $this->missingClasses[$class] = true;
339
+ }
340
+
341
+ return $file;
342
+ }
343
+
344
+ private function findFileWithExtension($class, $ext)
345
+ {
346
+ // PSR-4 lookup
347
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
348
+
349
+ $first = $class[0];
350
+ if (isset($this->prefixLengthsPsr4[$first])) {
351
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
+ if (0 === strpos($class, $prefix)) {
353
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
+ return $file;
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+
362
+ // PSR-4 fallback dirs
363
+ foreach ($this->fallbackDirsPsr4 as $dir) {
364
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
+ return $file;
366
+ }
367
+ }
368
+
369
+ // PSR-0 lookup
370
+ if (false !== $pos = strrpos($class, '\\')) {
371
+ // namespaced class name
372
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
373
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
374
+ } else {
375
+ // PEAR-like class name
376
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
377
+ }
378
+
379
+ if (isset($this->prefixesPsr0[$first])) {
380
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
+ if (0 === strpos($class, $prefix)) {
382
+ foreach ($dirs as $dir) {
383
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
+ return $file;
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+
391
+ // PSR-0 fallback dirs
392
+ foreach ($this->fallbackDirsPsr0 as $dir) {
393
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
+ return $file;
395
+ }
396
+ }
397
+
398
+ // PSR-0 include paths.
399
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
+ return $file;
401
+ }
402
+
403
+ return false;
404
+ }
405
+ }
406
+
407
+ /**
408
+ * Scope isolated include.
409
+ *
410
+ * Prevents access to $this/self from included files.
411
+ */
412
+ function includeFile($file)
413
+ {
414
+ include $file;
415
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Copyright (c) 2016 Nils Adermann, Jordi Boggiano
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished
9
+ to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_psr4.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_psr4.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInit2b60470ec0a0de26f215153bc861554d
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInit2b60470ec0a0de26f215153bc861554d', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit2b60470ec0a0de26f215153bc861554d', 'loadClassLoader'));
25
+
26
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
+ if ($useStaticLoader) {
28
+ require_once __DIR__ . '/autoload_static.php';
29
+
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit2b60470ec0a0de26f215153bc861554d::getInitializer($loader));
31
+ } else {
32
+ $map = require __DIR__ . '/autoload_namespaces.php';
33
+ foreach ($map as $namespace => $path) {
34
+ $loader->set($namespace, $path);
35
+ }
36
+
37
+ $map = require __DIR__ . '/autoload_psr4.php';
38
+ foreach ($map as $namespace => $path) {
39
+ $loader->setPsr4($namespace, $path);
40
+ }
41
+
42
+ $classMap = require __DIR__ . '/autoload_classmap.php';
43
+ if ($classMap) {
44
+ $loader->addClassMap($classMap);
45
+ }
46
+ }
47
+
48
+ $loader->register(true);
49
+
50
+ return $loader;
51
+ }
52
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/autoload_static.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_static.php @generated by Composer
4
+
5
+ namespace Composer\Autoload;
6
+
7
+ class ComposerStaticInit2b60470ec0a0de26f215153bc861554d
8
+ {
9
+ public static function getInitializer(ClassLoader $loader)
10
+ {
11
+ return \Closure::bind(function () use ($loader) {
12
+
13
+ }, null, ClassLoader::class);
14
+ }
15
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/composer/installed.json ADDED
@@ -0,0 +1 @@
 
1
+ []
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/gateway-test-plugin/vendor/skyverge/wc-plugin-framework/.gitkeep ADDED
File without changes
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/API.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace SkyVerge\WooCommerce\TestPlugin;
3
+
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
5
+
6
+ defined( 'ABSPATH' ) or exit;
7
+
8
+ class API extends Framework\SV_WC_API_Base implements Framework\SV_WC_Payment_Gateway_API {
9
+
10
+
11
+ protected function get_new_request( $args = array() ) {
12
+ // TODO: Implement get_new_request() method.
13
+ }
14
+
15
+
16
+ public function credit_card_authorization( \WC_Order $order ) {
17
+ // TODO: Implement credit_card_authorization() method.
18
+ }
19
+
20
+
21
+ public function credit_card_charge( \WC_Order $order ) {
22
+ // TODO: Implement credit_card_charge() method.
23
+ }
24
+
25
+
26
+ public function credit_card_capture( \WC_Order $order ) {
27
+ // TODO: Implement credit_card_capture() method.
28
+ }
29
+
30
+
31
+ public function check_debit( \WC_Order $order ) {
32
+ // TODO: Implement check_debit() method.
33
+ }
34
+
35
+
36
+ public function refund( \WC_Order $order ) {
37
+ // TODO: Implement refund() method.
38
+ }
39
+
40
+
41
+ public function void( \WC_Order $order ) {
42
+ // TODO: Implement void() method.
43
+ }
44
+
45
+
46
+ public function tokenize_payment_method( \WC_Order $order ) {
47
+ // TODO: Implement tokenize_payment_method() method.
48
+ }
49
+
50
+
51
+ public function update_tokenized_payment_method( \WC_Order $order ) {
52
+ // TODO: Implement update_tokenized_payment_method() method.
53
+ }
54
+
55
+
56
+ public function supports_update_tokenized_payment_method() {
57
+
58
+ return false;
59
+ }
60
+
61
+
62
+ public function remove_tokenized_payment_method( $token, $customer_id ) {
63
+ // TODO: Implement remove_tokenized_payment_method() method.
64
+ }
65
+
66
+
67
+ public function supports_remove_tokenized_payment_method() {
68
+
69
+ return false;
70
+ }
71
+
72
+
73
+ public function get_tokenized_payment_methods( $customer_id ) {
74
+ // TODO: Implement get_tokenized_payment_methods() method.
75
+ }
76
+
77
+
78
+ public function supports_get_tokenized_payment_methods() {
79
+
80
+ return false;
81
+ }
82
+
83
+
84
+ public function get_order(){
85
+ // TODO: Implement get_order() method.
86
+ }
87
+
88
+
89
+ /**
90
+ * @return Plugin
91
+ */
92
+ protected function get_plugin() {
93
+
94
+ return sv_wc_test_plugin();
95
+ }
96
+
97
+
98
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/Functions.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) or exit;
4
+
5
+ /**
6
+ * Gets the main plugin instance.
7
+ *
8
+ * @since 1.0.0
9
+ *
10
+ * @return \SkyVerge\WooCommerce\TestPlugin\Plugin
11
+ */
12
+ function sv_wc_test_plugin() {
13
+
14
+ return \SkyVerge\WooCommerce\TestPlugin\Plugin::instance();
15
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/Gateway.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace SkyVerge\WooCommerce\TestPlugin;
3
+
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
5
+
6
+ defined( 'ABSPATH' ) or exit;
7
+
8
+ class Gateway extends Framework\SV_WC_Payment_Gateway {
9
+
10
+
11
+ public function __construct() {
12
+
13
+ parent::__construct( Plugin::GATEWAY_ID, sv_wc_test_plugin(), [
14
+ 'supports' => [
15
+ self::FEATURE_PRODUCTS,
16
+ self::FEATURE_CUSTOMER_ID,
17
+ self::FEATURE_TOKENIZATION,
18
+ ],
19
+ ] );
20
+ }
21
+
22
+
23
+ /**
24
+ * @return array
25
+ */
26
+ protected function get_method_form_fields() {
27
+
28
+ return [];
29
+ }
30
+
31
+
32
+ /**
33
+ * @return API
34
+ */
35
+ public function get_api() {
36
+
37
+ return new API();
38
+ }
39
+
40
+
41
+ /**
42
+ * @return string
43
+ */
44
+ public function get_environment() {
45
+
46
+ return self::ENVIRONMENT_PRODUCTION;
47
+ }
48
+
49
+
50
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/includes/Plugin.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace SkyVerge\WooCommerce\TestPlugin;
3
+
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
5
+
6
+ defined( 'ABSPATH' ) or exit;
7
+
8
+ class Plugin extends Framework\SV_WC_Payment_Gateway_Plugin {
9
+
10
+
11
+ /** @var Plugin single instance of this plugin */
12
+ protected static $instance;
13
+
14
+ /** string version number */
15
+ const VERSION = '1.0.0';
16
+
17
+ /** string the plugin ID */
18
+ const PLUGIN_ID = 'test_plugin';
19
+
20
+ const GATEWAY_ID = 'test_gateway';
21
+
22
+ const GATEWAY_CLASS = Gateway::class;
23
+
24
+
25
+ /**
26
+ * Constructs the class.
27
+ *
28
+ * @since 1.0.0
29
+ */
30
+ public function __construct() {
31
+
32
+ parent::__construct(
33
+ self::PLUGIN_ID,
34
+ self::VERSION,
35
+ [
36
+ 'text_domain' => 'sv-wc-test-plugin',
37
+ 'gateways' => [
38
+ self::GATEWAY_ID => self::GATEWAY_CLASS,
39
+ ],
40
+ 'supports' => [
41
+ self::FEATURE_CUSTOMER_ID,
42
+ ],
43
+ ]
44
+ );
45
+ }
46
+
47
+
48
+ public function get_documentation_url() {
49
+
50
+ return 'https://example.com';
51
+ }
52
+
53
+
54
+ public function get_settings_url( $plugin_id = null ) {
55
+
56
+ return admin_url( 'admin.php?page=wc-settings' );
57
+ }
58
+
59
+
60
+ public function get_plugin_name() {
61
+
62
+ return 'Plugin Framework Test';
63
+ }
64
+
65
+
66
+ protected function get_file() {
67
+
68
+ return __DIR__;
69
+ }
70
+
71
+
72
+ /** Helper methods ******************************************************/
73
+
74
+
75
+ /**
76
+ * Gets the main plugin instance.
77
+ *
78
+ * Ensures only one instance is/can be loaded.
79
+ *
80
+ * @see sv_wc_test_plugin()
81
+ *
82
+ * @since 1.0.0
83
+ *
84
+ * @return Plugin
85
+ */
86
+ public static function instance() {
87
+
88
+ if ( null === self::$instance ) {
89
+ self::$instance = new self();
90
+ }
91
+
92
+ return self::$instance;
93
+ }
94
+
95
+
96
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/test-plugin.php ADDED
@@ -0,0 +1,375 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: Test Plugin
4
+ * Plugin URI: http://www.woocommerce.com/products/
5
+ * Description: Tests plugin
6
+ * Author: SkyVerge
7
+ * Author URI: https://skyverge.com
8
+ * Version: 1.0.0
9
+ * Text Domain: test-plugin
10
+ * Domain Path: /i18n/languages/
11
+ *
12
+ * Copyright: (c) 2011-2019, SkyVerge, Inc. (info@skyverge.com)
13
+ *
14
+ * License: GNU General Public License v3.0
15
+ * License URI: http://www.gnu.org/licenses/gpl-3.0.html
16
+ *
17
+ * @author SkyVerge
18
+ * @copyright Copyright (c) 2011-2019, SkyVerge, Inc.
19
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0
20
+ */
21
+
22
+ defined( 'ABSPATH' ) or exit;
23
+
24
+ /**
25
+ * The plugin loader class.
26
+ *
27
+ * @since 1.0.0
28
+ */
29
+ class SV_WC_Framework_Test_Plugin_Loader {
30
+
31
+
32
+ /** minimum PHP version required by this plugin */
33
+ const MINIMUM_PHP_VERSION = '5.6.0';
34
+
35
+ /** minimum WordPress version required by this plugin */
36
+ const MINIMUM_WP_VERSION = '4.4';
37
+
38
+ /** minimum WooCommerce version required by this plugin */
39
+ const MINIMUM_WC_VERSION = '3.0.9';
40
+
41
+ /** SkyVerge plugin framework version used by this plugin */
42
+ const FRAMEWORK_VERSION = '5.4.2';
43
+
44
+ /** the plugin name, for displaying notices */
45
+ const PLUGIN_NAME = 'WooCommerce Framework Test Plugin';
46
+
47
+
48
+ /** @var SV_WC_Framework_Test_Plugin_Loader single instance of this class */
49
+ protected static $instance;
50
+
51
+ /** @var array the admin notices to add */
52
+ protected $notices = array();
53
+
54
+
55
+ /**
56
+ * Constructs the class.
57
+ *
58
+ * @since 1.0.0
59
+ */
60
+ protected function __construct() {
61
+
62
+ register_activation_hook( __FILE__, array( $this, 'activation_check' ) );
63
+
64
+ add_action( 'admin_init', array( $this, 'check_environment' ) );
65
+ add_action( 'admin_init', array( $this, 'add_plugin_notices' ) );
66
+
67
+ add_action( 'admin_notices', array( $this, 'admin_notices' ), 15 );
68
+
69
+ add_filter( 'woocommerce_prevent_automatic_wizard_redirect', '__return_true' );
70
+
71
+ // if the environment check fails, initialize the plugin
72
+ if ( $this->is_environment_compatible() ) {
73
+ add_action( 'plugins_loaded', array( $this, 'init_plugin' ) );
74
+ }
75
+ }
76
+
77
+
78
+ /**
79
+ * Cloning instances is forbidden due to singleton pattern.
80
+ *
81
+ * @since 1.0.0
82
+ */
83
+ public function __clone() {
84
+ _doing_it_wrong( __FUNCTION__, sprintf( 'You cannot clone instances of %s.', get_class( $this ) ), '1.0.0' );
85
+ }
86
+
87
+
88
+ /**
89
+ * Unserializing instances is forbidden due to singleton pattern.
90
+ *
91
+ * @since 1.0.0
92
+ */
93
+ public function __wakeup() {
94
+ _doing_it_wrong( __FUNCTION__, sprintf( 'You cannot unserialize instances of %s.', get_class( $this ) ), '1.0.0' );
95
+ }
96
+
97
+
98
+ /**
99
+ * Initializes the plugin.
100
+ *
101
+ * @since 1.0.0
102
+ */
103
+ public function init_plugin() {
104
+
105
+ if ( ! $this->plugins_compatible() ) {
106
+ return;
107
+ }
108
+
109
+ $this->load_framework();
110
+
111
+ // autoload plugin and vendor files
112
+ $loader = require_once( plugin_dir_path( __FILE__ ) . 'vendor/autoload.php' );
113
+
114
+ // register plugin namespace with autoloader
115
+ $loader->addPsr4( 'SkyVerge\\WooCommerce\\TestPlugin\\', __DIR__ . '/includes' );
116
+
117
+ require_once( plugin_dir_path( __FILE__ ) . 'includes/Functions.php' );
118
+
119
+ // fire it up!
120
+ sv_wc_test_plugin();
121
+ }
122
+
123
+
124
+ /**
125
+ * Loads the base framework classes.
126
+ *
127
+ * @since 1.0.0
128
+ */
129
+ protected function load_framework() {
130
+
131
+
132
+ if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\' . $this->get_framework_version_namespace() . '\\SV_WC_Plugin' ) ) {
133
+ require_once( __DIR__ . '/vendor/skyverge/wc-plugin-framework/woocommerce/class-sv-wc-plugin.php' );
134
+ }
135
+
136
+ if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\' . $this->get_framework_version_namespace() . '\\SV_WC_Payment_Gateway_Plugin' ) ) {
137
+ require_once( __DIR__ . '/vendor/skyverge/wc-plugin-framework/woocommerce/payment-gateway/class-sv-wc-payment-gateway-plugin.php' );
138
+ }
139
+ }
140
+
141
+
142
+ /**
143
+ * Gets the framework version in namespace form.
144
+ *
145
+ * @since 1.0.0
146
+ *
147
+ * @return string
148
+ */
149
+ protected function get_framework_version_namespace() {
150
+
151
+ return 'v' . str_replace( '.', '_', $this->get_framework_version() );
152
+ }
153
+
154
+
155
+ /**
156
+ * Gets the famework version used by this plugin.
157
+ *
158
+ * @since 1.0.0
159
+ *
160
+ * @return string
161
+ */
162
+ protected function get_framework_version() {
163
+
164
+ return self::FRAMEWORK_VERSION;
165
+ }
166
+
167
+
168
+ /**
169
+ * Checks the server environment and other factors and deactivates plugins as necessary.
170
+ *
171
+ * Based on http://wptavern.com/how-to-prevent-wordpress-plugins-from-activating-on-sites-with-incompatible-hosting-environments
172
+ *
173
+ * @since 1.0.0
174
+ */
175
+ public function activation_check() {
176
+
177
+ if ( ! $this->is_environment_compatible() ) {
178
+
179
+ $this->deactivate_plugin();
180
+
181
+ wp_die( self::PLUGIN_NAME . ' could not be activated. ' . $this->get_environment_message() );
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Checks the environment on loading WordPress, just in case the environment changes after activation.
187
+ *
188
+ * @since 1.0.0
189
+ */
190
+ public function check_environment() {
191
+
192
+ if ( ! $this->is_environment_compatible() && is_plugin_active( plugin_basename( __FILE__ ) ) ) {
193
+
194
+ $this->deactivate_plugin();
195
+
196
+ $this->add_admin_notice( 'bad_environment', 'error', self::PLUGIN_NAME . ' has been deactivated. ' . $this->get_environment_message() );
197
+ }
198
+ }
199
+
200
+
201
+ /**
202
+ * Adds notices for out-of-date WordPress and/or WooCommerce versions.
203
+ *
204
+ * @since 1.0.0
205
+ */
206
+ public function add_plugin_notices() {
207
+
208
+ if ( ! $this->is_wp_compatible() ) {
209
+
210
+ $this->add_admin_notice( 'update_wordpress', 'error', sprintf(
211
+ '%s requires WordPress version %s or higher. Please %supdate WordPress &raquo;%s',
212
+ '<strong>' . self::PLUGIN_NAME . '</strong>',
213
+ self::MINIMUM_WP_VERSION,
214
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">', '</a>'
215
+ ) );
216
+ }
217
+
218
+ if ( ! $this->is_wc_compatible() ) {
219
+
220
+ $this->add_admin_notice( 'update_woocommerce', 'error', sprintf(
221
+ '%1$s requires WooCommerce version %2$s or higher. Please %3$supdate WooCommerce%4$s to the latest version, or %5$sdownload the minimum required version &raquo;%6$s',
222
+ '<strong>' . self::PLUGIN_NAME . '</strong>',
223
+ self::MINIMUM_WC_VERSION,
224
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">', '</a>',
225
+ '<a href="' . esc_url( 'https://downloads.wordpress.org/plugin/woocommerce.' . self::MINIMUM_WC_VERSION . '.zip' ) . '">', '</a>'
226
+ ) );
227
+ }
228
+ }
229
+
230
+
231
+ /**
232
+ * Determines if the required plugins are compatible.
233
+ *
234
+ * @since 1.0.0
235
+ *
236
+ * @return bool
237
+ */
238
+ protected function plugins_compatible() {
239
+
240
+ return $this->is_wp_compatible() && $this->is_wc_compatible();
241
+ }
242
+
243
+
244
+ /**
245
+ * Determines if the WordPress compatible.
246
+ *
247
+ * @since 1.0.0
248
+ *
249
+ * @return bool
250
+ */
251
+ protected function is_wp_compatible() {
252
+
253
+ if ( ! self::MINIMUM_WP_VERSION ) {
254
+ return true;
255
+ }
256
+
257
+ return version_compare( get_bloginfo( 'version' ), self::MINIMUM_WP_VERSION, '>=' );
258
+ }
259
+
260
+
261
+ /**
262
+ * Determines if the WooCommerce compatible.
263
+ *
264
+ * @since 1.0.0
265
+ *
266
+ * @return bool
267
+ */
268
+ protected function is_wc_compatible() {
269
+
270
+ if ( ! self::MINIMUM_WC_VERSION ) {
271
+ return true;
272
+ }
273
+
274
+ return defined( 'WC_VERSION' ) && version_compare( WC_VERSION, self::MINIMUM_WC_VERSION, '>=' );
275
+ }
276
+
277
+
278
+ /**
279
+ * Deactivates the plugin.
280
+ *
281
+ * @since 1.0.0
282
+ */
283
+ protected function deactivate_plugin() {
284
+
285
+ deactivate_plugins( plugin_basename( __FILE__ ) );
286
+
287
+ if ( isset( $_GET['activate'] ) ) {
288
+ unset( $_GET['activate'] );
289
+ }
290
+ }
291
+
292
+
293
+ /**
294
+ * Adds an admin notice to be displayed.
295
+ *
296
+ * @since 1.0.0
297
+ */
298
+ public function add_admin_notice( $slug, $class, $message ) {
299
+
300
+ $this->notices[ $slug ] = array(
301
+ 'class' => $class,
302
+ 'message' => $message
303
+ );
304
+ }
305
+
306
+
307
+ /**
308
+ * Displays any admin notices added with \SV_WC_Framework_Test_Plugin_Loader::add_admin_notice()
309
+ *
310
+ * @since 1.0.0
311
+ */
312
+ public function admin_notices() {
313
+
314
+ foreach ( (array) $this->notices as $notice_key => $notice ) {
315
+
316
+ echo "<div class='" . esc_attr( $notice['class'] ) . "'><p>";
317
+ echo wp_kses( $notice['message'], array( 'a' => array( 'href' => array() ) ) );
318
+ echo "</p></div>";
319
+ }
320
+ }
321
+
322
+
323
+ /**
324
+ * Determines if the server environment is compatible with this plugin.
325
+ *
326
+ * Override this method to add checks for more than just the PHP version.
327
+ *
328
+ * @since 1.0.0
329
+ *
330
+ * @return bool
331
+ */
332
+ protected function is_environment_compatible() {
333
+
334
+ return version_compare( PHP_VERSION, self::MINIMUM_PHP_VERSION, '>=' );
335
+ }
336
+
337
+
338
+ /**
339
+ * Gets the message for display when the environment is incompatible with this plugin.
340
+ *
341
+ * @since 1.0.0
342
+ *
343
+ * @return string
344
+ */
345
+ protected function get_environment_message() {
346
+
347
+ $message = sprintf( 'The minimum PHP version required for this plugin is %1$s. You are running %2$s.', self::MINIMUM_PHP_VERSION, PHP_VERSION );
348
+
349
+ return $message;
350
+ }
351
+
352
+
353
+ /**
354
+ * Gets the main \SV_WC_Framework_Test_Plugin_Loader instance.
355
+ *
356
+ * Ensures only one instance can be loaded.
357
+ *
358
+ * @since 1.0.0
359
+ *
360
+ * @return \SV_WC_Framework_Test_Plugin_Loader
361
+ */
362
+ public static function instance() {
363
+
364
+ if ( null === self::$instance ) {
365
+ self::$instance = new self();
366
+ }
367
+
368
+ return self::$instance;
369
+ }
370
+
371
+
372
+ }
373
+
374
+ // fire it up!
375
+ SV_WC_Framework_Test_Plugin_Loader::instance();
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer' . '/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInit8eb2f57b7b6a504b0956271195e1827e::getLoader();
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ * $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ * // register classes with namespaces
21
+ * $loader->add('Symfony\Component', __DIR__.'/component');
22
+ * $loader->add('Symfony', __DIR__.'/framework');
23
+ *
24
+ * // activate the autoloader
25
+ * $loader->register();
26
+ *
27
+ * // to enable searching the include path (eg. for PEAR packages)
28
+ * $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see http://www.php-fig.org/psr/psr-0/
41
+ * @see http://www.php-fig.org/psr/psr-4/
42
+ */
43
+ class ClassLoader
44
+ {
45
+ // PSR-4
46
+ private $prefixLengthsPsr4 = array();
47
+ private $prefixDirsPsr4 = array();
48
+ private $fallbackDirsPsr4 = array();
49
+
50
+ // PSR-0
51
+ private $prefixesPsr0 = array();
52
+ private $fallbackDirsPsr0 = array();
53
+
54
+ private $useIncludePath = false;
55
+ private $classMap = array();
56
+ private $classMapAuthoritative = false;
57
+ private $missingClasses = array();
58
+
59
+ public function getPrefixes()
60
+ {
61
+ if (!empty($this->prefixesPsr0)) {
62
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
63
+ }
64
+
65
+ return array();
66
+ }
67
+
68
+ public function getPrefixesPsr4()
69
+ {
70
+ return $this->prefixDirsPsr4;
71
+ }
72
+
73
+ public function getFallbackDirs()
74
+ {
75
+ return $this->fallbackDirsPsr0;
76
+ }
77
+
78
+ public function getFallbackDirsPsr4()
79
+ {
80
+ return $this->fallbackDirsPsr4;
81
+ }
82
+
83
+ public function getClassMap()
84
+ {
85
+ return $this->classMap;
86
+ }
87
+
88
+ /**
89
+ * @param array $classMap Class to filename map
90
+ */
91
+ public function addClassMap(array $classMap)
92
+ {
93
+ if ($this->classMap) {
94
+ $this->classMap = array_merge($this->classMap, $classMap);
95
+ } else {
96
+ $this->classMap = $classMap;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Registers a set of PSR-0 directories for a given prefix, either
102
+ * appending or prepending to the ones previously set for this prefix.
103
+ *
104
+ * @param string $prefix The prefix
105
+ * @param array|string $paths The PSR-0 root directories
106
+ * @param bool $prepend Whether to prepend the directories
107
+ */
108
+ public function add($prefix, $paths, $prepend = false)
109
+ {
110
+ if (!$prefix) {
111
+ if ($prepend) {
112
+ $this->fallbackDirsPsr0 = array_merge(
113
+ (array) $paths,
114
+ $this->fallbackDirsPsr0
115
+ );
116
+ } else {
117
+ $this->fallbackDirsPsr0 = array_merge(
118
+ $this->fallbackDirsPsr0,
119
+ (array) $paths
120
+ );
121
+ }
122
+
123
+ return;
124
+ }
125
+
126
+ $first = $prefix[0];
127
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
128
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
129
+
130
+ return;
131
+ }
132
+ if ($prepend) {
133
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
134
+ (array) $paths,
135
+ $this->prefixesPsr0[$first][$prefix]
136
+ );
137
+ } else {
138
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
139
+ $this->prefixesPsr0[$first][$prefix],
140
+ (array) $paths
141
+ );
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Registers a set of PSR-4 directories for a given namespace, either
147
+ * appending or prepending to the ones previously set for this namespace.
148
+ *
149
+ * @param string $prefix The prefix/namespace, with trailing '\\'
150
+ * @param array|string $paths The PSR-4 base directories
151
+ * @param bool $prepend Whether to prepend the directories
152
+ *
153
+ * @throws \InvalidArgumentException
154
+ */
155
+ public function addPsr4($prefix, $paths, $prepend = false)
156
+ {
157
+ if (!$prefix) {
158
+ // Register directories for the root namespace.
159
+ if ($prepend) {
160
+ $this->fallbackDirsPsr4 = array_merge(
161
+ (array) $paths,
162
+ $this->fallbackDirsPsr4
163
+ );
164
+ } else {
165
+ $this->fallbackDirsPsr4 = array_merge(
166
+ $this->fallbackDirsPsr4,
167
+ (array) $paths
168
+ );
169
+ }
170
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
171
+ // Register directories for a new namespace.
172
+ $length = strlen($prefix);
173
+ if ('\\' !== $prefix[$length - 1]) {
174
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
175
+ }
176
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
177
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
178
+ } elseif ($prepend) {
179
+ // Prepend directories for an already registered namespace.
180
+ $this->prefixDirsPsr4[$prefix] = array_merge(
181
+ (array) $paths,
182
+ $this->prefixDirsPsr4[$prefix]
183
+ );
184
+ } else {
185
+ // Append directories for an already registered namespace.
186
+ $this->prefixDirsPsr4[$prefix] = array_merge(
187
+ $this->prefixDirsPsr4[$prefix],
188
+ (array) $paths
189
+ );
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Registers a set of PSR-0 directories for a given prefix,
195
+ * replacing any others previously set for this prefix.
196
+ *
197
+ * @param string $prefix The prefix
198
+ * @param array|string $paths The PSR-0 base directories
199
+ */
200
+ public function set($prefix, $paths)
201
+ {
202
+ if (!$prefix) {
203
+ $this->fallbackDirsPsr0 = (array) $paths;
204
+ } else {
205
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Registers a set of PSR-4 directories for a given namespace,
211
+ * replacing any others previously set for this namespace.
212
+ *
213
+ * @param string $prefix The prefix/namespace, with trailing '\\'
214
+ * @param array|string $paths The PSR-4 base directories
215
+ *
216
+ * @throws \InvalidArgumentException
217
+ */
218
+ public function setPsr4($prefix, $paths)
219
+ {
220
+ if (!$prefix) {
221
+ $this->fallbackDirsPsr4 = (array) $paths;
222
+ } else {
223
+ $length = strlen($prefix);
224
+ if ('\\' !== $prefix[$length - 1]) {
225
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
226
+ }
227
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
228
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Turns on searching the include path for class files.
234
+ *
235
+ * @param bool $useIncludePath
236
+ */
237
+ public function setUseIncludePath($useIncludePath)
238
+ {
239
+ $this->useIncludePath = $useIncludePath;
240
+ }
241
+
242
+ /**
243
+ * Can be used to check if the autoloader uses the include path to check
244
+ * for classes.
245
+ *
246
+ * @return bool
247
+ */
248
+ public function getUseIncludePath()
249
+ {
250
+ return $this->useIncludePath;
251
+ }
252
+
253
+ /**
254
+ * Turns off searching the prefix and fallback directories for classes
255
+ * that have not been registered with the class map.
256
+ *
257
+ * @param bool $classMapAuthoritative
258
+ */
259
+ public function setClassMapAuthoritative($classMapAuthoritative)
260
+ {
261
+ $this->classMapAuthoritative = $classMapAuthoritative;
262
+ }
263
+
264
+ /**
265
+ * Should class lookup fail if not found in the current class map?
266
+ *
267
+ * @return bool
268
+ */
269
+ public function isClassMapAuthoritative()
270
+ {
271
+ return $this->classMapAuthoritative;
272
+ }
273
+
274
+ /**
275
+ * Registers this instance as an autoloader.
276
+ *
277
+ * @param bool $prepend Whether to prepend the autoloader or not
278
+ */
279
+ public function register($prepend = false)
280
+ {
281
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
282
+ }
283
+
284
+ /**
285
+ * Unregisters this instance as an autoloader.
286
+ */
287
+ public function unregister()
288
+ {
289
+ spl_autoload_unregister(array($this, 'loadClass'));
290
+ }
291
+
292
+ /**
293
+ * Loads the given class or interface.
294
+ *
295
+ * @param string $class The name of the class
296
+ * @return bool|null True if loaded, null otherwise
297
+ */
298
+ public function loadClass($class)
299
+ {
300
+ if ($file = $this->findFile($class)) {
301
+ includeFile($file);
302
+
303
+ return true;
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Finds the path to the file where the class is defined.
309
+ *
310
+ * @param string $class The name of the class
311
+ *
312
+ * @return string|false The path if found, false otherwise
313
+ */
314
+ public function findFile($class)
315
+ {
316
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
+ if ('\\' == $class[0]) {
318
+ $class = substr($class, 1);
319
+ }
320
+
321
+ // class map lookup
322
+ if (isset($this->classMap[$class])) {
323
+ return $this->classMap[$class];
324
+ }
325
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
326
+ return false;
327
+ }
328
+
329
+ $file = $this->findFileWithExtension($class, '.php');
330
+
331
+ // Search for Hack files if we are running on HHVM
332
+ if (false === $file && defined('HHVM_VERSION')) {
333
+ $file = $this->findFileWithExtension($class, '.hh');
334
+ }
335
+
336
+ if (false === $file) {
337
+ // Remember that this class does not exist.
338
+ $this->missingClasses[$class] = true;
339
+ }
340
+
341
+ return $file;
342
+ }
343
+
344
+ private function findFileWithExtension($class, $ext)
345
+ {
346
+ // PSR-4 lookup
347
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
348
+
349
+ $first = $class[0];
350
+ if (isset($this->prefixLengthsPsr4[$first])) {
351
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
+ if (0 === strpos($class, $prefix)) {
353
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
+ return $file;
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+
362
+ // PSR-4 fallback dirs
363
+ foreach ($this->fallbackDirsPsr4 as $dir) {
364
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
+ return $file;
366
+ }
367
+ }
368
+
369
+ // PSR-0 lookup
370
+ if (false !== $pos = strrpos($class, '\\')) {
371
+ // namespaced class name
372
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
373
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
374
+ } else {
375
+ // PEAR-like class name
376
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
377
+ }
378
+
379
+ if (isset($this->prefixesPsr0[$first])) {
380
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
+ if (0 === strpos($class, $prefix)) {
382
+ foreach ($dirs as $dir) {
383
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
+ return $file;
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+
391
+ // PSR-0 fallback dirs
392
+ foreach ($this->fallbackDirsPsr0 as $dir) {
393
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
+ return $file;
395
+ }
396
+ }
397
+
398
+ // PSR-0 include paths.
399
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
+ return $file;
401
+ }
402
+
403
+ return false;
404
+ }
405
+ }
406
+
407
+ /**
408
+ * Scope isolated include.
409
+ *
410
+ * Prevents access to $this/self from included files.
411
+ */
412
+ function includeFile($file)
413
+ {
414
+ include $file;
415
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Copyright (c) 2016 Nils Adermann, Jordi Boggiano
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished
9
+ to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_psr4.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_psr4.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInit8eb2f57b7b6a504b0956271195e1827e
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInit8eb2f57b7b6a504b0956271195e1827e', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit8eb2f57b7b6a504b0956271195e1827e', 'loadClassLoader'));
25
+
26
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
+ if ($useStaticLoader) {
28
+ require_once __DIR__ . '/autoload_static.php';
29
+
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit8eb2f57b7b6a504b0956271195e1827e::getInitializer($loader));
31
+ } else {
32
+ $map = require __DIR__ . '/autoload_namespaces.php';
33
+ foreach ($map as $namespace => $path) {
34
+ $loader->set($namespace, $path);
35
+ }
36
+
37
+ $map = require __DIR__ . '/autoload_psr4.php';
38
+ foreach ($map as $namespace => $path) {
39
+ $loader->setPsr4($namespace, $path);
40
+ }
41
+
42
+ $classMap = require __DIR__ . '/autoload_classmap.php';
43
+ if ($classMap) {
44
+ $loader->addClassMap($classMap);
45
+ }
46
+ }
47
+
48
+ $loader->register(true);
49
+
50
+ return $loader;
51
+ }
52
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/autoload_static.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_static.php @generated by Composer
4
+
5
+ namespace Composer\Autoload;
6
+
7
+ class ComposerStaticInit8eb2f57b7b6a504b0956271195e1827e
8
+ {
9
+ public static function getInitializer(ClassLoader $loader)
10
+ {
11
+ return \Closure::bind(function () use ($loader) {
12
+
13
+ }, null, ClassLoader::class);
14
+ }
15
+ }
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/composer/installed.json ADDED
@@ -0,0 +1 @@
 
1
+ []
vendor/skyverge/wc-plugin-framework/tests/_support/plugins/test-plugin/vendor/skyverge/wc-plugin-framework/.gitkeep ADDED
File without changes
vendor/skyverge/wc-plugin-framework/tests/acceptance.suite.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Codeception Test Suite Configuration
2
+ #
3
+ # Suite for acceptance tests.
4
+ # Perform tests in browser using the WPWebDriver or WPBrowser.
5
+ # Use WPDb to set up your initial database fixture.
6
+ # If you need both WPWebDriver and WPBrowser tests - create a separate suite.
7
+
8
+ actor: AcceptanceTester
9
+ modules:
10
+ enabled:
11
+ - WPDb
12
+ - WPBrowser
13
+ - \Helper\Acceptance
14
+ config:
15
+ WPDb:
16
+ dsn: 'mysql:host=%ACCEPTANCE_DB_HOST%;dbname=%ACCEPTANCE_DB_NAME%'
17
+ user: '%ACCEPTANCE_DB_USER%'
18
+ password: '%ACCEPTANCE_DB_PASSWORD%'
19
+ dump: 'tests/_data/dump.sql'
20
+ populate: true #import the dump before the tests
21
+ cleanup: true #import the dump between tests
22
+ waitlock: 0
23
+ url: '%WP_URL%'
24
+ urlReplacement: true #replace the hardcoded dump URL with the one above
25
+ tablePrefix: '%ACCEPTANCE_TABLE_PREFIX%'
26
+ WPBrowser:
27
+ url: '%WP_URL%'
28
+ adminUsername: '%ADMIN_USERNAME%'
29
+ adminPassword: '%ADMIN_PASSWORD%'
30
+ adminPath: '%WP_ADMIN_PATH%'
vendor/skyverge/wc-plugin-framework/tests/acceptance/PluginActionLinksCest.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class PluginActionLinksCest {
5
+
6
+ public function _before( AcceptanceTester $I ) {
7
+ $I->loginAsAdmin();
8
+ $I->amOnPluginsPage();
9
+ }
10
+
11
+ public function _after( AcceptanceTester $I ) {
12
+
13
+ }
14
+
15
+ public function try_docs_link( AcceptanceTester $I ) {
16
+
17
+ $I->wantTo( 'See the Docs action link' );
18
+ $I->see( 'Docs' );
19
+ }
20
+
21
+
22
+ public function try_configure_link( AcceptanceTester $I ) {
23
+
24
+ $I->wantTo( 'See the Configure action link' );
25
+ $I->see( 'Configure' );
26
+ }
27
+
28
+
29
+ public function try_configure_url( AcceptanceTester $I ) {
30
+
31
+ $I->wantTo( 'Click the Configure action link and go to the settings page' );
32
+ $I->click( 'Configure' );
33
+ $I->canSeeInCurrentUrl( 'wc-settings' );
34
+ }
35
+ }
vendor/skyverge/wc-plugin-framework/tests/functional.suite.yml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Codeception Test Suite Configuration
2
+ #
3
+ # Suite for functional tests
4
+ # Emulate web requests and make WordPress process them
5
+
6
+ actor: FunctionalTester
7
+ modules:
8
+ enabled:
9
+ - WPDb
10
+ - WPBrowser
11
+ # - WPFilesystem
12
+ - Asserts
13
+ - \Helper\Functional
14
+ config:
15
+ WPDb:
16
+ dsn: 'mysql:host=%DB_HOST%;dbname=%DB_NAME%'
17
+ user: '%DB_USER%'
18
+ password: '%DB_PASSWORD%'
19
+ dump: 'tests/_data/dump.sql'
20
+ populate: true
21
+ cleanup: true
22
+ waitlock: 0
23
+ url: '%WP_URL%'
24
+ urlReplacement: true
25
+ tablePrefix: '%TABLE_PREFIX%'
26
+ WPBrowser:
27
+ url: '%WP_URL%'
28
+ adminUsername: '%ADMIN_USERNAME%'
29
+ adminPassword: '%ADMIN_PASSWORD%'
30
+ adminPath: '%WP_ADMIN_PATH%'
31
+ WPFilesystem:
32
+ wpRootFolder: '%WP_ROOT_FOLDER%'
33
+ plugins: '/wp-content/plugins'
34
+ mu-plugins: '/wp-content/mu-plugins'
35
+ themes: '/wp-content/themes'
36
+ uploads: '/wp-content/uploads'
vendor/skyverge/wc-plugin-framework/tests/integration.suite.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Codeception Test Suite Configuration
2
+ #
3
+ # Suite for unit or integration tests that require WordPress functions and classes.
4
+
5
+ actor: IntegrationTester
6
+ modules:
7
+ enabled:
8
+ - WPLoader
9
+ - \Helper\Integration
10
+ config:
11
+ WPLoader:
12
+ wpRootFolder: "%WP_ROOT_FOLDER%"
13
+ dbName: "%INTEGRATION_DB_NAME%"
14
+ dbHost: "%INTEGRATION_DB_HOST%"
15
+ dbUser: "%INTEGRATION_DB_USER%"
16
+ dbPassword: "%INTEGRATION_DB_PASSWORD%"
17
+ tablePrefix: "%INTEGRATION_TABLE_PREFIX%"
18
+ domain: "%WP_DOMAIN%"
19
+ adminEmail: "%ADMIN_EMAIL%"
20
+ title: "Plugin Framework Tests"
21
+ plugins: ['woocommerce/woocommerce.php', 'test-plugin/test-plugin.php', 'gateway-test-plugin/gateway-test-plugin.php']
22
+ activatePlugins: ['woocommerce/woocommerce.php', 'test-plugin/test-plugin.php', 'gateway-test-plugin/gateway-test-plugin.php']
vendor/skyverge/wc-plugin-framework/tests/integration/DependenciesTest.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Tests for the SV_WC_Plugin_Dependencies class.
5
+ *
6
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Dependencies
7
+ */
8
+ class DependenciesTest extends \Codeception\TestCase\WPTestCase {
9
+
10
+
11
+ /** @var \IntegrationTester */
12
+ protected $tester;
13
+
14
+ /** @var \SkyVerge\WooCommerce\TestPlugin\Plugin instance */
15
+ protected $plugin;
16
+
17
+
18
+ protected function _before() {
19
+
20
+
21
+ }
22
+
23
+
24
+ protected function _after() {
25
+
26
+
27
+ }
28
+
29
+
30
+ /** Tests *********************************************************************************************************/
31
+
32
+
33
+ /**
34
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Dependencies::get_active_scripts_optimization_plugins()
35
+ */
36
+ public function test_get_active_scripts_optimization_plugins() {
37
+
38
+ $this->assertEquals( [], $this->get_plugin()->get_dependency_handler()->get_active_scripts_optimization_plugins() );
39
+ }
40
+
41
+
42
+ /**
43
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Dependencies::is_scripts_optimization_plugin_active()
44
+ */
45
+ public function test_is_scripts_optimization_plugin_active() {
46
+
47
+ $this->assertEquals( false, $this->get_plugin()->get_dependency_handler()->is_scripts_optimization_plugin_active() );
48
+ }
49
+
50
+
51
+ /** Helper methods ************************************************************************************************/
52
+
53
+
54
+ /**
55
+ * Gets the plugin instance.
56
+ *
57
+ * @return \SkyVerge\WooCommerce\TestPlugin\Plugin
58
+ */
59
+ protected function get_plugin() {
60
+
61
+ if ( null === $this->plugin ) {
62
+ $this->plugin = sv_wc_test_plugin();
63
+ }
64
+
65
+ return $this->plugin;
66
+ }
67
+
68
+
69
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/HelperTest.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
4
+
5
+ /**
6
+ * Tests for the helper class.
7
+ *
8
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Compatibility
9
+ */
10
+ class HelperTest extends \Codeception\TestCase\WPTestCase {
11
+
12
+
13
+ /**
14
+ * Tests {@see Framework\SV_WC_Helper::is_rest_api_request()}.
15
+ *
16
+ * @param string $route endpoint
17
+ * @param bool $expected result
18
+ *
19
+ * @dataProvider provider_is_rest_api_request
20
+ */
21
+ public function test_is_rest_api_request( $route, $expected ) {
22
+
23
+ $_SERVER['REQUEST_URI'] = $route;
24
+
25
+ $is_api_request = Framework\SV_WC_Helper::is_rest_api_request();
26
+
27
+ $this->assertSame( $is_api_request, $expected );
28
+ }
29
+
30
+
31
+ /**
32
+ * Data provider for {@see HelperTest::test_is_rest_api_request()}.
33
+ *
34
+ * @return array[]
35
+ */
36
+ public function provider_is_rest_api_request() {
37
+
38
+ return [
39
+ [ '/wp-json/', true ],
40
+ [ '/', false ],
41
+ ];
42
+ }
43
+
44
+
45
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/PluginTest.php ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Tests for the base plugin class.
5
+ *
6
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin
7
+ */
8
+ class PluginTest extends \Codeception\TestCase\WPTestCase {
9
+
10
+
11
+ /** @var \IntegrationTester */
12
+ protected $tester;
13
+
14
+ /** @var \SkyVerge\WooCommerce\TestPlugin\Plugin instance */
15
+ protected $plugin;
16
+
17
+
18
+ protected function _before() {
19
+
20
+
21
+ }
22
+
23
+
24
+ protected function _after() {
25
+
26
+
27
+ }
28
+
29
+
30
+ /** Tests *********************************************************************************************************/
31
+
32
+
33
+ /**
34
+ * Tests get_id.
35
+ */
36
+ public function test_get_id() {
37
+
38
+ $this->assertEquals( 'test_plugin', $this->get_plugin()->get_id() );
39
+ }
40
+
41
+
42
+ /**
43
+ * Tests get_id_dasherized.
44
+ */
45
+ public function test_get_id_dasherized() {
46
+
47
+ $this->assertEquals( 'test-plugin', $this->get_plugin()->get_id_dasherized() );
48
+ }
49
+
50
+
51
+ /**
52
+ * Tests get_version.
53
+ */
54
+ public function test_get_version() {
55
+
56
+ $this->assertEquals( '1.0.0', $this->get_plugin()->get_version() );
57
+ }
58
+
59
+
60
+ /**
61
+ * Tests get_plugin_file.
62
+ */
63
+ public function test_get_plugin_file() {
64
+
65
+ $this->assertEquals( 'test-plugin/test-plugin.php', $this->get_plugin()->get_plugin_file() );
66
+ }
67
+
68
+
69
+ /**
70
+ * Tests get_plugin_path.
71
+ */
72
+ public function test_get_plugin_path() {
73
+
74
+ $path = $this->get_plugin()->get_plugin_path();
75
+
76
+ $this->assertStringEndsWith( 'wp-content/plugins/test-plugin', $path );
77
+ $this->assertStringStartsNotWith( 'http', $path );
78
+ }
79
+
80
+
81
+ /**
82
+ * Tests get_plugin_url.
83
+ */
84
+ public function test_get_plugin_url() {
85
+
86
+ $url = $this->get_plugin()->get_plugin_url();
87
+
88
+ $this->assertStringEndsWith( 'wp-content/plugins/test-plugin', $url );
89
+ $this->assertStringStartsWith( 'http', $url );
90
+ }
91
+
92
+
93
+ /**
94
+ * Tests get_woocommerce_uploads_path.
95
+ */
96
+ public function test_get_woocommerce_uploads_path() {
97
+
98
+ $path = $this->get_plugin()->get_woocommerce_uploads_path();
99
+
100
+ $this->assertStringEndsWith( 'wp-content/uploads/woocommerce_uploads', $path );
101
+ $this->assertStringStartsNotWith( 'http', $path );
102
+ }
103
+
104
+
105
+ /**
106
+ * Tests get_framework_file.
107
+ */
108
+ public function test_get_framework_file() {
109
+
110
+ $this->assertStringEndsWith( 'class-sv-wc-plugin.php', $this->get_plugin()->get_framework_file() );
111
+ }
112
+
113
+
114
+ /**
115
+ * Tests get_framework_path.
116
+ */
117
+ public function test_get_framework_path() {
118
+
119
+ $path = $this->get_plugin()->get_framework_path();
120
+
121
+ $this->assertStringEndsWith( 'vendor/skyverge/wc-plugin-framework/woocommerce', $path );
122
+ $this->assertStringStartsNotWith( 'http', $path );
123
+ }
124
+
125
+
126
+ /**
127
+ * Tests get_framework_assets_url.
128
+ */
129
+ public function test_get_framework_assets_url() {
130
+
131
+ $url = $this->get_plugin()->get_framework_assets_url();
132
+
133
+ $this->assertStringEndsWith( 'vendor/skyverge/wc-plugin-framework/woocommerce/assets', $url );
134
+ $this->assertStringStartsWith( 'http', $url );
135
+ }
136
+
137
+
138
+ /**
139
+ * Tests get_framework_assets_path.
140
+ */
141
+ public function test_get_framework_assets_path() {
142
+
143
+ $path = $this->get_plugin()->get_framework_assets_path();
144
+
145
+ $this->assertStringEndsWith( 'vendor/skyverge/wc-plugin-framework/woocommerce/assets', $path );
146
+ $this->assertStringStartsNotWith( 'http', $path );
147
+ }
148
+
149
+
150
+ /**
151
+ * Tests get_dependency_handler.
152
+ */
153
+ public function test_get_dependency_handler() {
154
+
155
+ $this->assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Dependencies', $this->get_plugin()->get_dependency_handler() );
156
+ }
157
+
158
+
159
+ /**
160
+ * Tests get_lifecycle_handler.
161
+ */
162
+ public function test_get_lifecycle_handler() {
163
+
164
+ $this->assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v5_10_0\Plugin\Lifecycle', $this->get_plugin()->get_lifecycle_handler() );
165
+ }
166
+
167
+
168
+ /**
169
+ * Tests is_plugin_active()
170
+ *
171
+ * @param mixed $plugin plugin name
172
+ * @param bool $expected the expected return value
173
+ *
174
+ * @dataProvider provider_is_plugin_active
175
+ */
176
+ public function test_is_plugin_active( $plugin, $expected ) {
177
+
178
+ $this->assertEquals( $expected, $this->get_plugin()->is_plugin_active( $plugin ) );
179
+ }
180
+
181
+
182
+ /**
183
+ * Provider for test_is_plugin_active()
184
+ *
185
+ * @return array
186
+ */
187
+ public function provider_is_plugin_active() {
188
+
189
+ return [
190
+ [ 'woocommerce', false ],
191
+ [ 'woocommerce.php', true ],
192
+ ];
193
+ }
194
+
195
+
196
+ /** Helper methods ************************************************************************************************/
197
+
198
+
199
+ /**
200
+ * Gets the plugin instance.
201
+ *
202
+ * @return \SkyVerge\WooCommerce\TestPlugin\Plugin
203
+ */
204
+ protected function get_plugin() {
205
+
206
+ if ( null === $this->plugin ) {
207
+ $this->plugin = sv_wc_test_plugin();
208
+ }
209
+
210
+ return $this->plugin;
211
+ }
212
+
213
+
214
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/REST_API/Controllers/SettingsTest.php ADDED
@@ -0,0 +1,400 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\REST_API\Controllers\Settings;
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Abstract_Settings;
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting;
6
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Control;
7
+
8
+ /**
9
+ * Tests for the Settings class.
10
+ *
11
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\REST_API\Controllers\Settings
12
+ */
13
+ class SettingsTest extends \Codeception\TestCase\WPTestCase {
14
+
15
+
16
+ /** @var \IntegrationTester */
17
+ protected $tester;
18
+
19
+
20
+ /** @var Abstract_Settings */
21
+ protected $settings;
22
+
23
+
24
+ protected function _before() {
25
+
26
+ require_once 'woocommerce/rest-api/Controllers/Settings.php';
27
+ require_once 'woocommerce/Settings_API/Abstract_Settings.php';
28
+ require_once 'woocommerce/Settings_API/Control.php';
29
+ require_once 'woocommerce/Settings_API/Setting.php';
30
+
31
+ $settings = $this->get_settings_instance();
32
+
33
+ $settings->register_setting( 'test_one', Setting::TYPE_STRING, [
34
+ 'name' => 'Test Setting One',
35
+ 'description' => 'A simple setting',
36
+ 'options' => [ 'a', 'b', 'c' ],
37
+ 'default' => 'c',
38
+ ] );
39
+
40
+ $settings->register_control( 'test_one', Control::TYPE_SELECT, [
41
+ 'name' => 'Select field',
42
+ 'description' => 'A regular select input field for setting one',
43
+ 'options' => [
44
+ 'a' => 'A',
45
+ 'b' => 'B',
46
+ 'c' => 'C'
47
+ ],
48
+ ] );
49
+
50
+ $settings->register_setting( 'test_two', Setting::TYPE_STRING, [
51
+ 'name' => 'Test Setting Two',
52
+ 'description' => 'Another simple setting',
53
+ 'options' => [ 'a', 'b', 'c' ],
54
+ 'default' => 'b',
55
+ ] );
56
+
57
+ $settings->register_control( 'test_two', Control::TYPE_SELECT, [
58
+ 'name' => 'Select field',
59
+ 'description' => 'A regular select input field for setting two',
60
+ 'options' => [
61
+ 'a' => 'A',
62
+ 'b' => 'B',
63
+ 'c' => 'C'
64
+ ],
65
+ ] );
66
+
67
+ $settings->register_setting( 'test_three', Setting::TYPE_STRING, [
68
+ 'name' => 'Test Setting Three',
69
+ 'description' => 'A third simple setting',
70
+ 'options' => [ 'a', 'b', 'c' ],
71
+ 'default' => 'a',
72
+ ] );
73
+ }
74
+
75
+
76
+ protected function _after() {
77
+
78
+ }
79
+
80
+
81
+ /** Tests *********************************************************************************************************/
82
+
83
+
84
+ /** @see Settings::get_items() */
85
+ public function test_get_items() {
86
+
87
+ $settings = $this->get_settings_instance();
88
+ $controller = new Settings( $settings );
89
+
90
+ $setting_objects = [
91
+ 'test_one' => $settings->get_setting( 'test_one' ),
92
+ 'test_two' => $settings->get_setting( 'test_two' ),
93
+ 'test_three' => $settings->get_setting( 'test_three' ),
94
+ ];
95
+
96
+ $setting_objects['test_one']->set_value( 'a' );
97
+
98
+ $request = new WP_REST_Request( 'GET', "/wc/v3/{$settings->get_id()}/settings" );
99
+ $response = $controller->get_items( $request );
100
+
101
+ $this->assertTrue( $response instanceof WP_REST_Response );
102
+ $this->assertSame( 200, $response->get_status() );
103
+
104
+ $items = $response->get_data();
105
+
106
+ foreach ( $items as $item ) {
107
+
108
+ $setting = $setting_objects[ $item['id'] ];
109
+
110
+ $this->assert_item_matches_setting( $item, $setting );
111
+
112
+ if ( $control = $setting->get_control() ) {
113
+ $this->assert_item_matches_control( $item['control'], $control );
114
+ }
115
+ }
116
+
117
+ $this->assertEquals( count( $setting_objects ), count( $items ) );
118
+ }
119
+
120
+
121
+ /** @see Settings::get_item() */
122
+ public function test_get_item() {
123
+
124
+ $settings = $this->get_settings_instance();
125
+ $controller = new Settings( $settings );
126
+
127
+ $setting = $settings->get_setting( 'test_one' );
128
+ $setting->set_value( 'a' );
129
+
130
+ $request = new WP_REST_Request( 'GET', "/wc/v3/{$settings->get_id()}/settings/{$setting->get_id()}" );
131
+ $request->set_url_params( [ 'id' => $setting->get_id() ] );
132
+
133
+ $response = $controller->get_item( $request );
134
+
135
+ $this->assertTrue( $response instanceof WP_REST_Response );
136
+
137
+ $this->assertSame( 200, $response->get_status() );
138
+
139
+ $item = $response->get_data();
140
+
141
+ $this->assert_item_matches_setting( $item, $setting );
142
+ $this->assert_item_matches_control( $item['control'], $setting->get_control() );
143
+ }
144
+
145
+
146
+ /** @see Settings::get_item() */
147
+ public function test_get_item_not_found() {
148
+
149
+ $settings = $this->get_settings_instance();
150
+ $controller = new Settings( $settings );
151
+
152
+ $setting_id = 'test';
153
+
154
+ $request = new WP_REST_Request( 'GET', "/wc/v3/{$settings->get_id()}/settings/{$setting_id}" );
155
+ $request->set_url_params( [ 'id' => $setting_id ] );
156
+
157
+ $response = $controller->get_item( $request );
158
+
159
+ $this->assertTrue( $response instanceof WP_Error );
160
+ $this->assertSame( 'wc_rest_setting_not_found', $response->get_error_code() );
161
+ $this->assertSame( [ 'status' => 404 ], $response->get_error_data() );
162
+ }
163
+
164
+
165
+ /** @see Settings::update_item() */
166
+ public function test_update_item() {
167
+
168
+ $settings = $this->get_settings_instance();
169
+ $controller = new Settings( $settings );
170
+
171
+ $setting = $settings->get_setting( 'test_one' );
172
+ $request = new WP_REST_Request( 'POST', "/wc/v3/{$settings->get_id()}/settings/{$setting->get_id()}" );
173
+
174
+ $request->set_header( 'content-type', 'application/json' );
175
+ $request->set_url_params( [ 'id' => $setting->get_id() ] );
176
+ $request->set_body( json_encode( [ 'value' => 'a' ] ) );
177
+
178
+ $response = $controller->update_item( $request );
179
+
180
+ $this->assertInstanceOf( WP_REST_Response::class, $response );
181
+ $this->assertSame( 200, $response->get_status() );
182
+
183
+ $data = $response->get_data();
184
+
185
+ $this->assert_item_matches_setting( $data, $setting );
186
+
187
+ $this->assertEquals( 'a', $data['value'] );
188
+ $this->assertEquals( 'a', get_option( $settings->get_option_name_prefix() . '_' . $setting->get_id() ) );
189
+ }
190
+
191
+
192
+ /**
193
+ * @see Settings::update_item()
194
+ *
195
+ * @param string $setting_id setting ID
196
+ * @param array|bool|float|int|string $value setting value
197
+ * @param int $status WP_Error status
198
+ *
199
+ * @dataProvider provider_test_update_item_error
200
+ */
201
+ public function test_update_item_error( $setting_id, $value, $status ) {
202
+
203
+ $settings = $this->get_settings_instance();
204
+ $controller = new Settings( $settings );
205
+ $request = new WP_REST_Request( 'POST', "/wc/v3/{$settings->get_id()}/settings/{$setting_id}" );
206
+
207
+ $request->set_header( 'content-type', 'application/json' );
208
+ $request->set_url_params( [ 'id' => $setting_id ] );
209
+ $request->set_body( json_encode( [ 'value' => $value ] ) );
210
+
211
+ $response = $controller->update_item( $request );
212
+
213
+ $this->assertInstanceOf( WP_Error::class, $response );
214
+ $this->assertSame( 'wc_rest_setting_could_not_update', $response->get_error_code() );
215
+ $this->assertSame( [ 'status' => $status ], $response->get_error_data() );
216
+ }
217
+
218
+
219
+ /** @see test_update_item_error() */
220
+ public function provider_test_update_item_error() {
221
+
222
+ return [
223
+ 'setting not found' => [ 'not_found', null, 404 ],
224
+ 'invalid value type' => [ 'test_one', 1234, 400 ],
225
+ 'value not in options' => [ 'test_one', 'x', 400 ],
226
+ ];
227
+ }
228
+
229
+
230
+ /** @see Settings::prepare_setting_item() */
231
+ public function test_prepare_setting_item() {
232
+
233
+ $settings = $this->get_settings_instance();
234
+ $controller = new Settings( $settings );
235
+
236
+ $setting = $settings->get_setting( 'test_one' );
237
+ $setting->set_value( 'a' );
238
+
239
+ $item = $controller->prepare_setting_item( $setting, null );
240
+
241
+ $this->assert_item_matches_setting( $item, $setting );
242
+ $this->assert_item_matches_control( $item['control'], $setting->get_control() );
243
+ }
244
+
245
+
246
+ /** @see Settings::prepare_setting_item() */
247
+ public function test_prepare_setting_item_value_not_set() {
248
+
249
+ $settings = $this->get_settings_instance();
250
+ $controller = new Settings( $settings );
251
+
252
+ $settings->register_setting( 'test', Setting::TYPE_STRING );
253
+
254
+ $item = $controller->prepare_setting_item( $settings->get_setting( 'test' ), null );
255
+
256
+ // $item['value'] is null if no value has been set for the setting
257
+ // we want users of the API to differentiate between a setting that's been set vs. a setting that has a default value but not saved yet
258
+ $this->assertEquals( null, $item['value'] );
259
+ }
260
+
261
+
262
+ /** @see Settings::prepare_setting_item() */
263
+ public function test_prepare_setting_item_control_not_set() {
264
+
265
+ $settings = $this->get_settings_instance();
266
+ $controller = new Settings( $settings );
267
+
268
+ $settings->register_setting( 'test', Setting::TYPE_STRING );
269
+
270
+ $item = $controller->prepare_setting_item( $settings->get_setting( 'test' ), null );
271
+
272
+ $this->assertSame( null, $item['control'] );
273
+ }
274
+
275
+
276
+ /** @see Settings::get_item_schema() */
277
+ public function test_get_item_schema() {
278
+
279
+ $controller = new Settings( $this->get_settings_instance() );
280
+
281
+ $setting_schema = $controller->get_item_schema();
282
+ $setting_properties = [
283
+ 'id',
284
+ 'type',
285
+ 'name',
286
+ 'description',
287
+ 'is_multi',
288
+ 'options',
289
+ 'default',
290
+ 'value',
291
+ 'control',
292
+ ];
293
+
294
+ foreach ( $setting_properties as $property ) {
295
+
296
+ $this->assertArrayHasKey( $property, $setting_schema['properties'] );
297
+
298
+ // all Setting properties but 'value' should be marked as readonly
299
+ if ( 'value' === $property ) {
300
+ $this->assertArrayNotHasKey( 'readonly', $setting_schema['properties'][ $property ] );
301
+ } else {
302
+ $this->assertTrue( $setting_schema['properties'][ $property ]['readonly'] );
303
+ }
304
+ }
305
+
306
+ $control_schema = $setting_schema['properties']['control'];
307
+ $control_properties = [
308
+ 'type',
309
+ 'name',
310
+ 'description',
311
+ 'options',
312
+ ];
313
+
314
+ foreach ( $control_properties as $property ) {
315
+
316
+ $this->assertArrayHasKey( $property, $control_schema['properties'] );
317
+ $this->assertTrue( $control_schema['properties'][ $property ]['readonly'] );
318
+ }
319
+ }
320
+
321
+
322
+ /** @see Settings::get_item_schema() */
323
+ public function test_get_item_schema_additional_fields() {
324
+
325
+ register_rest_field( "{$this->get_settings_instance()->get_id()}_setting", 'test', [
326
+ 'schema' => [
327
+ 'description' => 'A test field.',
328
+ 'type' => 'string',
329
+ ],
330
+ ] );
331
+
332
+ $controller = new Settings( $this->get_settings_instance() );
333
+ $schema = $controller->get_item_schema();
334
+
335
+ $this->assertArrayHasKey( 'test', $schema['properties'] );
336
+ }
337
+
338
+
339
+ /** Helper methods ************************************************************************************************/
340
+
341
+
342
+ /**
343
+ * Gets the settings instance.
344
+ *
345
+ * @return Abstract_Settings
346
+ */
347
+ protected function get_settings_instance() {
348
+
349
+ if ( null === $this->settings ) {
350
+
351
+ $this->settings = new class( 'test-plugin' ) extends Abstract_Settings {
352
+
353
+
354
+ protected function register_settings() {
355
+
356
+ }
357
+
358
+
359
+ };
360
+ }
361
+
362
+ return $this->settings;
363
+ }
364
+
365
+
366
+ /**
367
+ * Asserts that entries in an array match the properties of a setting.
368
+ *
369
+ * @param array $item a data array
370
+ * @param Setting $setting a setting object
371
+ */
372
+ private function assert_item_matches_setting( array $item, $setting ) {
373
+
374
+ $this->assertEquals( $setting->get_id(), $item['id'] );
375
+ $this->assertEquals( $setting->get_type(), $item['type'] );
376
+ $this->assertEquals( $setting->get_name(), $item['name'] );
377
+ $this->assertEquals( $setting->get_description(), $item['description'] );
378
+ $this->assertEquals( $setting->is_is_multi(), $item['is_multi'] );
379
+ $this->assertEquals( $setting->get_options(), $item['options'] );
380
+ $this->assertEquals( $setting->get_default(), $item['default'] );
381
+ $this->assertEquals( $setting->get_value(), $item['value'] );
382
+ }
383
+
384
+
385
+ /**
386
+ * Asserts that entries in an array match the properties of a control.
387
+ *
388
+ * @param array $item a data array
389
+ * @param Control $control a control object
390
+ */
391
+ private function assert_item_matches_control( array $item, $control ) {
392
+
393
+ $this->assertEquals( $control->get_type(), $item['type'] );
394
+ $this->assertEquals( $control->get_name(), $item['name'] );
395
+ $this->assertEquals( $control->get_description(), $item['description'] );
396
+ $this->assertEquals( $control->get_options(), $item['options'] );
397
+ }
398
+
399
+
400
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/REST_API/RESTAPITest.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Abstract_Settings;
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper;
6
+
7
+ /**
8
+ * Tests for the REST_API class.
9
+ *
10
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\REST_API
11
+ */
12
+ class RESTAPITest extends \Codeception\TestCase\WPTestCase {
13
+
14
+
15
+ /** @var \IntegrationTester */
16
+ protected $tester;
17
+
18
+ /** @var Abstract_Settings */
19
+ protected $settings;
20
+
21
+
22
+ protected function _before() {
23
+
24
+ require_once 'woocommerce/class-sv-wc-plugin.php';
25
+ require_once 'woocommerce/rest-api/Controllers/Settings.php';
26
+ require_once 'woocommerce/Settings_API/Abstract_Settings.php';
27
+ }
28
+
29
+
30
+ protected function _after() {
31
+
32
+ }
33
+
34
+
35
+ /** Tests *********************************************************************************************************/
36
+
37
+
38
+ /** @see Abstract_Settings::get_id() */
39
+ public function test_register_routes() {
40
+
41
+ $settings = $this->get_settings_instance();
42
+ $plugin = $this->make( SkyVerge\WooCommerce\TestPlugin\Plugin::class, [ 'get_settings_handler' => $settings ] );
43
+
44
+ $handler = new Framework\REST_API( $plugin );
45
+ $handler->register_routes();
46
+
47
+ $this->assertArrayHasKey( "/wc/v3/{$settings->get_id()}/settings", rest_get_server()->get_routes() );
48
+ }
49
+
50
+
51
+ /** Helper methods ************************************************************************************************/
52
+
53
+
54
+ /**
55
+ * Gets the settings instance.
56
+ *
57
+ * @return Abstract_Settings
58
+ */
59
+ protected function get_settings_instance() {
60
+
61
+ if ( null === $this->settings ) {
62
+
63
+ $this->settings = new class( 'test-plugin' ) extends Abstract_Settings {
64
+
65
+
66
+ protected function register_settings() {
67
+
68
+ }
69
+
70
+
71
+ };
72
+ }
73
+
74
+ return $this->settings;
75
+ }
76
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/SV_WC_Payment_Gateway_Helper_Test.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Helper;
4
+
5
+ /**
6
+ * Tests for the Payment Gateway Helper class.
7
+ *
8
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Helper
9
+ */
10
+ class SV_WC_Payment_Gateway_Helper_Test extends \Codeception\TestCase\WPTestCase {
11
+
12
+
13
+ /** @var \IntegrationTester */
14
+ protected $tester;
15
+
16
+
17
+ /** Tests *********************************************************************************************************/
18
+
19
+
20
+ /**
21
+ * @see SV_WC_Payment_Gateway_Helper::format_exp_year()
22
+ *
23
+ * @dataProvider provider_format_exp_year
24
+ */
25
+ public function test_format_exp_year( $exp_year, $expected_result ) {
26
+
27
+ $this->assertEquals( $expected_result, SV_WC_Payment_Gateway_Helper::format_exp_year( $exp_year ) );
28
+ }
29
+
30
+
31
+ public function provider_format_exp_year() {
32
+
33
+ return [
34
+ [ '2022', '22' ],
35
+ [ '20', '20' ],
36
+ ];
37
+ }
38
+
39
+
40
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/Settings_API/AbstractSettingsTest.php ADDED
@@ -0,0 +1,626 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Abstract_Settings;
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting;
6
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Control;
7
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Exception;
8
+
9
+ /**
10
+ * Tests for the Abstract_Settings class.
11
+ *
12
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Abstract_Settings
13
+ */
14
+ class AbstractSettingsTest extends \Codeception\TestCase\WPTestCase {
15
+
16
+
17
+ /** @var \IntegrationTester */
18
+ protected $tester;
19
+
20
+
21
+ /** @var Abstract_Settings */
22
+ protected $settings;
23
+
24
+
25
+ protected function _before() {
26
+
27
+ require_once 'woocommerce/Settings_API/Abstract_Settings.php';
28
+ require_once 'woocommerce/Settings_API/Control.php';
29
+ require_once 'woocommerce/Settings_API/Setting.php';
30
+ }
31
+
32
+
33
+ protected function _after() {
34
+
35
+ }
36
+
37
+
38
+ /** Tests *********************************************************************************************************/
39
+
40
+
41
+ /** @see Abstract_Settings::get_id() */
42
+ public function test_get_id() {
43
+
44
+ $this->assertEquals( 'test-plugin', $this->get_settings_instance()->get_id() );
45
+ }
46
+
47
+
48
+ /**
49
+ * @see Abstract_Settings::register_setting()
50
+ * @see Abstract_Settings::get_setting()
51
+ */
52
+ public function test_register_setting() {
53
+
54
+ $this->assertTrue( $this->get_settings_instance()->register_setting( 'test-setting-d', Setting::TYPE_EMAIL, [
55
+ 'name' => 'Test Setting D',
56
+ 'description' => 'Description of setting D',
57
+ ] ) );
58
+
59
+ $this->assertInstanceOf( Setting::class, $this->get_settings_instance()->get_setting( 'test-setting-d' ) );
60
+
61
+ // existing setting ID
62
+ $this->assertFalse( $this->get_settings_instance()->register_setting( 'test-setting-d', Setting::TYPE_EMAIL, [
63
+ 'name' => 'Test Setting D',
64
+ 'description' => 'Description of setting D',
65
+ ] ) );
66
+
67
+ // invalid setting type
68
+ $this->assertFalse( $this->get_settings_instance()->register_setting( 'test-setting-e', 'invalid-type', [
69
+ 'name' => 'Test Setting E',
70
+ 'description' => 'Description of setting E',
71
+ ] ) );
72
+
73
+ $this->assertNull( $this->get_settings_instance()->get_setting( 'test-setting-e' ) );
74
+ }
75
+
76
+
77
+ /**
78
+ * @see Abstract_Settings::load_settings()
79
+ *
80
+ * Stored values are defined in get_settings_instance().
81
+ */
82
+ public function test_load_settings() {
83
+
84
+ $this->get_settings_instance()->register_setting( 'test-setting-d', Setting::TYPE_EMAIL, [
85
+ 'name' => 'Test Setting D',
86
+ 'description' => 'Description of setting D',
87
+ ] );
88
+
89
+ $this->assertSame( 'something', $this->get_settings_instance()->get_setting( 'test-setting-a' )->get_value() );
90
+ $this->assertSame( 1729, $this->get_settings_instance()->get_setting( 'test-setting-b' )->get_value() );
91
+ $this->assertSame( true, $this->get_settings_instance()->get_setting( 'test-setting-c' )->get_value() );
92
+ $this->assertSame( null, $this->get_settings_instance()->get_setting( 'test-setting-d' )->get_value() );
93
+ }
94
+
95
+
96
+ /**
97
+ * @see Abstract_Settings::unregister_setting()
98
+ * @see Abstract_Settings::get_setting()
99
+ */
100
+ public function test_unregister_setting() {
101
+
102
+ $this->assertInstanceOf( Setting::class, $this->get_settings_instance()->get_setting( 'test-setting-a' ) );
103
+
104
+ $this->get_settings_instance()->unregister_setting( 'test-setting-a' );
105
+
106
+ $this->assertNull( $this->get_settings_instance()->get_setting( 'test-setting-a' ) );
107
+ }
108
+
109
+
110
+ /**
111
+ * @see Abstract_Settings::register_control()
112
+ *
113
+ * @param string $setting_id the setting ID
114
+ * @param string $control_type the control type
115
+ * @param string[] $setting_control_types the control types valid for the setting
116
+ * @param bool $registered whether the control should be successfully registered or not
117
+ *
118
+ * @dataProvider provider_register_control
119
+ */
120
+ public function test_register_control( $setting_id, $control_type, $setting_control_types, $registered ) {
121
+
122
+ $this->get_settings_instance()->register_setting( 'registered_setting', Setting::TYPE_STRING );
123
+
124
+ if ( ! empty( $setting_control_types ) ) {
125
+
126
+ add_filter( "wc_{$this->get_settings_instance()->get_id()}_settings_api_setting_control_types", function () use ( $setting_control_types ) {
127
+
128
+ return $setting_control_types;
129
+ } );
130
+ }
131
+
132
+ $this->assertSame( $registered, $this->get_settings_instance()->register_control( $setting_id, $control_type ) );
133
+
134
+ if ( $registered ) {
135
+
136
+ $this->assertInstanceOf( Control::class, $this->get_settings_instance()->get_setting( $setting_id )->get_control() );
137
+
138
+ } elseif ( $setting = $this->get_settings_instance()->get_setting( $setting_id ) ) {
139
+
140
+ $this->assertNull( $setting->get_control() );
141
+ }
142
+ }
143
+
144
+
145
+ /** @see test_register_control() */
146
+ public function provider_register_control() {
147
+
148
+ require_once 'woocommerce/Settings_API/Control.php';
149
+
150
+ return [
151
+ [ 'unknown_setting', Control::TYPE_TEXT, [], false ],
152
+ [ 'registered_setting', 'invalid_type', [], false ],
153
+ [ 'registered_setting', Control::TYPE_TEXT, [], true ],
154
+ [ 'registered_setting', Control::TYPE_TEXT, [ Control::TYPE_TEXT, Control::TYPE_SELECT ], true ],
155
+ [ 'registered_setting', Control::TYPE_EMAIL, [ Control::TYPE_TEXT, Control::TYPE_SELECT ], false ],
156
+ ];
157
+ }
158
+
159
+
160
+ /** @see Abstract_Settings::register_control() */
161
+ public function test_register_control_args() {
162
+
163
+ $setting_args = [
164
+ 'name' => 'Setting Name',
165
+ 'description' => 'Setting Description',
166
+ 'options' => [ 'black', 'white' ],
167
+ ];
168
+
169
+ $this->get_settings_instance()->register_setting( 'color', Setting::TYPE_STRING, $setting_args );
170
+
171
+ $this->get_settings_instance()->register_control( 'color', Control::TYPE_SELECT, [
172
+ 'options' => [
173
+ 'black' => 'Black',
174
+ 'white' => 'White',
175
+ 'red' => 'Red',
176
+ ],
177
+ ] );
178
+
179
+ $control = $this->get_settings_instance()->get_setting( 'color' )->get_control();
180
+
181
+ // TODO: uncomment assert for $control->get_options when https://github.com/skyverge/wc-plugin-framework/pull/453 is merged {WV 2020-03-20}
182
+
183
+ $this->assertEquals( 'color', $control->get_setting_id() );
184
+ $this->assertEquals( Control::TYPE_SELECT, $control->get_type() );
185
+ $this->assertEquals( $setting_args['name'], $control->get_name() );
186
+ $this->assertEquals( $setting_args['description'], $control->get_description() );
187
+ // $this->assertEquals( $setting_args['options'], array_keys( $control->get_options() ) );
188
+ }
189
+
190
+
191
+ /**
192
+ * @see Abstract_Settings::get_settings()
193
+ *
194
+ * @param array $ids settings IDs to get
195
+ * @param array $expected_ids expected settings IDs to retrieve
196
+ *
197
+ * @dataProvider provider_get_settings
198
+ */
199
+ public function test_get_settings( $ids, $expected_ids ) {
200
+
201
+ $settings = $this->get_settings_instance()->get_settings( $ids );
202
+
203
+ $this->assertEquals( array_keys( $settings ), $expected_ids );
204
+ }
205
+
206
+
207
+ /** @see test_get_settings() */
208
+ public function provider_get_settings() {
209
+
210
+ return [
211
+ [ [ 'test-setting-a', 'test-setting-b' ], [ 'test-setting-a', 'test-setting-b' ] ],
212
+ [ [], [ 'test-setting-a', 'test-setting-b', 'test-setting-c' ] ],
213
+ [ [ 'test-setting-x' ], [] ],
214
+ ];
215
+ }
216
+
217
+
218
+ /** @see Abstract_Settings::get_value() */
219
+ public function test_get_value() {
220
+
221
+ $setting = $this->get_settings_instance()->get_setting( 'test-setting-b' );
222
+ $setting->set_value( 1000 );
223
+ $this->get_settings_instance()->save( $setting->get_id() );
224
+
225
+ $this->assertEquals( 1000, $this->get_settings_instance()->get_value( $setting->get_id() ) );
226
+ }
227
+
228
+
229
+ /**
230
+ * @see Abstract_Settings::get_value()
231
+ *
232
+ * @param mixed $expected_value the returned value
233
+ * @param bool $with_default whether to return the default value if nothing is stored
234
+ * @throws Framework\SV_WC_Plugin_Exception
235
+ *
236
+ * @dataProvider provider_get_value_nothing_stored
237
+ */
238
+ public function test_get_value_nothing_stored( $expected_value, $with_default ) {
239
+
240
+ $setting = $this->get_settings_instance()->get_setting( 'test-setting-b' );
241
+ $this->get_settings_instance()->delete_value( $setting->get_id() );
242
+
243
+ $this->assertEquals( $expected_value, $this->get_settings_instance()->get_value( $setting->get_id(), $with_default ) );
244
+ }
245
+
246
+
247
+ /** @see test_get_value_nothing_stored() */
248
+ public function provider_get_value_nothing_stored() {
249
+
250
+ return [
251
+ [ 3600, true ],
252
+ [ null, false ],
253
+ ];
254
+ }
255
+
256
+
257
+ /** @see Abstract_Settings::get_value() */
258
+ public function test_get_value_exception() {
259
+
260
+ $this->expectException( Framework\SV_WC_Plugin_Exception::class );
261
+
262
+ $this->get_settings_instance()->get_value( 'not_a_setting' );
263
+ }
264
+
265
+
266
+ /**
267
+ * @see Abstract_Settings::update_value()
268
+ *
269
+ * @param bool $register whether to register a new setting
270
+ * @param mixed $value value to pass to method
271
+ * @param string $type setting type
272
+ * @param array $options setting options
273
+ * @param mixed $expected setting value after execution
274
+ * @param bool $exception whether an exception is expected
275
+ * @throws Framework\SV_WC_Plugin_Exception
276
+ *
277
+ * @dataProvider provider_update_value
278
+ */
279
+ public function test_update_value( $register, $value, $type, $options, $expected, $exception ) {
280
+
281
+ if ( $exception ) {
282
+ $this->expectException( SV_WC_Plugin_Exception::class );
283
+ }
284
+
285
+ $setting_id = 'test-setting';
286
+ $option_name = $this->get_settings_instance()->get_option_name_prefix() . '_' . $setting_id;
287
+
288
+ if ( $register ) {
289
+ $this->get_settings_instance()->register_setting( $setting_id, $type, [ 'options' => $options ] );
290
+ }
291
+
292
+ $this->get_settings_instance()->update_value( $setting_id, $value );
293
+
294
+ $this->assertSame( $expected, $this->get_settings_instance()->get_setting( $setting_id )->get_value() );
295
+
296
+ $setting = $this->get_settings_instance()->get_setting( $setting_id );
297
+ $method = new ReflectionMethod( Abstract_Settings::class, 'get_value_from_database' );
298
+ $method->setAccessible( true );
299
+
300
+ $this->assertEquals( $expected, $method->invokeArgs( $this->get_settings_instance(), [
301
+ get_option( $option_name ),
302
+ $setting
303
+ ] ) );
304
+ }
305
+
306
+
307
+ /**
308
+ * Provider for test_update_value()
309
+ *
310
+ * @return array
311
+ */
312
+ public function provider_update_value() {
313
+
314
+ require_once( 'woocommerce/Settings_API/Setting.php' );
315
+
316
+ return [
317
+ [ false, 'valid', Setting::TYPE_STRING, [], null, true ],
318
+
319
+ [ true, 'valid', Setting::TYPE_STRING, [], 'valid', false ],
320
+ [ true, 123, Setting::TYPE_STRING, [], null, true ],
321
+ [ true, 'green', Setting::TYPE_STRING, [ 'green', 'red' ], 'green', false ],
322
+ [ true, 'not an option', Setting::TYPE_STRING, [ 'green', 'red' ], null, true ],
323
+
324
+ [ true, 'https://skyverge.com/', Setting::TYPE_URL, [], 'https://skyverge.com/', false ],
325
+ [ true, 'file:///tmp/', Setting::TYPE_URL, [], null, true ],
326
+ [ true, 'https://skyverge.com/', Setting::TYPE_URL, [ 'https://skyverge.com/', 'http://skyverge.com/' ], 'https://skyverge.com/', false ],
327
+ [ true, 'https://google.com/', Setting::TYPE_URL, [ 'https://skyverge.com/', 'http://skyverge.com/' ], null, true ],
328
+
329
+ [ true, 'test@example.com', Setting::TYPE_EMAIL, [], 'test@example.com', false ],
330
+ [ true, 'not-an-email.com', Setting::TYPE_EMAIL, [], null, true ],
331
+ [ true, 'test@example.com', Setting::TYPE_EMAIL, [ 'test@example.com' ], 'test@example.com', false ],
332
+ [ true, 'another@example.com', Setting::TYPE_EMAIL, [ 'test@example.com' ], null, true ],
333
+
334
+ [ true, 12345, Setting::TYPE_INTEGER, [], 12345, false ],
335
+ [ true, 1.345, Setting::TYPE_INTEGER, [], null, true ],
336
+ [ true, '234', Setting::TYPE_INTEGER, [], null, true ],
337
+ [ true, 1, Setting::TYPE_INTEGER, [ 1, 2 ], 1, false ],
338
+ [ true, 3, Setting::TYPE_INTEGER, [ 1, 2 ], null, true ],
339
+
340
+ [ true, 12345, Setting::TYPE_FLOAT, [], 12345, false ],
341
+ [ true, 1.345, Setting::TYPE_FLOAT, [], 1.345, false ],
342
+ [ true, '234', Setting::TYPE_FLOAT, [], null, true ],
343
+ [ true, 1.5, Setting::TYPE_FLOAT, [ 1.5, 2.5 ], 1.5, false ],
344
+ [ true, 3.5, Setting::TYPE_FLOAT, [ 1.5, 2.5 ], null, true ],
345
+
346
+ [ true, true, Setting::TYPE_BOOLEAN, [], true, false ],
347
+ [ true, 'yes', Setting::TYPE_BOOLEAN, [], null, true ],
348
+ [ true, 1, Setting::TYPE_BOOLEAN, [], null, true ],
349
+ // it beats me why someone would have a boolean setting with only one option, but in theory it is possible
350
+ [ true, true, Setting::TYPE_BOOLEAN, [ true ], true, false ],
351
+ [ true, false, Setting::TYPE_BOOLEAN, [ true ], null, true ],
352
+ ];
353
+ }
354
+
355
+
356
+ /** @see Abstract_Settings::delete_value() */
357
+ public function test_delete_value() {
358
+
359
+ $setting = $this->get_settings_instance()->get_setting( 'test-setting-a' );
360
+
361
+ $setting->set_value( 'something' );
362
+ $this->get_settings_instance()->save( 'test-setting-a' );
363
+
364
+ $option_name = $this->get_settings_instance()->get_option_name_prefix() . '_' . $setting->get_id();
365
+
366
+ $this->assertNotEmpty( $setting->get_value() );
367
+ $this->assertNotEmpty( get_option( $option_name ) );
368
+
369
+ $this->get_settings_instance()->delete_value( $setting->get_id() );
370
+
371
+ $this->assertNull( $setting->get_value() );
372
+ $this->assertFalse( get_option( $option_name ) );
373
+ }
374
+
375
+
376
+ /** @see Abstract_Settings::save() */
377
+ public function test_save() {
378
+
379
+ $setting_a = $this->get_settings_instance()->get_setting( 'test-setting-a' );
380
+ $setting_b = $this->get_settings_instance()->get_setting( 'test-setting-b' );
381
+
382
+ $option_name_a = $this->get_settings_instance()->get_option_name_prefix() . '_' . $setting_a->get_id();
383
+ update_option( $option_name_a, 'old value' );
384
+
385
+ $option_name_b = $this->get_settings_instance()->get_option_name_prefix() . '_' . $setting_b->get_id();
386
+ update_option( $option_name_b, - 1 );
387
+
388
+ $setting_a->set_value( 'new value' );
389
+ $setting_b->set_value( 2 );
390
+
391
+ $this->assertEquals( 'new value', $setting_a->get_value() );
392
+ $this->assertEquals( 'old value', get_option( $option_name_a ) );
393
+
394
+ $this->assertEquals( 2, $setting_b->get_value() );
395
+ $this->assertEquals( - 1, get_option( $option_name_b ) );
396
+
397
+ $this->get_settings_instance()->save();
398
+
399
+ $this->assertEquals( 'new value', $setting_a->get_value() );
400
+ $this->assertEquals( 'new value', get_option( $option_name_a ) );
401
+ $this->assertEquals( 2, $setting_b->get_value() );
402
+ $this->assertEquals( 2, get_option( $option_name_b ) );
403
+ }
404
+
405
+
406
+ /** @see Abstract_Settings::save() */
407
+ public function test_save_single_setting() {
408
+
409
+ $setting_a = $this->get_settings_instance()->get_setting( 'test-setting-a' );
410
+ $setting_b = $this->get_settings_instance()->get_setting( 'test-setting-b' );
411
+
412
+ $option_name_a = $this->get_settings_instance()->get_option_name_prefix() . '_' . $setting_a->get_id();
413
+ update_option( $option_name_a, 'old value' );
414
+
415
+ $option_name_b = $this->get_settings_instance()->get_option_name_prefix() . '_' . $setting_b->get_id();
416
+ update_option( $option_name_b, - 1 );
417
+
418
+ $setting_a->set_value( 'new value' );
419
+ $setting_b->set_value( 2 );
420
+
421
+ $this->assertEquals( 'new value', $setting_a->get_value() );
422
+ $this->assertEquals( 'old value', get_option( $option_name_a ) );
423
+
424
+ $this->assertEquals( 2, $setting_b->get_value() );
425
+ $this->assertEquals( - 1, get_option( $option_name_b ) );
426
+
427
+ $this->get_settings_instance()->save( 'test-setting-a' );
428
+
429
+ $this->assertEquals( 'new value', $setting_a->get_value() );
430
+ $this->assertEquals( 'new value', get_option( $option_name_a ) );
431
+ $this->assertEquals( 2, $setting_b->get_value() );
432
+ $this->assertEquals( - 1, get_option( $option_name_b ) );
433
+ }
434
+
435
+
436
+ /** @see Abstract_Settings::delete_value() */
437
+ public function test_delete_value_exception() {
438
+
439
+ $this->expectException( Framework\SV_WC_Plugin_Exception::class );
440
+
441
+ $this->get_settings_instance()->delete_value( 'not_a_setting' );
442
+ }
443
+
444
+
445
+ /**
446
+ * @see Abstract_Settings::get_value_for_database()
447
+ *
448
+ * @param string $type the setting type
449
+ * @param mixed $value the current setting value
450
+ * @param mixed $expected_value the converted value
451
+ *
452
+ * @dataProvider provider_get_value_for_database
453
+ */
454
+ public function test_get_value_for_database( $type, $value, $expected_value ) {
455
+
456
+ $setting = new Setting();
457
+
458
+ $setting->set_type( $type );
459
+ $setting->set_value( $value );
460
+
461
+ $method = new ReflectionMethod( Abstract_Settings::class, 'get_value_for_database' );
462
+ $method->setAccessible( true );
463
+
464
+ $this->assertSame( $expected_value, $method->invoke( $this->get_settings_instance(), $setting ) );
465
+ }
466
+
467
+
468
+ /** @see test_get_value_for_database() */
469
+ public function provider_get_value_for_database() {
470
+
471
+ return [
472
+ 'string' => [ Setting::TYPE_STRING, 'hello', 'hello' ],
473
+ 'url' => [ Setting::TYPE_URL, 'https://skyverge.com', 'https://skyverge.com' ],
474
+ 'email' => [ Setting::TYPE_EMAIL, 'hello@example.com', 'hello@example.com' ],
475
+ 'integer' => [ Setting::TYPE_INTEGER, 1234, 1234 ],
476
+ 'float' => [ Setting::TYPE_FLOAT, 12.4, 12.4 ],
477
+ 'boolean true' => [ Setting::TYPE_BOOLEAN, true, 'yes' ],
478
+ 'boolean false' => [ Setting::TYPE_BOOLEAN, false, 'no' ],
479
+ ];
480
+ }
481
+
482
+
483
+ /**
484
+ * @see Abstract_Settings::get_value_from_database()
485
+ *
486
+ * @param mixed $value the value stored in the database
487
+ * @param mixed $expected_value the converted value
488
+ * @param string $type the setting type
489
+ *
490
+ * @dataProvider provider_get_value_from_database
491
+ */
492
+ public function test_get_value_from_database( $value, $expected_value, $type ) {
493
+
494
+ $setting = new Setting();
495
+ $setting->set_type( $type );
496
+
497
+ $method = new ReflectionMethod( Abstract_Settings::class, 'get_value_from_database' );
498
+ $method->setAccessible( true );
499
+
500
+ $this->assertSame( $expected_value, $method->invokeArgs( $this->get_settings_instance(), [ $value, $setting ] ) );
501
+ }
502
+
503
+
504
+ /** @see test_get_value_from_database() */
505
+ public function provider_get_value_from_database() {
506
+
507
+ require_once 'woocommerce/Settings_API/Setting.php';
508
+
509
+ return [
510
+ [ '12345', 12345, Setting::TYPE_INTEGER ],
511
+ [ '12.45', 12, Setting::TYPE_INTEGER ],
512
+ [ '0', 0, Setting::TYPE_INTEGER ],
513
+ [ 'hello', null, Setting::TYPE_INTEGER ],
514
+ [ null, null, Setting::TYPE_INTEGER ],
515
+ [ '', null, Setting::TYPE_INTEGER ],
516
+
517
+ [ '12345', 12345.0, Setting::TYPE_FLOAT ],
518
+ [ '12.45', 12.45, Setting::TYPE_FLOAT ],
519
+ [ '0', 0.0, Setting::TYPE_FLOAT ],
520
+ [ 'hello', null, Setting::TYPE_FLOAT ],
521
+ [ null, null, Setting::TYPE_FLOAT ],
522
+ [ '', null, Setting::TYPE_FLOAT ],
523
+
524
+ [ 'yes', true, Setting::TYPE_BOOLEAN ],
525
+ [ 'no', false, Setting::TYPE_BOOLEAN ],
526
+ [ '1', true, Setting::TYPE_BOOLEAN ],
527
+ [ '0', false, Setting::TYPE_BOOLEAN ],
528
+ [ 'hey', false, Setting::TYPE_BOOLEAN ],
529
+ [ null, null, Setting::TYPE_BOOLEAN ],
530
+ [ '', false, Setting::TYPE_BOOLEAN ],
531
+ ];
532
+ }
533
+
534
+
535
+ /** @see Abstract_Settings::get_setting_types() */
536
+ public function test_get_setting_types() {
537
+
538
+ $this->assertIsArray( $this->get_settings_instance()->get_setting_types() );
539
+
540
+ add_filter( "wc_{$this->get_settings_instance()->get_id()}_settings_api_setting_types", function() {
541
+
542
+ return [ 'my_type' ];
543
+ } );
544
+
545
+ $this->assertEquals( [ 'my_type' ], $this->get_settings_instance()->get_setting_types() );
546
+ }
547
+
548
+
549
+ /** @see Abstract_Settings::get_control_types() */
550
+ public function test_get_control_types() {
551
+
552
+ $this->assertIsArray( $this->get_settings_instance()->get_control_types() );
553
+
554
+ add_filter( "wc_{$this->get_settings_instance()->get_id()}_settings_api_control_types", function() {
555
+
556
+ return [ 'my_type' ];
557
+ } );
558
+
559
+ $this->assertEquals( [ 'my_type' ], $this->get_settings_instance()->get_control_types() );
560
+ }
561
+
562
+
563
+ /** @see Abstract_Settings::get_setting_control_types() */
564
+ public function test_get_setting_control_types() {
565
+
566
+ $setting = $this->get_settings_instance()->get_setting( 'test-setting-a' );
567
+
568
+ $this->assertIsArray( $this->get_settings_instance()->get_setting_control_types( $setting ) );
569
+
570
+ add_filter( "wc_{$this->get_settings_instance()->get_id()}_settings_api_setting_control_types", function() {
571
+
572
+ return [ 'my_type' ];
573
+ } );
574
+
575
+ $this->assertEquals( [ 'my_type' ], $this->get_settings_instance()->get_setting_control_types( $setting ) );
576
+ }
577
+
578
+
579
+ /** Helper methods ************************************************************************************************/
580
+
581
+
582
+ /**
583
+ * Gets the settings instance.
584
+ *
585
+ * @return Abstract_Settings
586
+ */
587
+ protected function get_settings_instance() {
588
+
589
+ if ( null === $this->settings ) {
590
+
591
+ $this->settings = new class( 'test-plugin' ) extends Abstract_Settings {
592
+
593
+
594
+ protected function register_settings() {
595
+
596
+ $this->register_setting( 'test-setting-a', Setting::TYPE_STRING, [
597
+ 'name' => 'Test Setting A',
598
+ 'description' => 'Description of setting A',
599
+ ] );
600
+
601
+ $this->register_setting( 'test-setting-b', Setting::TYPE_INTEGER, [
602
+ 'name' => 'Test Setting B',
603
+ 'description' => 'Description of setting B',
604
+ 'default' => 3600,
605
+ ] );
606
+
607
+ $this->register_setting( 'test-setting-c', Setting::TYPE_BOOLEAN, [
608
+ 'name' => 'Test Setting C',
609
+ 'description' => 'Description of setting C',
610
+ 'default' => true,
611
+ ] );
612
+
613
+ update_option( "{$this->get_option_name_prefix()}_{$this->settings['test-setting-a']->get_id()}", 'something' );
614
+ update_option( "{$this->get_option_name_prefix()}_{$this->settings['test-setting-b']->get_id()}", '1729' );
615
+ update_option( "{$this->get_option_name_prefix()}_{$this->settings['test-setting-c']->get_id()}", 'yes' );
616
+ }
617
+
618
+
619
+ };
620
+ }
621
+
622
+ return $this->settings;
623
+ }
624
+
625
+
626
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/Settings_API/SettingTest.php ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting;
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Exception;
5
+
6
+ class SettingTest extends \Codeception\TestCase\WPTestCase {
7
+
8
+
9
+ /** @var \IntegrationTester */
10
+ protected $tester;
11
+
12
+
13
+ protected function _before() {
14
+
15
+ }
16
+
17
+
18
+ protected function _after() {
19
+
20
+ }
21
+
22
+
23
+ /** Tests *********************************************************************************************************/
24
+
25
+
26
+ /**
27
+ * @see Setting::set_default()
28
+ *
29
+ * @param mixed $value default value to try and set
30
+ * @param string $expected expected default value
31
+ * @param bool $is_multi whether the setting should be multi
32
+ *
33
+ * @dataProvider provider_set_default
34
+ */
35
+ public function test_set_default( $value, $expected, $is_multi = false ) {
36
+
37
+ $setting = new Setting();
38
+ $setting->set_type( Setting::TYPE_STRING );
39
+ $setting->set_is_multi( $is_multi );
40
+ $setting->set_default( $value );
41
+
42
+ $this->assertSame( $expected, $setting->get_default() );
43
+ }
44
+
45
+
46
+ /** @see test_set_default() */
47
+ public function provider_set_default() {
48
+
49
+ return [
50
+ [ 'valid', 'valid' ],
51
+ [ 1, null ],
52
+ [ [ 'string-0', 'string-1' ], [ 'string-0', 'string-1' ], true ],
53
+ [ [ 'string-0', 1 ], [ 'string-0' ], true ],
54
+ [ [ 1, 2 ], null, true ],
55
+ [ [], null, true ],
56
+ [ 'valid', [ 'valid' ], true ],
57
+ [ 1, null, true ],
58
+ [ null, null ],
59
+ [ null, null, true ],
60
+ ];
61
+ }
62
+
63
+
64
+ /**
65
+ * @see Setting::update_value()
66
+ *
67
+ * @param mixed $value value to pass to method
68
+ * @param string $type setting type
69
+ * @param array $options setting options
70
+ * @param mixed $expected setting value after execution
71
+ * @param bool $exception whether an exception is expected
72
+ *
73
+ * @dataProvider provider_update_value
74
+ */
75
+ public function test_update_value( $value, $type, $options, $expected, $exception ) {
76
+
77
+ if ( $exception ) {
78
+ $this->expectException( SV_WC_Plugin_Exception::class );
79
+ }
80
+
81
+ $setting = new Setting();
82
+ $setting->set_type( $type );
83
+ $setting->set_options( $options );
84
+
85
+ $setting->update_value( $value );
86
+
87
+ $this->assertSame( $expected, $setting->get_value() );
88
+ }
89
+
90
+
91
+ /**
92
+ * Provider for test_update_value()
93
+ *
94
+ * @return array
95
+ */
96
+ public function provider_update_value() {
97
+
98
+ require_once( 'woocommerce/Settings_API/Setting.php' );
99
+
100
+ return [
101
+ [ 'valid', Setting::TYPE_STRING, [], 'valid', false ],
102
+ [ 123, Setting::TYPE_STRING, [], null, true ],
103
+ [ 'green', Setting::TYPE_STRING, [ 'green', 'red' ], 'green', false ],
104
+ [ 'not an option', Setting::TYPE_STRING, [ 'green', 'red' ], null, true ],
105
+
106
+ [ 'https://skyverge.com/', Setting::TYPE_URL, [], 'https://skyverge.com/', false ],
107
+ [ 'file:///tmp/', Setting::TYPE_URL, [], null, true ],
108
+ [ 'https://skyverge.com/', Setting::TYPE_URL, [ 'https://skyverge.com/', 'http://skyverge.com/' ], 'https://skyverge.com/', false ],
109
+ [ 'https://google.com/', Setting::TYPE_URL, [ 'https://skyverge.com/', 'http://skyverge.com/' ], null, true ],
110
+
111
+ [ 'test@example.com', Setting::TYPE_EMAIL, [], 'test@example.com', false ],
112
+ [ 'not-an-email.com', Setting::TYPE_EMAIL, [], null, true ],
113
+ [ 'test@example.com', Setting::TYPE_EMAIL, [ 'test@example.com' ], 'test@example.com', false ],
114
+ [ 'another@example.com', Setting::TYPE_EMAIL, [ 'test@example.com' ], null, true ],
115
+
116
+ [ 12345, Setting::TYPE_INTEGER, [], 12345, false ],
117
+ [ 1.345, Setting::TYPE_INTEGER, [], null, true ],
118
+ [ '234', Setting::TYPE_INTEGER, [], null, true ],
119
+ [ 1, Setting::TYPE_INTEGER, [ 1, 2 ], 1, false ],
120
+ [ 3, Setting::TYPE_INTEGER, [ 1, 2 ], null, true ],
121
+
122
+ [ 12345, Setting::TYPE_FLOAT, [], 12345, false ],
123
+ [ 1.345, Setting::TYPE_FLOAT, [], 1.345, false ],
124
+ [ '234', Setting::TYPE_FLOAT, [], null, true ],
125
+ [ 1.5, Setting::TYPE_FLOAT, [ 1.5, 2.5 ], 1.5, false ],
126
+ [ 3.5, Setting::TYPE_FLOAT, [ 1.5, 2.5 ], null, true ],
127
+
128
+ [ true, Setting::TYPE_BOOLEAN, [], true, false ],
129
+ [ 'yes', Setting::TYPE_BOOLEAN, [], null, true ],
130
+ [ 1, Setting::TYPE_BOOLEAN, [], null, true ],
131
+ // it beats me why someone would have a boolean setting with only one option, but in theory it is possible
132
+ [ true, Setting::TYPE_BOOLEAN, [ true ], true, false ],
133
+ [ false, Setting::TYPE_BOOLEAN, [ true ], null, true ],
134
+ ];
135
+ }
136
+
137
+
138
+ /**
139
+ * @see Setting::validate_value()
140
+ *
141
+ * @param mixed $value value to pass to method
142
+ * @param string $type setting type
143
+ * @param bool $expected whether the value should be considered valid or not
144
+ *
145
+ * @dataProvider provider_validate_value
146
+ */
147
+ public function test_validate_value( $value, $type, $expected ) {
148
+
149
+ $setting = new Setting();
150
+ $setting->set_type( $type );
151
+
152
+ $this->assertSame( $expected, $setting->validate_value( $value ) );
153
+ }
154
+
155
+
156
+ /**
157
+ * Provider for test_validate_value()
158
+ *
159
+ * @return array
160
+ */
161
+ public function provider_validate_value() {
162
+
163
+ require_once( 'woocommerce/Settings_API/Setting.php' );
164
+
165
+ return [
166
+ [ 'example', Setting::TYPE_STRING, true ],
167
+ [ 3.1415926, Setting::TYPE_STRING, false ],
168
+
169
+ [ 'https://skyverge.com/', Setting::TYPE_URL, true ],
170
+ [ 'file:///tmp/', Setting::TYPE_URL, false ],
171
+ [ 'example', Setting::TYPE_URL, false ],
172
+
173
+ [ 'test@example.com', Setting::TYPE_EMAIL, true ],
174
+ [ 'not-an-email.com', Setting::TYPE_EMAIL, false ],
175
+ [ '', Setting::TYPE_EMAIL, false ],
176
+
177
+ [ 12345, Setting::TYPE_INTEGER, true ],
178
+ [ 1.345, Setting::TYPE_INTEGER, false ],
179
+ [ '234', Setting::TYPE_INTEGER, false ],
180
+ [ '2.4', Setting::TYPE_INTEGER, false ],
181
+ [ 'hey', Setting::TYPE_INTEGER, false ],
182
+
183
+ [ 12345, Setting::TYPE_FLOAT, true ],
184
+ [ 1.345, Setting::TYPE_FLOAT, true ],
185
+ [ '234', Setting::TYPE_FLOAT, false ],
186
+ [ '2.4', Setting::TYPE_FLOAT, false ],
187
+ [ 'hey', Setting::TYPE_FLOAT, false ],
188
+
189
+ [ true, Setting::TYPE_BOOLEAN, true ],
190
+ [ false, Setting::TYPE_BOOLEAN, true ],
191
+ [ 'yes', Setting::TYPE_BOOLEAN, false ],
192
+ [ 'no', Setting::TYPE_BOOLEAN, false ],
193
+ [ 1, Setting::TYPE_BOOLEAN, false ],
194
+ [ 0, Setting::TYPE_BOOLEAN, false ],
195
+ ];
196
+ }
197
+
198
+
199
+ /**
200
+ * @see Setting::set_options()
201
+ *
202
+ * @param string $setting_type setting type
203
+ * @param array $input input options
204
+ * @param array $expected expected return options
205
+ *
206
+ * @dataProvider provider_set_options
207
+ */
208
+ public function test_set_options( $setting_type, $input, $expected ) {
209
+
210
+ $setting = new Setting();
211
+ $setting->set_type( $setting_type );
212
+ $setting->set_options( $input );
213
+
214
+ $this->assertEquals( $expected, $setting->get_options() );
215
+ }
216
+
217
+
218
+ /**
219
+ * Provider for test_set_options()
220
+ *
221
+ * @return array
222
+ */
223
+ public function provider_set_options() {
224
+
225
+ require_once( 'woocommerce/Settings_API/Setting.php' );
226
+
227
+ return [
228
+ [ Setting::TYPE_STRING, [ 'example 1', 'example 2', 0 ], [ 'example 1', 'example 2' ] ],
229
+ [ Setting::TYPE_URL, [ 'http://www.example1.test', 'https://www.example2.test', 'invalid-url' ], [ 'http://www.example1.test', 'https://www.example2.test' ] ],
230
+ [ Setting::TYPE_EMAIL, [ 'example@example1.test', 'example@example2.test', 'invalid-email' ], [ 'example@example1.test', 'example@example2.test' ] ],
231
+ [ Setting::TYPE_INTEGER, [ - 1, 1, 2, 2.4 ], [ - 1, 1, 2 ] ],
232
+ [ Setting::TYPE_FLOAT, [ 1.5, 2.5, - 3.0, 'invalid-float' ], [ 1.5, 2.5, - 3.0 ] ],
233
+ [ Setting::TYPE_BOOLEAN, [ true, false, 'invalid-boolean' ], [ true, false ] ],
234
+ ];
235
+ }
236
+
237
+
238
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/GatewayPluginTest.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Tests for the gateway plugin class.
5
+ *
6
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Plugin
7
+ */
8
+ class GatewayPluginTest extends \Codeception\TestCase\WPTestCase {
9
+
10
+
11
+ /** @var \IntegrationTester */
12
+ protected $tester;
13
+
14
+ /** @var \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin instance */
15
+ protected $plugin;
16
+
17
+
18
+ protected function _before() {
19
+
20
+
21
+ }
22
+
23
+
24
+ protected function _after() {
25
+
26
+
27
+ }
28
+
29
+
30
+ /** Tests *********************************************************************************************************/
31
+
32
+
33
+ /**
34
+ * Tests get_id.
35
+ */
36
+ public function test_get_id() {
37
+
38
+ $this->assertEquals( 'gateway_test_plugin', $this->get_plugin()->get_id() );
39
+ }
40
+
41
+
42
+ /** Helper methods ************************************************************************************************/
43
+
44
+
45
+ /**
46
+ * Gets the plugin instance.
47
+ *
48
+ * @return \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin
49
+ */
50
+ protected function get_plugin() {
51
+
52
+ if ( null === $this->plugin ) {
53
+ $this->plugin = sv_wc_gateway_test_plugin();
54
+ }
55
+
56
+ return $this->plugin;
57
+ }
58
+
59
+
60
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/MyPaymentMethodsTest.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_My_Payment_Methods;
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Plugin;
5
+
6
+ /**
7
+ * Tests for the SV_WC_Payment_Gateway_My_Payment_Methods class.
8
+ *
9
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_My_Payment_Methods
10
+ */
11
+ class MyPaymentMethodsTest extends \Codeception\TestCase\WPTestCase {
12
+
13
+
14
+ /** @var \IntegrationTester */
15
+ protected $tester;
16
+
17
+ /** @var \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin instance */
18
+ protected $plugin;
19
+
20
+
21
+ protected function _before() {
22
+
23
+ }
24
+
25
+
26
+ protected function _after() {
27
+
28
+
29
+ }
30
+
31
+
32
+ /** Tests *********************************************************************************************************/
33
+
34
+
35
+ /**
36
+ * @see SV_WC_Payment_Gateway_My_Payment_Methods::get_js_handler_class_name.
37
+ */
38
+ public function test_get_js_handler_class_name() {
39
+
40
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_Plugin::class, 'get_my_payment_methods_instance' );
41
+ $method->setAccessible( true );
42
+
43
+ $payment_methods = $method->invoke( $this->get_plugin() );
44
+
45
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_My_Payment_Methods::class, 'get_js_handler_class_name' );
46
+ $method->setAccessible( true );
47
+
48
+ $result = $method->invoke( $payment_methods );
49
+
50
+ $this->assertNotEmpty( $result );
51
+ $this->assertStringContainsString( 'SV_WC_Payment_Methods_Handler', $result );
52
+ $this->assertNotEquals( 'SV_WC_Payment_Methods_Handler', $result );
53
+ }
54
+
55
+
56
+ /**
57
+ * @see SV_WC_Payment_Gateway_My_Payment_Methods::get_js_handler_args.
58
+ */
59
+ public function test_get_js_handler_args() {
60
+
61
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_Plugin::class, 'get_my_payment_methods_instance' );
62
+ $method->setAccessible( true );
63
+
64
+ $payment_methods = $method->invoke( $this->get_plugin() );
65
+
66
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_My_Payment_Methods::class, 'get_js_handler_args' );
67
+ $method->setAccessible( true );
68
+
69
+ $result = $method->invoke( $payment_methods );
70
+
71
+ $expected_result = [
72
+ 'id' => $this->get_plugin()->get_id(),
73
+ 'slug' => $this->get_plugin()->get_id_dasherized(),
74
+ 'has_core_tokens' => false,
75
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
76
+ 'ajax_nonce' => wp_create_nonce( 'wc_' . $this->get_plugin()->get_id() . '_save_payment_method' ),
77
+ 'i18n' => [
78
+ 'edit_button' => esc_html__( 'Edit', 'woocommerce-plugin-framework' ),
79
+ 'cancel_button' => esc_html__( 'Cancel', 'woocommerce-plugin-framework' ),
80
+ 'save_error' => esc_html__( 'Oops, there was an error updating your payment method. Please try again.', 'woocommerce-plugin-framework' ),
81
+ 'delete_ays' => esc_html__( 'Are you sure you want to delete this payment method?', 'woocommerce-plugin-framework' ),
82
+ ],
83
+ ];
84
+
85
+ $this->assertNotEmpty( $result );
86
+
87
+ // because assertArraySubset is being deprecated
88
+ foreach ( $expected_result as $key => $value ) {
89
+
90
+ $this->assertArrayHasKey( $key, $result );
91
+ $this->assertSame( $value, $result[ $key ] );
92
+ }
93
+ }
94
+
95
+
96
+ /**
97
+ * @see SV_WC_Payment_Gateway_My_Payment_Methods::render_js.
98
+ */
99
+ public function test_render_js() {
100
+
101
+ global $wc_queued_js;
102
+
103
+ // reset queued scripts
104
+ $wc_queued_js = '';
105
+
106
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_Plugin::class, 'get_my_payment_methods_instance' );
107
+ $method->setAccessible( true );
108
+
109
+ $payment_methods = $method->invoke( $this->get_plugin() );
110
+
111
+ $property = new ReflectionProperty( SV_WC_Payment_Gateway_My_Payment_Methods::class, 'has_tokens' );
112
+ $property->setAccessible( true );
113
+
114
+ $property->setValue( $payment_methods, true );
115
+
116
+ $payment_methods->render_js();
117
+
118
+ $this->assertStringContainsString( 'function load_gateway_test_plugin_payment_methods_handler', $wc_queued_js );
119
+ $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_payment_methods_handler_v5_10_0_loaded\', load_gateway_test_plugin_payment_methods_handler );', $wc_queued_js );
120
+ }
121
+
122
+
123
+ /** Helper methods ************************************************************************************************/
124
+
125
+
126
+ /**
127
+ * Gets the plugin instance.
128
+ *
129
+ * @return \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin
130
+ */
131
+ protected function get_plugin() {
132
+
133
+ if ( null === $this->plugin ) {
134
+ $this->plugin = sv_wc_gateway_test_plugin();
135
+ }
136
+
137
+ return $this->plugin;
138
+ }
139
+
140
+
141
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/PaymentFormTest.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Payment_Form;
4
+
5
+ /**
6
+ * Tests for the SV_WC_Payment_Gateway_Payment_Form class.
7
+ *
8
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Payment_Form
9
+ */
10
+ class PaymentFormTest extends \Codeception\TestCase\WPTestCase {
11
+
12
+
13
+ /** @var \IntegrationTester */
14
+ protected $tester;
15
+
16
+ /** @var \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin instance */
17
+ protected $plugin;
18
+
19
+
20
+ protected function _before() {
21
+
22
+ }
23
+
24
+
25
+ protected function _after() {
26
+
27
+
28
+ }
29
+
30
+
31
+ /** Tests *********************************************************************************************************/
32
+
33
+
34
+ /**
35
+ * @see SV_WC_Payment_Gateway_Payment_Form::get_js_handler_class_name.
36
+ */
37
+ public function test_get_js_handler_class_name() {
38
+
39
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_Payment_Form::class, 'get_js_handler_class_name' );
40
+ $method->setAccessible( true );
41
+
42
+ $result = $method->invoke( $this->get_plugin()->get_gateway()->get_payment_form_instance() );
43
+
44
+ $this->assertNotEmpty( $result );
45
+ $this->assertStringContainsString( 'SV_WC_Payment_Form_Handler', $result );
46
+ $this->assertNotEquals( 'SV_WC_Payment_Form_Handler', $result );
47
+ }
48
+
49
+
50
+ /**
51
+ * @see SV_WC_Payment_Gateway_Payment_Form::get_js_handler_args.
52
+ */
53
+ public function test_get_js_handler_args() {
54
+
55
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_Payment_Form::class, 'get_js_handler_args' );
56
+ $method->setAccessible( true );
57
+
58
+ $result = $method->invoke( $this->get_plugin()->get_gateway()->get_payment_form_instance() );
59
+
60
+ $expected_result = [
61
+ 'plugin_id' => $this->get_plugin()->get_id(),
62
+ 'id' => $this->get_plugin()->get_gateway()->get_id(),
63
+ 'id_dasherized' => $this->get_plugin()->get_gateway()->get_id_dasherized(),
64
+ 'type' => $this->get_plugin()->get_gateway()->get_payment_type(),
65
+ 'csc_required' => $this->get_plugin()->get_gateway()->csc_enabled(),
66
+ 'csc_required_for_tokens' => $this->get_plugin()->get_gateway()->csc_enabled_for_tokens(),
67
+ ];
68
+
69
+ $this->assertNotEmpty( $result );
70
+
71
+ // because assertArraySubset is being deprecated
72
+ foreach ( $expected_result as $key => $value ) {
73
+
74
+ $this->assertArrayHasKey( $key, $result );
75
+ $this->assertSame( $value, $result[ $key ] );
76
+ }
77
+ }
78
+
79
+
80
+ /**
81
+ * @see SV_WC_Payment_Gateway_Payment_Form::render_js.
82
+ */
83
+ public function test_render_js() {
84
+
85
+ global $wc_queued_js;
86
+
87
+ // reset queued scripts
88
+ $wc_queued_js = '';
89
+
90
+ $this->get_plugin()->get_gateway()->get_payment_form_instance()->render_js();
91
+
92
+ $this->assertStringContainsString( 'function load_test_gateway_payment_form_handler', $wc_queued_js );
93
+ $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_payment_form_handler_v5_10_0_loaded\', load_test_gateway_payment_form_handler );', $wc_queued_js );
94
+ }
95
+
96
+
97
+ /** Helper methods ************************************************************************************************/
98
+
99
+
100
+ /**
101
+ * Gets the plugin instance.
102
+ *
103
+ * @return \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin
104
+ */
105
+ protected function get_plugin() {
106
+
107
+ if ( null === $this->plugin ) {
108
+ $this->plugin = sv_wc_gateway_test_plugin();
109
+ }
110
+
111
+ return $this->plugin;
112
+ }
113
+
114
+
115
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Token_Test.php ADDED
@@ -0,0 +1,604 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
4
+
5
+ /**
6
+ * Tests for the payment token object
7
+ *
8
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Payment_Token
9
+ */
10
+ class SV_WC_Payment_Gateway_Payment_Token_Test extends \Codeception\TestCase\WPTestCase {
11
+
12
+
13
+ /** @var \IntegrationTester */
14
+ protected $tester;
15
+
16
+
17
+ protected function _before() {
18
+
19
+
20
+ }
21
+
22
+
23
+ protected function _after() {
24
+
25
+
26
+ }
27
+
28
+
29
+ /** Tests *********************************************************************************************************/
30
+
31
+
32
+ /**
33
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::read()
34
+ *
35
+ * @dataProvider provider_read_sets_token_type
36
+ */
37
+ public function test_read_sets_token_type( $core_token, $expected_type ) {
38
+
39
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $core_token );
40
+
41
+ $this->assertEquals( $expected_type, $token->get_type() );
42
+ $this->assertTrue( $token->{"is_$expected_type"}() );
43
+ }
44
+
45
+
46
+ /**
47
+ * Provides test data for test_read_sets_token_type()
48
+ */
49
+ public function provider_read_sets_token_type() {
50
+
51
+ return [
52
+ 'credit_card' => [ new WC_Payment_Token_CC(), 'credit_card' ],
53
+ 'echeck' => [ new WC_Payment_Token_ECheck(), 'echeck' ],
54
+ ];
55
+ }
56
+
57
+
58
+ /**
59
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::read()
60
+ *
61
+ * @dataProvider provider_read_sets_core_token_metadata
62
+ */
63
+ public function test_read_sets_core_token_metadata( $meta_key, $meta_value, $method_name ) {
64
+
65
+ $core_token = $this->get_new_woocommerce_credit_card_token();
66
+
67
+ $core_token->add_meta_data( $meta_key, $meta_value );
68
+
69
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $core_token );
70
+
71
+ $this->assertEquals( $meta_value, $token->{$method_name}() );
72
+ }
73
+
74
+
75
+ /**
76
+ * Provides test data for test_read_sets_core_token_metadata()
77
+ */
78
+ public function provider_read_sets_core_token_metadata() {
79
+ return [
80
+ 'nickname' => [ 'nickname', 'personal card', 'get_nickname' ],
81
+ 'billing_hash' => [ 'billing_hash', 'a5df', 'get_billing_hash' ],
82
+ 'account_type' => [ 'account_type', 'savings', 'get_account_type' ],
83
+ ];
84
+ }
85
+
86
+
87
+ /**
88
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_id()
89
+ */
90
+ public function test_get_id() {
91
+
92
+ $token = $this->get_new_credit_card_token();
93
+
94
+ $this->assertEquals( '12345', $token->get_id() );
95
+
96
+ $token = $this->get_new_credit_card_token( 12345 );
97
+
98
+ $this->assertIsString( $token->get_id() );
99
+ }
100
+
101
+
102
+ /**
103
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_gateway_id()
104
+ */
105
+ public function test_get_gateway_id() {
106
+
107
+ $token = $this->get_new_credit_card_token();
108
+
109
+ $this->assertEquals( 'test_gateway', $token->get_gateway_id() );
110
+ }
111
+
112
+
113
+ /**
114
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_gateway_id()
115
+ */
116
+ public function test_set_gateway_id() {
117
+
118
+ $token = $this->get_new_credit_card_token();
119
+
120
+ $token->set_gateway_id( 'another_gateway' );
121
+
122
+ $this->assertEquals( 'another_gateway', $token->get_gateway_id() );
123
+ }
124
+
125
+
126
+ /**
127
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_user_id()
128
+ */
129
+ public function test_get_user_id() {
130
+
131
+ $token = $this->get_new_credit_card_token();
132
+
133
+ $this->assertEquals( 1, $token->get_user_id() );
134
+ }
135
+
136
+
137
+ /**
138
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_user_id()
139
+ *
140
+ * @dataProvider provider_set_user_id
141
+ */
142
+ public function test_set_user_id( $value, $expected ) {
143
+
144
+ $token = $this->get_new_credit_card_token();
145
+
146
+ $token->set_user_id( $value );
147
+
148
+ $this->assertEquals( $expected, $token->get_user_id() );
149
+ }
150
+
151
+
152
+ /**
153
+ * Provider for test_set_user_id().
154
+ *
155
+ * @return array
156
+ */
157
+ public function provider_set_user_id() {
158
+
159
+ return [
160
+ [ 2, 2 ],
161
+ [ 'invalid', 0 ],
162
+ ];
163
+ }
164
+
165
+
166
+ /**
167
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::is_default()
168
+ */
169
+ public function test_is_default() {
170
+
171
+ $token = $this->get_new_credit_card_token();
172
+
173
+ $this->assertTrue( $token->is_default() );
174
+ }
175
+
176
+
177
+ /**
178
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_default()
179
+ */
180
+ public function test_set_default() {
181
+
182
+ $token = $this->get_new_credit_card_token();
183
+
184
+ $token->set_default( false );
185
+
186
+ $this->assertFalse( $token->is_default() );
187
+ }
188
+
189
+
190
+ /**
191
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::is_credit_card()
192
+ */
193
+ public function test_is_credit_card() {
194
+
195
+ $token = $this->get_new_credit_card_token();
196
+
197
+ $this->assertTrue( $token->is_credit_card() );
198
+
199
+ $token = $this->get_new_echeck_token();
200
+
201
+ $this->assertFalse( $token->is_credit_card() );
202
+ }
203
+
204
+
205
+ /**
206
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::is_echeck()
207
+ */
208
+ public function test_is_echeck() {
209
+
210
+ $token = $this->get_new_echeck_token();
211
+
212
+ $this->assertTrue( $token->is_echeck() );
213
+
214
+ $token = $this->get_new_credit_card_token();
215
+
216
+ $this->assertFalse( $token->is_echeck() );
217
+ }
218
+
219
+
220
+ /**
221
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_type()
222
+ */
223
+ public function test_get_type() {
224
+
225
+ $token = $this->get_new_credit_card_token();
226
+
227
+ $this->assertEquals( 'credit_card', $token->get_type() );
228
+ }
229
+
230
+
231
+ /**
232
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_card_type()
233
+ */
234
+ public function test_get_card_type() {
235
+
236
+ $token = $this->get_new_credit_card_token();
237
+
238
+ $this->assertEquals( Framework\SV_WC_Payment_Gateway_Helper::CARD_TYPE_VISA, $token->get_card_type() );
239
+
240
+ $token = $this->get_new_echeck_token();
241
+
242
+ $this->assertNull( $token->get_card_type() );
243
+ }
244
+
245
+
246
+ /**
247
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_card_type()
248
+ */
249
+ public function test_set_card_type() {
250
+
251
+ $token = $this->get_new_credit_card_token();
252
+
253
+ $token->set_card_type( Framework\SV_WC_Payment_Gateway_Helper::CARD_TYPE_MASTERCARD );
254
+
255
+ $this->assertEquals( Framework\SV_WC_Payment_Gateway_Helper::CARD_TYPE_MASTERCARD, $token->get_card_type() );
256
+ }
257
+
258
+
259
+ /**
260
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_account_type()
261
+ */
262
+ public function test_get_account_type() {
263
+
264
+ $token = $this->get_new_echeck_token();
265
+
266
+ $this->assertEquals( 'checking', $token->get_account_type() );
267
+
268
+ $token = $this->get_new_credit_card_token();
269
+
270
+ $this->assertNull( $token->get_account_type() );
271
+ }
272
+
273
+
274
+ /**
275
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_account_type()
276
+ */
277
+ public function test_set_account_type() {
278
+
279
+ $token = $this->get_new_echeck_token();
280
+
281
+ $token->set_account_type( 'savings' );
282
+
283
+ $this->assertEquals( 'savings', $token->get_account_type() );
284
+ }
285
+
286
+
287
+ /**
288
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_type_full()
289
+ */
290
+ public function test_get_type_full() {
291
+
292
+ $token = $this->get_new_credit_card_token();
293
+
294
+ $this->assertEquals( 'Visa', $token->get_type_full() );
295
+
296
+ $token = $this->get_new_echeck_token();
297
+
298
+ $this->assertEquals( 'Checking Account', $token->get_type_full() );
299
+ }
300
+
301
+
302
+ /**
303
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_last_four()
304
+ */
305
+ public function test_get_last_four() {
306
+
307
+ $token = $this->get_new_credit_card_token();
308
+
309
+ $this->assertEquals( '1111', $token->get_last_four() );
310
+ }
311
+
312
+
313
+ /**
314
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_last_four()
315
+ */
316
+ public function test_set_last_four() {
317
+
318
+ $token = $this->get_new_credit_card_token();
319
+
320
+ $token->set_last_four( '4242' );
321
+
322
+ $this->assertEquals( '4242', $token->get_last_four() );
323
+ }
324
+
325
+
326
+ /**
327
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_exp_month()
328
+ */
329
+ public function test_get_exp_month() {
330
+
331
+ $token = $this->get_new_credit_card_token();
332
+
333
+ $this->assertEquals( '01', $token->get_exp_month() );
334
+
335
+ $token = $this->get_new_echeck_token();
336
+
337
+ $this->assertNull( $token->get_exp_month() );
338
+ }
339
+
340
+
341
+ /**
342
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_exp_month()
343
+ */
344
+ public function test_set_exp_month() {
345
+
346
+ $token = $this->get_new_credit_card_token();
347
+
348
+ $token->set_exp_month( '02' );
349
+
350
+ $this->assertEquals( '02', $token->get_exp_month() );
351
+ }
352
+
353
+
354
+ /**
355
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_exp_year()
356
+ */
357
+ public function test_get_exp_year() {
358
+
359
+ $token = $this->get_new_credit_card_token();
360
+
361
+ $this->assertEquals( '2020', $token->get_exp_year() );
362
+
363
+ $token = $this->get_new_echeck_token();
364
+
365
+ $this->assertNull( $token->get_exp_year() );
366
+ }
367
+
368
+
369
+ /**
370
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_exp_year()
371
+ */
372
+ public function test_set_exp_year() {
373
+
374
+ $token = $this->get_new_credit_card_token();
375
+
376
+ $token->set_exp_year( '2021' );
377
+
378
+ $this->assertEquals( '2021', $token->get_exp_year() );
379
+ }
380
+
381
+
382
+ /**
383
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_exp_date()
384
+ */
385
+ public function test_get_exp_date() {
386
+
387
+ $token = $this->get_new_credit_card_token();
388
+
389
+ $this->assertEquals( '01/20', $token->get_exp_date() );
390
+ }
391
+
392
+
393
+ /**
394
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_image_url()
395
+ */
396
+ public function test_set_image_url() {
397
+
398
+ $token = $this->get_new_credit_card_token();
399
+
400
+ $token->set_image_url( 'https://example.com/image.png' );
401
+
402
+ $this->assertEquals( 'https://example.com/image.png', $token->get_image_url() );
403
+ }
404
+
405
+
406
+ /**
407
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_nickname()
408
+ */
409
+ public function test_get_nickname() {
410
+
411
+ $token = $this->get_new_credit_card_token();
412
+
413
+ $this->assertEquals( '', $token->get_nickname() );
414
+ }
415
+
416
+
417
+ /**
418
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_nickname()
419
+ */
420
+ public function test_set_nickname() {
421
+
422
+ $token = $this->get_new_credit_card_token();
423
+
424
+ $token->set_nickname( 'Work' );
425
+
426
+ $this->assertEquals( 'Work', $token->get_nickname() );
427
+ }
428
+
429
+
430
+ /**
431
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_billing_hash()
432
+ */
433
+ public function test_get_billing_hash() {
434
+
435
+ $token = $this->get_new_credit_card_token();
436
+
437
+ $this->assertEquals( '', $token->get_billing_hash() );
438
+ }
439
+
440
+
441
+ /**
442
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_billing_hash()
443
+ */
444
+ public function test_set_billing_hash() {
445
+
446
+ $token = $this->get_new_credit_card_token();
447
+
448
+ $token->set_billing_hash( 'asdf' );
449
+
450
+ $this->assertEquals( 'asdf', $token->get_billing_hash() );
451
+ }
452
+
453
+
454
+ /**
455
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_environment()
456
+ *
457
+ * @dataProvider provider_get_environment
458
+ */
459
+ public function test_get_environment( $stored_environment, $expected_environment ) {
460
+
461
+ $woocommerce_token = $this->get_new_woocommerce_credit_card_token();
462
+
463
+ $woocommerce_token->add_meta_data( 'environment', $stored_environment );
464
+
465
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $woocommerce_token );
466
+
467
+ $this->assertSame( $expected_environment, $token->get_environment() );
468
+ }
469
+
470
+
471
+ /**
472
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::get_environment()
473
+ *
474
+ * @dataProvider provider_get_environment
475
+ */
476
+ public function test_get_environment_set_using_legacy_data( $stored_environment, $expected_environment ) {
477
+
478
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', array_merge(
479
+ $this->get_legacy_credit_card_token_data(),
480
+ [ 'environment' => $stored_environment ]
481
+ ) );
482
+
483
+ $this->assertSame( $expected_environment, $token->get_environment() );
484
+ }
485
+
486
+
487
+ /**
488
+ * Provides test data for test_get_environment().
489
+ *
490
+ * @return array
491
+ */
492
+ public function provider_get_environment() {
493
+
494
+ return [
495
+ 'metadata is set' => [ 'test_environment', 'test_environment' ],
496
+ 'empty metadata' => [ '', '' ],
497
+ 'metadata not set' => [ null, '' ],
498
+ ];
499
+ }
500
+
501
+
502
+ /**
503
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::set_environment()
504
+ */
505
+ public function test_set_environment() {
506
+
507
+ $token = $this->get_new_credit_card_token();
508
+
509
+ $token->set_environment( 'test' );
510
+
511
+ $this->assertEquals( 'test', $token->get_environment() );
512
+ }
513
+
514
+
515
+ /**
516
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Token::is_migrated()
517
+ */
518
+ public function test_is_migrated() {
519
+
520
+ $token = $this->get_new_credit_card_token();
521
+
522
+ $token->set_migrated( true );
523
+
524
+ $this->assertTrue( $token->is_migrated() );
525
+ }
526
+
527
+
528
+ /** Helper methods ************************************************************************************************/
529
+
530
+
531
+ /**
532
+ * Gets a new credit card payment token object.
533
+ *
534
+ * @param string|int $token_id a token id (normally a string), will default to "12345"
535
+ * @return Framework\SV_WC_Payment_Gateway_Payment_Token
536
+ */
537
+ private function get_new_credit_card_token( $token_id = '12345' ) {
538
+
539
+ return new Framework\SV_WC_Payment_Gateway_Payment_Token( $token_id, $this->get_legacy_credit_card_token_data() );
540
+ }
541
+
542
+
543
+ /**
544
+ * Gets legacy credit card token array data, as it would exist in user meta.
545
+ *
546
+ * @return array
547
+ */
548
+ private function get_legacy_credit_card_token_data() {
549
+
550
+ return [
551
+ 'type' => 'credit_card',
552
+ 'user_id' => 1,
553
+ 'gateway_id' => 'test_gateway',
554
+ 'default' => true,
555
+ 'last_four' => '1111',
556
+ 'card_type' => Framework\SV_WC_Payment_Gateway_Helper::CARD_TYPE_VISA,
557
+ 'exp_month' => '01',
558
+ 'exp_year' => '2020',
559
+ ];
560
+ }
561
+
562
+
563
+ /**
564
+ * Gets a new eCheck payment token object.
565
+ *
566
+ * @return Framework\SV_WC_Payment_Gateway_Payment_Token
567
+ */
568
+ private function get_new_echeck_token() {
569
+
570
+ return new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', [
571
+ 'type' => 'echeck',
572
+ 'user_id' => 1,
573
+ 'gateway_id' => 'test_gateway',
574
+ 'default' => true,
575
+ 'last_four' => '1111',
576
+ 'account_type' => 'checking',
577
+ ] );
578
+ }
579
+
580
+
581
+ /**
582
+ * Gets a new \WC_Payment_Token_CC object.
583
+ *
584
+ * @return \WC_Payment_Token_CC
585
+ */
586
+ private function get_new_woocommerce_credit_card_token() {
587
+
588
+ $token = new WC_Payment_Token_CC();
589
+
590
+ $token->set_user_id( 1 );
591
+ $token->set_token( '12345' );
592
+ $token->set_last4( '1111' );
593
+ $token->set_expiry_year( '2022' );
594
+ $token->set_expiry_month( '08' );
595
+ $token->set_card_type( Framework\SV_WC_Payment_Gateway_Helper::CARD_TYPE_VISA );
596
+
597
+ /** necessary so that \WC_Data::get_data() returns the props set above */
598
+ $token->save();
599
+
600
+ return $token;
601
+ }
602
+
603
+
604
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Tokens_Handler_Test.php ADDED
@@ -0,0 +1,408 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use \SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
4
+
5
+ /**
6
+ * Tests for the payment tokens handler object
7
+ *
8
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Payment_Tokens_Handler
9
+ */
10
+ class SV_WC_Payment_Gateway_Payment_Tokens_Handler_Test extends \Codeception\TestCase\WPTestCase {
11
+
12
+
13
+ /** @var \IntegrationTester */
14
+ protected $tester;
15
+
16
+
17
+ protected function _before() {
18
+
19
+
20
+ }
21
+
22
+
23
+ protected function _after() {
24
+
25
+
26
+ }
27
+
28
+
29
+ /**
30
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::add_token()
31
+ */
32
+ public function test_add_token() {
33
+
34
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() );
35
+
36
+ $token_id = $this->get_handler()->add_token( 1, $token );
37
+
38
+ $core_token = \WC_Payment_Tokens::get( $token_id );
39
+
40
+ $this->assertInstanceOf( \WC_Payment_Token::class, $core_token );
41
+ }
42
+
43
+
44
+ /**
45
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::add_token()
46
+ */
47
+ public function test_add_token_set_default() {
48
+
49
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() );
50
+ $token->set_default( true );
51
+
52
+ $this->get_handler()->add_token( 1, $token );
53
+
54
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '67890', $this->get_legacy_token_data() );
55
+ $token->set_default( true );
56
+
57
+ $this->get_handler()->add_token( 1, $token );
58
+
59
+ $token = $this->get_handler()->get_token( 1, '12345' );
60
+
61
+ $this->assertFalse( $token->is_default() );
62
+ }
63
+
64
+
65
+ /**
66
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::update_token()
67
+ */
68
+ public function test_update_token() {
69
+
70
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() );
71
+
72
+ $core_token_id = $token->save();
73
+
74
+ $token->set_exp_month( '02' );
75
+
76
+ $this->get_handler()->update_token( 1, $token );
77
+
78
+ $core_token = \WC_Payment_Tokens::get( $core_token_id );
79
+
80
+ $this->assertEquals( '02', $core_token->get_expiry_month() );
81
+ }
82
+
83
+
84
+ /**
85
+ * Tests that the local cache is updated when a token is updated.
86
+ *
87
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::update_token()
88
+ */
89
+ public function test_update_token_cache() {
90
+
91
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() );
92
+
93
+ // store the token initially
94
+ $this->get_handler()->update_token( 1, $token );
95
+
96
+ // prime the cache
97
+ $this->get_handler()->get_tokens( 1 );
98
+
99
+ $token->set_exp_month( '02' );
100
+
101
+ $this->get_handler()->update_token( 1, $token );
102
+
103
+ $token = $this->get_handler()->get_token( 1, $token->get_id() );
104
+
105
+ $this->assertEquals( '02', $token->get_exp_month() );
106
+ }
107
+
108
+
109
+ /**
110
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::delete_token()
111
+ */
112
+ public function test_delete_token() {
113
+
114
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() );
115
+
116
+ $token->set_user_id( 1 );
117
+ $token->set_gateway_id( 'test_gateway' );
118
+
119
+ $token_id = $token->save();
120
+
121
+ $this->get_handler()->delete_token( 1, $token );
122
+
123
+ $this->assertNull( \WC_Payment_Tokens::get( $token_id ) );
124
+ }
125
+
126
+
127
+ /**
128
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::delete_token()
129
+ */
130
+ public function test_delete_token_marks_another_token_as_default() {
131
+
132
+ $token_id = '12345';
133
+ $default_token_id = '45678';
134
+
135
+ // store test tokens
136
+ $tokens = [
137
+ '12345' => new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', [
138
+ 'type' => 'credit_card',
139
+ 'last_four' => '1111',
140
+ 'exp_month' => '01',
141
+ 'exp_year' => '20',
142
+ 'card_type' => 'visa',
143
+ 'default' => true,
144
+ ] ),
145
+ '45678' => new Framework\SV_WC_Payment_Gateway_Payment_Token( '45678', [
146
+ 'type' => 'credit_card',
147
+ 'last_four' => '2222',
148
+ 'exp_month' => '01',
149
+ 'exp_year' => '20',
150
+ 'card_type' => 'visa',
151
+ ] ),
152
+ ];
153
+
154
+ $this->get_handler()->update_tokens( 1, $tokens );
155
+
156
+ $this->get_handler()->delete_token( 1, $this->get_handler()->get_token( 1, $token_id ) );
157
+
158
+ $default_token = $this->get_handler()->get_token( 1, $default_token_id );
159
+
160
+ $this->assertTrue( $default_token->is_default() );
161
+
162
+ $core_token = $default_token->get_woocommerce_payment_token();
163
+
164
+ $this->assertTrue( $core_token->get_is_default() );
165
+ }
166
+
167
+
168
+ /**
169
+ * Ensures legacy token data is deleted when a core token is deleted.
170
+ *
171
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::delete_token()
172
+ */
173
+ public function test_delete_token_legacy() {
174
+
175
+ $token_data = $this->get_legacy_token_data();
176
+
177
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $token_data );
178
+
179
+ // store in user meta (legacy)
180
+ $this->get_handler()->update_legacy_token( 1, $token );
181
+
182
+ // store in core
183
+ $token->set_user_id( 1 );
184
+ $token->set_gateway_id( 'test_gateway' );
185
+ $token->save();
186
+
187
+ // delete from core
188
+ $this->get_handler()->delete_token( 1, $token );
189
+
190
+ $this->assertEmpty( $this->get_handler()->get_legacy_tokens( 1 ) );
191
+ }
192
+
193
+
194
+ /**
195
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::get_tokens()
196
+ *
197
+ * @dataProvider provider_get_tokens
198
+ */
199
+ public function test_get_tokens_retrieves_core_tokens( $token_environment, $requested_environment, array $found_tokens_ids ) {
200
+
201
+ // store a test core token
202
+ $core_token = new WC_Payment_Token_CC();
203
+ $user_id = 1;
204
+
205
+ $core_token->set_user_id( $user_id );
206
+ $core_token->set_gateway_id( sv_wc_test_plugin()->get_gateway()->get_id() );
207
+ $core_token->set_token( '12345' );
208
+ $core_token->set_last4( '1111' );
209
+ $core_token->set_expiry_year( '2022' );
210
+ $core_token->set_expiry_month( '08' );
211
+ $core_token->set_card_type( Framework\SV_WC_Payment_Gateway_Helper::CARD_TYPE_VISA );
212
+
213
+ $core_token->add_meta_data( 'environment', $token_environment );
214
+
215
+ $core_token->save();
216
+
217
+ // use a new instance of the payment tokens handler to bypass the handler's internal cache
218
+ $handler = new Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler( sv_wc_test_plugin()->get_gateway() );
219
+
220
+ $tokens = $handler->get_tokens( $user_id, [ 'environment_id' => $requested_environment ] );
221
+
222
+ $this->assertEquals( array_keys( $tokens ), $found_tokens_ids );
223
+
224
+ /** test that found tokens are instances of Framework\SV_WC_Payment_Gateway_Payment_Token */
225
+ foreach ( $found_tokens_ids as $found_token_id ) {
226
+ $this->assertInstanceOf( Framework\SV_WC_Payment_Gateway_Payment_Token::class, $tokens[ $found_token_id ] );
227
+ }
228
+ }
229
+
230
+
231
+ /**
232
+ * Provides test data for test_get_tokens_retrieves_core_tokens()
233
+ *
234
+ * @return array
235
+ */
236
+ public function provider_get_tokens() {
237
+
238
+ $token_id = '12345';
239
+
240
+ return [
241
+ 'same environment' => [ 'test_environment_a', 'test_environment_a', [ $token_id ] ],
242
+ 'different environment' => [ 'test_environment_a', 'test_environment_b', [] ],
243
+ ];
244
+ }
245
+
246
+
247
+ /**
248
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::update_tokens()
249
+ */
250
+ public function test_update_tokens() {
251
+
252
+ $tokens = [
253
+ new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() )
254
+ ];
255
+
256
+ $this->get_handler()->update_tokens( 1, $tokens );
257
+
258
+ $this->assertIsArray( \WC_Payment_Tokens::get_customer_tokens( 1, 'test_gateway' ) );
259
+ }
260
+
261
+
262
+ /**
263
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::get_user_meta_name()
264
+ *
265
+ * @dataProvider provider_get_user_meta_name
266
+ */
267
+ public function test_get_user_meta_name( $expected, $environment_id ) {
268
+
269
+ $this->assertEquals( $expected, $this->get_handler()->get_user_meta_name( $environment_id ) );
270
+ }
271
+
272
+
273
+ /**
274
+ * Provider for test_get_user_meta_name
275
+ * @return array
276
+ */
277
+ public function provider_get_user_meta_name() {
278
+
279
+ return [
280
+ [ '_wc_test_gateway_payment_tokens', null ],
281
+ [ '_wc_test_gateway_payment_tokens_test', 'test' ],
282
+ ];
283
+ }
284
+
285
+
286
+ /** Legacy token tests ********************************************************************************************/
287
+
288
+
289
+ /**
290
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::get_legacy_tokens()
291
+ *
292
+ * @dataProvider provider_legacy_tokens
293
+ */
294
+ public function test_get_legacy_tokens( $environment_id ) {
295
+
296
+ $user_id = 1;
297
+
298
+ // add fake user meta
299
+ update_user_meta( $user_id, $this->get_handler()->get_user_meta_name( $environment_id ), [
300
+ '12345' => $this->get_legacy_token_data(),
301
+ ] );
302
+
303
+ $tokens = $this->get_handler()->get_legacy_tokens( $user_id, $environment_id );
304
+
305
+ $this->assertArrayHasKey( '12345', $tokens );
306
+ }
307
+
308
+
309
+ /**
310
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::update_legacy_token()
311
+ *
312
+ * @dataProvider provider_legacy_tokens
313
+ */
314
+ public function test_update_legacy_token( $environment_id ) {
315
+
316
+ $user_id = 1;
317
+
318
+ // add fake user meta
319
+ update_user_meta( $user_id, $this->get_handler()->get_user_meta_name( $environment_id ), [
320
+ '12345' => $this->get_legacy_token_data(),
321
+ ] );
322
+
323
+ // change a property of the token
324
+ $token = new Framework\SV_WC_Payment_Gateway_Payment_Token( '12345', $this->get_legacy_token_data() );
325
+ $token->set_card_type( 'mastercard' );
326
+
327
+ $this->get_handler()->update_legacy_token( $user_id, $token, $environment_id );
328
+
329
+ // get the latest data
330
+ $tokens = $this->get_handler()->get_legacy_tokens( $user_id, $environment_id );
331
+
332
+ $token = current( $tokens );
333
+
334
+ // check that the token was updated
335
+ $this->assertEquals( 'mastercard', $token->get_card_type() );
336
+ }
337
+
338
+
339
+ /**
340
+ * @see Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler::delete_legacy_token()
341
+ *
342
+ * @dataProvider provider_legacy_tokens
343
+ */
344
+ public function test_delete_legacy_token( $environment_id ) {
345
+
346
+ $user_id = 1;
347
+
348
+ // add fake user meta
349
+ update_user_meta( $user_id, $this->get_handler()->get_user_meta_name( $environment_id ), [
350
+ '12345' => $this->get_legacy_token_data(),
351
+ ] );
352
+
353
+ // get the latest data
354
+ $tokens = $this->get_handler()->get_legacy_tokens( $user_id, $environment_id );
355
+
356
+ $token = current( $tokens );
357
+
358
+ $this->get_handler()->delete_legacy_token( $user_id, $token, $environment_id );
359
+
360
+ // get the latest data
361
+ $tokens = $this->get_handler()->get_legacy_tokens( $user_id, $environment_id );
362
+
363
+ // check that the token was updated
364
+ $this->assertArrayNotHasKey( '12345', $tokens );
365
+ }
366
+
367
+
368
+ /**
369
+ * Provider for test_get_user_meta_name
370
+ * @return array
371
+ */
372
+ public function provider_legacy_tokens() {
373
+
374
+ return [
375
+ 'production environment' => [ null ],
376
+ 'non-production environment' => [ 'test' ],
377
+ ];
378
+ }
379
+
380
+
381
+ /**
382
+ * Gets legacy token array data, as it would exist in user meta.
383
+ *
384
+ * @return array
385
+ */
386
+ private function get_legacy_token_data() {
387
+
388
+ return [
389
+ 'type' => 'credit_card',
390
+ 'last_four' => '1111',
391
+ 'exp_month' => '01',
392
+ 'exp_year' => '20',
393
+ 'card_type' => 'visa',
394
+ 'custom' => 'custom_value',
395
+ ];
396
+ }
397
+
398
+
399
+ /**
400
+ * @return Framework\SV_WC_Payment_Gateway_Payment_Tokens_Handler
401
+ */
402
+ private function get_handler() {
403
+
404
+ return sv_wc_test_plugin()->get_gateway()->get_payment_tokens_handler();
405
+ }
406
+
407
+
408
+ }
vendor/skyverge/wc-plugin-framework/tests/integration/payment-gateway/apple-pay/ApplePayFrontendTest.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Plugin;
4
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Apple_Pay;
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Apple_Pay_Frontend;
6
+
7
+ /**
8
+ * Tests for the SV_WC_Payment_Gateway_Apple_Pay_Frontend class.
9
+ *
10
+ * @see \SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Payment_Gateway_Apple_Pay_Frontend
11
+ */
12
+ class ApplePayFrontendTest extends \Codeception\TestCase\WPTestCase {
13
+
14
+
15
+ /** @var \IntegrationTester */
16
+ protected $tester;
17
+
18
+ /** @var \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin instance */
19
+ protected $plugin;
20
+
21
+
22
+ protected function _before() {
23
+
24
+ }
25
+
26
+
27
+ protected function _after() {
28
+
29
+
30
+ }
31
+
32
+
33
+ /** Tests *********************************************************************************************************/
34
+
35
+
36
+ /**
37
+ * @see SV_WC_Payment_Gateway_Apple_Pay_Frontend::get_js_handler_class_name.
38
+ */
39
+ public function test_get_js_handler_class_name() {
40
+
41
+ $frontend_instance = $this->get_frontend_instance();
42
+
43
+ $method = new ReflectionMethod( $frontend_instance, 'get_js_handler_class_name' );
44
+ $method->setAccessible( true );
45
+
46
+ $result = $method->invoke( $frontend_instance );
47
+
48
+ $this->assertNotEmpty( $result );
49
+ $this->assertStringContainsString( 'SV_WC_Apple_Pay_Handler', $result );
50
+ $this->assertNotEquals( 'SV_WC_Apple_Pay_Handler', $result );
51
+ }
52
+
53
+
54
+ /**
55
+ * @see SV_WC_Payment_Gateway_Apple_Pay_Frontend::get_js_handler_params.
56
+ */
57
+ public function test_get_js_handler_args() {
58
+
59
+ $frontend_instance = $this->get_frontend_instance();
60
+
61
+ $method = new ReflectionMethod( $frontend_instance, 'get_js_handler_args' );
62
+ $method->setAccessible( true );
63
+
64
+ $result = $method->invoke( $frontend_instance );
65
+
66
+ $get_handler_method = new ReflectionMethod( $frontend_instance, 'get_handler' );
67
+ $get_handler_method->setAccessible( true );
68
+
69
+ $expected_result = [
70
+ 'gateway_id' => $this->get_plugin()->get_gateway()->get_id(),
71
+ 'gateway_id_dasherized' => $this->get_plugin()->get_gateway()->get_id_dasherized(),
72
+ 'merchant_id' => $get_handler_method->invoke( $frontend_instance )->get_merchant_id(),
73
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
74
+ 'validate_nonce' => wp_create_nonce( 'wc_' . $this->get_plugin()->get_gateway()->get_id() . '_apple_pay_validate_merchant' ),
75
+ 'recalculate_totals_nonce' => wp_create_nonce( 'wc_' . $this->get_plugin()->get_gateway()->get_id() . '_apple_pay_recalculate_totals' ),
76
+ 'process_nonce' => wp_create_nonce( 'wc_' . $this->get_plugin()->get_gateway()->get_id() . '_apple_pay_process_payment' ),
77
+ 'generic_error' => __( 'An error occurred, please try again or try an alternate form of payment', 'woocommerce-plugin-framework' ),
78
+ ];
79
+
80
+ $this->assertNotEmpty( $result );
81
+
82
+ // because assertArraySubset is being deprecated
83
+ foreach ( $expected_result as $key => $value ) {
84
+
85
+ $this->assertArrayHasKey( $key, $result );
86
+ $this->assertSame( $value, $result[ $key ] );
87
+ }
88
+ }
89
+
90
+
91
+ /**
92
+ * @see SV_WC_Payment_Gateway_Apple_Pay_Frontend::enqueue_js_handler.
93
+ */
94
+ public function test_enqueue_js_handler() {
95
+
96
+ global $wc_queued_js;
97
+
98
+ // reset queued scripts
99
+ $wc_queued_js = '';
100
+
101
+ $frontend_instance = $this->get_frontend_instance();
102
+
103
+ $method = new ReflectionMethod( $frontend_instance, 'enqueue_js_handler' );
104
+ $method->setAccessible( true );
105
+
106
+ $method->invokeArgs( $frontend_instance, [[]] );
107
+
108
+ $this->assertStringContainsString( 'function load_test_gateway_apple_pay_handler', $wc_queued_js );
109
+ $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_apple_pay_handler_v5_10_0_loaded\', load_test_gateway_apple_pay_handler );', $wc_queued_js );
110
+ }
111
+
112
+
113
+ /** Helper methods ************************************************************************************************/
114
+
115
+
116
+ /**
117
+ * Gets the Apple Pay frontend instance.
118
+ *
119
+ * @return SV_WC_Payment_Gateway_Apple_Pay_Frontend
120
+ */
121
+ private function get_frontend_instance() {
122
+
123
+ $method = new ReflectionMethod( SV_WC_Payment_Gateway_Plugin::class, 'get_apple_pay_instance' );
124
+ $method->setAccessible( true );
125
+
126
+ $apple_pay_instance = $method->invoke( $this->get_plugin() );
127
+
128
+ $apple_pay_instance = $this->make( $apple_pay_instance, [
129
+ 'get_supporting_gateways' => [ $this->get_plugin()->get_gateway() ],
130
+ ] );
131
+
132
+ return new SV_WC_Payment_Gateway_Apple_Pay_Frontend( $this->get_plugin(), $apple_pay_instance );
133
+ }
134
+
135
+
136
+ /**
137
+ * Gets the plugin instance.
138
+ *
139
+ * @return \SkyVerge\WooCommerce\GatewayTestPlugin\Plugin
140
+ */
141
+ protected function get_plugin() {
142
+
143
+ if ( null === $this->plugin ) {
144
+ $this->plugin = sv_wc_gateway_test_plugin();
145
+ }
146
+
147
+ return $this->plugin;
148
+ }
149
+
150
+
151
+ }
vendor/skyverge/wc-plugin-framework/tests/unit.suite.yml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ # Codeception Test Suite Configuration
2
+ #
3
+ # Suite for unit or integration tests.
4
+
5
+ actor: UnitTester
6
+ modules:
7
+ enabled:
8
+ - Asserts
9
+ - \Helper\Unit
vendor/skyverge/wc-plugin-framework/tests/unit/CountryHelperTest.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ define( 'ABSPATH', true );
4
+
5
+ class CountryHelperTest extends \Codeception\Test\Unit {
6
+
7
+ /**
8
+ * @var \UnitTester
9
+ */
10
+ protected $tester;
11
+
12
+ protected function _before() {
13
+
14
+ require_once( 'woocommerce/Country_Helper.php' );
15
+ }
16
+
17
+ protected function _after() {
18
+
19
+ }
20
+
21
+ /**
22
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Country_Helper::convert_alpha_country_code()
23
+ *
24
+ * @param string $code input country code
25
+ * @param string $expected expected return value
26
+ *
27
+ * @dataProvider provider_convert_alpha_country_code
28
+ */
29
+ public function test_convert_alpha_country_code( $code, $expected ) {
30
+
31
+ $result = \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Country_Helper::convert_alpha_country_code( $code );
32
+
33
+ $this->assertEquals( $expected, $result );
34
+ }
35
+
36
+
37
+ /**
38
+ * Provider for test_convert_alpha_country_code()
39
+ *
40
+ * @return array
41
+ */
42
+ public function provider_convert_alpha_country_code() {
43
+
44
+ return [
45
+ [ 'US', 'USA' ],
46
+ [ 'USA', 'US' ],
47
+ [ 'UNKNOWN', 'UNKNOWN' ],
48
+ ];
49
+ }
50
+
51
+
52
+ }
vendor/skyverge/wc-plugin-framework/tests/unit/Settings_API/ControlTest.php ADDED
@@ -0,0 +1,300 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Settings_API;
4
+
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Control;
6
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Exception;
7
+ use TypeError;
8
+
9
+ define( 'ABSPATH', true );
10
+
11
+ class ControlTest extends \Codeception\Test\Unit {
12
+
13
+
14
+ /**
15
+ * Runs before each test.
16
+ */
17
+ protected function _before() {
18
+
19
+ require_once( 'woocommerce/class-sv-wc-plugin-exception.php' );
20
+ require_once( 'woocommerce/class-sv-wc-helper.php' );
21
+ require_once( 'woocommerce/Settings_API/Control.php' );
22
+ }
23
+
24
+
25
+ /**
26
+ * Runs after each test.
27
+ */
28
+ protected function _after() {
29
+
30
+ }
31
+
32
+
33
+ /** Test methods **************************************************************************************************/
34
+
35
+
36
+ /** @see Control::get_setting_id() */
37
+ public function test_get_setting_id() {
38
+
39
+ $control = new Control();
40
+ $control->set_setting_id( 'setting' );
41
+
42
+ $this->assertSame( 'setting', $control->get_setting_id() );
43
+ }
44
+
45
+
46
+ /** @see Control::get_type() */
47
+ public function test_get_type() {
48
+
49
+ $control = new Control();
50
+ $control->set_type( 'this-type' );
51
+
52
+ $this->assertSame( 'this-type', $control->get_type() );
53
+ }
54
+
55
+
56
+ /** @see Control::get_name() */
57
+ public function test_get_name() {
58
+
59
+ $control = new Control();
60
+ $control->set_name( 'Control name' );
61
+
62
+ $this->assertSame( 'Control name', $control->get_name() );
63
+ }
64
+
65
+
66
+ /** @see Control::get_description() */
67
+ public function test_get_description() {
68
+
69
+ $control = new Control();
70
+ $control->set_description( 'Control description' );
71
+
72
+ $this->assertSame( 'Control description', $control->get_description() );
73
+ }
74
+
75
+
76
+ /** @see Control::get_options() */
77
+ public function test_get_options() {
78
+
79
+ $options = [
80
+ 'option-1' => 'Option 1',
81
+ 'option-2' => 'Option 2',
82
+ ];
83
+
84
+ $control = new Control();
85
+ $control->set_options( $options, [ 'option-1', 'option-2' ] );
86
+
87
+ $this->assertSame( $options, $control->get_options() );
88
+ }
89
+
90
+
91
+ /**
92
+ * @see Control::set_setting_id()
93
+ *
94
+ * @param mixed $value value to pass to the method
95
+ * @param string $expected expected value
96
+ * @param bool $exception whether an exception is expected
97
+ * @throws SV_WC_Plugin_Exception
98
+ *
99
+ * @dataProvider provider_set_setting_id
100
+ */
101
+ public function test_set_setting_id( $value, $expected, $exception = false ) {
102
+
103
+ if ( $exception ) {
104
+ $this->expectException( SV_WC_Plugin_Exception::class );
105
+ }
106
+
107
+ $control = new Control();
108
+ $control->set_setting_id( $value );
109
+
110
+ $this->assertSame( $expected, $control->get_setting_id() );
111
+ }
112
+
113
+
114
+ /** @see test_set_setting_id() */
115
+ public function provider_set_setting_id() {
116
+
117
+ return [
118
+ [ 'yes', 'yes' ],
119
+ [ '', '' ],
120
+ [ false, '', true ],
121
+ ];
122
+ }
123
+
124
+
125
+ /**
126
+ * @see Control::set_type()
127
+ *
128
+ * @param mixed $value value to pass to the method
129
+ * @param array $allowed_types allowed control types
130
+ * @param string $expected expected value
131
+ * @param bool $exception whether an exception is expected
132
+ * @throws SV_WC_Plugin_Exception
133
+ *
134
+ * @dataProvider provider_set_type
135
+ */
136
+ public function test_set_type( $value, array $allowed_types, $expected, $exception = false ) {
137
+
138
+ if ( $exception ) {
139
+ $this->expectException( SV_WC_Plugin_Exception::class );
140
+ }
141
+
142
+ $control = new Control();
143
+ $control->set_type( $value, $allowed_types );
144
+
145
+ $this->assertSame( $expected, $control->get_type() );
146
+ }
147
+
148
+
149
+ /** @see test_set_type() */
150
+ public function provider_set_type() {
151
+
152
+ return [
153
+ [ 'yes', [ 'yes', 'maybe' ], 'yes' ], // valid value
154
+ [ 'no', [ 'yes', 'maybe' ], null, true ], // invalid value
155
+ [ 'no', [], 'no' ], // no types to validate
156
+ ];
157
+ }
158
+
159
+
160
+ /**
161
+ * @see Control::set_name()
162
+ *
163
+ * @param mixed $value value to pass to the method
164
+ * @param string $expected expected value
165
+ * @param bool $exception whether an exception is expected
166
+ * @throws SV_WC_Plugin_Exception
167
+ *
168
+ * @dataProvider provider_set_name
169
+ */
170
+ public function test_set_name( $value, $expected, $exception = false ) {
171
+
172
+ if ( $exception ) {
173
+ $this->expectException( SV_WC_Plugin_Exception::class );
174
+ }
175
+
176
+ $control = new Control();
177
+ $control->set_name( $value );
178
+
179
+ $this->assertSame( $expected, $control->get_name() );
180
+ }
181
+
182
+
183
+ /** @see test_set_name() */
184
+ public function provider_set_name() {
185
+
186
+ return [
187
+ [ 'name', 'name' ],
188
+ [ '', '' ],
189
+ [ false, '', true ],
190
+ ];
191
+ }
192
+
193
+
194
+ /**
195
+ * @see Control::set_description()
196
+ *
197
+ * @param mixed $value value to pass to the method
198
+ * @param string $expected expected value
199
+ * @param bool $exception whether an exception is expected
200
+ * @throws SV_WC_Plugin_Exception
201
+ *
202
+ * @dataProvider provider_set_name
203
+ */
204
+ public function test_set_description( $value, $expected, $exception = false ) {
205
+
206
+ if ( $exception ) {
207
+ $this->expectException( SV_WC_Plugin_Exception::class );
208
+ }
209
+
210
+ $control = new Control();
211
+ $control->set_description( $value );
212
+
213
+ $this->assertSame( $expected, $control->get_description() );
214
+ }
215
+
216
+
217
+ /** @see test_set_description() */
218
+ public function provider_set_description() {
219
+
220
+ return [
221
+ [ 'description', 'description' ],
222
+ [ '', '' ],
223
+ [ false, '', true ],
224
+ ];
225
+ }
226
+
227
+
228
+ /**
229
+ * @see Control::set_options()
230
+ *
231
+ * @param mixed $options value to pass to the method
232
+ * @param mixed $valid_options valid option keys to check against
233
+ * @param array $expected expected value
234
+ * @param bool $exception whether an exception is expected
235
+ *
236
+ * @dataProvider provider_set_options
237
+ */
238
+ public function test_set_options( $options, $valid_options, $expected, $exception = false ) {
239
+
240
+ if ( $exception ) {
241
+ $this->expectException( TypeError::class );
242
+ }
243
+
244
+ $control = new Control();
245
+ $control->set_options( $options, $valid_options );
246
+
247
+ $this->assertSame( $expected, $control->get_options() );
248
+ }
249
+
250
+
251
+ /** @see test_set_options() */
252
+ public function provider_set_options() {
253
+
254
+ return [
255
+ [
256
+ [],
257
+ [ 'b', 'd' ],
258
+ [],
259
+ false
260
+ ],
261
+
262
+ [
263
+ [ 'a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D' ],
264
+ [ 'b', 'd' ],
265
+ [ 'b' => 'B', 'd' => 'D' ],
266
+ false
267
+ ],
268
+
269
+ [
270
+ [ 'a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D' ],
271
+ [ 'x', 'y' ],
272
+ [],
273
+ false
274
+ ],
275
+
276
+ [
277
+ [ 'a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D' ],
278
+ [],
279
+ [ 'a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D' ],
280
+ false
281
+ ],
282
+
283
+ [
284
+ 'a,b,c,d',
285
+ [],
286
+ [],
287
+ true
288
+ ],
289
+
290
+ [
291
+ [ 'a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D' ],
292
+ 'a',
293
+ [],
294
+ true
295
+ ],
296
+ ];
297
+ }
298
+
299
+
300
+ }
vendor/skyverge/wc-plugin-framework/tests/unit/Settings_API/SettingTest.php ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Settings_API;
4
+
5
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Control;
6
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting;
7
+ use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Exception;
8
+
9
+ define( 'ABSPATH', true );
10
+
11
+ class SettingTest extends \Codeception\Test\Unit {
12
+
13
+
14
+ /**
15
+ * Runs before each test.
16
+ */
17
+ protected function _before() {
18
+
19
+ require_once( 'woocommerce/Settings_API/Abstract_Settings.php' );
20
+ require_once( 'woocommerce/Settings_API/Setting.php' );
21
+ }
22
+
23
+
24
+ /**
25
+ * Runs after each test.
26
+ */
27
+ protected function _after() {
28
+
29
+ }
30
+
31
+
32
+ /** Test methods **************************************************************************************************/
33
+
34
+
35
+ /**
36
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_id()
37
+ *
38
+ * @param string $input input ID
39
+ * @param string $expected expected return ID
40
+ *
41
+ * @dataProvider provider_set_id
42
+ */
43
+ public function test_set_id( $input, $expected ) {
44
+
45
+ $setting = new Setting();
46
+ $setting->set_id( $input );
47
+
48
+ $this->assertEquals( $expected, $setting->get_id() );
49
+ }
50
+
51
+
52
+ /**
53
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_type()
54
+ *
55
+ * @param string $input input type
56
+ * @param string $expected expected return type
57
+ *
58
+ * @dataProvider provider_set_type
59
+ */
60
+ public function test_set_type( $input, $expected ) {
61
+
62
+ $setting = new Setting();
63
+ $setting->set_type( $input );
64
+
65
+ $this->assertEquals( $expected, $setting->get_type() );
66
+ }
67
+
68
+
69
+ /**
70
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_name()
71
+ *
72
+ * @param string $input input name
73
+ * @param string $expected expected return name
74
+ *
75
+ * @dataProvider provider_set_name
76
+ */
77
+ public function test_set_name( $input, $expected ) {
78
+
79
+ $setting = new Setting();
80
+ $setting->set_name( $input );
81
+
82
+ $this->assertEquals( $expected, $setting->get_name() );
83
+ }
84
+
85
+
86
+ /**
87
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_description()
88
+ *
89
+ * @param string $input input description
90
+ * @param string $expected expected return description
91
+ *
92
+ * @dataProvider provider_set_description
93
+ */
94
+ public function test_set_description( $input, $expected ) {
95
+
96
+ $setting = new Setting();
97
+ $setting->set_description( $input );
98
+
99
+ $this->assertEquals( $expected, $setting->get_description() );
100
+ }
101
+
102
+
103
+ /**
104
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_is_multi()
105
+ *
106
+ * @param bool $input input value
107
+ * @param bool $expected expected return value
108
+ *
109
+ * @dataProvider provider_set_is_multi
110
+ */
111
+ public function test_set_is_multi( $input, $expected ) {
112
+
113
+ $setting = new Setting();
114
+ $setting->set_is_multi( $input );
115
+
116
+ $this->assertEquals( $expected, $setting->is_is_multi() );
117
+ }
118
+
119
+
120
+ /**
121
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_options()
122
+ *
123
+ * @param array $input input options
124
+ * @param array $expected expected return options
125
+ *
126
+ * @dataProvider provider_set_options
127
+ */
128
+ public function test_set_options( $input, $expected ) {
129
+
130
+ $setting = new Setting();
131
+ $setting->set_options( $input );
132
+
133
+ $this->assertEquals( $expected, $setting->get_options() );
134
+ }
135
+
136
+
137
+ /**
138
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_default()
139
+ *
140
+ * @param int|float|string|bool|array $input input default value
141
+ * @param int|float|string|bool|array $expected expected return default value
142
+ *
143
+ * @dataProvider provider_set_default
144
+ */
145
+ public function test_set_default( $input, $expected ) {
146
+
147
+ $setting = new Setting();
148
+ $setting->set_default( $input );
149
+
150
+ $this->assertEquals( $expected, $setting->get_default() );
151
+ }
152
+
153
+
154
+ /**
155
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_value()
156
+ *
157
+ * @param int|float|string|bool|array $input input value
158
+ * @param int|float|string|bool|array $expected expected return value
159
+ *
160
+ * @dataProvider provider_set_value
161
+ */
162
+ public function test_set_value( $input, $expected ) {
163
+
164
+ $setting = new Setting();
165
+ $setting->set_value( $input );
166
+
167
+ $this->assertEquals( $expected, $setting->get_value() );
168
+ }
169
+
170
+
171
+ /**
172
+ * Tests \SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting::set_control()
173
+ *
174
+ * @param Control $input input control
175
+ * @param Control $expected expected return control
176
+ * @throws SV_WC_Plugin_Exception
177
+ *
178
+ * @dataProvider provider_set_control
179
+ */
180
+ public function test_set_control( $input, $expected ) {
181
+
182
+ $setting = new Setting();
183
+ $setting->set_control( $input );
184
+
185
+ $this->assertEquals( $expected, $setting->get_control() );
186
+ }
187
+
188
+
189
+ /** Provider methods **********************************************************************************************/
190
+
191
+
192
+ /**
193
+ * Provider for test_set_id()
194
+ *
195
+ * @return array
196
+ */
197
+ public function provider_set_id() {
198
+
199
+ return [
200
+ [ 'my-setting', 'my-setting' ],
201
+ [ '', '' ],
202
+ ];
203
+ }
204
+
205
+
206
+ /**
207
+ * Provider for test_set_type()
208
+ *
209
+ * @return array
210
+ */
211
+ public function provider_set_type() {
212
+
213
+ return [
214
+ [ 'string', 'string' ],
215
+ [ 'url', 'url' ],
216
+ [ 'email', 'email' ],
217
+ [ 'integer', 'integer' ],
218
+ [ 'float', 'float' ],
219
+ [ 'boolean', 'boolean' ],
220
+ [ '', '' ],
221
+ ];
222
+ }
223
+
224
+
225
+ /**
226
+ * Provider for test_set_name()
227
+ *
228
+ * @return array
229
+ */
230
+ public function provider_set_name() {
231
+
232
+ return [
233
+ [ 'My Setting', 'My Setting' ],
234
+ [ '', '' ],
235
+ ];
236
+ }
237
+
238
+
239
+ /**
240
+ * Provider for test_set_description()
241
+ *
242
+ * @return array
243
+ */
244
+ public function provider_set_description() {
245
+
246
+ return [
247
+ [ 'Use this setting to configure it', 'Use this setting to configure it' ],
248
+ [ '', '' ],
249
+ ];
250
+ }
251
+
252
+
253
+ /**
254
+ * Provider for test_set_is_multi()
255
+ *
256
+ * @return array
257
+ */
258
+ public function provider_set_is_multi() {
259
+
260
+ return [
261
+ [ true, true ],
262
+ [ false, false ],
263
+ ];
264
+ }
265
+
266
+
267
+ /**
268
+ * Provider for test_set_options()
269
+ *
270
+ * @return array
271
+ */
272
+ public function provider_set_options() {
273
+
274
+ return [
275
+ [ [ 'example 1', 'example 2' ], [ 'example 1', 'example 2' ] ],
276
+ [ [ -1, 1, 2 ], [ -1, 1, 2 ] ],
277
+ [ [ 1.5, 2.5, -3 ], [ 1.5, 2.5, -3 ] ],
278
+ [ [ true, false ], [ true, false ] ],
279
+ ];
280
+ }
281
+
282
+
283
+ /**
284
+ * Provider for test_set_default()
285
+ *
286
+ * @return array
287
+ */
288
+ public function provider_set_default() {
289
+
290
+ return [
291
+ [ 'example', 'example' ],
292
+ [ 'example.com', 'example.com' ],
293
+ [ 'test@example.com', 'test@example.com' ],
294
+ [ 1, 1 ],
295
+ [ 0.5, 0.5 ],
296
+ [ false, false ],
297
+ [ '', '' ],
298
+ ];
299
+ }
300
+
301
+
302
+ /**
303
+ * Provider for test_set_value()
304
+ *
305
+ * @return array
306
+ */
307
+ public function provider_set_value() {
308
+
309
+ return [
310
+ [ 'example', 'example' ],
311
+ [ 'example.com', 'example.com' ],
312
+ [ 'test@example.com', 'test@example.com' ],
313
+ [ 1, 1 ],
314
+ [ 0.5, 0.5 ],
315
+ [ false, false ],
316
+ [ '', '' ],
317
+ ];
318
+ }
319
+
320
+
321
+ /**
322
+ * Provider for test_set_control()
323
+ *
324
+ * @return array
325
+ */
326
+ public function provider_set_control() {
327
+
328
+ require_once( 'woocommerce/Settings_API/Control.php' );
329
+
330
+ $control = new Control();
331
+
332
+ return [
333
+ [ $control, $control ],
334
+ ];
335
+ }
336
+
337
+
338
+ }
vendor/skyverge/wc-plugin-framework/tool.tartufo ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ [tool.tartufo]
2
+ exclude-paths="./exclude-patterns.txt"
3
+ repo-path = "."
4
+ default-regexes = true
5
+ json = false
6
+ regex = true
7
+ entropy = true
8
+ exclude-signatures = []
vendor/skyverge/wc-plugin-framework/woocommerce-framework-plugin-loader-sample.php ADDED
@@ -0,0 +1,441 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: WooCommerce Framework Plugin TODO: plugin name
4
+ * Plugin URI: http://www.woocommerce.com/products/ TODO: product URL
5
+ * Description: TODO: plugin description
6
+ * Author: SkyVerge
7
+ * Author URI: http://www.woocommerce.com
8
+ * Version: 1.0.0 TODO: plugin version
9
+ * Text Domain: TODO: plugin textdomain
10
+ * Domain Path: /i18n/languages/
11
+ *
12
+ * Copyright: (c) 2011-2019, SkyVerge, Inc. (info@skyverge.com)
13
+ *
14
+ * License: GNU General Public License v3.0
15
+ * License URI: http://www.gnu.org/licenses/gpl-3.0.html
16
+ *
17
+ * @package TODO: package
18
+ * @author SkyVerge
19
+ * @copyright Copyright (c) 2011-2019, SkyVerge, Inc.
20
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0
21
+ *
22
+ * Woo: 99999:00000000000000000000000000000000 TODO: updater keys
23
+ */
24
+
25
+ defined( 'ABSPATH' ) or exit;
26
+
27
+ // Required functions
28
+ if ( ! function_exists( 'woothemes_queue_update' ) ) {
29
+ require_once( plugin_dir_path( __FILE__ ) . 'woo-includes/woo-functions.php' );
30
+ }
31
+
32
+ // Plugin updates
33
+ woothemes_queue_update( plugin_basename( __FILE__ ), '00000000000000000000000000000000', '99999' ); // TODO: updater keys
34
+
35
+ // WC active check
36
+ if ( ! is_woocommerce_active() ) {
37
+ return;
38
+ }
39
+
40
+ /**
41
+ * The plugin loader class.
42
+ *
43
+ * TODO: Rename the class, and replace all instances of SV_WC_Framework_Plugin_Loader
44
+ * TODO: Update all version numbers and @since tags to the plugin version
45
+ *
46
+ * @since 1.0.0
47
+ */
48
+ class SV_WC_Framework_Plugin_Loader {
49
+
50
+
51
+ /** minimum PHP version required by this plugin */
52
+ const MINIMUM_PHP_VERSION = '5.6.0';
53
+
54
+ /** minimum WordPress version required by this plugin */
55
+ const MINIMUM_WP_VERSION = '4.4';
56
+
57
+ /** minimum WooCommerce version required by this plugin */
58
+ const MINIMUM_WC_VERSION = '3.0.9';
59
+
60
+ /** SkyVerge plugin framework version used by this plugin */
61
+ const FRAMEWORK_VERSION = '5.10.0'; // TODO: framework version
62
+
63
+ /** the plugin name, for displaying notices */
64
+ const PLUGIN_NAME = 'WooCommerce Framework Plugin'; // TODO: plugin name
65
+
66
+
67
+ /** @var SV_WC_Framework_Plugin_Loader single instance of this class // TODO: replace with loader class name */
68
+ private static $instance;
69
+
70
+ /** @var array the admin notices to add */
71
+ private $notices = array();
72
+
73
+
74
+ /**
75
+ * Constructs the class.
76
+ *
77
+ * @since 1.0.0
78
+ */
79
+ protected function __construct() {
80
+
81
+ register_activation_hook( __FILE__, array( $this, 'activation_check' ) );
82
+
83
+ add_action( 'admin_init', array( $this, 'check_environment' ) );
84
+ add_action( 'admin_init', array( $this, 'add_plugin_notices' ) );
85
+
86
+ add_action( 'admin_notices', array( $this, 'admin_notices' ), 15 );
87
+
88
+ add_filter( 'extra_plugin_headers', array( $this, 'add_documentation_header') );
89
+
90
+ // if the environment check fails, initialize the plugin
91
+ if ( $this->is_environment_compatible() ) {
92
+ add_action( 'plugins_loaded', array( $this, 'init_plugin' ) );
93
+ }
94
+ }
95
+
96
+
97
+ /**
98
+ * Cloning instances is forbidden due to singleton pattern.
99
+ *
100
+ * @since 1.0.0
101
+ */
102
+ public function __clone() {
103
+
104
+ _doing_it_wrong( __FUNCTION__, sprintf( 'You cannot clone instances of %s.', get_class( $this ) ), '1.0.0' );
105
+ }
106
+
107
+
108
+ /**
109
+ * Unserializing instances is forbidden due to singleton pattern.
110
+ *
111
+ * @since 1.0.0
112
+ */
113
+ public function __wakeup() {
114
+
115
+ _doing_it_wrong( __FUNCTION__, sprintf( 'You cannot unserialize instances of %s.', get_class( $this ) ), '1.0.0' );
116
+ }
117
+
118
+
119
+ /**
120
+ * Initializes the plugin.
121
+ *
122
+ * @since 1.0.0
123
+ */
124
+ public function init_plugin() {
125
+
126
+ if ( ! $this->plugins_compatible() ) {
127
+ return;
128
+ }
129
+
130
+ $this->load_framework();
131
+
132
+ /** If the plugin is structured for PSR-4, do the following:
133
+
134
+ // autoload plugin and vendor files
135
+ $loader = require_once( plugin_dir_path( __FILE__ ) . 'vendor/autoload.php' );
136
+
137
+ // register plugin namespace with autoloader
138
+ $loader->addPsr4( 'SkyVerge\\WooCommerce\\Plugin_Name\\', __DIR__ . '/includes' ); // TODO: plugin namespace here
139
+
140
+ // depending on how the plugin is structured, you may need to manually load the file that contains the initial plugin function
141
+ // require_once( plugin_dir_path( __FILE__ ) . 'includes/Functions.php' ); // TODO: maybe load a file to call your initialization function
142
+
143
+ /******************/
144
+
145
+ /** Otherwise, for plugins that use the traditional WordPress class-class-name.php structure, simply include the main plugin file:
146
+
147
+ // load the main plugin class
148
+ require_once( plugin_dir_path( __FILE__ ) . 'class-wc-framework-plugin.php' ); // TODO: main plugin class file
149
+
150
+ *******************/
151
+
152
+ // fire it up!
153
+ wc_framework_plugin(); // TODO: call the main plugin method
154
+ }
155
+
156
+
157
+ /**
158
+ * Loads the base framework classes.
159
+ *
160
+ * @since 1.0.0
161
+ */
162
+ private function load