# @codeleaf-sdk/core

> [![npm version](https://badge.fury.io/js/%40codeleaf-sdk%2Fcore.svg)](https://badge.fury.io/js/%40codeleaf-sdk%2Fcore) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/@codeleaf-sdk/core@2.1.3?label=gzipped)

Latest version **2.1.11** (published 2022-04-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install @codeleaf-sdk/core
pnpm add @codeleaf-sdk/core
yarn add @codeleaf-sdk/core
bun add @codeleaf-sdk/core
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.11 |
| Published | 2022-04-26 |
| First published | 2020-10-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 42.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | kugichka |

## Links

- npm: https://www.npmjs.com/package/@codeleaf-sdk/core
- Repository: https://github.com/codeleaf-sdk/core
- Homepage: https://github.com/codeleaf-sdk/core#readme
- Issues: https://github.com/codeleaf-sdk/core/issues
- npm.io page: https://npm.io/package/@codeleaf-sdk/core

## Recent versions

- 2.1.11 (latest) — 2022-04-26
- 2.1.10 — 2022-04-26
- 2.1.9 — 2022-01-26
- 2.1.5 — 2021-06-01
- 2.1.4 — 2021-05-16
- 2.1.3 — 2021-05-12
- 2.1.2 — 2021-05-10
- 2.1.1 — 2021-05-10
- 2.0.1 — 2020-12-04
- 2.0.0 — 2020-12-04
- 1.0.5 — 2020-11-03
- 1.0.4 — 2020-10-31
- 1.0.2 — 2020-10-15
- 1.0.1 — 2020-10-07
- 1.0.0 — 2020-10-07

## README

# @codeleaf-sdk/core
[![npm version](https://badge.fury.io/js/%40codeleaf-sdk%2Fcore.svg)](https://badge.fury.io/js/%40codeleaf-sdk%2Fcore)
![npm bundle size](https://img.shields.io/bundlephobia/minzip/@codeleaf-sdk/core@2.1.3?label=gzipped)

_Очень простое управление микро-архитектурой приложения_

---

## Полезные ссылки
[Wiki](https://github.com/codeleaf-sdk/core/wiki) <br />
[Обсуждение](https://github.com/codeleaf-sdk/core/discussions)

---

## Описание
Эта библиотека предназначенна для помощи в создании React-приложений с чем-то похожим на архитектуру. За основу взят [MobX](https://mobx.js.org). Библиотека позволяет организовать поток данных через инъекцию зависимостей (как в NestJS), а так же более приятно управлять состоянием.

---

## Установка
```sh
yarn add @codeleaf-sdk/core

# required dependencies
yarn add mobx mobx-react-lite react
```

---

## Пример инициализации хранилища
```typescript
type Item = {
  id: number;
  name: string;
}

type Test = {
  value: number,
  arrayed: Item[];
}

class Tested extends Store<Test> {
  constructor() {
    super({
      value: 1,
      arrayed: [
        { id: 1, name: 'foo' },
        { id: 2, name: 'bar' }
      ],
    });
  }
}
```

## Пример изменения поля `value`
```typescript
const test = new Tested();
test.set('value', 2);

// Да, вот так просто!
```

## Пример изменения элемента массива
```typescript
const test = new Tested();
test.setItem('arrayed', ({ id }) => id === 1, { name: 'test' });

// Не то, чтобы это очевидная конструкция
// Но очень полезная!
```

## Пример инициализации модуля с зависимостями
```typescript
const { Store, Service } = CreatePageModule<PageStore, PageService>({
  store: [
    PageStore,
    [
      { target: FetchStore, args: [] },    /* controls data's fetch state */
      { target: TogglersStore, args: [] }, /* controls view mode */
      { target: TogglersStore, args: [] }, /* controls visibility */
    ],
  service: [PageService, null /* no dependencies */],
});
```

## Пример использования зависимостей в хранилище
```typescript
class PageStore extends Store<PageStoreType> {
  constructor(
    readonly fetch: FetchStore,         // автоматически добавляются в поля класса
    readonly viewMode: TogglersStore,
    readonly visibility: TogglersStore,
  ) {
    // 
  }

  someMethod() {
    this.viewMode.set('state', true); // использование зависимости
  }
}
```

---
_Source: https://npm.io/package/@codeleaf-sdk/core · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
