///
import { EventEmitter } from "events";
import { Callback } from "./core/callback";
import { Constructor } from "./index";
import { ResultCallback } from "./core/callback";
import { InternalSessionFactory, SessionFactory } from "./sessionFactory";
import { Persister } from "./persister";
import { EntityMapping } from "./mapping/entityMapping";
import { QueryBuilder, FindOneQuery } from "./query/queryBuilder";
import { QueryDefinition } from "./query/queryDefinition";
export interface Session {
factory: SessionFactory;
save(obj: Object, callback?: Callback): void;
remove(obj: Object, callback?: Callback): void;
detach(obj: Object, callback?: Callback): void;
refresh(obj: Object, callback: Callback): void;
flush(callback?: Callback): void;
clear(callback?: Callback): void;
find(ctr: Constructor, id: any, callback?: ResultCallback): FindOneQuery;
exists(ctr: Constructor, id: any, callback: ResultCallback): void;
getReference(ctr: Constructor, id: any): T;
fetch(obj: T, callback?: ResultCallback): void;
fetch(obj: T, path: string | string[], callback?: ResultCallback): void;
query(ctr: Constructor): QueryBuilder;
wait(callback?: Callback): void;
close(callback?: Callback): void;
contains(obj: Object): boolean;
toDocument(obj: Object, callback?: ResultCallback