1.0.11 • Published 6 years ago

istore v1.0.11

Weekly downloads
3
License
ISC
Repository
github
Last release
6 years ago

Общая концепция

Данная библиотека предоставляет набор инструментов и классов для описания/изменения и чтения состояния приложения. Используется однонаправленный поток данных, т.е. есть состояние и есть методы/экшены для его изменения. В библиотеке можно выделить 3 остовных сущности: 1. Хранилище (Store) - хранит текущее состояние всего приложения, 2. Домен (Domain) - объект описывающий модель данных и методы для нее доступные. Состоит из юнтов или других доменов, 3. Юнит (Unit) - объект инкапсулирующий какое-либо состояние (состояние хранится в хранилище) и предоставляющий методы для его изменения.

Идея библиотеки следующая: 1. Используя стандартные либо расширенные юниты (value, object, listValue, request) мы описываем некую модель

import { value, listValue } from 'istore';

const model = {
  name: value(''),
  age: value(0),
  contactInfo: {
    email: value(''),
    phoneNumbers: listValue<string>(),
  }
}

на данном этапе все данные которые мы хотим хранить в моделе описываем используя юниты.

  1. Используя функицю domain создаем экземпляр домена для данной модели
import { domain } from 'istore'

let myDomain = domain(model);
  1. При необходимости изменяем методы доступные для домена.
myDomain = myDomain.withMethods((methods, state) => ({
  ...methods,
  clear: () => {
    methods.name.set('');
    methods.age.set(0);
    methods.contactInfo.email.set('');
    methods.contactInfo.phoneNumbers.set([]);
  },
  incrementAge: () => {
    methods.age.set(state.age + 1);
  }
}));
  1. "Помещаем" состояние домена в хранилище с определенным префиксом и может им пользоваться
myDomain.mount('uniq_prefix');

console.log(myDomain.state); // { name: '', age: 0, contactInfo: { email: '', phoneNumbers: [] }}

myDomain.methods.name.set('john');
console.log(myDomain.state); // { name: 'John', age: 0, contactInfo: { email: '', phoneNumbers: [] }}

myDomain.methods.incrementAge();
console.log(myDomain.state); // { name: 'John', age: 1, contactInfo: { email: '', phoneNumbers: [] }}

myDomain.methods.contactInfo.phoneNumbers.add('777777777');
console.log(myDomain.state); // { name: 'John', age: 1, contactInfo: { email: '', phoneNumbers: ['777777777'] }}

myDomain.methods.clear();
console.log(myDomain.state); // { name: '', age: 0, contactInfo: { email: '', phoneNumbers: [] }}
  1. Удаляем состояние домена из хранилища когда нужно
myDomain.unmount();
console.log(myDomain.state); // will throw exception
console.log(myDomain.methods); // will throw exception

Библиотка поддерживаем очень гибкую систему по описанию/переиспользованию и расширению юнитов и доменов, давая возможность быстро описывать необходимую модель данных получая при этом все необходимые методы для ее изменения, с возможностью эти методы изменить/расширить или удалить, тем самым ограничевая контроль над данными из вне.

API

Основное

unit(initialState)

Данная функция возвращает экземпляр класса Unit и используется как начало цепочки описания юнита. Созданный с помощью данной функции юнит в своем состоянии будет хранить initialState а в поле methods будет пустой объект (методов нет). Используя методы .withMethods и другие можно сконфигурировать поведение юнита. С помощью метода mount юнит помещается в хранилище, а с помощью метода unmount удаляется из него. На практике рекомендуется помещать юниты в рамках какого-либо домена и не помещать отдельно взятые юниты в хранилище. Так же на приктике рекомендуется использовать уже описанные шаблонные юниты из данной библиотеки (value, object, request, listValue), и при необходимости расширять их.

Параметры

  • initialState required, any - начальное состояние юнита.

Возвращаемое значение

  • Экземпляр класса Unit.

Пример

import { unit } from 'istore';

const myUnit = unit(0) // создаем экземпляр юнита с initialState = 0
  .withMethods((_, { setState, getState}) => { // добавляем метод set в список методов юнита
    set: (value: number) => {
      if (getState() !== value) { // если текущее значение не равно пришедшему то может отправить новое значение в хранилище
        setState(value);
      }
    }
  });

  myUnut.mount('myUnit'); // помещаем состояние юнита в хранилище

  console.log(myUnit.state); // 0 - текущее состояние юнита
  myUnut.methods.set(5); // назначаем новое состояние юнита
  console.log(myUnit.state); // 5 - получаем новое значение в состоянии юнита

  myUnut.unmount(); // удаляем состояние юнита из хранилища

