/**
 * DatoCMS Block Field Value Processing Utilities
 *
 * This utility provides a unified interface for working with blocks embedded within DatoCMS field values.
 * DatoCMS supports three field types that can contain blocks:
 * - Modular Content fields: arrays of blocks
 * - Single Block fields: a single block
 * - Structured Text fields: complex document structures with embedded blocks
 *
 * The challenge this solves: Each field type stores blocks differently and requires different
 * traversal logic, making it complex to perform operations like transformations, filtering,
 * or searching across blocks regardless of their containing field type.
 *
 * This utility abstracts away these differences, providing a consistent API to:
 * - Visit/iterate through all blocks in any field type
 * - Transform blocks while preserving field structure
 * - Filter blocks based on conditions
 * - Search for specific blocks
 * - Perform functional operations (map, reduce, some, every)
 *
 * All functions come in both sync and async variants to support different use cases,
 * particularly useful when block transformations require async operations like API calls.
 */
import { type TreePath } from 'datocms-structured-text-utils';
import type { BlockInRequest } from '../fieldTypes/index.js';
import type * as ApiTypes from '../generated/ApiTypes.js';
/**
 * Visit every block in a field value, calling the visitor function for each block found.
 * Supports rich text, single block, and structured text field types.
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to visit
 * @param visitor - Asynchronous function called for each block. Receives the block item and its path
 * @returns Promise that resolves when all blocks have been visited
 */
export declare function nonRecursiveVisitBlocksInNonLocalizedFieldValueAsync(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, visitor: (item: BlockInRequest, path: TreePath) => Promise<void>): Promise<void>;
/**
 * Transform blocks in a field value by applying a mapping function to each block.
 * Creates a new field value structure with transformed blocks while preserving the original structure.
 * Supports rich text, single block, and structured text field types.
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to transform
 * @param mapper - Synchronous function that transforms each block. Receives block item and path, returns new block
 * @returns The new field value with transformed blocks
 */
export declare function nonRecursiveMapBlocksInNonLocalizedFieldValue(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, mapper: (item: BlockInRequest, path: TreePath) => BlockInRequest): unknown;
/**
 * Transform blocks in a field value by applying a mapping function to each block.
 * Creates a new field value structure with transformed blocks while preserving the original structure.
 * Supports rich text, single block, and structured text field types.
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to transform
 * @param mapper - Asynchronous function that transforms each block. Receives block item and path, returns new block
 * @returns Promise that resolves to the new field value with transformed blocks
 */
export declare function nonRecursiveMapBlocksInNonLocalizedFieldValueAsync(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, mapper: (item: BlockInRequest, path: TreePath) => Promise<BlockInRequest>): Promise<unknown>;
/**
 * Find all blocks that match the predicate function.
 * Searches through all blocks in the non-localized field value and returns all matches.
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to search
 * @param predicate - Asynchronous function that tests each block. Should return true for matching blocks
 * @returns Promise that resolves to an array of objects, each containing a matching block and its path
 */
export declare function nonRecursiveFindAllBlocksInNonLocalizedFieldValueAsync(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, predicate: (item: BlockInRequest, path: TreePath) => Promise<boolean>): Promise<Array<{
    item: BlockInRequest;
    path: TreePath;
}>>;
/**
 * Filter blocks in a field value, removing those that don't match the predicate.
 * Creates a new field value containing only blocks that pass the predicate test.
 * Preserves the original field value structure and hierarchy.
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to filter
 * @param predicate - Asynchronous function that tests each block. Blocks returning false are removed
 * @returns Promise that resolves to the new field value with filtered blocks
 */
export declare function nonRecursiveFilterBlocksInNonLocalizedFieldValueAsync(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, predicate: (item: BlockInRequest, path: TreePath) => Promise<boolean>): Promise<unknown>;
/**
 * Reduce all blocks in a field value to a single value by applying a reducer function.
 * Processes each block in the non-localized field value and accumulates the results into a single value.
 *
 * @template R - The type of the accumulated result
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to reduce
 * @param reducer - Asynchronous function that processes each block and updates the accumulator
 * @param initialValue - The initial value for the accumulator
 * @returns Promise that resolves to the final accumulated value
 */
export declare function nonRecursiveReduceBlocksInNonLocalizedFieldValueAsync<R>(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, reducer: (accumulator: R, item: BlockInRequest, path: TreePath) => Promise<R>, initialValue: R): Promise<R>;
/**
 * Check if any block in the non-localized field value matches the predicate function.
 * Returns true as soon as the first matching block is found (short-circuit evaluation).
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to test
 * @param predicate - Asynchronous function that tests each block. Should return true for matching blocks
 * @returns Promise that resolves to true if any block matches, false otherwise
 */
export declare function nonRecursiveSomeBlocksInNonLocalizedFieldValueAsync(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, predicate: (item: BlockInRequest, path: TreePath) => Promise<boolean>): Promise<boolean>;
/**
 * Check if every block in the non-localized field value matches the predicate function.
 * Returns false as soon as the first non-matching block is found (short-circuit evaluation).
 *
 * @param fieldType - The type of DatoCMS field definition that determines how the value is processed
 * @param nonLocalizedFieldValue - The non-localized field value containing blocks to test
 * @param predicate - Asynchronous function that tests each block. Should return true for valid blocks
 * @returns Promise that resolves to true if all blocks match, false otherwise
 */
export declare function nonRecursiveEveryBlockInNonLocalizedFieldValueAsync(fieldType: ApiTypes.Field['field_type'], nonLocalizedFieldValue: unknown, predicate: (item: BlockInRequest, path: TreePath) => Promise<boolean>): Promise<boolean>;
