3.1.8 • Published 12 days ago

@alt-point/active-models v3.1.8

Weekly downloads
23
License
MIT
Repository
github
Last release
12 days ago

@alt-point/active-models

Пакет с базовыми классами на TS для упрощения работы со структурами данных.

Какие проблемы поможет решить?

  • Реализовать модели данных с реактивными свойствами (ActiveModel);
  • Контролировать целостность структур данных (fillable, hidden, protected);
  • Контролировать тип и целостность данных в каждом конкретном свойстве в рантайме;
  • подписаться на изменения данных в свойствах модели;

Installation

yarn

yarn add @alt-point/active-models

npm

npm install --save @alt-point/active-models

ActiveModel

Класс реализован с использованием Proxy.

Назначение: контроль целостности структуры и типов данных моделей приходящих из внешних источников/подсистем (DTO)

Пример, иллюстрирующий применение

@Decorators

@ActiveField(opts: ActiveFieldDescriptor)

type ActiveFieldDescriptor = object & {
    setter?: Setter<any> // ассессор на установку значения
    getter?: Getter<any> // ацессор на получение значения
    validator?: Validator<any> // валидатор на установку значения
    readonly?: boolean // поле модели будет доступно только на чтение
    hidden?: boolean // поле скрыто из перечисляемых свойств
    fillable?: boolean // поле доступно для установки и изменения
    protected?: boolean // запрещено удалять поле из модели
    attribute?: any // Значение по умолчанию для поля модели в момент создания объекта
    value?: any // алиас для `attribute`
    factory?: typeof ActiveModel | [typeof ActiveModel, () => ActiveModel] // Фабрика (extends ActiveModel) для обработки значения. Массивы так же обрабатывает.
    on?: // листенеры на события модельки, цепляются на конкретное свойство
      beforeSetValue?: ({ target, prop, value, oldValue }) => void // вызовется перед установкой значение 
      afterSetValue?: ({ target, prop, value, oldValue }) => void // сразу после установки значения
      beforeDeletingAttribute?: ({ target, prop }) => void // перед удалением свойства из модели
      nulling?: ({ target, prop, value, oldValue }) => void  // если у свойства было значение и вместо него установили null
    once?: // всё тоже самое, что и в on
}

CallableModel

Базовый класс, реализованный также через Proxy, чтобы можно было обращаться с объектом как с функцией.

Пример использования:

import { CallableModel } from '@alt-point/active-models'

class Notify extends CallableModel {
  // Define
  __call (...args) {
      return this.success(...args)
  }

  success (successMessage) {
     alert(successMessage)
  }

  silent (message) {
    console.log('Silent message:' + message)
  }

}

Дальше можем создать объект класса Notify как плагин в Nuxt.js/Vue.js и использовать:

// плагин
export default (ctx, inject) => {
  ctx.$notify = new Notify()
  inject('notify', new Notify())
}


// в компоненте теперь можно юзать:
this.$notify.silent('Write notice to console!')
this.$notify('Alert!')

TODO:

  • refactor readonly fields behavior: filling only creating;
  • add more examples;
  • tests;
  • TS;
  • add examples for server (node.js);
  • Translate to english and others languages;

Credits

Alex D. Bubenchikov, surrealistik@alt-point.ru

3.1.8

12 days ago

3.1.7

2 months ago

3.1.6

2 months ago

3.1.5

3 months ago

3.1.3

3 months ago

3.1.2

3 months ago

3.1.1

3 months ago

3.1.4

3 months ago

3.1.0

3 months ago

3.0.10

5 months ago

3.0.9

5 months ago

3.0.8

5 months ago

3.0.7

5 months ago

3.0.6

5 months ago

3.0.5

5 months ago

3.0.4

5 months ago

3.0.3

5 months ago

3.0.2

5 months ago

3.0.1

5 months ago

3.0.0

5 months ago

2.3.0

6 months ago

2.3.2

5 months ago

2.3.1

5 months ago

2.3.0-fix

6 months ago

2.3.3

5 months ago

2.2.9

8 months ago

2.2.8

10 months ago

2.2.7

1 year ago

2.2.6

1 year ago

2.2.5

2 years ago

2.2.4

2 years ago

2.2.3

3 years ago

2.2.1

3 years ago

2.2.2

3 years ago

2.2.0

3 years ago

2.1.2

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.1

3 years ago

1.1.2

3 years ago

1.1.0

3 years ago

1.0.44

3 years ago

1.0.42

3 years ago

1.0.41

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago