From ae0820aa9e7b126a8c297eab3e8c0380cdb301a2 Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Tue, 11 Apr 2023 16:39:02 +0100 Subject: [PATCH 1/8] wip: add support for custom types and taxonomies --- src/filter-query.php | 122 +++++++++++++++++-------- tests/src/aggregate-query.test.php | 68 -------------- tests/src/filter-query.test.php | 56 ------------ tests/wp-graphql-filter-query.test.php | 13 ++- wp-graphql-filter-query.php | 18 ++-- 5 files changed, 99 insertions(+), 178 deletions(-) diff --git a/src/filter-query.php b/src/filter-query.php index 2ba86e4..b783fec 100644 --- a/src/filter-query.php +++ b/src/filter-query.php @@ -56,7 +56,7 @@ public function apply_filters_input( array $fields ): array { $args = is_array( $fields[ $post_type['plural_name'] ]['args'] ) ? $fields[ $post_type['plural_name'] ]['args'] : []; $args['filter'] = [ - 'type' => 'TaxonomyFilter', + 'type' => ucfirst( $post_type['name'] ) . 'TaxonomyFilter', 'description' => __( 'Filtering Queried Results By Taxonomy Objects', 'wp-graphql-filter-query' ), ]; @@ -98,15 +98,16 @@ public function apply_filters_input( array $fields ): array { /** * Check if operator is like or notLike * - * @param array $filter_obj A Filter object, for wpQuery access, to build upon within each recursive call. - * @param int $depth A depth-counter to track recusrive call depth. + * @param string $post_type the current post type. + * @param array $filter_obj A Filter object, for wpQuery access, to build upon within each recursive call. + * @param int $depth A depth-counter to track recusrive call depth. * * @throws FilterException Throws max nested filter depth exception, caught by wpgraphql response. * @throws FilterException Throws and/or not allowed as siblings exception, caught by wpgraphql response. * @throws FilterException Throws empty relation (and/or) exception, caught by wpgraphql response. * @return array */ - private function resolve_taxonomy( array $filter_obj, int $depth ): array { + private function resolve_taxonomy( string $post_type, array $filter_obj, int $depth ): array { if ( $depth > $this->max_nesting_depth ) { throw new FilterException( 'The Filter\'s relation allowable depth nesting has been exceeded. Please reduce to allowable (' . $this->max_nesting_depth . ') depth to proceed' ); } elseif ( array_key_exists( 'and', $filter_obj ) && array_key_exists( 'or', $filter_obj ) ) { @@ -115,24 +116,43 @@ private function resolve_taxonomy( array $filter_obj, int $depth ): array { $temp_query = []; foreach ( $filter_obj as $root_obj_key => $value ) { - if ( in_array( $root_obj_key, $this->taxonomy_keys, true ) ) { + if ( in_array( $root_obj_key, $this->relation_keys, true ) ) { + $nested_obj_array = $value; + $wp_query_array = []; + + if ( count( $nested_obj_array ) === 0 ) { + throw new FilterException( 'The Filter relation array specified has no children. Please remove the relation key or add one or more appropriate objects to proceed.' ); + } + foreach ( $nested_obj_array as $nested_obj_index => $nested_obj_value ) { + $wp_query_array[ $nested_obj_index ] = $this->resolve_taxonomy( $post_type, $nested_obj_value, ++$depth ); + $wp_query_array[ $nested_obj_index ]['relation'] = 'AND'; + } + $wp_query_array['relation'] = strtoupper( $root_obj_key ); + $temp_query[] = $wp_query_array; + } else { $attribute_array = $value; foreach ( $attribute_array as $field_key => $field_kvp ) { foreach ( $field_kvp as $operator => $terms ) { $mapped_operator = $this->operator_mappings[ $operator ] ?? 'IN'; $is_like_operator = $this->is_like_operator( $operator ); - $taxonomy = $root_obj_key === 'tag' ? 'post_tag' : 'category'; + + // TODO will have to map the taxonomy slug somehow + // i.e from wp-graphql tag translates to post_tag slug + // custom taxonomies will also have this issue + // we cannot use the graphql field name as the $root_obj_key + // will have to introduce a function called filter_query_get_taxonomy_slug($post_type, $root_obj_key). + $taxonomy_slug = $this->get_taxonomy_slug( $post_type, $root_obj_key ); $terms = ! $is_like_operator ? $terms : get_terms( [ - 'taxonomy' => $taxonomy, + 'taxonomy' => $taxonomy_slug, 'fields' => 'ids', 'name__like' => esc_attr( $terms ), ] ); $result = [ - 'taxonomy' => $taxonomy, + 'taxonomy' => $taxonomy_slug, 'field' => ( $field_key === 'id' ) || $is_like_operator ? 'term_id' : 'name', 'terms' => $terms, 'operator' => $mapped_operator, @@ -141,24 +161,31 @@ private function resolve_taxonomy( array $filter_obj, int $depth ): array { $temp_query[] = $result; } } - } elseif ( in_array( $root_obj_key, $this->relation_keys, true ) ) { - $nested_obj_array = $value; - $wp_query_array = []; - - if ( count( $nested_obj_array ) === 0 ) { - throw new FilterException( 'The Filter relation array specified has no children. Please remove the relation key or add one or more appropriate objects to proceed.' ); - } - foreach ( $nested_obj_array as $nested_obj_index => $nested_obj_value ) { - $wp_query_array[ $nested_obj_index ] = $this->resolve_taxonomy( $nested_obj_value, ++$depth ); - $wp_query_array[ $nested_obj_index ]['relation'] = 'AND'; - } - $wp_query_array['relation'] = strtoupper( $root_obj_key ); - $temp_query[] = $wp_query_array; } } return $temp_query; } + /** + * Retrieves the slug of the taxonomy associated with the specified post type and GraphQL singular name. + * + * @param string $post_type The post type for which to retrieve the taxonomy slug. + * @param string $graphql_singular_name The GraphQL singular name of the taxonomy. + * @return string|false The slug of the associated taxonomy, or false if no taxonomy is found. + */ + private function get_taxonomy_slug( string $post_type, string $graphql_singular_name ) { + $taxonomies = get_object_taxonomies( + $post_type, + 'objects' + ); + + foreach ( $taxonomies as $taxonomy ) { + if ( strtolower( $taxonomy->graphql_single_name ) === strtolower( $graphql_singular_name ) ) { + return $taxonomy->name; + } + } + } + /** * Apply facet filters using graphql_connection_query_args filter hook. * @@ -177,7 +204,8 @@ public function apply_recursive_filter_resolver( array $query_args, AbstractConn $filter_args_root = $args['filter']; - $query_args['tax_query'][] = $this->resolve_taxonomy( $filter_args_root, 0, [] ); + // TODO: handle multiple post types here. + $query_args['tax_query'][] = $this->resolve_taxonomy( $query_args['post_type'][0], $filter_args_root, 0, [] ); self::$query_args = $query_args; return $query_args; @@ -272,30 +300,46 @@ public function extend_wp_graphql_fields() { ] ); - register_graphql_input_type( - 'TaxonomyFilter', - [ + foreach ( filter_query_get_supported_post_types() as $post_type ) { + $filter_obj_name = ucfirst( $post_type['name'] ) . 'TaxonomyFilter'; + + $config = [ 'description' => __( 'Taxonomies Where Filtering Supported', 'wp-graphql-filter-query' ), 'fields' => [ - 'tag' => [ - 'type' => 'TaxonomyFilterFields', - 'description' => __( 'Tags Object Fields Allowable For Filtering', 'wp-graphql-filter-query' ), - ], - 'category' => [ - 'type' => 'TaxonomyFilterFields', - 'description' => __( 'Category Object Fields Allowable For Filtering', 'wp-graphql-filter-query' ), - ], - 'and' => [ - 'type' => [ 'list_of' => 'TaxonomyFilter' ], + 'and' => [ + 'type' => [ 'list_of' => $filter_obj_name ], 'description' => __( '\'AND\' Array of Taxonomy Objects Allowable For Filtering', 'wp-graphql-filter-query' ), ], - 'or' => [ - 'type' => [ 'list_of' => 'TaxonomyFilter' ], + 'or' => [ + 'type' => [ 'list_of' => $filter_obj_name ], 'description' => __( '\'OR\' Array of Taxonomy Objects Allowable For Filterin', 'wp-graphql-filter-query' ), ], ], - ] - ); + ]; + + // get post types. + + // get taxonomies for post types. + $taxonomies = get_object_taxonomies( + $post_type['name'], + 'objects' + ); + + foreach ( $taxonomies as $taxonomy ) { + $graphql_name = $taxonomy->graphql_single_name; + + $config['fields'][ $graphql_name ] = [ + 'type' => 'TaxonomyFilterFields', + 'description' => __( 'Category Object Fields Allowable For Filtering', 'wp-graphql-filter-query' ), + 'tester' => 'test', + ]; + } + + register_graphql_input_type( + ucfirst( $post_type['name'] ) . 'TaxonomyFilter', + $config + ); + } } /** diff --git a/tests/src/aggregate-query.test.php b/tests/src/aggregate-query.test.php index f581727..e1db2ce 100644 --- a/tests/src/aggregate-query.test.php +++ b/tests/src/aggregate-query.test.php @@ -1193,74 +1193,6 @@ public function filter_aggregations_data_provider(): array { }', '{"data": { "posts": {"aggregations" : { "tags" : [] }}}}', ], - 'pages_accept_valid_tax_filter_args' => [ - 'query { - pages( - filter: { - category: { - id: { - eq: 10 - }, - name: { - eq: "foo" - } - }, - tag: { - name: { - in: ["foo", "bar"], - like: "tst" - } - } - } - ) { - aggregations { - tags { - key - count - }, - categories { - key - count - } - } - } - }', - '{"data": { "pages": {"aggregations" : { "tags" : [], "categories" : [] }}}}', - ], - 'zombies_accept_valid_tax_filter_args' => [ - 'query { - zombies( - filter: { - category: { - id: { - eq: 10 - }, - name: { - eq: "foo" - } - }, - tag: { - name: { - in: ["foo", "bar"], - like: "tst" - } - } - } - ) { - aggregations { - tags { - key - count - }, - categories { - key - count - } - } - } - }', - '{"data": { "zombies": {"aggregations" : { "tags" : [], "categories" : [] }}}}', - ], ]; } } diff --git a/tests/src/filter-query.test.php b/tests/src/filter-query.test.php index f995159..68adaa3 100644 --- a/tests/src/filter-query.test.php +++ b/tests/src/filter-query.test.php @@ -1141,62 +1141,6 @@ public function filters_data_provider(): array { }', '{"data": { "posts": {"nodes" : []}}}', ], - 'pages_accept_valid_tax_filter_args' => [ - 'query { - pages( - filter: { - category: { - id: { - eq: 10 - }, - name: { - eq: "foo" - } - }, - tag: { - name: { - in: ["foo", "bar"], - like: "tst" - } - } - } - ) { - nodes { - title - content - } - } - }', - '{"data": { "pages": {"nodes" : []}}}', - ], - 'zombies_accept_valid_tax_filter_args' => [ - 'query { - zombies( - filter: { - category: { - id: { - eq: 10 - }, - name: { - eq: "foo" - } - }, - tag: { - name: { - in: ["foo", "bar"], - like: "tst" - } - } - } - ) { - nodes { - title - content - } - } - }', - '{"data": { "zombies": {"nodes" : []}}}', - ], 'posts_reject_invalid_tax_filter_args' => [ 'query { posts( diff --git a/tests/wp-graphql-filter-query.test.php b/tests/wp-graphql-filter-query.test.php index 1f99ca3..82481a3 100644 --- a/tests/wp-graphql-filter-query.test.php +++ b/tests/wp-graphql-filter-query.test.php @@ -58,26 +58,31 @@ protected function setUp(): void { public function test_filter_query_get_supported_post_types() { $post_types = filter_query_get_supported_post_types(); $expected_types = [ - 'post' => [ + 'post' => [ 'name' => 'post', 'capitalize_name' => 'Post', 'plural_name' => 'posts', ], - 'page' => [ + 'page' => [ 'name' => 'page', 'capitalize_name' => 'Page', 'plural_name' => 'pages', ], - 'zombie' => [ + 'zombie' => [ 'name' => 'zombie', 'capitalize_name' => 'Zombie', 'plural_name' => 'zombies', ], - 'vampire' => [ + 'vampire' => [ 'name' => 'vampire', 'capitalize_name' => 'Vampire', 'plural_name' => 'vampires', ], + 'attachment' => [ + 'name' => 'attachment', + 'capitalize_name' => 'Attachment', + 'plural_name' => 'media', + ], ]; $this->assertEquals( $expected_types, $post_types ); } diff --git a/wp-graphql-filter-query.php b/wp-graphql-filter-query.php index bfa264d..d1c3226 100644 --- a/wp-graphql-filter-query.php +++ b/wp-graphql-filter-query.php @@ -43,25 +43,21 @@ * @return array */ function filter_query_get_supported_post_types(): array { - $built_ins = [ 'post', 'page' ]; $type_objects = array(); - $cpt_type_names = get_post_types( + $post_types = get_post_types( [ 'public' => true, - '_builtin' => false, 'show_in_graphql' => true, ], - 'names' + 'objects' ); - $type_names = array_merge( $built_ins, $cpt_type_names ); - - foreach ( $type_names as $type_name ) { - $type_objects[ $type_name ] = array( - 'name' => $type_name, - 'capitalize_name' => ucwords( $type_name ), - 'plural_name' => strtolower( get_post_type_object( $type_name )->label ), + foreach ( $post_types as $post_type ) { + $type_objects[ $post_type->name ] = array( + 'name' => $post_type->name, + 'capitalize_name' => ucwords( $post_type->name ), + 'plural_name' => strtolower( $post_type->label ), ); } From 195dae51e2720588c5cfcd53c5e1715886faf44f Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Tue, 11 Apr 2023 16:40:02 +0100 Subject: [PATCH 2/8] remove TODO comment --- src/filter-query.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/filter-query.php b/src/filter-query.php index b783fec..d88bfe6 100644 --- a/src/filter-query.php +++ b/src/filter-query.php @@ -135,13 +135,7 @@ private function resolve_taxonomy( string $post_type, array $filter_obj, int $de foreach ( $field_kvp as $operator => $terms ) { $mapped_operator = $this->operator_mappings[ $operator ] ?? 'IN'; $is_like_operator = $this->is_like_operator( $operator ); - - // TODO will have to map the taxonomy slug somehow - // i.e from wp-graphql tag translates to post_tag slug - // custom taxonomies will also have this issue - // we cannot use the graphql field name as the $root_obj_key - // will have to introduce a function called filter_query_get_taxonomy_slug($post_type, $root_obj_key). - $taxonomy_slug = $this->get_taxonomy_slug( $post_type, $root_obj_key ); + $taxonomy_slug = $this->get_taxonomy_slug( $post_type, $root_obj_key ); $terms = ! $is_like_operator ? $terms : get_terms( [ From 9ca36a158c377ed89a63578548cb36ab31e3eeaf Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Tue, 11 Apr 2023 17:14:41 +0100 Subject: [PATCH 3/8] Add tests for CPT with Custom taxonomy --- tests/src/aggregate-query.test.php | 34 +++++++++++++++++++ tests/src/filter-query.test.php | 54 +++++++++++++++++++++++++++++- 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/tests/src/aggregate-query.test.php b/tests/src/aggregate-query.test.php index e1db2ce..9c7f36b 100644 --- a/tests/src/aggregate-query.test.php +++ b/tests/src/aggregate-query.test.php @@ -76,6 +76,40 @@ protected function setUp(): void { 'graphql_plural_name' => 'zombies', ) ); + + // Set up the labels for the custom taxonomy. + $labels = array( + 'name' => __( 'Sports', 'textdomain' ), + 'singular_name' => __( 'Sport', 'textdomain' ), + 'search_items' => __( 'Search Sports', 'textdomain' ), + 'all_items' => __( 'All Sports', 'textdomain' ), + 'parent_item' => __( 'Parent Sport', 'textdomain' ), + 'parent_item_colon' => __( 'Parent Sport:', 'textdomain' ), + 'edit_item' => __( 'Edit Sport', 'textdomain' ), + 'update_item' => __( 'Update Sport', 'textdomain' ), + 'add_new_item' => __( 'Add New Sport', 'textdomain' ), + 'new_item_name' => __( 'New Sport Name', 'textdomain' ), + 'menu_name' => __( 'Sports', 'textdomain' ), + ); + + // Set up the arguments for the custom taxonomy. + $args = array( + 'labels' => $labels, + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'rewrite' => array( 'slug' => 'sport' ), + 'show_in_graphql' => true, + 'graphql_single_name' => 'sport', + 'graphql_plural_name' => 'sports', + + ); + + // Register the custom taxonomy. + register_taxonomy( 'sport', 'zombie', $args ); } public function data_for_schema_exists_for_aggregations(): array { diff --git a/tests/src/filter-query.test.php b/tests/src/filter-query.test.php index 68adaa3..8503a9d 100644 --- a/tests/src/filter-query.test.php +++ b/tests/src/filter-query.test.php @@ -83,6 +83,40 @@ protected function setUp(): void { 'graphql_plural_name' => 'zombies', ) ); + + // Set up the labels for the custom taxonomy. + $labels = array( + 'name' => __( 'Sports', 'textdomain' ), + 'singular_name' => __( 'Sport', 'textdomain' ), + 'search_items' => __( 'Search Sports', 'textdomain' ), + 'all_items' => __( 'All Sports', 'textdomain' ), + 'parent_item' => __( 'Parent Sport', 'textdomain' ), + 'parent_item_colon' => __( 'Parent Sport:', 'textdomain' ), + 'edit_item' => __( 'Edit Sport', 'textdomain' ), + 'update_item' => __( 'Update Sport', 'textdomain' ), + 'add_new_item' => __( 'Add New Sport', 'textdomain' ), + 'new_item_name' => __( 'New Sport Name', 'textdomain' ), + 'menu_name' => __( 'Sports', 'textdomain' ), + ); + + // Set up the arguments for the custom taxonomy. + $args = array( + 'labels' => $labels, + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'rewrite' => array( 'slug' => 'sport' ), + 'show_in_graphql' => true, + 'graphql_single_name' => 'sport', + 'graphql_plural_name' => 'sports', + + ); + + // Register the custom taxonomy. + register_taxonomy( 'sport', 'zombie', $args ); } /** @@ -303,7 +337,25 @@ public function filters_data_provider(): array { }', '{"data": { "posts": {"nodes" : [{"title": "dog" , "content" : "

this is a dog

\n"}, {"title": "cat" , "content" : "

this is a cat

\n"}]}}}', ], - + 'zombie_valid_filter_sport_name_eq' => [ + 'query { + zombies( + filter: { + sport: { + name: { + eq: "football" + } + } + } + ) { + nodes { + title + content + } + } + }', + '{"data": { "zombies": {"nodes" : []}}}', + ], 'posts_valid_filter_category_name_in' => [ 'query { posts( From e4bd4f88fd5f4cad6234916708e8ba2612e2349b Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Tue, 11 Apr 2023 19:50:24 +0100 Subject: [PATCH 4/8] chore: update WordPress and PHP versions --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 277d7cf..2b3fa32 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -ARG PHP_VERSION=7.4 -ARG WORDPRESS_VERSION=5.9.3 +ARG PHP_VERSION=8.0 +ARG WORDPRESS_VERSION=6.2 FROM wordpress:${WORDPRESS_VERSION}-php${PHP_VERSION}-apache From 9cb3410bada540d7620c118a02e85e537c1a456c Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Wed, 12 Apr 2023 09:48:50 +0100 Subject: [PATCH 5/8] chore: tidy up code and comments --- src/filter-query.php | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/filter-query.php b/src/filter-query.php index d88bfe6..0d69eba 100644 --- a/src/filter-query.php +++ b/src/filter-query.php @@ -36,7 +36,6 @@ class FilterQuery { */ public function add_hooks(): void { add_action( 'graphql_register_types', [ $this, 'extend_wp_graphql_fields' ] ); - add_filter( 'graphql_RootQuery_fields', [ $this, 'apply_filters_input' ], 20 ); add_filter( 'graphql_connection_query_args', [ $this, 'apply_recursive_filter_resolver' ], 10, 2 ); } @@ -81,13 +80,6 @@ public function apply_filters_input( array $fields ): array { 'notLike' => 'NOT IN', ); - /** - * $taxonomy_keys. - * - * @var array - */ - public $taxonomy_keys = [ 'tag', 'category' ]; - /** * $relation_keys. * @@ -100,11 +92,11 @@ public function apply_filters_input( array $fields ): array { * * @param string $post_type the current post type. * @param array $filter_obj A Filter object, for wpQuery access, to build upon within each recursive call. - * @param int $depth A depth-counter to track recusrive call depth. + * @param int $depth A depth-counter to track recursive call depth. * - * @throws FilterException Throws max nested filter depth exception, caught by wpgraphql response. - * @throws FilterException Throws and/or not allowed as siblings exception, caught by wpgraphql response. - * @throws FilterException Throws empty relation (and/or) exception, caught by wpgraphql response. + * @throws FilterException Throws max nested filter depth exception, caught by WPGraphQL response. + * @throws FilterException Throws and/or not allowed as siblings exception, caught by WPGraphQL response. + * @throws FilterException Throws empty relation (and/or) exception, caught by WPGraphQL response. * @return array */ private function resolve_taxonomy( string $post_type, array $filter_obj, int $depth ): array { @@ -306,31 +298,25 @@ public function extend_wp_graphql_fields() { ], 'or' => [ 'type' => [ 'list_of' => $filter_obj_name ], - 'description' => __( '\'OR\' Array of Taxonomy Objects Allowable For Filterin', 'wp-graphql-filter-query' ), + 'description' => __( '\'OR\' Array of Taxonomy Objects Allowable For Filtering', 'wp-graphql-filter-query' ), ], ], ]; - // get post types. - - // get taxonomies for post types. - $taxonomies = get_object_taxonomies( - $post_type['name'], - 'objects' - ); + $taxonomies = get_object_taxonomies( + $post_type['name'], + 'objects' + ); foreach ( $taxonomies as $taxonomy ) { - $graphql_name = $taxonomy->graphql_single_name; - - $config['fields'][ $graphql_name ] = [ + $config['fields'][ $taxonomy->graphql_single_name ] = [ 'type' => 'TaxonomyFilterFields', - 'description' => __( 'Category Object Fields Allowable For Filtering', 'wp-graphql-filter-query' ), - 'tester' => 'test', + 'description' => __( 'Object Fields Allowable For Filtering', 'wp-graphql-filter-query' ), ]; } register_graphql_input_type( - ucfirst( $post_type['name'] ) . 'TaxonomyFilter', + $filter_obj_name, $config ); } From eb111fdeb7e0bc337ad190368afe9bb3e4f03675 Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Wed, 13 Dec 2023 10:42:53 +0000 Subject: [PATCH 6/8] chore: upgrade deps and deprecated call --- Dockerfile | 2 +- composer.lock | 661 +++++++++++++++++++++++++------------------ docker-compose.yml | 2 +- src/filter-query.php | 2 +- 4 files changed, 390 insertions(+), 277 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2b3fa32..7ac85ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG PHP_VERSION=8.0 -ARG WORDPRESS_VERSION=6.2 +ARG WORDPRESS_VERSION=6.4 FROM wordpress:${WORDPRESS_VERSION}-php${PHP_VERSION}-apache diff --git a/composer.lock b/composer.lock index 2afd85d..eabc421 100644 --- a/composer.lock +++ b/composer.lock @@ -9,16 +9,16 @@ "packages-dev": [ { "name": "appsero/client", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/Appsero/client.git", - "reference": "5c3fdc4945c8680bca6fb01eee1ec5dc4f22de87" + "reference": "d110c537f4ca92ac7f3398eee67cc6bdf506a4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Appsero/client/zipball/5c3fdc4945c8680bca6fb01eee1ec5dc4f22de87", - "reference": "5c3fdc4945c8680bca6fb01eee1ec5dc4f22de87", + "url": "https://api.github.com/repos/Appsero/client/zipball/d110c537f4ca92ac7f3398eee67cc6bdf506a4fb", + "reference": "d110c537f4ca92ac7f3398eee67cc6bdf506a4fb", "shasum": "" }, "require": { @@ -49,9 +49,9 @@ ], "support": { "issues": "https://github.com/Appsero/client/issues", - "source": "https://github.com/Appsero/client/tree/v1.2.0" + "source": "https://github.com/Appsero/client/tree/v1.2.1" }, - "time": "2020-09-10T09:10:28+00:00" + "time": "2022-06-30T12:01:38+00:00" }, { "name": "clue/stdio-react", @@ -204,16 +204,16 @@ }, { "name": "clue/utf8-react", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/clue/reactphp-utf8.git", - "reference": "8bc3f8c874cdf642c8f10f9ae93aadb8cd63da96" + "reference": "d5cd04d39cb5457aa5df830b7c4b301d2694217e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-utf8/zipball/8bc3f8c874cdf642c8f10f9ae93aadb8cd63da96", - "reference": "8bc3f8c874cdf642c8f10f9ae93aadb8cd63da96", + "url": "https://api.github.com/repos/clue/reactphp-utf8/zipball/d5cd04d39cb5457aa5df830b7c4b301d2694217e", + "reference": "d5cd04d39cb5457aa5df830b7c4b301d2694217e", "shasum": "" }, "require": { @@ -221,7 +221,7 @@ "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4 || ^0.3" }, "require-dev": { - "phpunit/phpunit": "^9.3 ||^5.7 || ^4.8", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", "react/stream": "^1.0 || ^0.7" }, "type": "library", @@ -251,7 +251,7 @@ ], "support": { "issues": "https://github.com/clue/reactphp-utf8/issues", - "source": "https://github.com/clue/reactphp-utf8/tree/v1.2.0" + "source": "https://github.com/clue/reactphp-utf8/tree/v1.3.0" }, "funding": [ { @@ -263,7 +263,7 @@ "type": "github" } ], - "time": "2020-11-06T11:48:09+00:00" + "time": "2023-12-06T14:52:17+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -340,32 +340,79 @@ }, "time": "2022-02-04T12:51:07+00:00" }, + { + "name": "doctrine/deprecations", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + }, + "time": "2023-09-27T20:04:15+00:00" + }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -392,7 +439,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -408,32 +455,32 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "evenement/evenement", - "version": "v3.0.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/igorw/evenement.git", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7" + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", "autoload": { - "psr-0": { - "Evenement": "src" + "psr-4": { + "Evenement\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -453,27 +500,27 @@ ], "support": { "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/master" + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "time": "2017-07-23T21:35:13+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { "name": "ivome/graphql-relay-php", - "version": "v0.6.0", + "version": "v0.7.0", "source": { "type": "git", "url": "https://github.com/ivome/graphql-relay-php.git", - "reference": "7055fd45b7e552cee4d1290849b84294b0049373" + "reference": "06bd176103618d896197d85d04a3a17c91e39698" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ivome/graphql-relay-php/zipball/7055fd45b7e552cee4d1290849b84294b0049373", - "reference": "7055fd45b7e552cee4d1290849b84294b0049373", + "url": "https://api.github.com/repos/ivome/graphql-relay-php/zipball/06bd176103618d896197d85d04a3a17c91e39698", + "reference": "06bd176103618d896197d85d04a3a17c91e39698", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", - "webonyx/graphql-php": "^14.0" + "webonyx/graphql-php": "^14.0 || ^15.0" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", @@ -498,9 +545,9 @@ ], "support": { "issues": "https://github.com/ivome/graphql-relay-php/issues", - "source": "https://github.com/ivome/graphql-relay-php/tree/v0.6.0" + "source": "https://github.com/ivome/graphql-relay-php/tree/v0.7.0" }, - "time": "2021-04-24T19:31:29+00:00" + "time": "2023-10-20T15:43:03+00:00" }, { "name": "jolicode/jolinotif", @@ -566,16 +613,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -613,7 +660,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -621,7 +668,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "phar-io/manifest", @@ -854,16 +901,16 @@ }, { "name": "phpcompatibility/phpcompatibility-paragonie", - "version": "1.3.1", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", - "reference": "ddabec839cc003651f2ce695c938686d1086cf43" + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/ddabec839cc003651f2ce695c938686d1086cf43", - "reference": "ddabec839cc003651f2ce695c938686d1086cf43", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", "shasum": "" }, "require": { @@ -900,26 +947,27 @@ "paragonie", "phpcs", "polyfill", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" }, - "time": "2021-02-15T10:24:51+00:00" + "time": "2022-10-25T01:46:02+00:00" }, { "name": "phpcompatibility/phpcompatibility-wp", - "version": "2.1.3", + "version": "2.1.4", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", - "reference": "d55de55f88697b9cdb94bccf04f14eb3b11cf308" + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/d55de55f88697b9cdb94bccf04f14eb3b11cf308", - "reference": "d55de55f88697b9cdb94bccf04f14eb3b11cf308", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", "shasum": "" }, "require": { @@ -954,13 +1002,14 @@ "compatibility", "phpcs", "standards", + "static analysis", "wordpress" ], "support": { "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" }, - "time": "2021-12-30T16:37:40+00:00" + "time": "2022-10-24T09:00:36+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1074,25 +1123,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -1118,34 +1175,35 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2023-08-12T11:01:26+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.15.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "reference": "d4f454f7e1193933f04e6500de3e79191648ed0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d4f454f7e1193933f04e6500de3e79191648ed0c", + "reference": "d4f454f7e1193933f04e6500de3e79191648ed0c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", + "doctrine/instantiator": "^1.2 || ^2.0", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*", "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "sebastian/comparator": "^3.0 || ^4.0 || ^5.0", + "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0" }, "require-dev": { "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" }, "type": "library", "extra": { @@ -1178,6 +1236,7 @@ "keywords": [ "Double", "Dummy", + "dev", "fake", "mock", "spy", @@ -1185,9 +1244,56 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.18.0" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2023-12-07T16:22:33+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.24.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" + }, + "time": "2023-11-26T18:29:22+00:00" }, { "name": "phpunit/php-code-coverage", @@ -1618,33 +1724,31 @@ }, { "name": "react/event-loop", - "version": "v1.3.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137" + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/187fb56f46d424afb6ec4ad089269c72eec2e137", - "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", "shasum": "" }, "require": { "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, "suggest": { - "ext-event": "~1.0 for ExtEventLoop", - "ext-pcntl": "For signal handling support when using the StreamSelectLoop", - "ext-uv": "* for ExtUvLoop" + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" }, "type": "library", "autoload": { "psr-4": { - "React\\EventLoop\\": "src" + "React\\EventLoop\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1680,32 +1784,28 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.3.0" + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2022-03-17T11:10:22+00:00" + "time": "2023-11-13T13:48:05+00:00" }, { "name": "react/stream", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/stream.git", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9" + "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9", + "url": "https://api.github.com/repos/reactphp/stream/zipball/6fbc9672905c7d5a885f2da2fc696f65840f4a66", + "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66", "shasum": "" }, "require": { @@ -1715,12 +1815,12 @@ }, "require-dev": { "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" }, "type": "library", "autoload": { "psr-4": { - "React\\Stream\\": "src" + "React\\Stream\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1762,19 +1862,15 @@ ], "support": { "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.2.0" + "source": "https://github.com/reactphp/stream/tree/v1.3.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2021-07-11T12:37:55+00:00" + "time": "2023-06-16T10:52:11+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1833,16 +1929,16 @@ }, { "name": "sebastian/comparator", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { @@ -1895,7 +1991,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, "funding": [ { @@ -1903,20 +1999,20 @@ "type": "github" } ], - "time": "2020-11-30T08:04:30+00:00" + "time": "2022-09-14T12:31:48+00:00" }, { "name": "sebastian/diff", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" + "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae", + "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae", "shasum": "" }, "require": { @@ -1961,7 +2057,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4" }, "funding": [ { @@ -1969,7 +2065,7 @@ "type": "github" } ], - "time": "2020-11-30T07:59:04+00:00" + "time": "2023-05-07T05:30:20+00:00" }, { "name": "sebastian/environment", @@ -2036,16 +2132,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.4", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", "shasum": "" }, "require": { @@ -2101,7 +2197,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" }, "funding": [ { @@ -2109,7 +2205,7 @@ "type": "github" } ], - "time": "2021-11-11T13:51:24+00:00" + "time": "2022-09-14T06:00:17+00:00" }, { "name": "sebastian/global-state", @@ -2506,16 +2602,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.6.2", + "version": "3.8.0", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5805f7a4e4958dbb5e944ef1e6edae0a303765e7", + "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7", "shasum": "" }, "require": { @@ -2525,7 +2621,7 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/phpcs", @@ -2544,34 +2640,58 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2021-12-12T21:44:58+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T12:32:31+00:00" }, { "name": "symfony/console", - "version": "v5.4.9", + "version": "v5.4.32", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" + "reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", + "url": "https://api.github.com/repos/symfony/console/zipball/c70df1ffaf23a8d340bded3cfab1b86752ad6ed7", + "reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7", "shasum": "" }, "require": { @@ -2636,12 +2756,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.9" + "source": "https://github.com/symfony/console/tree/v5.4.32" }, "funding": [ { @@ -2657,11 +2777,11 @@ "type": "tidelift" } ], - "time": "2022-05-18T06:17:34+00:00" + "time": "2023-11-18T18:23:04+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -2708,7 +2828,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, "funding": [ { @@ -2728,16 +2848,16 @@ }, { "name": "symfony/finder", - "version": "v5.4.8", + "version": "v5.4.27", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", + "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", "shasum": "" }, "require": { @@ -2771,7 +2891,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.8" + "source": "https://github.com/symfony/finder/tree/v5.4.27" }, "funding": [ { @@ -2787,20 +2907,20 @@ "type": "tidelift" } ], - "time": "2022-04-15T08:07:45+00:00" + "time": "2023-07-31T08:02:31+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -2815,7 +2935,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2853,7 +2973,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -2869,20 +2989,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -2894,7 +3014,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2934,7 +3054,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -2950,20 +3070,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -2975,7 +3095,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3018,7 +3138,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -3034,20 +3154,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -3062,7 +3182,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3101,7 +3221,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -3117,20 +3237,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", "shasum": "" }, "require": { @@ -3139,7 +3259,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3180,7 +3300,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" }, "funding": [ { @@ -3196,20 +3316,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -3218,7 +3338,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3263,7 +3383,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -3279,20 +3399,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", - "version": "v5.4.8", + "version": "v5.4.28", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" + "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "url": "https://api.github.com/repos/symfony/process/zipball/45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b", + "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b", "shasum": "" }, "require": { @@ -3325,7 +3445,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.8" + "source": "https://github.com/symfony/process/tree/v5.4.28" }, "funding": [ { @@ -3341,20 +3461,20 @@ "type": "tidelift" } ], - "time": "2022-04-08T05:07:18+00:00" + "time": "2023-08-07T10:36:04+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.1", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { @@ -3408,7 +3528,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -3424,20 +3544,20 @@ "type": "tidelift" } ], - "time": "2022-03-13T20:07:29+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", - "version": "v5.4.9", + "version": "v5.4.32", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + "reference": "91bf4453d65d8231688a04376c3a40efe0770f04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "url": "https://api.github.com/repos/symfony/string/zipball/91bf4453d65d8231688a04376c3a40efe0770f04", + "reference": "91bf4453d65d8231688a04376c3a40efe0770f04", "shasum": "" }, "require": { @@ -3494,7 +3614,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.9" + "source": "https://github.com/symfony/string/tree/v5.4.32" }, "funding": [ { @@ -3510,20 +3630,20 @@ "type": "tidelift" } ], - "time": "2022-04-19T10:40:37+00:00" + "time": "2023-11-26T13:43:46+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.3", + "version": "v5.4.31", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" + "reference": "f387675d7f5fc4231f7554baa70681f222f73563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f387675d7f5fc4231f7554baa70681f222f73563", + "reference": "f387675d7f5fc4231f7554baa70681f222f73563", "shasum": "" }, "require": { @@ -3569,7 +3689,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.3" + "source": "https://github.com/symfony/yaml/tree/v5.4.31" }, "funding": [ { @@ -3585,20 +3705,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:32:32+00:00" + "time": "2023-11-03T14:41:28+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -3627,7 +3747,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -3635,25 +3755,25 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -3691,43 +3811,42 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" }, { "name": "webonyx/graphql-php", - "version": "v14.9.0", + "version": "v14.11.10", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "36b83621deb5eae354347a2e86dc7aec81b32a82" + "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/36b83621deb5eae354347a2e86dc7aec81b32a82", - "reference": "36b83621deb5eae354347a2e86dc7aec81b32a82", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/d9c2fdebc6aa01d831bc2969da00e8588cffef19", + "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "php": "^7.1||^8.0" + "php": "^7.1 || ^8" }, "require-dev": { "amphp/amp": "^2.3", "doctrine/coding-standard": "^6.0", "nyholm/psr7": "^1.2", - "phpbench/phpbench": "^0.16.10", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "0.12.82", "phpstan/phpstan-phpunit": "0.12.18", "phpstan/phpstan-strict-rules": "0.12.9", - "phpunit/phpunit": "^7.2|^8.5", + "phpunit/phpunit": "^7.2 || ^8.5", "psr/http-message": "^1.0", "react/promise": "2.*", - "simpod/php-coveralls-mirror": "^3.0", - "squizlabs/php_codesniffer": "3.5.4" + "simpod/php-coveralls-mirror": "^3.0" }, "suggest": { "psr/http-message": "To use standard GraphQL server", @@ -3751,7 +3870,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v14.9.0" + "source": "https://github.com/webonyx/graphql-php/tree/v14.11.10" }, "funding": [ { @@ -3759,7 +3878,7 @@ "type": "open_collective" } ], - "time": "2021-06-15T16:14:17+00:00" + "time": "2023-07-05T14:23:37+00:00" }, { "name": "wp-coding-standards/wpcs", @@ -3814,26 +3933,26 @@ }, { "name": "wp-graphql/wp-graphql", - "version": "v1.8.2", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/wp-graphql/wp-graphql.git", - "reference": "ca6440ee05285b6119c11a12d653df0fd90b3e09" + "reference": "162424b8b1afeb2bf706dd08beca5783f80c1db3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-graphql/wp-graphql/zipball/ca6440ee05285b6119c11a12d653df0fd90b3e09", - "reference": "ca6440ee05285b6119c11a12d653df0fd90b3e09", + "url": "https://api.github.com/repos/wp-graphql/wp-graphql/zipball/162424b8b1afeb2bf706dd08beca5783f80c1db3", + "reference": "162424b8b1afeb2bf706dd08beca5783f80c1db3", "shasum": "" }, "require": { - "appsero/client": "^1.2", - "ivome/graphql-relay-php": "0.6.0", + "appsero/client": "1.2.1", + "ivome/graphql-relay-php": "0.7.0", "php": "^7.1 || ^8.0", - "webonyx/graphql-php": "14.9.0" + "webonyx/graphql-php": "14.11.10" }, "require-dev": { - "automattic/vipwpcs": "^2.2", + "automattic/vipwpcs": "^3.0", "codeception/module-asserts": "^1.0", "codeception/module-cli": "^1.0", "codeception/module-db": "^1.0", @@ -3842,25 +3961,20 @@ "codeception/module-rest": "^1.2", "codeception/module-webdriver": "^1.0", "codeception/util-universalframework": "^1.0", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", - "lucatume/wp-browser": "3.1.0", + "lucatume/wp-browser": "^3.1.6", "phpcompatibility/phpcompatibility-wp": "^2.1", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "0.12.82", - "phpunit/phpunit": "^8.5", + "phpstan/phpstan": "~1.10.18", + "phpunit/phpunit": "^9.5", "simpod/php-coveralls-mirror": "^3.0", - "squizlabs/php_codesniffer": "^3.5.7", - "szepeviktor/phpstan-wordpress": "^0.7.1", - "wp-coding-standards/wpcs": "^2.3", - "wp-graphql/wp-graphql-testcase": "~2.1" + "slevomat/coding-standard": "^8.9", + "szepeviktor/phpstan-wordpress": "~1.3.0", + "wp-cli/wp-cli-bundle": "^2.8", + "wp-graphql/wp-graphql-testcase": "~2.3" }, "type": "wordpress-plugin", "autoload": { - "files": [ - "access-functions.php", - "activation.php", - "deactivation.php" - ], + "files": [], "psr-4": { "WPGraphQL\\": "src/" } @@ -3890,22 +4004,22 @@ "description": "GraphQL API for WordPress", "support": { "issues": "https://github.com/wp-graphql/wp-graphql/issues", - "source": "https://github.com/wp-graphql/wp-graphql/tree/v1.8.2" + "source": "https://github.com/wp-graphql/wp-graphql/tree/v1.19.0" }, - "time": "2022-05-17T20:43:01+00:00" + "time": "2023-11-14T22:58:31+00:00" }, { "name": "yoast/phpunit-polyfills", - "version": "1.0.3", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "5ea3536428944955f969bc764bbe09738e151ada" + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/5ea3536428944955f969bc764bbe09738e151ada", - "reference": "5ea3536428944955f969bc764bbe09738e151ada", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/224e4a1329c03d8bad520e3fc4ec980034a4b212", + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212", "shasum": "" }, "require": { @@ -3913,13 +4027,12 @@ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "require-dev": { - "yoast/yoastcs": "^2.2.0" + "yoast/yoastcs": "^2.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev", - "dev-develop": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -3953,7 +4066,7 @@ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2021-11-23T01:37:03+00:00" + "time": "2023-08-19T14:25:08+00:00" }, { "name": "yosymfony/resource-watcher", @@ -4023,5 +4136,5 @@ "platform-overrides": { "php": "7.4.23" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/docker-compose.yml b/docker-compose.yml index 5700c79..d578065 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,7 @@ services: - ./.wordpress/wordpress:/var/www/html - ./:/var/www/html/wp-content/plugins/wp-graphql-filter-query ports: - - 8080:80 + - 8081:80 depends_on: - db diff --git a/src/filter-query.php b/src/filter-query.php index 0d69eba..7c00a52 100644 --- a/src/filter-query.php +++ b/src/filter-query.php @@ -181,7 +181,7 @@ private function get_taxonomy_slug( string $post_type, string $graphql_singular_ * @return array */ public function apply_recursive_filter_resolver( array $query_args, AbstractConnectionResolver $connection_resolver ): array { - $args = $connection_resolver->getArgs(); + $args = $connection_resolver->get_args(); $this->max_nesting_depth = $this->get_query_depth(); if ( empty( $args['filter'] ) ) { From b2e96be3ddb25b8a66136f01afaf3eb1fa91e1c4 Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Wed, 13 Dec 2023 11:37:51 +0000 Subject: [PATCH 7/8] chore: skip taxonomies with no wp-graphql config --- src/filter-query.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/filter-query.php b/src/filter-query.php index 7c00a52..e6ed3e6 100644 --- a/src/filter-query.php +++ b/src/filter-query.php @@ -309,6 +309,11 @@ public function extend_wp_graphql_fields() { ); foreach ( $taxonomies as $taxonomy ) { + // Skip if no graphql config found + if($taxonomy->graphql_single_name == null) { + continue; + } + $config['fields'][ $taxonomy->graphql_single_name ] = [ 'type' => 'TaxonomyFilterFields', 'description' => __( 'Object Fields Allowable For Filtering', 'wp-graphql-filter-query' ), From d476630c46eab40e66dd9f4e564da9622ef1bda8 Mon Sep 17 00:00:00 2001 From: Shane Daly Date: Wed, 13 Dec 2023 11:42:35 +0000 Subject: [PATCH 8/8] chore: linting --- .vscode/settings.json | 2 ++ src/filter-query.php | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 83f289e..3da368e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,4 +8,6 @@ "phpSniffer.autoDetect": true, "editor.formatOnSaveTimeout": 5000, "phpcbf.debug": true, + "phpsab.executablePathCBF": "vendor/bin/phpcbf", + "phpsab.executablePathCS": "vendor/bin/phpcs", } \ No newline at end of file diff --git a/src/filter-query.php b/src/filter-query.php index e6ed3e6..aa5f1c9 100644 --- a/src/filter-query.php +++ b/src/filter-query.php @@ -309,8 +309,8 @@ public function extend_wp_graphql_fields() { ); foreach ( $taxonomies as $taxonomy ) { - // Skip if no graphql config found - if($taxonomy->graphql_single_name == null) { + // Skip if no graphql config found. + if ( $taxonomy->graphql_single_name === null ) { continue; }