/**
 * Registers a model / tree node object as a root store tree.
 * Marking a model object as a root store tree serves several purposes:
 * - It allows the `onAttachedToRootStore` hook (plus disposer) to be invoked on models once they become part of this tree.
 *   These hooks can be used for example to attach effects and serve as some sort of initialization.
 * - It allows auto detachable references to work properly.
 *
 * @typeparam T Object type.
 * @param node Node object to register as root store.
 * @returns The same model object that was passed.
 */
export declare const registerRootStore: <T extends object>(node: T) => T;
/**
 * Unregisters an object to mark it as no longer a root store.
 *
 * @param node Node object to unregister as root store.
 */
export declare const unregisterRootStore: (node: object) => void;
/**
 * Checks if a given object is marked as a root store.
 *
 * @param node Object.
 * @returns
 */
export declare function isRootStore(node: object): boolean;
/**
 * Gets the root store of a given tree child, or undefined if none.
 *
 * @typeparam T Root store type.
 * @param node Target to find the root store for.
 * @returns
 */
export declare function getRootStore<T extends object>(node: object): T | undefined;
