///
import { EventEmitter } from "events";
import { Map } from "immutable";
import { Evaluator } from "./evaluator";
import { IpywidgetsState } from "./ipywidgets-state";
import { Client, CompressedPatch, DocType, Document } from "./types";
import { HistoryEntry, HistoryExportOptions } from "./export";
export declare type State = "init" | "ready" | "closed";
export declare type DataServer = "project" | "database";
export interface SyncOpts0 {
project_id: string;
path: string;
client: Client;
patch_interval?: number;
file_use_interval?: number;
string_id?: string;
cursors?: boolean;
change_throttle?: number;
persistent?: boolean;
ephemeral?: boolean;
data_server?: DataServer;
}
export interface SyncOpts extends SyncOpts0 {
from_str: (str: string) => Document;
doctype: DocType;
}
export interface UndoState {
my_times: Date[];
pointer: number;
without: Date[];
final?: CompressedPatch;
}
export declare class SyncDoc extends EventEmitter {
project_id: string;
private path;
private string_id;
private my_user_id;
private id;
private client;
private _from_str;
private patch_interval;
private project_autosave_timer;
private change_throttle;
private file_use_interval;
private throttled_file_use?;
private cursors;
private cursor_map;
private cursor_last_time;
private doctype;
private state;
private syncstring_table;
private patches_table;
private cursors_table;
evaluator?: Evaluator;
ipywidgets_state?: IpywidgetsState;
private patch_list?;
private last;
private doc;
private before_change?;
private last_user_change;
private last_save_to_disk_time;
private last_snapshot;
private snapshot_interval;
private users;
private settings;
private syncstring_save_state;
private load_full_history_done;
private my_patches;
private watch_path?;
private file_watcher?;
private handle_patch_update_queue_running;
private patch_update_queue;
private undo_state;
private save_patch_prev;
private save_to_disk_start_ctime;
private save_to_disk_end_ctime;
private persistent;
readonly data_server: DataServer;
private last_has_unsaved_changes?;
private ephemeral;
private sync_is_disabled;
private delay_sync_timer;
constructor(opts: SyncOpts);
private init;
set_cursor_locs(locs: any[], side_effect?: boolean): void;
private init_file_use_interval;
private set_state;
get_state(): State;
get_project_id(): string;
get_path(): string;
get_string_id(): string;
get_my_user_id(): number;
private assert_not_closed;
set_doc(doc: Document, exit_undo_mode?: boolean): void;
set(x: any): void;
delete(x?: any): void;
get(x?: any): any;
get_one(x?: any): any;
get_doc(): Document;
from_str(value: string): void;
to_str(): string;
count(): number;
version(time?: Date): Document;
version_without(times: Date[]): Document;
revert(time: Date): void;
undo(): Document;
redo(): Document;
private _undo;
private _redo;
in_undo_mode(): boolean;
exit_undo_mode(): void;
private init_undo_state;
private save_to_disk_autosave;
private init_project_autosave;
account_id(time: Date): string;
time_sent(time: Date): Date | undefined;
user_id(time: Date): number;
private syncstring_table_get_one;
private set_initialized;
versions(): Date[];
all_versions(): Date[];
last_changed(): Date;
private init_table_close_handlers;
close(): Promise;
private ensure_syncstring_exists_in_db;
private synctable;
private init_syncstring_table;
private dbg;
private init_all;
private init_error;
private wait_until_fully_ready;
private assert_table_is_ready;
assert_is_ready(desc: string): void;
wait_until_ready(): Promise;
wait(until: Function, timeout?: number): Promise;
delete_from_database(): Promise;
private file_is_read_only;
private update_if_file_is_read_only;
private init_load_from_disk;
private load_from_disk_if_newer;
private patch_table_query;
private init_patch_list;
private init_evaluator;
private init_ipywidgets;
private init_cursors;
private handle_cursors_change;
get_cursors(): Map;
set_settings(obj: any): Promise;
get_settings(): Map;
save(): Promise;
private next_patch_time;
private commit_patch;
private snapshot;
private snapshot_if_necessary;
private process_patch;
private get_patches;
has_full_history(): boolean;
load_full_history(): Promise;
show_history(opts?: {}): void;
set_snapshot_interval(n: number): Promise;
private handle_offline;
get_last_save_to_disk_time(): Date;
private handle_syncstring_save_state;
private handle_syncstring_update;
private handle_syncstring_update_new_document;
private handle_syncstring_update_existing_document;
private init_watch;
private pending_save_to_disk;
private update_watch_path;
private handle_file_watcher_change;
private handle_file_watcher_delete;
private load_from_disk;
private set_save;
private set_read_only;
is_read_only(): boolean;
wait_until_read_only_known(): Promise;
has_unsaved_changes(): boolean | undefined;
hash_of_saved_version(): number | undefined;
hash_of_live_version(): number | undefined;
has_uncommitted_changes(): boolean;
commit(): boolean;
save_to_disk(): Promise;
export_history(options?: HistoryExportOptions): HistoryEntry[];
private update_has_unsaved_changes;
private wait_for_save_to_disk_done;
private save_to_disk_aux;
private save_to_disk_user;
private save_to_disk_project;
private handle_patch_update;
private handle_patch_update_queue;
disable_sync(): void;
enable_sync(): void;
delay_sync(timeout_ms?: number): void;
private sync_remote_and_doc;
private emit_change;
}