HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/globfdxw/www/wp-content/plugins/give/src/Admin/common/prepareDefaultValuesFromSchema.ts
import { SchemaProperty } from '../types';

/**
 * @since 4.10.0
 */
export function prepareDefaultValuesFromSchema(
    record: Record<string, any>,
    schemaProperties: Record<string, SchemaProperty>
): Record<string, any> {
    const isReadOnly = (schema: SchemaProperty): boolean => {
        return schema?.readOnly || schema?.readonly;
    };

    const isObject = (value: any, schema: SchemaProperty): boolean => {
        return schema?.properties &&typeof value === "object" && value !== null && !Array.isArray(value);
    };

    const isArray = (value: any, schema: SchemaProperty): boolean => {
        return schema?.type === "array" && schema?.items && Array.isArray(value);
    };

    const processValue = (value: any, schema: SchemaProperty): any => {
        if (isObject(value, schema)) {
            return prepareDefaultValuesFromSchema(value, schema.properties as Record<string, SchemaProperty>);
        }

        if (isArray(value, schema)) {
            return value.map(item =>
                isObject(item, schema.items as SchemaProperty)
                    ? prepareDefaultValuesFromSchema(item, (schema.items as any).properties ?? {})
                    : item
            );
        }

        return value;
    };

    return Object.fromEntries(
        Object.entries(record)
            .filter(([key]) => !isReadOnly(schemaProperties[key]))
            .map(([key, value]) => [
                key,
                schemaProperties[key]
                    ? processValue(value, schemaProperties[key])
                    : value
            ])
    );
}