import { CoreType, IOttomanType } from '../schema';
import { TransactionAttemptContext } from 'couchbase';
/**
 * Cast Strategies
 * 'keep' | 'drop' | 'throw' | 'defaultOrDrop' | 'defaultOrKeep'
 *
 *  @desc
 *  When trying to cast a value to a given type if it fail Cast Strategy will behave this ways for:
 *  + 'keep' -> The original value will be returned
 *  + 'drop' -> Return undefined and the object field will be removed.
 *  + 'throw' -> Throw exception 'Value couldn't be casted to given type'
 *  + 'defaultOrDrop' -> Try to return default value if exists, if no default value was provided for the current field then it will be removed
 *  + 'defaultOrDrop' -> Try to return default value if exists, if no default value was provided for the current field then it will keep original value.
 */
export declare enum CAST_STRATEGY {
    KEEP = "keep",
    DROP = "drop",
    THROW = "throw",
    DEFAULT_OR_DROP = "defaultOrDrop",
    DEFAULT_OR_KEEP = "defaultOrKeep"
}
export declare const ensureArrayItemsType: (array: any, field: any, strategy: any) => any;
export declare const ensureTypes: (item: any, field: IOttomanType, strategy?: CAST_STRATEGY) => unknown;
export interface CastOptions {
    strategy?: CAST_STRATEGY;
    strict?: boolean;
    skip?: string[];
}
/**
 *  @desc
 *  Used when trying to apply a value to a given immutable property:
 *  + **false** -> Allow apply the new value
 *  + **true** -> Don't allow apply the new value
 *  + **'throw'** -> Throw exception "ImmutableError: Field 'field_name' is immutable and current cast strategy is set to 'throw'"
 */
export type ApplyStrategy = boolean | CAST_STRATEGY.THROW;
/**
 *  @desc
 *  Used by the mutation functions to apply the defined strategy.
 */
export type MutationFunctionOptions = {
    strict?: ApplyStrategy;
    maxExpiry?: number;
    enforceRefCheck?: boolean | 'throw';
    transactionContext?: TransactionAttemptContext;
};
export declare const cast: (data: any, schema: any, options?: CastOptions) => any;
export declare const checkCastStrategy: (value: unknown, strategy: CAST_STRATEGY, type: CoreType | IOttomanType) => unknown;
