import type { CmsEntry, CmsEntryValues, StorageOperationsCmsModel } from "@webiny/api-headless-cms/types/index.js";
import type { CmsIndexEntry } from "../../../types.js";
import type { CmsEntryOpenSearchValuesModifier } from "../../../features/CmsEntryOpenSearchValuesModifier/index.js";
import type { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/features/graphql/index.js";
import { CompressionHandler } from "@webiny/utils/features/compression/abstractions/CompressionHandler.js";
import { CmsEntryOpenSearchFieldIndexRegistry } from "../../../features/CmsEntryOpenSearchFieldIndex/index.js";
interface BaseTransformerParams<T extends CmsEntryValues = CmsEntryValues> {
    model: StorageOperationsCmsModel<T>;
    fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;
    fieldIndexRegistry: CmsEntryOpenSearchFieldIndexRegistry.Interface;
    compressionHandler: Pick<CompressionHandler.Interface, "compress">;
    valuesModifiers: CmsEntryOpenSearchValuesModifier.Interface[];
}
interface EntryTransformerParams<T extends CmsEntryValues = CmsEntryValues> extends BaseTransformerParams<T> {
    entry: CmsEntry<T>;
    storageEntry: CmsEntry<T>;
    transformedToIndex?: never;
}
interface TransformedEntryTransformerParams<T extends CmsEntryValues = CmsEntryValues> extends BaseTransformerParams<T> {
    entry?: never;
    storageEntry?: never;
    transformedToIndex: CmsIndexEntry<T>;
}
interface TransformedKeysEntry<T extends CmsEntryValues = CmsEntryValues> {
    entry: CmsEntry<T>;
    storageEntry: CmsEntry<T>;
}
interface TransformerResult<T extends CmsEntryValues = CmsEntryValues> {
    transformEntryKeys: () => TransformedKeysEntry<T>;
    transformToIndex: () => CmsIndexEntry<T>;
    getElasticsearchLatestEntryData: () => Promise<Record<string, any>>;
    getElasticsearchPublishedEntryData: () => Promise<Record<string, any>>;
}
export declare const createTransformer: <T extends CmsEntryValues = CmsEntryValues>(params: EntryTransformerParams<T> | TransformedEntryTransformerParams<T>) => TransformerResult<T>;
export {};