domain(model)

Функция для объединения набора юнитов или других доменов в объект идентичный по API обычному юниту. Как это работает: функция принимает объект ключами которого являются строки а значениями либо экземпляры юнитов, либо другие домены, либо вложенные объекты с описанной структурой (вложенность может быть любая), например:

import { value, listValue } from 'istore'
const model = {
  name: value(''),
  age: value(0),
  contactInfo: {
    email: value(''),
    phoneNumbers: listValue<string>(),
  }
}

Объект полученный в результате функции domain является экземпляром класса Domain и предоставляет интерфейс схожий с интерфейсом класса Unit (state, methods, withMethods, mount, unmount), при этом в поле state агригируются все состояния из модели а в поле methods все методы из модели. Т.е. для примера модели описанной выше мы получим состояние домена следующего вида:

{
  name: string,
  age: number,
  contactInfo: {
    email: string,
    phoneNumbers: string[],
  }
}

В поле methods будет объект вида:

{
  name: {
    set: (val: string) => void;
  },
  age: {
    set: (val: number) => void;
  },
  contactInfo: {
    email: {
      set: (val: string) => void;
    },
    phoneNumbers: {
      set: (val: string[]) => void;
      setItem: (index: number, item: number) => void;
      add: (item: number | number[]) => void;
      remove: (item: number | number[]) => void;
      removeByIndex: (index: number) => void;
    }
  }
}

Так же помещая в хранилище и удаля из хранилища домен, он автоматически помещает либо удаляет все юниты и домены которые находятся у него в модели. Для добавления новых юнитов либо доменов в уже сформированный домен используется метод .extend(model), а для изменения/добавления/удаления методов домена используется метод .withMethods(nextMethodsGetter).

Используя функцию domain можено описывать состояние и методы его изменения какого либо компонента приложения, при этом можно помещать в хранилище сколько угодно экземпляров одного и того же домена (главное что бы префикс переданный в метод mount был уникальным).

Параметры

  • model required, Object - объект ключами которого являются строки а значениями либо экземпляры юнитов, либо домены, либо вложенные объекты с описанной структурой (вложенность может быть любая).

Возвращаемое значение Экземпляр класса Domain

Пример Пример описан в первом разделе данного файла "Общая концепция"

arrayUnit(modelGetter, idGetter, initialState)

Функция для создания экземпляра класса ArrayUnit, который дает возможность работать с массивом доменов, с возможностью их добавления или удаления. В состоянии данного класса будет находится обычный массив, элементами которого будут состояния доментов, а в методах будет набор функций для манипулирования этим массивом, а так-же функции для получения методов любого из доменов находящихся в массиве. На данный момент эта фича реализованна в минимальном объеме и ее API еще не стабилен, возможны его расширения либо изменения в будущем. Отличие данной функции от функции listValue в том, что listValue будет работать с обычным массивом, а arrayUnit работает с массивом доменов. Экземпляр ArrayUnit по API схожен с Domain и Unit. Он также имеет поля state и methods, и методы mount, unmount. В состоянии данного экземпляра хранится массив состояний доменов а в методах объект с функциями для добавления/удаления доменов в массив, а также для получения методов любого из доменов в массиве.

Параметры

  • modelGetter required, (state: any) => Domain - функция для получения очередного домена, для добавления в массив доменов юнита. Принимает на вход объект с изначальным состоянием для нового домена.

  • idGetter optional, (state: any) => string - функция для получения id элемента массива. Нужна для внутреннего хранения экземпляров доменов и для получения доступа к методам домена по id. Должна возвращать уникальный идентификатор для каждого элемента массива доменов. Есть дефолтная реализация (генерируется новый гуид).

  • initialState [optional, Object[]] - изначальное состояние массива. Для каждого жлемента из этого массива будут вызваны функции modelGetter и idGetter, для получения доменов и их id по начальному состоянию.

Возвращаемое значение

  • ArrayUnit - экземпляр класса ArrayUnit, в состоянии которого будет массив с состояниями ткущих доменов, а в методах объект с функциями для добавления/удаления доменов в массив, а также для получения методов любого из доменов в массиве.

Пример

import { arrayUnit, value, domain } from 'istore';

const contacts = arrayUnit(
  ({ id, name, age, email }) => domain({
    id: value(id),
    name: value(name),
    age: value(age),
    email: value(email),
  }),
  (state) => state.id,
  [ { id: 1, name: 'John', age: 33, email: 'example@example.ex' } ],
);

