# give/4.18.0/src/Admin/common/prepareDefaultValuesFromSchema.ts

GiveWP – Donation Plugin and Fundraising Platform, version 4.18.0. 49 lines.

- Page: https://pluginprobe.com/plugins/give/4.18.0/code/src/Admin/common/prepareDefaultValuesFromSchema.ts
- Raw: https://pluginprobe.com/plugins/give/4.18.0/raw/src/Admin/common/prepareDefaultValuesFromSchema.ts
- Modified: 2025-10-01T11:37:12+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/give/4.18.0/code/src/Admin/common/prepareDefaultValuesFromSchema.ts#L10-L20`.

```typescript
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
            ])
    );
}

```
