# @capibar/core

> CapibarJS - это фреймворк для создания различных сервисов на основе `Node.js >= 18`,

Latest version **0.1.22** (published 2023-07-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install @capibar/core
pnpm add @capibar/core
yarn add @capibar/core
bun add @capibar/core
```

## Health

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

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.22 |
| Published | 2023-07-30 |
| First published | 2023-05-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=18 |
| Dependencies | 3 |
| Unpacked size | 206.8 KB |
| Known vulnerabilities | 0 (+3 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | CapibarJS |
| Maintainers | pysdbi |

## Links

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

## Dependencies (3)

- [ws](https://npm.io/package/ws.md) 8.12.0
- [@capibar/client](https://npm.io/package/@capibar/client.md) 0.0.5
- [@capibar/explorer](https://npm.io/package/@capibar/explorer.md) 0.0.10

## Recent versions

- 0.1.22 (latest) — 2023-07-30
- 0.1.21 — 2023-07-29
- 0.1.20 — 2023-07-28
- 0.1.19 — 2023-07-21
- 0.1.18 — 2023-07-19
- 0.1.17 — 2023-07-19
- 0.1.16 — 2023-07-18
- 0.1.15 — 2023-07-18
- 0.1.14 — 2023-07-14
- 0.1.13 — 2023-07-14
- 0.1.11 — 2023-07-14
- 0.1.10 — 2023-07-14
- 0.1.9 — 2023-07-14
- 0.1.8 — 2023-06-30
- 0.1.7 — 2023-06-30
- … 6 more at https://npm.io/package/@capibar/core/versions

## README

# <img src="README/favicon.png" alt="" width="32px" /> Capibar JS

CapibarJS - это фреймворк для создания различных сервисов на основе `Node.js >= 18`,

### Принципы:
- `DDD`
- `transport-protocol-agnostic`
- `GRASP`
- `Low Coupling`
- `High Cohesion`

Он также предоставляет свою систему модульности, которая обеспечивает Низкую связанность `Low Coupling` и Высокое зацепление `High Cohesion`.



---

### Demo: http://chotko-reklama.ru:5500
### Example: https://github.com/CapibarJS/example

---

## Install

```shell
npm install @capibar/core
# or yarn
yarn add @capibar/core
```

> Node.js версия должна выше 18.x

## Usage

Сначала импортируйте `Server` из `@capibar/core` и создайте экземпляр сервера:

```js
const { Server } = require('@capibar/core');
const server = new Server();
server.start();
```
> По умолчанию запускаются Статический сервер из папки `app/static` и транспортные слои `http` и `ws`

Затем создайте файл `list.js` по пути `app/ship/list.js` и добавьте следующее содержимое:
```js
defineApi({
    params: ['name:string', 'speed:!int', 'description:?string'],
    returns: ['id'],
    method: async ({name, speed, description}) => {
        const id = Math.floor(Math.random() * 99)
        const newObj = {id, name, speed, description}
        newObj.description = newObj?.description ?? 'New description'
        return newObj;
    }
})
```

> ***defineApi*** - Удобная обертка для описания файл-функции.
> 
> ***params***    - Входные параметры функции, которые валидируются и трансформируются с помощью класса Schema. `string[] | ISchemaDefine`
> 
> ***returns***   - Выходные данные из функции. `string[] | ISchemaDefine`
> 
> ***method***    - Бизнес-логика функции `api.ship.add(...)`. `(...args) => Promise<any> | any`

### Пример вызова

> Пример вызова функции из другой функции `api.ship.add({ name: 'first ship', speed: 11 })`.

Каждая такая функция является контроллером транспортов.

Например, функцию `ship.add` можно получить по транспорту HTTP, выполнив запрос: 
`POST http://localhost:3000/api/ship/add` 
> body:`{ "name": "ship", "method": "add", args: [{ name:'ship', speed:11 }] }` 

или по транспорту WebSockets:

> `{ "name": "ship", "method": "add", "args": [{"name": 123,"speed": 1}] }`


### Получение структуры API

Для получения структуры API можно вызвать ручку с параметрами:

```json 
{
  "name": "_",
  "method": "introspect",
  "args": {}
}
```


---

# Лицензия
MIT. Подробнее см. в файле LICENSE.

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