contacts.mount('constacts');

console.log(contacts.state) // [{ id: 1, name: 'John', age: 33, email: 'example@example.ex' }]

contacts.methods.push({
  { id: 2, name: 'Dan', age: 43, email: 'example2@example.ex' }
});

console.log(contacts.state) // [{ id: 1, name: 'John', age: 33, email: 'example@example.ex' }, { id: 2, name: 'Dan', age: 43, email: 'example2@example.ex' }];

contacts.methods.byIndex(0).age.set(22);

console.log(contacts.state) // [{ id: 1, name: 'John', age: 22, email: 'example@example.ex' }, { id: 2, name: 'Dan', age: 43, email: 'example2@example.ex' }];

contacts.unmount();

value(initialValue)

Базоый юнит для работы с каким либо значением.

Параметры:

  • initialValue required, any - начальное значение.

Возвращаемое значение

  • Экземпляр класса Unit Состояние - любое значение Методы
  • set (v: typeof initialValue) => void - метод для изменения состояния

Пример:

import { value } from 'istore';
const name = value('');

name.mount('name');

console.log(name.state) // ''
name.methods.set('John');
console.log(name.state) // 'John'

name.unmount();

object(initialValue)

Базоый юнит для работы с каким либо объектом. Является частным случаем value юнита.

Параметры:

Возвращаемое значение

  • Экземпляр класса Unit Состояние - объект Методы
  • set (v: typeof initialValue) => void - метод для изменения состояния
  • merge (v: Partial) => void - методо, позволяющий частино изменить поля объекта состояния, в качетсве параметра передается объект с полями которые надо изменить. Полученный объект будет вмержен в текущее состояние.

Пример:

import { object } from 'istore';
const user = object({
  name: '',
  age: 0,
});

user.mount('user');

console.log(user.state) // { name: '', age: 0 }

user.methods.set({ name: 'John', age: 23 });
console.log(user.state) // { name: 'John', age: 23 }

user.methods.merge({ age: 35 });
console.log(user.state) // { name: 'John', age: 35 }

user.unmount();

request(loader, initialResponse)

Базоый юнит для работы с асинхронными запросами. Является частным случаем object юнита.

Параметры:

  • loader [required, (...args: any[]) => Promise] - функция возвращающая промис, который возвращает некие данные.
  • initialResponse options, any - начальное значени поля response состояния, по дефолту undefined.

Возвращаемое значение

  • Экземпляр класса Unit Состояние
  • response T - хранит последний ответ полученный после разрешения промиса.
  • sending boolean - true если запрос в данный момент выполняется, false иначе.
  • error any - ошибка полученная в результате последнего запроса. Стирается если следующй запрос был выполнен успешно.
  • count number - кол-во выполненых запросов (не зависимо от результата запроса)

Методы

  • send [(...args: any[]) => Promise] - метод для совершения запроса возвращаемого входной функцией loader. Все параметры переданные в send будут переданы в loader, а возвращаемым значением будет обернутый промис возвращенный функцией loader.

Пример:

import { request } from 'istore';
const getUser = request((good) => {
  if (good) {
    return Promise.resolve({ name: 'John', age: 33 });
  }
  return Promise.reject('some error');
})

getUser.mount('getUser');

console.log(getUser.state) // { response: undefined, sending: false, error: undefined, count: 0 }

name.methods.send(true).then(() => {
  console.log(getUser.state) // { response: { name: 'John', age: 33 , sending: false, error: undefined, count: 1 }

  name.methods.send(false).catch(() => {
      console.log(getUser.state) // { response: { name: 'John', age: 33 , sending: false, error: 'some error', count: 2 }
      getUser.unmount();
  })

});
  console.log(getUser.state) // { response: undefined, sending: true, error: undefined, count: 1 }

listValue(initialValue)

Базоый юнит для работы с массивами данных. Является частным случаем value юнита.

Параметры:

  • initialValue [optional, T[]] - начальное значение юнита

Возвращаемое значение

  • Экземпляр класса Unit Состояние Массив элементов.

Методы

  • set [(val: T[]) => void] - метод для изменения состояния юнита.
  • setItem (index: number, item: T) => void - метод для изменения одного из элементов состояния юнита по индексу.
  • add [(item: T | T[]) => void] - метод для добавления элемента/элементов в массив
  • remove [(item: T | T[]) => void] - метод для удаления элеманта/элементов из массива
  • removeByIndex (index: number) => void - метод для удаления элеманта из массива по индексу.
  • mergeToItem (index: number, obj: Partial) => void - метод для частичного изменения одного из элементов массива (при условвии что элементы массива объекты).

