import * as React from 'react' interface ErrorReporterProps { error: any } export interface AppContainerProps { errorBoundary?: boolean errorReporter?: React.ComponentType } export interface AppChildren { children?: React.ReactElement } export class AppContainer extends React.Component< AppContainerProps & AppChildren > {} /** * Marks module and a returns a HOC to mark a Component inside it as hot-exported * @param {NodeModuleObject} module ALWAYS should be just "module". * @return {function} "hot" HOC. * * @example marks current module as hot, and export MyComponent as HotExportedMyComponent * export default hot(module)(MyComponent) */ export function hot( module: any, ): >(Component: T, props?: AppContainerProps) => T /** * Marks component as `cold`, and making it invisible for React-Hot-Loader. * Any changes to that component will cause local state loss. * @param {React.ComponentType} component to chill * @return {React.ComponentType} component, as it was passed in. * * @example marks some component as cold * export default cold(MyComponent) */ export function cold>(component: T): T /** * Tests are types of two components equal * @param {Component} typeA * @param {Component} typeB * @return {boolean} are they equal * * @example test that some rendered component(ReactElement), has the same type as BaseComponent * areComponentEqual(RenderedComponent.type, BaseComponent) */ export function areComponentsEqual( typeA: React.ComponentType, typeB: React.ComponentType, ): boolean export interface HotError { error: Error errorInfo?: React.ErrorInfo } export interface Config { /** * Specify loglLevel, default to 'error', set it to false to disable logs. * Available levels: ['debug', 'log', 'warn', 'error'] */ logLevel: string /** * * @param {any} type being registered. This could be ANY top level variable among project. * @param {string} uniqueLocalName - variable name * @param {string} fileName - origin file * @return {any} */ onComponentRegister: ( type: any, uniqueLocalName: string, fileName: string, ) => any /** * * @param type {any} type being rendered. The first argument of React.createElement * @param displayName {string} type display name (if exists) */ onComponentCreate: (type: any, displayName: string) => any /** * Allows using SFC without changes. leading to some components not updated */ pureSFC: boolean /** * keep render method unpatched, moving sideEffect to componentDidUpdate */ pureRender: boolean /** * Allows SFC to be used, enables "intermediate" components used by Relay, should be disabled for Preact */ allowSFC: boolean /** * Disable "hot-replacement-render" */ disableHotRenderer: boolean /** * Disable "hot-replacement-render" when injection into react-dom are made */ disableHotRendererWhenInjected: boolean /** * flag to completely disable RHL for SFC */ ignoreSFC: boolean /** * flag to completely disable RHL for Components */ ignoreComponents: boolean /** * default value for AppContainer errorOverlay */ errorReporter: React.ComponentType /** * Global error overlay */ ErrorOverlay: React.ComponentType<{ errors: Array }> } /** * Confugures how React Hot Loader works * @param {Config} config */ export function setConfig(config: Partial): void