///
import * as http from "http";
import * as WebSocket from "ws";
import * as t from "io-ts";
import Component, { ComponentConstructor } from "./component";
import { NestedArray } from "./helpers";
import { EventCallback } from "./types/ws";
import { JSX } from "./types/jsx";
export interface RenderOptions {
onError?: ErrorHandler;
}
export interface WebSocketOptions {
origin: string | null;
}
declare type WebSocketState = WebSocketStateHasCSS | WebSocketStateNoCSS;
interface WebSocketStateHasCSS extends BaseWebSocketState {
hasCSS: true;
cssState: CSSState;
}
interface WebSocketStateNoCSS extends BaseWebSocketState {
hasCSS: false;
cssState?: undefined;
}
interface BaseWebSocketState {
ws: WebSocket;
roots: ConnectedRoot[];
connectionState: null | "connecting" | "connected";
mounted: boolean;
closing: boolean;
seenEventNames: Set;
}
interface ConnectedRoot {
connected: true;
component: Component;
wsState: WebSocketState;
eventNames: Set;
aliases: Record;
allComponentsMap: Record | undefined>;
onError: ErrorHandler | null;
}
export interface CSSState {
id: string;
atomicCSS: Record;
cssRules: string[];
nextRuleIndex: number;
}
export declare type ChildMap = Record;
export interface StateTree {
name: string;
state: Record;
childMap: ChildMap;
reload: boolean;
}
export interface EventHandler {
eventName: string;
callback: EventCallback;
validator?: t.Type;
expiry: number | null;
}
export declare type ErrorHandler = (error: unknown) => void;
interface IDStateTree {
id: string;
stateTree: StateTree;
}
declare module "http" {
interface IncomingMessage {
purviewState?: {
wsState: WebSocketState;
idStateTrees: IDStateTree[];
roots?: ConnectedRoot[];
};
purviewCSSState?: CSSState;
purviewCSSRendered?: boolean;
}
}
export declare const RENDER_CSS_ORDERING_ERROR = "Purview: you called renderCSS() and then subsequently called render(). Calls to render() must come before renderCSS() so that renderCSS() can add all relevant styles.";
export declare function createElem(nodeName: string | ComponentConstructor, attributes: (JSX.InputHTMLAttributes & JSX.TextareaHTMLAttributes & JSX.OptionHTMLAttributes) | null, ...children: NestedArray): JSX.Element;
export declare function handleWebSocket(server: http.Server, options: WebSocketOptions): WebSocket.Server;
export declare function pingClients(wsServer: WebSocket.Server, timeout: number): void;
export declare function render(jsx: JSX.Element, req: http.IncomingMessage, options?: RenderOptions): Promise;
export declare function renderCSS(req: http.IncomingMessage): Promise;
export declare const reloadOptions: {
saveStateTree(id: string, tree: StateTree): Promise;
getStateTree(id: string): Promise;
deleteStateTree(id: string): Promise;
saveCSSState(id: string, cssState: CSSState): Promise;
getCSSState(id: string): Promise;
deleteCSSState(id: string): Promise;
};
export { Component };
export declare const scriptPath: string;
import { Purview } from "./namespace";
export default Purview;
export { InputEvent, ChangeEvent, SubmitEvent, KeyEvent, PurviewEvent, } from "./types/ws";
export { css, styledTag, CSS } from "./css";
export { JSX, NestedArray };