Пример:

import { listValue } from 'istore';
 
const contacts = listValue([{ id: 1, name: 'John', age: 33, email: 'example@example.ex' }]);

contacts.mount('constacts');

console.log(contacts.state) // [{ id: 1, name: 'John', age: 33, email: 'example@example.ex' }]

contacts.methods.add({
  { id: 2, name: 'Dan', age: 43, email: 'example2@example.ex' }
});

console.log(contacts.state) // [{ id: 1, name: 'John', age: 33, email: 'example@example.ex' }, { id: 2, name: 'Dan', age: 43, email: 'example2@example.ex' }];

contacts.methods.mergeToItem(0, { age: 22} );

console.log(contacts.state) // [{ id: 1, name: 'John', age: 22, email: 'example@example.ex' }, { id: 2, name: 'Dan', age: 43, email: 'example2@example.ex' }];

contacts.unmount();

Вспомогательные функции

guid()

Функция для формирования гуида. Возвращает строку с новым гуидом.

snapshot(state)

Функция для "фиксирования" состояния домена. Учитывая что состояние домена может меняться во времени (так как там использются геттеры от состояний юнитов и доменов модели) в какой то момент мы можем захотеть зафиксировать состояние домена, что бы на него не влияли изменения модели. Для этого используется функция snapshot которая создаст копию текущего состояния и вернет ее. На сам домен и его состояние ни какого воздействия оказано не будет.

Пример Пример:

import { value, domain, snapshot } from 'istore';
 
const myDomain = domain({
  name: value('John'),
  age: value(10),
});

console.log(myDomain.state); // { name: 'John', age: 10 }
const stateSnapshot = snapshot(myDomain.state);

console.log(stateSnapshot); // { name: 'John', age: 10 }

myDomain.methods.name.set('Petya');
console.log(myDomain.state); // { name: 'Petya', age: 10 }
console.log(stateSnapshot); // { name: 'John', age: 10 }

Остальное

Unit

Класс инкапсулирующий конфигурацию по работе с неким состоянием, позволяющий данную конфигурация модифицировать а так-же предоставляющий API по доступу к состоянию и модификаци состояния после размещения состояния в хранилище.

Свойства

  • state any - текущее состояние хранящееся в хранилище для данного экземпляра юнита. Для досута к нему необходимо "разместить" состояние юнита в хранилище используя метод mount.
  • methods Object - текущие методы для изменения состояния. Для досута к нему необходимо "разместить" состояние юнита в хранилище используя метод mount.
  • config Object - конфигурация описывающая состояние, методы доступные для состояния и так далее.
  • name ?string - имя по которому хранится состояние юнита в хранилище, определенно только пока состояние юнита "размещено" в хранилище
  • path [?string[]] - имя по которому хранится состояние юнита в хранилище представленное в виде пути (массив ключей по которым нужно переходить в состоянии всего приложения что бы добраться до состояния текущего юнита), определенно только пока состояние юнита "размещено" в хранилище

