/**
 * Normalizes relationship/upload field values by extracting IDs from nested objects
 * and returning them in the appropriate format based on whether the field is polymorphic.
 *
 * @param value - The value to normalize (can be a simple ID, or an object with relationTo and value)
 * @param relationTo - The relationTo config (string for monomorphic, array for polymorphic)
 * @returns The normalized value (simple ID for monomorphic, {relationTo, value} for polymorphic)
 *
 * @example
 * // Monomorphic field - returns simple ID
 * normalizeRelationshipValue('123', 'users') // '123'
 * normalizeRelationshipValue({ relationTo: 'users', value: '123' }, 'users') // '123'
 *
 * @example
 * // Polymorphic field - returns {relationTo, value}
 * normalizeRelationshipValue('123', ['users', 'posts']) // '123' (kept as-is, no relationTo to infer)
 * normalizeRelationshipValue({ relationTo: 'users', value: '123' }, ['users', 'posts'])
 * // { relationTo: 'users', value: '123' }
 *
 * @example
 * // Handles nested value objects (populated documents)
 * normalizeRelationshipValue(
 *   { relationTo: 'users', value: { id: '123', name: 'John' } },
 *   ['users', 'posts']
 * )
 * // { relationTo: 'users', value: '123' }
 */ export function normalizeRelationshipValue(value, relationTo) {
    const isPoly = Array.isArray(relationTo);
    // If it's already a simple ID (string or number), return as-is for non-poly or wrap for poly
    if (typeof value === 'string' || typeof value === 'number') {
        return value;
    }
    // If it's an object with relationTo and value
    if (value && typeof value === 'object' && 'relationTo' in value && 'value' in value) {
        // Extract the actual ID value, handling nested objects
        let idValue = value.value;
        while(idValue && typeof idValue === 'object' && idValue !== null && 'value' in idValue){
            idValue = idValue.value;
        }
        // If the nested value is a populated document with an ID, extract it
        if (idValue && typeof idValue === 'object' && idValue !== null && 'id' in idValue) {
            idValue = idValue.id;
        }
        // Return the normalized structure
        if (isPoly) {
            return {
                relationTo: value.relationTo,
                value: idValue
            };
        }
        return idValue;
    }
    // If it's a populated document object (has id but no relationTo/value structure)
    if (value && typeof value === 'object' && 'id' in value) {
        return value.id;
    }
    return value;
}

//# sourceMappingURL=normalizeRelationshipValue.js.map