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==