import { StringForUnion } from '@latticexyz/common/type-utils';
import { S as StoreConfig, d as TableConfig, U as UserTypesConfig } from './storeConfig-6528f30c.js';
import { UserType } from '@latticexyz/common/codegen';
import { SchemaAbiType } from '@latticexyz/schema-type/internal';

/**
 * @internal Internal only
 * @deprecated Internal only
 */
type ResolvedStoreConfig<TStoreConfig extends StoreConfig> = {
    tables: {
        [TableKey in keyof TStoreConfig["tables"] & string]: ResolvedTableConfig<TStoreConfig["tables"][TableKey], TStoreConfig["userTypes"], keyof TStoreConfig["enums"] & string, TStoreConfig["namespace"], TableKey>;
    };
};
type ResolvedTableConfig<TTableConfig extends TableConfig, TUserTypes extends UserTypesConfig["userTypes"], TEnumNames extends StringForUnion, TNamespace extends string = string, TName extends string = string> = {
    keySchema: ResolvedKeySchema<TTableConfig["keySchema"], TUserTypes, TEnumNames>;
    valueSchema: ResolvedValueSchema<TTableConfig["valueSchema"], TUserTypes, TEnumNames>;
    namespace: TNamespace;
    name: TName;
    tableId: `0x${string}`;
};
type ResolvedKeySchema<TKeySchema extends TableConfig["keySchema"], TUserTypes extends UserTypesConfig["userTypes"], TEnumNames extends StringForUnion> = ResolvedSchema<TKeySchema, TUserTypes, TEnumNames>;
type ResolvedValueSchema<TValueSchema extends TableConfig["valueSchema"], TUserTypes extends UserTypesConfig["userTypes"], TEnumNames extends StringForUnion> = ResolvedSchema<Exclude<TValueSchema, string>, TUserTypes, TEnumNames>;
type ResolvedSchema<TSchema extends Exclude<TableConfig["keySchema"] | TableConfig["valueSchema"], string>, TUserTypes extends UserTypesConfig["userTypes"], TEnumNames extends StringForUnion> = {
    [key in keyof TSchema]: {
        type: TSchema[key] extends SchemaAbiType ? TSchema[key] : TSchema[key] extends keyof TUserTypes ? TUserTypes[TSchema[key]] extends UserType ? TUserTypes[TSchema[key]]["internalType"] : never : TSchema[key] extends TEnumNames ? "uint8" : never;
        internalType: TSchema[key];
    };
};
/**
 * @internal Internal only
 * @deprecated Internal only
 */
declare function resolveConfig<TStoreConfig extends StoreConfig>(config: TStoreConfig): ResolvedStoreConfig<TStoreConfig>;

export { ResolvedStoreConfig as R, resolveConfig as r };
