Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lskjs/lskjs

Lego Starter Kit — Node.js & React isomorphic app creator (Node.js, Express, React.js, Babel, PostCSS, Webpack)
https://github.com/lskjs/lskjs

babel boilerplate express nodejs postcss react starter-kit webpack

Last synced: 6 days ago
JSON representation

Lego Starter Kit — Node.js & React isomorphic app creator (Node.js, Express, React.js, Babel, PostCSS, Webpack)

Awesome Lists containing this project

README

        

# LSK.js – lskjs

> @lskjs/lskjs – LSK.js – command line interface scripts

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/lskjs)](https://www.npmjs.com/package/@lskjs/lskjs)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/lskjs)](https://www.npmjs.com/package/@lskjs/lskjs)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/lskjs)](https://bundlephobia.com/result?p=@lskjs/lskjs)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/lskjs)](https://www.npmjs.com/package/@lskjs/lskjs)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/lskjs)](https://bundlephobia.com/result?p=@lskjs/lskjs)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/lskjs)](https://bundlephobia.com/result?p=@lskjs/lskjs)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

***

# Table of contents

* [⌨️ Install](#️-install)

* [First principles](#first-principles)
* [Манифест](#манифест)
* [Вопросы на которые стоит ответить создателю:](#вопросы-на-которые-стоит-ответить-создателю)
* [Как запускать любой lsk-образный проект](#как-запускать-любой-lsk-образный-проект)
* [Packages included in this repo](#packages-included-in-this-repo)

* [Auth](#auth)

* [Bunyan log levels](#bunyan-log-levels)

* * [Log levels](#log-levels)

* [Что еще нужно дописать](#что-еще-нужно-дописать)

* [Getting Started](#getting-started)

* [Requirements](#requirements)

* [Структура проекта](#структура-проекта)

* [Quick Start](#quick-start)

* [1. Get the latest version](#1-get-the-latest-version)
* [2. Run `npm install`](#2-run-npm-install)
* [3. Run `npm start`](#3-run-npm-start)

* [How to Build, Test, Deploy](#how-to-build-test-deploy)

* [How to Update](#how-to-update)

* [📖 License](#-license)

* [👥 Contributors](#-contributors)

* [👏 Contributing](#-contributing)

* [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/lskjs

# npm
npm i @lskjs/lskjs
```

***

## First principles

* Асинхронность все везде
* Ленивость всех операций
* Декларативный подход для конечного программиста

## Манифест

Стандарт бы и 5 лет назад, но авангардисты JS создали coffescript, babel и ts, потому что JS окостенел и не двигался. Так же как и ВКшники написали свой KPHP.

В этом пути нет ничего постыдного, то что еще вчера считалось ебанистикой, завтра может захватить умы своим удобством.

У меня нет априорной аппеляции к авторитетам из ECMA.

Я делаю среду комфортную для конечного программиста, который делает продукт для клиента.
Если стандарт позволяет написать удобное решение — то придумаем как.
Если для этого придется переписать стандарт — значит перепишем.
Благо babel максимальным образом позволяет писать собственные диалекты.

Не задача должна прогибаться под решением, а решение под задачу.

## Вопросы на которые стоит ответить создателю:

* Пример Api на бэке handler
* Пример функции и как ее переопределить
* Модели монго как подключить
* Как достать, когда пишешь Api
* Роутер добавление роута и страницы
* CrudApi основные методы
* Как оборачивать ответ сервера, чтобы вернулся объект
* Как сделать свой стор
* Как достать стор на странице

## Как запускать любой lsk-образный проект

1. git clone `repo`
2. npm install
3. npm run bootstrap
4.

* copy .env.js if needed
* npm run dev *or*
* cd packages/`package` && npm run dev

## Packages included in this repo

| Package | Description | Activity | Version | Bundle | Package Size
| -------------------- | --------------- | -------- | ------- | ------ | -------------------------
| [apiquery](packages/apiquery) | http/s + websockets api client for Web, Node.js and React Native throw fetch or axios | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/apiquery.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/apiquery) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/apiquery.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/apiquery) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/apiquery?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/apiquery) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/apiquery)](https://packagephobia.now.sh/result?p=@lskjs/apiquery)
| [apm](packages/apm) | LSK.js – apm – module Node.js agent for Elastic APM | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/apm.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/apm) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/apm.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/apm) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/apm?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/apm) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/apm)](https://packagephobia.now.sh/result?p=@lskjs/apm)
| [auth](packages/auth) | LSK.js – auth – module for authorization by login and password and singup through social networks | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/auth.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/auth) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/auth.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/auth) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/auth?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/auth) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/auth)](https://packagephobia.now.sh/result?p=@lskjs/auth)
| [autobind](packages/autobind) | LSK ux subrepo: autobind | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/autobind.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/autobind) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/autobind.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/autobind) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/autobind?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/autobind) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/autobind)](https://packagephobia.now.sh/result?p=@lskjs/autobind)
| [billing](packages/billing) | LSK.js module for adding billing in cabinet | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/billing.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/billing) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/billing.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/billing) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/billing?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/billing) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/billing)](https://packagephobia.now.sh/result?p=@lskjs/billing)
| [bots](packages/bots) | LSK.js module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots)](https://packagephobia.now.sh/result?p=@lskjs/bots)
| [bots-base](packages/bots-base) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-base.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-base) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-base.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-base) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-base?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-base) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-base)](https://packagephobia.now.sh/result?p=@lskjs/bots-base)
| [bots-plugin](packages/bots-plugin) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-plugin.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-plugin.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-plugin?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-plugin) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-plugin)](https://packagephobia.now.sh/result?p=@lskjs/bots-plugin)
| [bots-plugin-debug](packages/bots-plugin-debug) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-plugin-debug.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-debug) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-plugin-debug.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-debug) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-plugin-debug?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-plugin-debug) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-plugin-debug)](https://packagephobia.now.sh/result?p=@lskjs/bots-plugin-debug)
| [bots-plugin-menu](packages/bots-plugin-menu) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-plugin-menu.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-menu) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-plugin-menu.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-menu) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-plugin-menu?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-plugin-menu) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-plugin-menu)](https://packagephobia.now.sh/result?p=@lskjs/bots-plugin-menu)
| [bots-plugin-notify](packages/bots-plugin-notify) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-plugin-notify.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-notify) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-plugin-notify.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-notify) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-plugin-notify?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-plugin-notify) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-plugin-notify)](https://packagephobia.now.sh/result?p=@lskjs/bots-plugin-notify)
| [bots-plugin-polundra](packages/bots-plugin-polundra) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-plugin-polundra.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-polundra) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-plugin-polundra.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-polundra) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-plugin-polundra?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-plugin-polundra) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-plugin-polundra)](https://packagephobia.now.sh/result?p=@lskjs/bots-plugin-polundra)
| [bots-plugin-portal](packages/bots-plugin-portal) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-plugin-portal.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-portal) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-plugin-portal.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-plugin-portal) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-plugin-portal?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-plugin-portal) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-plugin-portal)](https://packagephobia.now.sh/result?p=@lskjs/bots-plugin-portal)
| [bots-provider](packages/bots-provider) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider)
| [bots-provider-clubhouse](packages/bots-provider-clubhouse) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-clubhouse.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-clubhouse) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-clubhouse.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-clubhouse) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-clubhouse?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-clubhouse) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-clubhouse)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-clubhouse)
| [bots-provider-discord](packages/bots-provider-discord) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-discord.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-discord) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-discord.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-discord) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-discord?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-discord) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-discord)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-discord)
| [bots-provider-instagram](packages/bots-provider-instagram) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-instagram.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-instagram) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-instagram.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-instagram) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-instagram?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-instagram) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-instagram)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-instagram)
| [bots-provider-slack](packages/bots-provider-slack) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-slack.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-slack) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-slack.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-slack) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-slack?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-slack) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-slack)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-slack)
| [bots-provider-telegram](packages/bots-provider-telegram) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-telegram.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-telegram) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-telegram.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-telegram) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-telegram?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-telegram) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-telegram)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-telegram)
| [bots-provider-twitter](packages/bots-provider-twitter) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-twitter.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-twitter) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-twitter.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-twitter) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-twitter?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-twitter) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-twitter)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-twitter)
| [bots-provider-vk](packages/bots-provider-vk) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-vk.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-vk) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-vk.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-vk) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-vk?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-vk) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-vk)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-vk)
| [bots-provider-whatsapp](packages/bots-provider-whatsapp) | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-provider-whatsapp.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-whatsapp) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-provider-whatsapp.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-provider-whatsapp) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-provider-whatsapp?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-provider-whatsapp) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-provider-whatsapp)](https://packagephobia.now.sh/result?p=@lskjs/bots-provider-whatsapp)
| [bots-router](packages/bots-router) | LSK.js router for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bots-router.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-router) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bots-router.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bots-router) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bots-router?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bots-router) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bots-router)](https://packagephobia.now.sh/result?p=@lskjs/bots-router)
| [build-locales](packages/build-locales) | CLI for build i18 locales from Google spreadsheet | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/build-locales.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/build-locales) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/build-locales.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/build-locales) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/build-locales?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/build-locales) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/build-locales)](https://packagephobia.now.sh/result?p=@lskjs/build-locales)
| [bunyan](packages/bunyan) | Light weight bunyan logger for a JSON logging library for node.js services without dtrace | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/bunyan.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bunyan) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/bunyan.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/bunyan) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/bunyan?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/bunyan) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/bunyan)](https://packagephobia.now.sh/result?p=@lskjs/bunyan)
| [config](packages/config) | LSK config. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/config.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/config) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/config.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/config) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/config?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/config) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/config)](https://packagephobia.now.sh/result?p=@lskjs/config)
| [db](packages/db) | LSK.js module for working with mongodb database | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/db.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/db) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/db.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/db) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/db?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/db) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/db)](https://packagephobia.now.sh/result?p=@lskjs/db)
| [elastic](packages/elastic) | LSK.js module for elastic search | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/elastic.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/elastic) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/elastic.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/elastic) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/elastic?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/elastic) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/elastic)](https://packagephobia.now.sh/result?p=@lskjs/elastic)
| [event](packages/event) | LSK module for event. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/event.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/event) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/event.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/event) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/event?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/event) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/event)](https://packagephobia.now.sh/result?p=@lskjs/event)
| [getspreadsheet](packages/getspreadsheet) | LSK getspreadsheet. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/getspreadsheet.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/getspreadsheet) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/getspreadsheet.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/getspreadsheet) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/getspreadsheet?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/getspreadsheet) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/getspreadsheet)](https://packagephobia.now.sh/result?p=@lskjs/getspreadsheet)
| [grant](packages/grant) | LSK module for grant. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/grant.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/grant) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/grant.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/grant) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/grant?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/grant) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/grant)](https://packagephobia.now.sh/result?p=@lskjs/grant)
| [i18](packages/i18) | LSK module for internationalization with i18next. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/i18.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/i18) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/i18.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/i18) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/i18?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/i18) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/i18)](https://packagephobia.now.sh/result?p=@lskjs/i18)
| [kafka](packages/kafka) | LSK module for kafka. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/kafka.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/kafka) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/kafka.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/kafka) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/kafka?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/kafka) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/kafka)](https://packagephobia.now.sh/result?p=@lskjs/kafka)
| [launcher](packages/launcher) | LSK Launcher. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/launcher.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/launcher) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/launcher.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/launcher) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/launcher?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/launcher) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/launcher)](https://packagephobia.now.sh/result?p=@lskjs/launcher)
| [linkall](packages/linkall) | LSK link all. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/linkall.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/linkall) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/linkall.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/linkall) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/linkall?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/linkall) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/linkall)](https://packagephobia.now.sh/result?p=@lskjs/linkall)
| [log](packages/log) | LSK log. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/log.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/log) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/log.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/log) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/log?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/log) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/log)](https://packagephobia.now.sh/result?p=@lskjs/log)
| [log](packages/log) | Логгер совмещающий лучшие черты morgan, winston, bunyan, logrus. debug. Базируется на debug-level. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/log.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/log) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/log.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/log) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/log?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/log) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/log)](https://packagephobia.now.sh/result?p=@lskjs/log)
| [mailer](packages/mailer) | LSK module for send and receive emails. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/mailer.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/mailer) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/mailer.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/mailer) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/mailer?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/mailer) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/mailer)](https://packagephobia.now.sh/result?p=@lskjs/mailer)
| [mobx](packages/mobx) | LSK module for mobx. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/mobx.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/mobx) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/mobx.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/mobx) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/mobx?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/mobx) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/mobx)](https://packagephobia.now.sh/result?p=@lskjs/mobx)
| [module](packages/module) | Module system with dependency injection, event emitter, logger and submodules tree | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/module.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/module) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/module.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/module) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/module?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/module) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/module)](https://packagephobia.now.sh/result?p=@lskjs/module)
| [permit](packages/permit) | LSK module for one time codes and permits. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/permit.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/permit) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/permit.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/permit) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/permit?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/permit) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/permit)](https://packagephobia.now.sh/result?p=@lskjs/permit)
| [proxy](packages/proxy) | LSK module for proxy. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/proxy.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/proxy) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/proxy.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/proxy) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/proxy?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/proxy) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/proxy)](https://packagephobia.now.sh/result?p=@lskjs/proxy)
| [rabbit](packages/rabbit) | LSK module for rabbit. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/rabbit.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/rabbit) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/rabbit.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/rabbit) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/rabbit?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/rabbit) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/rabbit)](https://packagephobia.now.sh/result?p=@lskjs/rabbit)
| [reactapp](packages/reactapp) | LSK ux subrepo: reactapp | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/reactapp.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/reactapp) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/reactapp.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/reactapp) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/reactapp?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/reactapp) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/reactapp)](https://packagephobia.now.sh/result?p=@lskjs/reactapp)
| [rlog](packages/rlog) | LSK module for remote logger. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/rlog.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/rlog) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/rlog.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/rlog) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/rlog?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/rlog) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/rlog)](https://packagephobia.now.sh/result?p=@lskjs/rlog)
| [scylla](packages/scylla) | LSK module for scylla. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/scylla.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/scylla) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/scylla.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/scylla) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/scylla?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/scylla) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/scylla)](https://packagephobia.now.sh/result?p=@lskjs/scylla)
| [sequelize](packages/sequelize) | LSK module for sequelize. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/sequelize.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/sequelize) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/sequelize.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/sequelize) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/sequelize?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/sequelize) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/sequelize)](https://packagephobia.now.sh/result?p=@lskjs/sequelize)
| [server](packages/server) | LSK server. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/server.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/server) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/server.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/server) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/server?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/server) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/server)](https://packagephobia.now.sh/result?p=@lskjs/server)
| [server-api](packages/server-api) | LSK server-api. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/server-api.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/server-api) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/server-api.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/server-api) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/server-api?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/server-api) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/server-api)](https://packagephobia.now.sh/result?p=@lskjs/server-api)
| [sh](packages/sh) | LSK ux subrepo: sh | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/sh.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/sh) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/sh.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/sh) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/sh?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/sh) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/sh)](https://packagephobia.now.sh/result?p=@lskjs/sh)
| [sms](packages/sms) | LSK module for sms. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/sms.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/sms) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/sms.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/sms) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/sms?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/sms) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/sms)](https://packagephobia.now.sh/result?p=@lskjs/sms)
| [tbot](packages/tbot) | LSK module. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/tbot.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/tbot) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/tbot.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/tbot) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/tbot?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/tbot) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/tbot)](https://packagephobia.now.sh/result?p=@lskjs/tbot)
| [uapp](packages/uapp) | LSK universal react app wrapper | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/uapp.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/uapp) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/uapp.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/uapp) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/uapp?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/uapp) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/uapp)](https://packagephobia.now.sh/result?p=@lskjs/uapp)
| [upload](packages/upload) | LSK module for uploading files. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/upload.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/upload) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/upload.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/upload) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/upload?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/upload) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/upload)](https://packagephobia.now.sh/result?p=@lskjs/upload)
| [utils](packages/utils) | LSK.js – utils – helpers and functions | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/utils.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/utils) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/utils.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/utils) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/utils?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/utils) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/utils)](https://packagephobia.now.sh/result?p=@lskjs/utils)
| [worker](packages/worker) | LSK module for worker. | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/worker.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/worker) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/worker.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/worker) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/worker?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/worker) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/worker)](https://packagephobia.now.sh/result?p=@lskjs/worker)
| [add-to-calendar](packages/add-to-calendar) | LSK ux subrepo: extra | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/add-to-calendar.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/add-to-calendar) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/add-to-calendar.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/add-to-calendar) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/add-to-calendar?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/add-to-calendar) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/add-to-calendar)](https://packagephobia.now.sh/result?p=@lskjs/add-to-calendar)
| [article](packages/article) | LSK ux subrepo: article | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/article.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/article) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/article.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/article) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/article?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/article) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/article)](https://packagephobia.now.sh/result?p=@lskjs/article)
| [avatar](packages/avatar) | LSK ux subrepo: avatar | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/avatar.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/avatar) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/avatar.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/avatar) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/avatar?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/avatar) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/avatar)](https://packagephobia.now.sh/result?p=@lskjs/avatar)
| [button](packages/button) | LSK ux subrepo: button | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/button.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/button) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/button.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/button) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/button?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/button) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/button)](https://packagephobia.now.sh/result?p=@lskjs/button)
| [button2](packages/button2) | LSK ux subrepo: button | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/button2.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/button2) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/button2.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/button2) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/button2?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/button2) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/button2)](https://packagephobia.now.sh/result?p=@lskjs/button2)
| [chat](packages/chat) | LSK ux subrepo: chat | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/chat.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/chat) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/chat.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/chat) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/chat?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/chat) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/chat)](https://packagephobia.now.sh/result?p=@lskjs/chat)
| [cookie-consent](packages/cookie-consent) | LSK ux subrepo: cookie-consent | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/cookie-consent.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/cookie-consent) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/cookie-consent.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/cookie-consent) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/cookie-consent?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/cookie-consent) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/cookie-consent)](https://packagephobia.now.sh/result?p=@lskjs/cookie-consent)
| [css](packages/css) | LSK ux subrepo: css | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/css.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/css) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/css.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/css) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/css?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/css) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/css)](https://packagephobia.now.sh/result?p=@lskjs/css)
| [dash](packages/dash) | LSK.js – Dash – React components for your own dashboard | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/dash.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/dash) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/dash.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/dash) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/dash?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/dash) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/dash)](https://packagephobia.now.sh/result?p=@lskjs/dash)
| [dashboard](packages/dashboard) | LSK ux subrepo: dashboard | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/dashboard.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/dashboard) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/dashboard.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/dashboard) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/dashboard?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/dashboard) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/dashboard)](https://packagephobia.now.sh/result?p=@lskjs/dashboard)
| [dev](packages/dev) | LSK ux subrepo: ui-dev | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/dev.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/dev) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/dev.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/dev) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/dev?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/dev) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/dev)](https://packagephobia.now.sh/result?p=@lskjs/dev)
| [docs](packages/docs) | lskjs docs | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/docs.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/docs) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/docs.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/docs) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/docs?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/docs) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/docs)](https://packagephobia.now.sh/result?p=@lskjs/docs)
| [downloads](packages/downloads) | LSK ux subrepo: download | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/downloads.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/downloads) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/downloads.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/downloads) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/downloads?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/downloads) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/downloads)](https://packagephobia.now.sh/result?p=@lskjs/downloads)
| [extra](packages/extra) | LSK ux subrepo: extra | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/extra.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/extra) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/extra.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/extra) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/extra?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/extra) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/extra)](https://packagephobia.now.sh/result?p=@lskjs/extra)
| [flag](packages/flag) | LSK ux subrepo: flag | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/flag.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/flag) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/flag.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/flag) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/flag?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/flag) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/flag)](https://packagephobia.now.sh/result?p=@lskjs/flag)
| [form](packages/form) | LSK ux subrepo: form | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/form.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/form) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/form.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/form) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/form?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/form) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/form)](https://packagephobia.now.sh/result?p=@lskjs/form)
| [grid](packages/grid) | LSK ux subrepo: grid | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/grid.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/grid) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/grid.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/grid) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/grid?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/grid) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/grid)](https://packagephobia.now.sh/result?p=@lskjs/grid)
| [gridtable](packages/gridtable) | LSK ux subrepo: gridtable | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/gridtable.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/gridtable) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/gridtable.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/gridtable) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/gridtable?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/gridtable) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/gridtable)](https://packagephobia.now.sh/result?p=@lskjs/gridtable)
| [image](packages/image) | LSK ux subrepo: image | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/image.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/image) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/image.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/image) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/image?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/image) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/image)](https://packagephobia.now.sh/result?p=@lskjs/image)
| [landing](packages/landing) | LSK ux subrepo: landing | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/landing.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/landing) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/landing.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/landing) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/landing?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/landing) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/landing)](https://packagephobia.now.sh/result?p=@lskjs/landing)
| [link](packages/link) | LSK ux subrepo: link | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/link.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/link) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/link.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/link) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/link?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/link) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/link)](https://packagephobia.now.sh/result?p=@lskjs/link)
| [list](packages/list) | LSK ux subrepo: list | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/list.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/list) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/list.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/list) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/list?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/list) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/list)](https://packagephobia.now.sh/result?p=@lskjs/list)
| [modal](packages/modal) | LSK ux subrepo: modal | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/modal.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/modal) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/modal.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/modal) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/modal?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/modal) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/modal)](https://packagephobia.now.sh/result?p=@lskjs/modal)
| [navbar](packages/navbar) | LSK ux subrepo: navbar | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/navbar.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/navbar) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/navbar.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/navbar) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/navbar?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/navbar) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/navbar)](https://packagephobia.now.sh/result?p=@lskjs/navbar)
| [notification](packages/notification) | LSK ux subrepo: notification | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/notification.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/notification) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/notification.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/notification) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/notification?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/notification) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/notification)](https://packagephobia.now.sh/result?p=@lskjs/notification)
| [page](packages/page) | LSK ux subrepo: page | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/page.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/page) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/page.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/page) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/page?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/page) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/page)](https://packagephobia.now.sh/result?p=@lskjs/page)
| [progress](packages/progress) | LSK ux subrepo: progress | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/progress.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/progress) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/progress.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/progress) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/progress?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/progress) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/progress)](https://packagephobia.now.sh/result?p=@lskjs/progress)
| [scroll](packages/scroll) | LSK ux subrepo: scroll | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/scroll.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/scroll) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/scroll.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/scroll) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/scroll?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/scroll) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/scroll)](https://packagephobia.now.sh/result?p=@lskjs/scroll)
| [slide](packages/slide) | LSK ux subrepo: slide | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/slide.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/slide) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/slide.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/slide) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/slide?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/slide) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/slide)](https://packagephobia.now.sh/result?p=@lskjs/slide)
| [t](packages/t) | LSK ux subrepo: t | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/t.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/t) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/t.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/t) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/t?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/t) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/t)](https://packagephobia.now.sh/result?p=@lskjs/t)
| [tag](packages/tag) | LSK ux subrepo: tag | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/tag.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/tag) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/tag.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/tag) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/tag?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/tag) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/tag)](https://packagephobia.now.sh/result?p=@lskjs/tag)
| [theme](packages/theme) | LSK ux subrepo: theme | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/theme.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/theme) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/theme.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/theme) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/theme?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/theme) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/theme)](https://packagephobia.now.sh/result?p=@lskjs/theme)
| [typo](packages/typo) | LSK ux subrepo: typo | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/typo.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/typo) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/typo.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/typo) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/typo?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/typo) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/typo)](https://packagephobia.now.sh/result?p=@lskjs/typo)
| [ui](packages/ui) | LSK ux subrepo: ui | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/ui.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/ui) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/ui.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/ui) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/ui?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/ui) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/ui)](https://packagephobia.now.sh/result?p=@lskjs/ui)
| [ui2](packages/ui2) | LSK ux subrepo: ui2 | [![NPM Badge](https://img.shields.io/npm/dw/@lskjs/ui2.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/ui2) | [![NPM Badge](https://img.shields.io/npm/v/@lskjs/ui2.svg?logo=npm\&label=\&style=flat-square)](https://www.npmjs.com/package/@lskjs/ui2) | [![NPM Badge](https://img.shields.io/bundlephobia/minzip/@lskjs/ui2?label=\&style=flat-square)](https://bundlephobia.com/result?p=@lskjs/ui2) | [![install size](https://packagephobia.now.sh/badge?p=@lskjs/ui2)](https://packagephobia.now.sh/result?p=@lskjs/ui2)

Вдохновлен:

* [Express.js](): концепция средних слоев, способ их конфигурирования
* [Sails.js & Grails.js]()
* [Loopback](egoegoegoegoegoegoeg)
* https://github.com/developit/express-es6-rest-api/
* react-starter-kit: Фронт, Сборка на ES6 без Gulp, Grunt. Конфиг webpack'а

this.useMiddlewares()
this.useRoutes()
this.useDefaultRoute()

А также:

* Express async router
* Json Web Token
* Bunyan logger with updated view

# Auth

Токен можно прикладывать следующими методами

* в Header `Authorization: Bearer %USER_TOKEN%`
* в Header `X-Access-Token: %USER_TOKEN%`
* в Cookie: `token=%USER_TOKEN%`
* в GET параметр: `?token=%USER_TOKEN%`

# Bunyan log levels

LSKit принимает стоковый Bunyan логгер

```javascript
log.trace('Starting method');

if (!req.user) {
log.fatal('Cannot get User');
throw new Error('Cannot get User')
}

log.info('Method success');
```

### Log levels

* fatal
* error
* warn
* info
* debug
* trace

# Что еще нужно дописать

* Что из себя представляет модуль
* Что такое мидлвара?
* Что такое ресурс? Resource ENDPOINT
* Универсальная модель?
* Документация со swagger

## Getting Started

### Requirements

* Mac OS X, Windows, or Linux
* [Node.js](https://nodejs.org/) v6.5 or newer
* `npm` v3.10 or newer (new to [npm](https://docs.npmjs.com/)?)
* `node-gyp` prerequisites mentioned [here](https://github.com/nodejs/node-gyp)
* Text editor or IDE pre-configured with React/JSX/Flow/ESlint ([learn more](./how-to-configure-text-editors.md))

### Структура проекта

Before you start, take a moment to see how the project structure looks like:

.
├── /build/ # Директория в которую билдится проект
├── /node_modules/ # Сторонние библиотеки и утилиты
├── /src/ # Исходный код приложения
│ ├── /CoreApp/ # Базовое приложение
│ │ ├── /api/ # Интерфейс клиент-серверного взаимодействия
│ │ ├── /middlewares/ # Среднии слои express
│ │ ├── /models/ # Модели базы данных
│ │ ├── /resourses/ # Ресурсы
│ │ ├── CoreApp.js # Класс-реализация базового приложения
│ │ ├── requests.js # Реквесты приложения
│ │ └── responses.js # Респонсы приложения
│ ├── /ReactApp/ # Базовое приложение
│ │ ├── /compoents/ # React компоненты
│ │ ├── /Html/ # Класс-реализа
│ │ ├── /Html/ # Класс-реализа
│ │ ├── /Html/ # Класс-реализа
│ │ ├── /routes/ # Роутер с страницами\экранами, которые являются React компонентами
│ │ ├── /models/ # Модели базы данных
│ │ ├── /resourses/ # Ресурсы
│ │ ├── /routes/ # Роутер с страницами\экранами, которые являются React компонентами
│ │ ├── /stores/ # Сторы React приложения
│ │ ├ └── /AppStore.js # Главный стор React приложения
│ │ ├── ReactApp.client.js # Класс-реализация базового приложения на клиенте
│ │ ├── ReactApp.server.js # Класс-реализация базового приложения на сервере
│ │ ├── requests.js # Реквесты приложения
│ │ └── responses.js # Респонсы приложения
│ ├── /client.js # Точка входа Клиентского приложения
│ ├── /config # Общие настройки проекта
│ └── /server.js # Точка входа Серверного приложения
├── /test/ # Модульные и интеграционные тесты
├── /tools/ # Скрипты и утилиты для автоматизации сборки проекта
│ ├── /config.js # Конфигурация сборки проекта
│ ├── /run.js # Система запуска сборки
│ └── /webpack.config.js # Конфигурация Вебпака для клинстких и серверных бандлов
└── package.json # Список сторонних библиотек и утилит

**Note**: The current version of RSK does not contain a Flux implementation.
It can be easily integrated with any Flux library of your choice. The most
commonly used Flux libraries are [Flux](http://facebook.github.io/flux/),
[Redux](http://redux.js.org/), and [Relay](http://facebook.github.io/relay/).

### Quick Start

#### 1. Get the latest version

You can start by cloning the latest version of React Starter Kit (RSK) on your
local machine by running:

```shell
$ git clone -o lego-starter-kit -b master --single-branch \
https://github.com/isuvorov/lego-starter-kit.git MyApp
$ cd MyApp
```

Alternatively, you can start a new project based on RSK right from
[WebStorm IDE](https://www.jetbrains.com/webstorm/help/create-new-project-react-starter-kit.html),
or by using [Yeoman generator](https://www.npmjs.com/package/generator-react-fullstack).

#### 2. Run `npm install`

This will install both run-time project dependencies and developer tools listed
in [package.json](../package.json) file.

#### 3. Run `npm start`

This command will build the app from the source files (`/src`) into the output
`/build` folder. As soon as the initial build completes, it will start the
Node.js server (`node build/server.js`) and [Browsersync](https://browsersync.io/)
with [HMR](https://webpack.github.io/docs/hot-module-replacement) on top of it.

> — Node.js server (`build/server.js`)

> — GraphQL server and IDE

> — BrowserSync proxy with HMR, React Hot Transform

> — BrowserSync control panel (UI)

Now you can open your web app in a browser, on mobile devices and start
hacking. Whenever you modify any of the source files inside the `/src` folder,
the module bundler ([Webpack](http://webpack.github.io/)) will recompile the
app on the fly and refresh all the connected browsers.

![browsersync](https://dl.dropboxusercontent.com/u/16006521/react-starter-kit/brwosersync.jpg)

Note that the `npm start` command launches the app in `development` mode,
the compiled output files are not optimized and minimized in this case.
You can use `--release` command line argument to check how your app works
in release (production) mode:

```shell
$ npm start -- --release
```

*NOTE: double dashes are required*

### How to Build, Test, Deploy

If you need just to build the app (without running a dev server), simply run:

```shell
$ npm run build
```

or, for a production build:

```shell
$ npm run build -- --release
```

or, for a production docker build:

```shell
$ npm run build -- --release --docker
```

*NOTE: double dashes are required*

After running this command, the `/build` folder will contain the compiled
version of the app. For example, you can launch Node.js server normally by
running `node build/server.js`.

To check the source code for syntax errors and potential issues run:

```shell
$ npm run lint
```

To launch unit tests:

```shell
$ npm test # Run unit tests with Mocha
$ npm run test:watch # Launch unit test runner and start watching for changes
```

By default, [Mocha](https://mochajs.org/) test runner is looking for test files
matching the `src/**/*.test.js` pattern. Take a look at `src/components/Layout/Layout.test.js`
as an example.

To deploy the app, run:

```shell
$ npm run deploy
```

The deployment script `tools/deploy.js` is configured to push the contents of
the `/build` folder to a remote server via Git. You can easily deploy your app
to [Azure Web Apps](https://azure.microsoft.com/en-us/services/app-service/web/),
or [Heroku](https://www.heroku.com/) this way. Both will execute `npm install --production`
upon receiving new files from you. Note, you should only deploy the contents
of the `/build` folder to a remote server.

### How to Update

If you need to keep your project up to date with the recent changes made to RSK,
you can always fetch and merge them from [this repo](https://github.com/kriasoft/react-starter-kit)
back into your own project by running:

```shell
$ git checkout master
$ git fetch lego-starter-kit
$ git merge lego-starter-kit/master
$ npm install
```

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors



Igor Suvorov

💻 🎨 🤔

# 👏 Contributing

1. Fork it ()
2. Create your feature branch (`git checkout -b features/fooBar`)
3. Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4. Push to the branch (`git push origin feature/fooBar`)
5. Create a new Pull Request

# 📮 Any questions? Always welcome :)

* [Email](mailto:[email protected])
* [LSK.news – Telegram channel](https://t.me/lskjs)
* [Спроси нас в телеграме ;)](https://t.me/lskjschat)