import { FlexJsonArray, FlexJsonElement, FlexJsonObject } from "config_file.js";
export declare const excelJsonOptions: {
    allowBigint: true;
};
export type ExcelJsonElement = FlexJsonElement<typeof excelJsonOptions>;
export type ExcelJsonObject<T extends ExcelJsonElement = ExcelJsonElement> = FlexJsonObject<typeof excelJsonOptions, T>;
export type ExcelJsonArray<T extends ExcelJsonElement = ExcelJsonElement> = FlexJsonArray<typeof excelJsonOptions, T>;
export type ExcelKey = string | [string, ExcelJsonElement];
export declare const excelKeyMap: {
    readonly AvatarExcelConfigData: ["id"];
    readonly FetterInfoExcelConfigData: ["avatarId"];
    readonly AvatarCostumeExcelConfigData: ["characterId", "skinId"];
    readonly AvatarSkillDepotExcelConfigData: ["id"];
    readonly AvatarSkillExcelConfigData: ["id"];
    readonly ProudSkillExcelConfigData: ["proudSkillGroupId", "level"];
    readonly AvatarTalentExcelConfigData: ["talentId"];
    readonly AvatarPromoteExcelConfigData: ["avatarPromoteId", ["promoteLevel", 0]];
    readonly AvatarCurveExcelConfigData: ["level"];
    readonly AvatarCodexExcelConfigData: ["avatarId"];
    readonly WeaponExcelConfigData: ["id"];
    readonly WeaponPromoteExcelConfigData: ["weaponPromoteId", ["promoteLevel", 0]];
    readonly WeaponCurveExcelConfigData: ["level"];
    readonly WeaponCodexExcelConfigData: ["weaponId"];
    readonly EquipAffixExcelConfigData: ["id", ["level", 0]];
    readonly ReliquaryExcelConfigData: ["id"];
    readonly ReliquaryLevelExcelConfigData: [["rank", 0], "level"];
    readonly ReliquaryAffixExcelConfigData: ["id"];
    readonly ReliquarySetExcelConfigData: ["setId"];
    readonly ReliquaryCodexExcelConfigData: ["suitId", "level"];
    readonly ManualTextMapConfigData: ["textMapId"];
    readonly AvatarHeroEntityExcelConfigData: ["avatarId"];
    readonly TrialAvatarFetterDataConfigData: ["avatarId"];
    readonly MaterialExcelConfigData: ["id"];
    readonly FetterCharacterCardExcelConfigData: ["avatarId"];
    readonly RewardExcelConfigData: ["rewardId"];
    readonly ProfilePictureExcelConfigData: ["id"];
    readonly RoleCombatDifficultyExcelConfigData: ["difficultyId"];
};
export type ExcelType = keyof typeof excelKeyMap;
export declare const excels: ExcelType[];
export declare class ExcelTransformer {
    transform<T extends ExcelType>(excel: T, data: ExcelJsonObject[]): SingleBy<typeof excelKeyMap[T]>;
}
export type IndexBy<T, Keys extends (string | number)[]> = Keys extends [string | number, ...infer U] ? U extends (string | number)[] ? T extends ExcelJsonObject<infer V> ? IndexBy<V, U> | undefined : unknown : T extends ExcelJsonObject<infer V> ? V | undefined : unknown : T;
export declare function indexBy<T extends ExcelJsonObject, U extends (string | number)[]>(data: T, ...keys: U): IndexBy<T, U>;
export type SingleBy<Keys extends ExcelKey[]> = Keys extends [ExcelKey, ...infer T] ? T extends ExcelKey[] ? ExcelJsonObject<SingleBy<T>> : never : ExcelJsonObject;
export declare function singleBy<T extends ExcelKey[]>(array: ExcelJsonArray<ExcelJsonObject>, ...keys: T): SingleBy<T>;