Методы

  • isMounted(): boolean - метод для определения размещено ли состояние юнита в хранилище.

  • mount(prefix?: string): Unit - метод для размещения состояния юнита в хранилище. Входной параметр prefix обязателен если ранее не был использован метод .withName(name), метод mount размещает состояние юнита в хранилище по имени prefix или полю name из конфигурации юнита (config). Метод возвращает ссылку на текущий юнит. Метод может бросить исключение если состояние данного экземпляра юнита уже размещен в хранилище.

  • unmount(): Unit - метод для удаления состояния юнита из хранилища. Метод возвращает ссылку на текущий юнит. Метод может бросить исключение если состояние данного экземпляра юнита уже удалено из хранилища.

  • subscribe(callback: () => void): () => void - метод для подписки на изменения состояния юнита. Принимает фукнцию которая будет вызвана при изменении состояния юнита. Возвращает функицю, вызвав которую произойдет отписка от юнита. Подписываться можно только на юнит состояние которого размещено в хранилище.

  • withMethods(methodsGetter: (m: TMethods, context: Object) => TNextMethods): Unit - метод для изменения методов модфицирующих состояние юнита. Принимает функцию, которая принимает объект с текущими методами по модификации состояния первым параметром, а вторым принимает объект context. Функция methodsGetter должна вернуть новый набор методов который будет доступен для юнита при помещении его состояния в хранилище. Метод withMethods возвращает новый экземпляр класса Unit. Поля объекта context:

    • getState(): TState - функция которая возвращает текущее состояние юнита
    • setState(nextState: TState): void - функция которая изменяет текущее состояние юнита на то что было передано параметром nextState.
  • asPermanent(): Unit - метод для указания того, что состояние юнита нужно оставлять в хранилище после вызова метода unmount. При повторном помещении юнита в хранилище в качестве своего состояния он возьмет то, что было оставлно в прошлый раз. Метод возвращает новый экземпляр класса Unit.

  • asNotPermanent(): Unit - метод для указания того, что состояние юнита не нужно оставлять в хранилище после вызова метода unmount. При повторном помещении юнита в хранилище в качестве своего состояния он будет исползовать значение в поле initialState свойства config юнита. Метод возвращает новый экземпляр класса Unit.

  • withName(name: string): Unit - метод для задания имени юниту. Имя сохраняется в свойстве name свойства config юнита и будет использоваться не зависимо от того передали prefix в метод mount или нет. Метод возвращает новый экземпляр класса Unit.

  • withStore(store: IStore): Unit - метод для явного указания юниту какое хранилище использовать для размещения своего состояния. По умолчанию будет использоваться дефолтное хранилище доступное через функцию getDefaultStore. Метод возвращает новый экземпляр класса Unit.

  • next(сonfig: Partial): Unit - метод для формирования нового экземпляра класса Unit на основе текущего. Конфигурация нового экземпляра будет состоять из конфигурации старого + вмерженой корфигурации из входного параметра сonfig.

Domain

Класс инкапсулирующий некоторую модель данных сформированной из экземпляров класса Unit и Domain. Предоставляет API по доступу к обобщенному состоянию модели и обобщенным методам модели, позволяем модфицировать методы модели, а так же автоматически размещает и удаляет состояния юнитов и доменов из модели.

Свойства

  • state any - текущее состояние хранящееся модели домена. Для доступа к свойству необходимо "разместить" модель в хранилище используя метод mount.
  • methods Object - текущие методы для изменения состояния модели. Для доступа к свойству необходимо "разместить" модель в хранилище используя метод mount.
  • config Object - конфигурация домена, хранящая объект описывающий модель, и функции трансформаторы методов модели.

Методы

  • isMounted(): boolean - метод для определения размещена ли модель домена в хранилище.

  • mount(prefix: string): Domain - метод для размещения состояния модели в хранилище. Метод mount размещает состояние модели в хранилище по имени prefix. Метод возвращает ссылку на текущий экземпляр домена. Метод может бросить исключение если состояние модели данного экземпляра домена уже размещен в хранилище.

  • unmount(): Domain - метод для удаления состояния модели из хранилища. Метод возвращает ссылку на текущий экземпляр домена. Метод может бросить исключение если состояние модели данного экземпляра домена уже удалено из хранилища.

  • withMethods(methodsTransformator: (methods: TMethods, state: TState) => TNextMethods): Domain - метод для траформации методов для изменения состояния модели. Принимает так называемые трансформатор, это функция, которая принимает первым параметром текущие методы модели, вторым состояние модели. Функция транформатор должна вернуть новый набор методов модели. Метод возвращает новый экземпляр класса Domain.

  • extend(extraModel: Object): Domain - метод для расширения текущей модели домена. Если имена полей модели extraModel будут конфликтовать с именами исходной модели, в итоговую модель попадут поля из исходной модели. Метод возвращает новый экземпляр класса Domain.

  • next(сonfig: Partial): Domain - метод для формирования нового экземпляра класса Domain на основе текущего. Конфигурация нового экземпляра будет состоять из конфигурации старого + вмерженой корфигурации из входного параметра сonfig.

ArrayUnit

Класс инкапсулирующий массив доменов. Предоставляет API по доступу к массиву сформированному из состояний доменов, и методам отдельных доменов, позволяет добавлять и удалять домены из массива доменов.

