Данная библиотека является идеей, и носит демонстрационный характер.

Interfaces & Enums

Тип компонента
enum COMPONENT_TYPE {
    COMPONENT = 0,
    NATIVE = 1,
    TEXT = 2,
}
Тип chunk'а, указывает на тип привязки к Node
  • START - привязка к узлу первого компонента
  • FIRST - привязка к родительскому узлу
  • AFTER - привязка предыдущему узлу
enum CHUNK_TYPE {
    START = 0,
    FIRST = 1,
    AFTER = 2,
}
Интерфейс для ассоциативных массивов для указания типизации значений
interface IHashMap<T> {
    [propName: string]: T;
}
пример:
const object: IHashMap<number> = {
    prop1: 1,
    prop2: 2,
    prop3: 3,
};
Интерфейсы для ассоциативных массивов с определенным типом значений (any, string, boolean)
interface IHashMapAny extends IHashMap<any> { }
interface IHashMapString extends IHashMap<string> { }
interface IHashMapBoolean extends IHashMap<boolean> { }
пример:
const object: IHashMapBoolean = {
    prop1: true,
    prop2: false,
    prop3: true,
};
Интерфейс конструктора для классов: Component, Native, Text
interface ICtorBaseComponent {
    new (ref?: { name: string } | string, props?: IHashMapAny): BaseComponent;
}
пример:
const component: Component = new Component({ name: "component" }, { });
const native: Native = new Native({ name: "native" }, { tagName: "div" });
const text: Text = new Text({ name: "text" }, { html: "html content" });
Информация о chunk'е:
  • type - тип chunk'а
  • list - список дочерних компонентов
  • node - ссылка на Node
  • phantom - используется комментарий в chunk'е
interface IChunkEl {
    type: CHUNK_TYPE;
    list: BaseInternal[];
    node: Node;

    phantom?: boolean;
}
Каждый экземпляр базового класса (Component, Native, Text) имеет свойтсво $internal для внутренней работы bakugan. Данный интерфейс описывает набор общих полей для этого свойства
  • id - id компонента
  • name - имя компонента для доступа по имени get(name)
  • type - тип компонента
  • owner - ссылка на экземпляр класса
  • chunk - индекс chunk'а в родительском компоненте
  • index - позиция в chunk'е
  • parent - родительский компонент
  • begin - начало компонента (Node)
  • end - конец компонента (Node)
interface IInternal {
    id: number;
    name?: string;
    type: COMPONENT_TYPE;
    owner: BaseComponent;
    chunk?: number;
    index?: number;
    parent?: IInternalTemplate;
    begin?: Node;
    end?: Node;
}
пример:
const text: Text = new Text({ html: "html content" });
console.log(text.$internal);
Данный интерфейс расширяет IInternal. Он используется в классах, которые используют шаблоны, т.е. в Component и Native
  • template.template - шаблон
  • template.context - контекст
  • root - ссылка на root компонент
  • storeEvent - хранилище нативных событий
  • chunks - информация по блокам. Каждый шаблон разбит на блоки\куски (chunks). Внутри каждого блока могут находиться дочерние компоненты
  • list - доспут к дочерним компонентам по ключу
interface IInternalTemplate extends IInternal {
    template: {
        template: Template;
        context: Component;
    };
    root?: IInternalComponent;
    storeEvent?: StoreEvent;
    chunks?: IChunkEl[];
    list?: IHashMap<BaseInternal>;
}
Конечный набор полей для свойства $internal использующийся в экземпляре класса Component
  • refs - ссылки на Node элементы
interface IInternalComponent extends IInternalTemplate {
    refs?: IHashMap<HTMLElement>;
}
Конечный набор полей для свойства $internal использующийся в экземпляре класса Native
  • tagName - имя тега
  • attr - атрибуты
  • cl - классы
  • style - стили
interface IInternalNative extends IInternalTemplate {
    tagName: string;
    attr?: IHashMapString;
    cl?: IHashMapBoolean;
    style?: IHashMapString;
}
Конечный набор полей для свойства $internal использующийся в экземпляре класса Text
  • props - параметры
interface IInternalText extends IInternal {
    props?: IHashMapAny;
}
Базовый компонент и базовый внутренний объект $internal
type BaseComponent = Component | Native | Text;
type BaseInternal = IInternalComponent | IInternalNative | IInternalText;