Facebook for WooCommerce - Version 2.6.5

Version Description

  • 2021-09-16 =
  • Fix - Incorrect is_readable() usage when loading Integration classes.
  • Tweak - WC 5.7 compatibility.
  • Tweak - WP 5.8 compatibility.
Download this release

Release Info

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

Code changes from version trunk to 2.6.5

Files changed (99) hide show
  1. CODE_OF_CONDUCT.md +5 -0
  2. README.md +33 -0
  3. assets/build/admin/product-sets-admin.asset.php +1 -1
  4. assets/build/admin/product-sets-admin.js +1 -1
  5. assets/build/admin/products-admin.asset.php +1 -1
  6. assets/build/admin/products-admin.js +1 -1
  7. assets/css/admin/products-categories.css +0 -11
  8. assets/js/admin/product-sets-admin.js +0 -38
  9. assets/js/admin/products-admin.js +3 -4
  10. changelog.txt +1 -148
  11. class-wc-facebookcommerce.php +55 -114
  12. data/.gitkeep +0 -0
  13. facebook-commerce-events-tracker.php +65 -162
  14. facebook-commerce.php +422 -199
  15. facebook-for-woocommerce.php +34 -129
  16. i18n/languages/facebook-for-woocommerce.pot +541 -457
  17. includes/AJAX.php +1 -1
  18. includes/API/FBE/Installation/Read/Response.php +3 -4
  19. includes/Admin.php +37 -66
  20. includes/Admin/Notes/SettingsMoved.php +0 -88
  21. includes/Admin/Product_Categories.php +1 -1
  22. includes/Admin/Product_Sets.php +3 -3
  23. includes/Admin/Product_Sync_Meta_Box.php +0 -146
  24. includes/Admin/Settings.php +4 -59
  25. includes/Admin/Settings_Screens/Connection.php +1 -10
  26. includes/Admin/Settings_Screens/Messenger.php +75 -19
  27. includes/Admin/Tasks/Setup.php +0 -87
  28. includes/Debug/README.md +24 -0
  29. includes/Events/Event.php +1 -1
  30. includes/Feed/FeedConfigurationDetection.php +5 -17
  31. includes/Handlers/Connection.php +45 -81
  32. includes/Jobs/CleanupSkyvergeFrameworkJobOptions.php +5 -5
  33. includes/Jobs/GenerateProductFeed.php +42 -39
  34. includes/Jobs/{JobManager.php → JobRegistry.php} +2 -2
  35. includes/Lifecycle.php +9 -0
  36. includes/ProductSets/Sync.php +4 -30
  37. includes/ProductSync/ProductInvalidException.php +0 -14
  38. includes/ProductSync/ProductValidator.php +5 -138
  39. includes/Products.php +4 -11
  40. includes/Products/Feed.php +5 -9
  41. includes/Products/Sync.php +2 -2
  42. includes/Products/Sync/Background.php +1 -2
  43. includes/Utilities/Tracker.php +2 -96
  44. includes/fbgraph.php +1 -1
  45. includes/fbproduct.php +36 -49
  46. includes/fbproductfeed.php +257 -109
  47. includes/fbutils.php +5 -35
  48. includes/test/facebook-integration-test.php +95 -0
  49. readme.txt +3 -150
  50. vendor/autoload.php +1 -6
  51. vendor/composer/ClassLoader.php +12 -139
  52. vendor/composer/InstalledVersions.php +250 -342
  53. vendor/composer/autoload_classmap.php +1 -203
  54. vendor/composer/autoload_namespaces.php +1 -1
  55. vendor/composer/autoload_psr4.php +1 -1
  56. vendor/composer/autoload_real.php +26 -7
  57. vendor/composer/autoload_static.php +4 -206
  58. vendor/composer/installed.json +14 -15
  59. vendor/composer/installed.php +62 -59
  60. vendor/composer/installers/.github/workflows/continuous-integration.yml +0 -76
  61. vendor/composer/installers/.github/workflows/lint.yml +0 -30
  62. vendor/composer/installers/.github/workflows/phpstan.yml +0 -51
  63. vendor/composer/installers/composer.json +0 -122
  64. vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php +0 -1
  65. vendor/composer/installers/src/Composer/Installers/Installer.php +0 -1
  66. vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php +0 -12
  67. vendor/skyverge/wc-plugin-framework/.dist.env +0 -17
  68. vendor/skyverge/wc-plugin-framework/.editorconfig +0 -21
  69. vendor/skyverge/wc-plugin-framework/.gitignore +0 -26
  70. vendor/skyverge/wc-plugin-framework/.travis.yml +0 -102
  71. vendor/skyverge/wc-plugin-framework/.tx/config +0 -9
  72. vendor/skyverge/wc-plugin-framework/Gruntfile.js +0 -82
  73. vendor/skyverge/wc-plugin-framework/codeception.dist.yml +0 -22
  74. vendor/skyverge/wc-plugin-framework/codeception.local.yml +0 -12
  75. vendor/skyverge/wc-plugin-framework/composer.json +0 -8
  76. vendor/skyverge/wc-plugin-framework/composer.lock +0 -7236
  77. vendor/skyverge/wc-plugin-framework/exclude-patterns.txt +0 -29
  78. vendor/skyverge/wc-plugin-framework/grunt/configs/coffee.js +0 -26
  79. vendor/skyverge/wc-plugin-framework/grunt/configs/makepot.js +0 -33
  80. vendor/skyverge/wc-plugin-framework/grunt/configs/potomo.js +0 -25
  81. vendor/skyverge/wc-plugin-framework/grunt/configs/sass.js +0 -41
  82. vendor/skyverge/wc-plugin-framework/grunt/configs/shell.js +0 -28
  83. vendor/skyverge/wc-plugin-framework/grunt/tasks/parsepo.js +0 -31
  84. vendor/skyverge/wc-plugin-framework/package-lock.json +0 -8749
  85. vendor/skyverge/wc-plugin-framework/package.json +0 -43
  86. vendor/skyverge/wc-plugin-framework/readme.md +0 -5
  87. vendor/skyverge/wc-plugin-framework/tests/README.md +0 -15
  88. vendor/skyverge/wc-plugin-framework/tests/_archive/.coveralls.yml +0 -3
  89. vendor/skyverge/wc-plugin-framework/tests/_archive/.travis.yml +0 -13
  90. vendor/skyverge/wc-plugin-framework/tests/_archive/README.md +0 -66
  91. vendor/skyverge/wc-plugin-framework/tests/_archive/bootstrap.php +0 -132
  92. vendor/skyverge/wc-plugin-framework/tests/_archive/integration/plugin.php +0 -0
  93. vendor/skyverge/wc-plugin-framework/tests/_archive/integration/test-case.php +0 -8
  94. vendor/skyverge/wc-plugin-framework/tests/_archive/phpunit.travis.xml +0 -30
  95. vendor/skyverge/wc-plugin-framework/tests/_archive/phpunit.xml +0 -31
  96. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/Addresses/Address.php +0 -204
  97. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/Addresses/Customer_Address.php +0 -182
  98. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/helper.php +0 -900
  99. vendor/skyverge/wc-plugin-framework/tests/_archive/unit/payment-gateway-api-response-message-helper.php +0 -9
CODE_OF_CONDUCT.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
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 ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Facebook for WooCommerce
2
+
3
+ This is the development repository for the Facebook for WooCommerce plugin.
4
+
5
+ - [WooCommerce.com product page](https://woocommerce.com/products/facebook)
6
+ - [WordPress.org plugin page](https://wordpress.org/plugins/facebook-for-woocommerce/)
7
+ - [User documentation](https://docs.woocommerce.com/document/facebook-for-woocommerce)
8
+
9
+ ## Support
10
+ The best place to get support is the [WordPress.org Facebook for WooCommerce forum](https://wordpress.org/support/plugin/facebook-for-woocommerce/).
11
+
12
+ 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/).
13
+
14
+ ## Development
15
+ ### Developing
16
+ - Clone this repository into the `wp-content/plugins/` folder your WooCommerce development environment.
17
+ - Install dependencies:
18
+ - `npm install`
19
+ - `composer install`
20
+ - Build assets:
21
+ - `npm start` to build a development version
22
+ - Linting:
23
+ - `npm run lint:php` to run PHPCS linter on all PHP files
24
+
25
+ #### Production build
26
+ This plugin uses a custom build tool called [`sake`](https://github.com/skyverge/sake).
27
+
28
+ If you have `sake` set up on your system, these commands can be used to generate a production build.
29
+
30
+ - `npm run build` builds and zips to `/build/facebook-for-woocommerce.{version}.zip`.
31
+
32
+ ### Releasing
33
+ Refer to the [wiki for details of how to build and release the plugin](https://github.com/woocommerce/facebook-for-woocommerce/wiki/Build-&-Release).
assets/build/admin/product-sets-admin.asset.php CHANGED
@@ -1 +1 @@
1
- <?php return array('dependencies' => array('wp-polyfill'), 'version' => '646cbd7ed7e31a6978b8ef073dc8196f');
1
+ <?php return array('dependencies' => array('wp-polyfill'), 'version' => '98d555c2e6a0ef6072bdf3f337f9302c');
assets/build/admin/product-sets-admin.js CHANGED
@@ -1 +1 @@
1
- !function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=9)}({9:function(e,t){jQuery(document).ready((function(e){jQuery(".select2.wc-facebook").length&&(jQuery(".select2.wc-facebook").select2().addClass("visible").attr("disabled",!1),jQuery(".select2.updating-message").addClass("hidden"),jQuery(document).ajaxSuccess((function(e,t,o){var r=new URLSearchParams(o.data);r.has("action")&&"add-tag"===r.get("action")&&r.has("taxonomy")&&"fb_product_set"===r.get("taxonomy")&&jQuery(".select2.wc-facebook").select2().val(null).trigger("change")}))),e('form[id="addtag"] input[name="submit"]').on("click",(function(t){var o=e("#_wc_facebook_product_cats").val(),r=[];window.facebook_for_woocommerce_product_sets&&window.facebook_for_woocommerce_product_sets.excluded_category_ids&&(r=window.facebook_for_woocommerce_product_sets.excluded_category_ids),o.length>0&&r.length>0&&function(e,t){for(var o=0,r=0;r<t.length;r++)t.includes(t[r])&&o++;return o>0}(0,r)&&alert(facebook_for_woocommerce_product_sets.excluded_category_warning_message)}))}))}});
1
+ !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}({9:function(e,t){jQuery(document).ready((function(e){jQuery(".select2.wc-facebook").length&&(jQuery(".select2.wc-facebook").select2().addClass("visible").attr("disabled",!1),jQuery(".select2.updating-message").addClass("hidden"),jQuery(document).ajaxSuccess((function(e,t,n){var r=new URLSearchParams(n.data);r.has("action")&&"add-tag"===r.get("action")&&r.has("taxonomy")&&"fb_product_set"===r.get("taxonomy")&&jQuery(".select2.wc-facebook").select2().val(null).trigger("change")})))}))}});
assets/build/admin/products-admin.asset.php CHANGED
@@ -1 +1 @@
1
- <?php return array('dependencies' => array('wp-polyfill'), 'version' => '9a3d46c8f97dbaacd5b0c49075c97e31');
1
+ <?php return array('dependencies' => array('wp-polyfill'), 'version' => 'c40e4d58318863c75d4136c0885d16ea');
assets/build/admin/products-admin.js CHANGED
@@ -1 +1 @@
1
- !function(o){var e={};function t(c){if(e[c])return e[c].exports;var n=e[c]={i:c,l:!1,exports:{}};return o[c].call(n.exports,n,n.exports,t),n.l=!0,n.exports}t.m=o,t.c=e,t.d=function(o,e,c){t.o(o,e)||Object.defineProperty(o,e,{enumerable:!0,get:c})},t.r=function(o){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},t.t=function(o,e){if(1&e&&(o=t(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)t.d(c,n,function(e){return o[e]}.bind(null,n));return c},t.n=function(o){var e=o&&o.__esModule?function(){return o.default}:function(){return o};return t.d(e,"a",e),e},t.o=function(o,e){return Object.prototype.hasOwnProperty.call(o,e)},t.p="",t(t.s=10)}({10:function(o,e){jQuery(document).ready((function(o){var e=window.pagenow.length?window.pagenow:"";if(window.typenow.length&&window.typenow,"edit-product"===e){var t=!1;o("input#doaction, input#doaction2").on("click",(function(e){if(t)return!0;e.preventDefault();var c=o(this),n=c.prev("select").val();if("facebook_include"===n){var r=[];o.each(o('input[name="post[]"]:checked'),(function(){r.push(parseInt(o(this).val(),10))})),o.post(facebook_for_woocommerce_products_admin.ajax_url,{action:"facebook_for_woocommerce_set_product_sync_bulk_action_prompt",security:facebook_for_woocommerce_products_admin.set_product_sync_bulk_action_prompt_nonce,toggle:n,products:r},(function(e){e&&!e.success?(closeExistingModal(),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:e.data})):(t=!0,c.trigger("click"))}))}else t=!0,c.trigger("click")}))}if("product"===e){function c(o,e){e.find(".enable-if-sync-enabled").prop("disabled",!o)}function n(o,e){o?(e.find("option[value='sync_and_show']").show(),e.prop("original")&&e.val(e.prop("original"))):(e.find("option[value='sync_and_show']").hide(),"sync_and_show"===e.val()&&e.val("sync_and_hide"))}function r(o,e){var t=e.find("#wc_facebook_commerce_enabled"),c=t.prop("original");t.prop("checked",!!o&&c).prop("disabled",!o),t.trigger("change"),t.prop("original",c),e.find("#product-not-ready-notice, #variable-product-not-ready-notice").hide(),s()&&!i()?e.find("#variable-product-not-ready-notice").show():o||e.find("#product-not-ready-notice").show()}function a(){return!!(s()?i():"sync_disabled"!==v.val())&&!!(s()||(o("#_regular_price").val()||o("#fb_product_price").val()))&&!(!o("#_manage_stock").prop("checked")||!o("#_stock").val())}function i(){var e=o(".js-variable-fb-sync-toggle");return 0===e.length?!!facebook_for_woocommerce_products_admin.is_sync_enabled_for_product:!!e.map((function(e,t){return"sync_disabled"!==o(t).val()?t:null})).length}function s(){var e=o("select#product-type").val();return!(!e||!e.match(/variable/))}function d(o){o.attr("data-original-value",o.val())}function _(e){return e.map((function(e,t){var c=o(t),n=c.val();return!!facebook_for_woocommerce_products_admin.is_product_published&&"sync_disabled"===n&&n!==c.attr("data-original-value")})).toArray().indexOf(!0)>-1}function l(e){return v===e?o("input#post_ID").val():e.closest(".woocommerce_variation").find("input[name^=variable_post_id]").val()}function u(e){closeExistingModal(),m=e,g=l(e),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:{message:facebook_for_woocommerce_products_admin.product_removed_from_sync_confirm_modal_message,buttons:facebook_for_woocommerce_products_admin.product_removed_from_sync_confirm_modal_buttons}})}function f(){o(facebook_for_woocommerce_products_admin.product_removed_from_sync_field_id).val(b.join(","))}function p(o){b=b.filter((function(e){return e!==o})),f()}var m=null,g=null,b=[];o(document.body).on("click","button.button-product-removed-from-sync-delete",(function(){g&&(closeExistingModal(),b.push(g),f())})).on("click","button.button-product-removed-from-sync-cancel",(function(){var o;closeExistingModal(),m&&((o=m).val(o.attr("data-original-value")),m=null),f()})),o("#facebook_options #wc_facebook_commerce_enabled").on("change",(function(){var e=o(this).prop("checked");e?o(".wc_facebook_commerce_fields").show():o(".wc_facebook_commerce_fields").hide(),o(".product_attributes").find(".woocommerce_attribute").length?o(".show_if_has_attributes").show():o(".show_if_has_attributes").hide(),o(this).prop("original",e)})).trigger("change");var v=o("#wc_facebook_sync_mode"),h=v.closest(".woocommerce_options_panel");d(v),v.on("change",(function(){var o,e,t="sync_disabled"!==v.val();c(t,h),o=t,e=h.find(".wc-facebook-commerce-options-group"),o?e.show():e.hide(),t&&p(l(v)),v.prop("original",v.val()),_(v)&&u(v)})).trigger("change"),o("#_virtual").on("change",(function(){n(!o(this).prop("checked"),v)})).trigger("change");var w=o("#woocommerce-product-data");w.on("change","#_regular_price, #_manage_stock, #_stock, #wc_facebook_sync_mode, #fb_product_price",(function(e){setTimeout((function(){r(a(),o("#facebook_options"))}),1)})),o(".woocommerce_variations").on("change",".js-variable-fb-sync-toggle",(function(){var e=o(this),t="sync_disabled"!==e.val();c(t,e.closest(".wc-metabox-content")),r(a(),o("#facebook_options")),t&&p(l(e)),e.prop("original",e.val()),_(e)&&u(e)})),w.on("woocommerce_variations_loaded",(function(){w.find(".js-variable-fb-sync-toggle").each((function(e,t){var n=o(t);c("sync_disabled"!==n.val(),n.closest(".wc-metabox-content")),n.prop("original",n.val()),d(n)})),o(".variable_is_virtual").on("change",(function(){var e=o(this).closest(".wc-metabox-content").find(".js-variable-fb-sync-toggle");n(!o(this).prop("checked"),e)})),r(a(),o("#facebook_options"))})),w.on("change",".js-fb-product-image-source",(function(){var e=o(this).closest(".woocommerce_options_panel, .wc-metabox-content"),t=o(this).val();e.find(".product-image-source-field").closest(".form-field").hide(),e.find(".show-if-product-image-source-".concat(t)).closest(".form-field").show()})),o(".js-fb-product-image-source:checked:visible").trigger("change"),w.on("woocommerce_variations_loaded",(function(){o(".js-variable-fb-sync-toggle:visible").trigger("change"),o(".js-fb-product-image-source:checked:visible").trigger("change"),o(".variable_is_virtual:visible").trigger("change")})),o("#facebook_options").on("click","#product-not-ready-notice-open-modal",(function(e){e.preventDefault(),closeExistingModal(),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:{message:facebook_for_woocommerce_products_admin.product_not_ready_modal_message,buttons:facebook_for_woocommerce_products_admin.product_not_ready_modal_buttons}})})),r(a(),h);var k=!1;o('form#post input[type="submit"]').on("click",(function(e){if(o("#wc_facebook_commerce_enabled").prop("checked")&&a()&&o(".wc_facebook_commerce_fields .wc-facebook-google-product-category-select").map((function(e,t){return o(t).val()?o(t).val():null})).length<2)return e.preventDefault(),alert(facebook_for_woocommerce_products_admin.i18n.missing_google_product_category_message),!1;if(k)return!0;e.preventDefault();var t=o(this),c=parseInt(o("input#post_ID").val(),10),n=[],r=o('textarea[name="tax_input[product_tag]"]').length?o('textarea[name="tax_input[product_tag]"]').val().split(","):[],s="sync_disabled"!==v.val(),d=i();o('#taxonomy-product_cat input[name="tax_input[product_cat][]"]:checked').each((function(){n.push(parseInt(o(this).val(),10))})),o('#taxonomy-product_tag input[name="tax_input[product_tag][]"]:checked').each((function(){r.push(parseInt(o(this).val(),10))})),c>0?o.post(facebook_for_woocommerce_products_admin.ajax_url,{action:"facebook_for_woocommerce_set_product_sync_prompt",security:facebook_for_woocommerce_products_admin.set_product_sync_prompt_nonce,sync_enabled:s?"enabled":"disabled",var_sync_enabled:d?"enabled":"disabled",product:c,categories:n,tags:r},(function(e){e&&!e.success&&s?(closeExistingModal(),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:e.data})):(k=!0,t.trigger("click"))})):(k=!0,t.trigger("click"))}))}}))}});
1
+ !function(o){var e={};function t(c){if(e[c])return e[c].exports;var n=e[c]={i:c,l:!1,exports:{}};return o[c].call(n.exports,n,n.exports,t),n.l=!0,n.exports}t.m=o,t.c=e,t.d=function(o,e,c){t.o(o,e)||Object.defineProperty(o,e,{enumerable:!0,get:c})},t.r=function(o){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},t.t=function(o,e){if(1&e&&(o=t(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)t.d(c,n,function(e){return o[e]}.bind(null,n));return c},t.n=function(o){var e=o&&o.__esModule?function(){return o.default}:function(){return o};return t.d(e,"a",e),e},t.o=function(o,e){return Object.prototype.hasOwnProperty.call(o,e)},t.p="",t(t.s=10)}({10:function(o,e){jQuery(document).ready((function(o){var e=window.pagenow.length?window.pagenow:"";if(window.typenow.length&&window.typenow,"edit-product"===e){var t=!1;o("input#doaction, input#doaction2").on("click",(function(e){if(t)return!0;e.preventDefault();var c=o(this),n=c.prev("select").val();if("facebook_include"===n){var r=[];o.each(o('input[name="post[]"]:checked'),(function(){r.push(parseInt(o(this).val(),10))})),o.post(facebook_for_woocommerce_products_admin.ajax_url,{action:"facebook_for_woocommerce_set_product_sync_bulk_action_prompt",security:facebook_for_woocommerce_products_admin.set_product_sync_bulk_action_prompt_nonce,toggle:n,products:r},(function(e){e&&!e.success?(closeExistingModal(),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:e.data})):(t=!0,c.trigger("click"))}))}else t=!0,c.trigger("click")}))}if("product"===e){function c(o,e){e.find(".enable-if-sync-enabled").prop("disabled",!o)}function n(o,e){o?(e.find("option[value='sync_and_show']").show(),e.prop("original")&&e.val(e.prop("original"))):(e.find("option[value='sync_and_show']").hide(),"sync_and_show"===e.val()&&e.val("sync_and_hide"))}function r(o,e){var t=e.find("#wc_facebook_commerce_enabled"),c=t.prop("original");t.prop("checked",!!o&&c).prop("disabled",!o),t.trigger("change"),t.prop("original",c),e.find("#product-not-ready-notice, #variable-product-not-ready-notice").hide(),s()&&!i()?e.find("#variable-product-not-ready-notice").show():o||e.find("#product-not-ready-notice").show()}function a(){return!!(s()?i():"sync_disabled"!==v.val())&&!!(s()||(o("#_regular_price").val()||o("#fb_product_price").val()))&&!(!o("#_manage_stock").prop("checked")||!o("#_stock").val())}function i(){var e=o(".js-variable-fb-sync-toggle");return 0===e.length?!!facebook_for_woocommerce_products_admin.is_sync_enabled_for_product:!!e.map((function(e,t){return"sync_disabled"!==o(t).val()?t:null})).length}function s(){var e=o("select#product-type").val();return!(!e||!e.match(/variable/))}function d(o){o.attr("data-original-value",o.val())}function l(e){return e.map((function(e,t){var c=o(t),n=c.val();return"sync_disabled"===n&&n!==c.attr("data-original-value")})).toArray().indexOf(!0)>-1}function _(e){return v===e?o("input#post_ID").val():e.closest(".woocommerce_variation").find("input[name^=variable_post_id]").val()}function u(e){closeExistingModal(),m=e,g=_(e),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:{message:facebook_for_woocommerce_products_admin.product_removed_from_sync_confirm_modal_message,buttons:facebook_for_woocommerce_products_admin.product_removed_from_sync_confirm_modal_buttons}})}function f(){o(facebook_for_woocommerce_products_admin.product_removed_from_sync_field_id).val(b.join(","))}function p(o){b=b.filter((function(e){return e!==o})),f()}var m=null,g=null,b=[];o(document.body).on("click","button.button-product-removed-from-sync-delete",(function(){g&&(closeExistingModal(),b.push(g),f())})).on("click","button.button-product-removed-from-sync-cancel",(function(){var o;closeExistingModal(),m&&((o=m).val(o.attr("data-original-value")),m=null),f()})),o("#facebook_options #wc_facebook_commerce_enabled").on("change",(function(){var e=o(this).prop("checked");e?o(".wc_facebook_commerce_fields").show():o(".wc_facebook_commerce_fields").hide(),o(".product_attributes").find(".woocommerce_attribute").length?o(".show_if_has_attributes").show():o(".show_if_has_attributes").hide(),o(this).prop("original",e)})).trigger("change");var v=o("#wc_facebook_sync_mode"),h=v.closest(".woocommerce_options_panel");d(v),v.on("change",(function(){var o,e,t="sync_disabled"!==v.val();c(t,h),o=t,e=h.find(".wc-facebook-commerce-options-group"),o?e.show():e.hide(),t&&p(_(v)),v.prop("original",v.val()),l(v)&&u(v)})).trigger("change"),o("#_virtual").on("change",(function(){n(!o(this).prop("checked"),v)})).trigger("change");var w=o("#woocommerce-product-data");w.on("change","#_regular_price, #_manage_stock, #_stock, #wc_facebook_sync_mode, #fb_product_price",(function(e){setTimeout((function(){r(a(),o("#facebook_options"))}),1)})),o(".woocommerce_variations").on("change",".js-variable-fb-sync-toggle",(function(){var e=o(this),t="sync_disabled"!==e.val();c(t,e.closest(".wc-metabox-content")),r(a(),o("#facebook_options")),t&&p(_(e)),e.prop("original",e.val()),l(e)&&u(e)})),w.on("woocommerce_variations_loaded",(function(){w.find(".js-variable-fb-sync-toggle").each((function(e,t){var n=o(t);c("sync_disabled"!==n.val(),n.closest(".wc-metabox-content")),n.prop("original",n.val()),d(n)})),o(".variable_is_virtual").on("change",(function(){var e=o(this).closest(".wc-metabox-content").find(".js-variable-fb-sync-toggle");n(!o(this).prop("checked"),e)})),r(a(),o("#facebook_options"))})),w.on("change",".js-fb-product-image-source",(function(){var e=o(this).closest(".woocommerce_options_panel, .wc-metabox-content"),t=o(this).val();e.find(".product-image-source-field").closest(".form-field").hide(),e.find(".show-if-product-image-source-".concat(t)).closest(".form-field").show()})),o(".js-fb-product-image-source:checked:visible").trigger("change"),w.on("woocommerce_variations_loaded",(function(){o(".js-variable-fb-sync-toggle:visible").trigger("change"),o(".js-fb-product-image-source:checked:visible").trigger("change"),o(".variable_is_virtual:visible").trigger("change")})),o("#facebook_options").on("click","#product-not-ready-notice-open-modal",(function(e){e.preventDefault(),closeExistingModal(),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:{message:facebook_for_woocommerce_products_admin.product_not_ready_modal_message,buttons:facebook_for_woocommerce_products_admin.product_not_ready_modal_buttons}})})),r(a(),h);var y=!1;o('form#post input[type="submit"]').on("click",(function(e){if(o("#wc_facebook_commerce_enabled").prop("checked")&&a()&&o(".wc_facebook_commerce_fields .wc-facebook-google-product-category-select").map((function(e,t){return o(t).val()?o(t).val():null})).length<2)return e.preventDefault(),alert(facebook_for_woocommerce_products_admin.i18n.missing_google_product_category_message),!1;if(y)return!0;e.preventDefault();var t=o(this),c=parseInt(o("input#post_ID").val(),10),n=[],r=o('textarea[name="tax_input[product_tag]"]').length?o('textarea[name="tax_input[product_tag]"]').val().split(","):[],s="sync_disabled"!==v.val(),d=i();o('#taxonomy-product_cat input[name="tax_input[product_cat][]"]:checked').each((function(){n.push(parseInt(o(this).val(),10))})),o('#taxonomy-product_tag input[name="tax_input[product_tag][]"]:checked').each((function(){r.push(parseInt(o(this).val(),10))})),c>0?o.post(facebook_for_woocommerce_products_admin.ajax_url,{action:"facebook_for_woocommerce_set_product_sync_prompt",security:facebook_for_woocommerce_products_admin.set_product_sync_prompt_nonce,sync_enabled:s?"enabled":"disabled",var_sync_enabled:d?"enabled":"disabled",product:c,categories:n,tags:r},(function(e){e&&!e.success&&s?(closeExistingModal(),new o.WCBackboneModal.View({target:"facebook-for-woocommerce-modal",string:e.data})):(y=!0,t.trigger("click"))})):(y=!0,t.trigger("click"))}))}}))}});
assets/css/admin/products-categories.css CHANGED
@@ -12,14 +12,3 @@
12
  float: none;
13
  width: 100% !important;
14
  }
15
-
16
- tr[class*="term-wc_facebook_enhanced_catalog_attribute"]:not(.term-wc_facebook_enhanced_catalog_attributes_id-title-wrap) > th > label {
17
- position: relative;
18
- display: block;
19
- }
20
-
21
- tr[class*="term-wc_facebook_enhanced_catalog_attribute"]:not(.term-wc_facebook_enhanced_catalog_attributes_id-title-wrap) > th > label > span.woocommerce-help-tip {
22
- position: absolute;
23
- right: 15px;
24
- }
25
-
12
  float: none;
13
  width: 100% !important;
14
  }
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin/product-sets-admin.js CHANGED
@@ -27,42 +27,4 @@ jQuery( document ).ready( function( $ ) {
27
 
28
  }
29
 
30
- let $submitButton = $( 'form[id="addtag"] input[name="submit"]' );
31
-
32
- $submitButton.on( 'click', function( e ) {
33
-
34
- let $selectedCategories = $('#_wc_facebook_product_cats').val();
35
- let excludedCategoryIDs = [];
36
-
37
- if ( window.facebook_for_woocommerce_product_sets && window.facebook_for_woocommerce_product_sets.excluded_category_ids ) {
38
- excludedCategoryIDs = window.facebook_for_woocommerce_product_sets.excluded_category_ids;
39
- }
40
-
41
- if ( $selectedCategories.length > 0 && excludedCategoryIDs.length > 0 ) {
42
- if ( hasExcludedCategories( $selectedCategories, excludedCategoryIDs ) ) {
43
- alert( facebook_for_woocommerce_product_sets.excluded_category_warning_message );
44
- }
45
- }
46
-
47
- });
48
-
49
  } );
50
-
51
- /**
52
- * Checks if selected categories contains any excluded categories.
53
- *
54
- * @param selectedCategories Array of submitted category ids
55
- * @param excludedCategoryIDs Array category ids excluded from sync.
56
- * @returns {boolean}
57
- */
58
- function hasExcludedCategories( selectedCategories, excludedCategoryIDs ) {
59
-
60
- let counter = 0;
61
-
62
- for ( let i = 0; i < excludedCategoryIDs.length; i++ ) {
63
- if ( excludedCategoryIDs.includes( excludedCategoryIDs[i] ) ) counter++;
64
- }
65
-
66
- return counter > 0;
67
-
68
- }
27
 
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin/products-admin.js CHANGED
@@ -407,11 +407,10 @@ jQuery( document ).ready( function( $ ) {
407
 
408
  let syncValuesStatus = $syncModeSelect.map( function ( index, selectElement ) {
409
 
410
- let $syncMode = $( selectElement );
411
- let syncModeValue = $syncMode.val();
412
- let isProductPublished = !! facebook_for_woocommerce_products_admin.is_product_published;
413
 
414
- return isProductPublished && 'sync_disabled' === syncModeValue && syncModeValue !== $syncMode.attr( 'data-original-value' );
415
  } ).toArray();
416
 
417
  return syncValuesStatus.indexOf( true ) > -1;
407
 
408
  let syncValuesStatus = $syncModeSelect.map( function ( index, selectElement ) {
409
 
410
+ let $syncMode = $( selectElement );
411
+ let syncModeValue = $syncMode.val();
 
412
 
413
+ return 'sync_disabled' === syncModeValue && syncModeValue !== $syncMode.attr( 'data-original-value' );
414
  } ).toArray();
415
 
416
  return syncValuesStatus.indexOf( true ) > -1;
changelog.txt CHANGED
@@ -1,153 +1,6 @@
1
  *** Facebook for WooCommerce Changelog ***
2
 
3
- = 2.6.30 - 2022-11-09 =
4
- * Fix - Add backward compatibility for WC 6.1, 6.2, and 6.3 versions.
5
- * Fix - Sync product set when the term name changes.
6
-
7
- = 2.6.29 - 2022-11-08 =
8
- * Add - Facebook Product Set under the Marketing menu.
9
- * Add - HPOS Compatibility.
10
- * Add - Inbox note about Facebook menu moved under the Marketing menu.
11
- * Add - Set up Facebook task to the WooCommerce admin tasks.
12
- * Dev - Replaced methods from classes in the `Internal` namespace.
13
- * Fix - Ensure the enhanced product enhance catalog attributes value is unslashed before saving in the post_meta table.
14
- * Fix - Hosted Woo Updates.
15
- * Fix - Release/2.6.28.
16
- * Fix - duplicate InitiateCheckout when using checkout block.
17
- * Tweak - WC 7.1 compatibility.
18
- * Tweak - WP 6.1 compatibility.
19
- * Update - FB Product Set name changed to Facebook Product Set.
20
- * Update - On successful FBE install users will be redirected to Advertise tab of the plugin.
21
-
22
- = 2.6.28 - 2022-10-25 =
23
- * Fix - Ensure bundles are not treated as virtual products on product_sync.
24
- * Fix - Ensure google-product-category-fields-loads.js loads only on the product category screens.
25
- * Fix - Server side sending of pixel events blocks generating pages .
26
-
27
- = 2.6.27 - 2022-10-14 =
28
- * Fix - Revert "Switch to Jetpack autoloader. (#1996 PR refresh)".
29
-
30
- = 2.6.26 - 2022-10-13 =
31
- * Add - wc_facebook_should_sync_product filter.
32
- * Dev - Rename JobRegistry to JobManager.
33
- * Dev - Replace composer autoloader with Jetpack autoloader.
34
- * Fix - Fix content_name and content_category attributes set on ViewCategory pixel events.
35
- * Tweak - WC 7.0 compatibility.
36
-
37
- = 2.6.25 - 2022-10-04 =
38
- * Add - New filter (wc_facebook_product_group_default_variation) to allow customizing a product group's default variation.
39
- * Update - Remove Skyverge's sake as a dependency from the extension build process.
40
-
41
- = 2.6.24 - 2022-09-27 =
42
- * Fix - Adds helpful admin notices for correct user roles.
43
- * Fix - Track purchase event flag in session variable instead post meta table.
44
-
45
- = 2.6.23 - 2022-09-13 =
46
- * Add - Show warning when creating product set with excluded categories.
47
- * Fix - Messenger settings are no longer overridden after business config refresh.
48
- * Fix - PHP notice thrown by get_page_id() in facebook-for-woocommerce/includes/API/FBE/Installation/Read/Response.php.
49
- * Fix - When disabling Enable Messenger on the Messenger setting page, the setting does not persist after selecting Save Changes.
50
-
51
- = 2.6.22 - 2022-09-06 =
52
- * Fix - Adding an excluded category doesn't remove that category synced products.
53
- * Fix - Ensure content_name and content_ids addToCart pixel event properties are correct for variable products when redirect to cart is enabled in WooCommerce.
54
- * Fix - Remove out-of-stock products on Facebook when the "Hide out of stock items from the catalog" option in WooCommerce is checked.
55
- * Tweak - WC 6.9 compatibility.
56
- * Update - Facebook Business Extension flow from COMMERCE_OFFSITE to DEFAULT.
57
-
58
- = 2.6.21 - 2022-08-16 =
59
- * Dev - Add branch-labels GH workflow.
60
- * Fix - `Undefined array key "HTTP_REFERER"` not longer happens when `new Event` is triggered from an AJAX call that doesn't include a referrer (likely due to browser configuration).
61
- * Tweak - WC 6.8 compatibility.
62
- * Tweak - WP 6.0 compatibility.
63
-
64
- 2022-08-09 - version 2.6.20
65
- * Fix - Ensure product is deleted from FB when moved to trash.
66
- * Fix - Price not updating when the sale price is removed.
67
-
68
- = 2.6.19 - 2022-07-27 =
69
- * Add - `wc_facebook_string_apply_shortcodes` filter to check whether to apply shortcodes on a string before syncing.
70
- * Tweak - Use the Heartbeat system to refresh the local business configuration data with the latest from Facebook.
71
- * Tweak - WC 6.8 compatibility.
72
-
73
- 2022-07-19 - version 2.6.18
74
- * Fix - Misaligned help icons on Product Categories > Google Product Categories form.
75
- * Fix - Syncing WC custom placeholder to Facebook shop.
76
- * Fix - is_search() causing fatal error when custom queries are used.
77
-
78
- = 2.6.17 - 2022-07-06 =
79
- * Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
80
- * Fix - Scheduled product not synced when status becomes "publish".
81
- * Tweak - WooCommerce 6.7 compatibility.
82
- * Update - Facebook Marketing API from v12.0 to v13.0.
83
-
84
- = 2.6.16 - 2022-06-07 =
85
- * Fix - Updating reference from old master branch.
86
- * Tweak - WC 6.6 compatibility.
87
-
88
- 2022-06-01 - version 2.6.15
89
- * Fix - Do not set `sale_price` when the product is not on sale.
90
- * Fix - FB Pixel is missing some ajax Add to cart events.
91
- * Fix - Feed visibility field value for hidden items.
92
- * Fix - Wrong Value Field in AddToCart Events.
93
- * Tweak - Not show the removed from sync confirm modal for unpublished products.
94
-
95
- 2022-05-18 - version 2.6.14
96
- * Fix - Non-latin custom product attribute names sync.
97
- * Fix - Syncing brand FB attribute instead of the website name.
98
- * Fix - Trigger InitiateCheckout event when site uses checkout block.
99
- * Fix - Wrong sale price start date getting synced to FB Catalog.
100
- * Fix - Allow products with "shop only" WooCommerce catalog visibility to sync to FB.
101
- * Fix - Remove semicolon from custom attribute value.
102
- * Tweak - Update the __experimental_woocommerce_blocks_checkout_update_order_meta action.
103
- * Tweak - WooCommerce 6.5 compatibility.
104
- * Tweak - WordPress 6.0 compatibility.
105
-
106
- 2022-04-26 - version 2.6.13
107
- * Fix - Issue with Facebook not displayed in the new WC navigation.
108
- * Fix - Issue with variable products syncing to FB product sets.
109
- * Fix - Scheduled job logs written to options table are never removed if job does not complete.
110
- * Fix - User-Agent to contain English extension name.
111
- * Fix - clear out wc_facebook_external_business_id option on disconnect.
112
- * Fix - fix product title length check to account for encoding.
113
- * Tweak - Use `Automattic\WooCommerce\Admin\Features\Features::is_enabled` instead of the deprecated `WooCommerce\Admin\Loader::is_feature_enabled`.
114
-
115
- 2022-03-08 - version 2.6.12
116
- * Add - Filter to change Facebook Retailer ID, wc_facebook_fb_retailer_id.
117
-
118
- 2022-02-28 - version 2.6.11
119
- * Fix - The syntax parsing error "unexpected ')'" in facebook-for-woocommerce.php.
120
-
121
- 2022-02-22 - version 2.6.10
122
- * Add - Filter to block full catalog batch API sync 'facebook_for_woocommerce_block_full_batch_api_sync'.
123
- * Update - Deprecate 'facebook_for_woocommerce_allow_full_batch_api_sync' filter.
124
- * Update - Facebook Marketing API from v11.0 to v12.0.
125
-
126
- 2022-01-14 - version 2.6.9
127
- * Fix - Replace is_ajax with wp_doing_ajax
128
- * Tweak - Update contributor guidelines
129
- * Tweak - WC 6.1 compatibility
130
-
131
- 2021-12-21 - version 2.6.8
132
- * Fix - Bump template from 1.0.4 to 1.0.5. #2115
133
- * Fix - Fix empty "value" for variable products. #1784
134
- * Tweak - WC 6.0 compatibility.
135
- * Tweak - WP 5.9 compatibility.
136
-
137
- 2021-11-04 - version 2.6.7
138
- * Fix - Parameter overloading error for PHP70 #2112
139
-
140
- 2021-11-03 - version 2.6.6
141
- * New - Memory improved feed generation process. #2099
142
- * New - Add compatibility with the WooCommerce checkout block. #2095
143
- * New - Track batched feed generation time in the tracker snapshots. #2104
144
- * New - Track usage of the new style feed generator in the tracker snapshots. #2103
145
- * New - Hide headers in logs for better visibility. #2093
146
- * Dev - Update composer dependencies. #2090
147
- * New - Add no synchronization reason to the product edit screen in the Facebook meta box. #1937
148
- * Fix - Use published variations only for the default variation. #2091
149
-
150
- 2021-09-16 - version 2.6.5
151
  * Fix - Incorrect `is_readable()` usage when loading Integration classes.
152
  * Tweak - WC 5.7 compatibility.
153
  * Tweak - WP 5.8 compatibility.
1
  *** Facebook for WooCommerce Changelog ***
2
 
3
+ 2021-09-16 - version 2.6.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  * Fix - Incorrect `is_readable()` usage when loading Integration classes.
5
  * Tweak - WC 5.7 compatibility.
6
  * Tweak - WP 5.8 compatibility.
class-wc-facebookcommerce.php CHANGED
@@ -17,11 +17,6 @@ use SkyVerge\WooCommerce\Facebook\Utilities\Background_Remove_Duplicate_Visibili
17
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
18
  use SkyVerge\WooCommerce\Facebook\ProductSync\ProductValidator as ProductSyncValidator;
19
  use SkyVerge\WooCommerce\Facebook\Utilities\Heartbeat;
20
- use Automattic\WooCommerce\Admin\Features\Features as WooAdminFeatures;
21
- use Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskLists;
22
- use Automattic\WooCommerce\Admin\Notes\Note;
23
- use SkyVerge\WooCommerce\Facebook\Admin\Tasks\Setup;
24
- use SkyVerge\WooCommerce\Facebook\Admin\Notes\SettingsMoved;
25
 
26
  if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
27
 
@@ -45,8 +40,6 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
45
  /** @var string the product set categories meta name */
46
  const PRODUCT_SET_META = '_wc_facebook_product_cats';
47
 
48
- /** @var string the plugin user agent name to use for HTTP calls within User-Agent header */
49
- const PLUGIN_USER_AGENT_NAME = 'Facebook-for-WooCommerce';
50
 
51
  /** @var \WC_Facebookcommerce singleton instance */
52
  protected static $instance;
@@ -99,8 +92,8 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
99
  /** @var \SkyVerge\WooCommerce\Facebook\Tracker */
100
  private $tracker;
101
 
102
- /** @var \SkyVerge\WooCommerce\Facebook\Jobs\JobManager */
103
- public $job_manager;
104
 
105
  /** @var Heartbeat */
106
  public $heartbeat;
@@ -137,18 +130,10 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
137
  add_filter( 'fb_product_set_row_actions', array( $this, 'product_set_links' ) );
138
  add_filter( 'manage_edit-fb_product_set_columns', array( $this, 'manage_fb_product_set_columns' ) );
139
 
140
- // Hook the setup task. The hook admin_init is not triggered when the WC fetches the tasks using the endpoint: wp-json/wc-admin/onboarding/tasks and hence hooking into init.
141
- add_action( 'init', array( $this, 'add_setup_task' ), 20 );
142
-
143
  // Product Set breadcrumb filters
144
  add_filter( 'woocommerce_navigation_is_connected_page', array( $this, 'is_current_page_conected_filter' ), 99, 2 );
145
  add_filter( 'woocommerce_navigation_get_breadcrumbs', array( $this, 'wc_page_breadcrumbs_filter' ), 99 );
146
 
147
- add_filter(
148
- 'wc_' . WC_Facebookcommerce::PLUGIN_ID . '_http_request_args',
149
- array( $this, 'force_user_agent_in_latin' )
150
- );
151
-
152
  if ( \WC_Facebookcommerce_Utils::isWoocommerceIntegration() ) {
153
  require_once __DIR__ . '/vendor/autoload.php';
154
 
@@ -173,7 +158,7 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
173
  $this->commerce_handler = new \SkyVerge\WooCommerce\Facebook\Commerce();
174
  $this->fb_categories = new \SkyVerge\WooCommerce\Facebook\Products\FBCategories();
175
 
176
- if ( wp_doing_ajax() ) {
177
  $this->ajax = new \SkyVerge\WooCommerce\Facebook\AJAX();
178
  }
179
 
@@ -203,8 +188,8 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
203
  $this->tracker = new \SkyVerge\WooCommerce\Facebook\Utilities\Tracker();
204
 
205
  // Init jobs
206
- $this->job_manager = new \SkyVerge\WooCommerce\Facebook\Jobs\JobManager();
207
- add_action( 'init', [ $this->job_manager, 'init' ] );
208
 
209
  // load admin handlers, before admin_init
210
  if ( is_admin() ) {
@@ -257,21 +242,6 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
257
  );
258
  }
259
 
260
- /**
261
- * Adds the setup task to the Tasklists.
262
- *
263
- * @since 2.6.29
264
- */
265
- public function add_setup_task() {
266
- if ( class_exists( TaskLists::class ) ) { // This is added for backward compatibility.
267
- TaskLists::add_task(
268
- 'extended',
269
- new Setup(
270
- TaskLists::get_list( 'extended' )
271
- )
272
- );
273
- }
274
- }
275
 
276
  /**
277
  * Adds the plugin admin notices.
@@ -325,6 +295,30 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
325
  )
326
  );
327
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  }
329
 
330
  // notices for those connected to FBE 2
@@ -380,34 +374,29 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
380
 
381
  if ( Framework\SV_WC_Plugin_Compatibility::is_enhanced_admin_available() ) {
382
 
383
- if ( class_exists( WooAdminFeatures::class ) ) {
384
- $is_marketing_enabled = WooAdminFeatures::is_enabled( 'marketing' );
385
- } else {
386
- $is_marketing_enabled = is_callable( '\Automattic\WooCommerce\Admin\Loader::is_feature_enabled' )
387
- && \Automattic\WooCommerce\Admin\Loader::is_feature_enabled( 'marketing' );
388
- }
389
 
390
- if ( $is_marketing_enabled && class_exists( Note::class ) ) { // Checking for Note class is for backward compatibility.
391
- SettingsMoved::possibly_add_or_delete_note();
 
 
 
 
 
 
 
 
 
 
 
 
392
  }
393
  }
394
  }
395
 
396
- /**
397
- * Get the last event from the plugin lifecycle.
398
- *
399
- * @since 2.6.29
400
- * @return array
401
- */
402
- public function get_last_event_from_history() {
403
- $last_event = array();
404
- $history_events = $this->lifecycle_handler->get_event_history();
405
-
406
- if ( isset( $history_events[0] ) ) {
407
- $last_event = $history_events[0];
408
- }
409
- return $last_event;
410
- }
411
 
412
  public function add_wordpress_integration() {
413
  new WP_Facebook_Integration();
@@ -446,17 +435,7 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
446
  return;
447
  }
448
 
449
- // Maybe remove headers from the debug log.
450
- if( ! $this->get_integration()->are_headers_requested_for_debug() ) {
451
- unset( $request['headers'] );
452
- unset( $response['headers'] );
453
- }
454
-
455
- $this->log( $this->get_api_log_message( $request ), $log_id );
456
-
457
- if ( ! empty( $response ) ) {
458
- $this->log( $this->get_api_log_message( $response ), $log_id );
459
- }
460
  }
461
 
462
  /**
@@ -469,14 +448,14 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
469
  }
470
 
471
  /**
472
- * Register Facebook Product Set Taxonomy
473
  *
474
  * @since 2.3.0
475
  */
476
  public function register_custom_taxonomy() {
477
 
478
- $plural = esc_html__( 'Facebook Product Sets', 'facebook-for-woocommerce' );
479
- $singular = esc_html__( 'Facebook Product Set', 'facebook-for-woocommerce' );
480
 
481
  $args = array(
482
  'labels' => array(
@@ -501,7 +480,6 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
501
  'public' => true,
502
  'show_in_nav_menus' => false,
503
  'show_tagcloud' => false,
504
- 'show_in_menu' => false,
505
  );
506
 
507
  register_taxonomy( 'fb_product_set', array( 'product' ), $args );
@@ -509,7 +487,7 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
509
 
510
 
511
  /**
512
- * Filter Facebook Product Set Taxonomy table links
513
  *
514
  * @since 2.3.0
515
  *
@@ -525,7 +503,7 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
525
 
526
 
527
  /**
528
- * Remove posts count column from Facebook Product Set custom taxonomy
529
  *
530
  * @since 2.3.0
531
  *
@@ -540,7 +518,7 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
540
 
541
 
542
  /**
543
- * Filter WC Breadcrumbs when the page is Facebook Product Sets
544
  *
545
  * @since 2.3.0
546
  *
@@ -572,7 +550,7 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
572
 
573
 
574
  /**
575
- * Return that Facebook Product Set page is a WC Conected Page
576
  *
577
  * @since 2.3.0
578
  *
@@ -589,30 +567,6 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
589
  return $is_conected;
590
  }
591
 
592
- /**
593
- * Filter is responsible to always set latin user agent header value, because translated plugin names
594
- * may contain characters which Facebook does not accept and return 400 response for requests with such
595
- * header values.
596
- * Applying either sanitize_title() nor remove_accents() on header value will not work for all the languages
597
- * we support translations to e.g. Hebrew is going to convert into something %d7%90%d7%a8%d7%99%d7%92 which is
598
- * not acceptable neither.
599
- *
600
- * @param array $http_request_headers - http request headers
601
- * @return array
602
- */
603
- public function force_user_agent_in_latin( array $http_request_headers ) {
604
- if ( isset( $http_request_headers['user-agent'] ) ) {
605
- $http_request_headers['user-agent'] = sprintf(
606
- '%s/%s (WooCommerce/%s; WordPress/%s)',
607
- WC_Facebookcommerce::PLUGIN_USER_AGENT_NAME,
608
- WC_Facebookcommerce::PLUGIN_VERSION,
609
- defined( 'WC_VERSION' ) ? WC_VERSION : WC_Facebook_Loader::MINIMUM_WC_VERSION,
610
- $GLOBALS['wp_version']
611
- );
612
- }
613
- return $http_request_headers;
614
- }
615
-
616
 
617
  /** Getter methods ********************************************************************************************/
618
 
@@ -1016,19 +970,6 @@ if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
1016
 
1017
  return admin_url( 'admin.php?page=wc-facebook' );
1018
  }
1019
-
1020
- /**
1021
- * Gets the advertise tab page URL.
1022
- *
1023
- * @since 2.6.29
1024
- *
1025
- * @return string
1026
- */
1027
- public function get_advertise_tab_url() {
1028
-
1029
- return admin_url( 'admin.php?page=wc-facebook&tab=advertise' );
1030
- }
1031
-
1032
 
1033
 
1034
  /**
17
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
18
  use SkyVerge\WooCommerce\Facebook\ProductSync\ProductValidator as ProductSyncValidator;
19
  use SkyVerge\WooCommerce\Facebook\Utilities\Heartbeat;
 
 
 
 
 
20
 
21
  if ( ! class_exists( 'WC_Facebookcommerce' ) ) :
22
 
40
  /** @var string the product set categories meta name */
41
  const PRODUCT_SET_META = '_wc_facebook_product_cats';
42
 
 
 
43
 
44
  /** @var \WC_Facebookcommerce singleton instance */
45
  protected static $instance;
92
  /** @var \SkyVerge\WooCommerce\Facebook\Tracker */
93
  private $tracker;
94
 
95
+ /** @var \SkyVerge\WooCommerce\Facebook\Jobs\JobRegistry */
96
+ public $job_registry;
97
 
98
  /** @var Heartbeat */
99
  public $heartbeat;
130
  add_filter( 'fb_product_set_row_actions', array( $this, 'product_set_links' ) );
131
  add_filter( 'manage_edit-fb_product_set_columns', array( $this, 'manage_fb_product_set_columns' ) );
132
 
 
 
 
133
  // Product Set breadcrumb filters
134
  add_filter( 'woocommerce_navigation_is_connected_page', array( $this, 'is_current_page_conected_filter' ), 99, 2 );
135
  add_filter( 'woocommerce_navigation_get_breadcrumbs', array( $this, 'wc_page_breadcrumbs_filter' ), 99 );
136
 
 
 
 
 
 
137
  if ( \WC_Facebookcommerce_Utils::isWoocommerceIntegration() ) {
138
  require_once __DIR__ . '/vendor/autoload.php';
139
 
158
  $this->commerce_handler = new \SkyVerge\WooCommerce\Facebook\Commerce();
159
  $this->fb_categories = new \SkyVerge\WooCommerce\Facebook\Products\FBCategories();
160
 
161
+ if ( is_ajax() ) {
162
  $this->ajax = new \SkyVerge\WooCommerce\Facebook\AJAX();
163
  }
164
 
188
  $this->tracker = new \SkyVerge\WooCommerce\Facebook\Utilities\Tracker();
189
 
190
  // Init jobs
191
+ $this->job_registry = new \SkyVerge\WooCommerce\Facebook\Jobs\JobRegistry();
192
+ add_action( 'init', [ $this->job_registry, 'init' ] );
193
 
194
  // load admin handlers, before admin_init
195
  if ( is_admin() ) {
242
  );
243
  }
244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
 
246
  /**
247
  * Adds the plugin admin notices.
295
  )
296
  );
297
  }
298
+
299
+ // otherwise, a general getting started message
300
+ } elseif ( ! $this->is_plugin_settings() ) {
301
+
302
+ $message = sprintf(
303
+ /* 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 */
304
+ esc_html__(
305
+ '%1$sFacebook for WooCommerce is almost ready.%2$s To complete your configuration, %3$scomplete the setup steps%4$s.',
306
+ 'facebook-for-woocommerce'
307
+ ),
308
+ '<strong>',
309
+ '</strong>',
310
+ '<a href="' . esc_url( facebook_for_woocommerce()->get_settings_url() ) . '">',
311
+ '</a>'
312
+ );
313
+
314
+ $this->get_admin_notice_handler()->add_admin_notice(
315
+ $message,
316
+ self::PLUGIN_ID . '_get_started',
317
+ array(
318
+ 'dismissible' => true,
319
+ 'notice_class' => 'notice-info',
320
+ )
321
+ );
322
  }
323
 
324
  // notices for those connected to FBE 2
374
 
375
  if ( Framework\SV_WC_Plugin_Compatibility::is_enhanced_admin_available() ) {
376
 
377
+ $is_marketing_enabled = is_callable( 'Automattic\WooCommerce\Admin\Loader::is_feature_enabled' )
378
+ && Automattic\WooCommerce\Admin\Loader::is_feature_enabled( 'marketing' );
379
+
380
+ if ( $is_marketing_enabled ) {
 
 
381
 
382
+ $this->get_admin_notice_handler()->add_admin_notice(
383
+ sprintf(
384
+ /* translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing </a> HTML link tag */
385
+ esc_html__( 'Heads up! The Facebook menu is now located under the %1$sMarketing%2$s menu.', 'facebook-for-woocommerce' ),
386
+ '<a href="' . esc_url( $this->get_settings_url() ) . '">',
387
+ '</a>'
388
+ ),
389
+ 'settings_moved_to_marketing',
390
+ array(
391
+ 'dismissible' => true,
392
+ 'always_show_on_settings' => false,
393
+ 'notice_class' => 'notice-info',
394
+ )
395
+ );
396
  }
397
  }
398
  }
399
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
400
 
401
  public function add_wordpress_integration() {
402
  new WP_Facebook_Integration();
435
  return;
436
  }
437
 
438
+ parent::log_api_request( $request, $response, $log_id );
 
 
 
 
 
 
 
 
 
 
439
  }
440
 
441
  /**
448
  }
449
 
450
  /**
451
+ * Register FB Product Set Taxonomy
452
  *
453
  * @since 2.3.0
454
  */
455
  public function register_custom_taxonomy() {
456
 
457
+ $plural = esc_html__( 'FB Product Sets', 'facebook-for-woocommerce' );
458
+ $singular = esc_html__( 'FB Product Set', 'facebook-for-woocommerce' );
459
 
460
  $args = array(
461
  'labels' => array(
480
  'public' => true,
481
  'show_in_nav_menus' => false,
482
  'show_tagcloud' => false,
 
483
  );
484
 
485
  register_taxonomy( 'fb_product_set', array( 'product' ), $args );
487
 
488
 
489
  /**
490
+ * Filter FB Product Set Taxonomy table links
491
  *
492
  * @since 2.3.0
493
  *
503
 
504
 
505
  /**
506
+ * Remove posts count column from FB Product Set custom taxonomy
507
  *
508
  * @since 2.3.0
509
  *
518
 
519
 
520
  /**
521
+ * Filter WC Breadcrumbs when the page is FB Product Sets
522
  *
523
  * @since 2.3.0
524
  *
550
 
551
 
552
  /**
553
+ * Return that FB Product Set page is a WC Conected Page
554
  *
555
  * @since 2.3.0
556
  *
567
  return $is_conected;
568
  }
569
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
 
571
  /** Getter methods ********************************************************************************************/
572
 
970
 
971
  return admin_url( 'admin.php?page=wc-facebook' );
972
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
973
 
974
 
975
  /**
data/.gitkeep DELETED
File without changes
facebook-commerce-events-tracker.php CHANGED
@@ -43,9 +43,6 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
43
  /** @var array with events tracked */
44
  private $tracked_events;
45
 
46
- /** @var array array with epnding events */
47
- private $pending_events = [];
48
-
49
  /** @var AAMSettings aam settings instance, used to filter advanced matching fields*/
50
  private $aam_settings;
51
 
@@ -121,7 +118,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
121
  // AddToCart while AJAX is enabled
122
  add_action( 'woocommerce_ajax_added_to_cart', array( $this, 'add_filter_for_add_to_cart_fragments' ) );
123
  // AddToCart while using redirect to cart page
124
- if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add', 'no' ) ) {
125
  add_filter( 'woocommerce_add_to_cart_redirect', array( $this, 'set_last_product_added_to_cart_upon_redirect' ), 10, 2 );
126
  add_action( 'woocommerce_ajax_added_to_cart', array( $this, 'set_last_product_added_to_cart_upon_ajax_redirect' ) );
127
  add_action( 'woocommerce_after_cart', array( $this, 'inject_add_to_cart_redirect_event' ), 10, 2 );
@@ -129,26 +126,12 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
129
 
130
  // InitiateCheckout events
131
  add_action( 'woocommerce_after_checkout_form', array( $this, 'inject_initiate_checkout_event' ) );
132
- // InitiateCheckout events for checkout block.
133
- add_action( 'woocommerce_blocks_checkout_enqueue_data', array( $this, 'inject_initiate_checkout_event' ) );
134
  // Purchase and Subscribe events
135
  add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'inject_purchase_event' ) );
136
  add_action( 'woocommerce_thankyou', array( $this, 'inject_purchase_event' ), 40 );
137
 
138
- // Checkout update order meta from the Checkout Block.
139
- if ( version_compare( \Automattic\WooCommerce\Blocks\Package::get_version(), '7.2.0', '>=' ) ) {
140
- add_action( 'woocommerce_store_api_checkout_update_order_meta', array( $this, 'inject_order_meta_event_for_checkout_block_flow' ), 10, 1 );
141
- } elseif ( version_compare( \Automattic\WooCommerce\Blocks\Package::get_version(), '6.3.0', '>=' ) ) {
142
- add_action( 'woocommerce_blocks_checkout_update_order_meta', array( $this, 'inject_order_meta_event_for_checkout_block_flow' ), 10, 1 );
143
- } else {
144
- add_action( '__experimental_woocommerce_blocks_checkout_update_order_meta', array( $this, 'inject_order_meta_event_for_checkout_block_flow' ), 10, 1 );
145
- }
146
-
147
  // TODO move this in some 3rd party plugin integrations handler at some point {FN 2020-03-20}
148
  add_action( 'wpcf7_contact_form', array( $this, 'inject_lead_event_hook' ), 11 );
149
-
150
- add_action( 'shutdown', array( $this, 'send_pending_events' ) );
151
-
152
  }
153
 
154
 
@@ -236,14 +219,14 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
236
  }
237
  }
238
 
239
- $category = get_queried_object();
240
 
241
  $event_name = 'ViewCategory';
242
  $event_data = array(
243
  'event_name' => $event_name,
244
  'custom_data' => array(
245
- 'content_name' => $category->name,
246
- 'content_category' => $category->name,
247
  'content_ids' => json_encode( array_slice( $product_ids, 0, 10 ) ),
248
  'content_type' => $content_type,
249
  'contents' => $contents,
@@ -253,7 +236,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
253
 
254
  $event = new Event( $event_data );
255
 
256
- $this->send_api_event( $event, false );
257
 
258
  $event_data['event_id'] = $event->get_id();
259
 
@@ -386,12 +369,10 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
386
  * Triggers Search for result pages (deduped)
387
  *
388
  * @internal
389
- *
390
- * @param WP_Query $query the query object
391
  */
392
- public function inject_search_event( $query ) {
393
 
394
- if ( ! $this->is_pixel_enabled() || ! $query->is_main_query() ) {
395
  return;
396
  }
397
 
@@ -528,12 +509,6 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
528
  $content_type = 'product';
529
  }
530
 
531
- if ( WC_Facebookcommerce_Utils::is_variable_type( $product->get_type() ) ) {
532
- $product_price = $product->get_variation_price( 'min' );
533
- } else {
534
- $product_price = $product->get_price();
535
- }
536
-
537
  $categories = \WC_Facebookcommerce_Utils::get_product_categories( $product->get_id() );
538
 
539
  $event_data = array(
@@ -551,7 +526,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
551
  )
552
  ),
553
  'content_category' => $categories['name'],
554
- 'value' => $product_price,
555
  'currency' => get_woocommerce_currency(),
556
  ),
557
  'user_data' => $this->pixel->get_user_info(),
@@ -559,7 +534,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
559
 
560
  $event = new Event( $event_data );
561
 
562
- $this->send_api_event( $event, false );
563
 
564
  $event_data['event_id'] = $event->get_id();
565
 
@@ -594,18 +569,11 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
594
  $event_data = array(
595
  'event_name' => 'AddToCart',
596
  'custom_data' => array(
597
- 'content_ids' => wp_json_encode( \WC_Facebookcommerce_Utils::get_fb_content_ids( $product ) ),
598
- 'content_name' => $product->get_name(),
599
  'content_type' => 'product',
600
- 'contents' => wp_json_encode(
601
- array(
602
- array(
603
- "id" => \WC_Facebookcommerce_Utils::get_fb_retailer_id( $product ),
604
- "quantity" => $quantity,
605
- ),
606
- )
607
- ),
608
- 'value' => (float) $product->get_price() * $quantity,
609
  'currency' => get_woocommerce_currency(),
610
  ),
611
  'user_data' => $this->pixel->get_user_info(),
@@ -613,7 +581,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
613
 
614
  $event = new SkyVerge\WooCommerce\Facebook\Events\Event( $event_data );
615
 
616
- $this->send_api_event( $event, false );
617
 
618
  // send the event ID to prevent duplication
619
  $event_data['event_id'] = $event->get_id();
@@ -636,7 +604,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
636
  */
637
  public function add_filter_for_add_to_cart_fragments() {
638
 
639
- if ( 'no' === get_option( 'woocommerce_cart_redirect_after_add', 'no' ) ) {
640
  add_filter( 'woocommerce_add_to_cart_fragments', array( $this, 'add_add_to_cart_event_fragment' ) );
641
  }
642
  }
@@ -654,35 +622,20 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
654
  */
655
  public function add_add_to_cart_event_fragment( $fragments ) {
656
 
657
- $product_id = isset( $_POST['product_id'] ) ? (int) $_POST['product_id'] : '';
658
- $quantity = isset( $_POST['quantity']) ? (int) $_POST['quantity'] : '';
659
- $product = wc_get_product($product_id);
660
-
661
- if ( ! $product instanceof \WC_Product || empty( $quantity ) ) {
662
- return $fragments;
663
- }
664
-
665
-
666
  if ( $this->is_pixel_enabled() ) {
667
 
668
  $params = array(
669
- 'content_ids' => wp_json_encode( \WC_Facebookcommerce_Utils::get_fb_content_ids( $product ) ),
670
- 'content_name' => $product->get_name(),
671
  'content_type' => 'product',
672
- 'contents' => wp_json_encode(
673
- array(
674
- array(
675
- 'id' => \WC_Facebookcommerce_Utils::get_fb_retailer_id( $product ),
676
- 'quantity' => $quantity,
677
- ),
678
- )
679
- ),
680
- 'value' => (float) $product->get_price() * $quantity,
681
  'currency' => get_woocommerce_currency(),
682
  );
683
 
684
  // send the event ID to prevent duplication
685
  if ( ! empty( $event_id = WC()->session->get( 'facebook_for_woocommerce_add_to_cart_event_id' ) ) ) {
 
686
  $params['event_id'] = $event_id;
687
  }
688
 
@@ -708,7 +661,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
708
  */
709
  public function add_filter_for_conditional_add_to_cart_fragment() {
710
 
711
- if ( 'no' === get_option( 'woocommerce_cart_redirect_after_add', 'no' ) ) {
712
  add_filter( 'woocommerce_add_to_cart_fragments', array( $this, 'add_conditional_add_to_cart_event_fragment' ) );
713
  }
714
  }
@@ -777,23 +730,13 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
777
  */
778
  public function set_last_product_added_to_cart_upon_redirect( $redirect, $product = null ) {
779
 
780
- // Bail if the session variable has been set.
781
- if ( WC()->session->get( 'facebook_for_woocommerce_last_product_added_to_cart', 0 ) > 0 ) {
782
- return $redirect;
783
- }
784
-
785
- $product_id = 0;
786
-
787
  if ( $product instanceof \WC_Product ) {
788
- $product_id = $_POST['variation_id'] ?? $product->get_id();
789
  } elseif ( isset( $_GET['add-to-cart'] ) && is_numeric( $_GET['add-to-cart'] ) ) {
790
- $product_id = $_GET['add-to-cart'];
791
  }
792
 
793
- WC()->session->set( 'facebook_for_woocommerce_last_product_added_to_cart', (int) $product_id );
794
-
795
  return $redirect;
796
-
797
  }
798
 
799
 
@@ -850,7 +793,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
850
  */
851
  public function inject_initiate_checkout_event() {
852
 
853
- if ( ! $this->is_pixel_enabled() || WC()->cart->get_cart_contents_count() === 0 || $this->pixel->is_last_event( 'InitiateCheckout' ) ) {
854
  return;
855
  }
856
 
@@ -886,7 +829,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
886
 
887
  $event = new Event( $event_data );
888
 
889
- $this->send_api_event( $event, false );
890
 
891
  $event_data['event_id'] = $event->get_id();
892
 
@@ -922,20 +865,21 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
922
  return;
923
  }
924
 
925
- // use a session flag to ensure an order is tracked with any payment method, also when the order is placed through AJAX
926
- $order_placed_session_flag = '_wc_' . facebook_for_woocommerce()->get_id() . '_order_placed_' . $order_id;
927
 
928
- // use a session flag to ensure a Purchase event is not tracked multiple times
929
- $purchase_tracked_session_flag = '_wc_' . facebook_for_woocommerce()->get_id() . '_purchase_tracked_' . $order_id;
930
 
931
  // when saving the order meta data: add a flag to mark the order tracked
932
  if ( 'woocommerce_checkout_update_order_meta' === current_action() ) {
933
- WC()->session->set( $order_placed_session_flag, 'yes' );
 
934
  return;
935
  }
936
 
937
  // bail if by the time we are on the thank you page the meta has not been set or we already tracked a Purchase event
938
- if ( 'yes' !== WC()->session->get( $order_placed_session_flag, 'no' ) || 'yes' === WC()->session->get( $purchase_tracked_session_flag, 'no' ) ) {
939
  return;
940
  }
941
 
@@ -947,7 +891,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
947
  foreach ( $order->get_items() as $item ) {
948
 
949
  $product = $item->get_product();
950
-
951
  if ( $product ) {
952
  $product_ids[] = \WC_Facebookcommerce_Utils::get_fb_content_ids( $product );
953
  $product_names[] = $product->get_name();
@@ -990,39 +934,8 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
990
  $this->inject_subscribe_event( $order_id );
991
 
992
  // mark the order as tracked
993
- WC()->session->set( $purchase_tracked_session_flag, 'yes' );
994
- }
995
-
996
- /**
997
- * Inject order meta gor WooCommerce Checkout Blocks flow.
998
- * The blocks flow does not trigger the woocommerce_checkout_update_order_meta so we can't rely on it.
999
- * The Checkout Block has its own hook that allows us to inject the meta at
1000
- * the appropriate moment: woocommerce_store_api_checkout_update_order_meta.
1001
- *
1002
- * Note: __experimental_woocommerce_blocks_checkout_update_order_meta has been deprecated
1003
- * as of WooCommerce Blocks 6.3.0
1004
- *
1005
- * @since 2.6.6
1006
- *
1007
- * @param WC_Order|int $the_order Order object or id.
1008
- */
1009
- public function inject_order_meta_event_for_checkout_block_flow( $the_order ) {
1010
-
1011
- $event_name = 'Purchase';
1012
-
1013
- if ( ! $this->is_pixel_enabled() || $this->pixel->is_last_event( $event_name ) ) {
1014
- return;
1015
- }
1016
-
1017
- $order = wc_get_order($the_order);
1018
-
1019
- if ( ! $order ) {
1020
- return;
1021
- }
1022
-
1023
- $order_placed_session_flag = '_wc_' . facebook_for_woocommerce()->get_id() . '_order_placed_' . $order->get_id();
1024
- WC()->session->set( $order_placed_session_flag, 'yes' );
1025
-
1026
  }
1027
 
1028
 
@@ -1068,6 +981,26 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
1068
  }
1069
 
1070
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1071
  /** Contact Form 7 Support **/
1072
  public function inject_lead_event_hook() {
1073
  add_action( 'wp_footer', array( $this, 'inject_lead_event' ), 11 );
@@ -1091,29 +1024,25 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
1091
  * @since 2.0.0
1092
  *
1093
  * @param Event $event event object
1094
- * @param bool $send_now optional, defaults to true
1095
  */
1096
- protected function send_api_event( Event $event, bool $send_now = true ) {
1097
  $this->tracked_events[] = $event;
1098
 
1099
- if ( $send_now ) {
1100
-
1101
- try {
1102
 
1103
- facebook_for_woocommerce()->get_api()->send_pixel_events( facebook_for_woocommerce()->get_integration()->get_facebook_pixel_id(), array( $event ) );
1104
 
1105
- } catch ( Framework\SV_WC_API_Exception $exception ) {
1106
 
1107
- facebook_for_woocommerce()->log( 'Could not send Pixel event: ' . $exception->getMessage() );
1108
- }
1109
-
1110
- } else {
1111
-
1112
- $this->pending_events[] = $event;
1113
 
 
 
 
1114
  }
1115
 
1116
-
1117
  }
1118
 
1119
 
@@ -1267,32 +1196,6 @@ if ( ! class_exists( 'WC_Facebookcommerce_EventsTracker' ) ) :
1267
  return $this->tracked_events;
1268
  }
1269
 
1270
- /**
1271
- * Gets the pending events awaiting to be sent
1272
- *
1273
- * @return array
1274
- */
1275
- public function get_pending_events() {
1276
- return $this->pending_events;
1277
- }
1278
-
1279
- /**
1280
- * Send pending events.
1281
- */
1282
- public function send_pending_events() {
1283
-
1284
- $pending_events = $this->get_pending_events();
1285
-
1286
- if ( empty( $pending_events ) ) {
1287
- return;
1288
- }
1289
-
1290
- foreach ( $pending_events as $event ) {
1291
-
1292
- $this->send_api_event( $event );
1293
- }
1294
- }
1295
-
1296
  }
1297
 
1298
  endif;
43
  /** @var array with events tracked */
44
  private $tracked_events;
45
 
 
 
 
46
  /** @var AAMSettings aam settings instance, used to filter advanced matching fields*/
47
  private $aam_settings;
48
 
118
  // AddToCart while AJAX is enabled
119
  add_action( 'woocommerce_ajax_added_to_cart', array( $this, 'add_filter_for_add_to_cart_fragments' ) );
120
  // AddToCart while using redirect to cart page
121
+ if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
122
  add_filter( 'woocommerce_add_to_cart_redirect', array( $this, 'set_last_product_added_to_cart_upon_redirect' ), 10, 2 );
123
  add_action( 'woocommerce_ajax_added_to_cart', array( $this, 'set_last_product_added_to_cart_upon_ajax_redirect' ) );
124
  add_action( 'woocommerce_after_cart', array( $this, 'inject_add_to_cart_redirect_event' ), 10, 2 );
126
 
127
  // InitiateCheckout events
128
  add_action( 'woocommerce_after_checkout_form', array( $this, 'inject_initiate_checkout_event' ) );
 
 
129
  // Purchase and Subscribe events
130
  add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'inject_purchase_event' ) );
131
  add_action( 'woocommerce_thankyou', array( $this, 'inject_purchase_event' ), 40 );
132
 
 
 
 
 
 
 
 
 
 
133
  // TODO move this in some 3rd party plugin integrations handler at some point {FN 2020-03-20}
134
  add_action( 'wpcf7_contact_form', array( $this, 'inject_lead_event_hook' ), 11 );
 
 
 
135
  }
136
 
137
 
219
  }
220
  }
221
 
222
+ $categories = WC_Facebookcommerce_Utils::get_product_categories( get_the_ID() );
223
 
224
  $event_name = 'ViewCategory';
225
  $event_data = array(
226
  'event_name' => $event_name,
227
  'custom_data' => array(
228
+ 'content_name' => $categories['name'],
229
+ 'content_category' => $categories['categories'],
230
  'content_ids' => json_encode( array_slice( $product_ids, 0, 10 ) ),
231
  'content_type' => $content_type,
232
  'contents' => $contents,
236
 
237
  $event = new Event( $event_data );
238
 
239
+ $this->send_api_event( $event );
240
 
241
  $event_data['event_id'] = $event->get_id();
242
 
369
  * Triggers Search for result pages (deduped)
370
  *
371
  * @internal
 
 
372
  */
373
+ public function inject_search_event() {
374
 
375
+ if ( ! $this->is_pixel_enabled() ) {
376
  return;
377
  }
378
 
509
  $content_type = 'product';
510
  }
511
 
 
 
 
 
 
 
512
  $categories = \WC_Facebookcommerce_Utils::get_product_categories( $product->get_id() );
513
 
514
  $event_data = array(
526
  )
527
  ),
528
  'content_category' => $categories['name'],
529
+ 'value' => $product->get_price(),
530
  'currency' => get_woocommerce_currency(),
531
  ),
532
  'user_data' => $this->pixel->get_user_info(),
534
 
535
  $event = new Event( $event_data );
536
 
537
+ $this->send_api_event( $event );
538
 
539
  $event_data['event_id'] = $event->get_id();
540
 
569
  $event_data = array(
570
  'event_name' => 'AddToCart',
571
  'custom_data' => array(
572
+ 'content_ids' => $this->get_cart_content_ids(),
573
+ 'content_name' => $this->get_cart_content_names(),
574
  'content_type' => 'product',
575
+ 'contents' => $this->get_cart_contents(),
576
+ 'value' => $this->get_cart_total(),
 
 
 
 
 
 
 
577
  'currency' => get_woocommerce_currency(),
578
  ),
579
  'user_data' => $this->pixel->get_user_info(),
581
 
582
  $event = new SkyVerge\WooCommerce\Facebook\Events\Event( $event_data );
583
 
584
+ $this->send_api_event( $event );
585
 
586
  // send the event ID to prevent duplication
587
  $event_data['event_id'] = $event->get_id();
604
  */
605
  public function add_filter_for_add_to_cart_fragments() {
606
 
607
+ if ( 'no' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
608
  add_filter( 'woocommerce_add_to_cart_fragments', array( $this, 'add_add_to_cart_event_fragment' ) );
609
  }
610
  }
622
  */
623
  public function add_add_to_cart_event_fragment( $fragments ) {
624
 
 
 
 
 
 
 
 
 
 
625
  if ( $this->is_pixel_enabled() ) {
626
 
627
  $params = array(
628
+ 'content_ids' => $this->get_cart_content_ids(),
629
+ 'content_name' => $this->get_cart_content_names(),
630
  'content_type' => 'product',
631
+ 'contents' => $this->get_cart_contents(),
632
+ 'value' => $this->get_cart_total(),
 
 
 
 
 
 
 
633
  'currency' => get_woocommerce_currency(),
634
  );
635
 
636
  // send the event ID to prevent duplication
637
  if ( ! empty( $event_id = WC()->session->get( 'facebook_for_woocommerce_add_to_cart_event_id' ) ) ) {
638
+
639
  $params['event_id'] = $event_id;
640
  }
641
 
661
  */
662
  public function add_filter_for_conditional_add_to_cart_fragment() {
663
 
664
+ if ( 'no' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
665
  add_filter( 'woocommerce_add_to_cart_fragments', array( $this, 'add_conditional_add_to_cart_event_fragment' ) );
666
  }
667
  }
730
  */
731
  public function set_last_product_added_to_cart_upon_redirect( $redirect, $product = null ) {
732
 
 
 
 
 
 
 
 
733
  if ( $product instanceof \WC_Product ) {
734
+ WC()->session->set( 'facebook_for_woocommerce_last_product_added_to_cart', $product->get_id() );
735
  } elseif ( isset( $_GET['add-to-cart'] ) && is_numeric( $_GET['add-to-cart'] ) ) {
736
+ WC()->session->set( 'facebook_for_woocommerce_last_product_added_to_cart', (int) $_GET['add-to-cart'] );
737
  }
738
 
 
 
739
  return $redirect;
 
740
  }
741
 
742
 
793
  */
794
  public function inject_initiate_checkout_event() {
795
 
796
+ if ( ! $this->is_pixel_enabled() || $this->pixel->is_last_event( 'InitiateCheckout' ) ) {
797
  return;
798
  }
799
 
829
 
830
  $event = new Event( $event_data );
831
 
832
+ $this->send_api_event( $event );
833
 
834
  $event_data['event_id'] = $event->get_id();
835
 
865
  return;
866
  }
867
 
868
+ // use an order meta to ensure an order is tracked with any payment method, also when the order is placed through AJAX
869
+ $order_placed_meta = '_wc_' . facebook_for_woocommerce()->get_id() . '_order_placed';
870
 
871
+ // use an order meta to ensure a Purchase event is not tracked multiple times
872
+ $purchase_tracked_meta = '_wc_' . facebook_for_woocommerce()->get_id() . '_purchase_tracked';
873
 
874
  // when saving the order meta data: add a flag to mark the order tracked
875
  if ( 'woocommerce_checkout_update_order_meta' === current_action() ) {
876
+ $order->update_meta_data( $order_placed_meta, 'yes' );
877
+ $order->save_meta_data();
878
  return;
879
  }
880
 
881
  // bail if by the time we are on the thank you page the meta has not been set or we already tracked a Purchase event
882
+ if ( 'yes' !== $order->get_meta( $order_placed_meta ) || 'yes' === $order->get_meta( $purchase_tracked_meta ) ) {
883
  return;
884
  }
885
 
891
  foreach ( $order->get_items() as $item ) {
892
 
893
  $product = $item->get_product();
894
+
895
  if ( $product ) {
896
  $product_ids[] = \WC_Facebookcommerce_Utils::get_fb_content_ids( $product );
897
  $product_names[] = $product->get_name();
934
  $this->inject_subscribe_event( $order_id );
935
 
936
  // mark the order as tracked
937
+ $order->update_meta_data( $purchase_tracked_meta, 'yes' );
938
+ $order->save_meta_data();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
939
  }
940
 
941
 
981
  }
982
 
983
 
984
+ /**
985
+ * Triggers a Purchase event.
986
+ *
987
+ * Duplicate of {@see \WC_Facebookcommerce_EventsTracker::inject_purchase_event()}
988
+ *
989
+ * TODO remove this deprecated method by version 2.0.0 or by March 2020 {FN 2020-03-20}
990
+ *
991
+ * @internal
992
+ * @deprecated since 1.11.0
993
+ *
994
+ * @param int $order_id order identifier
995
+ */
996
+ public function inject_gateway_purchase_event( $order_id ) {
997
+
998
+ wc_deprecated_function( __METHOD__, '1.11.0', __CLASS__ . '::inject_purchase_event()' );
999
+
1000
+ $this->inject_purchase_event( $order_id );
1001
+ }
1002
+
1003
+
1004
  /** Contact Form 7 Support **/
1005
  public function inject_lead_event_hook() {
1006
  add_action( 'wp_footer', array( $this, 'inject_lead_event' ), 11 );
1024
  * @since 2.0.0
1025
  *
1026
  * @param Event $event event object
1027
+ * @return bool
1028
  */
1029
+ protected function send_api_event( Event $event ) {
1030
  $this->tracked_events[] = $event;
1031
 
1032
+ try {
 
 
1033
 
1034
+ facebook_for_woocommerce()->get_api()->send_pixel_events( facebook_for_woocommerce()->get_integration()->get_facebook_pixel_id(), array( $event ) );
1035
 
1036
+ $success = true;
1037
 
1038
+ } catch ( Framework\SV_WC_API_Exception $exception ) {
 
 
 
 
 
1039
 
1040
+ $success = false;
1041
+
1042
+ facebook_for_woocommerce()->log( 'Could not send Pixel event: ' . $exception->getMessage() );
1043
  }
1044
 
1045
+ return $success;
1046
  }
1047
 
1048
 
1196
  return $this->tracked_events;
1197
  }
1198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1199
  }
1200
 
1201
  endif;
facebook-commerce.php CHANGED
@@ -101,19 +101,16 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
101
  /** @var string the "debug mode" setting ID */
102
  const SETTING_ENABLE_DEBUG_MODE = 'wc_facebook_enable_debug_mode';
103
 
104
- /** @var string the "debug mode" setting ID */
105
- const SETTING_ENABLE_NEW_STYLE_FEED_GENERATOR = 'wc_facebook_enable_new_style_feed_generator';
106
-
107
- /** @var string request headers in the debug log */
108
- const SETTING_REQUEST_HEADERS_IN_DEBUG_MODE = 'wc_facebook_request_headers_in_debug_log';
109
-
110
  /** @var string the standard product description mode name */
111
  const PRODUCT_DESCRIPTION_MODE_STANDARD = 'standard';
112
 
113
  /** @var string the short product description mode name */
114
  const PRODUCT_DESCRIPTION_MODE_SHORT = 'short';
115
 
116
- /** @var string custom taxonomy Facebook Product Set ID */
 
 
 
117
  const FB_PRODUCT_SET_ID = 'fb_product_set_id';
118
 
119
  /** @var string|null the configured product catalog ID */
@@ -155,7 +152,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
155
  const FB_SHOP_PRODUCT_VISIBLE = 'published';
156
 
157
  /** @var string the API flag to set a product as not visible in the Facebook shop */
158
- const FB_SHOP_PRODUCT_HIDDEN = 'hidden';
159
 
160
  /** @var string @deprecated */
161
  const FB_CART_URL = 'fb_cart_url';
@@ -323,6 +320,12 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
323
  self::FB_PRIORITY_MID
324
  );
325
 
 
 
 
 
 
 
326
  add_action(
327
  'wp_ajax_ajax_check_feed_upload_status',
328
  array( $this, 'ajax_check_feed_upload_status' ),
@@ -339,6 +342,12 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
339
  array( $this, 'ajax_display_test_result' )
340
  );
341
 
 
 
 
 
 
 
342
  // Don't duplicate product FBID meta.
343
  add_filter( 'woocommerce_duplicate_product_exclude_meta', array( $this, 'fb_duplicate_product_reset_meta' ) );
344
 
@@ -360,10 +369,14 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
360
 
361
  add_action( 'before_delete_post', array( $this, 'on_product_delete' ) );
362
 
363
- // Ensure product is deleted from FB when moved to trash.
364
- add_action( 'wp_trash_post', array( $this, 'on_product_delete' ) );
365
 
366
- add_action( 'add_meta_boxes', 'SkyVerge\WooCommerce\Facebook\Admin\Product_Sync_Meta_Box::register', 10, 1 );
 
 
 
 
 
367
 
368
  add_action(
369
  'wp_ajax_ajax_fb_toggle_visibility',
@@ -400,6 +413,11 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
400
  $this->load_background_sync_process();
401
  }
402
 
 
 
 
 
 
403
 
404
  if ( $this->get_facebook_pixel_id() ) {
405
  $aam_settings = $this->load_aam_settings_of_pixel();
@@ -415,16 +433,6 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
415
  )
416
  );
417
 
418
- // Update products on change of status.
419
- add_action(
420
- 'transition_post_status',
421
- array( $this, 'fb_change_product_published_status' ),
422
- 10,
423
- 3
424
- );
425
-
426
- add_action( 'untrashed_post', array( $this, 'fb_restore_untrashed_variable_product' ) );
427
-
428
  // Product Set hooks.
429
  add_action( 'fb_wc_product_set_sync', array( $this, 'create_or_update_product_set_item' ), 99, 2 );
430
  add_action( 'fb_wc_product_set_delete', array( $this, 'delete_product_set_item' ), 99 );
@@ -583,6 +591,102 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
583
  wc_deprecated_function( __METHOD__, '1.10.0', '\\SkyVerge\\WooCommerce\\Facebook\\Admin::add_product_list_table_columns_content()' );
584
  }
585
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
586
  /**
587
  * Returns graph API client object.
588
  *
@@ -602,7 +706,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
602
  * @param string $product_group_id product group ID
603
  * @return array
604
  */
605
- public function get_variation_product_item_ids( $product, $product_group_id ) {
606
 
607
  $product_item_ids_by_variation_id = array();
608
  $missing_product_item_ids = array();
@@ -700,29 +804,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
700
  * @since 2.6.1
701
  */
702
  public function allow_full_batch_api_sync() {
703
-
704
- /**
705
- * Block the full batch API sync.
706
- *
707
- * @param bool $block_sync Should the full batch API sync be blocked?
708
- *
709
- * @return boolean True if full batch sync should be blocked.
710
- * @since 2.6.10
711
- */
712
- $block_sync = apply_filters(
713
- 'facebook_for_woocommerce_block_full_batch_api_sync',
714
- false
715
- );
716
-
717
- if ( $block_sync ) {
718
- return false;
719
- }
720
-
721
  $default_allow_sync = true;
722
- // If 'facebook_for_woocommerce_allow_full_batch_api_sync' is not used, prevent get_product_count from firing.
723
- if ( ! has_filter( 'facebook_for_woocommerce_allow_full_batch_api_sync' ) ) {
724
- return $default_allow_sync;
725
- }
726
 
727
  /**
728
  * Allow full batch api sync to be enabled or disabled.
@@ -731,18 +813,12 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
731
  * @param int $product_count Number of products in store.
732
  *
733
  * @return boolean True if full batch sync is safe.
734
- *
735
  * @since 2.6.1
736
- * @deprecated deprecated since version 2.6.10
737
  */
738
- return apply_filters_deprecated(
739
  'facebook_for_woocommerce_allow_full_batch_api_sync',
740
- array(
741
- $default_allow_sync,
742
- $this->get_product_count(),
743
- ),
744
- '2.6.10',
745
- 'facebook_for_woocommerce_block_full_batch_api_sync'
746
  );
747
  }
748
 
@@ -883,7 +959,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
883
  $sync_mode = isset( $_POST['wc_facebook_sync_mode'] ) ? $_POST['wc_facebook_sync_mode'] : Admin::SYNC_MODE_SYNC_DISABLED;
884
  $sync_enabled = Admin::SYNC_MODE_SYNC_DISABLED !== $sync_mode;
885
 
886
- if ( Admin::SYNC_MODE_SYNC_AND_SHOW === $sync_mode && $product->is_virtual() && 'bundle' !== $product->get_type() ) {
887
  // force to Sync and hide
888
  $sync_mode = Admin::SYNC_MODE_SYNC_AND_HIDE;
889
  }
@@ -1006,14 +1082,12 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1006
  }
1007
 
1008
  /**
1009
- * Bail if not enabled for sync, except if explicitly deleting from the metabox or when deleting the
1010
- * parent product ( Products::published_product_should_be_synced( $product ) will fail for the parent product
1011
- * when deleting a variable product. This causes the fb_group_id to remain on the DB. )
1012
  *
1013
  * @see ajax_delete_fb_product()
1014
  */
1015
- if ( ( ! wp_doing_ajax() || ! isset( $_POST['action'] ) || 'ajax_delete_fb_product' !== $_POST['action'] )
1016
- && ! Products::published_product_should_be_synced( $product ) && ! $product->is_type( 'variable' ) ) {
1017
 
1018
  return;
1019
  }
@@ -1031,7 +1105,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1031
  *
1032
  * @param \WC_Product $product WooCommerce product object
1033
  */
1034
- public function delete_fb_product( $product ) {
1035
 
1036
  $product_id = $product->get_id();
1037
 
@@ -1053,13 +1127,13 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1053
  if ( $variation instanceof \WC_Product ) {
1054
  $retailer_ids[] = \WC_Facebookcommerce_Utils::get_fb_retailer_id( $variation );
1055
  }
1056
- delete_post_meta( $variation_id, self::FB_PRODUCT_ITEM_ID );
1057
  }
1058
 
1059
  // enqueue variations to be deleted in the background
1060
  facebook_for_woocommerce()->get_products_sync_handler()->delete_products( $retailer_ids );
1061
 
1062
  $this->delete_product_group( $product_id );
 
1063
  } else {
1064
 
1065
  $this->delete_product_item( $product_id );
@@ -1069,7 +1143,6 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1069
  // clear out both item and group IDs
1070
  delete_post_meta( $product_id, self::FB_PRODUCT_ITEM_ID );
1071
  delete_post_meta( $product_id, self::FB_PRODUCT_GROUP_ID );
1072
-
1073
  }
1074
 
1075
 
@@ -1092,6 +1165,8 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1092
  return;
1093
  }
1094
 
 
 
1095
  $product = wc_get_product( $post->ID );
1096
 
1097
  // bail if we couldn't retrieve a valid product object or the product isn't enabled for sync
@@ -1100,50 +1175,11 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1100
  // variations before it gets called with the variable product. As a result, Products::product_should_be_synced()
1101
  // always returns false for the variable product (since all children are in the trash at that point).
1102
  // This causes update_fb_visibility() to be called on simple products and product variations only.
1103
- if ( ! $product instanceof \WC_Product || ( ! Products::published_product_should_be_synced( $product ) ) ) {
1104
- return;
1105
- }
1106
-
1107
- // Exclude variants. Product variables visibility is handled separately.
1108
- // @See fb_restore_untrashed_variable_product.
1109
- if ( $product->is_type( 'variant' ) ) {
1110
- return;
1111
- }
1112
-
1113
- $visibility = $product->is_visible() ? self::FB_SHOP_PRODUCT_VISIBLE : self::FB_SHOP_PRODUCT_HIDDEN;
1114
-
1115
- if ( $visibility === self::FB_SHOP_PRODUCT_VISIBLE ) {
1116
- // - new status is 'publish' regardless of old status, sync to Facebook
1117
- $this->on_product_publish( $product->get_id() );
1118
- } else {
1119
- $this->update_fb_visibility( $product, $visibility );
1120
- }
1121
- }
1122
-
1123
- /**
1124
- * Re-publish restored variable product.
1125
- *
1126
- * @internal
1127
- *
1128
- * @param int $post_id
1129
- */
1130
- public function fb_restore_untrashed_variable_product ( $post_id ) {
1131
- $product = wc_get_product( $post_id );
1132
-
1133
- if ( ! $product instanceof \WC_Product ) {
1134
- return;
1135
- }
1136
-
1137
- if ( ! $product->is_type( 'variable' ) ) {
1138
  return;
1139
  }
1140
 
1141
- $visibility = $product->is_visible() ? self::FB_SHOP_PRODUCT_VISIBLE : self::FB_SHOP_PRODUCT_HIDDEN;
1142
-
1143
- if ( $visibility === self::FB_SHOP_PRODUCT_VISIBLE ) {
1144
- // - new status is 'publish' regardless of old status, sync to Facebook
1145
- $this->on_product_publish( $product->get_id() );
1146
- }
1147
  }
1148
 
1149
 
@@ -1162,7 +1198,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1162
  */
1163
  private function should_update_visibility_for_product_status_change( $new_status, $old_status ) {
1164
 
1165
- return ( $old_status === 'publish' && $new_status !== 'publish' ) || ( $old_status === 'trash' && $new_status === 'publish' ) || ( $old_status === 'future' && $new_status === 'publish' );
1166
  }
1167
 
1168
 
@@ -1198,8 +1234,8 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1198
  function delete_on_out_of_stock( $wp_id, $woo_product ) {
1199
 
1200
  if ( Products::product_should_be_deleted( $woo_product ) ) {
1201
- $product = wc_get_product( $wp_id );
1202
- $this->delete_fb_product( $product );
1203
  return true;
1204
  }
1205
 
@@ -1219,11 +1255,11 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1219
  $woo_product = new \WC_Facebook_Product( $wp_id );
1220
  }
1221
 
1222
- if ( $this->delete_on_out_of_stock( $wp_id, $woo_product->woo_product ) ) {
1223
  return;
1224
  }
1225
 
1226
- if ( ! $this->product_should_be_synced( $woo_product->woo_product ) ) {
1227
  return;
1228
  }
1229
 
@@ -1274,11 +1310,11 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1274
  $woo_product = new \WC_Facebook_Product( $wp_id, $parent_product );
1275
  }
1276
 
1277
- if ( $this->delete_on_out_of_stock( $wp_id, $woo_product->woo_product ) ) {
1278
  return;
1279
  }
1280
 
1281
- if ( ! $this->product_should_be_synced( $woo_product->woo_product ) ) {
1282
  return;
1283
  }
1284
 
@@ -1479,14 +1515,21 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1479
  return;
1480
  }
1481
 
 
 
 
 
 
 
 
 
 
 
1482
 
1483
  $product_group_data = array(
1484
  'variants' => $variants,
1485
  );
1486
 
1487
- // Figure out the matching default variation.
1488
- $default_product_fbid = $this->get_product_group_default_variation( $woo_product, $fb_product_group_id );
1489
-
1490
  if ( $default_product_fbid ) {
1491
  $product_group_data['default_product_id'] = $default_product_fbid;
1492
  }
@@ -1512,82 +1555,39 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1512
 
1513
  /**
1514
  * Determines if there is a matching variation for the default attributes.
1515
- * Select closest matching if best can't be found.
1516
- *
1517
- * @since 2.6.6
1518
- * The algorithm only considers the variations that already have been synchronized to the catalog successfully.
1519
  *
1520
  * @since 2.1.2
1521
  *
1522
  * @param \WC_Facebook_Product $woo_product
1523
- * @return integer|null Facebook Catalog variation id.
1524
  */
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
  *
@@ -1667,7 +1667,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1667
  )
1668
  );
1669
 
1670
- // update product set to set Facebook Product Set ID
1671
  if ( $result && empty( $fb_product_set_id ) ) {
1672
 
1673
  // decode and get ID from result body
@@ -1878,7 +1878,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
1878
  */
1879
  function display_error_message_from_result( $result ) {
1880
  $error = json_decode( $result['body'] )->error;
1881
- $msg = ( 'Fatal' === $error->message && ! empty( $error->error_user_title ) ) ? $error->error_user_title : $error->message;
1882
  $this->display_error_message( $msg );
1883
  }
1884
 
@@ -2201,7 +2201,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
2201
  WC_Facebookcommerce_Utils::check_woo_ajax_permissions( 'syncall products', true );
2202
  check_ajax_referer( 'wc_facebook_settings_jsx' );
2203
 
2204
- $this->sync_facebook_products();
2205
  }
2206
 
2207
 
@@ -2213,11 +2213,22 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
2213
  *
2214
  * @since 1.10.2
2215
  *
 
2216
  */
2217
- private function sync_facebook_products() {
2218
 
2219
  try {
2220
- $this->sync_facebook_products_using_background_processor();
 
 
 
 
 
 
 
 
 
 
2221
  wp_send_json_success();
2222
 
2223
  } catch ( Framework\SV_WC_Plugin_Exception $e ) {
@@ -2395,6 +2406,121 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
2395
  return true;
2396
  }
2397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2398
  /**
2399
  * Toggles product visibility via AJAX.
2400
  *
@@ -3141,29 +3267,6 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
3141
  return (bool) apply_filters( 'wc_facebook_is_debug_mode_enabled', 'yes' === get_option( self::SETTING_ENABLE_DEBUG_MODE ), $this );
3142
  }
3143
 
3144
- /**
3145
- * Determines whether debug mode is enabled.
3146
- *
3147
- * @since 2.6.6
3148
- *
3149
- * @return bool
3150
- */
3151
- public function is_new_style_feed_generation_enabled() {
3152
- return (bool) ( 'yes' === get_option( self::SETTING_ENABLE_NEW_STYLE_FEED_GENERATOR ) );
3153
- }
3154
-
3155
- /**
3156
- * Check if logging headers is requested.
3157
- * For a typical troubleshooting session the request headers bring zero value except making the log unreadable.
3158
- * They will be disabled by default. Enabling them will require setting an option in the options table.
3159
- *
3160
- * @since 2.6.6
3161
- *
3162
- */
3163
- public function are_headers_requested_for_debug() {
3164
- return (bool) get_option( self::SETTING_REQUEST_HEADERS_IN_DEBUG_MODE, false );
3165
- }
3166
-
3167
 
3168
  /***
3169
  * Determines if the feed has been migrated from FBE 1 to FBE 1.5
@@ -3667,6 +3770,126 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
3667
  wp_die();
3668
  }
3669
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3670
  /** Deprecated methods ********************************************************************************************/
3671
 
3672
 
101
  /** @var string the "debug mode" setting ID */
102
  const SETTING_ENABLE_DEBUG_MODE = 'wc_facebook_enable_debug_mode';
103
 
 
 
 
 
 
 
104
  /** @var string the standard product description mode name */
105
  const PRODUCT_DESCRIPTION_MODE_STANDARD = 'standard';
106
 
107
  /** @var string the short product description mode name */
108
  const PRODUCT_DESCRIPTION_MODE_SHORT = 'short';
109
 
110
+ /** @var string the hook for the recurreing action that syncs products */
111
+ const ACTION_HOOK_SCHEDULED_RESYNC = 'sync_all_fb_products_using_feed';
112
+
113
+ /** @var string custom taxonomy FB product set ID */
114
  const FB_PRODUCT_SET_ID = 'fb_product_set_id';
115
 
116
  /** @var string|null the configured product catalog ID */
152
  const FB_SHOP_PRODUCT_VISIBLE = 'published';
153
 
154
  /** @var string the API flag to set a product as not visible in the Facebook shop */
155
+ const FB_SHOP_PRODUCT_HIDDEN = 'staging';
156
 
157
  /** @var string @deprecated */
158
  const FB_CART_URL = 'fb_cart_url';
320
  self::FB_PRIORITY_MID
321
  );
322
 
323
+ add_action(
324
+ 'wp_ajax_ajax_sync_all_fb_products_using_feed',
325
+ array( $this, 'ajax_sync_all_fb_products_using_feed' ),
326
+ self::FB_PRIORITY_MID
327
+ );
328
+
329
  add_action(
330
  'wp_ajax_ajax_check_feed_upload_status',
331
  array( $this, 'ajax_check_feed_upload_status' ),
342
  array( $this, 'ajax_display_test_result' )
343
  );
344
 
345
+ add_action(
346
+ 'wp_ajax_ajax_schedule_force_resync',
347
+ array( $this, 'ajax_schedule_force_resync' ),
348
+ self::FB_PRIORITY_MID
349
+ );
350
+
351
  // Don't duplicate product FBID meta.
352
  add_filter( 'woocommerce_duplicate_product_exclude_meta', array( $this, 'fb_duplicate_product_reset_meta' ) );
353
 
369
 
370
  add_action( 'before_delete_post', array( $this, 'on_product_delete' ) );
371
 
372
+ add_action( 'add_meta_boxes', array( $this, 'fb_product_metabox' ), 10, 1 );
 
373
 
374
+ add_action(
375
+ 'transition_post_status',
376
+ array( $this, 'fb_change_product_published_status' ),
377
+ 10,
378
+ 3
379
+ );
380
 
381
  add_action(
382
  'wp_ajax_ajax_fb_toggle_visibility',
413
  $this->load_background_sync_process();
414
  }
415
 
416
+ // Must be outside of admin for cron to schedule correctly.
417
+ add_action( 'sync_all_fb_products_using_feed', array( $this, 'handle_scheduled_resync_action' ), self::FB_PRIORITY_MID );
418
+
419
+ // Handle the special background feed generation action.
420
+ add_action( 'wc_facebook_generate_product_catalog_feed', array( $this, 'handle_generate_product_catalog_feed' ) );
421
 
422
  if ( $this->get_facebook_pixel_id() ) {
423
  $aam_settings = $this->load_aam_settings_of_pixel();
433
  )
434
  );
435
 
 
 
 
 
 
 
 
 
 
 
436
  // Product Set hooks.
437
  add_action( 'fb_wc_product_set_sync', array( $this, 'create_or_update_product_set_item' ), 99, 2 );
438
  add_action( 'fb_wc_product_set_delete', array( $this, 'delete_product_set_item' ), 99 );
591
  wc_deprecated_function( __METHOD__, '1.10.0', '\\SkyVerge\\WooCommerce\\Facebook\\Admin::add_product_list_table_columns_content()' );
592
  }
593
 
594
+
595
+ public function fb_product_metabox() {
596
+ $ajax_data = array(
597
+ 'nonce' => wp_create_nonce( 'wc_facebook_metabox_jsx' ),
598
+ );
599
+ wp_enqueue_script(
600
+ 'wc_facebook_metabox_jsx',
601
+ facebook_for_woocommerce()->get_asset_build_dir_url() . '/admin/metabox.js',
602
+ array(),
603
+ \WC_Facebookcommerce::PLUGIN_VERSION
604
+ );
605
+ wp_localize_script(
606
+ 'wc_facebook_metabox_jsx',
607
+ 'wc_facebook_metabox_jsx',
608
+ $ajax_data
609
+ );
610
+
611
+ add_meta_box(
612
+ 'facebook_metabox', // Meta box ID
613
+ 'Facebook', // Meta box Title
614
+ array( $this, 'fb_product_meta_box_html' ), // Callback
615
+ 'product', // Screen to which to add the meta box
616
+ 'side' // Context
617
+ );
618
+ }
619
+
620
+
621
+ /**
622
+ * Renders the content of the product meta box.
623
+ */
624
+ public function fb_product_meta_box_html() {
625
+ global $post;
626
+
627
+ $woo_product = new WC_Facebook_Product( $post->ID );
628
+ $fb_product_group_id = null;
629
+
630
+ if ( $woo_product->woo_product instanceof \WC_Product && Products::product_should_be_synced( $woo_product->woo_product ) ) {
631
+ $fb_product_group_id = $this->get_product_fbid( self::FB_PRODUCT_GROUP_ID, $post->ID, $woo_product );
632
+ }
633
+
634
+ ?>
635
+ <span id="fb_metadata">
636
+ <?php
637
+
638
+ if ( $fb_product_group_id ) {
639
+
640
+ ?>
641
+
642
+ <?php echo esc_html__( 'Facebook ID:', 'facebook-for-woocommerce' ); ?> <a href="https://facebook.com/<?php echo esc_attr( $fb_product_group_id ); ?>"
643
+ target="_blank"><?php echo esc_html( $fb_product_group_id ); ?></a>
644
+
645
+ <?php if ( WC_Facebookcommerce_Utils::is_variable_type( $woo_product->get_type() ) ) : ?>
646
+
647
+ <?php if ( $product_item_ids_by_variation_id = $this->get_variation_product_item_ids( $woo_product, $fb_product_group_id ) ) : ?>
648
+
649
+ <p>
650
+ <?php echo esc_html__( 'Variant IDs:', 'facebook-for-woocommerce' ); ?><br/>
651
+
652
+ <?php foreach ( $product_item_ids_by_variation_id as $variation_id => $product_item_id ) : ?>
653
+
654
+ <?php echo esc_html( $variation_id ); ?>: <a href="https://facebook.com/<?php echo esc_attr( $product_item_id ); ?>"
655
+ target="_blank"><?php echo esc_html( $product_item_id ); ?></a><br/>
656
+
657
+ <?php endforeach; ?>
658
+ </p>
659
+
660
+ <?php endif; ?>
661
+
662
+ <?php endif; ?>
663
+
664
+ <input name="is_product_page" type="hidden" value="1"/>
665
+
666
+ <p/>
667
+ <a href="#" onclick="fb_reset_product( <?php echo esc_js( $post->ID ); ?> )">
668
+ <?php echo esc_html__( 'Reset Facebook metadata', 'facebook-for-woocommerce' ); ?>
669
+ </a>
670
+
671
+ <p/>
672
+ <a href="#" onclick="fb_delete_product( <?php echo esc_js( $post->ID ); ?> )">
673
+ <?php echo esc_html__( 'Delete product(s) on Facebook', 'facebook-for-woocommerce' ); ?>
674
+ </a>
675
+
676
+ <?php
677
+
678
+ } else {
679
+
680
+ ?>
681
+ <b><?php echo esc_html__( 'This product is not yet synced to Facebook.', 'facebook-for-woocommerce' ); ?></b>
682
+ <?php
683
+ }
684
+
685
+ ?>
686
+ </span>
687
+ <?php
688
+ }
689
+
690
  /**
691
  * Returns graph API client object.
692
  *
706
  * @param string $product_group_id product group ID
707
  * @return array
708
  */
709
+ private function get_variation_product_item_ids( $product, $product_group_id ) {
710
 
711
  $product_item_ids_by_variation_id = array();
712
  $missing_product_item_ids = array();
804
  * @since 2.6.1
805
  */
806
  public function allow_full_batch_api_sync() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
807
  $default_allow_sync = true;
 
 
 
 
808
 
809
  /**
810
  * Allow full batch api sync to be enabled or disabled.
813
  * @param int $product_count Number of products in store.
814
  *
815
  * @return boolean True if full batch sync is safe.
 
816
  * @since 2.6.1
 
817
  */
818
+ return apply_filters(
819
  'facebook_for_woocommerce_allow_full_batch_api_sync',
820
+ $default_allow_sync,
821
+ $this->get_product_count()
 
 
 
 
822
  );
823
  }
824
 
959
  $sync_mode = isset( $_POST['wc_facebook_sync_mode'] ) ? $_POST['wc_facebook_sync_mode'] : Admin::SYNC_MODE_SYNC_DISABLED;
960
  $sync_enabled = Admin::SYNC_MODE_SYNC_DISABLED !== $sync_mode;
961
 
962
+ if ( Admin::SYNC_MODE_SYNC_AND_SHOW === $sync_mode && $product->is_virtual() ) {
963
  // force to Sync and hide
964
  $sync_mode = Admin::SYNC_MODE_SYNC_AND_HIDE;
965
  }
1082
  }
1083
 
1084
  /**
1085
+ * bail if not enabled for sync, except if explicitly deleting from the metabox
 
 
1086
  *
1087
  * @see ajax_delete_fb_product()
1088
  */
1089
+ if ( ( ! is_ajax() || ! isset( $_POST['action'] ) || 'ajax_delete_fb_product' !== $_POST['action'] )
1090
+ && ! Products::published_product_should_be_synced( $product ) ) {
1091
 
1092
  return;
1093
  }
1105
  *
1106
  * @param \WC_Product $product WooCommerce product object
1107
  */
1108
+ private function delete_fb_product( $product ) {
1109
 
1110
  $product_id = $product->get_id();
1111
 
1127
  if ( $variation instanceof \WC_Product ) {
1128
  $retailer_ids[] = \WC_Facebookcommerce_Utils::get_fb_retailer_id( $variation );
1129
  }
 
1130
  }
1131
 
1132
  // enqueue variations to be deleted in the background
1133
  facebook_for_woocommerce()->get_products_sync_handler()->delete_products( $retailer_ids );
1134
 
1135
  $this->delete_product_group( $product_id );
1136
+
1137
  } else {
1138
 
1139
  $this->delete_product_item( $product_id );
1143
  // clear out both item and group IDs
1144
  delete_post_meta( $product_id, self::FB_PRODUCT_ITEM_ID );
1145
  delete_post_meta( $product_id, self::FB_PRODUCT_GROUP_ID );
 
1146
  }
1147
 
1148
 
1165
  return;
1166
  }
1167
 
1168
+ $visibility = $new_status === 'publish' ? self::FB_SHOP_PRODUCT_VISIBLE : self::FB_SHOP_PRODUCT_HIDDEN;
1169
+
1170
  $product = wc_get_product( $post->ID );
1171
 
1172
  // bail if we couldn't retrieve a valid product object or the product isn't enabled for sync
1175
  // variations before it gets called with the variable product. As a result, Products::product_should_be_synced()
1176
  // always returns false for the variable product (since all children are in the trash at that point).
1177
  // This causes update_fb_visibility() to be called on simple products and product variations only.
1178
+ if ( ! $product instanceof \WC_Product || ! Products::published_product_should_be_synced( $product ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1179
  return;
1180
  }
1181
 
1182
+ $this->update_fb_visibility( $product, $visibility );
 
 
 
 
 
1183
  }
1184
 
1185
 
1198
  */
1199
  private function should_update_visibility_for_product_status_change( $new_status, $old_status ) {
1200
 
1201
+ return ( $old_status === 'publish' && $new_status !== 'publish' ) || ( $old_status === 'trash' && $new_status === 'publish' );
1202
  }
1203
 
1204
 
1234
  function delete_on_out_of_stock( $wp_id, $woo_product ) {
1235
 
1236
  if ( Products::product_should_be_deleted( $woo_product ) ) {
1237
+
1238
+ $this->delete_product_item( $wp_id );
1239
  return true;
1240
  }
1241
 
1255
  $woo_product = new \WC_Facebook_Product( $wp_id );
1256
  }
1257
 
1258
+ if ( ! $this->product_should_be_synced( $woo_product->woo_product ) ) {
1259
  return;
1260
  }
1261
 
1262
+ if ( $this->delete_on_out_of_stock( $wp_id, $woo_product->woo_product ) ) {
1263
  return;
1264
  }
1265
 
1310
  $woo_product = new \WC_Facebook_Product( $wp_id, $parent_product );
1311
  }
1312
 
1313
+ if ( ! $this->product_should_be_synced( $woo_product->woo_product ) ) {
1314
  return;
1315
  }
1316
 
1317
+ if ( $this->delete_on_out_of_stock( $wp_id, $woo_product->woo_product ) ) {
1318
  return;
1319
  }
1320
 
1515
  return;
1516
  }
1517
 
1518
+ // figure out the matching default variation
1519
+ $default_product_fbid = null;
1520
+ $woo_default_variation = $this->get_product_group_default_variation( $woo_product );
1521
+
1522
+ if ( $woo_default_variation ) {
1523
+ $default_product_fbid = $this->get_product_fbid(
1524
+ self::FB_PRODUCT_ITEM_ID,
1525
+ $woo_default_variation['variation_id']
1526
+ );
1527
+ }
1528
 
1529
  $product_group_data = array(
1530
  'variants' => $variants,
1531
  );
1532
 
 
 
 
1533
  if ( $default_product_fbid ) {
1534
  $product_group_data['default_product_id'] = $default_product_fbid;
1535
  }
1555
 
1556
  /**
1557
  * Determines if there is a matching variation for the default attributes.
 
 
 
 
1558
  *
1559
  * @since 2.1.2
1560
  *
1561
  * @param \WC_Facebook_Product $woo_product
1562
+ * @return array|null
1563
  */
1564
+ private function get_product_group_default_variation( $woo_product ) {
1565
 
1566
  $default_attributes = $woo_product->woo_product->get_default_attributes( 'edit' );
 
 
 
 
 
 
 
 
1567
 
1568
+ if ( empty( $default_attributes ) ) {
1569
+ return null;
1570
+ }
 
1571
 
1572
+ $default_variation = null;
1573
+ $product_variations = $woo_product->woo_product->get_available_variations();
 
 
 
1574
 
1575
+ foreach ( $product_variations as $variation ) {
 
 
 
1576
 
1577
+ $variation_attributes = $this->get_product_variation_attributes( $variation );
 
 
1578
 
1579
+ $matching_attributes = array_intersect_assoc( $default_attributes, $variation_attributes );
 
 
 
 
 
 
 
 
1580
 
1581
+ if ( count( $matching_attributes ) === count( $variation_attributes ) ) {
1582
+ $default_variation = $variation;
1583
+ break;
1584
  }
1585
  }
1586
 
1587
+ return $default_variation;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1588
  }
1589
 
1590
+
1591
  /**
1592
  * Parses given product variation for it's attributes
1593
  *
1667
  )
1668
  );
1669
 
1670
+ // update product set to set FB Product Set ID
1671
  if ( $result && empty( $fb_product_set_id ) ) {
1672
 
1673
  // decode and get ID from result body
1878
  */
1879
  function display_error_message_from_result( $result ) {
1880
  $error = json_decode( $result['body'] )->error;
1881
+ $msg = ( 'Fatal' === $error->message && ! empty( $error->error_user_title ) ) ? $error->error_user_title : $error_message;
1882
  $this->display_error_message( $msg );
1883
  }
1884
 
2201
  WC_Facebookcommerce_Utils::check_woo_ajax_permissions( 'syncall products', true );
2202
  check_ajax_referer( 'wc_facebook_settings_jsx' );
2203
 
2204
+ $this->sync_facebook_products( 'background' );
2205
  }
2206
 
2207
 
2213
  *
2214
  * @since 1.10.2
2215
  *
2216
+ * @param string $method either 'feed' or 'background'
2217
  */
2218
+ private function sync_facebook_products( $method ) {
2219
 
2220
  try {
2221
+
2222
+ if ( 'feed' === $method ) {
2223
+
2224
+ $this->sync_facebook_products_using_feed();
2225
+
2226
+ } elseif ( 'background' === $method ) {
2227
+
2228
+ // if syncs starts, the background processor will continue executing until the request ends and no response will be sent back to the browser
2229
+ $this->sync_facebook_products_using_background_processor();
2230
+ }
2231
+
2232
  wp_send_json_success();
2233
 
2234
  } catch ( Framework\SV_WC_Plugin_Exception $e ) {
2406
  return true;
2407
  }
2408
 
2409
+
2410
+ /**
2411
+ * Special function to run all visible products by uploading feed.
2412
+ *
2413
+ * @internal
2414
+ */
2415
+ public function ajax_sync_all_fb_products_using_feed() {
2416
+ WC_Facebookcommerce_Utils::check_woo_ajax_permissions(
2417
+ 'syncall products using feed',
2418
+ ! $this->test_mode
2419
+ );
2420
+ check_ajax_referer( 'wc_facebook_settings_jsx' );
2421
+
2422
+ $this->sync_facebook_products( 'feed' );
2423
+ }
2424
+
2425
+
2426
+ /**
2427
+ * Syncs Facebook products using a Feed.
2428
+ *
2429
+ * @see https://developers.facebook.com/docs/marketing-api/fbe/fbe1/guides/feed-approach
2430
+ *
2431
+ * @since 1.10.2
2432
+ *
2433
+ * @throws Framework\SV_WC_Plugin_Exception
2434
+ * @return bool
2435
+ */
2436
+ public function sync_facebook_products_using_feed() {
2437
+
2438
+ if ( ! $this->is_product_sync_enabled() ) {
2439
+ WC_Facebookcommerce_Utils::log( 'Sync to Facebook is disabled' );
2440
+
2441
+ throw new Framework\SV_WC_Plugin_Exception( __( 'Product sync is disabled.', 'facebook-for-woocommerce' ) );
2442
+ }
2443
+
2444
+ if ( ! $this->is_configured() || ! $this->get_product_catalog_id() ) {
2445
+
2446
+ WC_Facebookcommerce_Utils::log( sprintf( 'Not syncing, the plugin is not configured or the Catalog ID is missing' ) );
2447
+
2448
+ throw new Framework\SV_WC_Plugin_Exception( __( 'The plugin is not configured or the Catalog ID is missing.', 'facebook-for-woocommerce' ) );
2449
+ }
2450
+
2451
+ $this->remove_resync_message();
2452
+
2453
+ if ( ! $this->fbgraph->is_product_catalog_valid( $this->get_product_catalog_id() ) ) {
2454
+
2455
+ WC_Facebookcommerce_Utils::log( 'Not syncing, invalid product catalog!' );
2456
+ WC_Facebookcommerce_Utils::fblog(
2457
+ 'Tried to sync with an invalid product catalog!',
2458
+ array(),
2459
+ true
2460
+ );
2461
+
2462
+ throw new Framework\SV_WC_Plugin_Exception( __( "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.", 'facebook-for-woocommerce' ) );
2463
+ }
2464
+
2465
+ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) {
2466
+ include_once 'includes/fbproductfeed.php';
2467
+ }
2468
+ if ( $this->test_mode ) {
2469
+ $this->fbproductfeed = new WC_Facebook_Product_Feed_Test_Mock(
2470
+ $this->get_product_catalog_id(),
2471
+ $this->fbgraph,
2472
+ $this->get_feed_id()
2473
+ );
2474
+ } else {
2475
+ $this->fbproductfeed = new WC_Facebook_Product_Feed(
2476
+ $this->get_product_catalog_id(),
2477
+ $this->fbgraph,
2478
+ $this->get_feed_id()
2479
+ );
2480
+ }
2481
+
2482
+ if ( ! $this->fbproductfeed->sync_all_products_using_feed() ) {
2483
+
2484
+ WC_Facebookcommerce_Utils::fblog( 'Sync all products using feed, curl failed', array(), true );
2485
+
2486
+ throw new Framework\SV_WC_Plugin_Exception( __( "We couldn't create the feed or upload the product information.", 'facebook-for-woocommerce' ) );
2487
+ }
2488
+
2489
+ $this->update_feed_id( $this->fbproductfeed->feed_id );
2490
+ $this->update_upload_id( $this->fbproductfeed->upload_id );
2491
+
2492
+ update_option(
2493
+ $this->get_option_key(),
2494
+ apply_filters( 'woocommerce_settings_api_sanitized_fields_' . $this->id, $this->settings )
2495
+ );
2496
+
2497
+ wp_reset_postdata();
2498
+
2499
+ return true;
2500
+ }
2501
+
2502
+
2503
+ /**
2504
+ * Syncs Facebook products using a Feed.
2505
+ *
2506
+ * TODO: deprecate this methid in 1.11.0 or newer {WV 2020-03-12}
2507
+ *
2508
+ * @see https://developers.facebook.com/docs/marketing-api/fbe/fbe1/guides/feed-approach
2509
+ *
2510
+ * @return bool
2511
+ */
2512
+ public function sync_all_fb_products_using_feed() {
2513
+
2514
+ try {
2515
+ $sync_started = $this->sync_facebook_products_using_feed();
2516
+ } catch ( Framework\SV_WC_Plugin_Exception $e ) {
2517
+ $sync_started = false;
2518
+ }
2519
+
2520
+ return $sync_started;
2521
+ }
2522
+
2523
+
2524
  /**
2525
  * Toggles product visibility via AJAX.
2526
  *
3267
  return (bool) apply_filters( 'wc_facebook_is_debug_mode_enabled', 'yes' === get_option( self::SETTING_ENABLE_DEBUG_MODE ), $this );
3268
  }
3269
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3270
 
3271
  /***
3272
  * Determines if the feed has been migrated from FBE 1 to FBE 1.5
3770
  wp_die();
3771
  }
3772
 
3773
+
3774
+ /**
3775
+ * Schedules a recurring event to sync products.
3776
+ *
3777
+ * @deprecated 1.10.0
3778
+ */
3779
+ function ajax_schedule_force_resync() {
3780
+
3781
+ wc_deprecated_function( __METHOD__, '1.10.0' );
3782
+ die;
3783
+ }
3784
+
3785
+
3786
+ /**
3787
+ * Adds an recurring action to sync products.
3788
+ *
3789
+ * The action is scheduled using a cron schedule instead of a recurring interval (see https://en.wikipedia.org/wiki/Cron#Overview).
3790
+ * A cron schedule should allow for the action to run roughly at the same time every day regardless of the duration of the task.
3791
+ *
3792
+ * @since 1.10.0
3793
+ *
3794
+ * @param int $offset number of seconds since the beginning of the daay
3795
+ */
3796
+ public function schedule_resync( $offset ) {
3797
+
3798
+ try {
3799
+
3800
+ $current_time = new DateTime( 'now', new DateTimeZone( wc_timezone_string() ) );
3801
+ $first_scheduled_time = new DateTime( "today +{$offset} seconds", new DateTimeZone( wc_timezone_string() ) );
3802
+ $next_scheduled_time = new DateTime( "today +1 day {$offset} seconds", new DateTimeZone( wc_timezone_string() ) );
3803
+
3804
+ } catch ( \Exception $e ) {
3805
+ // TODO: log an error indicating that it was not possible to schedule a recurring action to sync products {WV 2020-01-28}
3806
+ return;
3807
+ }
3808
+
3809
+ // unschedule previously scheduled resync actions
3810
+ $this->unschedule_resync();
3811
+
3812
+ $timestamp = $first_scheduled_time >= $current_time ? $first_scheduled_time->getTimestamp() : $next_scheduled_time->getTimestamp();
3813
+
3814
+ // TODO: replace 'facebook-for-woocommerce' with the plugin ID once we stat using the Framework {WV 2020-01-30}
3815
+ as_schedule_single_action( $timestamp, self::ACTION_HOOK_SCHEDULED_RESYNC, array(), 'facebook-for-woocommerce' );
3816
+ }
3817
+
3818
+
3819
+ /**
3820
+ * Removes the recurring action that syncs products.
3821
+ *
3822
+ * @since 1.10.0
3823
+ */
3824
+ private function unschedule_resync() {
3825
+
3826
+ // TODO: replace 'facebook-for-woocommerce' with the plugin ID once we stat using the Framework {WV 2020-01-30}
3827
+ as_unschedule_all_actions( self::ACTION_HOOK_SCHEDULED_RESYNC, array(), 'facebook-for-woocommerce' );
3828
+ }
3829
+
3830
+
3831
+ /**
3832
+ * Determines whether a recurring action to sync products is scheduled and not running.
3833
+ *
3834
+ * @see \as_next_scheduled_action()
3835
+ *
3836
+ * @since 1.10.0
3837
+ *
3838
+ * @return bool
3839
+ */
3840
+ public function is_resync_scheduled() {
3841
+
3842
+ // TODO: replace 'facebook-for-woocommerce' with the plugin ID once we stat using the Framework {WV 2020-01-30}
3843
+ return is_int( as_next_scheduled_action( self::ACTION_HOOK_SCHEDULED_RESYNC, array(), 'facebook-for-woocommerce' ) );
3844
+ }
3845
+
3846
+
3847
+ /**
3848
+ * Handles the scheduled action used to sync products daily.
3849
+ *
3850
+ * It will schedule a new action if product sync is enabled and the plugin is configured to resnyc procucts daily.
3851
+ *
3852
+ * @internal
3853
+ *
3854
+ * @see \WC_Facebookcommerce_Integration::schedule_resync()
3855
+ *
3856
+ * @since 1.10.0
3857
+ */
3858
+ public function handle_scheduled_resync_action() {
3859
+
3860
+ try {
3861
+ $this->sync_facebook_products_using_feed();
3862
+ } catch ( Framework\SV_WC_Plugin_Exception $e ) {
3863
+ }
3864
+
3865
+ $resync_offset = $this->get_scheduled_resync_offset();
3866
+
3867
+ // manually schedule the next product resync action if possible
3868
+ if ( null !== $resync_offset && $this->is_product_sync_enabled() && ! $this->is_resync_scheduled() ) {
3869
+ $this->schedule_resync( $resync_offset );
3870
+ }
3871
+ }
3872
+
3873
+ /**
3874
+ * Handles the schedule feed generation action, triggered by the REST API.
3875
+ *
3876
+ * @since 1.11.0
3877
+ */
3878
+ public function handle_generate_product_catalog_feed() {
3879
+
3880
+ $feed_handler = new WC_Facebook_Product_Feed();
3881
+
3882
+ try {
3883
+
3884
+ $feed_handler->generate_feed();
3885
+
3886
+ } catch ( \Exception $exception ) {
3887
+
3888
+ WC_Facebookcommerce_Utils::log( 'Error generating product catalog feed. ' . $exception->getMessage() );
3889
+ }
3890
+ }
3891
+
3892
+
3893
  /** Deprecated methods ********************************************************************************************/
3894
 
3895
 
facebook-for-woocommerce.php CHANGED
@@ -11,29 +11,18 @@
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.30
15
  * Text Domain: facebook-for-woocommerce
16
- * Tested up to: 6.1
17
- * WC requires at least: 5.3
18
- * WC tested up to: 7.1
19
  * Requires PHP: 7.0
20
  *
21
  * @package FacebookCommerce
22
  */
23
 
24
- use Automattic\WooCommerce\Utilities\FeaturesUtil;
25
-
26
  defined( 'ABSPATH' ) || exit;
27
 
28
- // HPOS compatibility declaration.
29
- add_action(
30
- 'before_woocommerce_init',
31
- function() {
32
- if ( class_exists( FeaturesUtil::class ) ) {
33
- FeaturesUtil::declare_compatibility( 'custom_order_tables', plugin_basename( __FILE__ ), true );
34
- }
35
- }
36
- );
37
  /**
38
  * The plugin loader class.
39
  *
@@ -44,7 +33,7 @@ class WC_Facebook_Loader {
44
  /**
45
  * @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
46
  */
47
- const PLUGIN_VERSION = '2.6.30'; // WRCS: DEFINED_VERSION.
48
 
49
  // Minimum PHP version required by this plugin.
50
  const MINIMUM_PHP_VERSION = '7.0.0';
@@ -53,7 +42,7 @@ class WC_Facebook_Loader {
53
  const MINIMUM_WP_VERSION = '4.4';
54
 
55
  // Minimum WooCommerce version required by this plugin.
56
- const MINIMUM_WC_VERSION = '5.3';
57
 
58
  // SkyVerge plugin framework version used by this plugin.
59
  const FRAMEWORK_VERSION = '5.10.0';
@@ -87,8 +76,8 @@ class WC_Facebook_Loader {
87
  register_activation_hook( __FILE__, array( $this, 'activation_check' ) );
88
 
89
  add_action( 'admin_init', array( $this, 'check_environment' ) );
 
90
 
91
- add_action( 'admin_notices', array( $this, 'add_plugin_notices' ) ); // admin_init is too early for the get_current_screen() function.
92
  add_action( 'admin_notices', array( $this, 'admin_notices' ), 15 );
93
 
94
  // If the environment check fails, initialize the plugin.
@@ -229,85 +218,35 @@ class WC_Facebook_Loader {
229
  public function add_plugin_notices() {
230
 
231
  if ( ! $this->is_wp_compatible() ) {
232
- if ( current_user_can( 'update_core' ) ) {
233
- $this->add_admin_notice(
234
- 'update_wordpress',
235
- 'error',
236
- sprintf(
237
- /* translators: %1$s - plugin name, %2$s - minimum WordPress version required, %3$s - update WordPress link open, %4$s - update WordPress link close */
238
- esc_html__( '%1$s requires WordPress version %2$s or higher. Please %3$supdate WordPress &raquo;%4$s', 'facebook-for-woocommerce' ),
239
- '<strong>' . self::PLUGIN_NAME . '</strong>',
240
- self::MINIMUM_WP_VERSION,
241
- '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">',
242
- '</a>'
243
- )
244
- );
245
- }
246
- }
247
 
248
- // Notices to install and activate or update WooCommerce.
249
- $screen = get_current_screen();
250
- if ( isset( $screen->parent_file ) && 'plugins.php' === $screen->parent_file && 'update' === $screen->id ) {
251
- return; // Do not display the install/update/activate notice in the update plugin screen.
 
 
 
 
 
 
 
252
  }
253
 
254
- $plugin = 'woocommerce/woocommerce.php';
255
- // Check if WooCommerce is activated.
256
- if ( ! $this->is_wc_activated() ) {
257
-
258
- if ( $this->is_wc_installed() ) {
259
- // WooCommerce is installed but not activated. Ask the user to activate WooCommerce.
260
- if ( current_user_can( 'activate_plugins' ) ) {
261
- $activation_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin );
262
- $message = sprintf(
263
- /* translators: %1$s - Plugin Name, %2$s - activate WooCommerce link open, %3$s - activate WooCommerce link close. */
264
- esc_html__( '%1$s requires WooCommerce to be activated. Please %2$sactivate WooCommerce%3$s.', 'facebook-for-woocommerce' ),
265
- '<strong>' . self::PLUGIN_NAME . '</strong>',
266
- '<a href="' . esc_url( $activation_url ) . '">',
267
- '</a>'
268
- );
269
- $this->add_admin_notice(
270
- 'activate_woocommerce',
271
- 'error',
272
- $message
273
- );
274
- }
275
- } else {
276
- // WooCommerce is not installed. Ask the user to install WooCommerce.
277
- if ( current_user_can( 'install_plugins' ) ) {
278
- $install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' );
279
- $message = sprintf(
280
- /* translators: %1$s - Plugin Name, %2$s - install WooCommerce link open, %3$s - install WooCommerce link close. */
281
- esc_html__( '%1$s requires WooCommerce to be installed and activated. Please %2$sinstall WooCommerce%3$s.', 'facebook-for-woocommerce' ),
282
- '<strong>' . self::PLUGIN_NAME . '</strong>',
283
- '<a href="' . esc_url( $install_url ) . '">',
284
- '</a>'
285
- );
286
- $this->add_admin_notice(
287
- 'install_woocommerce',
288
- 'error',
289
- $message
290
- );
291
- }
292
- }
293
- } elseif ( ! $this->is_wc_compatible() ) { // If WooCommerce is activated, check for the version.
294
- if ( current_user_can( 'update_plugins' ) ) {
295
- $update_url = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $plugin, 'upgrade-plugin_' . $plugin );
296
- $this->add_admin_notice(
297
- 'update_woocommerce',
298
- 'error',
299
- sprintf(
300
- /* 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. */
301
- esc_html__( '%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', 'facebook-for-woocommerce' ),
302
- '<strong>' . self::PLUGIN_NAME . '</strong>',
303
- self::MINIMUM_WC_VERSION,
304
- '<a href="' . esc_url( $update_url ) . '">',
305
- '</a>',
306
- '<a href="' . esc_url( 'https://downloads.wordpress.org/plugin/woocommerce.' . self::MINIMUM_WC_VERSION . '.zip' ) . '">',
307
- '</a>'
308
- )
309
- );
310
- }
311
  }
312
  }
313
 
@@ -341,28 +280,6 @@ class WC_Facebook_Loader {
341
  return version_compare( get_bloginfo( 'version' ), self::MINIMUM_WP_VERSION, '>=' );
342
  }
343
 
344
- /**
345
- * Query WooCommerce activation.
346
- *
347
- * @since 2.6.24
348
- * @return bool
349
- */
350
- private function is_wc_activated() {
351
- return class_exists( 'WooCommerce' ) ? true : false;
352
- }
353
-
354
- /**
355
- * Determins if WooCommerce is installed.
356
- *
357
- * @since 2.6.24
358
- * @return bool
359
- */
360
- private function is_wc_installed() {
361
- $plugin = 'woocommerce/woocommerce.php';
362
- $installed_plugins = get_plugins();
363
-
364
- return isset( $installed_plugins[ $plugin ] );
365
- }
366
 
367
  /**
368
  * Determines if the WooCommerce compatible.
@@ -429,19 +346,7 @@ class WC_Facebook_Loader {
429
 
430
  ?>
431
  <div class="<?php echo esc_attr( $notice['class'] ); ?>">
432
- <p>
433
- <?php
434
- echo wp_kses(
435
- $notice['message'],
436
- array(
437
- 'a' => array(
438
- 'href' => array(),
439
- ),
440
- 'strong' => array(),
441
- )
442
- );
443
- ?>
444
- </p>
445
  </div>
446
  <?php
447
  }
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.5
15
  * Text Domain: facebook-for-woocommerce
16
+ * Tested up to: 5.8
17
+ * WC requires at least: 3.5.0
18
+ * WC tested up to: 5.7
19
  * Requires PHP: 7.0
20
  *
21
  * @package FacebookCommerce
22
  */
23
 
 
 
24
  defined( 'ABSPATH' ) || exit;
25
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * The plugin loader class.
28
  *
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.5'; // WRCS: DEFINED_VERSION.
37
 
38
  // Minimum PHP version required by this plugin.
39
  const MINIMUM_PHP_VERSION = '7.0.0';
42
  const MINIMUM_WP_VERSION = '4.4';
43
 
44
  // Minimum WooCommerce version required by this plugin.
45
+ const MINIMUM_WC_VERSION = '3.5.0';
46
 
47
  // SkyVerge plugin framework version used by this plugin.
48
  const FRAMEWORK_VERSION = '5.10.0';
76
  register_activation_hook( __FILE__, array( $this, 'activation_check' ) );
77
 
78
  add_action( 'admin_init', array( $this, 'check_environment' ) );
79
+ add_action( 'admin_init', array( $this, 'add_plugin_notices' ) );
80
 
 
81
  add_action( 'admin_notices', array( $this, 'admin_notices' ), 15 );
82
 
83
  // If the environment check fails, initialize the plugin.
218
  public function add_plugin_notices() {
219
 
220
  if ( ! $this->is_wp_compatible() ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
 
222
+ $this->add_admin_notice(
223
+ 'update_wordpress',
224
+ 'error',
225
+ sprintf(
226
+ '%s requires WordPress version %s or higher. Please %supdate WordPress &raquo;%s',
227
+ '<strong>' . self::PLUGIN_NAME . '</strong>',
228
+ self::MINIMUM_WP_VERSION,
229
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">',
230
+ '</a>'
231
+ )
232
+ );
233
  }
234
 
235
+ if ( ! $this->is_wc_compatible() ) {
236
+
237
+ $this->add_admin_notice(
238
+ 'update_woocommerce',
239
+ 'error',
240
+ sprintf(
241
+ '%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',
242
+ '<strong>' . self::PLUGIN_NAME . '</strong>',
243
+ self::MINIMUM_WC_VERSION,
244
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">',
245
+ '</a>',
246
+ '<a href="' . esc_url( 'https://downloads.wordpress.org/plugin/woocommerce.' . self::MINIMUM_WC_VERSION . '.zip' ) . '">',
247
+ '</a>'
248
+ )
249
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  }
251
  }
252
 
280
  return version_compare( get_bloginfo( 'version' ), self::MINIMUM_WP_VERSION, '>=' );
281
  }
282
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
283
 
284
  /**
285
  * Determines if the WooCommerce compatible.
346
 
347
  ?>
348
  <div class="<?php echo esc_attr( $notice['class'] ); ?>">
349
+ <p><?php echo wp_kses( $notice['message'], array( 'a' => array( 'href' => array() ) ) ); ?></p>
 
 
 
 
 
 
 
 
 
 
 
 
350
  </div>
351
  <?php
352
  }
i18n/languages/facebook-for-woocommerce.pot CHANGED
@@ -1,394 +1,359 @@
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.30\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-11-09T04:20:40+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:1095
19
- #: facebook-commerce.php:229
20
- #: includes/Admin.php:1626
21
- #: includes/Admin/Settings.php:100
22
- #: includes/Admin/Settings.php:170
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:1262
36
- #: includes/Admin/Settings.php:101
37
- #: includes/Admin/Settings.php:381
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:293
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:314
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 - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - </a> tag
56
- #: class-wc-facebookcommerce.php:342
57
- 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."
 
 
 
 
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:365
62
- 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."
 
63
  msgstr ""
64
 
65
- #: class-wc-facebookcommerce.php:478
66
- #: includes/Admin/Settings.php:131
67
- #: includes/Admin/Settings.php:132
68
- msgid "Facebook Product Sets"
69
  msgstr ""
70
 
71
- #: class-wc-facebookcommerce.php:479
72
- msgid "Facebook Product Set"
73
  msgstr ""
74
 
 
75
  #. translators: Edit item label
76
- #: class-wc-facebookcommerce.php:487
77
  msgid "Edit %s"
78
  msgstr ""
79
 
 
80
  #. translators: Add new label
81
- #: class-wc-facebookcommerce.php:489
82
  msgid "Add new %s"
83
  msgstr ""
84
 
 
85
  #. translators: No items found text
86
- #: class-wc-facebookcommerce.php:492
87
  msgid "No %s found."
88
  msgstr ""
89
 
 
90
  #. translators: Search label
91
- #: class-wc-facebookcommerce.php:494
92
  msgid "Search %s."
93
  msgstr ""
94
 
 
95
  #. translators: Text label
96
- #: class-wc-facebookcommerce.php:496
97
  msgid "Separate %s with commas"
98
  msgstr ""
99
 
 
100
  #. translators: Text label
101
- #: class-wc-facebookcommerce.php:498
102
  msgid "Choose from the most used %s"
103
  msgstr ""
104
 
105
- #: class-wc-facebookcommerce.php:639
106
  msgid "Cannot create the API instance because the access token is missing."
107
  msgstr ""
108
 
109
- #: facebook-commerce.php:233
110
- msgid "Facebook Commerce and Dynamic Ads (Pixel) Extension"
111
- msgstr ""
112
-
113
- #: facebook-commerce.php:1472
114
- msgid "Nothing to update for product group for %1$s"
115
- msgstr ""
116
-
117
- #. translators: Placeholders %1$s - original error message from Facebook API
118
- #: facebook-commerce.php:1902
119
- msgid "There was an issue connecting to the Facebook API: %1$s"
120
- msgstr ""
121
-
122
- #: facebook-commerce.php:2227
123
- msgid "Your connection has expired."
124
- msgstr ""
125
-
126
- #: facebook-commerce.php:2227
127
- msgid "Please click Manage connection > Advanced Options > Update Token to refresh your connection to Facebook."
128
  msgstr ""
129
 
130
- #. translators: Placeholders %s - error message
131
- #: facebook-commerce.php:2234
132
- msgid "There was an error trying to sync the products to Facebook. %s"
133
  msgstr ""
134
 
135
- #: facebook-commerce.php:2257
136
- msgid "Product sync is disabled."
137
  msgstr ""
138
 
139
- #: facebook-commerce.php:2264
140
- msgid "The plugin is not configured or the Catalog ID is missing."
141
  msgstr ""
142
 
143
- #: facebook-commerce.php:2287
144
- msgid "A product sync is in progress. Please wait until the sync finishes before starting a new one."
145
  msgstr ""
146
 
147
- #: facebook-commerce.php:2299
148
- 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."
149
  msgstr ""
150
 
151
- #: facebook-commerce.php:2828
152
- msgid "Hi! We're here to answer any questions you may have."
153
  msgstr ""
154
 
155
- #: facebook-commerce.php:3218
156
- msgid "Facebook for WooCommerce error:"
157
  msgstr ""
158
 
 
159
  #. translators: Placeholders %1$s - original error message from Facebook API
160
- #: facebook-commerce.php:3587
161
- msgid "There was an issue connecting to the Facebook API: %s"
162
- msgstr ""
163
-
164
- #. translators: %1$s - plugin name, %2$s - minimum WordPress version required, %3$s - update WordPress link open, %4$s - update WordPress link close
165
- #: facebook-for-woocommerce.php:238
166
- msgid "%1$s requires WordPress version %2$s or higher. Please %3$supdate WordPress &raquo;%4$s"
167
- msgstr ""
168
-
169
- #. translators: %1$s - Plugin Name, %2$s - activate WooCommerce link open, %3$s - activate WooCommerce link close.
170
- #: facebook-for-woocommerce.php:264
171
- msgid "%1$s requires WooCommerce to be activated. Please %2$sactivate WooCommerce%3$s."
172
- msgstr ""
173
-
174
- #. translators: %1$s - Plugin Name, %2$s - install WooCommerce link open, %3$s - install WooCommerce link close.
175
- #: facebook-for-woocommerce.php:281
176
- msgid "%1$s requires WooCommerce to be installed and activated. Please %2$sinstall WooCommerce%3$s."
177
  msgstr ""
178
 
179
- #. 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.
180
- #: facebook-for-woocommerce.php:301
181
- 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"
182
  msgstr ""
183
 
184
- #: includes/Admin.php:132
185
- msgid "The name is how it appears on Facebook Catalog."
 
 
186
  msgstr ""
187
 
188
- #: includes/Admin.php:173
189
- msgid "Search main categories..."
 
190
  msgstr ""
191
 
192
- #: includes/Admin.php:174
193
- msgid "Choose a main category"
194
  msgstr ""
195
 
196
- #: includes/Admin.php:175
197
- msgid "Choose a category"
198
  msgstr ""
199
 
200
- #: includes/Admin.php:211
201
- 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 Facebook Product Set."
 
 
202
  msgstr ""
203
 
204
- #: includes/Admin.php:252
205
- msgid "Please enter a Google product category and at least one sub-category to sell this product on Instagram."
 
 
 
 
206
  msgstr ""
207
 
208
- #: includes/Admin.php:318
209
- msgid "To sell this product on Instagram, please ensure it meets the following requirements:"
210
  msgstr ""
211
 
212
- #: includes/Admin.php:321
213
- msgid "Has a price defined"
214
  msgstr ""
215
 
216
- #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s - </strong> closing HTML tag
217
- #: includes/Admin.php:327
218
- msgid "Has %1$sManage Stock%2$s enabled on the %1$sInventory%2$s tab"
219
  msgstr ""
220
 
221
- #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s - </strong> closing HTML tag
222
- #: includes/Admin.php:339
223
- msgid "Has the %1$sFacebook Sync%2$s setting set to \"Sync and show\" or \"Sync and hide\""
 
224
  msgstr ""
225
 
226
- #. translators: Placeholders: %1$s - opening <a> link tag, %2$s - closing </a> link tag
227
- #: includes/Admin.php:393
228
- 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?"
229
  msgstr ""
230
 
231
- #: includes/Admin.php:462
232
- #: includes/Admin.php:1305
233
- #: includes/Admin.php:1447
234
- msgid "Facebook sync"
235
  msgstr ""
236
 
237
- #: includes/Admin.php:489
238
- #: includes/Admin.php:520
239
- msgid "Sync and show"
240
  msgstr ""
241
 
242
- #: includes/Admin.php:491
243
- #: includes/Admin.php:521
244
- msgid "Sync and hide"
245
  msgstr ""
246
 
247
- #: includes/Admin.php:495
248
- #: includes/Admin.php:522
249
- #: includes/Admin.php:1309
250
- #: includes/Admin.php:1451
251
- msgid "Do not sync"
252
  msgstr ""
253
 
254
- #: includes/Admin.php:519
255
- msgid "Filter by Facebook sync setting"
256
  msgstr ""
257
 
258
- #: includes/Admin.php:932
259
- msgid "Include in Facebook sync"
260
  msgstr ""
261
 
262
- #: includes/Admin.php:933
263
- msgid "Exclude from Facebook sync"
264
  msgstr ""
265
 
266
- #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - <a> tag
267
- #: includes/Admin.php:1126
268
- 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."
269
- 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."
270
- msgstr[0] ""
271
- msgstr[1] ""
272
-
273
- #: includes/Admin.php:1133
274
- msgid "Don't show this notice again"
275
  msgstr ""
276
 
277
- #. 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
278
- #: includes/Admin.php:1167
279
- 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."
280
- 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."
281
- msgstr[0] ""
282
- msgstr[1] ""
283
-
284
- #. 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
285
- #: includes/Admin.php:1233
286
- 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."
287
  msgstr ""
288
 
289
- #: includes/Admin.php:1307
290
- #: includes/Admin.php:1449
291
- msgid "Sync and show in catalog"
292
  msgstr ""
293
 
294
- #: includes/Admin.php:1308
295
- #: includes/Admin.php:1450
296
- msgid "Sync and hide in catalog"
 
297
  msgstr ""
298
 
299
- #: includes/Admin.php:1318
300
- #: includes/Admin.php:1463
301
- msgid "Facebook Description"
302
  msgstr ""
303
 
304
- #: includes/Admin.php:1320
305
- #: includes/Admin.php:1465
306
- 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."
 
307
  msgstr ""
308
 
309
- #: includes/Admin.php:1331
310
- #: includes/Admin.php:1478
311
- msgid "Facebook Product Image"
 
 
 
 
312
  msgstr ""
313
 
314
- #: includes/Admin.php:1333
315
- #: includes/Admin.php:1480
316
- 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)."
 
 
 
317
  msgstr ""
318
 
319
- #: includes/Admin.php:1335
320
- msgid "Use WooCommerce image"
321
  msgstr ""
322
 
323
- #: includes/Admin.php:1336
324
- #: includes/Admin.php:1484
325
- msgid "Use custom image"
 
 
 
 
326
  msgstr ""
327
 
328
- #: includes/Admin.php:1347
329
- #: includes/Admin.php:1496
330
- msgid "Custom Image URL"
331
  msgstr ""
332
 
333
- #. translators: Placeholders %1$s - WC currency symbol
334
- #. translators: Placeholders %1$s - WC currency symbol
335
- #: includes/Admin.php:1358
336
- #: includes/Admin.php:1509
337
- msgid "Facebook Price (%1$s)"
338
  msgstr ""
339
 
340
- #: includes/Admin.php:1362
341
- #: includes/Admin.php:1513
342
- 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."
 
 
 
343
  msgstr ""
344
 
345
- #: includes/Admin.php:1482
346
- msgid "Use variation image"
 
347
  msgstr ""
348
 
349
- #: includes/Admin.php:1483
350
- msgid "Use parent image"
 
 
 
351
  msgstr ""
352
 
353
- #: includes/Admin.php:1628
354
- msgid "Close modal panel"
 
 
 
355
  msgstr ""
356
 
357
- #: includes/Admin/Abstract_Settings_Screen.php:73
358
- msgid "Save changes"
 
359
  msgstr ""
360
 
361
- #: includes/Admin/Enhanced_Catalog_Attribute_Fields.php:104
362
- msgid "Show advanced options"
363
  msgstr ""
364
 
365
- #: includes/Admin/Notes/SettingsMoved.php:76
366
- msgid "Sync your products and reach customers across Facebook, Instagram, Messenger and WhatsApp through your Facebook plugin, which can be found at Marketing > Facebook."
367
  msgstr ""
368
 
369
- #: includes/Admin/Notes/SettingsMoved.php:79
370
- msgid "Facebook is now found under Marketing"
371
  msgstr ""
372
 
373
- #: includes/Admin/Notes/SettingsMoved.php:85
374
- msgid "Go to Facebook"
375
  msgstr ""
376
 
377
  #: includes/Admin/Products.php:101
378
  msgid "Select values for enhanced attributes for this product"
379
  msgstr ""
380
 
381
- #: includes/Admin/Products.php:119
382
- #: includes/Admin/Product_Categories.php:376
383
- msgid "Category Specific Attributes"
384
- msgstr ""
385
-
386
  #: includes/Admin/Products.php:140
387
  msgid "Google product category"
388
  msgstr ""
389
 
390
  #: includes/Admin/Products.php:141
391
- msgid "Choose the Google product category and (optionally) sub-categories associated with this product."
 
 
392
  msgstr ""
393
 
394
  #: includes/Admin/Products.php:214
@@ -396,7 +361,9 @@ msgid "Sell on Instagram"
396
  msgstr ""
397
 
398
  #: includes/Admin/Products.php:216
399
- 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."
 
 
400
  msgstr ""
401
 
402
  #: includes/Admin/Products.php:226
@@ -407,92 +374,33 @@ msgstr ""
407
  msgid "Click here to learn more."
408
  msgstr ""
409
 
410
- #. translators: Placeholders %1$s - strong opening tag, %2$s - strong closing tag
411
  #: includes/Admin/Products.php:236
412
- 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."
413
- msgstr ""
414
-
415
- #: includes/Admin/Product_Categories.php:100
416
- #: includes/Admin/Settings_Screens/Product_Sync.php:121
417
- 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?"
418
- msgstr ""
419
-
420
- #: includes/Admin/Product_Categories.php:119
421
- #: includes/Admin/Settings_Screens/Product_Sync.php:158
422
- #: includes/AJAX.php:348
423
- #: includes/AJAX.php:416
424
- #: includes/AJAX.php:482
425
- msgid "Cancel"
426
- msgstr ""
427
-
428
- #: includes/Admin/Product_Categories.php:123
429
- #: includes/Admin/Settings_Screens/Product_Sync.php:162
430
- msgid "Update default Google product category"
431
- msgstr ""
432
-
433
- #: includes/Admin/Product_Categories.php:164
434
- 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."
435
- msgstr ""
436
-
437
- #: includes/Admin/Product_Categories.php:215
438
- 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."
439
- msgstr ""
440
-
441
- #: includes/Admin/Product_Categories.php:233
442
- #: includes/Admin/Settings_Screens/Product_Sync.php:338
443
- msgid "Default Google product category"
444
- msgstr ""
445
-
446
- #: includes/Admin/Product_Categories.php:358
447
- msgid "Select default values for enhanced attributes within this category"
448
- msgstr ""
449
-
450
- #: includes/Admin/Product_Sets.php:150
451
- msgid "WC Product Categories"
452
- msgstr ""
453
-
454
- #: includes/Admin/Product_Sets.php:182
455
- msgid "Map Facebook Product Set to WC Product Categories"
456
- msgstr ""
457
-
458
- #: includes/Admin/Product_Sync_Meta_Box.php:37
459
- msgid "Facebook Product Sync"
460
- msgstr ""
461
-
462
- #: includes/Admin/Product_Sync_Meta_Box.php:78
463
- msgid "Facebook ID:"
464
- msgstr ""
465
-
466
- #: includes/Admin/Product_Sync_Meta_Box.php:89
467
- msgid "Variant IDs:"
468
- msgstr ""
469
-
470
- #: includes/Admin/Product_Sync_Meta_Box.php:121
471
- msgid "Reset Facebook metadata"
472
- msgstr ""
473
-
474
- #: includes/Admin/Product_Sync_Meta_Box.php:126
475
- msgid "Delete product(s) on Facebook"
476
  msgstr ""
477
 
478
- #: includes/Admin/Product_Sync_Meta_Box.php:138
479
- msgid "This product is not yet synced to Facebook."
480
  msgstr ""
481
 
482
- #: includes/Admin/Settings.php:176
483
  #: includes/Admin/Settings_Screens/Connection.php:35
484
  #: includes/Admin/Settings_Screens/Connection.php:36
485
  msgid "Connection"
486
  msgstr ""
487
 
488
- #: includes/Admin/Settings.php:179
489
- #: includes/Admin/Settings_Screens/Messenger.php:37
490
- #: includes/Admin/Settings_Screens/Messenger.php:38
491
- #: includes/Admin/Settings_Screens/Messenger.php:140
492
  msgid "Messenger"
493
  msgstr ""
494
 
495
- #: includes/Admin/Settings.php:182
496
  #: includes/Admin/Settings_Screens/Product_Sync.php:43
497
  #: includes/Admin/Settings_Screens/Product_Sync.php:44
498
  #: includes/Admin/Settings_Screens/Product_Sync.php:181
@@ -500,37 +408,44 @@ msgstr ""
500
  msgid "Product sync"
501
  msgstr ""
502
 
503
- #: includes/Admin/Settings.php:185
504
  #: includes/Admin/Settings_Screens/Advertise.php:38
505
  #: includes/Admin/Settings_Screens/Advertise.php:39
506
  msgid "Advertise"
507
  msgstr ""
508
 
509
- #: includes/Admin/Settings.php:271
510
  msgid "You do not have permission to save these settings."
511
  msgstr ""
512
 
513
- #: includes/Admin/Settings.php:280
514
  msgid "Your settings have been saved."
515
  msgstr ""
516
 
 
517
  #. translators: Placeholders: %s - user-friendly error message
518
- #: includes/Admin/Settings.php:287
519
  msgid "Your settings could not be saved. %s"
520
  msgstr ""
521
 
522
- #. translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing </a> HTML link tag
523
  #: includes/Admin/Settings_Screens/Advertise.php:203
 
 
524
  msgid "Please %1$sconnect your store%2$s to Facebook to create ads."
525
  msgstr ""
526
 
527
  #: includes/Admin/Settings_Screens/Advertise.php:221
528
- msgid "If you are connected to Facebook but cannot display ads, please contact Facebook support."
 
 
529
  msgstr ""
530
 
531
- #. 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
532
  #: includes/Admin/Settings_Screens/Connection.php:58
533
- 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."
 
 
 
 
 
534
  msgstr ""
535
 
536
  #: includes/Admin/Settings_Screens/Connection.php:131
@@ -606,52 +521,47 @@ msgid "Enable debug mode"
606
  msgstr ""
607
 
608
  #: includes/Admin/Settings_Screens/Connection.php:330
609
- msgid "Log plugin events for debugging."
610
  msgstr ""
611
 
612
  #: includes/Admin/Settings_Screens/Connection.php:331
613
  msgid "Only enable this if you are experiencing problems with the plugin."
614
  msgstr ""
615
 
616
- #: includes/Admin/Settings_Screens/Connection.php:337
617
- msgid "Experimental! Enable new style feed generation"
618
- msgstr ""
619
-
620
- #: includes/Admin/Settings_Screens/Connection.php:339
621
- msgid "Use new, memory improved, feed generation process."
622
- msgstr ""
623
-
624
- #: includes/Admin/Settings_Screens/Connection.php:340
625
- msgid "Experimental feature. Only enable this if you are experiencing problems with feed generation. This is an experimental feature in testing phase."
626
- msgstr ""
627
-
628
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
629
- #: includes/Admin/Settings_Screens/Messenger.php:114
630
  msgid "%1$sClick here%2$s to manage your Messenger greeting and colors."
631
  msgstr ""
632
 
633
- #: includes/Admin/Settings_Screens/Messenger.php:146
634
  msgid "Enable Messenger"
635
  msgstr ""
636
 
637
- #: includes/Admin/Settings_Screens/Messenger.php:148
638
  msgid "Enable and customize Facebook Messenger on your store"
639
  msgstr ""
640
 
641
- #: includes/Admin/Settings_Screens/Messenger.php:158
642
  msgid "Language"
643
  msgstr ""
644
 
645
- #: includes/Admin/Settings_Screens/Messenger.php:163
646
  msgid "Greeting & Colors"
647
  msgstr ""
648
 
 
649
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
650
- #: includes/Admin/Settings_Screens/Messenger.php:185
651
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage Facebook Messenger."
652
  msgstr ""
653
 
654
- #: includes/Admin/Settings_Screens/Messenger.php:262
 
 
 
 
 
 
 
655
  msgid "Please try again."
656
  msgstr ""
657
 
@@ -660,23 +570,26 @@ msgstr ""
660
  msgid "Product sets"
661
  msgstr ""
662
 
663
- #. translators: Placeholders: {count} number of remaining items
664
  #: includes/Admin/Settings_Screens/Product_Sync.php:82
 
665
  msgid "{count} item remaining."
666
  msgid_plural "{count} items remaining."
667
  msgstr[0] ""
668
  msgstr[1] ""
669
 
670
- #. translators: Placeholders %s - html code for a spinner icon
671
  #: includes/Admin/Settings_Screens/Product_Sync.php:97
 
672
  msgid "Your products will now be resynced to Facebook, this may take some time."
673
  msgstr ""
674
 
675
  #: includes/Admin/Settings_Screens/Product_Sync.php:98
676
  msgid ""
677
- "Facebook for WooCommerce automatically syncs your products on create/update. Are you sure you want to force product resync?\n"
 
678
  "\n"
679
- "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."
 
 
680
  msgstr ""
681
 
682
  #: includes/Admin/Settings_Screens/Product_Sync.php:99
@@ -688,12 +601,19 @@ msgid "There was an error trying to sync the products to Facebook."
688
  msgstr ""
689
 
690
  #: includes/Admin/Settings_Screens/Product_Sync.php:103
691
- msgid "Something went wrong while uploading the product information, please try again."
 
 
692
  msgstr ""
693
 
694
- #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag
695
  #: includes/Admin/Settings_Screens/Product_Sync.php:136
696
- 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?"
 
 
 
 
 
 
697
  msgstr ""
698
 
699
  #: includes/Admin/Settings_Screens/Product_Sync.php:189
@@ -745,91 +665,230 @@ msgid "Short description"
745
  msgstr ""
746
 
747
  #: includes/Admin/Settings_Screens/Product_Sync.php:339
748
- 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."
 
 
 
749
  msgstr ""
750
 
751
- #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
752
  #: includes/Admin/Settings_Screens/Product_Sync.php:385
 
753
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage product sync."
754
  msgstr ""
755
 
756
- #: includes/Admin/Tasks/Setup.php:36
757
- msgid "Set up Facebook for WooCommerce"
758
  msgstr ""
759
 
760
- #: includes/Admin/Tasks/Setup.php:45
761
- msgid "Sync your products and reach customers across Facebook, Instagram, Messenger and WhatsApp."
 
 
762
  msgstr ""
763
 
764
- #: includes/Admin/Tasks/Setup.php:54
765
- msgid "20 minutes"
766
  msgstr ""
767
 
768
- #: includes/AJAX.php:82
769
- msgid "Invalid nonce."
770
  msgstr ""
771
 
772
- #: includes/AJAX.php:89
773
- msgid "Order ID is required."
774
  msgstr ""
775
 
776
- #: includes/AJAX.php:93
777
- msgid "Cancel reason is required."
 
 
778
  msgstr ""
779
 
780
- #: includes/AJAX.php:99
781
- msgid "A valid Order ID is required."
782
  msgstr ""
783
 
784
- #: includes/AJAX.php:182
785
- msgid "Order ID is required"
 
 
786
  msgstr ""
787
 
788
- #: includes/AJAX.php:186
789
- msgid "Tracking number is required"
 
 
 
 
790
  msgstr ""
791
 
792
- #: includes/AJAX.php:190
793
- msgid "Carrier code is required"
794
  msgstr ""
795
 
796
- #: includes/AJAX.php:196
797
- msgid "Order not found"
 
 
 
 
 
798
  msgstr ""
799
 
800
- #: includes/AJAX.php:220
801
- msgid "Full product sync disabled by filter."
802
  msgstr ""
803
 
804
- #: includes/AJAX.php:343
805
- #: includes/AJAX.php:411
806
- msgid "Go to Settings"
807
  msgstr ""
808
 
809
- #. translators: Placeholder %s - <br/> tag
810
- #: includes/AJAX.php:357
811
- 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."
812
  msgstr ""
813
 
814
- #: includes/AJAX.php:423
815
- 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."
816
  msgstr ""
817
 
818
- #: includes/AJAX.php:476
819
- msgid "Exclude Products"
820
  msgstr ""
821
 
822
- #. translators: Placeholder %s - <br/> tags
823
- #: includes/AJAX.php:491
824
- 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."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
825
  msgstr ""
826
 
827
  #: includes/Commerce/Orders.php:433
 
828
  msgid "Order %1$s paid in %2$s"
829
  msgstr ""
830
 
831
- #: includes/Commerce/Orders.php:585
832
- #: includes/Commerce/Orders.php:820
833
  msgid "Remote ID not found."
834
  msgstr ""
835
 
@@ -837,18 +896,19 @@ msgstr ""
837
  msgid "%s is not a valid shipping carrier code."
838
  msgstr ""
839
 
840
- #: includes/Commerce/Orders.php:610
841
- #: includes/Commerce/Orders.php:787
842
  msgid "No valid Facebook products were found."
843
  msgstr ""
844
 
845
- #. translators: Placeholder: %s - sales channel name, like Facebook or Instagram
846
  #: includes/Commerce/Orders.php:628
 
 
847
  msgid "%s order fulfilled."
848
  msgstr ""
849
 
850
- #. translators: Placeholders: %1$s - sales channel name, like Facebook or Instagram, %2$s - error message
851
  #: includes/Commerce/Orders.php:638
 
 
852
  msgid "%1$s order could not be fulfilled. %2$s"
853
  msgstr ""
854
 
@@ -860,23 +920,27 @@ msgstr ""
860
  msgid "Remote ID for parent order not found."
861
  msgstr ""
862
 
863
- #. translators: Placeholder: %s - sales channel name, like Facebook or Instagram
864
  #: includes/Commerce/Orders.php:719
 
 
865
  msgid "Order refunded on %s."
866
  msgstr ""
867
 
868
- #. translators: Placeholders: %1$s - sales channel name, like Facebook or Instagram, %2$s - error message
869
  #: includes/Commerce/Orders.php:731
 
 
870
  msgid "Could not refund %1$s order: %2$s"
871
  msgstr ""
872
 
873
- #. translators: Placeholder: %s - sales channel name, like Facebook or Instagram
874
  #: includes/Commerce/Orders.php:828
 
 
875
  msgid "%s order cancelled."
876
  msgstr ""
877
 
878
- #. translators: Placeholders: %1$s - sales channel name, like Facebook or Instagram, %2$s - error message
879
  #: includes/Commerce/Orders.php:838
 
 
880
  msgid "%1$s order could not be cancelled. %2$s"
881
  msgstr ""
882
 
@@ -900,128 +964,148 @@ msgstr ""
900
  msgid "Other"
901
  msgstr ""
902
 
903
- #: includes/fbgraph.php:106
904
- msgid "HTTP %1$s: %2$s"
905
  msgstr ""
906
 
907
- #: includes/fbinfobanner.php:212
908
- msgid "Click and redirect."
909
  msgstr ""
910
 
911
- #: includes/fbinfobanner.php:213
912
- msgid "Dismiss this notice."
913
  msgstr ""
914
 
915
- #: includes/fbinfobanner.php:213
916
- msgid "Dismiss"
 
917
  msgstr ""
918
 
919
- #: includes/fbproductfeed.php:278
920
- msgid "Could not create product catalog feed directory"
 
921
  msgstr ""
922
 
923
- #: includes/fbproductfeed.php:382
924
- msgid "Could not open the product catalog temporary feed file for writing"
925
  msgstr ""
926
 
927
- #: includes/fbproductfeed.php:389
928
- msgid "Could not open the product catalog feed file for writing"
929
  msgstr ""
930
 
931
- #: includes/fbproductfeed.php:453
932
- msgid "Could not rename the product catalog feed file"
933
  msgstr ""
934
 
935
- #: includes/fbwpml.php:115
936
- msgid "Facebook Visibility"
937
  msgstr ""
938
 
939
- #: includes/fbwpml.php:118
940
- msgid "WooCommerce Products with languages that are selected here will be visible to customers who see your Facebook Shop."
941
  msgstr ""
942
 
943
- #: includes/fbwpml.php:135
944
- msgid "Saved. An automated sync from Facebook will run every hour to update the catalog with any changes you've made."
945
  msgstr ""
946
 
947
- #: includes/Handlers/Connection.php:298
948
- msgid "Connection successful!"
949
  msgstr ""
950
 
951
- #: includes/Handlers/Connection.php:360
952
- msgid "You do not have permission to uninstall Facebook Business Extension."
953
  msgstr ""
954
 
955
- #: includes/Handlers/Connection.php:370
956
- msgid "Disconnection successful."
957
  msgstr ""
958
 
959
- #. translators: Placeholders: %s - Facebook page ID
960
- #: includes/Handlers/Connection.php:450
961
- msgid "Page %s not authorized."
962
  msgstr ""
963
 
964
- #: includes/Handlers/Connection.php:1423
965
- msgid "You do not have permission to finish App Store login."
966
  msgstr ""
967
 
968
- #: includes/Locale.php:181
969
- msgctxt "language"
970
- msgid "English (United States)"
 
971
  msgstr ""
972
 
973
- #: includes/ProductSync/ProductValidator.php:195
974
- msgid "Product sync is globally disabled."
975
  msgstr ""
976
 
977
- #: includes/ProductSync/ProductValidator.php:208
978
- msgid "Product is not published."
979
  msgstr ""
980
 
981
- #: includes/ProductSync/ProductValidator.php:219
982
- msgid "Product must be in stock."
983
  msgstr ""
984
 
985
- #: includes/ProductSync/ProductValidator.php:234
986
- msgid "This product cannot be synced to Facebook because it is hidden from your store catalog."
987
  msgstr ""
988
 
989
- #: includes/ProductSync/ProductValidator.php:249
990
- msgid "Product excluded because of categories."
991
  msgstr ""
992
 
993
- #: includes/ProductSync/ProductValidator.php:256
994
- msgid "Product excluded because of tags."
995
  msgstr ""
996
 
997
- #: includes/ProductSync/ProductValidator.php:267
998
- msgid "Sync disabled in product field."
999
  msgstr ""
1000
 
1001
- #: includes/ProductSync/ProductValidator.php:277
1002
- msgid "Product excluded by wc_facebook_should_sync_product filter."
1003
  msgstr ""
1004
 
1005
- #: includes/ProductSync/ProductValidator.php:313
1006
- msgid "If product is not simple, variable or variation it must have a price."
1007
  msgstr ""
1008
 
1009
- #: includes/ProductSync/ProductValidator.php:339
1010
- msgid "Product description is all capital letters. Please change the description to sentence case in order to allow synchronization of your product."
 
 
1011
  msgstr ""
1012
 
1013
- #: includes/ProductSync/ProductValidator.php:342
1014
- msgid "Product description is too long. Maximum allowed length is 5000 characters."
 
 
1015
  msgstr ""
1016
 
1017
- #: includes/ProductSync/ProductValidator.php:361
1018
- msgid "Product title is all capital letters. Please change the title to sentence case in order to allow synchronization of your product."
1019
  msgstr ""
1020
 
1021
- #: includes/ProductSync/ProductValidator.php:364
1022
- msgid "Product title is too long. Maximum allowed length is 150 characters."
1023
  msgstr ""
1024
 
1025
- #: includes/ProductSync/ProductValidator.php:388
1026
- msgid "Too many attributes selected for product. Use 4 or less."
 
 
 
 
 
1027
  msgstr ""
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2021 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.5\n"
6
+ "Report-Msgid-Bugs-To: "
7
+ "https://woocommerce.com/my-account/marketplace-ticket-form/\n"
8
+ "POT-Creation-Date: 2021-09-16 08:53:33+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: 2021-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:263
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:284
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:304
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:336
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:359
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:385
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
 
64
+ #: class-wc-facebookcommerce.php:457
65
+ msgid "FB Product Sets"
 
 
66
  msgstr ""
67
 
68
+ #: class-wc-facebookcommerce.php:458
69
+ msgid "FB Product Set"
70
  msgstr ""
71
 
72
+ #: class-wc-facebookcommerce.php:466
73
  #. translators: Edit item label
 
74
  msgid "Edit %s"
75
  msgstr ""
76
 
77
+ #: class-wc-facebookcommerce.php:468
78
  #. translators: Add new label
 
79
  msgid "Add new %s"
80
  msgstr ""
81
 
82
+ #: class-wc-facebookcommerce.php:471
83
  #. translators: No items found text
 
84
  msgid "No %s found."
85
  msgstr ""
86
 
87
+ #: class-wc-facebookcommerce.php:473
88
  #. translators: Search label
 
89
  msgid "Search %s."
90
  msgstr ""
91
 
92
+ #: class-wc-facebookcommerce.php:475
93
  #. translators: Text label
 
94
  msgid "Separate %s with commas"
95
  msgstr ""
96
 
97
+ #: class-wc-facebookcommerce.php:477
98
  #. translators: Text label
 
99
  msgid "Choose from the most used %s"
100
  msgstr ""
101
 
102
+ #: class-wc-facebookcommerce.php:593
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:230
111
+ msgid "Facebook Commerce and Dynamic Ads (Pixel) Extension"
 
112
  msgstr ""
113
 
114
+ #: facebook-commerce.php:642
115
+ msgid "Facebook ID:"
116
  msgstr ""
117
 
118
+ #: facebook-commerce.php:650
119
+ msgid "Variant IDs:"
120
  msgstr ""
121
 
122
+ #: facebook-commerce.php:668
123
+ msgid "Reset Facebook metadata"
124
  msgstr ""
125
 
126
+ #: facebook-commerce.php:673
127
+ msgid "Delete product(s) on Facebook"
128
  msgstr ""
129
 
130
+ #: facebook-commerce.php:681
131
+ msgid "This product is not yet synced to Facebook."
132
  msgstr ""
133
 
134
+ #: facebook-commerce.php:1508
135
+ msgid "Nothing to update for product group for %1$s"
136
  msgstr ""
137
 
138
+ #: facebook-commerce.php:1902
139
  #. translators: Placeholders %1$s - original error message from Facebook API
140
+ msgid "There was an issue connecting to the Facebook API: %1$s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  msgstr ""
142
 
143
+ #: facebook-commerce.php:2238
144
+ msgid "Your connection has expired."
 
145
  msgstr ""
146
 
147
+ #: facebook-commerce.php:2238
148
+ msgid ""
149
+ "Please click Manage connection > Advanced Options > Update Token to refresh "
150
+ "your connection to Facebook."
151
  msgstr ""
152
 
153
+ #: facebook-commerce.php:2245
154
+ #. translators: Placeholders %s - error message
155
+ msgid "There was an error trying to sync the products to Facebook. %s"
156
  msgstr ""
157
 
158
+ #: facebook-commerce.php:2268 facebook-commerce.php:2441
159
+ msgid "Product sync is disabled."
160
  msgstr ""
161
 
162
+ #: facebook-commerce.php:2275 facebook-commerce.php:2448
163
+ msgid "The plugin is not configured or the Catalog ID is missing."
164
  msgstr ""
165
 
166
+ #: facebook-commerce.php:2298
167
+ msgid ""
168
+ "A product sync is in progress. Please wait until the sync finishes before "
169
+ "starting a new one."
170
  msgstr ""
171
 
172
+ #: facebook-commerce.php:2310 facebook-commerce.php:2462
173
+ msgid ""
174
+ "We've detected that your Facebook Product Catalog is no longer valid. This "
175
+ "may happen if it was deleted, but could also be a temporary error. If the "
176
+ "error persists, please click Manage connection > Advanced Options > Remove "
177
+ "and setup the plugin again."
178
  msgstr ""
179
 
180
+ #: facebook-commerce.php:2486
181
+ msgid "We couldn't create the feed or upload the product information."
182
  msgstr ""
183
 
184
+ #: facebook-commerce.php:2954
185
+ msgid "Hi! We're here to answer any questions you may have."
186
  msgstr ""
187
 
188
+ #: facebook-commerce.php:3321
189
+ msgid "Facebook for WooCommerce error:"
 
190
  msgstr ""
191
 
192
+ #: facebook-commerce.php:3403
193
+ msgid ""
194
+ "There was an error trying to retrieve information about the Facebook page: "
195
+ "%s"
196
  msgstr ""
197
 
198
+ #: facebook-commerce.php:3454
199
+ msgid "Get started with Messenger Customer Chat"
 
200
  msgstr ""
201
 
202
+ #: facebook-commerce.php:3455
203
+ msgid "Get started with Instagram Shopping"
 
 
204
  msgstr ""
205
 
206
+ #: facebook-commerce.php:3690
207
+ #. translators: Placeholders %1$s - original error message from Facebook API
208
+ msgid "There was an issue connecting to the Facebook API: %s"
209
  msgstr ""
210
 
211
+ #: includes/AJAX.php:82
212
+ msgid "Invalid nonce."
 
213
  msgstr ""
214
 
215
+ #: includes/AJAX.php:89
216
+ msgid "Order ID is required."
 
 
 
217
  msgstr ""
218
 
219
+ #: includes/AJAX.php:93
220
+ msgid "Cancel reason is required."
221
  msgstr ""
222
 
223
+ #: includes/AJAX.php:99
224
+ msgid "A valid Order ID is required."
225
  msgstr ""
226
 
227
+ #: includes/AJAX.php:182
228
+ msgid "Order ID is required"
229
  msgstr ""
230
 
231
+ #: includes/AJAX.php:186
232
+ msgid "Tracking number is required"
 
 
 
 
 
 
 
233
  msgstr ""
234
 
235
+ #: includes/AJAX.php:190
236
+ msgid "Carrier code is required"
 
 
 
 
 
 
 
 
237
  msgstr ""
238
 
239
+ #: includes/AJAX.php:196
240
+ msgid "Order not found"
 
241
  msgstr ""
242
 
243
+ #: includes/AJAX.php:220
244
+ msgid ""
245
+ "Full product sync disabled by filter hook "
246
+ "`facebook_for_woocommerce_allow_full_batch_api_sync`."
247
  msgstr ""
248
 
249
+ #: includes/AJAX.php:343 includes/AJAX.php:411
250
+ msgid "Go to Settings"
 
251
  msgstr ""
252
 
253
+ #: includes/AJAX.php:348 includes/AJAX.php:416 includes/AJAX.php:482
254
+ #: includes/Admin/Product_Categories.php:119
255
+ #: includes/Admin/Settings_Screens/Product_Sync.php:158 includes/Admin.php:392
256
+ msgid "Cancel"
257
  msgstr ""
258
 
259
+ #: includes/AJAX.php:357
260
+ #. translators: Placeholder %s - <br/> tag
261
+ msgid ""
262
+ "This product belongs to a category or tag that is excluded from the "
263
+ "Facebook catalog sync. It will not sync to Facebook. %sTo sync this product "
264
+ "to Facebook, click Go to Settings and remove the category or tag exclusion "
265
+ "or click Cancel and update the product's category / tag assignments."
266
  msgstr ""
267
 
268
+ #: includes/AJAX.php:423
269
+ msgid ""
270
+ "One or more of the selected products belongs to a category or tag that is "
271
+ "excluded from the Facebook catalog sync. To sync these products to "
272
+ "Facebook, please remove the category or tag exclusion from the plugin "
273
+ "settings."
274
  msgstr ""
275
 
276
+ #: includes/AJAX.php:476
277
+ msgid "Exclude Products"
278
  msgstr ""
279
 
280
+ #: includes/AJAX.php:491
281
+ #. translators: Placeholder %s - <br/> tags
282
+ msgid ""
283
+ "The categories and/or tags that you have selected to exclude from sync "
284
+ "contain products that are currently synced to Facebook.%sTo exclude these "
285
+ "products from the Facebook sync, click Exclude Products. To review the "
286
+ "category / tag exclusion settings, click Cancel."
287
  msgstr ""
288
 
289
+ #: includes/Admin/Abstract_Settings_Screen.php:73
290
+ msgid "Save changes"
 
291
  msgstr ""
292
 
293
+ #: includes/Admin/Enhanced_Catalog_Attribute_Fields.php:104
294
+ msgid "Show advanced options"
 
 
 
295
  msgstr ""
296
 
297
+ #: includes/Admin/Product_Categories.php:100
298
+ #: includes/Admin/Settings_Screens/Product_Sync.php:121
299
+ msgid ""
300
+ "Products and categories that inherit this global setting (i.e. they do not "
301
+ "have a specific Google product category set) will use the new default "
302
+ "immediately. Are you sure you want to proceed?"
303
  msgstr ""
304
 
305
+ #: includes/Admin/Product_Categories.php:123
306
+ #: includes/Admin/Settings_Screens/Product_Sync.php:162
307
+ msgid "Update default Google product category"
308
  msgstr ""
309
 
310
+ #: includes/Admin/Product_Categories.php:164
311
+ msgid ""
312
+ "Facebook catalogs now support category specific fields, to make best use of "
313
+ "them you need to select a category. WooCommerce uses the google taxonomy as "
314
+ "it is the most widely accepted form of categorisation."
315
  msgstr ""
316
 
317
+ #: includes/Admin/Product_Categories.php:215
318
+ msgid ""
319
+ "Choose a default Google product category for products in this category. "
320
+ "Products need at least two category levels defined for tax to be correctly "
321
+ "applied."
322
  msgstr ""
323
 
324
+ #: includes/Admin/Product_Categories.php:233
325
+ #: includes/Admin/Settings_Screens/Product_Sync.php:338
326
+ msgid "Default Google product category"
327
  msgstr ""
328
 
329
+ #: includes/Admin/Product_Categories.php:358
330
+ msgid "Select default values for enhanced attributes within this category"
331
  msgstr ""
332
 
333
+ #: includes/Admin/Product_Categories.php:376 includes/Admin/Products.php:119
334
+ msgid "Category Specific Attributes"
335
  msgstr ""
336
 
337
+ #: includes/Admin/Product_Sets.php:150
338
+ msgid "WC Product Categories"
339
  msgstr ""
340
 
341
+ #: includes/Admin/Product_Sets.php:182
342
+ msgid "Map FB Product Set to WC Product Categories"
343
  msgstr ""
344
 
345
  #: includes/Admin/Products.php:101
346
  msgid "Select values for enhanced attributes for this product"
347
  msgstr ""
348
 
 
 
 
 
 
349
  #: includes/Admin/Products.php:140
350
  msgid "Google product category"
351
  msgstr ""
352
 
353
  #: includes/Admin/Products.php:141
354
+ msgid ""
355
+ "Choose the Google product category and (optionally) sub-categories "
356
+ "associated with this product."
357
  msgstr ""
358
 
359
  #: includes/Admin/Products.php:214
361
  msgstr ""
362
 
363
  #: includes/Admin/Products.php:216
364
+ msgid ""
365
+ "Enable to sell this product on Instagram. Products that are hidden in the "
366
+ "Facebook catalog can be synced, but won’t be available for purchase."
367
  msgstr ""
368
 
369
  #: includes/Admin/Products.php:226
374
  msgid "Click here to learn more."
375
  msgstr ""
376
 
 
377
  #: includes/Admin/Products.php:236
378
+ #. translators: Placeholders %1$s - strong opening tag, %2$s - strong closing
379
+ #. tag
380
+ msgid ""
381
+ "To sell this product on Instagram, at least one variation must be synced to "
382
+ "Facebook. You can control variation sync on the %1$sVariations%2$s tab with "
383
+ "the %1$sFacebook Sync%2$s setting."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  msgstr ""
385
 
386
+ #. Author of the plugin/theme
387
+ msgid "Facebook"
388
  msgstr ""
389
 
390
+ #: includes/Admin/Settings.php:121
391
  #: includes/Admin/Settings_Screens/Connection.php:35
392
  #: includes/Admin/Settings_Screens/Connection.php:36
393
  msgid "Connection"
394
  msgstr ""
395
 
396
+ #: includes/Admin/Settings.php:124
397
+ #: includes/Admin/Settings_Screens/Messenger.php:41
398
+ #: includes/Admin/Settings_Screens/Messenger.php:42
399
+ #: includes/Admin/Settings_Screens/Messenger.php:148
400
  msgid "Messenger"
401
  msgstr ""
402
 
403
+ #: includes/Admin/Settings.php:127
404
  #: includes/Admin/Settings_Screens/Product_Sync.php:43
405
  #: includes/Admin/Settings_Screens/Product_Sync.php:44
406
  #: includes/Admin/Settings_Screens/Product_Sync.php:181
408
  msgid "Product sync"
409
  msgstr ""
410
 
411
+ #: includes/Admin/Settings.php:130
412
  #: includes/Admin/Settings_Screens/Advertise.php:38
413
  #: includes/Admin/Settings_Screens/Advertise.php:39
414
  msgid "Advertise"
415
  msgstr ""
416
 
417
+ #: includes/Admin/Settings.php:216
418
  msgid "You do not have permission to save these settings."
419
  msgstr ""
420
 
421
+ #: includes/Admin/Settings.php:225
422
  msgid "Your settings have been saved."
423
  msgstr ""
424
 
425
+ #: includes/Admin/Settings.php:232
426
  #. translators: Placeholders: %s - user-friendly error message
 
427
  msgid "Your settings could not be saved. %s"
428
  msgstr ""
429
 
 
430
  #: includes/Admin/Settings_Screens/Advertise.php:203
431
+ #. translators: Placeholders: %1$s - opening <a> HTML link tag, %2$s - closing
432
+ #. </a> HTML link tag
433
  msgid "Please %1$sconnect your store%2$s to Facebook to create ads."
434
  msgstr ""
435
 
436
  #: includes/Admin/Settings_Screens/Advertise.php:221
437
+ msgid ""
438
+ "If you are connected to Facebook but cannot display ads, please contact "
439
+ "Facebook support."
440
  msgstr ""
441
 
 
442
  #: includes/Admin/Settings_Screens/Connection.php:58
443
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
444
+ #. <a> tag, %4$s - </a> tag, %5$s - <a> tag, %6$s - </a> tag
445
+ msgid ""
446
+ "%1$sHeads up!%2$s It looks like there was a problem with reconnecting your "
447
+ "site to Facebook. Please %3$sclick here%4$s to try again, or %5$sget in "
448
+ "touch with our support team%6$s for assistance."
449
  msgstr ""
450
 
451
  #: includes/Admin/Settings_Screens/Connection.php:131
521
  msgstr ""
522
 
523
  #: includes/Admin/Settings_Screens/Connection.php:330
524
+ msgid "Log plugin events for debugging"
525
  msgstr ""
526
 
527
  #: includes/Admin/Settings_Screens/Connection.php:331
528
  msgid "Only enable this if you are experiencing problems with the plugin."
529
  msgstr ""
530
 
531
+ #: includes/Admin/Settings_Screens/Messenger.php:122
 
 
 
 
 
 
 
 
 
 
 
532
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
 
533
  msgid "%1$sClick here%2$s to manage your Messenger greeting and colors."
534
  msgstr ""
535
 
536
+ #: includes/Admin/Settings_Screens/Messenger.php:154
537
  msgid "Enable Messenger"
538
  msgstr ""
539
 
540
+ #: includes/Admin/Settings_Screens/Messenger.php:156
541
  msgid "Enable and customize Facebook Messenger on your store"
542
  msgstr ""
543
 
544
+ #: includes/Admin/Settings_Screens/Messenger.php:166
545
  msgid "Language"
546
  msgstr ""
547
 
548
+ #: includes/Admin/Settings_Screens/Messenger.php:171
549
  msgid "Greeting & Colors"
550
  msgstr ""
551
 
552
+ #: includes/Admin/Settings_Screens/Messenger.php:193
553
  #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
 
554
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage Facebook Messenger."
555
  msgstr ""
556
 
557
+ #: includes/Admin/Settings_Screens/Messenger.php:246
558
+ #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
559
+ msgid ""
560
+ "There was an error communicating with the Facebook Business Extension. "
561
+ "%1$sClick here%2$s to manage your Messenger settings."
562
+ msgstr ""
563
+
564
+ #: includes/Admin/Settings_Screens/Messenger.php:318
565
  msgid "Please try again."
566
  msgstr ""
567
 
570
  msgid "Product sets"
571
  msgstr ""
572
 
 
573
  #: includes/Admin/Settings_Screens/Product_Sync.php:82
574
+ #. translators: Placeholders: {count} number of remaining items
575
  msgid "{count} item remaining."
576
  msgid_plural "{count} items remaining."
577
  msgstr[0] ""
578
  msgstr[1] ""
579
 
 
580
  #: includes/Admin/Settings_Screens/Product_Sync.php:97
581
+ #. translators: Placeholders %s - html code for a spinner icon
582
  msgid "Your products will now be resynced to Facebook, this may take some time."
583
  msgstr ""
584
 
585
  #: includes/Admin/Settings_Screens/Product_Sync.php:98
586
  msgid ""
587
+ "Facebook for WooCommerce automatically syncs your products on "
588
+ "create/update. Are you sure you want to force product resync?\n"
589
  "\n"
590
+ "This will query all published products and may take some time. You only "
591
+ "need to do this if your products are out of sync or some of your products "
592
+ "did not sync."
593
  msgstr ""
594
 
595
  #: includes/Admin/Settings_Screens/Product_Sync.php:99
601
  msgstr ""
602
 
603
  #: includes/Admin/Settings_Screens/Product_Sync.php:103
604
+ msgid ""
605
+ "Something went wrong while uploading the product information, please try "
606
+ "again."
607
  msgstr ""
608
 
 
609
  #: includes/Admin/Settings_Screens/Product_Sync.php:136
610
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag
611
+ msgid ""
612
+ "Products and categories that inherit this global setting (they do not have "
613
+ "a specific Google product category set) will use the new default "
614
+ "immediately. %1$sIf you have cleared the Google Product Category%2$s, "
615
+ "items inheriting the default will not be available for Instagram checkout. "
616
+ "Are you sure you want to proceed?"
617
  msgstr ""
618
 
619
  #: includes/Admin/Settings_Screens/Product_Sync.php:189
665
  msgstr ""
666
 
667
  #: includes/Admin/Settings_Screens/Product_Sync.php:339
668
+ msgid ""
669
+ "Choose a default Google product category for your products. Defaults can "
670
+ "also be set for product categories. Products need at least two category "
671
+ "levels defined for tax to be correctly applied."
672
  msgstr ""
673
 
 
674
  #: includes/Admin/Settings_Screens/Product_Sync.php:385
675
+ #. translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag
676
  msgid "Please %1$sconnect to Facebook%2$s to enable and manage product sync."
677
  msgstr ""
678
 
679
+ #: includes/Admin.php:117
680
+ msgid "The name is how it appears on Facebook Catalog."
681
  msgstr ""
682
 
683
+ #: includes/Admin.php:213
684
+ msgid ""
685
+ "Please enter a Google product category and at least one sub-category to "
686
+ "sell this product on Instagram."
687
  msgstr ""
688
 
689
+ #: includes/Admin.php:239
690
+ msgid "Search main categories..."
691
  msgstr ""
692
 
693
+ #: includes/Admin.php:240
694
+ msgid "Choose a main category"
695
  msgstr ""
696
 
697
+ #: includes/Admin.php:241
698
+ msgid "Choose a category"
699
  msgstr ""
700
 
701
+ #: includes/Admin.php:280
702
+ msgid ""
703
+ "To sell this product on Instagram, please ensure it meets the following "
704
+ "requirements:"
705
  msgstr ""
706
 
707
+ #: includes/Admin.php:283
708
+ msgid "Has a price defined"
709
  msgstr ""
710
 
711
+ #: includes/Admin.php:289
712
+ #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
713
+ #. </strong> closing HTML tag
714
+ msgid "Has %1$sManage Stock%2$s enabled on the %1$sInventory%2$s tab"
715
  msgstr ""
716
 
717
+ #: includes/Admin.php:301
718
+ #. translators: Placeholders: %1$s - <strong> opening HTML tag, %2$s -
719
+ #. </strong> closing HTML tag
720
+ msgid ""
721
+ "Has the %1$sFacebook Sync%2$s setting set to \"Sync and show\" or \"Sync "
722
+ "and hide\""
723
  msgstr ""
724
 
725
+ #: includes/Admin.php:330
726
+ msgid "Close"
727
  msgstr ""
728
 
729
+ #: includes/Admin.php:355
730
+ #. translators: Placeholders: %1$s - opening <a> link tag, %2$s - closing </a>
731
+ #. link tag
732
+ msgid ""
733
+ "You're removing a product from the Facebook sync that is currently listed "
734
+ "in your %1$sFacebook catalog%2$s. Would you like to delete the product from "
735
+ "the Facebook catalog as well?"
736
  msgstr ""
737
 
738
+ #: includes/Admin.php:384
739
+ msgid "Remove from sync only"
740
  msgstr ""
741
 
742
+ #: includes/Admin.php:388
743
+ msgid "Remove from sync and delete"
 
744
  msgstr ""
745
 
746
+ #: includes/Admin.php:424 includes/Admin.php:1267 includes/Admin.php:1409
747
+ msgid "Facebook sync"
 
748
  msgstr ""
749
 
750
+ #: includes/Admin.php:451 includes/Admin.php:482
751
+ msgid "Sync and show"
752
  msgstr ""
753
 
754
+ #: includes/Admin.php:453 includes/Admin.php:483
755
+ msgid "Sync and hide"
756
  msgstr ""
757
 
758
+ #: includes/Admin.php:457 includes/Admin.php:484 includes/Admin.php:1271
759
+ #: includes/Admin.php:1413
760
+ msgid "Do not sync"
761
+ msgstr ""
762
+
763
+ #: includes/Admin.php:481
764
+ msgid "Filter by Facebook sync setting"
765
+ msgstr ""
766
+
767
+ #: includes/Admin.php:894
768
+ msgid "Include in Facebook sync"
769
+ msgstr ""
770
+
771
+ #: includes/Admin.php:895
772
+ msgid "Exclude from Facebook sync"
773
+ msgstr ""
774
+
775
+ #: includes/Admin.php:1088
776
+ #. translators: Placeholders: %1$s - <strong> tag, %2$s - </strong> tag, %3$s -
777
+ #. <a> tag, %4$s - <a> tag
778
+ msgid ""
779
+ "%1$sHeads up!%2$s If this product was previously visible in Facebook, you "
780
+ "may need to delete it from the %3$sFacebook catalog%4$s to completely hide "
781
+ "it from customer view."
782
+ msgid_plural ""
783
+ "%1$sHeads up!%2$s If these products were previously visible in Facebook, "
784
+ "you may need to delete them from the %3$sFacebook catalog%4$s to completely "
785
+ "hide them from customer view."
786
+ msgstr[0] ""
787
+ msgstr[1] ""
788
+
789
+ #: includes/Admin.php:1095
790
+ msgid "Don't show this notice again"
791
+ msgstr ""
792
+
793
+ #: includes/Admin.php:1129
794
+ #. translators: Placeholders: %1$s - number of affected products, %2$s opening
795
+ #. HTML <a> tag, %3$s - closing HTML </a> tag, %4$s - opening HTML <a> tag,
796
+ #. %5$s - closing HTML </a> tag
797
+ msgid ""
798
+ "%2$s%1$s product%3$s or some of its variations could not be updated to show "
799
+ "in the Facebook catalog — %4$sFacebook Commerce Policies%5$s prohibit "
800
+ "selling some product types (like virtual products). You may still advertise "
801
+ "Virtual products on Facebook."
802
+ msgid_plural ""
803
+ "%2$s%1$s products%3$s or some of their variations could not be updated to "
804
+ "show in the Facebook catalog — %4$sFacebook Commerce Policies%5$s prohibit "
805
+ "selling some product types (like virtual products). You may still advertise "
806
+ "Virtual products on Facebook."
807
+ msgstr[0] ""
808
+ msgstr[1] ""
809
+
810
+ #: includes/Admin.php:1195
811
+ #. translators: Placeholders: %1$s - opening HTML <strong> tag, %2$s - closing
812
+ #. HTML </strong> tag, %3$s - opening HTML <a> tag, %4$s - closing HTML </a>
813
+ #. tag
814
+ msgid ""
815
+ "%1$sHeads up!%2$s Facebook's %3$sCommerce Policies%4$s do not support "
816
+ "selling virtual products, so we have hidden your synced Virtual products in "
817
+ "your Facebook catalog. You may still advertise Virtual products on Facebook."
818
+ msgstr ""
819
+
820
+ #: includes/Admin.php:1269 includes/Admin.php:1411
821
+ msgid "Sync and show in catalog"
822
+ msgstr ""
823
+
824
+ #: includes/Admin.php:1270 includes/Admin.php:1412
825
+ msgid "Sync and hide in catalog"
826
+ msgstr ""
827
+
828
+ #: includes/Admin.php:1280 includes/Admin.php:1425
829
+ msgid "Facebook Description"
830
+ msgstr ""
831
+
832
+ #: includes/Admin.php:1282 includes/Admin.php:1427
833
+ msgid ""
834
+ "Custom (plain-text only) description for product on Facebook. If blank, "
835
+ "product description will be used. If product description is blank, "
836
+ "shortname will be used."
837
+ msgstr ""
838
+
839
+ #: includes/Admin.php:1293 includes/Admin.php:1440
840
+ msgid "Facebook Product Image"
841
+ msgstr ""
842
+
843
+ #: includes/Admin.php:1295 includes/Admin.php:1442
844
+ msgid ""
845
+ "Choose the product image that should be synced to the Facebook catalog for "
846
+ "this product. If using a custom image, please enter an absolute URL (e.g. "
847
+ "https://domain.com/image.jpg)."
848
+ msgstr ""
849
+
850
+ #: includes/Admin.php:1297
851
+ msgid "Use WooCommerce image"
852
+ msgstr ""
853
+
854
+ #: includes/Admin.php:1298 includes/Admin.php:1446
855
+ msgid "Use custom image"
856
+ msgstr ""
857
+
858
+ #: includes/Admin.php:1309 includes/Admin.php:1458
859
+ msgid "Custom Image URL"
860
+ msgstr ""
861
+
862
+ #: includes/Admin.php:1320 includes/Admin.php:1471
863
+ #. translators: Placeholders %1$s - WC currency symbol
864
+ msgid "Facebook Price (%1$s)"
865
+ msgstr ""
866
+
867
+ #: includes/Admin.php:1324 includes/Admin.php:1475
868
+ msgid ""
869
+ "Custom price for product on Facebook. Please enter in monetary decimal (.) "
870
+ "format without thousand separators and currency symbols. If blank, product "
871
+ "price will be used."
872
+ msgstr ""
873
+
874
+ #: includes/Admin.php:1444
875
+ msgid "Use variation image"
876
+ msgstr ""
877
+
878
+ #: includes/Admin.php:1445
879
+ msgid "Use parent image"
880
+ msgstr ""
881
+
882
+ #: includes/Admin.php:1599
883
+ msgid "Close modal panel"
884
  msgstr ""
885
 
886
  #: includes/Commerce/Orders.php:433
887
+ #. translators: Placeholders: %1$s - order remote id, %2$s - order created by
888
  msgid "Order %1$s paid in %2$s"
889
  msgstr ""
890
 
891
+ #: includes/Commerce/Orders.php:585 includes/Commerce/Orders.php:820
 
892
  msgid "Remote ID not found."
893
  msgstr ""
894
 
896
  msgid "%s is not a valid shipping carrier code."
897
  msgstr ""
898
 
899
+ #: includes/Commerce/Orders.php:610 includes/Commerce/Orders.php:787
 
900
  msgid "No valid Facebook products were found."
901
  msgstr ""
902
 
 
903
  #: includes/Commerce/Orders.php:628
904
+ #. translators: Placeholder: %s - sales channel name, like Facebook or
905
+ #. Instagram
906
  msgid "%s order fulfilled."
907
  msgstr ""
908
 
 
909
  #: includes/Commerce/Orders.php:638
910
+ #. translators: Placeholders: %1$s - sales channel name, like Facebook or
911
+ #. Instagram, %2$s - error message
912
  msgid "%1$s order could not be fulfilled. %2$s"
913
  msgstr ""
914
 
920
  msgid "Remote ID for parent order not found."
921
  msgstr ""
922
 
 
923
  #: includes/Commerce/Orders.php:719
924
+ #. translators: Placeholder: %s - sales channel name, like Facebook or
925
+ #. Instagram
926
  msgid "Order refunded on %s."
927
  msgstr ""
928
 
 
929
  #: includes/Commerce/Orders.php:731
930
+ #. translators: Placeholders: %1$s - sales channel name, like Facebook or
931
+ #. Instagram, %2$s - error message
932
  msgid "Could not refund %1$s order: %2$s"
933
  msgstr ""
934
 
 
935
  #: includes/Commerce/Orders.php:828
936
+ #. translators: Placeholder: %s - sales channel name, like Facebook or
937
+ #. Instagram
938
  msgid "%s order cancelled."
939
  msgstr ""
940
 
 
941
  #: includes/Commerce/Orders.php:838
942
+ #. translators: Placeholders: %1$s - sales channel name, like Facebook or
943
+ #. Instagram, %2$s - error message
944
  msgid "%1$s order could not be cancelled. %2$s"
945
  msgstr ""
946
 
964
  msgid "Other"
965
  msgstr ""
966
 
967
+ #: includes/Handlers/Connection.php:324
968
+ msgid "Connection successful!"
969
  msgstr ""
970
 
971
+ #: includes/Handlers/Connection.php:355
972
+ msgid "You do not have permission to uninstall Facebook Business Extension."
973
  msgstr ""
974
 
975
+ #: includes/Handlers/Connection.php:365
976
+ msgid "Disconnection successful."
977
  msgstr ""
978
 
979
+ #: includes/Handlers/Connection.php:430
980
+ #. translators: Placeholders: %s - API error message
981
+ msgid "Could not retrieve page access data. %s"
982
  msgstr ""
983
 
984
+ #: includes/Handlers/Connection.php:444
985
+ #. translators: Placeholders: %s - Facebook page ID
986
+ msgid "Page %s not authorized."
987
  msgstr ""
988
 
989
+ #: includes/Handlers/Connection.php:1387
990
+ msgid "You do not have permission to finish App Store login."
991
  msgstr ""
992
 
993
+ #: includes/ProductSync/ProductValidator.php:148
994
+ msgid "Product sync is globally disabled."
995
  msgstr ""
996
 
997
+ #: includes/ProductSync/ProductValidator.php:161
998
+ msgid "Product is not published."
999
  msgstr ""
1000
 
1001
+ #: includes/ProductSync/ProductValidator.php:172
1002
+ msgid "Product must be in stock."
1003
  msgstr ""
1004
 
1005
+ #: includes/ProductSync/ProductValidator.php:187
1006
+ msgid "Product is hidden from catalog and search."
1007
  msgstr ""
1008
 
1009
+ #: includes/ProductSync/ProductValidator.php:202
1010
+ msgid "Product excluded because of categories."
1011
  msgstr ""
1012
 
1013
+ #: includes/ProductSync/ProductValidator.php:209
1014
+ msgid "Product excluded because of tags."
1015
  msgstr ""
1016
 
1017
+ #: includes/ProductSync/ProductValidator.php:220
1018
+ msgid "Sync disabled in product field."
1019
  msgstr ""
1020
 
1021
+ #: includes/ProductSync/ProductValidator.php:255
1022
+ msgid "If product is not simple, variable or variation it must have a price."
1023
  msgstr ""
1024
 
1025
+ #: includes/Products/Sync/Background.php:69
1026
+ msgid "Job data key \"%s\" not set"
 
1027
  msgstr ""
1028
 
1029
+ #: includes/Products/Sync/Background.php:73
1030
+ msgid "Job data key \"%s\" is not an array"
1031
  msgstr ""
1032
 
1033
+ #: includes/Products/Sync/Background.php:158
1034
+ msgid ""
1035
+ "There was an error trying sync products using the Catalog Batch API for job "
1036
+ "%1$s: %2$s"
1037
  msgstr ""
1038
 
1039
+ #: includes/fbgraph.php:106
1040
+ msgid "HTTP %1$s: %2$s"
1041
  msgstr ""
1042
 
1043
+ #: includes/fbinfobanner.php:212
1044
+ msgid "Click and redirect."
1045
  msgstr ""
1046
 
1047
+ #: includes/fbinfobanner.php:213
1048
+ msgid "Dismiss this notice."
1049
  msgstr ""
1050
 
1051
+ #: includes/fbinfobanner.php:213
1052
+ msgid "Dismiss"
1053
  msgstr ""
1054
 
1055
+ #: includes/fbproductfeed.php:470
1056
+ msgid "Could not create product catalog feed directory"
1057
  msgstr ""
1058
 
1059
+ #: includes/fbproductfeed.php:535
1060
+ msgid "Could not open the product catalog temporary feed file for writing"
1061
  msgstr ""
1062
 
1063
+ #: includes/fbproductfeed.php:542
1064
+ msgid "Could not open the product catalog feed file for writing"
1065
  msgstr ""
1066
 
1067
+ #: includes/fbproductfeed.php:585
1068
+ msgid "Could not rename the product catalog feed file"
1069
  msgstr ""
1070
 
1071
+ #: includes/fbwpml.php:115
1072
+ msgid "Facebook Visibility"
1073
  msgstr ""
1074
 
1075
+ #: includes/fbwpml.php:118
1076
+ msgid ""
1077
+ "WooCommerce Products with languages that are selected here will be visible "
1078
+ "to customers who see your Facebook Shop."
1079
  msgstr ""
1080
 
1081
+ #: includes/fbwpml.php:135
1082
+ msgid ""
1083
+ "Saved. An automated sync from Facebook will run every hour to update the "
1084
+ "catalog with any changes you've made."
1085
  msgstr ""
1086
 
1087
+ #: includes/fbwpml.php:141
1088
+ msgid "Save"
1089
  msgstr ""
1090
 
1091
+ #. Plugin URI of the plugin/theme
1092
+ msgid "https://github.com/facebookincubator/facebook-for-woocommerce/"
1093
  msgstr ""
1094
 
1095
+ #. Description of the plugin/theme
1096
+ msgid ""
1097
+ "Grow your business on Facebook! Use this official plugin to help sell more "
1098
+ "of your products using Facebook. After completing the setup, you'll be "
1099
+ "ready to create ads that promote your products and you can also create a "
1100
+ "shop section on your Page where customers can browse your products on "
1101
+ "Facebook."
1102
  msgstr ""
1103
+
1104
+ #. Author URI of the plugin/theme
1105
+ msgid "https://www.facebook.com/"
1106
+ msgstr ""
1107
+
1108
+ #: includes/Locale.php:181
1109
+ msgctxt "language"
1110
+ msgid "English (United States)"
1111
+ msgstr ""
includes/AJAX.php CHANGED
@@ -217,7 +217,7 @@ class AJAX {
217
  public function sync_products() {
218
  // Allow opt-out of full batch-API sync, for example if store has a large number of products.
219
  if ( ! facebook_for_woocommerce()->get_integration()->allow_full_batch_api_sync() ) {
220
- wp_send_json_error( __( 'Full product sync disabled by filter.', 'facebook-for-woocommerce' ) );
221
  return;
222
  }
223
 
217
  public function sync_products() {
218
  // Allow opt-out of full batch-API sync, for example if store has a large number of products.
219
  if ( ! facebook_for_woocommerce()->get_integration()->allow_full_batch_api_sync() ) {
220
+ wp_send_json_error( __( 'Full product sync disabled by filter hook `facebook_for_woocommerce_allow_full_batch_api_sync`.', 'facebook-for-woocommerce' ) );
221
  return;
222
  }
223
 
includes/API/FBE/Installation/Read/Response.php CHANGED
@@ -84,13 +84,12 @@ class Response extends API\Response {
84
  */
85
  public function get_page_id() {
86
 
87
- if ( empty( $pages = $this->get_data()->pages ) ) {
88
- return '';
89
- }
90
 
91
- return is_array( $pages ) ? current( $pages ) : $pages;
92
  }
93
 
 
94
  /**
95
  * Gets Instagram Business ID.
96
  *
84
  */
85
  public function get_page_id() {
86
 
87
+ $pages = $this->get_data()->pages;
 
 
88
 
89
+ return ! empty( $pages ) && is_array( $pages ) ? current( $pages ) : '';
90
  }
91
 
92
+
93
  /**
94
  * Gets Instagram Business ID.
95
  *
includes/Admin.php CHANGED
@@ -12,7 +12,6 @@
12
  namespace SkyVerge\WooCommerce\Facebook;
13
 
14
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper;
15
- use Automattic\WooCommerce\Utilities\OrderUtil;
16
 
17
  defined( 'ABSPATH' ) or exit;
18
 
@@ -36,9 +35,6 @@ class Admin {
36
  /** @var \Admin\Product_Categories the product category admin handler */
37
  protected $product_categories;
38
 
39
- /** @var array screens ids where to include scripts */
40
- protected $screen_ids = [];
41
-
42
 
43
  /**
44
  * Admin constructor.
@@ -47,17 +43,6 @@ class Admin {
47
  */
48
  public function __construct() {
49
 
50
- $order_screen_id = class_exists( OrderUtil::class ) ? OrderUtil::get_order_admin_screen() : 'shop_order';
51
-
52
- $this->screen_ids = [
53
- 'product',
54
- 'edit-product',
55
- 'woocommerce_page_wc-facebook',
56
- 'marketing_page_wc-facebook',
57
- 'edit-product_cat',
58
- $order_screen_id,
59
- ];
60
-
61
  // enqueue admin scripts
62
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
63
 
@@ -145,9 +130,16 @@ class Admin {
145
  public function enqueue_scripts() {
146
  global $current_screen;
147
 
 
 
 
 
 
 
 
148
  if ( isset( $current_screen->id ) ) {
149
 
150
- if ( in_array( $current_screen->id, $this->screen_ids, true ) || facebook_for_woocommerce()->is_plugin_settings() ) {
151
 
152
  // enqueue modal functions
153
  wp_enqueue_script(
@@ -156,26 +148,6 @@ class Admin {
156
  array( 'jquery', 'wc-backbone-modal', 'jquery-blockui' ),
157
  \WC_Facebookcommerce::PLUGIN_VERSION
158
  );
159
-
160
- // enqueue google product category select
161
- wp_enqueue_script(
162
- 'wc-facebook-google-product-category-fields',
163
- facebook_for_woocommerce()->get_asset_build_dir_url() . '/admin/google-product-category-fields.js',
164
- array( 'jquery' ),
165
- \WC_Facebookcommerce::PLUGIN_VERSION
166
- );
167
-
168
- wp_localize_script(
169
- 'wc-facebook-google-product-category-fields',
170
- 'facebook_for_woocommerce_google_product_category',
171
- array(
172
- 'i18n' => array(
173
- 'top_level_dropdown_placeholder' => __( 'Search main categories...', 'facebook-for-woocommerce' ),
174
- 'second_level_empty_dropdown_placeholder' => __( 'Choose a main category', 'facebook-for-woocommerce' ),
175
- 'general_dropdown_placeholder' => __( 'Choose a category', 'facebook-for-woocommerce' ),
176
- ),
177
- )
178
- );
179
  }
180
 
181
  if ( 'edit-fb_product_set' === $current_screen->id ) {
@@ -201,16 +173,6 @@ class Admin {
201
  \WC_Facebookcommerce::PLUGIN_VERSION,
202
  true
203
  );
204
-
205
- wp_localize_script(
206
- 'facebook-for-woocommerce-product-sets',
207
- 'facebook_for_woocommerce_product_sets',
208
- array(
209
-
210
- 'excluded_category_ids' => facebook_for_woocommerce()->get_integration()->get_excluded_product_category_ids(),
211
- 'excluded_category_warning_message' => __( '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 Facebook Product Set.', 'facebook-for-woocommerce' ),
212
- )
213
- );
214
  }
215
 
216
  if ( 'product' === $current_screen->id || 'edit-product' === $current_screen->id ) {
@@ -238,7 +200,6 @@ class Admin {
238
  'enhanced_attribute_page_type_edit_category' => \SkyVerge\WooCommerce\Facebook\Admin\Enhanced_Catalog_Attribute_Fields::PAGE_TYPE_EDIT_CATEGORY,
239
  'enhanced_attribute_page_type_add_category' => \SkyVerge\WooCommerce\Facebook\Admin\Enhanced_Catalog_Attribute_Fields::PAGE_TYPE_ADD_CATEGORY,
240
  'enhanced_attribute_page_type_edit_product' => \SkyVerge\WooCommerce\Facebook\Admin\Enhanced_Catalog_Attribute_Fields::PAGE_TYPE_EDIT_PRODUCT,
241
- 'is_product_published' => $this->is_current_product_published(),
242
  'is_sync_enabled_for_product' => $this->is_sync_enabled_for_current_product(),
243
  'set_product_visibility_nonce' => wp_create_nonce( 'set-products-visibility' ),
244
  'set_product_sync_prompt_nonce' => wp_create_nonce( 'set-product-sync-prompt' ),
@@ -257,11 +218,30 @@ class Admin {
257
  }//end if
258
 
259
  if ( facebook_for_woocommerce()->is_plugin_settings() ) {
 
260
  wp_enqueue_style( 'woocommerce_admin_styles' );
261
  wp_enqueue_script( 'wc-enhanced-select' );
262
  }
263
  }//end if
264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  }
266
 
267
 
@@ -284,24 +264,6 @@ class Admin {
284
  return Products::is_sync_enabled_for_product( $product );
285
  }
286
 
287
- /**
288
- * Determines whether the current product is published.
289
- *
290
- * @since 2.6.15
291
- *
292
- * @return bool
293
- */
294
- private function is_current_product_published() {
295
- global $post;
296
-
297
- $product = wc_get_product( $post );
298
-
299
- if ( ! $product instanceof \WC_Product ) {
300
- return false;
301
- }
302
-
303
- return 'publish' === $product->get_status();
304
- }
305
 
306
  /**
307
  * Gets the markup for the message used in the product not ready modal.
@@ -1612,8 +1574,17 @@ class Admin {
1612
  public function render_modal_template() {
1613
  global $current_screen;
1614
 
 
 
 
 
 
 
 
 
 
1615
  // bail if not on the products, product edit, or settings screen
1616
- if ( ! $current_screen || ! in_array( $current_screen->id, $this->screen_ids, true ) ) {
1617
  return;
1618
  }
1619
 
12
  namespace SkyVerge\WooCommerce\Facebook;
13
 
14
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper;
 
15
 
16
  defined( 'ABSPATH' ) or exit;
17
 
35
  /** @var \Admin\Product_Categories the product category admin handler */
36
  protected $product_categories;
37
 
 
 
 
38
 
39
  /**
40
  * Admin constructor.
43
  */
44
  public function __construct() {
45
 
 
 
 
 
 
 
 
 
 
 
 
46
  // enqueue admin scripts
47
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
48
 
130
  public function enqueue_scripts() {
131
  global $current_screen;
132
 
133
+ $modal_screens = array(
134
+ 'product',
135
+ 'edit-product',
136
+ 'edit-product_cat',
137
+ 'shop_order',
138
+ );
139
+
140
  if ( isset( $current_screen->id ) ) {
141
 
142
+ if ( in_array( $current_screen->id, $modal_screens, true ) || facebook_for_woocommerce()->is_plugin_settings() ) {
143
 
144
  // enqueue modal functions
145
  wp_enqueue_script(
148
  array( 'jquery', 'wc-backbone-modal', 'jquery-blockui' ),
149
  \WC_Facebookcommerce::PLUGIN_VERSION
150
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  }
152
 
153
  if ( 'edit-fb_product_set' === $current_screen->id ) {
173
  \WC_Facebookcommerce::PLUGIN_VERSION,
174
  true
175
  );
 
 
 
 
 
 
 
 
 
 
176
  }
177
 
178
  if ( 'product' === $current_screen->id || 'edit-product' === $current_screen->id ) {
200
  'enhanced_attribute_page_type_edit_category' => \SkyVerge\WooCommerce\Facebook\Admin\Enhanced_Catalog_Attribute_Fields::PAGE_TYPE_EDIT_CATEGORY,
201
  'enhanced_attribute_page_type_add_category' => \SkyVerge\WooCommerce\Facebook\Admin\Enhanced_Catalog_Attribute_Fields::PAGE_TYPE_ADD_CATEGORY,
202
  'enhanced_attribute_page_type_edit_product' => \SkyVerge\WooCommerce\Facebook\Admin\Enhanced_Catalog_Attribute_Fields::PAGE_TYPE_EDIT_PRODUCT,
 
203
  'is_sync_enabled_for_product' => $this->is_sync_enabled_for_current_product(),
204
  'set_product_visibility_nonce' => wp_create_nonce( 'set-products-visibility' ),
205
  'set_product_sync_prompt_nonce' => wp_create_nonce( 'set-product-sync-prompt' ),
218
  }//end if
219
 
220
  if ( facebook_for_woocommerce()->is_plugin_settings() ) {
221
+
222
  wp_enqueue_style( 'woocommerce_admin_styles' );
223
  wp_enqueue_script( 'wc-enhanced-select' );
224
  }
225
  }//end if
226
 
227
+ wp_enqueue_script(
228
+ 'wc-facebook-google-product-category-fields',
229
+ facebook_for_woocommerce()->get_asset_build_dir_url() . '/admin/google-product-category-fields.js',
230
+ array( 'jquery' ),
231
+ \WC_Facebookcommerce::PLUGIN_VERSION
232
+ );
233
+
234
+ wp_localize_script(
235
+ 'wc-facebook-google-product-category-fields',
236
+ 'facebook_for_woocommerce_google_product_category',
237
+ array(
238
+ 'i18n' => array(
239
+ 'top_level_dropdown_placeholder' => __( 'Search main categories...', 'facebook-for-woocommerce' ),
240
+ 'second_level_empty_dropdown_placeholder' => __( 'Choose a main category', 'facebook-for-woocommerce' ),
241
+ 'general_dropdown_placeholder' => __( 'Choose a category', 'facebook-for-woocommerce' ),
242
+ ),
243
+ )
244
+ );
245
  }
246
 
247
 
264
  return Products::is_sync_enabled_for_product( $product );
265
  }
266
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
 
268
  /**
269
  * Gets the markup for the message used in the product not ready modal.
1574
  public function render_modal_template() {
1575
  global $current_screen;
1576
 
1577
+ $modal_screens = array(
1578
+ 'product',
1579
+ 'edit-product',
1580
+ 'woocommerce_page_wc-facebook',
1581
+ 'marketing_page_wc-facebook',
1582
+ 'edit-product_cat',
1583
+ 'shop_order',
1584
+ );
1585
+
1586
  // bail if not on the products, product edit, or settings screen
1587
+ if ( ! $current_screen || ! in_array( $current_screen->id, $modal_screens, true ) ) {
1588
  return;
1589
  }
1590
 
includes/Admin/Notes/SettingsMoved.php DELETED
@@ -1,88 +0,0 @@
1
- <?php
2
- /**
3
- * Facebook Menu Settings moved note.
4
- *
5
- * Adds a note to merchant's inbox about Facebook Menu being moved to Marketing menu.
6
- *
7
- * @package FacebookCommerce
8
- */
9
-
10
- namespace SkyVerge\WooCommerce\Facebook\Admin\Notes;
11
-
12
- defined( 'ABSPATH' ) || exit;
13
-
14
- use \Automattic\WooCommerce\Admin\Notes\Note;
15
- use \Automattic\WooCommerce\Admin\Notes\NoteTraits;
16
-
17
- /**
18
- * SettingsMoved class.
19
- */
20
- class SettingsMoved {
21
- /**
22
- * Note traits.
23
- */
24
- use NoteTraits;
25
-
26
- /**
27
- * Name of the note for use in the database.
28
- */
29
- const NOTE_NAME = 'facebook-for-woocommerce-settings-moved-to-marketing';
30
-
31
- /**
32
- * Checks if this note should be displayed.
33
- *
34
- * @return bool
35
- */
36
- public static function should_display() {
37
- /**
38
- * The Facebook menu was moved under Marketing menu in v2.2.0. Display this note
39
- * only to users updating from a version prior to v2.2.0.
40
- */
41
- $should_display = false;
42
- $last_event = facebook_for_woocommerce()->get_last_event_from_history();
43
-
44
- if ( isset( $last_event['name'] ) && 'upgrade' === $last_event['name'] ) {
45
- $last_version = $last_event['data']['from_version'];
46
- if ( version_compare( $last_version, '2.2.0', '<' ) ) {
47
- $should_display = true;
48
- }
49
- }
50
-
51
- return $should_display;
52
- }
53
-
54
- /**
55
- * Add or delete note depending on the conditions to display the note.
56
- *
57
- * @throws NotesUnavailableException Throws exception when notes are unavailable.
58
- */
59
- public static function possibly_add_or_delete_note() {
60
- // Verify the conditions to display the note.
61
- if ( self::should_display() ) {
62
- self::possibly_add_note();
63
- } elseif ( self::note_exists() ) {
64
- self::possibly_delete_note();
65
- }
66
- }
67
-
68
- /**
69
- * Get the note.
70
- *
71
- * @return Note
72
- */
73
- public static function get_note() {
74
-
75
- $settings_url = facebook_for_woocommerce()->get_settings_url();
76
- $content = esc_html__( 'Sync your products and reach customers across Facebook, Instagram, Messenger and WhatsApp through your Facebook plugin, which can be found at Marketing > Facebook.', 'facebook-for-woocommerce' );
77
-
78
- $note = new Note();
79
- $note->set_title( esc_html__( 'Facebook is now found under Marketing', 'facebook-for-woocommerce' ) );
80
- $note->set_content( $content );
81
- $note->set_content_data( (object) array() );
82
- $note->set_type( Note::E_WC_ADMIN_NOTE_INFORMATIONAL );
83
- $note->set_name( self::NOTE_NAME );
84
- $note->set_source( 'facebook-for-woocommerce' );
85
- $note->add_action( 'settings', esc_html__( 'Go to Facebook', 'facebook-for-woocommerce' ), $settings_url );
86
- return $note;
87
- }
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/Admin/Product_Categories.php CHANGED
@@ -340,7 +340,7 @@ class Product_Categories {
340
  <?php $this->render_enhanced_catalog_attributes_tooltip(); ?>
341
  </label>
342
  </div>
343
- <table class="form-table">
344
  <?php $enhanced_attribute_fields->render( $category_id ); ?>
345
  </table>
346
  <?php
340
  <?php $this->render_enhanced_catalog_attributes_tooltip(); ?>
341
  </label>
342
  </div>
343
+ <table>
344
  <?php $enhanced_attribute_fields->render( $category_id ); ?>
345
  </table>
346
  <?php
includes/Admin/Product_Sets.php CHANGED
@@ -75,7 +75,7 @@ class Product_Sets {
75
 
76
 
77
  /**
78
- * Add field to Facebook Product Set new term
79
  *
80
  * @since 2.3.0
81
  */
@@ -90,7 +90,7 @@ class Product_Sets {
90
 
91
 
92
  /**
93
- * Add field to Facebook Product Set new term
94
  *
95
  * @since 2.3.0
96
  *
@@ -179,7 +179,7 @@ class Product_Sets {
179
  <option value="<?php echo esc_attr( $product_cat->term_id ); ?>" <?php echo esc_attr( $selected ); ?>><?php echo esc_attr( $product_cat->name ); ?></option>
180
  <?php endforeach; ?>
181
  <select>
182
- <p class="description"><?php echo esc_html__( 'Map Facebook Product Set to WC Product Categories', 'facebook-for-woocommerce' ); ?>.</p>
183
  <?php
184
  }
185
  }
75
 
76
 
77
  /**
78
+ * Add field to FB Product Set new term
79
  *
80
  * @since 2.3.0
81
  */
90
 
91
 
92
  /**
93
+ * Add field to FB Product Set new term
94
  *
95
  * @since 2.3.0
96
  *
179
  <option value="<?php echo esc_attr( $product_cat->term_id ); ?>" <?php echo esc_attr( $selected ); ?>><?php echo esc_attr( $product_cat->name ); ?></option>
180
  <?php endforeach; ?>
181
  <select>
182
+ <p class="description"><?php echo esc_html__( 'Map FB Product Set to WC Product Categories', 'facebook-for-woocommerce' ); ?>.</p>
183
  <?php
184
  }
185
  }
includes/Admin/Product_Sync_Meta_Box.php DELETED
@@ -1,146 +0,0 @@
1
- <?php
2
-
3
- namespace SkyVerge\WooCommerce\Facebook\Admin;
4
-
5
- defined( 'ABSPATH' ) || exit;
6
-
7
- /**
8
- * Class responsible for display and operations of product sync status metabox.
9
- *
10
- * @since 2.6.6
11
- */
12
- class Product_Sync_Meta_Box {
13
-
14
- /**
15
- * Register metabox assets and add the metabox.
16
- */
17
- public static function register() {
18
- $ajax_data = array(
19
- 'nonce' => wp_create_nonce( 'wc_facebook_metabox_jsx' ),
20
- );
21
-
22
- wp_enqueue_script(
23
- 'wc_facebook_metabox_jsx',
24
- facebook_for_woocommerce()->get_asset_build_dir_url() . '/admin/metabox.js',
25
- array(),
26
- \WC_Facebookcommerce::PLUGIN_VERSION
27
- );
28
-
29
- wp_localize_script(
30
- 'wc_facebook_metabox_jsx',
31
- 'wc_facebook_metabox_jsx',
32
- $ajax_data
33
- );
34
-
35
- add_meta_box(
36
- 'facebook_metabox',
37
- __( 'Facebook Product Sync', 'facebook-for-woocommerce' ),
38
- __CLASS__ . '::output',
39
- 'product',
40
- 'side'
41
- );
42
- }
43
-
44
- /**
45
- * Renders the content of the product meta box.
46
- *
47
- * @since 2.6.6
48
- */
49
- public static function output() {
50
- global $post;
51
-
52
- $fb_integration = facebook_for_woocommerce()->get_integration();
53
- $fb_product = new \WC_Facebook_Product( $post->ID );
54
- $fb_product_group_id = null;
55
- $should_sync = true;
56
- $no_sync_reason = '';
57
-
58
- if ( $fb_product->woo_product instanceof \WC_Product ) {
59
- try {
60
- facebook_for_woocommerce()->get_product_sync_validator( $fb_product->woo_product )->validate();
61
- } catch ( \Exception $e ) {
62
- $should_sync = false;
63
- $no_sync_reason = $e->getMessage();
64
- }
65
- }
66
-
67
- if ( $should_sync || $fb_product->woo_product->is_type( 'variable' ) ) {
68
- $fb_product_group_id = $fb_integration->get_product_fbid( $fb_integration::FB_PRODUCT_GROUP_ID, $post->ID, $fb_product->woo_product );
69
- }
70
- ?>
71
- <span id="fb_metadata">
72
- <?php
73
-
74
- if ( $fb_product_group_id ) {
75
-
76
- ?>
77
-
78
- <?php echo esc_html__( 'Facebook ID:', 'facebook-for-woocommerce' ); ?>
79
- <a href="https://facebook.com/<?php echo esc_attr( $fb_product_group_id ); ?>" target="_blank"><?php echo esc_html( $fb_product_group_id ); ?></a>
80
-
81
- <?php if ( \WC_Facebookcommerce_Utils::is_variable_type( $fb_product->get_type() ) ) : ?>
82
-
83
- <?php
84
- $product_item_ids_by_variation_id = $fb_integration->get_variation_product_item_ids( $fb_product, $fb_product_group_id );
85
- if ( $product_item_ids_by_variation_id ) :
86
- ?>
87
-
88
- <p>
89
- <?php echo esc_html__( 'Variant IDs:', 'facebook-for-woocommerce' ); ?><br/>
90
-
91
- <?php
92
- foreach ( $product_item_ids_by_variation_id as $variation_id => $product_item_id ) :
93
- $variation = wc_get_product( $variation_id );
94
- $show_link = true;
95
-
96
- try {
97
- facebook_for_woocommerce()->get_product_sync_validator( $variation )->validate();
98
- } catch ( \Exception $e ) {
99
- $info = $e->getMessage();
100
- $show_link = false;
101
- }
102
- ?>
103
- <?php echo esc_html( $variation_id ); ?>:
104
- <?php if ( $show_link ) : ?>
105
- <a href="https://facebook.com/<?php echo esc_attr( $product_item_id ); ?>" target="_blank"><?php echo esc_html( $product_item_id ); ?></a>
106
- <?php else : ?>
107
- <?php echo esc_html( $info ); ?>
108
- <?php endif; ?>
109
- <br/>
110
- <?php endforeach; ?>
111
- </p>
112
-
113
- <?php endif; ?>
114
-
115
- <?php endif; ?>
116
-
117
- <input name="is_product_page" type="hidden" value="1"/>
118
-
119
- <p/>
120
- <a href="#" onclick="fb_reset_product( <?php echo esc_js( $post->ID ); ?> )">
121
- <?php echo esc_html__( 'Reset Facebook metadata', 'facebook-for-woocommerce' ); ?>
122
- </a>
123
-
124
- <p/>
125
- <a href="#" onclick="fb_delete_product( <?php echo esc_js( $post->ID ); ?> )">
126
- <?php echo esc_html__( 'Delete product(s) on Facebook', 'facebook-for-woocommerce' ); ?>
127
- </a>
128
-
129
- <?php
130
-
131
- } elseif ( ! $should_sync ) {
132
- ?>
133
- <b><?php echo esc_html( $no_sync_reason ); ?></b>
134
- <?php
135
- } else {
136
-
137
- ?>
138
- <b><?php echo esc_html__( 'This product is not yet synced to Facebook.', 'facebook-for-woocommerce' ); ?></b>
139
- <?php
140
- }
141
-
142
- ?>
143
- </span>
144
- <?php
145
- }
146
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/Admin/Settings.php CHANGED
@@ -29,12 +29,6 @@ class Settings {
29
  /** @var string base settings page ID */
30
  const PAGE_ID = 'wc-facebook';
31
 
32
- /**
33
- * Submenu page ID
34
- *
35
- * @var string
36
- */
37
- const SUBMENU_PAGE_ID = 'edit-tags.php?taxonomy=fb_product_set&post_type=product';
38
 
39
  /** @var Abstract_Settings_Screen[] */
40
  private $screens;
@@ -66,9 +60,10 @@ class Settings {
66
 
67
  add_action( 'wp_loaded', array( $this, 'save' ) );
68
 
69
- add_filter( 'parent_file', array( $this, 'set_parent_and_submenu_file' ) );
70
  }
71
 
 
72
  /**
73
  * Adds the Facebook menu item.
74
  *
@@ -78,16 +73,11 @@ class Settings {
78
 
79
  $root_menu_item = 'woocommerce';
80
  $is_marketing_enabled = false;
81
- $this->use_woo_nav = class_exists( WooAdminFeatures::class ) && class_exists( WooAdminMenu::class ) && WooAdminFeatures::is_enabled( 'navigation' );
82
 
83
  if ( Framework\SV_WC_Plugin_Compatibility::is_enhanced_admin_available() ) {
84
 
85
- if ( class_exists( WooAdminFeatures::class ) ) {
86
- $is_marketing_enabled = WooAdminFeatures::is_enabled( 'marketing' );
87
- } else {
88
- $is_marketing_enabled = is_callable( '\Automattic\WooCommerce\Admin\Loader::is_feature_enabled' )
89
- && \Automattic\WooCommerce\Admin\Loader::is_feature_enabled( 'marketing' );
90
- }
91
 
92
  if ( $is_marketing_enabled ) {
93
 
@@ -107,53 +97,8 @@ class Settings {
107
 
108
  $this->connect_to_enhanced_admin( $is_marketing_enabled ? 'marketing_page_wc-facebook' : 'woocommerce_page_wc-facebook' );
109
  $this->register_woo_nav_menu_items();
110
-
111
- if ( $is_marketing_enabled ) {
112
- $this->add_fb_product_sets_to_marketing_menu();
113
- }
114
  }
115
 
116
- /**
117
- * Checks for connection and if established adds Facebook Product Sets taxonomy page to the Marketing menu.
118
- *
119
- * @since 2.6.29
120
- */
121
- private function add_fb_product_sets_to_marketing_menu() {
122
- $is_connected = facebook_for_woocommerce()->get_connection_handler()->is_connected();
123
-
124
- // If a connection is not established, do not add Facebook Product Sets to Marketing menu.
125
- if ( ! $is_connected ) {
126
- return;
127
- }
128
-
129
- add_submenu_page(
130
- 'woocommerce-marketing',
131
- esc_html__( 'Facebook Product Sets', 'facebook-for-woocommerce' ),
132
- esc_html__( 'Facebook Product Sets', 'facebook-for-woocommerce' ),
133
- 'manage_woocommerce',
134
- admin_url( self::SUBMENU_PAGE_ID ),
135
- '',
136
- 10
137
- );
138
- }
139
-
140
- /**
141
- * Set the parent and submenu file while accessing Facebook Product Sets in the marketing menu.
142
- *
143
- * @since 2.6.29
144
- * @param string $parent_file The parent file.
145
- * @return string
146
- */
147
- public function set_parent_and_submenu_file( $parent_file ){
148
- global $submenu_file, $current_screen;
149
-
150
- if ( isset( $current_screen->taxonomy ) && 'fb_product_set' === $current_screen->taxonomy ) {
151
- $parent_file = 'woocommerce-marketing';
152
- $submenu_file = admin_url( self::SUBMENU_PAGE_ID );
153
- }
154
-
155
- return $parent_file;
156
- }
157
 
158
  /**
159
  * Enables enhanced admin support for the main Facebook settings page.
29
  /** @var string base settings page ID */
30
  const PAGE_ID = 'wc-facebook';
31
 
 
 
 
 
 
 
32
 
33
  /** @var Abstract_Settings_Screen[] */
34
  private $screens;
60
 
61
  add_action( 'wp_loaded', array( $this, 'save' ) );
62
 
63
+ $this->use_woo_nav = class_exists( WooAdminFeatures::class ) && class_exists( WooAdminMenu::class ) && WooAdminFeatures::is_enabled( 'navigation' );
64
  }
65
 
66
+
67
  /**
68
  * Adds the Facebook menu item.
69
  *
73
 
74
  $root_menu_item = 'woocommerce';
75
  $is_marketing_enabled = false;
 
76
 
77
  if ( Framework\SV_WC_Plugin_Compatibility::is_enhanced_admin_available() ) {
78
 
79
+ $is_marketing_enabled = is_callable( '\Automattic\WooCommerce\Admin\Loader::is_feature_enabled' )
80
+ && \Automattic\WooCommerce\Admin\Loader::is_feature_enabled( 'marketing' );
 
 
 
 
81
 
82
  if ( $is_marketing_enabled ) {
83
 
97
 
98
  $this->connect_to_enhanced_admin( $is_marketing_enabled ? 'marketing_page_wc-facebook' : 'woocommerce_page_wc-facebook' );
99
  $this->register_woo_nav_menu_items();
 
 
 
 
100
  }
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
  /**
104
  * Enables enhanced admin support for the main Facebook settings page.
includes/Admin/Settings_Screens/Connection.php CHANGED
@@ -327,20 +327,11 @@ class Connection extends Admin\Abstract_Settings_Screen {
327
  'id' => \WC_Facebookcommerce_Integration::SETTING_ENABLE_DEBUG_MODE,
328
  'title' => __( 'Enable debug mode', 'facebook-for-woocommerce' ),
329
  'type' => 'checkbox',
330
- 'desc' => __( 'Log plugin events for debugging.', 'facebook-for-woocommerce' ),
331
  'desc_tip' => __( 'Only enable this if you are experiencing problems with the plugin.', 'facebook-for-woocommerce' ),
332
  'default' => 'no',
333
  ),
334
 
335
- array(
336
- 'id' => \WC_Facebookcommerce_Integration::SETTING_ENABLE_NEW_STYLE_FEED_GENERATOR,
337
- 'title' => __( 'Experimental! Enable new style feed generation', 'facebook-for-woocommerce' ),
338
- 'type' => 'checkbox',
339
- 'desc' => __( 'Use new, memory improved, feed generation process.', 'facebook-for-woocommerce' ),
340
- 'desc_tip' => __( 'Experimental feature. Only enable this if you are experiencing problems with feed generation. This is an experimental feature in testing phase.', 'facebook-for-woocommerce' ),
341
- 'default' => 'no',
342
- ),
343
-
344
  array( 'type' => 'sectionend' ),
345
 
346
  );
327
  'id' => \WC_Facebookcommerce_Integration::SETTING_ENABLE_DEBUG_MODE,
328
  'title' => __( 'Enable debug mode', 'facebook-for-woocommerce' ),
329
  'type' => 'checkbox',
330
+ 'desc' => __( 'Log plugin events for debugging', 'facebook-for-woocommerce' ),
331
  'desc_tip' => __( 'Only enable this if you are experiencing problems with the plugin.', 'facebook-for-woocommerce' ),
332
  'default' => 'no',
333
  ),
334
 
 
 
 
 
 
 
 
 
 
335
  array( 'type' => 'sectionend' ),
336
 
337
  );
includes/Admin/Settings_Screens/Messenger.php CHANGED
@@ -28,6 +28,10 @@ class Messenger extends Admin\Abstract_Settings_Screen {
28
  const ID = 'messenger';
29
 
30
 
 
 
 
 
31
  /**
32
  * Connection constructor.
33
  */
@@ -68,7 +72,11 @@ class Messenger extends Admin\Abstract_Settings_Screen {
68
  */
69
  public function render_locale_field( $field ) {
70
 
71
- $configured_locale = get_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, '' );;
 
 
 
 
72
  $supported_locales = Locale::get_supported_locales();
73
 
74
  if ( ! empty( $supported_locales[ $configured_locale ] ) ) {
@@ -132,7 +140,7 @@ class Messenger extends Admin\Abstract_Settings_Screen {
132
  */
133
  public function get_settings() {
134
 
135
- $is_enabled = get_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, 'no' );
136
 
137
  $settings = array(
138
 
@@ -147,12 +155,12 @@ class Messenger extends Admin\Abstract_Settings_Screen {
147
  'type' => 'checkbox',
148
  'desc' => __( 'Enable and customize Facebook Messenger on your store', 'facebook-for-woocommerce' ),
149
  'default' => 'no',
150
- 'value' => $is_enabled,
151
  ),
152
  );
153
 
154
  // only add the static configuration display if messenger is enabled
155
- if ( 'yes' === $is_enabled ) {
156
 
157
  $settings[] = array(
158
  'title' => __( 'Language', 'facebook-for-woocommerce' ),
@@ -188,6 +196,68 @@ class Messenger extends Admin\Abstract_Settings_Screen {
188
  );
189
  }
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  /**
192
  * Saves the settings.
193
  *
@@ -232,23 +302,9 @@ class Messenger extends Admin\Abstract_Settings_Screen {
232
  $configuration->set_enabled( $setting_enabled );
233
  $configuration->add_domain( home_url( '/' ) );
234
 
235
- try {
236
- $plugin->get_api()->update_messenger_configuration( $external_business_id, $configuration );
237
-
238
- update_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, wc_bool_to_string( $configuration->is_enabled() ) );
239
-
240
- if ( $default_locale = $configuration->get_default_locale() ) {
241
- update_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, $default_locale );
242
- }
243
- } catch ( Framework\SV_WC_API_Exception $exception ) {
244
-
245
- // always log this error, regardless of debug setting
246
- $plugin->log( 'Could not display messenger settings. ' . $exception->getMessage() );
247
-
248
- }
249
 
250
  delete_transient( 'wc_facebook_business_configuration_refresh' );
251
-
252
  }
253
 
254
  // save any real settings
28
  const ID = 'messenger';
29
 
30
 
31
+ /** @var null|Configuration\Messenger */
32
+ private $remote_configuration;
33
+
34
+
35
  /**
36
  * Connection constructor.
37
  */
72
  */
73
  public function render_locale_field( $field ) {
74
 
75
+ if ( ! $this->remote_configuration ) {
76
+ return;
77
+ }
78
+
79
+ $configured_locale = $this->remote_configuration->get_default_locale();
80
  $supported_locales = Locale::get_supported_locales();
81
 
82
  if ( ! empty( $supported_locales[ $configured_locale ] ) ) {
140
  */
141
  public function get_settings() {
142
 
143
+ $is_enabled = $this->remote_configuration && $this->remote_configuration->is_enabled();
144
 
145
  $settings = array(
146
 
155
  'type' => 'checkbox',
156
  'desc' => __( 'Enable and customize Facebook Messenger on your store', 'facebook-for-woocommerce' ),
157
  'default' => 'no',
158
+ 'value' => $is_enabled ? 'yes' : 'no',
159
  ),
160
  );
161
 
162
  // only add the static configuration display if messenger is enabled
163
+ if ( $is_enabled ) {
164
 
165
  $settings[] = array(
166
  'title' => __( 'Language', 'facebook-for-woocommerce' ),
196
  );
197
  }
198
 
199
+
200
+ /**
201
+ * Renders the settings page.
202
+ *
203
+ * This is overridden to pull the latest FBE configuration so the settings can be populated correctly.
204
+ *
205
+ * @since 2.0.0
206
+ */
207
+ public function render() {
208
+
209
+ // if not connected, don't try and retrieve any settings and just fall back to standard display
210
+ if ( ! facebook_for_woocommerce()->get_connection_handler()->is_connected() ) {
211
+ parent::render();
212
+ return;
213
+ }
214
+
215
+ $plugin = facebook_for_woocommerce();
216
+
217
+ try {
218
+
219
+ $response = $plugin->get_api()->get_business_configuration( $plugin->get_connection_handler()->get_external_business_id() );
220
+
221
+ $configuration = $response->get_messenger_configuration();
222
+
223
+ if ( ! $configuration ) {
224
+ throw new Framework\SV_WC_API_Exception( 'Could not retrieve latest messenger configuration' );
225
+ }
226
+
227
+ update_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, wc_bool_to_string( $configuration->is_enabled() ) );
228
+
229
+ if ( $default_locale = $configuration->get_default_locale() ) {
230
+ update_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, $default_locale );
231
+ }
232
+
233
+ // set the remote configuration so other methods can use its values
234
+ $this->remote_configuration = $configuration;
235
+
236
+ parent::render();
237
+
238
+ } catch ( Framework\SV_WC_API_Exception $exception ) {
239
+
240
+ ?>
241
+ <div class="notice notice-error">
242
+ <p>
243
+ <?php
244
+ printf(
245
+ /* translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag */
246
+ esc_html__( 'There was an error communicating with the Facebook Business Extension. %1$sClick here%2$s to manage your Messenger settings.', 'facebook-for-woocommerce' ),
247
+ '<a href="' . esc_url( $plugin->get_connection_handler()->get_manage_url() ) . '" target="_blank">',
248
+ '</a>'
249
+ );
250
+ ?>
251
+ </p>
252
+ </div>
253
+ <?php
254
+
255
+ // always log this error, regardless of debug setting
256
+ $plugin->log( 'Could not display messenger settings. ' . $exception->getMessage() );
257
+ }
258
+ }
259
+
260
+
261
  /**
262
  * Saves the settings.
263
  *
302
  $configuration->set_enabled( $setting_enabled );
303
  $configuration->add_domain( home_url( '/' ) );
304
 
305
+ $plugin->get_api()->update_messenger_configuration( $external_business_id, $configuration );
 
 
 
 
 
 
 
 
 
 
 
 
 
306
 
307
  delete_transient( 'wc_facebook_business_configuration_refresh' );
 
308
  }
309
 
310
  // save any real settings
includes/Admin/Tasks/Setup.php DELETED
@@ -1,87 +0,0 @@
1
- <?php
2
- /**
3
- * Set up Facebook task.
4
- *
5
- * Adds a set up facebook task to the task list.
6
- *
7
- * @package FacebookCommerce
8
- */
9
-
10
- namespace SkyVerge\WooCommerce\Facebook\Admin\Tasks;
11
-
12
- defined( 'ABSPATH' ) || exit;
13
-
14
- use Automattic\WooCommerce\Admin\Features\OnboardingTasks\Task;
15
-
16
- /**
17
- * Setup Task class.
18
- */
19
- class Setup extends Task {
20
-
21
- /**
22
- * Get the ID of the task.
23
- *
24
- * @return string
25
- */
26
- public function get_id() {
27
- return 'setup-facebook';
28
- }
29
-
30
- /**
31
- * Get the title for the task.
32
- *
33
- * @return string
34
- */
35
- public function get_title() {
36
- return esc_html__( 'Set up Facebook for WooCommerce', 'facebook-for-woocommerce' );
37
- }
38
-
39
- /**
40
- * Get the content for the task.
41
- *
42
- * @return string
43
- */
44
- public function get_content() {
45
- return esc_html__( 'Sync your products and reach customers across Facebook, Instagram, Messenger and WhatsApp.', 'facebook-for-woocommerce' );
46
- }
47
-
48
- /**
49
- * Get the time required to perform the task.
50
- *
51
- * @return string
52
- */
53
- public function get_time() {
54
- return esc_html__( '20 minutes', 'facebook-for-woocommerce' );
55
- }
56
-
57
- /**
58
- * Get the action URL for the task.
59
- *
60
- * @return string
61
- */
62
- public function get_action_url() {
63
- return facebook_for_woocommerce()->get_settings_url();
64
- }
65
-
66
- /**
67
- * Check if the task is complete.
68
- *
69
- * @return bool
70
- */
71
- public function is_complete() {
72
- return facebook_for_woocommerce()->get_connection_handler()->is_connected();
73
- }
74
-
75
- /**
76
- * Parent ID. This method is abstract in WooCommerce 6.1.x, 6.2.x and 6.3.x. This implementation is for backward compatibility for these versions.
77
- *
78
- * @return string
79
- */
80
- public function get_parent_id() {
81
- if ( is_callable( 'parent::get_parent_id' ) ) {
82
- return parent::get_parent_id();
83
- }
84
-
85
- return 'extended'; // The parent task list id.
86
- }
87
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/Debug/README.md ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ ```
includes/Events/Event.php CHANGED
@@ -215,7 +215,7 @@ class Event {
215
 
216
  if ( wp_doing_ajax() ) {
217
 
218
- $url = wp_get_raw_referer();
219
 
220
  } else {
221
 
215
 
216
  if ( wp_doing_ajax() ) {
217
 
218
+ $url = $_SERVER['HTTP_REFERER'];
219
 
220
  } else {
221
 
includes/Feed/FeedConfigurationDetection.php CHANGED
@@ -78,7 +78,7 @@ class FeedConfigurationDetection {
78
  * If one has the same ID as $integration_feed_id, we use that.
79
  * Otherwise we pick the one that was most recently updated.
80
  */
81
- $active_feed_metadata = array();
82
  foreach ( $feed_nodes as $feed ) {
83
  $metadata = $this->get_feed_metadata( $feed['id'], $graph_api );
84
 
@@ -97,20 +97,8 @@ class FeedConfigurationDetection {
97
  }
98
  }
99
 
100
- if ( empty( $active_feed_metadata ) ) {
101
- // No active feed available, we don't have data to collect.
102
- $info['active-feed'] = null;
103
- return $info;
104
- }
105
-
106
- $active_feed = array();
107
- if ( array_key_exists( 'created_time', $active_feed_metadata ) ) {
108
- $active_feed['created-time'] = gmdate( 'Y-m-d H:i:s', strtotime( $active_feed_metadata['created_time'] ) );
109
- }
110
-
111
- if ( array_key_exists( 'product_count', $active_feed_metadata ) ) {
112
- $active_feed['product-count'] = $active_feed_metadata['product_count'];
113
- }
114
 
115
  /*
116
  * Upload schedule settings can be in two keys:
@@ -130,9 +118,9 @@ class FeedConfigurationDetection {
130
 
131
  $info['active-feed'] = $active_feed;
132
 
 
133
  if ( array_key_exists( 'latest_upload', $active_feed_metadata ) ) {
134
- $latest_upload = $active_feed_metadata['latest_upload'];
135
- $upload = array();
136
 
137
  if ( array_key_exists( 'end_time', $latest_upload ) ) {
138
  $upload['end-time'] = gmdate( 'Y-m-d H:i:s', strtotime( $latest_upload['end_time'] ) );
78
  * If one has the same ID as $integration_feed_id, we use that.
79
  * Otherwise we pick the one that was most recently updated.
80
  */
81
+ $active_feed_metadata = null;
82
  foreach ( $feed_nodes as $feed ) {
83
  $metadata = $this->get_feed_metadata( $feed['id'], $graph_api );
84
 
97
  }
98
  }
99
 
100
+ $active_feed['created-time'] = gmdate( 'Y-m-d H:i:s', strtotime( $active_feed_metadata['created_time'] ) );
101
+ $active_feed['product-count'] = $active_feed_metadata['product_count'];
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
  /*
104
  * Upload schedule settings can be in two keys:
118
 
119
  $info['active-feed'] = $active_feed;
120
 
121
+ $latest_upload = $active_feed_metadata['latest_upload'];
122
  if ( array_key_exists( 'latest_upload', $active_feed_metadata ) ) {
123
+ $upload = array();
 
124
 
125
  if ( array_key_exists( 'end_time', $latest_upload ) ) {
126
  $upload['end-time'] = gmdate( 'Y-m-d H:i:s', strtotime( $latest_upload['end_time'] ) );
includes/Handlers/Connection.php CHANGED
@@ -11,7 +11,6 @@
11
 
12
  namespace SkyVerge\WooCommerce\Facebook\Handlers;
13
 
14
- use SkyVerge\WooCommerce\Facebook\Utilities\Heartbeat;
15
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_API_Exception;
16
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper;
17
  use SkyVerge\WooCommerce\Facebook\API\Exceptions\Connect_WC_API_Exception;
@@ -38,9 +37,6 @@ class Connection {
38
  /** @var string WooCommerce connection for APP Store login URL */
39
  const APP_STORE_LOGIN_URL = 'https://connect.woocommerce.com/app-store-login/facebook/';
40
 
41
- /** @var string WooCommerce connection authentication URL */
42
- const CONNECTION_AUTHENTICATION_URL = 'https://connect.woocommerce.com/auth/facebookcommerce/';
43
-
44
  /** @var string the Standard Auth type */
45
  const AUTH_TYPE_STANDARD = 'standard';
46
 
@@ -110,9 +106,9 @@ class Connection {
110
 
111
  $this->plugin = $plugin;
112
 
113
- add_action( Heartbeat::HOURLY, array( $this, 'refresh_business_configuration' ) );
114
 
115
- add_action( Heartbeat::DAILY, array( $this, 'refresh_installation_data' ) );
116
 
117
  add_action( 'woocommerce_api_' . self::ACTION_CONNECT, array( $this, 'handle_connect' ) );
118
 
@@ -135,6 +131,11 @@ class Connection {
135
  */
136
  public function refresh_business_configuration() {
137
 
 
 
 
 
 
138
  // bail if not connected
139
  if ( ! $this->is_connected() ) {
140
  return;
@@ -148,11 +149,30 @@ class Connection {
148
  $response->is_ig_cta_enabled()
149
  );
150
 
151
- } catch ( SV_WC_API_Exception $exception ) {
 
 
 
 
152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
  $this->get_plugin()->log( 'Could not refresh business configuration. ' . $exception->getMessage() );
154
  }
155
 
 
156
  }
157
 
158
 
@@ -168,6 +188,11 @@ class Connection {
168
  return;
169
  }
170
 
 
 
 
 
 
171
  try {
172
 
173
  $this->update_installation_data();
@@ -177,6 +202,7 @@ class Connection {
177
  $this->get_plugin()->log( 'Could not refresh installation data. ' . $exception->getMessage() );
178
  }
179
 
 
180
  }
181
 
182
 
@@ -250,7 +276,7 @@ class Connection {
250
  }
251
 
252
  $is_error = ! empty( $_GET['err'] ) ? true : false;
253
- $error_code = ! empty( $_GET['err_code'] ) ? stripslashes( sanitize_text_field( $_GET['err_code'] ) ) : '';
254
  $merchant_access_token = ! empty( $_GET['merchant_access_token'] ) ? sanitize_text_field( $_GET['merchant_access_token'] ) : '';
255
  $system_user_access_token = ! empty( $_GET['system_user_access_token'] ) ? sanitize_text_field( $_GET['system_user_access_token'] ) : '';
256
  $system_user_id = ! empty( $_GET['system_user_id'] ) ? sanitize_text_field( $_GET['system_user_id'] ) : '';
@@ -302,48 +328,17 @@ class Connection {
302
  facebook_for_woocommerce()->log( sprintf( 'Connection failed: %s', $exception->getMessage() ) );
303
 
304
  set_transient( 'wc_facebook_connection_failed', time(), 30 );
305
-
306
- wp_safe_redirect( facebook_for_woocommerce()->get_settings_url() );
307
- exit;
308
-
309
  } catch ( Connect_WC_API_Exception $exception ) {
310
- $message = $this->prepare_connect_server_message_for_user_display( $exception->getMessage() );
311
 
312
- facebook_for_woocommerce()->log( sprintf( 'Failed to connect to Facebook. Reason: %s', $message ), 'facebook_for_woocommerce_connect' );
313
 
314
  set_transient( 'wc_facebook_connection_failed', time(), 30 );
315
-
316
- wp_safe_redirect( facebook_for_woocommerce()->get_settings_url() );
317
- exit;
318
-
319
  }
320
 
321
- wp_safe_redirect( facebook_for_woocommerce()->get_advertise_tab_url() );
322
  exit;
323
  }
324
 
325
- /**
326
- * Prepares the error message from the connect server for the logs.
327
- *
328
- * @since 2.6.8
329
- * @param string $message Message string that needs formatting.
330
- * @return string Formatted message string ready for logging.
331
- */
332
- public function prepare_connect_server_message_for_user_display( $message ) {
333
- /*
334
- * In some scenarios the connect server message is a JSON encoded object.
335
- * This happens when we have detailed information from Facebook API endpoint about the error.
336
- * We want to print it pretty for the customers.
337
- */
338
- $decoded_message = json_decode( $message );
339
- if ( json_last_error() === JSON_ERROR_NONE ) {
340
- // If error is the first key we want to use just the body to simplify the message.
341
- $decoded_message = isset( $decoded_message->error ) ? $decoded_message->error : $decoded_message;
342
- $message = json_encode( $decoded_message, JSON_PRETTY_PRINT );
343
- }
344
- return $message;
345
- }
346
-
347
 
348
  /**
349
  * Disconnects the integration using the Graph API.
@@ -396,13 +391,12 @@ class Connection {
396
  $this->update_ad_account_id( '' );
397
  $this->update_instagram_business_id( '' );
398
  $this->update_commerce_merchant_settings_id( '' );
399
- $this->update_external_business_id('');
400
 
401
  update_option( \WC_Facebookcommerce_Integration::SETTING_FACEBOOK_PAGE_ID, '' );
402
  update_option( \WC_Facebookcommerce_Integration::SETTING_FACEBOOK_PIXEL_ID, '' );
403
-
404
  facebook_for_woocommerce()->get_integration()->update_product_catalog_id( '' );
405
 
 
406
  }
407
 
408
 
@@ -572,7 +566,7 @@ class Connection {
572
  );
573
 
574
  // build the proxy app URL where the user will land after onboarding, to be redirected to the site URL
575
- $redirect_url = add_query_arg( 'site_url', urlencode( $site_url ), $this->get_connection_authentication_url() );
576
 
577
  // build the final connect URL, direct to Facebook
578
  $connect_url = add_query_arg(
@@ -668,7 +662,7 @@ class Connection {
668
 
669
  $external_id = get_option( self::OPTION_EXTERNAL_BUSINESS_ID );
670
 
671
- if ( ! is_string( $external_id ) || empty( $external_id ) ) {
672
 
673
  /**
674
  * Filters the shop's business external ID.
@@ -688,8 +682,7 @@ class Connection {
688
 
689
  $external_id = uniqid( sprintf( '%s-', $external_id ), false );
690
 
691
- $this->update_external_business_id( $external_id );
692
-
693
  }
694
 
695
  $this->external_business_id = $external_id;
@@ -855,23 +848,6 @@ class Connection {
855
  return (string) apply_filters( 'wc_facebook_connection_app_store_login_url', self::APP_STORE_LOGIN_URL );
856
  }
857
 
858
- /**
859
- * Gets connect server authentication url.
860
- *
861
- * @since 2.6.8
862
- *
863
- * @return string URL
864
- */
865
- public function get_connection_authentication_url() {
866
- /**
867
- * Filters App Store login URL.
868
- *
869
- * @since 2.6.8
870
- *
871
- * @param string $connection_authentication_url the connection App Store login URL
872
- */
873
- return (string) apply_filters( 'wc_facebook_connection_authentication_url', self::CONNECTION_AUTHENTICATION_URL );
874
- }
875
 
876
  /**
877
  * Gets the full redirect URL where the user will return to after OAuth.
@@ -960,7 +936,7 @@ class Connection {
960
  'currency' => get_woocommerce_currency(),
961
  'business_vertical' => 'ECOMMERCE',
962
  'domain' => home_url(),
963
- 'channel' => 'DEFAULT',
964
  ),
965
  'business_config' => array(
966
  'business' => array(
@@ -1127,18 +1103,6 @@ class Connection {
1127
  update_option( self::OPTION_PAGE_ACCESS_TOKEN, is_string( $value ) ? $value : '' );
1128
  }
1129
 
1130
- /**
1131
- * Stores the given external business id.
1132
- *
1133
- * @since 2.6.13
1134
- *
1135
- * @param string $value external business id
1136
- */
1137
- public function update_external_business_id( $value ) {
1138
-
1139
- update_option( self::OPTION_EXTERNAL_BUSINESS_ID, is_string( $value ) ? $value : '' );
1140
- }
1141
-
1142
 
1143
  /**
1144
  * Determines whether the site is connected.
@@ -1231,15 +1195,15 @@ class Connection {
1231
 
1232
  $this->get_plugin()->log( 'Wrong (or empty) WebHook Event received' );
1233
  $this->get_plugin()->log( print_r( $data, true ) ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
1234
-
1235
  return;
1236
  }
1237
 
1238
  $log_data = array();
1239
-
1240
  $this->get_plugin()->log( 'WebHook User Event received' );
1241
  $this->get_plugin()->log( print_r( $data, true ) ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
1242
-
1243
 
1244
  $entry = (array) $data->entry[0];
1245
  if ( empty( $entry ) ) {
@@ -1297,7 +1261,7 @@ class Connection {
1297
  }
1298
 
1299
  if ( ! empty( $values->business_id ) ) {
1300
- $this->update_external_business_id( sanitize_text_field( $values->business_id ) );
1301
  $log_data[ self::OPTION_EXTERNAL_BUSINESS_ID ] = sanitize_text_field( $values->business_id );
1302
  }
1303
 
11
 
12
  namespace SkyVerge\WooCommerce\Facebook\Handlers;
13
 
 
14
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_API_Exception;
15
  use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Helper;
16
  use SkyVerge\WooCommerce\Facebook\API\Exceptions\Connect_WC_API_Exception;
37
  /** @var string WooCommerce connection for APP Store login URL */
38
  const APP_STORE_LOGIN_URL = 'https://connect.woocommerce.com/app-store-login/facebook/';
39
 
 
 
 
40
  /** @var string the Standard Auth type */
41
  const AUTH_TYPE_STANDARD = 'standard';
42
 
106
 
107
  $this->plugin = $plugin;
108
 
109
+ add_action( 'init', array( $this, 'refresh_business_configuration' ) );
110
 
111
+ add_action( 'admin_init', array( $this, 'refresh_installation_data' ) );
112
 
113
  add_action( 'woocommerce_api_' . self::ACTION_CONNECT, array( $this, 'handle_connect' ) );
114
 
131
  */
132
  public function refresh_business_configuration() {
133
 
134
+ // only refresh once an hour
135
+ if ( get_transient( 'wc_facebook_business_configuration_refresh' ) ) {
136
+ return;
137
+ }
138
+
139
  // bail if not connected
140
  if ( ! $this->is_connected() ) {
141
  return;
149
  $response->is_ig_cta_enabled()
150
  );
151
 
152
+ // update the messenger settings
153
+ if ( $messenger_configuration = $response->get_messenger_configuration() ) {
154
+
155
+ // store the local "enabled" setting
156
+ update_option( \WC_Facebookcommerce_Integration::SETTING_ENABLE_MESSENGER, wc_bool_to_string( $messenger_configuration->is_enabled() ) );
157
 
158
+ if ( $default_locale = $messenger_configuration->get_default_locale() ) {
159
+ update_option( \WC_Facebookcommerce_Integration::SETTING_MESSENGER_LOCALE, sanitize_text_field( $default_locale ) );
160
+ }
161
+
162
+ // if the site's domain is somehow missing from the allowed domains, re-add it
163
+ if ( $messenger_configuration->is_enabled() && ! in_array( home_url( '/' ), $messenger_configuration->get_domains(), true ) ) {
164
+
165
+ $messenger_configuration->add_domain( home_url( '/' ) );
166
+
167
+ $this->get_plugin()->get_api()->update_messenger_configuration( $this->get_external_business_id(), $messenger_configuration );
168
+ }
169
+ }
170
+ } catch ( SV_WC_API_Exception $exception ) {
171
+
172
  $this->get_plugin()->log( 'Could not refresh business configuration. ' . $exception->getMessage() );
173
  }
174
 
175
+ set_transient( 'wc_facebook_business_configuration_refresh', time(), HOUR_IN_SECONDS );
176
  }
177
 
178
 
188
  return;
189
  }
190
 
191
+ // only refresh once a day
192
+ if ( get_transient( 'wc_facebook_connection_refresh' ) ) {
193
+ return;
194
+ }
195
+
196
  try {
197
 
198
  $this->update_installation_data();
202
  $this->get_plugin()->log( 'Could not refresh installation data. ' . $exception->getMessage() );
203
  }
204
 
205
+ set_transient( 'wc_facebook_connection_refresh', time(), DAY_IN_SECONDS );
206
  }
207
 
208
 
276
  }
277
 
278
  $is_error = ! empty( $_GET['err'] ) ? true : false;
279
+ $error_code = ! empty( $_GET['err_code'] ) ? sanitize_text_field( $_GET['err_code'] ) : '';
280
  $merchant_access_token = ! empty( $_GET['merchant_access_token'] ) ? sanitize_text_field( $_GET['merchant_access_token'] ) : '';
281
  $system_user_access_token = ! empty( $_GET['system_user_access_token'] ) ? sanitize_text_field( $_GET['system_user_access_token'] ) : '';
282
  $system_user_id = ! empty( $_GET['system_user_id'] ) ? sanitize_text_field( $_GET['system_user_id'] ) : '';
328
  facebook_for_woocommerce()->log( sprintf( 'Connection failed: %s', $exception->getMessage() ) );
329
 
330
  set_transient( 'wc_facebook_connection_failed', time(), 30 );
 
 
 
 
331
  } catch ( Connect_WC_API_Exception $exception ) {
 
332
 
333
+ facebook_for_woocommerce()->log( sprintf( 'Failed to connect to Facebook. Facebook API returned error code: %s', $exception->getMessage() ), 'facebook_for_woocommerce_connect' );
334
 
335
  set_transient( 'wc_facebook_connection_failed', time(), 30 );
 
 
 
 
336
  }
337
 
338
+ wp_safe_redirect( facebook_for_woocommerce()->get_settings_url() );
339
  exit;
340
  }
341
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
 
343
  /**
344
  * Disconnects the integration using the Graph API.
391
  $this->update_ad_account_id( '' );
392
  $this->update_instagram_business_id( '' );
393
  $this->update_commerce_merchant_settings_id( '' );
 
394
 
395
  update_option( \WC_Facebookcommerce_Integration::SETTING_FACEBOOK_PAGE_ID, '' );
396
  update_option( \WC_Facebookcommerce_Integration::SETTING_FACEBOOK_PIXEL_ID, '' );
 
397
  facebook_for_woocommerce()->get_integration()->update_product_catalog_id( '' );
398
 
399
+ delete_transient( 'wc_facebook_business_configuration_refresh' );
400
  }
401
 
402
 
566
  );
567
 
568
  // build the proxy app URL where the user will land after onboarding, to be redirected to the site URL
569
+ $redirect_url = add_query_arg( 'site_url', urlencode( $site_url ), 'https://connect.woocommerce.com/auth/facebookcommerce/' );
570
 
571
  // build the final connect URL, direct to Facebook
572
  $connect_url = add_query_arg(
662
 
663
  $external_id = get_option( self::OPTION_EXTERNAL_BUSINESS_ID );
664
 
665
+ if ( ! is_string( $external_id ) ) {
666
 
667
  /**
668
  * Filters the shop's business external ID.
682
 
683
  $external_id = uniqid( sprintf( '%s-', $external_id ), false );
684
 
685
+ update_option( self::OPTION_EXTERNAL_BUSINESS_ID, $external_id );
 
686
  }
687
 
688
  $this->external_business_id = $external_id;
848
  return (string) apply_filters( 'wc_facebook_connection_app_store_login_url', self::APP_STORE_LOGIN_URL );
849
  }
850
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
851
 
852
  /**
853
  * Gets the full redirect URL where the user will return to after OAuth.
936
  'currency' => get_woocommerce_currency(),
937
  'business_vertical' => 'ECOMMERCE',
938
  'domain' => home_url(),
939
+ 'channel' => 'COMMERCE_OFFSITE',
940
  ),
941
  'business_config' => array(
942
  'business' => array(
1103
  update_option( self::OPTION_PAGE_ACCESS_TOKEN, is_string( $value ) ? $value : '' );
1104
  }
1105
 
 
 
 
 
 
 
 
 
 
 
 
 
1106
 
1107
  /**
1108
  * Determines whether the site is connected.
1195
 
1196
  $this->get_plugin()->log( 'Wrong (or empty) WebHook Event received' );
1197
  $this->get_plugin()->log( print_r( $data, true ) ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
1198
+
1199
  return;
1200
  }
1201
 
1202
  $log_data = array();
1203
+
1204
  $this->get_plugin()->log( 'WebHook User Event received' );
1205
  $this->get_plugin()->log( print_r( $data, true ) ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
1206
+
1207
 
1208
  $entry = (array) $data->entry[0];
1209
  if ( empty( $entry ) ) {
1261
  }
1262
 
1263
  if ( ! empty( $values->business_id ) ) {
1264
+ update_option( self::OPTION_EXTERNAL_BUSINESS_ID, sanitize_text_field( $values->business_id ) );
1265
  $log_data[ self::OPTION_EXTERNAL_BUSINESS_ID ] = sanitize_text_field( $values->business_id );
1266
  }
1267
 
includes/Jobs/CleanupSkyvergeFrameworkJobOptions.php CHANGED
@@ -9,7 +9,7 @@ defined( 'ABSPATH' ) || exit;
9
  /**
10
  * Class CleanupSkyvergeFrameworkJobOptions
11
  *
12
- * Responsible for cleaning up old completed and failed background sync jobs from SkyVerge background job system.
13
  * Each job is represented by a row in wp_options table, and these can accumulate over time.
14
  *
15
  * Note - this is closely coupled to the SkyVerge background job system, and is essentially a patch to improve it.
@@ -29,7 +29,7 @@ class CleanupSkyvergeFrameworkJobOptions {
29
  }
30
 
31
  /**
32
- * Delete old completed/failed product sync job rows from options table.
33
  *
34
  * Logic and database query are adapted from SV_WP_Background_Job_Handler::get_jobs().
35
  *
@@ -42,7 +42,7 @@ class CleanupSkyvergeFrameworkJobOptions {
42
  /**
43
  * Query notes:
44
  * - Matching product sync job only (Products\Sync\Background class).
45
- * - Matching "completed" or "failed" status by sniffing json option value.
46
  * - Order by lowest id, to delete older rows first.
47
  * - Limit number of rows (periodic task will eventually remove all).
48
  * Using `get_results` so we can limit number of items; `delete` doesn't allow this.
@@ -51,9 +51,9 @@ class CleanupSkyvergeFrameworkJobOptions {
51
  "DELETE
52
  FROM {$wpdb->options}
53
  WHERE option_name LIKE 'wc_facebook_background_product_sync_job_%'
54
- AND ( option_value LIKE '%\"status\":\"completed\"%' OR option_value LIKE '%\"status\":\"failed\"%' )
55
  ORDER BY option_id ASC
56
- LIMIT 500"
57
  );
58
  }
59
 
9
  /**
10
  * Class CleanupSkyvergeFrameworkJobOptions
11
  *
12
+ * Responsible for cleaning up old completed background sync jobs from SkyVerge background job system.
13
  * Each job is represented by a row in wp_options table, and these can accumulate over time.
14
  *
15
  * Note - this is closely coupled to the SkyVerge background job system, and is essentially a patch to improve it.
29
  }
30
 
31
  /**
32
+ * Delete old completed product sync job rows from options table.
33
  *
34
  * Logic and database query are adapted from SV_WP_Background_Job_Handler::get_jobs().
35
  *
42
  /**
43
  * Query notes:
44
  * - Matching product sync job only (Products\Sync\Background class).
45
+ * - Matching "completed" status by sniffing json option value.
46
  * - Order by lowest id, to delete older rows first.
47
  * - Limit number of rows (periodic task will eventually remove all).
48
  * Using `get_results` so we can limit number of items; `delete` doesn't allow this.
51
  "DELETE
52
  FROM {$wpdb->options}
53
  WHERE option_name LIKE 'wc_facebook_background_product_sync_job_%'
54
+ AND option_value LIKE '%\"status\":\"completed\"%'
55
  ORDER BY option_id ASC
56
+ LIMIT 250"
57
  );
58
  }
59
 
includes/Jobs/GenerateProductFeed.php CHANGED
@@ -23,19 +23,14 @@ class GenerateProductFeed extends AbstractChainedJob {
23
  * Called before starting the job.
24
  */
25
  protected function handle_start() {
26
- $feed_handler = new \WC_Facebook_Product_Feed();
27
- $feed_handler->create_files_to_protect_product_feed_directory();
28
- $feed_handler->prepare_temporary_feed_file();
29
- facebook_for_woocommerce()->get_tracker()->reset_batch_generation_time();
30
  }
31
 
32
  /**
33
  * Called after the finishing the job.
34
  */
35
  protected function handle_end() {
36
- $feed_handler = new \WC_Facebook_Product_Feed();
37
- $feed_handler->rename_temporary_feed_file_to_final_feed_file();
38
- facebook_for_woocommerce()->get_tracker()->save_batch_generation_time();
39
  }
40
 
41
  /**
@@ -55,8 +50,8 @@ class GenerateProductFeed extends AbstractChainedJob {
55
  $product_ids = $wpdb->get_col(
56
  $wpdb->prepare(
57
  "SELECT post.ID
58
- FROM {$wpdb->posts} as post
59
- LEFT JOIN {$wpdb->posts} as parent ON post.post_parent = parent.ID
60
  WHERE
61
  ( post.post_type = 'product_variation' AND parent.post_status = 'publish' )
62
  OR
@@ -71,47 +66,55 @@ class GenerateProductFeed extends AbstractChainedJob {
71
  return array_map( 'intval', $product_ids );
72
  }
73
 
74
- /**
75
- * Processes a batch of items.
76
  *
77
- * @since 1.1.0
78
  *
79
- * @param array $items The items of the current batch.
80
- * @param array $args The args for the job.
81
  *
82
- * @throws Exception On error. The failure will be logged by Action Scheduler and the job chain will stop.
83
  */
84
- protected function process_items( array $items, array $args ) {
85
- // Grab start time.
86
- $start_time = microtime( true );
87
- /*
88
- * Pre-fetch full product objects.
89
- * Variable products will be filtered out here since we don't need them for the feed. It's important to not
90
- * filter out variable products in ::get_items_for_batch() because if a batch only contains variable products
91
- * the job will end prematurely thinking it has nothing more to process.
92
- */
93
- $products = wc_get_products(
94
- array(
95
- 'type' => array( 'simple', 'variation' ),
96
  'include' => $items,
97
  'orderby' => 'none',
98
- 'limit' => $this->get_batch_size(),
99
- )
100
  );
101
- $feed_handler = new \WC_Facebook_Product_Feed();
102
- $temp_feed_file = fopen( $feed_handler->get_temp_file_path(), 'a' );
103
- $feed_handler->write_products_feed_to_temp_file( $products, $temp_feed_file );
104
- if ( is_resource( $temp_feed_file ) ) {
105
- fclose( $temp_feed_file );
106
- }
107
- facebook_for_woocommerce()->get_tracker()->increment_batch_generation_time( microtime( true ) - $start_time );
108
  }
109
 
110
  /**
111
- * Empty function to satisfy parent class requirements.
112
- * We don't use it because we are processing the whole batch at once in process_items.
 
 
 
 
113
  */
114
- protected function process_item( $item, array $args ) {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
 
116
  /**
117
  * Get the name/slug of the job.
23
  * Called before starting the job.
24
  */
25
  protected function handle_start() {
26
+ // Optionally override this method in child class.
 
 
 
27
  }
28
 
29
  /**
30
  * Called after the finishing the job.
31
  */
32
  protected function handle_end() {
33
+ // Optionally override this method in child class.
 
 
34
  }
35
 
36
  /**
50
  $product_ids = $wpdb->get_col(
51
  $wpdb->prepare(
52
  "SELECT post.ID
53
+ FROM wp_posts as post
54
+ LEFT JOIN wp_posts as parent ON post.post_parent = parent.ID
55
  WHERE
56
  ( post.post_type = 'product_variation' AND parent.post_status = 'publish' )
57
  OR
66
  return array_map( 'intval', $product_ids );
67
  }
68
 
69
+ /**
70
+ * Filter-like function that runs before items in a batch are processed.
71
  *
72
+ * For example, this could be useful for pre-fetching full objects.
73
  *
74
+ * @param array $items
 
75
  *
76
+ * @return array
77
  */
78
+ protected function filter_items_before_processing( array $items ): array {
79
+ // Pre-fetch full product objects.
80
+ // Variable products will be filtered out here since we don't need them for the feed. It's important to not
81
+ // filter out variable products in ::get_items_for_batch() because if a batch only contains variable products
82
+ // the job will end prematurely thinking it has nothing more to process.
83
+ return wc_get_products(
84
+ [
85
+ 'type' => [ 'simple', 'variation' ],
 
 
 
 
86
  'include' => $items,
87
  'orderby' => 'none',
88
+ ]
 
89
  );
 
 
 
 
 
 
 
90
  }
91
 
92
  /**
93
+ * Process a single item.
94
+ *
95
+ * @param WC_Product $product A single item from the get_items_for_batch() method.
96
+ * @param array $args The args for the job.
97
+ *
98
+ * @throws Exception On error. The failure will be logged by Action Scheduler and the job chain will stop.
99
  */
100
+ protected function process_item( $product, array $args ) {
101
+ try {
102
+ if ( ! $product ) {
103
+ throw new Exception( 'Product not found.' );
104
+ }
105
+
106
+ $this->log( $product->get_id() );
107
+
108
+ } catch ( Exception $e ) {
109
+ $this->log(
110
+ sprintf(
111
+ 'Error processing item #%d - %s',
112
+ $product instanceof WC_Product ? $product->get_id() : 0,
113
+ $e->getMessage()
114
+ )
115
+ );
116
+ }
117
+ }
118
 
119
  /**
120
  * Get the name/slug of the job.
includes/Jobs/{JobManager.php → JobRegistry.php} RENAMED
@@ -8,11 +8,11 @@ use Automattic\WooCommerce\ActionSchedulerJobFramework\Proxies\ActionScheduler;
8
  defined( 'ABSPATH' ) || exit;
9
 
10
  /**
11
- * Class JobManager
12
  *
13
  * @since 2.5.0
14
  */
15
- class JobManager {
16
 
17
  /**
18
  * @var GenerateProductFeed
8
  defined( 'ABSPATH' ) || exit;
9
 
10
  /**
11
+ * Class JobRegistry
12
  *
13
  * @since 2.5.0
14
  */
15
+ class JobRegistry {
16
 
17
  /**
18
  * @var GenerateProductFeed
includes/Lifecycle.php CHANGED
@@ -184,6 +184,15 @@ class Lifecycle extends Framework\Plugin\Lifecycle {
184
 
185
  update_option( 'woocommerce_' . \WC_Facebookcommerce::INTEGRATION_ID . '_settings', $new_settings );
186
 
 
 
 
 
 
 
 
 
 
187
  }
188
 
189
 
184
 
185
  update_option( 'woocommerce_' . \WC_Facebookcommerce::INTEGRATION_ID . '_settings', $new_settings );
186
 
187
+ // schedule the next product resync action
188
+ if ( $new_settings[ \WC_Facebookcommerce_Integration::SETTING_SCHEDULED_RESYNC_OFFSET ] && 'yes' === $new_settings[ \WC_Facebookcommerce_Integration::SETTING_ENABLE_PRODUCT_SYNC ] ) {
189
+
190
+ $integration = $this->get_plugin()->get_integration();
191
+
192
+ if ( ! $integration->is_resync_scheduled() ) {
193
+ $integration->schedule_resync( $new_settings[ \WC_Facebookcommerce_Integration::SETTING_SCHEDULED_RESYNC_OFFSET ] );
194
+ }
195
+ }
196
  }
197
 
198
 
includes/ProductSets/Sync.php CHANGED
@@ -71,15 +71,6 @@ class Sync {
71
  */
72
  protected static $prev_product_set = array();
73
 
74
- /**
75
- * Product's Product Set Previous Name
76
- *
77
- * @since 2.6.30
78
- *
79
- * @var string
80
- */
81
- protected static $prev_product_name = "";
82
-
83
  /**
84
  * Product's Product Set New List
85
  *
@@ -89,15 +80,6 @@ class Sync {
89
  */
90
  protected static $new_product_set = array();
91
 
92
- /**
93
- * Product's Product Set New Name
94
- *
95
- * @since 2.6.30
96
- *
97
- * @var string
98
- */
99
- protected static $new_product_name = "";
100
-
101
  /**
102
  * Categories field name
103
  *
@@ -140,7 +122,7 @@ class Sync {
140
  // product set hooks, compare taxonomies the lists before and after saving product to see if must sync
141
  add_action( 'created_fb_product_set', array( $this, 'fb_product_set_hook_before' ), 1 );
142
  add_action( 'created_fb_product_set', array( $this, 'fb_product_set_hook_after' ), 99 );
143
- add_action( 'edit_fb_product_set', array( $this, 'fb_product_set_hook_before' ), 1 );
144
  add_action( 'edited_fb_product_set', array( $this, 'fb_product_set_hook_after' ), 99 );
145
 
146
  // product cat and product set delete hooks, remove or check if must remove any product set
@@ -258,7 +240,6 @@ class Sync {
258
  */
259
  public function fb_product_set_hook_before( $term_id ) {
260
  self::$prev_product_cat = get_term_meta( $term_id, $this->categories_field, true );
261
- self::$prev_product_name = get_term( $term_id )->name;
262
  }
263
 
264
 
@@ -271,8 +252,7 @@ class Sync {
271
  */
272
  public function fb_product_set_hook_after( $term_id ) {
273
  self::$new_product_cat = get_term_meta( $term_id, $this->categories_field, true );
274
- self::$new_product_name = get_term( $term_id )->name;
275
- if ( ! empty( $this->get_all_diff( 'product_cat' ) ) || self::$prev_product_name !== self::$new_product_name ) {
276
  $this->maybe_sync_product_set( $term_id );
277
  }
278
  }
@@ -329,7 +309,7 @@ class Sync {
329
  *
330
  * @since 2.3.0
331
  *
332
- * @param int $product_set_id Facebook Product Set Term ID.
333
  */
334
  public function maybe_sync_product_set( $product_set_id ) {
335
 
@@ -377,13 +357,7 @@ class Sync {
377
 
378
  // gets products variations
379
  global $wpdb;
380
-
381
- $sql = sprintf(
382
- "SELECT ID FROM $wpdb->posts WHERE post_type = 'product_variation' AND post_parent IN (%s) ",
383
- implode( ', ', array_map( 'intval', $product_ids ) )
384
- );
385
-
386
- $variation_ids = $wpdb->get_results( $sql );
387
  if ( ! empty( $variation_ids ) ) {
388
 
389
  // product_variations: add retailer id to the products filter
71
  */
72
  protected static $prev_product_set = array();
73
 
 
 
 
 
 
 
 
 
 
74
  /**
75
  * Product's Product Set New List
76
  *
80
  */
81
  protected static $new_product_set = array();
82
 
 
 
 
 
 
 
 
 
 
83
  /**
84
  * Categories field name
85
  *
122
  // product set hooks, compare taxonomies the lists before and after saving product to see if must sync
123
  add_action( 'created_fb_product_set', array( $this, 'fb_product_set_hook_before' ), 1 );
124
  add_action( 'created_fb_product_set', array( $this, 'fb_product_set_hook_after' ), 99 );
125
+ add_action( 'edited_fb_product_set', array( $this, 'fb_product_set_hook_before' ), 1 );
126
  add_action( 'edited_fb_product_set', array( $this, 'fb_product_set_hook_after' ), 99 );
127
 
128
  // product cat and product set delete hooks, remove or check if must remove any product set
240
  */
241
  public function fb_product_set_hook_before( $term_id ) {
242
  self::$prev_product_cat = get_term_meta( $term_id, $this->categories_field, true );
 
243
  }
244
 
245
 
252
  */
253
  public function fb_product_set_hook_after( $term_id ) {
254
  self::$new_product_cat = get_term_meta( $term_id, $this->categories_field, true );
255
+ if ( ! empty( $this->get_all_diff( 'product_cat' ) ) ) {
 
256
  $this->maybe_sync_product_set( $term_id );
257
  }
258
  }
309
  *
310
  * @since 2.3.0
311
  *
312
+ * @param int $product_set_id FB Product Set Term ID.
313
  */
314
  public function maybe_sync_product_set( $product_set_id ) {
315
 
357
 
358
  // gets products variations
359
  global $wpdb;
360
+ $variation_ids = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = 'product_variation' AND post_parent IN (%s) ", implode( ',', $product_ids ) ) );
 
 
 
 
 
 
361
  if ( ! empty( $variation_ids ) ) {
362
 
363
  // product_variations: add retailer id to the products filter
includes/ProductSync/ProductInvalidException.php DELETED
@@ -1,14 +0,0 @@
1
- <?php
2
-
3
- namespace SkyVerge\WooCommerce\Facebook\ProductSync;
4
-
5
- use Exception;
6
-
7
- /**
8
- * Class ProductInvalidException
9
- *
10
- * Exception for when a product configuration is not correct in terms of Facebook product sync.
11
- * There are limitations that will exclude product from Facebook catalog. We want to inform
12
- * user as early as possible.
13
- */
14
- class ProductInvalidException extends Exception {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/ProductSync/ProductValidator.php CHANGED
@@ -3,14 +3,9 @@
3
  namespace SkyVerge\WooCommerce\Facebook\ProductSync;
4
 
5
  use SkyVerge\WooCommerce\Facebook\Products;
6
- use WC_Facebook_Product;
7
  use WC_Product;
8
  use WC_Facebookcommerce_Integration;
9
 
10
- if ( ! class_exists( 'WC_Facebookcommerce_Utils' ) ) {
11
- include_once '../fbutils.php';
12
- }
13
-
14
  /**
15
  * Class ProductValidator
16
  *
@@ -27,27 +22,6 @@ class ProductValidator {
27
  */
28
  const SYNC_ENABLED_META_KEY = '_wc_facebook_sync_enabled';
29
 
30
- /**
31
- * Maximum length of product description.
32
- *
33
- * @var int
34
- */
35
- const MAX_DESCRIPTION_LENGTH = 5000;
36
-
37
- /**
38
- * Maximum length of product title.
39
- *
40
- * @var int
41
- */
42
- const MAX_TITLE_LENGTH = 150;
43
-
44
- /**
45
- * Maximum allowed attributes in a variation;
46
- *
47
- * @var int
48
- */
49
- const MAX_NUMBER_OF_ATTRIBUTES_IN_VARIATION = 4;
50
-
51
  /**
52
  * The FB integration instance.
53
  *
@@ -69,13 +43,6 @@ class ProductValidator {
69
  */
70
  protected $product_parent;
71
 
72
- /**
73
- * The product parent object if the product has a parent.
74
- *
75
- * @var WC_Facebook_Product
76
- */
77
- protected $fb_product_parent;
78
-
79
  /**
80
  * ProductValidator constructor.
81
  *
@@ -83,20 +50,16 @@ class ProductValidator {
83
  * @param WC_Product $product The product to validate. Accepts both variations and variable products.
84
  */
85
  public function __construct( WC_Facebookcommerce_Integration $integration, WC_Product $product ) {
86
- $this->product = $product;
87
- $this->product_parent = null;
88
- $this->fb_product_parent = null;
89
 
90
  if ( $product->get_parent_id() ) {
91
  $parent_product = wc_get_product( $product->get_parent_id() );
92
  if ( $parent_product instanceof WC_Product ) {
93
- $this->product_parent = $parent_product;
94
- $this->fb_product_parent = new WC_Facebook_Product( $parent_product );
95
  }
96
  }
97
 
98
- $this->facebook_product = new WC_Facebook_Product( $this->product, $this->fb_product_parent );
99
- $this->integration = $integration;
100
  }
101
 
102
  /**
@@ -112,8 +75,6 @@ class ProductValidator {
112
  $this->validate_product_price();
113
  $this->validate_product_visibility();
114
  $this->validate_product_terms();
115
- $this->validate_product_description();
116
- $this->validate_product_title();
117
  }
118
 
119
  /**
@@ -130,8 +91,6 @@ class ProductValidator {
130
  $this->validate_product_price();
131
  $this->validate_product_visibility();
132
  $this->validate_product_terms();
133
- $this->validate_product_description();
134
- $this->validate_product_title();
135
  }
136
 
137
  /**
@@ -144,8 +103,6 @@ class ProductValidator {
144
  $this->validate();
145
  } catch ( ProductExcludedException $e ) {
146
  return false;
147
- } catch ( ProductInvalidException $e ) {
148
- return false;
149
  }
150
 
151
  return true;
@@ -161,8 +118,6 @@ class ProductValidator {
161
  $this->validate_product_terms();
162
  } catch ( ProductExcludedException $e ) {
163
  return false;
164
- } catch ( ProductInvalidException $e ) {
165
- return false;
166
  }
167
 
168
  return true;
@@ -178,8 +133,6 @@ class ProductValidator {
178
  $this->validate_product_sync_field();
179
  } catch ( ProductExcludedException $e ) {
180
  return false;
181
- } catch ( ProductInvalidException $e ) {
182
- return false;
183
  }
184
 
185
  return true;
@@ -230,8 +183,8 @@ class ProductValidator {
230
  protected function validate_product_visibility() {
231
  $product = $this->product_parent ? $this->product_parent : $this->product;
232
 
233
- if ( ! $product->is_visible() ) {
234
- throw new ProductExcludedException( __( 'This product cannot be synced to Facebook because it is hidden from your store catalog.', 'facebook-for-woocommerce' ) );
235
  }
236
  }
237
 
@@ -266,17 +219,6 @@ class ProductValidator {
266
  protected function validate_product_sync_field() {
267
  $invalid_exception = new ProductExcludedException( __( 'Sync disabled in product field.', 'facebook-for-woocommerce' ) );
268
 
269
- /**
270
- * Filters whether a product should be synced to FB.
271
- *
272
- * @since 2.6.26
273
- *
274
- * @param WC_Product $product the product object.
275
- */
276
- if ( ! apply_filters( 'wc_facebook_should_sync_product', true, $this->product ) ) {
277
- throw new ProductExcludedException( __( 'Product excluded by wc_facebook_should_sync_product filter.', 'facebook-for-woocommerce' ) );
278
- }
279
-
280
  if ( $this->product->is_type( 'variable' ) ) {
281
  foreach ( $this->product->get_children() as $child_id ) {
282
  $child_product = wc_get_product( $child_id );
@@ -314,79 +256,4 @@ class ProductValidator {
314
  }
315
  }
316
 
317
- /**
318
- * Check if the description field has correct format according to:
319
- * Product Description Specifications for Catalogs : https://www.facebook.com/business/help/2302017289821154
320
- *
321
- * @throws ProductInvalidException If product description does not meet the requirements.
322
- */
323
- protected function validate_product_description() {
324
- /*
325
- * First step is to select the description that we want to evaluate.
326
- * Main description is the one provided for the product in the Facebook.
327
- * If it is blank, product description will be used.
328
- * If product description is blank, shortname will be used.
329
- */
330
- $description = $this->facebook_product->get_fb_description();
331
-
332
- /*
333
- * Requirements:
334
- * - No all caps descriptions.
335
- * - Max length 5000.
336
- * - Min length 30 ( tested and not required, will not enforce until this will become a hard requirement )
337
- */
338
- if ( \WC_Facebookcommerce_Utils::is_all_caps( $description ) ) {
339
- throw new ProductInvalidException( __( 'Product description is all capital letters. Please change the description to sentence case in order to allow synchronization of your product.', 'facebook-for-woocommerce' ) );
340
- }
341
- if ( strlen( $description ) > self::MAX_DESCRIPTION_LENGTH ) {
342
- throw new ProductInvalidException( __( 'Product description is too long. Maximum allowed length is 5000 characters.', 'facebook-for-woocommerce' ) );
343
- }
344
- }
345
-
346
- /**
347
- * Check if the title field has correct format according to:
348
- * Product Title Specifications for Catalogs : https://www.facebook.com/business/help/2104231189874655
349
- *
350
- * @throws ProductInvalidException If product title does not meet the requirements.
351
- */
352
- protected function validate_product_title() {
353
- $title = $this->product->get_title();
354
-
355
- /*
356
- * Requirements:
357
- * - No all caps title.
358
- * - Max length 150.
359
- */
360
- if ( \WC_Facebookcommerce_Utils::is_all_caps( $title ) ) {
361
- throw new ProductInvalidException( __( 'Product title is all capital letters. Please change the title to sentence case in order to allow synchronization of your product.', 'facebook-for-woocommerce' ) );
362
- }
363
- if ( mb_strlen( $title, 'UTF-8' ) > self::MAX_TITLE_LENGTH ) {
364
- throw new ProductInvalidException( __( 'Product title is too long. Maximum allowed length is 150 characters.', 'facebook-for-woocommerce' ) );
365
- }
366
- }
367
-
368
- /**
369
- * Check if variation product has proper settings.
370
- *
371
- * @throws ProductInvalidException If product variation violates some requirements.
372
- */
373
- protected function validate_variation_structure() {
374
- // Check if we are dealing with a variation.
375
- if ( ! $this->product->is_type( 'variation' ) ) {
376
- return;
377
- }
378
- $attributes = $this->product->get_attributes();
379
-
380
- $used_attributes_count = count(
381
- array_filter(
382
- $attributes
383
- )
384
- );
385
-
386
- // No more than MAX_NUMBER_OF_ATTRIBUTES_IN_VARIATION ar allowed to be used.
387
- if ( $used_attributes_count > self::MAX_NUMBER_OF_ATTRIBUTES_IN_VARIATION ) {
388
- throw new ProductInvalidException( __( 'Too many attributes selected for product. Use 4 or less.', 'facebook-for-woocommerce' ) );
389
- }
390
- }
391
-
392
  }
3
  namespace SkyVerge\WooCommerce\Facebook\ProductSync;
4
 
5
  use SkyVerge\WooCommerce\Facebook\Products;
 
6
  use WC_Product;
7
  use WC_Facebookcommerce_Integration;
8
 
 
 
 
 
9
  /**
10
  * Class ProductValidator
11
  *
22
  */
23
  const SYNC_ENABLED_META_KEY = '_wc_facebook_sync_enabled';
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  /**
26
  * The FB integration instance.
27
  *
43
  */
44
  protected $product_parent;
45
 
 
 
 
 
 
 
 
46
  /**
47
  * ProductValidator constructor.
48
  *
50
  * @param WC_Product $product The product to validate. Accepts both variations and variable products.
51
  */
52
  public function __construct( WC_Facebookcommerce_Integration $integration, WC_Product $product ) {
53
+ $this->product = $product;
 
 
54
 
55
  if ( $product->get_parent_id() ) {
56
  $parent_product = wc_get_product( $product->get_parent_id() );
57
  if ( $parent_product instanceof WC_Product ) {
58
+ $this->product_parent = $parent_product;
 
59
  }
60
  }
61
 
62
+ $this->integration = $integration;
 
63
  }
64
 
65
  /**
75
  $this->validate_product_price();
76
  $this->validate_product_visibility();
77
  $this->validate_product_terms();
 
 
78
  }
79
 
80
  /**
91
  $this->validate_product_price();
92
  $this->validate_product_visibility();
93
  $this->validate_product_terms();
 
 
94
  }
95
 
96
  /**
103
  $this->validate();
104
  } catch ( ProductExcludedException $e ) {
105
  return false;
 
 
106
  }
107
 
108
  return true;
118
  $this->validate_product_terms();
119
  } catch ( ProductExcludedException $e ) {
120
  return false;
 
 
121
  }
122
 
123
  return true;
133
  $this->validate_product_sync_field();
134
  } catch ( ProductExcludedException $e ) {
135
  return false;
 
 
136
  }
137
 
138
  return true;
183
  protected function validate_product_visibility() {
184
  $product = $this->product_parent ? $this->product_parent : $this->product;
185
 
186
+ if ( 'visible' !== $product->get_catalog_visibility() ) {
187
+ throw new ProductExcludedException( __( 'Product is hidden from catalog and search.', 'facebook-for-woocommerce' ) );
188
  }
189
  }
190
 
219
  protected function validate_product_sync_field() {
220
  $invalid_exception = new ProductExcludedException( __( 'Sync disabled in product field.', 'facebook-for-woocommerce' ) );
221
 
 
 
 
 
 
 
 
 
 
 
 
222
  if ( $this->product->is_type( 'variable' ) ) {
223
  foreach ( $this->product->get_children() as $child_id ) {
224
  $child_product = wc_get_product( $child_id );
256
  }
257
  }
258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  }
includes/Products.php CHANGED
@@ -101,12 +101,6 @@ class Products {
101
  $product->update_meta_data( self::SYNC_ENABLED_META_KEY, $enabled );
102
  $product->save_meta_data();
103
  }
104
-
105
- // Remove excluded product from FB.
106
- if ( "no" === $enabled && self::product_should_be_deleted( $product ) ) {
107
- facebook_for_woocommerce()->get_integration()->delete_fb_product( $product );
108
- }
109
-
110
  }//end if
111
  }//end foreach
112
  }
@@ -235,8 +229,7 @@ class Products {
235
  /**
236
  * Determines whether the given product should be removed from the catalog.
237
  *
238
- * A product should be removed if it is no longer in stock and the user has opted-in to hide products that are out of stock,
239
- * or belongs to an excluded category.
240
  *
241
  * @since 2.0.0
242
  *
@@ -245,7 +238,7 @@ class Products {
245
  */
246
  public static function product_should_be_deleted( \WC_Product $product ) {
247
 
248
- return ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) && ! $product->is_in_stock() ) || ! facebook_for_woocommerce()->get_product_sync_validator( $product )->passes_product_terms_check();
249
  }
250
 
251
 
@@ -288,7 +281,7 @@ class Products {
288
  * @since 1.10.0
289
  *
290
  * @param \WC_Product $product product object
291
- * @param bool $visibility true for 'published' or false for 'hidden'
292
  * @return bool success
293
  */
294
  public static function set_product_visibility( \WC_Product $product, $visibility ) {
@@ -1120,7 +1113,7 @@ class Products {
1120
  if ( self::get_enhanced_catalog_attribute( $attribute_key, $product ) === $value ) {
1121
  return;
1122
  }
1123
- $product->update_meta_data( self::ENHANCED_CATALOG_ATTRIBUTES_META_KEY_PREFIX . $attribute_key, wp_unslash( $value ) );
1124
  $product->save_meta_data();
1125
  }
1126
 
101
  $product->update_meta_data( self::SYNC_ENABLED_META_KEY, $enabled );
102
  $product->save_meta_data();
103
  }
 
 
 
 
 
 
104
  }//end if
105
  }//end foreach
106
  }
229
  /**
230
  * Determines whether the given product should be removed from the catalog.
231
  *
232
+ * A product should be removed if it is no longer in stock and the user has opted-in to hide products that are out of stock.
 
233
  *
234
  * @since 2.0.0
235
  *
238
  */
239
  public static function product_should_be_deleted( \WC_Product $product ) {
240
 
241
+ return 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) && ! $product->is_in_stock();
242
  }
243
 
244
 
281
  * @since 1.10.0
282
  *
283
  * @param \WC_Product $product product object
284
+ * @param bool $visibility true for 'published' or false for 'staging'
285
  * @return bool success
286
  */
287
  public static function set_product_visibility( \WC_Product $product, $visibility ) {
1113
  if ( self::get_enhanced_catalog_attribute( $attribute_key, $product ) === $value ) {
1114
  return;
1115
  }
1116
+ $product->update_meta_data( self::ENHANCED_CATALOG_ATTRIBUTES_META_KEY_PREFIX . $attribute_key, $value );
1117
  $product->save_meta_data();
1118
  }
1119
 
includes/Products/Feed.php CHANGED
@@ -143,19 +143,15 @@ class Feed {
143
  * @internal
144
  *
145
  * @since 1.11.0
146
- * @since 2.6.6 Enable new feed generation code if requested.
147
  */
148
  public function regenerate_feed() {
149
- // Maybe use new ( experimental ), feed generation framework.
150
- if ( facebook_for_woocommerce()->get_integration()->is_new_style_feed_generation_enabled() ) {
151
- $generate_feed_job = facebook_for_woocommerce()->job_manager->generate_product_feed_job;
152
- $generate_feed_job->queue_start();
153
- } else {
154
- $feed_handler = new \WC_Facebook_Product_Feed();
155
- $feed_handler->generate_feed();
156
- }
157
  }
158
 
 
159
  /**
160
  * Schedules the recurring feed generation.
161
  *
143
  * @internal
144
  *
145
  * @since 1.11.0
 
146
  */
147
  public function regenerate_feed() {
148
+
149
+ $feed_handler = new \WC_Facebook_Product_Feed();
150
+
151
+ $feed_handler->generate_feed();
 
 
 
 
152
  }
153
 
154
+
155
  /**
156
  * Schedules the recurring feed generation.
157
  *
includes/Products/Sync.php CHANGED
@@ -110,7 +110,7 @@ class Sync {
110
  public function delete_products( array $retailer_ids ) {
111
 
112
  foreach ( $retailer_ids as $retailer_id ) {
113
- $this->requests[ $this->get_product_index( $retailer_id ) ] = self::ACTION_DELETE;
114
  }
115
  }
116
 
@@ -130,7 +130,7 @@ class Sync {
130
  }
131
 
132
  // bail if admin and not AJAX
133
- if ( is_admin() && ! wp_doing_ajax() ) {
134
  return;
135
  }
136
 
110
  public function delete_products( array $retailer_ids ) {
111
 
112
  foreach ( $retailer_ids as $retailer_id ) {
113
+ $this->requests[ $retailer_id ] = self::ACTION_DELETE;
114
  }
115
  }
116
 
130
  }
131
 
132
  // bail if admin and not AJAX
133
+ if ( is_admin() && ! is_ajax() ) {
134
  return;
135
  }
136
 
includes/Products/Sync/Background.php CHANGED
@@ -317,8 +317,7 @@ class Background extends Framework\SV_WP_Background_Job_Handler {
317
  apply_filters( 'facebook_for_woocommerce_variant_attribute_comma_replacement', ' ', $val ),
318
  $val
319
  );
320
- /** Force replacing , and : characters if those were not cleaned up by filters */
321
- $attributes[] = $key . ':' . str_replace( array( ',', ':' ), ' ', $attribute_value );
322
  }
323
 
324
  $data['additional_variant_attribute'] = implode( ',', $attributes );
317
  apply_filters( 'facebook_for_woocommerce_variant_attribute_comma_replacement', ' ', $val ),
318
  $val
319
  );
320
+ $attributes[] = $key . ':' . $attribute_value;
 
321
  }
322
 
323
  $data['additional_variant_attribute'] = implode( ',', $attributes );
includes/Utilities/Tracker.php CHANGED
@@ -29,33 +29,12 @@ class Tracker {
29
  const TRANSIENT_WCTRACKER_LIFE_TIME = 2 * WEEK_IN_SECONDS;
30
 
31
  /**
32
- * Transient key name; how long it took to generate the most recent feed file, or minus one if it failed.
33
  *
34
  * @var string
35
  */
36
  const TRANSIENT_WCTRACKER_FEED_GENERATION_TIME = 'facebook_for_woocommerce_wctracker_feed_generation_time';
37
 
38
- /**
39
- * Transient key name; how long it took to generate already generated batches.
40
- *
41
- * @var string
42
- */
43
- const TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_TIME = 'facebook_for_woocommerce_wctracker_feed_generation_batch_time';
44
-
45
- /**
46
- * Transient key name; how much wall ( clock ) time it took to generate the feed file.
47
- *
48
- * @var string
49
- */
50
- const TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_TIME = 'facebook_for_woocommerce_wctracker_feed_generation_batch_wall_time';
51
-
52
- /**
53
- * Transient key name; the time when was the batched feed generation started.
54
- *
55
- * @var string
56
- */
57
- const TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_START_TIME = 'facebook_for_woocommerce_wctracker_feed_generation_batch_wall_time';
58
-
59
  /**
60
  * Transient key name; true if feed has been requested by Facebook.
61
  *
@@ -124,27 +103,13 @@ class Tracker {
124
  $data['extensions']['facebook-for-woocommerce']['messenger-enabled'] = wc_bool_to_string( $messenger_enabled );
125
 
126
  /**
127
- * How long did the last feed generation take (or did it fail - 0)? This counts just the time when the batches have been generated.
128
- * It does not take into account the time between the batches.
129
  *
130
  * @since 2.6.0
131
  */
132
  $feed_generation_time = get_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_TIME );
133
  $data['extensions']['facebook-for-woocommerce']['feed-generation-time'] = floatval( $feed_generation_time );
134
 
135
- /**
136
- * How long did the last feed generation take in wall time. This is the whole duration. Batches plus time in between.
137
- *
138
- * @since 2.6.6
139
- */
140
- if ( facebook_for_woocommerce()->get_integration()->is_new_style_feed_generation_enabled() ) {
141
- $feed_generation_batch_wall_time = intval( get_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_TIME ) );
142
- } else {
143
- // For old feed generator this is the same thing $feed_generation_time because the process is done in one step.
144
- $feed_generation_batch_wall_time = intval( $feed_generation_time );
145
- }
146
- $data['extensions']['facebook-for-woocommerce']['feed-generation-wall-time'] = $feed_generation_batch_wall_time;
147
-
148
  /**
149
  * Has the feed file been requested since the last snapshot?
150
  *
@@ -171,13 +136,6 @@ class Tracker {
171
  */
172
  $data['extensions']['facebook-for-woocommerce']['product-feed-config'] = get_transient( self::TRANSIENT_WCTRACKER_FB_FEED_CONFIG );
173
 
174
- /**
175
- * Detect if the user has enabled the new experimental feed generator feature.
176
- *
177
- * @since 2.6.6
178
- */
179
- $data['extensions']['facebook-for-woocommerce']['new-feed-generator-enabled'] = wc_bool_to_string( facebook_for_woocommerce()->get_integration()->is_new_style_feed_generation_enabled() );
180
-
181
  return $data;
182
  }
183
 
@@ -193,58 +151,6 @@ class Tracker {
193
  set_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_TIME, $time_in_seconds, self::TRANSIENT_WCTRACKER_LIFE_TIME );
194
  }
195
 
196
- /**
197
- * Reset the feed generation in batch time counter.
198
- *
199
- * @since 2.6.6
200
- */
201
- public function reset_batch_generation_time() {
202
- // Reset the main counter.
203
- $this->track_feed_file_generation_time( -1 );
204
- set_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_TIME, 0, self::TRANSIENT_WCTRACKER_LIFE_TIME );
205
- set_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_TIME, 0, self::TRANSIENT_WCTRACKER_LIFE_TIME );
206
- set_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_START_TIME, time(), self::TRANSIENT_WCTRACKER_LIFE_TIME );
207
- }
208
-
209
- /**
210
- * Add time to batch feed_generation_time.
211
- * This accumulates time over all of the calculated feed batches.
212
- *
213
- * @param float $time_in_seconds Time to add to the generation time(in seconds).
214
- * @since 2.6.6
215
- */
216
- public function increment_batch_generation_time( $time_in_seconds ) {
217
- $tracked_generation_time = floatval( get_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_TIME ) );
218
- set_transient(
219
- self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_TIME,
220
- floatval( $time_in_seconds ) + $tracked_generation_time,
221
- self::TRANSIENT_WCTRACKER_LIFE_TIME
222
- );
223
- }
224
-
225
- /**
226
- * Save batch generation time.
227
- *
228
- * This is the last step in batch feed generation time tracking.
229
- * The accumulated time value is copied to the main transient
230
- * that is later used by the tracking code to track feed generation time.
231
- *
232
- * @since 2.6.6
233
- */
234
- public function save_batch_generation_time() {
235
- $this->track_feed_file_generation_time(
236
- get_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_TIME )
237
- );
238
-
239
- $start = intval( get_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_START_TIME ) );
240
- $end = time();
241
- set_transient(
242
- self::TRANSIENT_WCTRACKER_FEED_GENERATION_BATCH_WALL_TIME,
243
- $end - $start,
244
- self::TRANSIENT_WCTRACKER_LIFE_TIME
245
- );
246
- }
247
-
248
  /**
249
  * Store the fact that the feed has been requested by Facebook in a transient.
250
  * This will later be added to next tracker snapshot.
29
  const TRANSIENT_WCTRACKER_LIFE_TIME = 2 * WEEK_IN_SECONDS;
30
 
31
  /**
32
+ * Transient key name; how long it took to generate the most recent feed file, or zero if it failed.
33
  *
34
  * @var string
35
  */
36
  const TRANSIENT_WCTRACKER_FEED_GENERATION_TIME = 'facebook_for_woocommerce_wctracker_feed_generation_time';
37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  /**
39
  * Transient key name; true if feed has been requested by Facebook.
40
  *
103
  $data['extensions']['facebook-for-woocommerce']['messenger-enabled'] = wc_bool_to_string( $messenger_enabled );
104
 
105
  /**
106
+ * How long did the last feed generation take (or did it fail - 0)?
 
107
  *
108
  * @since 2.6.0
109
  */
110
  $feed_generation_time = get_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_TIME );
111
  $data['extensions']['facebook-for-woocommerce']['feed-generation-time'] = floatval( $feed_generation_time );
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  /**
114
  * Has the feed file been requested since the last snapshot?
115
  *
136
  */
137
  $data['extensions']['facebook-for-woocommerce']['product-feed-config'] = get_transient( self::TRANSIENT_WCTRACKER_FB_FEED_CONFIG );
138
 
 
 
 
 
 
 
 
139
  return $data;
140
  }
141
 
151
  set_transient( self::TRANSIENT_WCTRACKER_FEED_GENERATION_TIME, $time_in_seconds, self::TRANSIENT_WCTRACKER_LIFE_TIME );
152
  }
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  /**
155
  * Store the fact that the feed has been requested by Facebook in a transient.
156
  * This will later be added to next tracker snapshot.
includes/fbgraph.php CHANGED
@@ -26,7 +26,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_Graph_API' ) ) :
26
  */
27
  class WC_Facebookcommerce_Graph_API {
28
  const GRAPH_API_URL = 'https://graph.facebook.com/';
29
- const API_VERSION = 'v13.0';
30
  const CURL_TIMEOUT = 500;
31
 
32
  /**
26
  */
27
  class WC_Facebookcommerce_Graph_API {
28
  const GRAPH_API_URL = 'https://graph.facebook.com/';
29
+ const API_VERSION = 'v11.0';
30
  const CURL_TIMEOUT = 500;
31
 
32
  /**
includes/fbproduct.php CHANGED
@@ -56,21 +56,15 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
56
 
57
  public function __construct( $wpid, $parent_product = null ) {
58
 
59
- if ( $wpid instanceof WC_Product ) {
60
- $this->id = $wpid->get_id();
61
- $this->woo_product = $wpid;
62
- } else {
63
- $this->id = $wpid;
64
- $this->woo_product = wc_get_product( $wpid );
65
- }
66
-
67
  $this->fb_description = '';
 
68
  $this->gallery_urls = null;
69
  $this->fb_use_parent_image = null;
70
  $this->main_description = '';
71
  $this->sync_short_description = \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT === facebook_for_woocommerce()->get_integration()->get_product_description_mode();
72
 
73
- if ( $meta = get_post_meta( $this->id, self::FB_VISIBILITY, true ) ) {
74
  $this->fb_visibility = wc_string_to_bool( $meta );
75
  } else {
76
  $this->fb_visibility = '';
@@ -211,7 +205,7 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
211
  $image_urls = array_values( $image_urls );
212
 
213
  if ( empty( $image_urls ) ) {
214
- $image_urls[] = wc_placeholder_img_src();
215
  }
216
 
217
  return $image_urls;
@@ -354,42 +348,45 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
354
  return $description;
355
  }
356
 
357
- /**
358
- * @param array $product_data
359
- * @param bool $for_items_batch
360
- *
361
- * @return array
362
- */
363
  public function add_sale_price( $product_data, $for_items_batch = false ) {
364
 
 
 
 
 
 
 
 
 
 
365
  $sale_price = $this->woo_product->get_sale_price();
366
- $sale_price_effective_date = '';
 
 
 
 
 
 
 
367
 
368
  $sale_start =
369
- ( $date = $this->woo_product->get_date_on_sale_from() )
370
- ? date_i18n( WC_DateTime::ATOM, $date->getOffsetTimestamp() )
371
- : self::MIN_DATE_1 . self::MIN_TIME;
372
 
373
  $sale_end =
374
- ( $date = $this->woo_product->get_date_on_sale_to() )
375
- ? date_i18n( WC_DateTime::ATOM, $date->getOffsetTimestamp() )
376
- : self::MAX_DATE . self::MAX_TIME;
377
-
378
- // check if sale exist
379
- if ( is_numeric( $sale_price ) && $sale_price > 0 ) {
380
- $sale_price_effective_date = $sale_start . '/' . $sale_end;
381
- $sale_price =
382
- intval( round( $this->get_price_plus_tax( $sale_price ) * 100 ) );
383
- }
384
 
385
  // check if sale is expired and sale time range is valid
386
  if ( $for_items_batch ) {
387
- $product_data['sale_price_effective_date'] = $sale_price_effective_date;
388
- $product_data['sale_price'] = is_numeric( $sale_price ) ? self::format_price_for_fb_items_batch( $sale_price ) : "";
389
  } else {
390
  $product_data['sale_price_start_date'] = $sale_start;
391
  $product_data['sale_price_end_date'] = $sale_end;
392
- $product_data['sale_price'] = is_numeric( $sale_price ) ? $sale_price : 0;
393
  }
394
 
395
  return $product_data;
@@ -561,17 +558,8 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
561
  $categories =
562
  WC_Facebookcommerce_Utils::get_product_categories( $id );
563
 
564
- // Get brand attribute.
565
- $brand = get_post_meta( $id, Products::ENHANCED_CATALOG_ATTRIBUTES_META_KEY_PREFIX . 'brand', true );
566
- $brand_taxonomy = get_the_term_list( $id, 'product_brand', '', ', ' );
567
-
568
- if ( $brand ) {
569
- $brand = WC_Facebookcommerce_Utils::clean_string( $brand );
570
- } elseif ( !is_wp_error( $brand_taxonomy ) && $brand_taxonomy ) {
571
- $brand = WC_Facebookcommerce_Utils::clean_string( $brand_taxonomy );
572
- } else {
573
- $brand = wp_strip_all_tags( WC_Facebookcommerce_Utils::get_store_name() );
574
- }
575
 
576
  if ( self::PRODUCT_PREP_TYPE_ITEMS_BATCH === $type_to_prepare_for ) {
577
  $product_data = array(
@@ -627,7 +615,7 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
627
  $product_data['checkout_url'] = $checkout_url;
628
  }
629
 
630
- // IF using WPML, set the product to hidden unless it is in the
631
  // default language. WPML >= 3.2 Supported.
632
  if ( defined( 'ICL_LANGUAGE_CODE' ) ) {
633
  if ( class_exists( 'WC_Facebook_WPML_Injector' ) && WC_Facebook_WPML_Injector::should_hide( $id ) ) {
@@ -637,9 +625,7 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
637
 
638
  // Exclude variations that are "virtual" products from export to Facebook &&
639
  // No Visibility Option for Variations
640
- // get_virtual() returns true for "unassembled bundles", so we exclude
641
- // bundles from this check.
642
- if ( true === $this->get_virtual() && 'bundle' !== $this->get_type() ) {
643
  $product_data['visibility'] = \WC_Facebookcommerce_Integration::FB_SHOP_PRODUCT_HIDDEN;
644
  }
645
 
@@ -822,8 +808,9 @@ if ( ! class_exists( 'WC_Facebook_Product' ) ) :
822
  if ( ! isset( $product_data['custom_data'] ) ) {
823
  $product_data['custom_data'] = array();
824
  }
825
- $new_name = wc_attribute_label( $new_name, $product );
826
  $product_data['custom_data'][ $new_name ] = urldecode( $option_values[0] );
 
827
  break;
828
  }//end switch
829
  } else {
56
 
57
  public function __construct( $wpid, $parent_product = null ) {
58
 
59
+ $this->id = $wpid;
 
 
 
 
 
 
 
60
  $this->fb_description = '';
61
+ $this->woo_product = wc_get_product( $wpid );
62
  $this->gallery_urls = null;
63
  $this->fb_use_parent_image = null;
64
  $this->main_description = '';
65
  $this->sync_short_description = \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT === facebook_for_woocommerce()->get_integration()->get_product_description_mode();
66
 
67
+ if ( $meta = get_post_meta( $wpid, self::FB_VISIBILITY, true ) ) {
68
  $this->fb_visibility = wc_string_to_bool( $meta );
69
  } else {
70
  $this->fb_visibility = '';
205
  $image_urls = array_values( $image_urls );
206
 
207
  if ( empty( $image_urls ) ) {
208
+ $image_urls[] = facebook_for_woocommerce()->get_plugin_url() . '/assets/images/woocommerce-placeholder.png';
209
  }
210
 
211
  return $image_urls;
348
  return $description;
349
  }
350
 
 
 
 
 
 
 
351
  public function add_sale_price( $product_data, $for_items_batch = false ) {
352
 
353
+ // initialise sale price
354
+ if ( $for_items_batch ) {
355
+ $product_data['sale_price_effective_date'] = self::MIN_DATE_1 . self::MIN_TIME . '/' . self::MIN_DATE_2 . self::MAX_TIME;
356
+ } else {
357
+ $product_data['sale_price_start_date'] = self::MIN_DATE_1 . self::MIN_TIME;
358
+ $product_data['sale_price_end_date'] = self::MIN_DATE_2 . self::MAX_TIME;
359
+ }
360
+ $product_data['sale_price'] = $product_data['price'];
361
+
362
  $sale_price = $this->woo_product->get_sale_price();
363
+
364
+ // check if sale exist
365
+ if ( ! is_numeric( $sale_price ) ) {
366
+ return $product_data;
367
+ }
368
+
369
+ $sale_price =
370
+ intval( round( $this->get_price_plus_tax( $sale_price ) * 100 ) );
371
 
372
  $sale_start =
373
+ ( $date = get_post_meta( $this->id, '_sale_price_dates_from', true ) )
374
+ ? date_i18n( 'Y-m-d', $date ) . self::MIN_TIME
375
+ : self::MIN_DATE_1 . self::MIN_TIME;
376
 
377
  $sale_end =
378
+ ( $date = get_post_meta( $this->id, '_sale_price_dates_to', true ) )
379
+ ? date_i18n( 'Y-m-d', $date ) . self::MAX_TIME
380
+ : self::MAX_DATE . self::MAX_TIME;
 
 
 
 
 
 
 
381
 
382
  // check if sale is expired and sale time range is valid
383
  if ( $for_items_batch ) {
384
+ $product_data['sale_price_effective_date'] = $sale_start . '/' . $sale_end;
385
+ $product_data['sale_price'] = self::format_price_for_fb_items_batch( $sale_price );
386
  } else {
387
  $product_data['sale_price_start_date'] = $sale_start;
388
  $product_data['sale_price_end_date'] = $sale_end;
389
+ $product_data['sale_price'] = $sale_price;
390
  }
391
 
392
  return $product_data;
558
  $categories =
559
  WC_Facebookcommerce_Utils::get_product_categories( $id );
560
 
561
+ $brand = get_the_term_list( $id, 'product_brand', '', ', ' );
562
+ $brand = is_wp_error( $brand ) || ! $brand ? wp_strip_all_tags( WC_Facebookcommerce_Utils::get_store_name() ) : WC_Facebookcommerce_Utils::clean_string( $brand );
 
 
 
 
 
 
 
 
 
563
 
564
  if ( self::PRODUCT_PREP_TYPE_ITEMS_BATCH === $type_to_prepare_for ) {
565
  $product_data = array(
615
  $product_data['checkout_url'] = $checkout_url;
616
  }
617
 
618
+ // IF using WPML, set the product to staging unless it is in the
619
  // default language. WPML >= 3.2 Supported.
620
  if ( defined( 'ICL_LANGUAGE_CODE' ) ) {
621
  if ( class_exists( 'WC_Facebook_WPML_Injector' ) && WC_Facebook_WPML_Injector::should_hide( $id ) ) {
625
 
626
  // Exclude variations that are "virtual" products from export to Facebook &&
627
  // No Visibility Option for Variations
628
+ if ( true === $this->get_virtual() ) {
 
 
629
  $product_data['visibility'] = \WC_Facebookcommerce_Integration::FB_SHOP_PRODUCT_HIDDEN;
630
  }
631
 
808
  if ( ! isset( $product_data['custom_data'] ) ) {
809
  $product_data['custom_data'] = array();
810
  }
811
+
812
  $product_data['custom_data'][ $new_name ] = urldecode( $option_values[0] );
813
+
814
  break;
815
  }//end switch
816
  } else {
includes/fbproductfeed.php CHANGED
@@ -25,9 +25,16 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
25
  class WC_Facebook_Product_Feed {
26
 
27
 
 
 
 
28
  /** @var string product catalog feed file directory inside the uploads folder */
29
- const UPLOADS_DIRECTORY = 'facebook_for_woocommerce';
30
- const FILE_NAME = 'product_catalog_%s.csv';
 
 
 
 
31
  const FACEBOOK_CATALOG_FEED_FILENAME = 'fae_product_catalog.csv';
32
  const FB_ADDITIONAL_IMAGES_FOR_FEED = 5;
33
  const FEED_NAME = 'Initial product sync from WooCommerce. DO NOT DELETE.';
@@ -51,6 +58,30 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
51
  $this->feed_id = $feed_id;
52
  }
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  /**
55
  * Generates the product catalog feed.
56
  *
@@ -73,6 +104,8 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
73
  $generation_time = microtime( true ) - $start_time;
74
  facebook_for_woocommerce()->get_tracker()->track_feed_file_generation_time( $generation_time );
75
 
 
 
76
  \WC_Facebookcommerce_Utils::log( 'Product feed file generated' );
77
 
78
  } catch ( \Exception $exception ) {
@@ -86,6 +119,165 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
86
  $profiling_logger->stop( 'generate_feed' );
87
  }
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  * Gets the product catalog feed file path.
91
  *
@@ -289,7 +481,7 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
289
  *
290
  * @since 1.11.0
291
  */
292
- public function create_files_to_protect_product_feed_directory() {
293
 
294
  $catalog_feed_directory = trailingslashit( $this->get_file_directory() );
295
 
@@ -326,133 +518,96 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
326
  * @since 1.11.0
327
  *
328
  * @param int[] $wp_ids product IDs
 
329
  * @return bool
330
  */
331
- public function write_product_feed_file( $wp_ids ) {
332
 
333
  try {
334
 
335
- // Step 1: Prepare the temporary empty feed file with header row.
336
- $temp_feed_file = $this->prepare_temporary_feed_file();
337
-
338
- // Step 2: Write products feed into the temporary feed file.
339
- $this->write_products_feed_to_temp_file( $wp_ids, $temp_feed_file );
340
-
341
- // Step 3: Rename temporary feed file to final feed file.
342
- $this->rename_temporary_feed_file_to_final_feed_file();
343
-
344
- $written = true;
345
 
346
- } catch ( Exception $e ) {
 
347
 
348
- WC_Facebookcommerce_Utils::log( json_encode( $e->getMessage() ) );
 
 
 
349
 
350
- $written = false;
351
 
352
- // close the temporary file
353
- if ( ! empty( $temp_feed_file ) && is_resource( $temp_feed_file ) ) {
 
 
354
 
355
- fclose( $temp_feed_file );
356
  }
357
 
358
- // delete the temporary file
359
- if ( ! empty( $temp_file_path ) && file_exists( $temp_file_path ) ) {
360
 
361
- unlink( $temp_file_path );
362
- }
363
- }
364
 
365
- return $written;
366
- }
367
 
368
- /**
369
- * Prepare a fresh empty temporary feed file with the header row.
370
- *
371
- * @since 2.6.6
372
- *
373
- * @throws Framework\SV_WC_Plugin_Exception We can't open the file or the file is not writable.
374
- * @return resource A file pointer resource.
375
- */
376
- public function prepare_temporary_feed_file() {
377
- $temp_file_path = $this->get_temp_file_path();
378
- $temp_feed_file = @fopen( $temp_file_path, 'w' );
379
 
380
- // check if we can open the temporary feed file
381
- if ( false === $temp_feed_file || ! is_writable( $temp_file_path ) ) {
382
- throw new Framework\SV_WC_Plugin_Exception( __( 'Could not open the product catalog temporary feed file for writing', 'facebook-for-woocommerce' ), 500 );
383
- }
384
 
385
- $file_path = $this->get_file_path();
 
 
 
386
 
387
- // check if we will be able to write to the final feed file
388
- if ( file_exists( $file_path ) && ! is_writable( $file_path ) ) {
389
- throw new Framework\SV_WC_Plugin_Exception( __( 'Could not open the product catalog feed file for writing', 'facebook-for-woocommerce' ), 500 );
390
- }
391
 
392
- fwrite( $temp_feed_file, $this->get_product_feed_header_row() );
393
- return $temp_feed_file;
394
- }
395
 
396
- /**
397
- * Write products feed into a file.
398
- *
399
- * @since 2.6.6
400
- *
401
- * @return void
402
- */
403
- public function write_products_feed_to_temp_file( $wp_ids, $temp_feed_file ) {
404
- $product_group_attribute_variants = array();
405
 
406
- foreach ( $wp_ids as $wp_id ) {
407
 
408
- $woo_product = new WC_Facebook_Product( $wp_id );
409
 
410
- // Skip if we don't have a valid product object.
411
- if ( ! $woo_product->woo_product instanceof \WC_Product ) {
412
- continue;
413
  }
414
 
415
- // Skip if not enabled for sync.
416
- if ( ! facebook_for_woocommerce()->get_product_sync_validator( $woo_product->woo_product )->passes_all_checks() ) {
417
- continue;
418
- }
419
 
420
- $product_data_as_feed_row = $this->prepare_product_for_feed(
421
- $woo_product,
422
- $product_group_attribute_variants
423
- );
424
 
425
- if ( ! empty( $temp_feed_file ) ) {
426
- fwrite( $temp_feed_file, $product_data_as_feed_row );
427
- }
428
- }
429
 
430
- wp_reset_postdata();
431
 
432
- if ( ! empty( $temp_feed_file ) ) {
433
- fclose( $temp_feed_file );
434
- }
435
- }
436
 
437
- /**
438
- * Rename temporary feed file into the final feed file.
439
- * This is the last step fo the feed generation procedure.
440
- *
441
- * @since 2.6.6
442
- *
443
- * @return void
444
- */
445
- public function rename_temporary_feed_file_to_final_feed_file() {
446
- $file_path = $this->get_file_path();
447
- $temp_file_path = $this->get_temp_file_path();
448
- if ( ! empty( $temp_file_path ) && ! empty( $file_path ) ) {
449
 
450
- $renamed = rename( $temp_file_path, $file_path );
 
451
 
452
- if ( empty( $renamed ) ) {
453
- throw new Framework\SV_WC_Plugin_Exception( __( 'Could not rename the product catalog feed file', 'facebook-for-woocommerce' ), 500 );
454
  }
455
  }
 
 
456
  }
457
 
458
  public function get_product_feed_header_row() {
@@ -569,17 +724,6 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
569
  $product_data['visibility'] = \WC_Facebookcommerce_Integration::FB_SHOP_PRODUCT_HIDDEN;
570
  }
571
 
572
- // Sale price, only format if we have a sale price set for the product, else leave as empty ('').
573
- $sale_price = static::get_value_from_product_data( $product_data, 'sale_price', '' );
574
- $sale_price_effective_date = '';
575
- if ( is_numeric( $sale_price ) && $sale_price > 0 ) {
576
- $sale_price_effective_date = static::get_value_from_product_data( $product_data, 'sale_price_start_date' ) . '/' . $this->get_value_from_product_data( $product_data, 'sale_price_end_date' );
577
- $sale_price = static::format_price_for_feed(
578
- $sale_price,
579
- static::get_value_from_product_data( $product_data, 'currency' )
580
- );
581
- }
582
-
583
  return $product_data['retailer_id'] . ',' .
584
  static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'name' ) ) . ',' .
585
  static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'description' ) ) . ',' .
@@ -595,8 +739,12 @@ if ( ! class_exists( 'WC_Facebook_Product_Feed' ) ) :
595
  $item_group_id . ',' .
596
  static::get_value_from_product_data( $product_data, 'checkout_url' ) . ',' .
597
  static::format_additional_image_url( static::get_value_from_product_data( $product_data, 'additional_image_urls' ) ) . ',' .
598
- $sale_price_effective_date . ',' .
599
- $sale_price . ',' .
 
 
 
 
600
  'new' . ',' .
601
  static::get_value_from_product_data( $product_data, 'visibility' ) . ',' .
602
  static::get_value_from_product_data( $product_data, 'gender' ) . ',' .
25
  class WC_Facebook_Product_Feed {
26
 
27
 
28
+ /** @var string transient name for storing the average feed generation time */
29
+ const TRANSIENT_AVERAGE_FEED_GENERATION_TIME = 'wc_facebook_average_feed_generation_time';
30
+
31
  /** @var string product catalog feed file directory inside the uploads folder */
32
+ const UPLOADS_DIRECTORY = 'facebook_for_woocommerce';
33
+
34
+ /** @var string product catalog feed file name - %s will be replaced with a hash */
35
+ const FILE_NAME = 'product_catalog_%s.csv';
36
+
37
+
38
  const FACEBOOK_CATALOG_FEED_FILENAME = 'fae_product_catalog.csv';
39
  const FB_ADDITIONAL_IMAGES_FOR_FEED = 5;
40
  const FEED_NAME = 'Initial product sync from WooCommerce. DO NOT DELETE.';
58
  $this->feed_id = $feed_id;
59
  }
60
 
61
+
62
+ /**
63
+ * Schedules a new feed generation.
64
+ *
65
+ * @since 1.11.0
66
+ */
67
+ public function schedule_feed_generation() {
68
+
69
+ // don't schedule another if one's already scheduled or in progress
70
+ if ( false !== as_next_scheduled_action( 'wc_facebook_generate_product_catalog_feed', array(), 'facebook-for-woocommerce' ) ) {
71
+ return;
72
+ }
73
+
74
+ \WC_Facebookcommerce_Utils::log( 'Scheduling product catalog feed file generation' );
75
+
76
+ // if async priority actions are supported (AS 3.0+)
77
+ if ( function_exists( 'as_enqueue_async_action' ) ) {
78
+ as_enqueue_async_action( 'wc_facebook_generate_product_catalog_feed', array(), 'facebook-for-woocommerce' );
79
+ } else {
80
+ as_schedule_single_action( time(), 'wc_facebook_generate_product_catalog_feed', array(), 'facebook-for-woocommerce' );
81
+ }
82
+ }
83
+
84
+
85
  /**
86
  * Generates the product catalog feed.
87
  *
104
  $generation_time = microtime( true ) - $start_time;
105
  facebook_for_woocommerce()->get_tracker()->track_feed_file_generation_time( $generation_time );
106
 
107
+ $this->set_feed_generation_time_with_decay( $generation_time );
108
+
109
  \WC_Facebookcommerce_Utils::log( 'Product feed file generated' );
110
 
111
  } catch ( \Exception $exception ) {
119
  $profiling_logger->stop( 'generate_feed' );
120
  }
121
 
122
+
123
+ /**
124
+ * Sets the average feed generation time with a 25% decay.
125
+ *
126
+ * @since 1.11.0
127
+ *
128
+ * @param float $generation_time last generation time
129
+ */
130
+ private function set_feed_generation_time_with_decay( $generation_time ) {
131
+
132
+ // update feed generation time estimate w/ 25% decay.
133
+ $existing_generation_time = $this->get_average_feed_generation_time();
134
+
135
+ if ( $generation_time < $existing_generation_time ) {
136
+ $generation_time = $generation_time * 0.25 + $existing_generation_time * 0.75;
137
+ }
138
+
139
+ $this->set_average_feed_generation_time( $generation_time );
140
+ }
141
+
142
+
143
+ /**
144
+ * Sets the average feed generation time.
145
+ *
146
+ * @since 1.11.0
147
+ *
148
+ * @param float $time generation time
149
+ */
150
+ private function set_average_feed_generation_time( $time ) {
151
+
152
+ set_transient( self::TRANSIENT_AVERAGE_FEED_GENERATION_TIME, $time );
153
+ }
154
+
155
+
156
+ /**
157
+ * Gets the estimated feed generation time.
158
+ *
159
+ * Performs a dry run and returns either the dry run time or last average estimated time, whichever is higher.
160
+ *
161
+ * @since 1.11.0
162
+ *
163
+ * @return int
164
+ */
165
+ public function get_estimated_feed_generation_time() {
166
+
167
+ $estimate = $this->estimate_generation_time();
168
+ $average = $this->get_average_feed_generation_time();
169
+
170
+ return (int) max( $estimate, $average );
171
+ }
172
+
173
+
174
+ /**
175
+ * Estimates the feed generation time.
176
+ *
177
+ * Runs a dry-run generation of a subset of products, then extrapolates that out to the full catalog size. Also
178
+ * adds a bit of buffer time.
179
+ *
180
+ * @since 1.11.0
181
+ *
182
+ * @return float
183
+ */
184
+ private function estimate_generation_time() {
185
+
186
+ $product_ids = $this->get_product_ids();
187
+ $total_products = count( $product_ids );
188
+ $sample_size = $this->get_feed_generation_estimate_sample_size();
189
+ $buffer_time = $this->get_feed_generation_buffer_time();
190
+
191
+ if ( $total_products > 0 ) {
192
+
193
+ if ( $total_products < $sample_size ) {
194
+
195
+ $sample_size = $total_products;
196
+
197
+ } else {
198
+
199
+ $product_ids = array_slice( $product_ids, 0, $sample_size );
200
+ }
201
+
202
+ $start_time = microtime( true );
203
+
204
+ $this->write_product_feed_file( $product_ids, true );
205
+
206
+ $end_time = microtime( true );
207
+
208
+ $time_spent = $end_time - $start_time;
209
+
210
+ // estimated Time = 150% of Linear extrapolation of the time to generate n products + buffer time.
211
+ $time_estimate = $time_spent * $total_products / $sample_size * 1.5 + $buffer_time;
212
+
213
+ } else {
214
+
215
+ $time_estimate = $buffer_time;
216
+ }
217
+
218
+ WC_Facebookcommerce_Utils::log( 'Feed Generation Time Estimate: ' . $time_estimate );
219
+
220
+ return $time_estimate;
221
+ }
222
+
223
+
224
+ /**
225
+ * Gets the average feed generation time.
226
+ *
227
+ * @since 1.11.0
228
+ *
229
+ * @return float
230
+ */
231
+ private function get_average_feed_generation_time() {
232
+
233
+ return get_transient( self::TRANSIENT_AVERAGE_FEED_GENERATION_TIME );
234
+ }
235
+
236
+
237
+ /**
238
+ * Gets the number of products to use when estimating the feed file generation time.
239
+ *
240
+ * @since 1.11.0
241
+ *
242
+ * @return int
243
+ */
244
+ private function get_feed_generation_estimate_sample_size() {
245
+
246
+ /**
247
+ * Filters the number of products to use when estimating the feed file generation time.
248
+ *
249
+ * @since 1.11.0
250
+ *
251
+ * @param int $sample_size number of products to use when estimating the feed file generation time
252
+ */
253
+ $sample_size = (int) apply_filters( 'wc_facebook_product_catalog_feed_generation_estimate_sample_size', 200 );
254
+
255
+ return max( $sample_size, 100 );
256
+ }
257
+
258
+
259
+ /**
260
+ * Gets the number of seconds to add as a buffer when estimating the feed file generation time.
261
+ *
262
+ * @since 1.11.0
263
+ *
264
+ * @return int
265
+ */
266
+ private function get_feed_generation_buffer_time() {
267
+
268
+ /**
269
+ * Filters the number of seconds to add as a buffer when estimating the feed file generation time.
270
+ *
271
+ * @since 1.11.0
272
+ *
273
+ * @param int $time number of seconds to add as a buffer when estimating the feed file generation time
274
+ */
275
+ $buffer_time = (int) apply_filters( 'wc_facebook_product_catalog_feed_generation_buffer_time', 30 );
276
+
277
+ return max( $buffer_time, 5 );
278
+ }
279
+
280
+
281
  /**
282
  * Gets the product catalog feed file path.
283
  *
481
  *
482
  * @since 1.11.0
483
  */
484
+ private function create_files_to_protect_product_feed_directory() {
485
 
486
  $catalog_feed_directory = trailingslashit( $this->get_file_directory() );
487
 
518
  * @since 1.11.0
519
  *
520
  * @param int[] $wp_ids product IDs
521
+ * @param bool $is_dry_run whether this is a dry run or the file should be written
522
  * @return bool
523
  */
524
+ public function write_product_feed_file( $wp_ids, $is_dry_run = false ) {
525
 
526
  try {
527
 
528
+ if ( ! $is_dry_run ) {
 
 
 
 
 
 
 
 
 
529
 
530
+ $temp_file_path = $this->get_temp_file_path();
531
+ $temp_feed_file = @fopen( $temp_file_path, 'w' );
532
 
533
+ // check if we can open the temporary feed file
534
+ if ( false === $temp_feed_file || ! is_writable( $temp_file_path ) ) {
535
+ throw new Framework\SV_WC_Plugin_Exception( __( 'Could not open the product catalog temporary feed file for writing', 'facebook-for-woocommerce' ), 500 );
536
+ }
537
 
538
+ $file_path = $this->get_file_path();
539
 
540
+ // check if we will be able to write to the final feed file
541
+ if ( file_exists( $file_path ) && ! is_writable( $file_path ) ) {
542
+ throw new Framework\SV_WC_Plugin_Exception( __( 'Could not open the product catalog feed file for writing', 'facebook-for-woocommerce' ), 500 );
543
+ }
544
 
545
+ fwrite( $temp_feed_file, $this->get_product_feed_header_row() );
546
  }
547
 
548
+ $product_group_attribute_variants = array();
 
549
 
550
+ foreach ( $wp_ids as $wp_id ) {
 
 
551
 
552
+ $woo_product = new WC_Facebook_Product( $wp_id );
 
553
 
554
+ // skip if we don't have a valid product object
555
+ if ( ! $woo_product->woo_product instanceof \WC_Product ) {
556
+ continue;
557
+ }
 
 
 
 
 
 
 
558
 
559
+ // skip if not enabled for sync
560
+ if ( ! Products::product_should_be_synced( $woo_product->woo_product ) ) {
561
+ continue;
562
+ }
563
 
564
+ $product_data_as_feed_row = $this->prepare_product_for_feed(
565
+ $woo_product,
566
+ $product_group_attribute_variants
567
+ );
568
 
569
+ if ( ! empty( $temp_feed_file ) ) {
570
+ fwrite( $temp_feed_file, $product_data_as_feed_row );
571
+ }
572
+ }
573
 
574
+ wp_reset_postdata();
 
 
575
 
576
+ if ( ! empty( $temp_feed_file ) ) {
577
+ fclose( $temp_feed_file );
578
+ }
 
 
 
 
 
 
579
 
580
+ if ( ! empty( $temp_file_path ) && ! empty( $file_path ) && ! empty( $temp_feed_file ) ) {
581
 
582
+ $renamed = rename( $temp_file_path, $file_path );
583
 
584
+ if ( empty( $renamed ) ) {
585
+ throw new Framework\SV_WC_Plugin_Exception( __( 'Could not rename the product catalog feed file', 'facebook-for-woocommerce' ), 500 );
586
+ }
587
  }
588
 
589
+ $written = true;
 
 
 
590
 
591
+ } catch ( Exception $e ) {
 
 
 
592
 
593
+ WC_Facebookcommerce_Utils::log( json_encode( $e->getMessage() ) );
 
 
 
594
 
595
+ $written = false;
596
 
597
+ // close the temporary file
598
+ if ( ! empty( $temp_feed_file ) && is_resource( $temp_feed_file ) ) {
 
 
599
 
600
+ fclose( $temp_feed_file );
601
+ }
 
 
 
 
 
 
 
 
 
 
602
 
603
+ // delete the temporary file
604
+ if ( ! empty( $temp_file_path ) && file_exists( $temp_file_path ) ) {
605
 
606
+ unlink( $temp_file_path );
 
607
  }
608
  }
609
+
610
+ return $written;
611
  }
612
 
613
  public function get_product_feed_header_row() {
724
  $product_data['visibility'] = \WC_Facebookcommerce_Integration::FB_SHOP_PRODUCT_HIDDEN;
725
  }
726
 
 
 
 
 
 
 
 
 
 
 
 
727
  return $product_data['retailer_id'] . ',' .
728
  static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'name' ) ) . ',' .
729
  static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'description' ) ) . ',' .
739
  $item_group_id . ',' .
740
  static::get_value_from_product_data( $product_data, 'checkout_url' ) . ',' .
741
  static::format_additional_image_url( static::get_value_from_product_data( $product_data, 'additional_image_urls' ) ) . ',' .
742
+ static::get_value_from_product_data( $product_data, 'sale_price_start_date' ) . '/' .
743
+ static::get_value_from_product_data( $product_data, 'sale_price_end_date' ) . ',' .
744
+ static::format_price_for_feed(
745
+ static::get_value_from_product_data( $product_data, 'sale_price', 0 ),
746
+ static::get_value_from_product_data( $product_data, 'currency' )
747
+ ) . ',' .
748
  'new' . ',' .
749
  static::get_value_from_product_data( $product_data, 'visibility' ) . ',' .
750
  static::get_value_from_product_data( $product_data, 'gender' ) . ',' .
includes/fbutils.php CHANGED
@@ -93,23 +93,10 @@ if ( ! class_exists( 'WC_Facebookcommerce_Utils' ) ) :
93
  public static function get_fb_retailer_id( $woo_product ) {
94
  $woo_id = $woo_product->get_id();
95
 
96
- /*
97
- * Call $woo_product->get_id() instead of ->id to account for Variable
98
- * products, which have their own variant_ids.
99
- */
100
- $fb_retailer_id = $woo_product->get_sku() ?
101
- $woo_product->get_sku() . '_' . $woo_id :
102
- self::FB_RETAILER_ID_PREFIX . $woo_id;
103
-
104
- /**
105
- * Filter facebook retailer id value.
106
- * This can be used to match retailer id generated by other Facebook plugins.
107
- *
108
- * @since 2.6.12
109
- * @param string Facebook Retailer ID.
110
- * @param WC_Product WooCommerce product.
111
- */
112
- return apply_filters( 'wc_facebook_fb_retailer_id', $fb_retailer_id, $woo_product );
113
  }
114
 
115
  /**
@@ -165,24 +152,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_Utils' ) ) :
165
  * @return string
166
  */
167
  public static function clean_string( $string ) {
168
-
169
- /**
170
- * Filters whether the shortcodes should be applied for a string when syncing a product or be stripped out.
171
- *
172
- * @since 2.6.19
173
- *
174
- * @param bool $apply_shortcodes Shortcodes are applied if set to `true` and stripped out if set to `false`.
175
- * @param string $string String to clean up.
176
- */
177
- $apply_shortcodes = apply_filters( 'wc_facebook_string_apply_shortcodes', false, $string );
178
- if ( $apply_shortcodes ) {
179
- // Apply active shortcodes
180
- $string = do_shortcode( $string );
181
- } else {
182
- // Strip out active shortcodes
183
- $string = strip_shortcodes( $string );
184
- }
185
-
186
  $string = str_replace( array( '&amp%3B', '&amp;' ), '&', $string );
187
  $string = str_replace( array( "\r", '&nbsp;', "\t" ), ' ', $string );
188
  $string = wp_strip_all_tags( $string, false ); // true == remove line breaks
93
  public static function get_fb_retailer_id( $woo_product ) {
94
  $woo_id = $woo_product->get_id();
95
 
96
+ // Call $woo_product->get_id() instead of ->id to account for Variable
97
+ // products, which have their own variant_ids.
98
+ return $woo_product->get_sku() ? $woo_product->get_sku() . '_' .
99
+ $woo_id : self::FB_RETAILER_ID_PREFIX . $woo_id;
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
101
 
102
  /**
152
  * @return string
153
  */
154
  public static function clean_string( $string ) {
155
+ $string = do_shortcode( $string );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  $string = str_replace( array( '&amp%3B', '&amp;' ), '&', $string );
157
  $string = str_replace( array( "\r", '&nbsp;', "\t" ), ' ', $string );
158
  $string = wp_strip_all_tags( $string, false ); // true == remove line breaks
includes/test/facebook-integration-test.php CHANGED
@@ -69,6 +69,101 @@ if ( ! class_exists( 'WC_Facebook_Integration_Test' ) ) :
69
 
70
  self::$commerce = $commerce;
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  }
73
 
74
  function check_product_create() {
69
 
70
  self::$commerce = $commerce;
71
 
72
+ add_action(
73
+ 'wp_ajax_ajax_test_sync_products_using_feed',
74
+ array( $this, 'ajax_test_sync_products_using_feed' )
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Test visible products by uploading feed.
80
+ **/
81
+ function ajax_test_sync_products_using_feed() {
82
+ self::$test_mode = true;
83
+ // test ajax reset all products in db
84
+ $reset = self::$commerce->reset_all_products();
85
+ if ( $reset ) {
86
+ WC_Facebookcommerce_Utils::log( 'Test - Removing FBIDs from all products' );
87
+ $this->product_post_wpid = $this->create_data();
88
+ if ( empty( $this->product_post_wpid ) ) {
89
+ self::$test_pass = 0;
90
+ WC_Facebookcommerce_Utils::log(
91
+ 'Test - Fail to create test product by inserting posts.'
92
+ );
93
+ WC_Facebookcommerce_Utils::set_test_fail_reason(
94
+ 'Fail to create test products by inserting posts.',
95
+ ( new Exception() )->getTraceAsString()
96
+ );
97
+ update_option( 'fb_test_pass', false );
98
+ wp_die();
99
+ return;
100
+ }
101
+ $this->set_product_wpid( $this->product_post_wpid );
102
+ $upload_success =
103
+ self::$commerce->ajax_sync_all_fb_products_using_feed( true );
104
+ if ( $upload_success ) {
105
+ // verification Step.
106
+ // Wait till FB finish backend creation to prevent race condition.
107
+ $time_start = microtime( true );
108
+ while ( ( microtime( true ) - $time_start ) < self::MAX_SLEEP_IN_SEC ) {
109
+ $complete = self::$commerce->fbproductfeed->is_upload_complete(
110
+ self::$commerce->settings
111
+ );
112
+ if ( $complete ) {
113
+ break;
114
+ } else {
115
+ $this->sleep_til_upload_complete( 10 );
116
+ }
117
+ }
118
+ $this->sleep_til_upload_complete( 60 );
119
+ $check_product_create = $this->check_product_create();
120
+ if ( ! $check_product_create ) {
121
+ self::$test_pass = 0;
122
+ } else {
123
+ WC_Facebookcommerce_Utils::log(
124
+ 'Test - Products create successfully.'
125
+ );
126
+ }
127
+ // Clean up whatever has been created.
128
+ // Test on_product_delete API hook.
129
+ $clean_up = $this->clean_up();
130
+ if ( ! $clean_up ) {
131
+ self::$test_pass = 0;
132
+ WC_Facebookcommerce_Utils::log(
133
+ 'Test - Fail to delete product from FB'
134
+ );
135
+ WC_Facebookcommerce_Utils::set_test_fail_reason(
136
+ 'Fail to delete product from FB',
137
+ ( new Exception() )->getTraceAsString()
138
+ );
139
+ } else {
140
+ WC_Facebookcommerce_Utils::log(
141
+ 'Test - Delete product from FB successfully'
142
+ );
143
+ }
144
+ } else {
145
+ self::$test_pass = 0;
146
+ WC_Facebookcommerce_Utils::log(
147
+ 'Test - Sync all products using feed, curl failed.'
148
+ );
149
+ WC_Facebookcommerce_Utils::set_test_fail_reason(
150
+ 'Sync all products using feed, curl failed',
151
+ ( new Exception() )->getTraceAsString()
152
+ );
153
+ }
154
+ } else {
155
+ self::$test_pass = 0;
156
+ WC_Facebookcommerce_Utils::log(
157
+ 'Test - Fail to remove FBIDs from local DB'
158
+ );
159
+ WC_Facebookcommerce_Utils::set_test_fail_reason(
160
+ 'Fail to remove FBIDs from local DB',
161
+ ( new Exception() )->getTraceAsString()
162
+ );
163
+ }
164
+ update_option( 'fb_test_pass', self::$test_pass );
165
+ wp_die();
166
+ return;
167
  }
168
 
169
  function check_product_create() {
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: facebook, automattic, woothemes
3
  Tags: facebook, shop, catalog, advertise, pixel, product
4
  Requires at least: 4.4
5
- Tested up to: 6.1
6
- Stable tag: 2.6.30
7
  Requires PHP: 5.6 or greater
8
  MySQL: 5.6 or greater
9
  License: GPLv2 or later
@@ -39,154 +39,7 @@ When opening a bug on GitHub, please give us as many details as possible.
39
 
40
  == Changelog ==
41
 
42
- = 2.6.30 - 2022-11-09 =
43
- * Fix - Add backward compatibility for WC 6.1, 6.2, and 6.3 versions.
44
- * Fix - Sync product set when the term name changes.
45
-
46
- = 2.6.29 - 2022-11-08 =
47
- * Add - Facebook Product Set under the Marketing menu.
48
- * Add - HPOS Compatibility.
49
- * Add - Inbox note about Facebook menu moved under the Marketing menu.
50
- * Add - Set up Facebook task to the WooCommerce admin tasks.
51
- * Dev - Replaced methods from classes in the `Internal` namespace.
52
- * Fix - Ensure the enhanced product enhance catalog attributes value is unslashed before saving in the post_meta table.
53
- * Fix - Hosted Woo Updates.
54
- * Fix - Release/2.6.28.
55
- * Fix - duplicate InitiateCheckout when using checkout block.
56
- * Tweak - WC 7.1 compatibility.
57
- * Tweak - WP 6.1 compatibility.
58
- * Update - FB Product Set name changed to Facebook Product Set.
59
- * Update - On successful FBE install users will be redirected to Advertise tab of the plugin.
60
-
61
- = 2.6.28 - 2022-10-25 =
62
- * Fix - Ensure bundles are not treated as virtual products on product_sync.
63
- * Fix - Ensure google-product-category-fields-loads.js loads only on the product category screens.
64
- * Fix - Server side sending of pixel events blocks generating pages .
65
-
66
- = 2.6.27 - 2022-10-14 =
67
- * Fix - Revert "Switch to Jetpack autoloader. (#1996 PR refresh)".
68
-
69
- = 2.6.26 - 2022-10-13 =
70
- * Add - wc_facebook_should_sync_product filter.
71
- * Dev - Rename JobRegistry to JobManager.
72
- * Dev - Replace composer autoloader with Jetpack autoloader.
73
- * Fix - Fix content_name and content_category attributes set on ViewCategory pixel events.
74
- * Tweak - WC 7.0 compatibility.
75
-
76
- = 2.6.25 - 2022-10-04 =
77
- * Add - New filter (wc_facebook_product_group_default_variation) to allow customizing a product group's default variation.
78
- * Update - Remove Skyverge's sake as a dependency from the extension build process.
79
-
80
- = 2.6.24 - 2022-09-27 =
81
- * Fix - Adds helpful admin notices for correct user roles.
82
- * Fix - Track purchase event flag in session variable instead post meta table.
83
-
84
- = 2.6.23 - 2022-09-13 =
85
- * Add - Show warning when creating product set with excluded categories.
86
- * Fix - Messenger settings are no longer overridden after business config refresh.
87
- * Fix - PHP notice thrown by get_page_id() in facebook-for-woocommerce/includes/API/FBE/Installation/Read/Response.php.
88
- * Fix - When disabling Enable Messenger on the Messenger setting page, the setting does not persist after selecting Save Changes.
89
-
90
- = 2.6.22 - 2022-09-06 =
91
- * Fix - Adding an excluded category doesn't remove that category synced products.
92
- * Fix - Ensure content_name and content_ids addToCart pixel event properties are correct for variable products when redirect to cart is enabled in WooCommerce.
93
- * Fix - Remove out-of-stock products on Facebook when the "Hide out of stock items from the catalog" option in WooCommerce is checked.
94
- * Tweak - WC 6.9 compatibility.
95
- * Update - Facebook Business Extension flow from COMMERCE_OFFSITE to DEFAULT.
96
-
97
- = 2.6.21 - 2022-08-16 =
98
- * Dev - Add branch-labels GH workflow.
99
- * Fix - `Undefined array key "HTTP_REFERER"` not longer happens when `new Event` is triggered from an AJAX call that doesn't include a referrer (likely due to browser configuration).
100
- * Tweak - WC 6.8 compatibility.
101
- * Tweak - WP 6.0 compatibility.
102
-
103
- = 2.6.20 - 2022-08-09 =
104
- * Fix - Ensure product is deleted from FB when moved to trash.
105
- * Fix - Price not updating when the sale price is removed.
106
-
107
- = 2.6.19 - 2022-07-27 =
108
- * Add - `wc_facebook_string_apply_shortcodes` filter to check whether to apply shortcodes on a string before syncing.
109
- * Tweak - Use the Heartbeat system to refresh the local business configuration data with the latest from Facebook.
110
- * Tweak - WC 6.8 compatibility.
111
-
112
- = 2.6.18 - 2022-07-19 =
113
- * Fix - Misaligned help icons on Product Categories > Google Product Categories form.
114
- * Fix - Syncing WC custom placeholder to Facebook shop.
115
- * Fix - is_search() causing fatal error when custom queries are used.
116
-
117
- = 2.6.17 - 2022-07-06 =
118
- * Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
119
- * Fix - Scheduled product not synced when status becomes "publish".
120
- * Tweak - WooCommerce 6.7 compatibility.
121
- * Update - Facebook Marketing API from v12.0 to v13.0.
122
-
123
- = 2.6.16 - 2022-06-07 =
124
- * Fix - Updating reference from old master branch.
125
- * Tweak - WC 6.6 compatibility.
126
-
127
- = 2.6.15 - 2022-06-01 =
128
- * Fix - Do not set `sale_price` when the product is not on sale.
129
- * Fix - FB Pixel is missing some ajax Add to cart events.
130
- * Fix - Feed visibility field value for hidden items.
131
- * Fix - Wrong Value Field in AddToCart Events.
132
- * Tweak - Not show the removed from sync confirm modal for unpublished products.
133
-
134
- = 2.6.14 - 2022-05-18 =
135
- * Fix - Non-latin custom product attribute names sync.
136
- * Fix - Syncing brand FB attribute instead of the website name.
137
- * Fix - Trigger InitiateCheckout event when site uses checkout block.
138
- * Fix - Wrong sale price start date getting synced to FB Catalog.
139
- * Fix - Allow products with "shop only" WooCommerce catalog visibility to sync to FB.
140
- * Fix - Remove semicolon from custom attribute value.
141
- * Tweak - Update the __experimental_woocommerce_blocks_checkout_update_order_meta action.
142
- * Tweak - WooCommerce 6.5 compatibility.
143
- * Tweak - WordPress 6.0 compatibility.
144
-
145
- = 2.6.13 - 2022-04-26 =
146
- * Fix - Issue with Facebook not displayed in the new WC navigation.
147
- * Fix - Issue with variable products syncing to FB product sets.
148
- * Fix - Scheduled job logs written to options table are never removed if job does not complete.
149
- * Fix - User-Agent to contain English extension name.
150
- * Fix - clear out wc_facebook_external_business_id option on disconnect.
151
- * Fix - fix product title length check to account for encoding.
152
- * Tweak - Use `Automattic\WooCommerce\Admin\Features\Features::is_enabled` instead of the deprecated `WooCommerce\Admin\Loader::is_feature_enabled`.
153
-
154
- = 2.6.12 - 2022-03-08 =
155
- * Add - Filter to change Facebook Retailer ID, wc_facebook_fb_retailer_id.
156
-
157
- = 2.6.11 - 2022-02-28 =
158
- * Fix - The syntax parsing error "unexpected ')'" in facebook-for-woocommerce.php.
159
-
160
- = 2.6.10 - 2022-02-22 =
161
- * Add - Filter to block full catalog batch API sync 'facebook_for_woocommerce_block_full_batch_api_sync'.
162
- * Update - Deprecate 'facebook_for_woocommerce_allow_full_batch_api_sync' filter.
163
- * Update - Facebook Marketing API from v11.0 to v12.0.
164
-
165
- = 2.6.9 - 2022-01-14 =
166
- * Fix - Replace is_ajax with wp_doing_ajax
167
- * Tweak - Update contributor guidelines
168
- * Tweak - WC 6.1 compatibility
169
-
170
- = 2.6.8 - 2021-12-21 =
171
- * Fix - Bump template from 1.0.4 to 1.0.5. #2115
172
- * Fix - Fix empty "value" for variable products. #1784
173
- * Tweak - WC 6.0 compatibility.
174
- * Tweak - WP 5.9 compatibility.
175
-
176
- = 2.6.7 - 2021-11-04 =
177
- * Fix - Parameter overloading error for PHP70 #2112
178
-
179
- = 2.6.6 - 2021-11-03 =
180
- * New - Memory improved feed generation process. #2099
181
- * New - Add compatibility with the WooCommerce checkout block. #2095
182
- * New - Track batched feed generation time in the tracker snapshots. #2104
183
- * New - Track usage of the new style feed generator in the tracker snapshots. #2103
184
- * New - Hide headers in logs for better visibility. #2093
185
- * Dev - Update composer dependencies. #2090
186
- * New - Add no synchronization reason to the product edit screen in the Facebook meta box. #1937
187
- * Fix - Use published variations only for the default variation. #2091
188
-
189
- = 2.6.5 - 2021-09-16 =
190
  * Fix - Incorrect `is_readable()` usage when loading Integration classes.
191
  * Tweak - WC 5.7 compatibility.
192
  * Tweak - WP 5.8 compatibility.
2
  Contributors: facebook, automattic, woothemes
3
  Tags: facebook, shop, catalog, advertise, pixel, product
4
  Requires at least: 4.4
5
+ Tested up to: 5.8
6
+ Stable tag: 2.6.5
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.5 - 2021-09-16 =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  * Fix - Incorrect `is_readable()` usage when loading Integration classes.
44
  * Tweak - WC 5.7 compatibility.
45
  * Tweak - WP 5.8 compatibility.
vendor/autoload.php CHANGED
@@ -2,11 +2,6 @@
2
 
3
  // autoload.php @generated by Composer
4
 
5
- if (PHP_VERSION_ID < 50600) {
6
- echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
7
- exit(1);
8
- }
9
-
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
- return ComposerAutoloaderInitc7a38d3b9056d61c05392a953f2bba96::getLoader();
2
 
3
  // autoload.php @generated by Composer
4
 
 
 
 
 
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit0a5c9cf66a2c48e36a98d940342789aa::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -42,75 +42,21 @@ namespace Composer\Autoload;
42
  */
43
  class ClassLoader
44
  {
45
- /** @var ?string */
46
- private $vendorDir;
47
-
48
  // PSR-4
49
- /**
50
- * @var array[]
51
- * @psalm-var array<string, array<string, int>>
52
- */
53
  private $prefixLengthsPsr4 = array();
54
- /**
55
- * @var array[]
56
- * @psalm-var array<string, array<int, string>>
57
- */
58
  private $prefixDirsPsr4 = array();
59
- /**
60
- * @var array[]
61
- * @psalm-var array<string, string>
62
- */
63
  private $fallbackDirsPsr4 = array();
64
 
65
  // PSR-0
66
- /**
67
- * @var array[]
68
- * @psalm-var array<string, array<string, string[]>>
69
- */
70
  private $prefixesPsr0 = array();
71
- /**
72
- * @var array[]
73
- * @psalm-var array<string, string>
74
- */
75
  private $fallbackDirsPsr0 = array();
76
 
77
- /** @var bool */
78
  private $useIncludePath = false;
79
-
80
- /**
81
- * @var string[]
82
- * @psalm-var array<string, string>
83
- */
84
  private $classMap = array();
85
-
86
- /** @var bool */
87
  private $classMapAuthoritative = false;
88
-
89
- /**
90
- * @var bool[]
91
- * @psalm-var array<string, bool>
92
- */
93
  private $missingClasses = array();
94
-
95
- /** @var ?string */
96
  private $apcuPrefix;
97
 
98
- /**
99
- * @var self[]
100
- */
101
- private static $registeredLoaders = array();
102
-
103
- /**
104
- * @param ?string $vendorDir
105
- */
106
- public function __construct($vendorDir = null)
107
- {
108
- $this->vendorDir = $vendorDir;
109
- }
110
-
111
- /**
112
- * @return string[]
113
- */
114
  public function getPrefixes()
115
  {
116
  if (!empty($this->prefixesPsr0)) {
@@ -120,47 +66,28 @@ class ClassLoader
120
  return array();
121
  }
122
 
123
- /**
124
- * @return array[]
125
- * @psalm-return array<string, array<int, string>>
126
- */
127
  public function getPrefixesPsr4()
128
  {
129
  return $this->prefixDirsPsr4;
130
  }
131
 
132
- /**
133
- * @return array[]
134
- * @psalm-return array<string, string>
135
- */
136
  public function getFallbackDirs()
137
  {
138
  return $this->fallbackDirsPsr0;
139
  }
140
 
141
- /**
142
- * @return array[]
143
- * @psalm-return array<string, string>
144
- */
145
  public function getFallbackDirsPsr4()
146
  {
147
  return $this->fallbackDirsPsr4;
148
  }
149
 
150
- /**
151
- * @return string[] Array of classname => path
152
- * @psalm-return array<string, string>
153
- */
154
  public function getClassMap()
155
  {
156
  return $this->classMap;
157
  }
158
 
159
  /**
160
- * @param string[] $classMap Class to filename map
161
- * @psalm-param array<string, string> $classMap
162
- *
163
- * @return void
164
  */
165
  public function addClassMap(array $classMap)
166
  {
@@ -175,11 +102,9 @@ class ClassLoader
175
  * Registers a set of PSR-0 directories for a given prefix, either
176
  * appending or prepending to the ones previously set for this prefix.
177
  *
178
- * @param string $prefix The prefix
179
- * @param string[]|string $paths The PSR-0 root directories
180
- * @param bool $prepend Whether to prepend the directories
181
- *
182
- * @return void
183
  */
184
  public function add($prefix, $paths, $prepend = false)
185
  {
@@ -222,13 +147,11 @@ class ClassLoader
222
  * Registers a set of PSR-4 directories for a given namespace, either
223
  * appending or prepending to the ones previously set for this namespace.
224
  *
225
- * @param string $prefix The prefix/namespace, with trailing '\\'
226
- * @param string[]|string $paths The PSR-4 base directories
227
- * @param bool $prepend Whether to prepend the directories
228
  *
229
  * @throws \InvalidArgumentException
230
- *
231
- * @return void
232
  */
233
  public function addPsr4($prefix, $paths, $prepend = false)
234
  {
@@ -272,10 +195,8 @@ class ClassLoader
272
  * Registers a set of PSR-0 directories for a given prefix,
273
  * replacing any others previously set for this prefix.
274
  *
275
- * @param string $prefix The prefix
276
- * @param string[]|string $paths The PSR-0 base directories
277
- *
278
- * @return void
279
  */
280
  public function set($prefix, $paths)
281
  {
@@ -290,12 +211,10 @@ class ClassLoader
290
  * Registers a set of PSR-4 directories for a given namespace,
291
  * replacing any others previously set for this namespace.
292
  *
293
- * @param string $prefix The prefix/namespace, with trailing '\\'
294
- * @param string[]|string $paths The PSR-4 base directories
295
  *
296
  * @throws \InvalidArgumentException
297
- *
298
- * @return void
299
  */
300
  public function setPsr4($prefix, $paths)
301
  {
@@ -315,8 +234,6 @@ class ClassLoader
315
  * Turns on searching the include path for class files.
316
  *
317
  * @param bool $useIncludePath
318
- *
319
- * @return void
320
  */
321
  public function setUseIncludePath($useIncludePath)
322
  {
@@ -339,8 +256,6 @@ class ClassLoader
339
  * that have not been registered with the class map.
340
  *
341
  * @param bool $classMapAuthoritative
342
- *
343
- * @return void
344
  */
345
  public function setClassMapAuthoritative($classMapAuthoritative)
346
  {
@@ -361,8 +276,6 @@ class ClassLoader
361
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
362
  *
363
  * @param string|null $apcuPrefix
364
- *
365
- * @return void
366
  */
367
  public function setApcuPrefix($apcuPrefix)
368
  {
@@ -383,44 +296,25 @@ class ClassLoader
383
  * Registers this instance as an autoloader.
384
  *
385
  * @param bool $prepend Whether to prepend the autoloader or not
386
- *
387
- * @return void
388
  */
389
  public function register($prepend = false)
390
  {
391
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
392
-
393
- if (null === $this->vendorDir) {
394
- return;
395
- }
396
-
397
- if ($prepend) {
398
- self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
399
- } else {
400
- unset(self::$registeredLoaders[$this->vendorDir]);
401
- self::$registeredLoaders[$this->vendorDir] = $this;
402
- }
403
  }
404
 
405
  /**
406
  * Unregisters this instance as an autoloader.
407
- *
408
- * @return void
409
  */
410
  public function unregister()
411
  {
412
  spl_autoload_unregister(array($this, 'loadClass'));
413
-
414
- if (null !== $this->vendorDir) {
415
- unset(self::$registeredLoaders[$this->vendorDir]);
416
- }
417
  }
418
 
419
  /**
420
  * Loads the given class or interface.
421
  *
422
  * @param string $class The name of the class
423
- * @return true|null True if loaded, null otherwise
424
  */
425
  public function loadClass($class)
426
  {
@@ -429,8 +323,6 @@ class ClassLoader
429
 
430
  return true;
431
  }
432
-
433
- return null;
434
  }
435
 
436
  /**
@@ -475,21 +367,6 @@ class ClassLoader
475
  return $file;
476
  }
477
 
478
- /**
479
- * Returns the currently registered loaders indexed by their corresponding vendor directories.
480
- *
481
- * @return self[]
482
- */
483
- public static function getRegisteredLoaders()
484
- {
485
- return self::$registeredLoaders;
486
- }
487
-
488
- /**
489
- * @param string $class
490
- * @param string $ext
491
- * @return string|false
492
- */
493
  private function findFileWithExtension($class, $ext)
494
  {
495
  // PSR-4 lookup
@@ -561,10 +438,6 @@ class ClassLoader
561
  * Scope isolated include.
562
  *
563
  * Prevents access to $this/self from included files.
564
- *
565
- * @param string $file
566
- * @return void
567
- * @private
568
  */
569
  function includeFile($file)
570
  {
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
  private $apcuPrefix;
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
66
  return array();
67
  }
68
 
 
 
 
 
69
  public function getPrefixesPsr4()
70
  {
71
  return $this->prefixDirsPsr4;
72
  }
73
 
 
 
 
 
74
  public function getFallbackDirs()
75
  {
76
  return $this->fallbackDirsPsr0;
77
  }
78
 
 
 
 
 
79
  public function getFallbackDirsPsr4()
80
  {
81
  return $this->fallbackDirsPsr4;
82
  }
83
 
 
 
 
 
84
  public function getClassMap()
85
  {
86
  return $this->classMap;
87
  }
88
 
89
  /**
90
+ * @param array $classMap Class to filename map
 
 
 
91
  */
92
  public function addClassMap(array $classMap)
93
  {
102
  * Registers a set of PSR-0 directories for a given prefix, either
103
  * appending or prepending to the ones previously set for this prefix.
104
  *
105
+ * @param string $prefix The prefix
106
+ * @param array|string $paths The PSR-0 root directories
107
+ * @param bool $prepend Whether to prepend the directories
 
 
108
  */
109
  public function add($prefix, $paths, $prepend = false)
110
  {
147
  * Registers a set of PSR-4 directories for a given namespace, either
148
  * appending or prepending to the ones previously set for this namespace.
149
  *
150
+ * @param string $prefix The prefix/namespace, with trailing '\\'
151
+ * @param array|string $paths The PSR-4 base directories
152
+ * @param bool $prepend Whether to prepend the directories
153
  *
154
  * @throws \InvalidArgumentException
 
 
155
  */
156
  public function addPsr4($prefix, $paths, $prepend = false)
157
  {
195
  * Registers a set of PSR-0 directories for a given prefix,
196
  * replacing any others previously set for this prefix.
197
  *
198
+ * @param string $prefix The prefix
199
+ * @param array|string $paths The PSR-0 base directories
 
 
200
  */
201
  public function set($prefix, $paths)
202
  {
211
  * Registers a set of PSR-4 directories for a given namespace,
212
  * replacing any others previously set for this namespace.
213
  *
214
+ * @param string $prefix The prefix/namespace, with trailing '\\'
215
+ * @param array|string $paths The PSR-4 base directories
216
  *
217
  * @throws \InvalidArgumentException
 
 
218
  */
219
  public function setPsr4($prefix, $paths)
220
  {
234
  * Turns on searching the include path for class files.
235
  *
236
  * @param bool $useIncludePath
 
 
237
  */
238
  public function setUseIncludePath($useIncludePath)
239
  {
256
  * that have not been registered with the class map.
257
  *
258
  * @param bool $classMapAuthoritative
 
 
259
  */
260
  public function setClassMapAuthoritative($classMapAuthoritative)
261
  {
276
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
  *
278
  * @param string|null $apcuPrefix
 
 
279
  */
280
  public function setApcuPrefix($apcuPrefix)
281
  {
296
  * Registers this instance as an autoloader.
297
  *
298
  * @param bool $prepend Whether to prepend the autoloader or not
 
 
299
  */
300
  public function register($prepend = false)
301
  {
302
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
 
 
 
 
 
 
 
 
 
 
 
303
  }
304
 
305
  /**
306
  * Unregisters this instance as an autoloader.
 
 
307
  */
308
  public function unregister()
309
  {
310
  spl_autoload_unregister(array($this, 'loadClass'));
 
 
 
 
311
  }
312
 
313
  /**
314
  * Loads the given class or interface.
315
  *
316
  * @param string $class The name of the class
317
+ * @return bool|null True if loaded, null otherwise
318
  */
319
  public function loadClass($class)
320
  {
323
 
324
  return true;
325
  }
 
 
326
  }
327
 
328
  /**
367
  return $file;
368
  }
369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  private function findFileWithExtension($class, $ext)
371
  {
372
  // PSR-4 lookup
438
  * Scope isolated include.
439
  *
440
  * Prevents access to $this/self from included files.
 
 
 
 
441
  */
442
  function includeFile($file)
443
  {
vendor/composer/InstalledVersions.php CHANGED
@@ -1,352 +1,260 @@
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;
14
 
15
- use Composer\Autoload\ClassLoader;
16
  use Composer\Semver\VersionParser;
17
 
18
- /**
19
- * This class is copied in every Composer installed project and available to all
20
- *
21
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22
- *
23
- * To require its presence, you can require `composer-runtime-api ^2.0`
24
- *
25
- * @final
26
- */
27
  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
-
35
- /**
36
- * @var bool|null
37
- */
38
- private static $canGetVendors;
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
-
46
- /**
47
- * Returns a list of all package names which are present, either by being installed, replaced or provided
48
- *
49
- * @return string[]
50
- * @psalm-return list<string>
51
- */
52
- public static function getInstalledPackages()
53
- {
54
- $packages = array();
55
- foreach (self::getInstalled() as $installed) {
56
- $packages[] = array_keys($installed['versions']);
57
- }
58
-
59
- if (1 === \count($packages)) {
60
- return $packages[0];
61
- }
62
-
63
- return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
64
- }
65
-
66
- /**
67
- * Returns a list of all package names with a specific type e.g. 'library'
68
- *
69
- * @param string $type
70
- * @return string[]
71
- * @psalm-return list<string>
72
- */
73
- public static function getInstalledPackagesByType($type)
74
- {
75
- $packagesByType = array();
76
-
77
- foreach (self::getInstalled() as $installed) {
78
- foreach ($installed['versions'] as $name => $package) {
79
- if (isset($package['type']) && $package['type'] === $type) {
80
- $packagesByType[] = $name;
81
- }
82
- }
83
- }
84
-
85
- return $packagesByType;
86
- }
87
-
88
- /**
89
- * Checks whether the given package is installed
90
- *
91
- * This also returns true if the package name is provided or replaced by another package
92
- *
93
- * @param string $packageName
94
- * @param bool $includeDevRequirements
95
- * @return bool
96
- */
97
- public static function isInstalled($packageName, $includeDevRequirements = true)
98
- {
99
- foreach (self::getInstalled() as $installed) {
100
- if (isset($installed['versions'][$packageName])) {
101
- return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
102
- }
103
- }
104
-
105
- return false;
106
- }
107
-
108
- /**
109
- * Checks whether the given package satisfies a version constraint
110
- *
111
- * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
112
- *
113
- * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
114
- *
115
- * @param VersionParser $parser Install composer/semver to have access to this class and functionality
116
- * @param string $packageName
117
- * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
118
- * @return bool
119
- */
120
- public static function satisfies(VersionParser $parser, $packageName, $constraint)
121
- {
122
- $constraint = $parser->parseConstraints($constraint);
123
- $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
124
-
125
- return $provided->matches($constraint);
126
- }
127
-
128
- /**
129
- * Returns a version constraint representing all the range(s) which are installed for a given package
130
- *
131
- * It is easier to use this via isInstalled() with the $constraint argument if you need to check
132
- * whether a given version of a package is installed, and not just whether it exists
133
- *
134
- * @param string $packageName
135
- * @return string Version constraint usable with composer/semver
136
- */
137
- public static function getVersionRanges($packageName)
138
- {
139
- foreach (self::getInstalled() as $installed) {
140
- if (!isset($installed['versions'][$packageName])) {
141
- continue;
142
- }
143
-
144
- $ranges = array();
145
- if (isset($installed['versions'][$packageName]['pretty_version'])) {
146
- $ranges[] = $installed['versions'][$packageName]['pretty_version'];
147
- }
148
- if (array_key_exists('aliases', $installed['versions'][$packageName])) {
149
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
150
- }
151
- if (array_key_exists('replaced', $installed['versions'][$packageName])) {
152
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
153
- }
154
- if (array_key_exists('provided', $installed['versions'][$packageName])) {
155
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
156
- }
157
-
158
- return implode(' || ', $ranges);
159
- }
160
-
161
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
162
- }
163
-
164
- /**
165
- * @param string $packageName
166
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
167
- */
168
- public static function getVersion($packageName)
169
- {
170
- foreach (self::getInstalled() as $installed) {
171
- if (!isset($installed['versions'][$packageName])) {
172
- continue;
173
- }
174
-
175
- if (!isset($installed['versions'][$packageName]['version'])) {
176
- return null;
177
- }
178
-
179
- return $installed['versions'][$packageName]['version'];
180
- }
181
-
182
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
183
- }
184
-
185
- /**
186
- * @param string $packageName
187
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
188
- */
189
- public static function getPrettyVersion($packageName)
190
- {
191
- foreach (self::getInstalled() as $installed) {
192
- if (!isset($installed['versions'][$packageName])) {
193
- continue;
194
- }
195
-
196
- if (!isset($installed['versions'][$packageName]['pretty_version'])) {
197
- return null;
198
- }
199
-
200
- return $installed['versions'][$packageName]['pretty_version'];
201
- }
202
-
203
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
204
- }
205
-
206
- /**
207
- * @param string $packageName
208
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
209
- */
210
- public static function getReference($packageName)
211
- {
212
- foreach (self::getInstalled() as $installed) {
213
- if (!isset($installed['versions'][$packageName])) {
214
- continue;
215
- }
216
-
217
- if (!isset($installed['versions'][$packageName]['reference'])) {
218
- return null;
219
- }
220
-
221
- return $installed['versions'][$packageName]['reference'];
222
- }
223
-
224
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
225
- }
226
-
227
- /**
228
- * @param string $packageName
229
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
230
- */
231
- public static function getInstallPath($packageName)
232
- {
233
- foreach (self::getInstalled() as $installed) {
234
- if (!isset($installed['versions'][$packageName])) {
235
- continue;
236
- }
237
-
238
- return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
239
- }
240
-
241
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
242
- }
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
- {
250
- $installed = self::getInstalled();
251
-
252
- return $installed[0]['root'];
253
- }
254
-
255
- /**
256
- * Returns the raw installed.php data for custom implementations
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
- {
264
- @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
265
-
266
- if (null === self::$installed) {
267
- // only require the installed.php file if this file is loaded from its dumped location,
268
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
269
- if (substr(__DIR__, -8, 1) !== 'C') {
270
- self::$installed = include __DIR__ . '/installed.php';
271
- } else {
272
- self::$installed = array();
273
- }
274
- }
275
-
276
- return self::$installed;
277
- }
278
-
279
- /**
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
- {
287
- return self::getInstalled();
288
- }
289
-
290
- /**
291
- * Lets you reload the static array from another file
292
- *
293
- * This is only useful for complex integrations in which a project needs to use
294
- * this class but then also needs to execute another project's autoloader in process,
295
- * and wants to ensure both projects have access to their version of installed.php.
296
- *
297
- * A typical case would be PHPUnit, where it would need to make sure it reads all
298
- * the data it needs from this class, then call reload() with
299
- * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
300
- * the project in which it runs can then also use this class safely, without
301
- * interference between PHPUnit's dependencies and the project's dependencies.
302
- *
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
- {
310
- self::$installed = $data;
311
- self::$installedByVendor = array();
312
- }
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
- {
320
- if (null === self::$canGetVendors) {
321
- self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
322
- }
323
-
324
- $installed = array();
325
-
326
- if (self::$canGetVendors) {
327
- foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
328
- if (isset(self::$installedByVendor[$vendorDir])) {
329
- $installed[] = self::$installedByVendor[$vendorDir];
330
- } elseif (is_file($vendorDir.'/composer/installed.php')) {
331
- $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
332
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
333
- self::$installed = $installed[count($installed) - 1];
334
- }
335
- }
336
- }
337
- }
338
-
339
- if (null === self::$installed) {
340
- // only require the installed.php file if this file is loaded from its dumped location,
341
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
342
- if (substr(__DIR__, -8, 1) !== 'C') {
343
- self::$installed = require __DIR__ . '/installed.php';
344
- } else {
345
- self::$installed = array();
346
- }
347
- }
348
- $installed[] = self::$installed;
349
-
350
- return $installed;
351
- }
352
  }
1
  <?php
2
 
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
 
13
  namespace Composer;
14
 
 
15
  use Composer\Semver\VersionParser;
16
 
17
+
18
+
19
+
20
+
21
+
 
 
 
 
22
  class InstalledVersions
23
  {
24
+ private static $installed = array (
25
+ 'root' =>
26
+ array (
27
+ 'pretty_version' => 'dev-release/2.6.5',
28
+ 'version' => 'dev-release/2.6.5',
29
+ 'aliases' =>
30
+ array (
31
+ ),
32
+ 'reference' => 'f4e8c6097d6622059705df6d7cbab9179609c055',
33
+ 'name' => 'facebookincubator/facebook-for-woocommerce',
34
+ ),
35
+ 'versions' =>
36
+ array (
37
+ 'composer/installers' =>
38
+ array (
39
+ 'pretty_version' => 'v1.11.0',
40
+ 'version' => '1.11.0.0',
41
+ 'aliases' =>
42
+ array (
43
+ ),
44
+ 'reference' => 'ae03311f45dfe194412081526be2e003960df74b',
45
+ ),
46
+ 'facebookincubator/facebook-for-woocommerce' =>
47
+ array (
48
+ 'pretty_version' => 'dev-release/2.6.5',
49
+ 'version' => 'dev-release/2.6.5',
50
+ 'aliases' =>
51
+ array (
52
+ ),
53
+ 'reference' => 'f4e8c6097d6622059705df6d7cbab9179609c055',
54
+ ),
55
+ 'roundcube/plugin-installer' =>
56
+ array (
57
+ 'replaced' =>
58
+ array (
59
+ 0 => '*',
60
+ ),
61
+ ),
62
+ 'shama/baton' =>
63
+ array (
64
+ 'replaced' =>
65
+ array (
66
+ 0 => '*',
67
+ ),
68
+ ),
69
+ 'skyverge/wc-plugin-framework' =>
70
+ array (
71
+ 'pretty_version' => '5.10.0',
72
+ 'version' => '5.10.0.0',
73
+ 'aliases' =>
74
+ array (
75
+ ),
76
+ 'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
77
+ ),
78
+ 'woocommerce/action-scheduler-job-framework' =>
79
+ array (
80
+ 'pretty_version' => '1.0.0',
81
+ 'version' => '1.0.0.0',
82
+ 'aliases' =>
83
+ array (
84
+ ),
85
+ 'reference' => '718594e15d7ba2d56f8a37743bda6d7a8296e1c8',
86
+ ),
87
+ ),
88
+ );
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+ public static function getInstalledPackages()
97
+ {
98
+ return array_keys(self::$installed['versions']);
99
+ }
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ public static function isInstalled($packageName)
110
+ {
111
+ return isset(self::$installed['versions'][$packageName]);
112
+ }
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
128
+ {
129
+ $constraint = $parser->parseConstraints($constraint);
130
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
131
+
132
+ return $provided->matches($constraint);
133
+ }
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+ public static function getVersionRanges($packageName)
145
+ {
146
+ if (!isset(self::$installed['versions'][$packageName])) {
147
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
148
+ }
149
+
150
+ $ranges = array();
151
+ if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
152
+ $ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
153
+ }
154
+ if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
155
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
156
+ }
157
+ if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
158
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
159
+ }
160
+ if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
161
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
162
+ }
163
+
164
+ return implode(' || ', $ranges);
165
+ }
166
+
167
+
168
+
169
+
170
+
171
+ public static function getVersion($packageName)
172
+ {
173
+ if (!isset(self::$installed['versions'][$packageName])) {
174
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
175
+ }
176
+
177
+ if (!isset(self::$installed['versions'][$packageName]['version'])) {
178
+ return null;
179
+ }
180
+
181
+ return self::$installed['versions'][$packageName]['version'];
182
+ }
183
+
184
+
185
+
186
+
187
+
188
+ public static function getPrettyVersion($packageName)
189
+ {
190
+ if (!isset(self::$installed['versions'][$packageName])) {
191
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
192
+ }
193
+
194
+ if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
195
+ return null;
196
+ }
197
+
198
+ return self::$installed['versions'][$packageName]['pretty_version'];
199
+ }
200
+
201
+
202
+
203
+
204
+
205
+ public static function getReference($packageName)
206
+ {
207
+ if (!isset(self::$installed['versions'][$packageName])) {
208
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
209
+ }
210
+
211
+ if (!isset(self::$installed['versions'][$packageName]['reference'])) {
212
+ return null;
213
+ }
214
+
215
+ return self::$installed['versions'][$packageName]['reference'];
216
+ }
217
+
218
+
219
+
220
+
221
+
222
+ public static function getRootPackage()
223
+ {
224
+ return self::$installed['root'];
225
+ }
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+ public static function getRawData()
234
+ {
235
+ return self::$installed;
236
+ }
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+ public static function reload($data)
257
+ {
258
+ self::$installed = $data;
259
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  }
vendor/composer/autoload_classmap.php CHANGED
@@ -2,211 +2,9 @@
2
 
3
  // autoload_classmap.php @generated by Composer
4
 
5
- $vendorDir = dirname(__DIR__);
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\\Notes\\SettingsMoved' => $baseDir . '/includes/Admin/Notes/SettingsMoved.php',
166
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Categories' => $baseDir . '/includes/Admin/Product_Categories.php',
167
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sets' => $baseDir . '/includes/Admin/Product_Sets.php',
168
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sync_Meta_Box' => $baseDir . '/includes/Admin/Product_Sync_Meta_Box.php',
169
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Products' => $baseDir . '/includes/Admin/Products.php',
170
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings' => $baseDir . '/includes/Admin/Settings.php',
171
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Advertise' => $baseDir . '/includes/Admin/Settings_Screens/Advertise.php',
172
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Connection' => $baseDir . '/includes/Admin/Settings_Screens/Connection.php',
173
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Messenger' => $baseDir . '/includes/Admin/Settings_Screens/Messenger.php',
174
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sets' => $baseDir . '/includes/Admin/Settings_Screens/Product_Sets.php',
175
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sync' => $baseDir . '/includes/Admin/Settings_Screens/Product_Sync.php',
176
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Tasks\\Setup' => $baseDir . '/includes/Admin/Tasks/Setup.php',
177
- 'SkyVerge\\WooCommerce\\Facebook\\Commerce' => $baseDir . '/includes/Commerce.php',
178
- 'SkyVerge\\WooCommerce\\Facebook\\Commerce\\Orders' => $baseDir . '/includes/Commerce/Orders.php',
179
- 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLogger' => $baseDir . '/includes/Debug/ProfilingLogger.php',
180
- 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLoggerProcess' => $baseDir . '/includes/Debug/ProfilingLoggerProcess.php',
181
- 'SkyVerge\\WooCommerce\\Facebook\\Events\\AAMSettings' => $baseDir . '/includes/Events/AAMSettings.php',
182
- 'SkyVerge\\WooCommerce\\Facebook\\Events\\Event' => $baseDir . '/includes/Events/Event.php',
183
- 'SkyVerge\\WooCommerce\\Facebook\\Events\\Normalizer' => $baseDir . '/includes/Events/Normalizer.php',
184
- 'SkyVerge\\WooCommerce\\Facebook\\Feed\\FeedConfigurationDetection' => $baseDir . '/includes/Feed/FeedConfigurationDetection.php',
185
- 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\Connection' => $baseDir . '/includes/Handlers/Connection.php',
186
- 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\WebHook' => $baseDir . '/includes/Handlers/WebHook.php',
187
- 'SkyVerge\\WooCommerce\\Facebook\\Integrations\\Bookings' => $baseDir . '/includes/Integrations/Bookings.php',
188
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\AbstractChainedJob' => $baseDir . '/includes/Jobs/AbstractChainedJob.php',
189
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\CleanupSkyvergeFrameworkJobOptions' => $baseDir . '/includes/Jobs/CleanupSkyvergeFrameworkJobOptions.php',
190
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\GenerateProductFeed' => $baseDir . '/includes/Jobs/GenerateProductFeed.php',
191
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\JobManager' => $baseDir . '/includes/Jobs/JobManager.php',
192
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\LoggingTrait' => $baseDir . '/includes/Jobs/LoggingTrait.php',
193
- 'SkyVerge\\WooCommerce\\Facebook\\Lifecycle' => $baseDir . '/includes/Lifecycle.php',
194
- 'SkyVerge\\WooCommerce\\Facebook\\Locale' => $baseDir . '/includes/Locale.php',
195
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSets\\Sync' => $baseDir . '/includes/ProductSets/Sync.php',
196
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductExcludedException' => $baseDir . '/includes/ProductSync/ProductExcludedException.php',
197
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductInvalidException' => $baseDir . '/includes/ProductSync/ProductInvalidException.php',
198
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductValidator' => $baseDir . '/includes/ProductSync/ProductValidator.php',
199
- 'SkyVerge\\WooCommerce\\Facebook\\Product_Categories' => $baseDir . '/includes/Product_Categories.php',
200
- 'SkyVerge\\WooCommerce\\Facebook\\Products' => $baseDir . '/includes/Products.php',
201
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\FBCategories' => $baseDir . '/includes/Products/FBCategories.php',
202
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Feed' => $baseDir . '/includes/Products/Feed.php',
203
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\GoogleProductTaxonomy' => $baseDir . '/includes/Products/GoogleProductTaxonomy.php',
204
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Stock' => $baseDir . '/includes/Products/Stock.php',
205
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync' => $baseDir . '/includes/Products/Sync.php',
206
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync\\Background' => $baseDir . '/includes/Products/Sync/Background.php',
207
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Handle_Virtual_Products_Variations' => $baseDir . '/includes/Utilities/Background_Handle_Virtual_Products_Variations.php',
208
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Remove_Duplicate_Visibility_Meta' => $baseDir . '/includes/Utilities/Background_Remove_Duplicate_Visibility_Meta.php',
209
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Heartbeat' => $baseDir . '/includes/Utilities/Heartbeat.php',
210
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Shipment' => $baseDir . '/includes/Utilities/Shipment.php',
211
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Tracker' => $baseDir . '/includes/Utilities/Tracker.php',
212
  );
2
 
3
  // autoload_classmap.php @generated by Composer
4
 
5
+ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
 
 
 
 
 
 
 
9
  'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  );
vendor/composer/autoload_namespaces.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_namespaces.php @generated by Composer
4
 
5
- $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_namespaces.php @generated by Composer
4
 
5
+ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
vendor/composer/autoload_psr4.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_psr4.php @generated by Composer
4
 
5
- $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_psr4.php @generated by Composer
4
 
5
+ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitc7a38d3b9056d61c05392a953f2bba96
6
  {
7
  private static $loader;
8
 
@@ -24,12 +24,31 @@ class ComposerAutoloaderInitc7a38d3b9056d61c05392a953f2bba96
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInitc7a38d3b9056d61c05392a953f2bba96', 'loadClassLoader'), true, true);
28
- self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
- spl_autoload_unregister(array('ComposerAutoloaderInitc7a38d3b9056d61c05392a953f2bba96', 'loadClassLoader'));
30
-
31
- require __DIR__ . '/autoload_static.php';
32
- call_user_func(\Composer\Autoload\ComposerStaticInitc7a38d3b9056d61c05392a953f2bba96::getInitializer($loader));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  $loader->register(true);
35
 
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit0a5c9cf66a2c48e36a98d940342789aa
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit0a5c9cf66a2c48e36a98d940342789aa', 'loadClassLoader'), true, true);
28
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit0a5c9cf66a2c48e36a98d940342789aa', 'loadClassLoader'));
30
+
31
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
+ if ($useStaticLoader) {
33
+ require __DIR__ . '/autoload_static.php';
34
+
35
+ call_user_func(\Composer\Autoload\ComposerStaticInit0a5c9cf66a2c48e36a98d940342789aa::getInitializer($loader));
36
+ } else {
37
+ $map = require __DIR__ . '/autoload_namespaces.php';
38
+ foreach ($map as $namespace => $path) {
39
+ $loader->set($namespace, $path);
40
+ }
41
+
42
+ $map = require __DIR__ . '/autoload_psr4.php';
43
+ foreach ($map as $namespace => $path) {
44
+ $loader->setPsr4($namespace, $path);
45
+ }
46
+
47
+ $classMap = require __DIR__ . '/autoload_classmap.php';
48
+ if ($classMap) {
49
+ $loader->addClassMap($classMap);
50
+ }
51
+ }
52
 
53
  $loader->register(true);
54
 
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitc7a38d3b9056d61c05392a953f2bba96
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'S' =>
@@ -37,217 +37,15 @@ class ComposerStaticInitc7a38d3b9056d61c05392a953f2bba96
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\\Notes\\SettingsMoved' => __DIR__ . '/../..' . '/includes/Admin/Notes/SettingsMoved.php',
197
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Categories' => __DIR__ . '/../..' . '/includes/Admin/Product_Categories.php',
198
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sets' => __DIR__ . '/../..' . '/includes/Admin/Product_Sets.php',
199
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Product_Sync_Meta_Box' => __DIR__ . '/../..' . '/includes/Admin/Product_Sync_Meta_Box.php',
200
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Products' => __DIR__ . '/../..' . '/includes/Admin/Products.php',
201
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings' => __DIR__ . '/../..' . '/includes/Admin/Settings.php',
202
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Advertise' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Advertise.php',
203
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Connection' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Connection.php',
204
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Messenger' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Messenger.php',
205
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sets' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Product_Sets.php',
206
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Settings_Screens\\Product_Sync' => __DIR__ . '/../..' . '/includes/Admin/Settings_Screens/Product_Sync.php',
207
- 'SkyVerge\\WooCommerce\\Facebook\\Admin\\Tasks\\Setup' => __DIR__ . '/../..' . '/includes/Admin/Tasks/Setup.php',
208
- 'SkyVerge\\WooCommerce\\Facebook\\Commerce' => __DIR__ . '/../..' . '/includes/Commerce.php',
209
- 'SkyVerge\\WooCommerce\\Facebook\\Commerce\\Orders' => __DIR__ . '/../..' . '/includes/Commerce/Orders.php',
210
- 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLogger' => __DIR__ . '/../..' . '/includes/Debug/ProfilingLogger.php',
211
- 'SkyVerge\\WooCommerce\\Facebook\\Debug\\ProfilingLoggerProcess' => __DIR__ . '/../..' . '/includes/Debug/ProfilingLoggerProcess.php',
212
- 'SkyVerge\\WooCommerce\\Facebook\\Events\\AAMSettings' => __DIR__ . '/../..' . '/includes/Events/AAMSettings.php',
213
- 'SkyVerge\\WooCommerce\\Facebook\\Events\\Event' => __DIR__ . '/../..' . '/includes/Events/Event.php',
214
- 'SkyVerge\\WooCommerce\\Facebook\\Events\\Normalizer' => __DIR__ . '/../..' . '/includes/Events/Normalizer.php',
215
- 'SkyVerge\\WooCommerce\\Facebook\\Feed\\FeedConfigurationDetection' => __DIR__ . '/../..' . '/includes/Feed/FeedConfigurationDetection.php',
216
- 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\Connection' => __DIR__ . '/../..' . '/includes/Handlers/Connection.php',
217
- 'SkyVerge\\WooCommerce\\Facebook\\Handlers\\WebHook' => __DIR__ . '/../..' . '/includes/Handlers/WebHook.php',
218
- 'SkyVerge\\WooCommerce\\Facebook\\Integrations\\Bookings' => __DIR__ . '/../..' . '/includes/Integrations/Bookings.php',
219
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\AbstractChainedJob' => __DIR__ . '/../..' . '/includes/Jobs/AbstractChainedJob.php',
220
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\CleanupSkyvergeFrameworkJobOptions' => __DIR__ . '/../..' . '/includes/Jobs/CleanupSkyvergeFrameworkJobOptions.php',
221
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\GenerateProductFeed' => __DIR__ . '/../..' . '/includes/Jobs/GenerateProductFeed.php',
222
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\JobManager' => __DIR__ . '/../..' . '/includes/Jobs/JobManager.php',
223
- 'SkyVerge\\WooCommerce\\Facebook\\Jobs\\LoggingTrait' => __DIR__ . '/../..' . '/includes/Jobs/LoggingTrait.php',
224
- 'SkyVerge\\WooCommerce\\Facebook\\Lifecycle' => __DIR__ . '/../..' . '/includes/Lifecycle.php',
225
- 'SkyVerge\\WooCommerce\\Facebook\\Locale' => __DIR__ . '/../..' . '/includes/Locale.php',
226
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSets\\Sync' => __DIR__ . '/../..' . '/includes/ProductSets/Sync.php',
227
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductExcludedException' => __DIR__ . '/../..' . '/includes/ProductSync/ProductExcludedException.php',
228
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductInvalidException' => __DIR__ . '/../..' . '/includes/ProductSync/ProductInvalidException.php',
229
- 'SkyVerge\\WooCommerce\\Facebook\\ProductSync\\ProductValidator' => __DIR__ . '/../..' . '/includes/ProductSync/ProductValidator.php',
230
- 'SkyVerge\\WooCommerce\\Facebook\\Product_Categories' => __DIR__ . '/../..' . '/includes/Product_Categories.php',
231
- 'SkyVerge\\WooCommerce\\Facebook\\Products' => __DIR__ . '/../..' . '/includes/Products.php',
232
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\FBCategories' => __DIR__ . '/../..' . '/includes/Products/FBCategories.php',
233
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Feed' => __DIR__ . '/../..' . '/includes/Products/Feed.php',
234
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\GoogleProductTaxonomy' => __DIR__ . '/../..' . '/includes/Products/GoogleProductTaxonomy.php',
235
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Stock' => __DIR__ . '/../..' . '/includes/Products/Stock.php',
236
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync' => __DIR__ . '/../..' . '/includes/Products/Sync.php',
237
- 'SkyVerge\\WooCommerce\\Facebook\\Products\\Sync\\Background' => __DIR__ . '/../..' . '/includes/Products/Sync/Background.php',
238
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Handle_Virtual_Products_Variations' => __DIR__ . '/../..' . '/includes/Utilities/Background_Handle_Virtual_Products_Variations.php',
239
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Background_Remove_Duplicate_Visibility_Meta' => __DIR__ . '/../..' . '/includes/Utilities/Background_Remove_Duplicate_Visibility_Meta.php',
240
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Heartbeat' => __DIR__ . '/../..' . '/includes/Utilities/Heartbeat.php',
241
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Shipment' => __DIR__ . '/../..' . '/includes/Utilities/Shipment.php',
242
- 'SkyVerge\\WooCommerce\\Facebook\\Utilities\\Tracker' => __DIR__ . '/../..' . '/includes/Utilities/Tracker.php',
243
  );
244
 
245
  public static function getInitializer(ClassLoader $loader)
246
  {
247
  return \Closure::bind(function () use ($loader) {
248
- $loader->prefixLengthsPsr4 = ComposerStaticInitc7a38d3b9056d61c05392a953f2bba96::$prefixLengthsPsr4;
249
- $loader->prefixDirsPsr4 = ComposerStaticInitc7a38d3b9056d61c05392a953f2bba96::$prefixDirsPsr4;
250
- $loader->classMap = ComposerStaticInitc7a38d3b9056d61c05392a953f2bba96::$classMap;
251
 
252
  }, null, ClassLoader::class);
253
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit0a5c9cf66a2c48e36a98d940342789aa
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'S' =>
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 = ComposerStaticInit0a5c9cf66a2c48e36a98d940342789aa::$prefixLengthsPsr4;
47
+ $loader->prefixDirsPsr4 = ComposerStaticInit0a5c9cf66a2c48e36a98d940342789aa::$prefixDirsPsr4;
48
+ $loader->classMap = ComposerStaticInit0a5c9cf66a2c48e36a98d940342789aa::$classMap;
49
 
50
  }, null, ClassLoader::class);
51
  }
vendor/composer/installed.json CHANGED
@@ -2,17 +2,17 @@
2
  "packages": [
3
  {
4
  "name": "composer/installers",
5
- "version": "v1.12.0",
6
- "version_normalized": "1.12.0.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/composer/installers.git",
10
- "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/composer/installers/zipball/d20a64ed3c94748397ff5973488761b22f6d3f19",
15
- "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19",
16
  "shasum": ""
17
  },
18
  "require": {
@@ -30,7 +30,7 @@
30
  "symfony/phpunit-bridge": "^4.2 || ^5",
31
  "symfony/process": "^2.3"
32
  },
33
- "time": "2021-09-13T08:19:44+00:00",
34
  "type": "composer-plugin",
35
  "extra": {
36
  "class": "Composer\\Installers\\Plugin",
@@ -113,7 +113,6 @@
113
  "modx",
114
  "moodle",
115
  "osclass",
116
- "pantheon",
117
  "phpbb",
118
  "piwik",
119
  "ppi",
@@ -136,7 +135,7 @@
136
  ],
137
  "support": {
138
  "issues": "https://github.com/composer/installers/issues",
139
- "source": "https://github.com/composer/installers/tree/v1.12.0"
140
  },
141
  "funding": [
142
  {
@@ -184,17 +183,17 @@
184
  },
185
  {
186
  "name": "woocommerce/action-scheduler-job-framework",
187
- "version": "2.0.0",
188
- "version_normalized": "2.0.0.0",
189
  "source": {
190
  "type": "git",
191
  "url": "https://github.com/woocommerce/action-scheduler-job-framework.git",
192
- "reference": "b0b21b9cc87e476ba7f8817050b39274ea7d6732"
193
  },
194
  "dist": {
195
  "type": "zip",
196
- "url": "https://api.github.com/repos/woocommerce/action-scheduler-job-framework/zipball/b0b21b9cc87e476ba7f8817050b39274ea7d6732",
197
- "reference": "b0b21b9cc87e476ba7f8817050b39274ea7d6732",
198
  "shasum": ""
199
  },
200
  "require": {
@@ -203,7 +202,7 @@
203
  "require-dev": {
204
  "woocommerce/woocommerce-sniffs": "0.1.0"
205
  },
206
- "time": "2021-05-20T02:32:48+00:00",
207
  "type": "library",
208
  "installation-source": "dist",
209
  "autoload": {
@@ -221,7 +220,7 @@
221
  ],
222
  "description": "A job framework for Action Scheduler (actionscheduler.org)",
223
  "support": {
224
- "source": "https://github.com/woocommerce/action-scheduler-job-framework/tree/2.0.0",
225
  "issues": "https://github.com/woocommerce/action-scheduler-job-framework/issues"
226
  },
227
  "install-path": "../woocommerce/action-scheduler-job-framework"
2
  "packages": [
3
  {
4
  "name": "composer/installers",
5
+ "version": "v1.11.0",
6
+ "version_normalized": "1.11.0.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/composer/installers.git",
10
+ "reference": "ae03311f45dfe194412081526be2e003960df74b"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b",
15
+ "reference": "ae03311f45dfe194412081526be2e003960df74b",
16
  "shasum": ""
17
  },
18
  "require": {
30
  "symfony/phpunit-bridge": "^4.2 || ^5",
31
  "symfony/process": "^2.3"
32
  },
33
+ "time": "2021-04-28T06:42:17+00:00",
34
  "type": "composer-plugin",
35
  "extra": {
36
  "class": "Composer\\Installers\\Plugin",
113
  "modx",
114
  "moodle",
115
  "osclass",
 
116
  "phpbb",
117
  "piwik",
118
  "ppi",
135
  ],
136
  "support": {
137
  "issues": "https://github.com/composer/installers/issues",
138
+ "source": "https://github.com/composer/installers/tree/v1.11.0"
139
  },
140
  "funding": [
141
  {
183
  },
184
  {
185
  "name": "woocommerce/action-scheduler-job-framework",
186
+ "version": "1.0.0",
187
+ "version_normalized": "1.0.0.0",
188
  "source": {
189
  "type": "git",
190
  "url": "https://github.com/woocommerce/action-scheduler-job-framework.git",
191
+ "reference": "718594e15d7ba2d56f8a37743bda6d7a8296e1c8"
192
  },
193
  "dist": {
194
  "type": "zip",
195
+ "url": "https://api.github.com/repos/woocommerce/action-scheduler-job-framework/zipball/718594e15d7ba2d56f8a37743bda6d7a8296e1c8",
196
+ "reference": "718594e15d7ba2d56f8a37743bda6d7a8296e1c8",
197
  "shasum": ""
198
  },
199
  "require": {
202
  "require-dev": {
203
  "woocommerce/woocommerce-sniffs": "0.1.0"
204
  },
205
+ "time": "2021-05-05T02:11:38+00:00",
206
  "type": "library",
207
  "installation-source": "dist",
208
  "autoload": {
220
  ],
221
  "description": "A job framework for Action Scheduler (actionscheduler.org)",
222
  "support": {
223
+ "source": "https://github.com/woocommerce/action-scheduler-job-framework/tree/1.0.0",
224
  "issues": "https://github.com/woocommerce/action-scheduler-job-framework/issues"
225
  },
226
  "install-path": "../woocommerce/action-scheduler-job-framework"
vendor/composer/installed.php CHANGED
@@ -1,62 +1,65 @@
1
- <?php return array(
2
- 'root' => array(
3
- 'name' => 'facebookincubator/facebook-for-woocommerce',
4
- 'pretty_version' => 'dev-release/2.6.30',
5
- 'version' => 'dev-release/2.6.30',
6
- 'reference' => '26ee0f8590597b20893f64d839a65f11ebc64b45',
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.30',
24
- 'version' => 'dev-release/2.6.30',
25
- 'reference' => '26ee0f8590597b20893f64d839a65f11ebc64b45',
26
- 'type' => 'wordpress-plugin',
27
- 'install_path' => __DIR__ . '/../../',
28
- 'aliases' => array(),
29
- 'dev_requirement' => false,
30
- ),
31
- 'roundcube/plugin-installer' => array(
32
- 'dev_requirement' => false,
33
- 'replaced' => array(
34
- 0 => '*',
35
- ),
36
- ),
37
- 'shama/baton' => array(
38
- 'dev_requirement' => false,
39
- 'replaced' => array(
40
- 0 => '*',
41
- ),
42
- ),
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
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  );
1
+ <?php return array (
2
+ 'root' =>
3
+ array (
4
+ 'pretty_version' => 'dev-release/2.6.5',
5
+ 'version' => 'dev-release/2.6.5',
6
+ 'aliases' =>
7
+ array (
 
 
 
8
  ),
9
+ 'reference' => 'f4e8c6097d6622059705df6d7cbab9179609c055',
10
+ 'name' => 'facebookincubator/facebook-for-woocommerce',
11
+ ),
12
+ 'versions' =>
13
+ array (
14
+ 'composer/installers' =>
15
+ array (
16
+ 'pretty_version' => 'v1.11.0',
17
+ 'version' => '1.11.0.0',
18
+ 'aliases' =>
19
+ array (
20
+ ),
21
+ 'reference' => 'ae03311f45dfe194412081526be2e003960df74b',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  ),
23
+ 'facebookincubator/facebook-for-woocommerce' =>
24
+ array (
25
+ 'pretty_version' => 'dev-release/2.6.5',
26
+ 'version' => 'dev-release/2.6.5',
27
+ 'aliases' =>
28
+ array (
29
+ ),
30
+ 'reference' => 'f4e8c6097d6622059705df6d7cbab9179609c055',
31
+ ),
32
+ 'roundcube/plugin-installer' =>
33
+ array (
34
+ 'replaced' =>
35
+ array (
36
+ 0 => '*',
37
+ ),
38
+ ),
39
+ 'shama/baton' =>
40
+ array (
41
+ 'replaced' =>
42
+ array (
43
+ 0 => '*',
44
+ ),
45
+ ),
46
+ 'skyverge/wc-plugin-framework' =>
47
+ array (
48
+ 'pretty_version' => '5.10.0',
49
+ 'version' => '5.10.0.0',
50
+ 'aliases' =>
51
+ array (
52
+ ),
53
+ 'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
54
+ ),
55
+ 'woocommerce/action-scheduler-job-framework' =>
56
+ array (
57
+ 'pretty_version' => '1.0.0',
58
+ 'version' => '1.0.0.0',
59
+ 'aliases' =>
60
+ array (
61
+ ),
62
+ 'reference' => '718594e15d7ba2d56f8a37743bda6d7a8296e1c8',
63
+ ),
64
+ ),
65
  );
vendor/composer/installers/.github/workflows/continuous-integration.yml DELETED
@@ -1,76 +0,0 @@
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 DELETED
@@ -1,30 +0,0 @@
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 DELETED
@@ -1,51 +0,0 @@
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 DELETED
@@ -1,122 +0,0 @@
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/composer/installers/src/Composer/Installers/CakePHPInstaller.php CHANGED
@@ -47,7 +47,6 @@ class CakePHPInstaller extends BaseInstaller
47
  * @param string $matcher
48
  * @param string $version
49
  * @return bool
50
- * @phpstan-param Constraint::STR_OP_* $matcher
51
  */
52
  protected function matchesCakeVersion($matcher, $version)
53
  {
47
  * @param string $matcher
48
  * @param string $version
49
  * @return bool
 
50
  */
51
  protected function matchesCakeVersion($matcher, $version)
52
  {
vendor/composer/installers/src/Composer/Installers/Installer.php CHANGED
@@ -91,7 +91,6 @@ class Installer extends LibraryInstaller
91
  'phifty' => 'PhiftyInstaller',
92
  'porto' => 'PortoInstaller',
93
  'processwire' => 'ProcessWireInstaller',
94
- 'quicksilver' => 'PantheonInstaller',
95
  'redaxo' => 'RedaxoInstaller',
96
  'redaxo5' => 'Redaxo5Installer',
97
  'reindex' => 'ReIndexInstaller',
91
  'phifty' => 'PhiftyInstaller',
92
  'porto' => 'PortoInstaller',
93
  'processwire' => 'ProcessWireInstaller',
 
94
  'redaxo' => 'RedaxoInstaller',
95
  'redaxo5' => 'Redaxo5Installer',
96
  'reindex' => 'ReIndexInstaller',
vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Composer\Installers;
4
-
5
- class PantheonInstaller extends BaseInstaller
6
- {
7
- /** @var array<string, string> */
8
- protected $locations = array(
9
- 'script' => 'web/private/scripts/quicksilver/{$name}',
10
- 'module' => 'web/private/scripts/quicksilver/{$name}',
11
- );
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
vendor/skyverge/wc-plugin-framework/.dist.env DELETED
@@ -1,17 +0,0 @@
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 DELETED
@@ -1,21 +0,0 @@
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 DELETED
@@ -1,26 +0,0 @@
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 DELETED
@@ -1,102 +0,0 @@
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 DELETED
@@ -1,9 +0,0 @@
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 DELETED
@@ -1,82 +0,0 @@
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 DELETED
@@ -1,22 +0,0 @@
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 DELETED
@@ -1,12 +0,0 @@
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 DELETED
@@ -1,8 +0,0 @@
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 DELETED
@@ -1,7236 +0,0 @@
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 DELETED
@@ -1,29 +0,0 @@
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 DELETED
@@ -1,26 +0,0 @@
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 DELETED
@@ -1,33 +0,0 @@
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 DELETED
@@ -1,25 +0,0 @@
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 DELETED
@@ -1,41 +0,0 @@
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 DELETED
@@ -1,28 +0,0 @@
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 DELETED
@@ -1,31 +0,0 @@
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 DELETED
@@ -1,8749 +0,0 @@
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 DELETED
@@ -1,43 +0,0 @@
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 DELETED
@@ -1,5 +0,0 @@
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 DELETED
@@ -1,15 +0,0 @@
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 DELETED
@@ -1,3 +0,0 @@
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 DELETED
@@ -1,13 +0,0 @@
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 DELETED
@@ -1,66 +0,0 @@
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 DELETED
@@ -1,132 +0,0 @@
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 DELETED
File without changes
vendor/skyverge/wc-plugin-framework/tests/_archive/integration/test-case.php DELETED
@@ -1,8 +0,0 @@
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 DELETED
@@ -1,30 +0,0 @@
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 DELETED
@@ -1,31 +0,0 @@
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 DELETED
@@ -1,204 +0,0 @@
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 DELETED
@@ -1,182 +0,0 @@
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 DELETED
@@ -1,900 +0,0 @@
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 DELETED
@@ -1,83 +0,0 @@
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_Paym