import { BaseState, HarlemPlugin } from '@harlem/core';

declare global {
    interface Window {
        __harlemState: SSRData;
    }
}
type SSRData = Record<string, BaseState>;
type SSRSerializer = (snapshot: SSRData) => string;

/**
 * Generate a script required to transfer state from server to client
*/
declare function getBridgingScript(serializer?: SSRSerializer): string;
/**
 * Generate a script block required to transfer state from server to client
*/
declare function getBridgingScriptBlock(serializer?: SSRSerializer): string;
/**
 * Create a new instance of the server-side SSR plugin
*/
declare function createServerSSRPlugin(): HarlemPlugin;
/**
 * Create a new instance of the client-side SSR plugin
 */
declare function createClientSSRPlugin(): HarlemPlugin;

export { SSRData, SSRSerializer, createClientSSRPlugin, createServerSSRPlugin, getBridgingScript, getBridgingScriptBlock };
