HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/work.naniguide.com/vendor/phpmyadmin/sql-parser/src/Tools/CustomJsonSerializer.php
<?php

declare(strict_types=1);

namespace PhpMyAdmin\SqlParser\Tools;

use ReflectionClass;
use ReflectionException;
use Zumba\JsonSerializer\JsonSerializer;

use function in_array;

/**
 * Used for .out files generation
 */
class CustomJsonSerializer extends JsonSerializer
{
    public const SKIP_PROPERTIES = [
        'ALLOWED_KEYWORDS',
        'GROUP_OPTIONS',
        'END_OPTIONS',
        'KEYWORD_PARSERS',
        'STATEMENT_PARSERS',
        'KEYWORD_NAME_INDICATORS',
        'OPERATOR_NAME_INDICATORS',
        'DEFAULT_DELIMITER',
        'PARSER_METHODS',
        'OPTIONS',
        'CLAUSES',
        'DB_OPTIONS',
        'DELIMITERS',
        'JOINS',
        'FIELDS_OPTIONS',
        'LINES_OPTIONS',
        'TRIGGER_OPTIONS',
        'FUNC_OPTIONS',
        'TABLE_OPTIONS',
        'FIELD_OPTIONS',
        'DATA_TYPE_OPTIONS',
        'REFERENCES_OPTIONS',
        'KEY_OPTIONS',
        'VIEW_OPTIONS',
        'EVENT_OPTIONS',
        'USER_OPTIONS',
        'asciiMap',
    ];

    /**
     * Extract the object data
     *
     * @param  object          $value
     * @param  ReflectionClass $ref
     * @param  string[]        $properties
     *
     * @return array<string,mixed>
     */
    protected function extractObjectData($value, $ref, $properties)
    {
        $data = [];
        foreach ($properties as $property) {
            if (in_array($property, self::SKIP_PROPERTIES, true)) {
                continue;
            }

            try {
                $propRef = $ref->getProperty($property);
                $propRef->setAccessible(true);
                $data[$property] = $propRef->getValue($value);
            } catch (ReflectionException $e) {
                $data[$property] = $value->$property;
            }
        }

        return $data;
    }
}