diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..acbeeec
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "printWidth": 120,
+ "tabWidth": 2
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..d403d7a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "wp-graphql-yoast-seo",
+ "version": "4.2.0",
+ "description": "A WPGraphQL Extension that adds support for Yoast SEO",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "prettier": "prettier wp-graphql-yoast-seo.php"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ashhitch/wp-graphql-yoast-seo.git"
+ },
+ "author": "Ash Hitchcock",
+ "bugs": {
+ "url": "https://github.com/ashhitch/wp-graphql-yoast-seo/issues"
+ },
+ "homepage": "https://github.com/ashhitch/wp-graphql-yoast-seo#readme",
+ "devDependencies": {
+ "@prettier/plugin-php": "^0.14.2",
+ "husky": ">=4",
+ "lint-staged": ">=10",
+ "prettier": "^2.0.5"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.{js,css,md,php}": "prettier wp-graphql-yoast-seo.php"
+ }
+}
diff --git a/wp-graphql-yoast-seo.php b/wp-graphql-yoast-seo.php
index 8d024b9..203fa84 100755
--- a/wp-graphql-yoast-seo.php
+++ b/wp-graphql-yoast-seo.php
@@ -8,7 +8,7 @@
* Author URI: https://www.ashleyhitchcock.com
* Text Domain: wp-graphql-yoast-seo
* Domain Path: /languages
- * Version: 4.1.0
+ * Version: 4.2.0
*
* @package WP_Graphql_YOAST_SEO
*/
@@ -19,382 +19,381 @@
use WPGraphQL\AppContext;
use WPGraphQL\Data\DataSource;
-add_action('admin_init', function (){
- $core_dependencies = [
- 'WPGraphQL plugin' => class_exists( 'WPGraphQL' ),
- 'Yoast SEO' => is_plugin_active( 'wordpress-seo/wp-seo.php' ) || is_plugin_active( 'wordpress-seo-premium/wp-seo-premium.php' )
- ];
-
- $missing_dependencies = array_keys( array_diff( $core_dependencies, array_filter( $core_dependencies ) ) );
- $display_admin_notice = static function () use ( $missing_dependencies ) {
- ?>
-
- class_exists('WPGraphQL'),
+ 'Yoast SEO' => is_plugin_active('wordpress-seo/wp-seo.php') || is_plugin_active('wordpress-seo-premium/wp-seo-premium.php')
+ ];
+
+ $missing_dependencies = array_keys(array_diff($core_dependencies, array_filter($core_dependencies)));
+ $display_admin_notice = static function () use ($missing_dependencies) {
+?>
+
+ __('Types of cards', 'wp-graphql-yoast-seo'),
- 'values' => [
- 'summary_large_image' => [
- 'value' => 'summary_large_image'
- ],
- 'summary' => [
- 'value' => 'summary'
- ],
- ],
- ]);
-
- register_graphql_object_type('SEO', [
- 'fields' => [
- 'title' => ['type' => 'String'],
- 'metaDesc' => ['type' => 'String'],
- 'focuskw' => ['type' => 'String'],
- 'metaKeywords' => ['type' => 'String'],
- 'metaRobotsNoindex' => ['type' => 'String'],
- 'metaRobotsNofollow' => ['type' => 'String'],
- 'opengraphTitle' => ['type' => 'String'],
- 'opengraphUrl' => ['type' => 'String'],
- 'opengraphSiteName' => ['type' => 'String'],
- 'opengraphType' => ['type' => 'String'],
- 'opengraphAuthor' => ['type' => 'String'],
- 'opengraphPublisher' => ['type' => 'String'],
- 'opengraphPublishedTime' => ['type' => 'String'],
- 'opengraphModifiedTime' => ['type' => 'String'],
- 'opengraphDescription' => ['type' => 'String'],
- 'opengraphImage' => ['type' => 'MediaItem'],
- 'twitterTitle' => ['type' => 'String'],
- 'twitterDescription' => ['type' => 'String'],
- 'twitterImage' => ['type' => 'MediaItem'],
- 'canonical' => ['type' => 'String'],
- 'breadcrumbs' => ['type' => ['list_of' => 'SEOPostTypeBreadcrumbs']],
- ]
- ]);
-
- register_graphql_object_type('SEOPostTypeBreadcrumbs', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- 'text' => ['type' => 'String'],
-
- ]
- ]);
-
- register_graphql_object_type('SEOSchema', [
- 'fields' => [
- 'companyName' => ['type' => 'String'],
- 'companyOrPerson' => ['type' => 'String'],
- 'companyLogo' => ['type' => 'MediaItem'],
- 'personLogo' => ['type' => 'MediaItem'],
- 'logo' => ['type' => 'MediaItem'],
- 'siteName' => ['type' => 'String'],
- 'wordpressSiteName' => ['type' => 'String'],
- 'siteUrl' => ['type' => 'String'],
- ]
- ]);
-
- register_graphql_object_type('SEOWebmaster', [
- 'fields' => [
- 'baiduVerify' => ['type' => 'String'],
- 'googleVerify' => ['type' => 'String'],
- 'msVerify' => ['type' => 'String'],
- 'yandexVerify' => ['type' => 'String'],
- ]
- ]);
-
- register_graphql_object_type('SEOBreadcrumbs', [
- 'fields' => [
- 'enabled' => ['type' => 'Boolean'],
- 'boldLast' => ['type' => 'Boolean'],
- 'showBlogPage' => ['type' => 'Boolean'],
- 'notFoundText' => ['type' => 'String'],
- 'archivePrefix' => ['type' => 'String'],
- 'homeText' => ['type' => 'String'],
- 'prefix' => ['type' => 'String'],
- 'searchPrefix' => ['type' => 'String'],
- 'separator' => ['type' => 'String'],
- ]
- ]);
-
- register_graphql_object_type('SEOSocialFacebook', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- 'defaultImage' => ['type' => 'MediaItem'],
- ]
- ]);
-
- register_graphql_object_type('SEOSocialTwitter', [
- 'fields' => [
- 'username' => ['type' => 'String'],
- 'cardType' => ['type' => 'SEOCardType'],
- ]
- ]);
-
- register_graphql_object_type('SEOSocialInstagram', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- ]
- ]);
- register_graphql_object_type('SEOSocialLinkedIn', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- ]
- ]);
- register_graphql_object_type('SEOSocialMySpace', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- ]
- ]);
-
- register_graphql_object_type('SEOSocialPinterest', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- 'metaTag' => ['type' => 'String'],
- ]
- ]);
-
- register_graphql_object_type('SEOSocialYoutube', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- ]
- ]);
- register_graphql_object_type('SEOSocialWikipedia', [
- 'fields' => [
- 'url' => ['type' => 'String'],
- ]
- ]);
-
-
- register_graphql_object_type('SEOSocial', [
- 'fields' => [
- 'facebook' => ['type' => 'SEOSocialFacebook'],
- 'twitter' => ['type' => 'SEOSocialTwitter'],
- 'instagram' => ['type' => 'SEOSocialInstagram'],
- 'linkedIn' => ['type' => 'SEOSocialLinkedIn'],
- 'mySpace' => ['type' => 'SEOSocialMySpace'],
- 'pinterest' => ['type' => 'SEOSocialPinterest'],
- 'youTube' => ['type' => 'SEOSocialYoutube'],
- 'wikipedia' => ['type' => 'SEOSocialWikipedia'],
- ]
- ]);
-
- register_graphql_object_type('SEOConfig', [
- 'description' => __('The Yoast SEO site level configuration data', 'wp-graphql-yoast-seo'),
- 'fields' => [
- 'schema' => ['type' => 'SEOSchema'],
- 'webmaster' => ['type' => 'SEOWebmaster'],
- 'social' => ['type' => 'SEOSocial'],
- 'breadcrumbs' => ['type' => 'SEOBreadcrumbs'],
- ]
- ]);
-
- register_graphql_field('RootQuery', 'seo', [
- 'type' => 'SEOConfig',
- 'description' => __('Returns seo site data', 'wp-graphql-yoast-seo'),
- 'resolve' => function ($source, array $args, AppContext $context) {
-
- $wpseo_options = WPSEO_Options::get_instance();
- $all = $wpseo_options->get_all();
-
- return array(
- 'webmaster' => array(
- 'baiduVerify' => trim($all['baiduverify']),
- 'googleVerify' => trim($all['googleverify']),
- 'msVerify' => trim($all['msverify']),
- 'yandexVerify' => trim($all['yandexverify']),
- ),
- 'social' => array(
- 'facebook' => array(
- 'url' => trim($all['facebook_site']),
- 'defaultImage' => DataSource::resolve_post_object($all['og_default_image_id'], $context)
- ),
- 'twitter' => array(
- 'username' => trim($all['twitter_site']),
- 'cardType' => trim($all['twitter_card_type']),
- ),
- 'instagram' => array('url' => trim($all['instagram_url'])),
- 'linkedIn' => array('url' => trim($all['linkedin_url'])),
- 'mySpace' => array('url' => trim($all['myspace_url'])),
- 'pinterest' => array(
- 'url' => trim($all['pinterest_url']),
- 'metaTag' => trim($all['pinterestverify']),
- ),
- 'youTube' => array('url' => trim($all['youtube_url'])),
- 'wikipedia' => array('url' => trim($all['wikipedia_url'])),
- ),
- 'breadcrumbs' => array(
- 'enabled' => trim($all['breadcrumbs-enable']),
- 'boldLast' => trim($all['breadcrumbs-boldlast']),
- 'showBlogPage' => trim($all['breadcrumbs-display-blog-page']),
- 'archivePrefix' => trim($all['breadcrumbs-archiveprefix']),
- 'prefix' => trim($all['breadcrumbs-prefix']),
- 'notFoundText' => trim($all['breadcrumbs-404crumb']),
- 'homeText' => trim($all['breadcrumbs-home']),
- 'searchPrefix' => trim($all['breadcrumbs-searchprefix']),
- 'separator' => trim($all['breadcrumbs-sep']),
- ),
- 'schema' => array(
- 'companyName' => trim($all['company_name']),
- 'companyLogo' => DataSource::resolve_post_object($all['company_logo_id'], $context),
- 'personLogo' => DataSource::resolve_post_object($all['person_logo_id'], $context),
- 'logo' => DataSource::resolve_post_object($all['company_or_person'] === 'company' ? $all['company_logo_id'] : $all['person_logo_id'], $context),
- 'companyOrPerson' => trim($all['company_or_person']),
- 'siteName' => trim(YoastSEO()->helpers->site->get_site_name()),
- 'wordpressSiteName' => trim(get_bloginfo('name')),
- 'siteUrl' => trim(get_site_url()),
- )
- );
- },
- ]);
-
-
- if (!empty($post_types) && is_array($post_types)) {
- foreach ($post_types as $post_type) {
- $post_type_object = get_post_type_object($post_type);
-
- if (isset($post_type_object->graphql_single_name)) :
- register_graphql_field($post_type_object->graphql_single_name, 'seo', [
- 'type' => 'SEO',
- 'description' => __('The Yoast SEO data of the ' . $post_type_object->graphql_single_name, 'wp-graphql-yoast-seo'),
- 'resolve' => function ($post, array $args, AppContext $context) {
-
- // Base array
- $seo = array();
-
- // https://developer.yoast.com/blog/yoast-seo-14-0-using-yoast-seo-surfaces/
- $robots = YoastSEO()->meta->for_post($post->ID)->robots;
- // Get data
- $seo = array(
- 'title' => trim(YoastSEO()->meta->for_post($post->ID)->title),
- 'metaDesc' => trim(YoastSEO()->meta->for_post($post->ID)->description),
- 'focuskw' => trim(get_post_meta($post->ID, '_yoast_wpseo_focuskw', true)),
- 'metaKeywords' => trim(get_post_meta($post->ID, '_yoast_wpseo_metakeywords', true)),
- 'metaRobotsNoindex' => $robots['index'],
- 'metaRobotsNofollow' => $robots['follow'],
- 'opengraphTitle' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_title),
- 'opengraphUrl' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_url),
- 'opengraphSiteName' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_site_name),
- 'opengraphType' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_type),
- 'opengraphAuthor' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_author),
- 'opengraphPublisher' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_publisher),
- 'opengraphPublishedTime' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_published_time),
- 'opengraphModifiedTime' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_modified_time),
- 'opengraphDescription' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_description),
- 'opengraphImage' => DataSource::resolve_post_object(get_og_image(YoastSEO()->meta->for_post($post->ID)->open_graph_images), $context),
- 'twitterCardType' => trim(YoastSEO()->meta->for_post($post->ID)->twitter_card),
- 'twitterTitle' => trim(YoastSEO()->meta->for_post($post->ID)->twitter_title),
- 'twitterDescription' => trim(YoastSEO()->meta->for_post($post->ID)->twitter_description),
- 'twitterImage' => DataSource::resolve_post_object(attachment_url_to_postid(YoastSEO()->meta->for_post($post->ID)->twitter_image), $context),
- 'canonical' => trim(YoastSEO()->meta->for_post($post->ID)->canonical),
- 'breadcrumbs' => YoastSEO()->meta->for_post($post->ID)->breadcrumbs
- );
-
- return !empty($seo) ? $seo : null;
- }
- ]);
- endif;
- }
- }
-
- if (!empty($taxonomies) && is_array($taxonomies)) {
- foreach ($taxonomies as $tax) {
-
- $taxonomy = get_taxonomy($tax);
-
- if (empty($taxonomy) || !isset($taxonomy->graphql_single_name)) {
- return;
- }
-
-
- register_graphql_field($taxonomy->graphql_single_name, 'seo', [
- 'type' => 'SEO',
- 'description' => __('The Yoast SEO data of the ' . $taxonomy->label . ' taxonomy.', 'wp-graphql-yoast-seo'),
- 'resolve' => function ($term, array $args, AppContext $context) {
-
- $term_obj = get_term($term->term_id);
-
- $meta = WPSEO_Taxonomy_Meta::get_term_meta((int) $term_obj->term_id, $term_obj->taxonomy);
- $robots = YoastSEO()->meta->for_term($term->term_id)->robots;
-
- // Get data
- $seo = array(
- 'title' => trim(YoastSEO()->meta->for_term($term->term_id)->title),
- 'metaDesc' => trim(YoastSEO()->meta->for_term($term->term_id)->description),
- 'focuskw' => trim($meta['wpseo_focuskw']),
- 'metaKeywords' => trim($meta['wpseo_metakeywords']),
- 'metaRobotsNoindex' => $robots['index'],
- 'metaRobotsNofollow' => $robots['follow'],
- 'opengraphTitle' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_title),
- 'opengraphUrl' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_url),
- 'opengraphSiteName' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_site_name),
- 'opengraphType' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_type),
- 'opengraphAuthor' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_author),
- 'opengraphPublisher' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_publisher),
- 'opengraphPublishedTime' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_published_time),
- 'opengraphModifiedTime' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_modified_time),
- 'opengraphDescription' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_description),
- 'opengraphImage' => DataSource::resolve_post_object($meta['wpseo_opengraph-image-id'], $context),
- 'twitterCardType' => trim(YoastSEO()->meta->for_term($term->term_id)->twitter_card),
- 'twitterTitle' => trim(YoastSEO()->meta->for_term($term->term_id)->twitter_title),
- 'twitterDescription' => trim(YoastSEO()->meta->for_term($term->term_id)->twitter_description),
- 'twitterImage' => DataSource::resolve_post_object($meta['wpseo_twitter-image-id'], $context),
- 'canonical' => trim($meta['canonical']),
- 'breadcrumbs' => YoastSEO()->meta->for_term($term->term_id)->breadcrumbs
- );
- wp_reset_query();
-
- return !empty($seo) ? $seo : null;
- }
- ]);
- }
- }
- });
+ if (!empty($missing_dependencies)) {
+ add_action('network_admin_notices', $display_admin_notice);
+ add_action('admin_notices', $display_admin_notice);
+
+ return;
+ }
+});
+add_action('graphql_init', function () {
+ if (!function_exists('get_og_image')) {
+ function get_og_image($images)
+ {
+
+ if (empty($images)) {
+ __return_empty_string();
+ }
+
+ $image = reset($images);
+
+ if (empty($image)) {
+ __return_empty_string();
+ }
+
+
+ if (!isset($image['url'])) {
+ __return_empty_string();
+ }
+
+ return attachment_url_to_postid($image['url']);
+ }
+ }
+
+ add_action('graphql_register_types', function () {
+ $post_types = \WPGraphQL::get_allowed_post_types();
+ $taxonomies = \WPGraphQL::get_allowed_taxonomies();
+
+ // If WooCommerce installed then add these post types and taxonomies
+ if (class_exists('\WooCommerce')) {
+ array_push($post_types, 'product');
+ array_push($taxonomies, 'productCategory');
+ }
+
+ register_graphql_enum_type('SEOCardType', [
+ 'description' => __('Types of cards', 'wp-graphql-yoast-seo'),
+ 'values' => [
+ 'summary_large_image' => [
+ 'value' => 'summary_large_image'
+ ],
+ 'summary' => [
+ 'value' => 'summary'
+ ],
+ ],
+ ]);
+
+ register_graphql_object_type('SEO', [
+ 'fields' => [
+ 'title' => ['type' => 'String'],
+ 'metaDesc' => ['type' => 'String'],
+ 'focuskw' => ['type' => 'String'],
+ 'metaKeywords' => ['type' => 'String'],
+ 'metaRobotsNoindex' => ['type' => 'String'],
+ 'metaRobotsNofollow' => ['type' => 'String'],
+ 'opengraphTitle' => ['type' => 'String'],
+ 'opengraphUrl' => ['type' => 'String'],
+ 'opengraphSiteName' => ['type' => 'String'],
+ 'opengraphType' => ['type' => 'String'],
+ 'opengraphAuthor' => ['type' => 'String'],
+ 'opengraphPublisher' => ['type' => 'String'],
+ 'opengraphPublishedTime' => ['type' => 'String'],
+ 'opengraphModifiedTime' => ['type' => 'String'],
+ 'opengraphDescription' => ['type' => 'String'],
+ 'opengraphImage' => ['type' => 'MediaItem'],
+ 'twitterTitle' => ['type' => 'String'],
+ 'twitterDescription' => ['type' => 'String'],
+ 'twitterImage' => ['type' => 'MediaItem'],
+ 'canonical' => ['type' => 'String'],
+ 'breadcrumbs' => ['type' => ['list_of' => 'SEOPostTypeBreadcrumbs']],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOPostTypeBreadcrumbs', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ 'text' => ['type' => 'String'],
+
+ ]
+ ]);
+
+ register_graphql_object_type('SEOSchema', [
+ 'fields' => [
+ 'companyName' => ['type' => 'String'],
+ 'companyOrPerson' => ['type' => 'String'],
+ 'companyLogo' => ['type' => 'MediaItem'],
+ 'personLogo' => ['type' => 'MediaItem'],
+ 'logo' => ['type' => 'MediaItem'],
+ 'siteName' => ['type' => 'String'],
+ 'wordpressSiteName' => ['type' => 'String'],
+ 'siteUrl' => ['type' => 'String'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOWebmaster', [
+ 'fields' => [
+ 'baiduVerify' => ['type' => 'String'],
+ 'googleVerify' => ['type' => 'String'],
+ 'msVerify' => ['type' => 'String'],
+ 'yandexVerify' => ['type' => 'String'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOBreadcrumbs', [
+ 'fields' => [
+ 'enabled' => ['type' => 'Boolean'],
+ 'boldLast' => ['type' => 'Boolean'],
+ 'showBlogPage' => ['type' => 'Boolean'],
+ 'notFoundText' => ['type' => 'String'],
+ 'archivePrefix' => ['type' => 'String'],
+ 'homeText' => ['type' => 'String'],
+ 'prefix' => ['type' => 'String'],
+ 'searchPrefix' => ['type' => 'String'],
+ 'separator' => ['type' => 'String'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOSocialFacebook', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ 'defaultImage' => ['type' => 'MediaItem'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOSocialTwitter', [
+ 'fields' => [
+ 'username' => ['type' => 'String'],
+ 'cardType' => ['type' => 'SEOCardType'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOSocialInstagram', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ ]
+ ]);
+ register_graphql_object_type('SEOSocialLinkedIn', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ ]
+ ]);
+ register_graphql_object_type('SEOSocialMySpace', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOSocialPinterest', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ 'metaTag' => ['type' => 'String'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOSocialYoutube', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ ]
+ ]);
+ register_graphql_object_type('SEOSocialWikipedia', [
+ 'fields' => [
+ 'url' => ['type' => 'String'],
+ ]
+ ]);
+
+
+ register_graphql_object_type('SEOSocial', [
+ 'fields' => [
+ 'facebook' => ['type' => 'SEOSocialFacebook'],
+ 'twitter' => ['type' => 'SEOSocialTwitter'],
+ 'instagram' => ['type' => 'SEOSocialInstagram'],
+ 'linkedIn' => ['type' => 'SEOSocialLinkedIn'],
+ 'mySpace' => ['type' => 'SEOSocialMySpace'],
+ 'pinterest' => ['type' => 'SEOSocialPinterest'],
+ 'youTube' => ['type' => 'SEOSocialYoutube'],
+ 'wikipedia' => ['type' => 'SEOSocialWikipedia'],
+ ]
+ ]);
+
+ register_graphql_object_type('SEOConfig', [
+ 'description' => __('The Yoast SEO site level configuration data', 'wp-graphql-yoast-seo'),
+ 'fields' => [
+ 'schema' => ['type' => 'SEOSchema'],
+ 'webmaster' => ['type' => 'SEOWebmaster'],
+ 'social' => ['type' => 'SEOSocial'],
+ 'breadcrumbs' => ['type' => 'SEOBreadcrumbs'],
+ ]
+ ]);
+
+ register_graphql_field('RootQuery', 'seo', [
+ 'type' => 'SEOConfig',
+ 'description' => __('Returns seo site data', 'wp-graphql-yoast-seo'),
+ 'resolve' => function ($source, array $args, AppContext $context) {
+
+ $wpseo_options = WPSEO_Options::get_instance();
+ $all = $wpseo_options->get_all();
+
+ return array(
+ 'webmaster' => array(
+ 'baiduVerify' => trim($all['baiduverify']),
+ 'googleVerify' => trim($all['googleverify']),
+ 'msVerify' => trim($all['msverify']),
+ 'yandexVerify' => trim($all['yandexverify']),
+ ),
+ 'social' => array(
+ 'facebook' => array(
+ 'url' => trim($all['facebook_site']),
+ 'defaultImage' => DataSource::resolve_post_object($all['og_default_image_id'], $context)
+ ),
+ 'twitter' => array(
+ 'username' => trim($all['twitter_site']),
+ 'cardType' => trim($all['twitter_card_type']),
+ ),
+ 'instagram' => array('url' => trim($all['instagram_url'])),
+ 'linkedIn' => array('url' => trim($all['linkedin_url'])),
+ 'mySpace' => array('url' => trim($all['myspace_url'])),
+ 'pinterest' => array(
+ 'url' => trim($all['pinterest_url']),
+ 'metaTag' => trim($all['pinterestverify']),
+ ),
+ 'youTube' => array('url' => trim($all['youtube_url'])),
+ 'wikipedia' => array('url' => trim($all['wikipedia_url'])),
+ ),
+ 'breadcrumbs' => array(
+ 'enabled' => trim($all['breadcrumbs-enable']),
+ 'boldLast' => trim($all['breadcrumbs-boldlast']),
+ 'showBlogPage' => trim($all['breadcrumbs-display-blog-page']),
+ 'archivePrefix' => trim($all['breadcrumbs-archiveprefix']),
+ 'prefix' => trim($all['breadcrumbs-prefix']),
+ 'notFoundText' => trim($all['breadcrumbs-404crumb']),
+ 'homeText' => trim($all['breadcrumbs-home']),
+ 'searchPrefix' => trim($all['breadcrumbs-searchprefix']),
+ 'separator' => trim($all['breadcrumbs-sep']),
+ ),
+ 'schema' => array(
+ 'companyName' => trim($all['company_name']),
+ 'companyLogo' => DataSource::resolve_post_object($all['company_logo_id'], $context),
+ 'personLogo' => DataSource::resolve_post_object($all['person_logo_id'], $context),
+ 'logo' => DataSource::resolve_post_object($all['company_or_person'] === 'company' ? $all['company_logo_id'] : $all['person_logo_id'], $context),
+ 'companyOrPerson' => trim($all['company_or_person']),
+ 'siteName' => trim(YoastSEO()->helpers->site->get_site_name()),
+ 'wordpressSiteName' => trim(get_bloginfo('name')),
+ 'siteUrl' => trim(get_site_url()),
+ )
+ );
+ },
+ ]);
+
+
+ if (!empty($post_types) && is_array($post_types)) {
+ foreach ($post_types as $post_type) {
+ $post_type_object = get_post_type_object($post_type);
+
+ if (isset($post_type_object->graphql_single_name)) :
+ register_graphql_field($post_type_object->graphql_single_name, 'seo', [
+ 'type' => 'SEO',
+ 'description' => __('The Yoast SEO data of the ' . $post_type_object->graphql_single_name, 'wp-graphql-yoast-seo'),
+ 'resolve' => function ($post, array $args, AppContext $context) {
+
+ // Base array
+ $seo = array();
+
+ // https://developer.yoast.com/blog/yoast-seo-14-0-using-yoast-seo-surfaces/
+ $robots = YoastSEO()->meta->for_post($post->ID)->robots;
+ // Get data
+ $seo = array(
+ 'title' => trim(YoastSEO()->meta->for_post($post->ID)->title),
+ 'metaDesc' => trim(YoastSEO()->meta->for_post($post->ID)->description),
+ 'focuskw' => trim(get_post_meta($post->ID, '_yoast_wpseo_focuskw', true)),
+ 'metaKeywords' => trim(get_post_meta($post->ID, '_yoast_wpseo_metakeywords', true)),
+ 'metaRobotsNoindex' => $robots['index'],
+ 'metaRobotsNofollow' => $robots['follow'],
+ 'opengraphTitle' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_title),
+ 'opengraphUrl' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_url),
+ 'opengraphSiteName' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_site_name),
+ 'opengraphType' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_type),
+ 'opengraphAuthor' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_author),
+ 'opengraphPublisher' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_publisher),
+ 'opengraphPublishedTime' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_published_time),
+ 'opengraphModifiedTime' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_article_modified_time),
+ 'opengraphDescription' => trim(YoastSEO()->meta->for_post($post->ID)->open_graph_description),
+ 'opengraphImage' => DataSource::resolve_post_object(get_og_image(YoastSEO()->meta->for_post($post->ID)->open_graph_images), $context),
+ 'twitterCardType' => trim(YoastSEO()->meta->for_post($post->ID)->twitter_card),
+ 'twitterTitle' => trim(YoastSEO()->meta->for_post($post->ID)->twitter_title),
+ 'twitterDescription' => trim(YoastSEO()->meta->for_post($post->ID)->twitter_description),
+ 'twitterImage' => DataSource::resolve_post_object(attachment_url_to_postid(YoastSEO()->meta->for_post($post->ID)->twitter_image), $context),
+ 'canonical' => trim(YoastSEO()->meta->for_post($post->ID)->canonical),
+ 'breadcrumbs' => YoastSEO()->meta->for_post($post->ID)->breadcrumbs
+ );
+
+ return !empty($seo) ? $seo : null;
+ }
+ ]);
+ endif;
+ }
+ }
+
+ if (!empty($taxonomies) && is_array($taxonomies)) {
+ foreach ($taxonomies as $tax) {
+
+ $taxonomy = get_taxonomy($tax);
+
+ if (empty($taxonomy) || !isset($taxonomy->graphql_single_name)) {
+ return;
+ }
+
+
+ register_graphql_field($taxonomy->graphql_single_name, 'seo', [
+ 'type' => 'SEO',
+ 'description' => __('The Yoast SEO data of the ' . $taxonomy->label . ' taxonomy.', 'wp-graphql-yoast-seo'),
+ 'resolve' => function ($term, array $args, AppContext $context) {
+
+ $term_obj = get_term($term->term_id);
+
+ $meta = WPSEO_Taxonomy_Meta::get_term_meta((int) $term_obj->term_id, $term_obj->taxonomy);
+ $robots = YoastSEO()->meta->for_term($term->term_id)->robots;
+
+ // Get data
+ $seo = array(
+ 'title' => trim(YoastSEO()->meta->for_term($term->term_id)->title),
+ 'metaDesc' => trim(YoastSEO()->meta->for_term($term->term_id)->description),
+ 'focuskw' => trim($meta['wpseo_focuskw']),
+ 'metaKeywords' => trim($meta['wpseo_metakeywords']),
+ 'metaRobotsNoindex' => $robots['index'],
+ 'metaRobotsNofollow' => $robots['follow'],
+ 'opengraphTitle' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_title),
+ 'opengraphUrl' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_url),
+ 'opengraphSiteName' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_site_name),
+ 'opengraphType' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_type),
+ 'opengraphAuthor' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_author),
+ 'opengraphPublisher' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_publisher),
+ 'opengraphPublishedTime' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_published_time),
+ 'opengraphModifiedTime' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_article_modified_time),
+ 'opengraphDescription' => trim(YoastSEO()->meta->for_term($term->term_id)->open_graph_description),
+ 'opengraphImage' => DataSource::resolve_post_object($meta['wpseo_opengraph-image-id'], $context),
+ 'twitterCardType' => trim(YoastSEO()->meta->for_term($term->term_id)->twitter_card),
+ 'twitterTitle' => trim(YoastSEO()->meta->for_term($term->term_id)->twitter_title),
+ 'twitterDescription' => trim(YoastSEO()->meta->for_term($term->term_id)->twitter_description),
+ 'twitterImage' => DataSource::resolve_post_object($meta['wpseo_twitter-image-id'], $context),
+ 'canonical' => trim($meta['canonical']),
+ 'breadcrumbs' => YoastSEO()->meta->for_term($term->term_id)->breadcrumbs
+ );
+ wp_reset_query();
+
+ return !empty($seo) ? $seo : null;
+ }
+ ]);
+ }
+ }
+ });
});
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..58bd3ae
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,798 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff"
+ integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==
+ dependencies:
+ "@babel/highlight" "^7.10.1"
+
+"@babel/helper-validator-identifier@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5"
+ integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==
+
+"@babel/highlight@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0"
+ integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.1"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@prettier/plugin-php@^0.14.2":
+ version "0.14.2"
+ resolved "https://registry.yarnpkg.com/@prettier/plugin-php/-/plugin-php-0.14.2.tgz#d19c6fb8d177633f3d404d733f0e8cfc23741b3e"
+ integrity sha512-sG713Vb/eKtlB4rsL1+7mDD85jC2cjop8z/LE2QZHBtbopemfa4okEha01fgCqMaLJ80NBwGP9SZIwY9MR/w6w==
+ dependencies:
+ linguist-languages "^7.5.1"
+ mem "^6.0.1"
+ php-parser glayzzle/php-parser#5a0e2e1bf12517bd1c544c0f4e68482d0362a7b5
+
+"@types/color-name@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
+ integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+aggregate-error@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
+ integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ansi-colors@^3.2.1:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-escapes@^4.3.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+ integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ dependencies:
+ type-fest "^0.11.0"
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
+ integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ dependencies:
+ "@types/color-name" "^1.1.1"
+ color-convert "^2.0.1"
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-truncate@2.1.0, cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+commander@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+ integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+compare-versions@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
+ integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enquirer@^2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381"
+ integrity sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==
+ dependencies:
+ ansi-colors "^3.2.1"
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+execa@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240"
+ integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+figures@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-versions@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
+ integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
+ dependencies:
+ semver-regex "^2.0.0"
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-stream@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
+ integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+ dependencies:
+ pump "^3.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+husky@>=4:
+ version "4.2.5"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36"
+ integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==
+ dependencies:
+ chalk "^4.0.0"
+ ci-info "^2.0.0"
+ compare-versions "^3.6.0"
+ cosmiconfig "^6.0.0"
+ find-versions "^3.2.0"
+ opencollective-postinstall "^2.0.2"
+ pkg-dir "^4.2.0"
+ please-upgrade-node "^3.2.0"
+ slash "^3.0.0"
+ which-pm-runs "^1.0.0"
+
+import-fresh@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+linguist-languages@^7.5.1:
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/linguist-languages/-/linguist-languages-7.9.0.tgz#025b421ff3acfdf9c9b34640816041bf842b5437"
+ integrity sha512-saKTpS7BH8vOOwzrZNTkFL/DuT2JN7cg6oHWY8nAjt89+pV1qFcpbjEEcZdAv9ogc4DcxVFHkXmjeyU/DiFHQw==
+
+lint-staged@>=10:
+ version "10.2.10"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.10.tgz#f0f78bf8786bbe90e1775a0dc540f7f12b6a79b2"
+ integrity sha512-dgelFaNH6puUGAcU+OVMgbfpKSerNYsPSn6+nlbRDjovL0KigpsVpCu0PFZG6BJxX8gnHJqaZlR9krZamQsb0w==
+ dependencies:
+ chalk "^4.0.0"
+ cli-truncate "2.1.0"
+ commander "^5.1.0"
+ cosmiconfig "^6.0.0"
+ debug "^4.1.1"
+ dedent "^0.7.0"
+ enquirer "^2.3.5"
+ execa "^4.0.1"
+ listr2 "^2.1.0"
+ log-symbols "^4.0.0"
+ micromatch "^4.0.2"
+ normalize-path "^3.0.0"
+ please-upgrade-node "^3.2.0"
+ string-argv "0.3.1"
+ stringify-object "^3.3.0"
+
+listr2@^2.1.0:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.1.7.tgz#8107c12c699bac778f1567739298052d8ebb9c27"
+ integrity sha512-XCC1sWLkBFFIMIRwG/LedgHUzN2XLEo02ZqXn6fwuP0GlXGE5BCuL6EAbQFb4vZB+++YEonzEXDPWQe+jCoF6Q==
+ dependencies:
+ chalk "^4.0.0"
+ cli-truncate "^2.1.0"
+ figures "^3.2.0"
+ indent-string "^4.0.0"
+ log-update "^4.0.0"
+ p-map "^4.0.0"
+ rxjs "^6.5.5"
+ through "^2.3.8"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+log-symbols@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
+ integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
+ dependencies:
+ chalk "^4.0.0"
+
+log-update@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
+ integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
+ dependencies:
+ ansi-escapes "^4.3.0"
+ cli-cursor "^3.1.0"
+ slice-ansi "^4.0.0"
+ wrap-ansi "^6.2.0"
+
+map-age-cleaner@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+mem@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-6.1.0.tgz#846eca0bd4708a8f04b9c3f3cd769e194ae63c5c"
+ integrity sha512-RlbnLQgRHk5lwqTtpEkBTQ2ll/CG/iB+J4Hy2Wh97PjgZgXgWJWrFF+XXujh3UUVLvR4OOTgZzcWMMwnehlEUg==
+ dependencies:
+ map-age-cleaner "^0.1.3"
+ mimic-fn "^3.0.0"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-fn@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b"
+ integrity sha512-PiVO95TKvhiwgSwg1IdLYlCTdul38yZxZMIcnDSFIBUm4BNZha2qpQ4GpJ++15bHoKDtrW2D69lMfFwdFYtNZQ==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+opencollective-postinstall@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
+ integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+ lines-and-columns "^1.1.6"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+php-parser@glayzzle/php-parser#5a0e2e1bf12517bd1c544c0f4e68482d0362a7b5:
+ version "3.0.1"
+ resolved "https://codeload.github.com/glayzzle/php-parser/tar.gz/5a0e2e1bf12517bd1c544c0f4e68482d0362a7b5"
+
+picomatch@^2.0.5:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+please-upgrade-node@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+ integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+ dependencies:
+ semver-compare "^1.0.0"
+
+prettier@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
+ integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+rxjs@^6.5.5:
+ version "6.5.5"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
+ integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
+ dependencies:
+ tslib "^1.9.0"
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+semver-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
+ integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+string-argv@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
+ integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+ dependencies:
+ has-flag "^4.0.0"
+
+through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+tslib@^1.9.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+ integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+
+type-fest@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+ integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
+which-pm-runs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+ integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+yaml@^1.7.2:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==