Automattic\WooCommerce\Internal\Abilities\REST

RestAbilityFactory::sanitize_schemaprivate staticWC 1.0

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() 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;
}