import * as preact from './index'; export interface Options extends preact.Options { /** Attach a hook that is invoked before render, mainly to check the arguments. */ _root?( vnode: preact.ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment ): void; /** Attach a hook that is invoked before a vnode is diffed. */ _diff?(vnode: VNode): void; /** Attach a hook that is invoked after a tree was mounted or was updated. */ _commit?(vnode: VNode, commitQueue: Component[]): void; /** Attach a hook that is invoked before a vnode has rendered. */ _render?(vnode: VNode): void; /** Attach a hook that is invoked before a hook's state is queried. */ _hook?(component: Component): void; /** Attach a hook that is invoked after an error is caught in a component but before calling lifecycle hooks */ _catchError(error: any, vnode: VNode, oldVNode: VNode | undefined): void; } export interface FunctionalComponent
extends preact.FunctionComponent
{ // Define getDerivedStateFromProps as undefined on FunctionalComponent // to get rid of some errors in `diff()` getDerivedStateFromProps?: undefined; } // Redefine ComponentFactory using our new internal FunctionalComponent interface above export type ComponentFactory
= | preact.ComponentClass
| FunctionalComponent
;
export interface PreactElement extends HTMLElement {
_children?: VNode extends preact.VNode {
// Redefine type here using our internal ComponentFactory type
type: string | ComponentFactory ;
props: P & { children: preact.ComponentChildren };
_children: Array extends preact.Component {
// When component is functional component, this is reset to functional component
constructor: preact.ComponentType ;
state: S; // Override Component["state"] to not be readonly for internal use, specifically Hooks
base?: PreactElement;
_dirty: boolean;
_force?: boolean;
_renderCallbacks: Array<() => void>; // Only class components
_globalContext?: any;
_vnode?: VNode | null;
_nextState?: S | null; // Only class components
/** Only used in the devtools to later dirty check if state has changed */
_prevState?: S | null;
/**
* Pointer to the parent dom node. This is only needed for top-level Fragment
* components or array returns.
*/
_parentDom?: PreactElement | null;
// Always read, set only when handling error
_processingException?: Component