import type { UID, Modules } from '@strapi/types';
export type Populate = Modules.EntityService.Params.Populate.Any<UID.Schema>;
type PopulateOptions = {
    initialPopulate?: Populate;
    countMany?: boolean;
    countOne?: boolean;
    maxLevel?: number;
};
/**
 * Deeply populate a model based on UID
 * @param uid - Unique identifier of the model
 * @param options - Options to apply while populating
 * @param level - Current level of nested call
 */
declare const getDeepPopulate: (uid: UID.Schema, { initialPopulate, countMany, countOne, maxLevel, }?: PopulateOptions, level?: number) => {
    [key: string]: boolean | object;
};
declare const getPopulateForValidation: (uid: UID.Schema) => Record<string, any>;
declare const getDeepPopulateDraftCount: (uid: UID.Schema) => {
    populate: any;
    hasRelations: boolean;
};
/**
 *  Create a Strapi populate object which populates all attribute fields of a Strapi query.
 */
declare const getQueryPopulate: (uid: UID.Schema, query: object) => Promise<Populate>;
declare const buildDeepPopulate: (uid: UID.CollectionType) => Promise<any>;
/**
 * Restrict localizations populate to only metadata fields for localized content types.
 * Returns an empty object for non-localized content types.
 *
 * By default, localizations are deeply populated which includes all relations and
 * components for every locale — this is expensive and unnecessary for CM responses.
 * The CM only needs these fields from localizations:
 * - locale: to identify which locales exist
 * - documentId: to link to the localized document
 * - publishedAt: to determine published/draft status
 * - updatedAt: to support the modified state indicator in the UI
 */
declare const getPopulateForLocalizations: (model: UID.Schema) => {
    localizations: {
        fields: string[];
    };
} | {
    localizations?: undefined;
};
export { getDeepPopulate, getDeepPopulateDraftCount, getPopulateForValidation, getQueryPopulate, buildDeepPopulate, getPopulateForLocalizations, };
//# sourceMappingURL=populate.d.ts.map