}|null */ public static function extract_input( $value, ?string $property ): ?array { if ( ! is_array( $value ) ) { return null; } $top_level = self::normalize_dynamic_input( $value ); if ( null !== $top_level ) { return $top_level; } if ( ! is_string( $property ) || '' === $property ) { return null; } $nested = $value[ $property ] ?? null; if ( ! is_array( $nested ) ) { return null; } return self::normalize_dynamic_input( $nested ); } /** * @param array $value * * @return array */ public static function extract_primitive_remainder( array $value, ?string $property ): array { if ( ! is_string( $property ) || '' === $property || ! array_key_exists( $property, $value ) ) { return []; } $remainder = $value; unset( $remainder[ $property ] ); return $remainder; } /** * @return array{name: string, settings: array}|null */ private static function normalize_dynamic_input( array $candidate ): ?array { $name = $candidate['name'] ?? null; if ( ! is_string( $name ) || '' === $name ) { return null; } $settings = $candidate['settings'] ?? []; if ( ! is_array( $settings ) ) { $settings = []; } return [ 'name' => $name, 'settings' => $settings, ]; } }