///
import { Either } from "fp-ts/Either";
import { Component, ComponentData, UnknownComponent } from "./component";
import { Entity } from "./entity";
import { EntityMap } from "./entity_map";
import { EcsEvent, EventData } from "./events";
import { ArgModifier, ArgModifierResult } from "./arg_modifier";
import { Query } from "./query";
import { Resource, ResourceData } from "./resource";
import { World } from "./world";
export declare const Entities: Resource;
export declare const Components: unique symbol;
export declare type ComponentsObject = T extends typeof Components ? ReadonlyMap : never;
export declare const UUID: unique symbol;
export declare type UUIDData = T extends typeof UUID ? string : never;
export declare const GetEntity: unique symbol;
export declare type GetEntityObject = T extends typeof GetEntity ? Entity : never;
export declare const GetArg: unique symbol;
export declare type GetArgFunction = (arg: T) => Either>;
export declare type GetArgSelector = T extends typeof GetArg ? GetArgFunction : never;
export declare const Emit: Resource;
export declare const EmitNow: Resource;
export declare type EmitFunction = (event: EcsEvent, data: Data, entities?: (string | Entity)[]) => void;
export declare const GetWorld: Resource;
export declare const RunQuery: Resource;
export declare type RunQueryFunction = (query: Query, uuid?: string) => ArgsToData[];
export declare type ArgTypes = Component | Query | Resource | EcsEvent | typeof Components | typeof UUID | typeof GetEntity | typeof GetArg | ArgModifier;
declare type AllowUndefined = T extends undefined ? T : never;
export declare type ArgData = ComponentData | ResourceData | QueryResults | EventData | ComponentsObject | UUIDData | GetEntityObject | GetArgSelector | ArgModifierResult | AllowUndefined;
export declare type ArgsToData = {
[K in keyof Args]: ArgData;
};
export declare type QueryArgs = Q extends Query ? QueryArgs : never;
export declare type QueryResults = Q extends Query ? ArgsToData[] : never;
export declare type ComponentsOnly = C extends Component ? C : never;
export {};