LSK.js – err
@lskjs/err – LSK.js – err – Error class and utils for custom code and message extracting
Table of contents
⌨️ Install
# yarn
yarn i @lskjs/err
# npm
npm i @lskjs/err
First principles
- Асинхронность все везде
- Ленивость всех операций
- Декларативный подход для конечного программиста
Манифест
Стандарт бы и 5 лет назад, но авангардисты JS создали coffescript, babel и ts, потому что JS окостенел и не двигался. Так же как и ВКшники написали свой KPHP.
В этом пути нет ничего постыдного, то что еще вчера считалось ебанистикой, завтра может захватить умы своим удобством.
У меня нет априорной аппеляции к авторитетам из ECMA.
Я делаю среду комфортную для конечного программиста, который делает продукт для клиента.
Если стандарт позволяет написать удобное решение — то придумаем как.
Если для этого придется переписать стандарт — значит перепишем.
Благо babel максимальным образом позволяет писать собственные диалекты.
Не задача должна прогибаться под решением, а решение под задачу.
Вопросы на которые стоит ответить создателю:
- Пример Api на бэке handler
- Пример функции и как ее переопределить
- Модели монго как подключить
- Как достать, когда пишешь Api
- Роутер добавление роута и страницы
- CrudApi основные методы
- Как оборачивать ответ сервера, чтобы вернулся объект
- Как сделать свой стор
- Как достать стор на странице
Как запускать любой lsk-образный проект
- git clone
repo
- npm install
- npm run bootstrap
- 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 | http/s + websockets api client for Web, Node.js and React Native throw fetch or axios | ||||
apm | LSK.js – apm – module Node.js agent for Elastic APM | ||||
auth | LSK.js – auth – module for authorization by login and password and singup through social networks | ||||
autobind | LSK ux subrepo: autobind | ||||
billing | LSK.js module for adding billing in cabinet | ||||
bots | LSK.js module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-base | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-plugin | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-plugin-debug | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-plugin-menu | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-plugin-notify | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-plugin-polundra | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-plugin-portal | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-clubhouse | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-discord | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-instagram | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-slack | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-telegram | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-twitter | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-vk | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-provider-whatsapp | LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
bots-router | LSK.js router for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation | ||||
build-locales | CLI for build i18 locales from Google spreadsheet | ||||
bunyan | Light weight bunyan logger for a JSON logging library for node.js services without dtrace | ||||
config | LSK config. | ||||
db | LSK.js module for working with mongodb database | ||||
elastic | LSK.js module for elastic search | ||||
event | LSK module for event. | ||||
getspreadsheet | LSK getspreadsheet. | ||||
grant | LSK module for grant. | ||||
i18 | LSK module for internationalization with i18next. | ||||
kafka | LSK module for kafka. | ||||
launcher | LSK Launcher. | ||||
linkall | LSK link all. | ||||
log | LSK log. | ||||
log | Логгер совмещающий лучшие черты morgan, winston, bunyan, logrus. debug. Базируется на debug-level. | ||||
mailer | LSK module for send and receive emails. | ||||
mobx | LSK module for mobx. | ||||
module | Module system with dependency injection, event emitter, logger and submodules tree | ||||
permit | LSK module for one time codes and permits. | ||||
proxy | LSK module for proxy. | ||||
rabbit | LSK module for rabbit. | ||||
reactapp | LSK ux subrepo: reactapp | ||||
rlog | LSK module for remote logger. | ||||
scylla | LSK module for scylla. | ||||
sequelize | LSK module for sequelize. | ||||
server | LSK server. | ||||
server-api | LSK server-api. | ||||
sh | LSK ux subrepo: sh | ||||
sms | LSK module for sms. | ||||
tbot | LSK module. | ||||
uapp | LSK universal react app wrapper | ||||
upload | LSK module for uploading files. | ||||
utils | LSK.js – utils – helpers and functions | ||||
worker | LSK module for worker. | ||||
add-to-calendar | LSK ux subrepo: extra | ||||
article | LSK ux subrepo: article | ||||
avatar | LSK ux subrepo: avatar | ||||
button | LSK ux subrepo: button | ||||
button2 | LSK ux subrepo: button | ||||
chat | LSK ux subrepo: chat | ||||
cookie-consent | LSK ux subrepo: cookie-consent | ||||
css | LSK ux subrepo: css | ||||
dash | LSK.js – Dash – React components for your own dashboard | ||||
dashboard | LSK ux subrepo: dashboard | ||||
dev | LSK ux subrepo: ui-dev | ||||
docs | lskjs docs | ||||
downloads | LSK ux subrepo: download | ||||
extra | LSK ux subrepo: extra | ||||
flag | LSK ux subrepo: flag | ||||
form | LSK ux subrepo: form | ||||
grid | LSK ux subrepo: grid | ||||
gridtable | LSK ux subrepo: gridtable | ||||
image | LSK ux subrepo: image | ||||
landing | LSK ux subrepo: landing | ||||
link | LSK ux subrepo: link | ||||
list | LSK ux subrepo: list | ||||
modal | LSK ux subrepo: modal | ||||
navbar | LSK ux subrepo: navbar | ||||
notification | LSK ux subrepo: notification | ||||
page | LSK ux subrepo: page | ||||
progress | LSK ux subrepo: progress | ||||
scroll | LSK ux subrepo: scroll | ||||
slide | LSK ux subrepo: slide | ||||
t | LSK ux subrepo: t | ||||
tag | LSK ux subrepo: tag | ||||
theme | LSK ux subrepo: theme | ||||
typo | LSK ux subrepo: typo | ||||
ui | LSK ux subrepo: ui | ||||
ui2 | LSK ux subrepo: ui2 |
Вдохновлен:
- Express.js: концепция средних слоев, способ их конфигурирования
- Sails.js & Grails.js
- Loopback
- 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 логгер
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 v6.5 or newer
-
npm
v3.10 or newer (new to npm?) -
node-gyp
prerequisites mentioned here - Text editor or IDE pre-configured with React/JSX/Flow/ESlint (learn more)
Структура проекта
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, Redux, and 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:
$ 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, or by using Yeoman generator.
2. Run npm install
This will install both run-time project dependencies and developer tools listed in 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
with HMR on top of it.
http://localhost:3000/ — Node.js server (
build/server.js
)
http://localhost:3000/graphql — GraphQL server and IDE
http://localhost:3001/ — BrowserSync proxy with HMR, React Hot Transform
http://localhost:3002/ — 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) will recompile the
app on the fly and refresh all the connected browsers.
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:
$ 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:
$ npm run build
or, for a production build:
$ npm run build -- --release
or, for a production docker build:
$ 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:
$ npm run lint
To launch unit tests:
$ npm test # Run unit tests with Mocha
$ npm run test:watch # Launch unit test runner and start watching for changes
By default, Mocha 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:
$ 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,
or Heroku 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 back into your own project by running:
$ 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 file for details
👥 Contributors
Igor Suvorov 💻 🎨 🤔 |
👏 Contributing
- Fork it (https://github.com/yourname/yourproject/fork)
- Create your feature branch (
git checkout -b features/fooBar
) - Commit your changes (
git commit -am 'feat(image): Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request