Свойства

  • state any - массив состояний инкапсулированых доменов. Для доступа к свойству необходимо "разместить" домены в хранилище используя метод mount.
  • methods Object - объект с методами для модификации массива доменов, и методы для доступа к методам доменов. Для доступа к свойству необходимо "разместить" модель в хранилище используя метод mount. Состоит из:
    • push(state: TState): void - добавляет домен с состоянием state в массив доменов.
    • pop(): void - удаляет верхний домен из массива доменов.
    • remove(index: number): void - метод для удаления элемента из массива доменов по индексу.
    • removeById(id: string): void - метод для удаления домена из массива доменов по идентификатору.
    • byIndex(index: number): TMethods - метод для получения методов домена по индексу.
    • byId(id: string): TMethods - метод для получения методов домена по идентификатору домена.
    • getId(index: number): string - метод для получения идентификатора домена по индексу.
    • getIndex(id: string): number - метод для получения индекса домена в массиве доменов по идентификатору домена
  • config Object - конфигурация, хранящая функцию возвращающую экземпляр домена, функцию для получения идентификатора домена и дефолтное значение массива.

Методы

  • isMounted(): boolean - метод для определения размещен ли состояния массива доменов в хранилище.

  • mount(prefix: string): ArrayUnit - метод для размещения состояний массива доменов в хранилище. Метод mount размещает состояния доменов в хранилище с перфиксом prefix. Метод возвращает ссылку на текущий экземпляр класса. Метод может бросить исключение если состояние доменов данного экземпляра класса уже размещен в хранилище.

  • unmount(): ArrayUnit - метод для удаления состояний доменов из хранилища. Метод возвращает ссылку на текущий экземпляр класса. Метод может бросить исключение если состояния доменов данного экземпляра класса уже удалены из хранилища.

  • subscribe(callback: () => void): () => void - метод для подписки на изменения кол-ва доменов в массиве. Принимает фукнцию которая будет вызвана при изменении кол-ва доменов в массиве. Возвращает функицю, вызвав которую произойдет отписка.

  • next(сonfig: Partial): ArrayUnit - метод для формирования нового экземпляра класса ArrayUnit на основе текущего. Конфигурация нового экземпляра будет состоять из конфигурации старого + вмерженой корфигурации из входного параметра сonfig.

Store

Класс инкапсулирующий состояние приложения и предоставляющий API по его изменения/чтению и подпискам на изменения.

Свойства отсутсвуют

Методы

  • addState(path: string[], state: any): void - добавляет состояние state в хранилище по пути path
  • removeState(path: stirng[]): void - удаляет состояние из хранилища по пути path
  • setState(path: string[], state: any): void - изменяет состояние в хранилище по пути path на состояние state
  • subscribe(name: string, callback: (s: any) => void): () => void - подписка на часть состояния приложения. В параметре name передается строка с путем до места в состоянии на которое необходимо подписаться. Вторым параметром принимается фнукция которая будет вызвана при изменение состояния, в функцию будет передано новое состояние. Функция возвращает функцию вызвав которую произойдет отписка от хранилища.
  • isStateExists(path: string[]): boolean - проверяет, существует ли состояние по определенному пути, вернет true если существует, иначе false.
  • getState(path?: string[]): any - функция для получения всего состояния хранилища (если не передали параметр path) либо части состояния, которое находится по пути path.

getDefaultStore()

Функция для получения дефолтного экзепляра хранилища приложения. Данная функция используется в экземплярах класса Unit для получения хранилища если им не было задано никакого другово хранилища для хранения из состояния. Дефольный экземпляр хранилища может быть изменен с помощью функции setDefaultStore. По дефолтну getDefaultStore возвращает экземпляр класса Store создавающийся при старте приложения.

setDefaultStore(store)

Функция для назначения дефолтного экземпляра хранилища состояния. Принимает на входе экземпляр класса который описывает интерфейс IStore.

start()

Функция запускающая процесс, который фиксирует все обращения к состояниям юнитов (к свойству state экземпляров классов Unit или ArrayUnit).

getTriggered()

Функция для получения экземпляров юнитов, к состояниям которых были обращения с момента вызова функции start(). Данная функция бросит исключение если процесс записи обращений к состояниям юнитов не запущен.

stop()

Функция останавливающая процесс, который фиксирует все обращения к состояниям юнитов (к свойству state экземпляров классов Unit или ArrayUnit).

getStateByPath(path, state)

Вспомогательная функция которая получает значение находящееся по пути path в объекте state.

putByPath(value, path, state)

Чистая вспомогательная функция возвращает объект, скопированный из объекта state, но у котого по пути path будет значение value. Входные параметры ни как не модифицируются.

deleteByPath(path, state)

Чистая вспомогательная функция возвращает объект, скопированный из объекта state, но у котого по пути path будет удалено значение. Входные параметры ни как не модифицируются.

splitName(pathStr)

Вспомогательная функция для разбиения строки с каким-либо путем на массив строк (разбиение происходит по символу '.').

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.0.0

6 years ago