import { IContext } from "."; import { ElementState } from "../ElementState"; export type ElementId = number; export type CallbackId = number; export enum InternalType { Call = "Call", Subscribe = "Subscribe", Complete = "Complete", } export interface IElementParams { name?: string; func: (...args: A) => R | Promise; args: A; } export type IElementState = ElementState; export interface IElementVar { setter: CallbackId; value: T; } export interface IElementEffect { dispose?: () => any; deps?: any[]; } export interface IElementSubscription { elementId: ElementId; isCompleted: boolean; } export interface IElementStackItem { func: (...args: any[]) => any; args: any[]; } export interface IElementContext { context: IContext; value: any; } export interface IElementRef { current?: T; } // events export enum EventType { ChangeVar = "ChangeVar", Create = "Create", Dispose = "Dispose", CallError = "CallError", CallComplete = "CallComplete", SubscribeError = "SubscribeError", SubscribeComplete = "SubscribeComplete", PromiseThen = "PromiseThen", PromiseCatch = "PromiseCatch", Next = "Next", Error = "Error", Complete = "Complete", } export interface IBaseElementEvent { type: EventType; params: {}; value: any; elementId: ElementId; } export interface ICreateEvent extends IBaseElementEvent { type: EventType.Create; value: undefined; } export interface IDisposeEvent extends IBaseElementEvent { type: EventType.Dispose; value: undefined; } export interface IChangeVarEvent extends IBaseElementEvent { type: EventType.ChangeVar; params: { varNumber: number; }; } export interface ICallErrorEvent extends IBaseElementEvent { type: EventType.CallError; } export interface ICallCompleteEvent extends IBaseElementEvent { type: EventType.CallComplete; value: undefined; } export interface ISubscribeErrorEvent extends IBaseElementEvent { type: EventType.SubscribeError; } export interface ISubscribeCompleteEvent extends IBaseElementEvent { type: EventType.SubscribeComplete; params: { elementId: ElementId; }; value: undefined; } export interface INextEvent extends IBaseElementEvent { type: EventType.Next; } export interface IErrorEvent extends IBaseElementEvent { type: EventType.Error; } export interface ICompleteEvent extends IBaseElementEvent { type: EventType.Complete; value: undefined; } export interface IPromiseThenEvent extends IBaseElementEvent { type: EventType.PromiseThen; } export interface IPromiseCatchEvent extends IBaseElementEvent { type: EventType.PromiseCatch; } export type IElementEvent = | IChangeVarEvent | ICreateEvent | IDisposeEvent | ICallErrorEvent | ICallCompleteEvent | ISubscribeErrorEvent | ISubscribeCompleteEvent | IPromiseThenEvent | IPromiseCatchEvent | INextEvent | IErrorEvent | ICompleteEvent;