WordPress build repository browser

Changeset 60564


Ignore:
Timestamp:
11/17/2025 10:58:27 AM (8 days ago)
Author:
jorgefilipecosta
Message:

Fix: Core abilities invalid schemas (has examples and returns empty array intested of object).

This commit fixes two issues with the core abilities schemas we have:

  • They have examples on the schema with is not complient with the version draft-04 of schema JSON we are using.
  • The top level defaults are defined as an empty array and they are of type object, but a php empty array gets JSON serialized and returned in the rest API as [] instead of {}, causing problems on the client validation.

Developed in https://github.com/WordPress/wordpress-develop/pull/10510.

Props jorgefilipecosta, gziolo.
Fixes #64252.
Built from https://develop.svn.wordpress.org/branches/6.9@61252

Location:
branches/6.9/wp-includes
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/6.9/wp-includes/abilities.php

    r60411 r60564  
    221221                        'type'        => 'string',
    222222                        'description' => __( 'The database server vendor and version string reported by the driver.' ),
    223                         'examples'    => array( '8.0.34', '10.11.6-MariaDB' ),
    224223                    ),
    225224                    'wp_version'     => array(
  • branches/6.9/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-list-controller.php

    r60383 r60564  
    196196
    197197    /**
     198     * Normalizes schema empty object defaults.
     199     *
     200     * Converts empty array defaults to objects when the schema type is 'object'
     201     * to ensure proper JSON serialization as {} instead of [].
     202     *
     203     * @since 6.9.0
     204     *
     205     * @param array<string, mixed> $schema The schema array.
     206     * @return array<string, mixed> The normalized schema.
     207     */
     208    private function normalize_schema_empty_object_defaults( array $schema ): array {
     209        if ( isset( $schema['type'] ) && 'object' === $schema['type'] && isset( $schema['default'] ) ) {
     210            $default = $schema['default'];
     211            if ( is_array( $default ) && empty( $default ) ) {
     212                $schema['default'] = (object) $default;
     213            }
     214        }
     215        return $schema;
     216    }
     217
     218    /**
    198219     * Prepares an ability for response.
    199220     *
     
    210231            'description'   => $ability->get_description(),
    211232            'category'      => $ability->get_category(),
    212             'input_schema'  => $ability->get_input_schema(),
    213             'output_schema' => $ability->get_output_schema(),
     233            'input_schema'  => $this->normalize_schema_empty_object_defaults( $ability->get_input_schema() ),
     234            'output_schema' => $this->normalize_schema_empty_object_defaults( $ability->get_output_schema() ),
    214235            'meta'          => $ability->get_meta(),
    215236        );
  • branches/6.9/wp-includes/version.php

    r60563 r60564  
    1717 * @global string $wp_version
    1818 */
    19 $wp_version = '6.9-RC1-61251';
     19$wp_version = '6.9-RC1-61252';
    2020
    2121/**
Note: See TracChangeset for help on using the changeset viewer.