Automattic\WooCommerce\Internal\Abilities\REST
RestAbilityFactory::sanitize_schema
Recursively sanitize a JSON Schema node.
Fixes invalid types, deduplicates enums, and recurses into nested properties and items.
Method of the class: RestAbilityFactory{}
No Hooks.
Returns
Array. Sanitized schema node.
Usage
$result = RestAbilityFactory::sanitize_schema( $schema ): array;
- $schema(array) (required)
- A JSON Schema node.
RestAbilityFactory::sanitize_schema() RestAbilityFactory::sanitize schema code WC 10.7.0
private static function sanitize_schema( array $schema ): array {
if ( isset( $schema['type'] ) ) {
$schema = self::normalize_type( $schema, $schema['type'] );
}
if ( isset( $schema['enum'] ) ) {
$schema['enum'] = self::dedupe_enum( $schema['enum'] );
}
// Remove WordPress-style boolean 'required' — JSON Schema requires an array.
if ( isset( $schema['required'] ) && is_bool( $schema['required'] ) ) {
unset( $schema['required'] );
}
if ( isset( $schema['properties'] ) && is_array( $schema['properties'] ) ) {
// Collect required fields from nested boolean 'required' before sanitizing.
$required = array();
foreach ( $schema['properties'] as $key => $property ) {
if ( is_array( $property ) && isset( $property['required'] ) && true === $property['required'] ) {
$required[] = $key;
}
}
if ( ! empty( $required ) ) {
$schema['required'] = isset( $schema['required'] ) && is_array( $schema['required'] )
? array_values( array_unique( array_merge( $schema['required'], $required ) ) )
: $required;
}
$schema['properties'] = self::sanitize_schema_properties( $schema['properties'] );
}
if ( isset( $schema['items'] ) && is_array( $schema['items'] ) ) {
$schema['items'] = self::sanitize_schema( $schema['items'] );
}
return $schema;
}