/// 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 };