UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

130 lines (129 loc) 5.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.run = run; /** * Модуль для упрощённого запуска приложения без boilerplate-кода. * * Предоставляет функцию {@link run}, которая автоматически инициализирует бота, * подключает платформы, настраивает базу данных и запускает сервер или тесты * в зависимости от выбранного режима (`dev`, `dev-online`, `prod`). * * Используйте этот модуль, если не требуется кастомная конфигурация HTTP-сервера * или сложная асинхронная инициализация. * * @packageDocumentation * @module build */ const index_1 = require("./index"); const plugins_1 = require("./plugins"); const test_1 = require("./test"); /** * Инициализирует основные параметры приложения * @param {Bot | BotTest} bot Экземпляр приложения для инициализации * @param {IConfig} config Конфигурация приложения * @remarks * Устанавливает конфигурацию, параметры и контроллер для приложения. * Этот метод должен вызываться перед запуском приложения. */ function _initParam(bot, config) { bot.setAppConfig(config.appConfig || {}); if (config.appParam) { bot.setPlatformParams(config.appParam); } if (config.controller) { bot.initBotController(config.controller); } if (config.logic) { config.logic(bot); } if (config.plugins) { config.plugins.forEach((plugin) => { bot.use(plugin); }); } else { const appContext = bot.getAppContext(); if (!(0, index_1.keysCount)(appContext.platforms)) { bot.use(plugins_1.fullPlatforms); } if (!appContext.database.adapter) { if (appContext.appConfig.db) { bot.use(new plugins_1.MongoAdapter(appContext.appConfig.db)); } else { bot.use(new plugins_1.FileAdapter()); } } } } /** * Единая точка входа для запуска приложения — «из коробки» без boilerplate-кода. * * **Зачем это нужно?** * Вместо ручной инициализации (5-7 строк): * ```ts * const bot = new Bot(); * bot.setAppConfig(config.appConfig || {}); * bot.setPlatformParams(config.appParam); * bot.initBotController(config.controller); * bot.setAppMode('strict_prod'); * bot.start(hostname, port); * ``` * * Достаточно одного вызова: * ```ts * run(config, 'prod', '0.0.0.0', 8080); * ``` * * **Когда использовать:** * - Стандартные сценарии запуска (локальная разработка, тестирование, продакшн) * - Когда используется встроенный HTTP-сервер фреймворка (`node:http.Server`) * * **Когда не использовать:** * - Нужен кастомный HTTP-сервер (Express, Fastify) * - Требуется сложная логика инициализации (асинхронная загрузка конфига и т.п.) * * @param config — конфигурация приложения (контроллер, параметры, плагины) * @param mode — режим работы ('dev' для консольных тестов, 'dev-online' для webhook-тестов, 'prod' для продакшна) * @param hostname — хост (по умолчанию 'localhost') * @param port — порт (по умолчанию 3000) * @returns В режиме 'dev' возвращает Promise<void>; в режимах 'dev-online' и 'prod' — объект Server (node:http.Server). * * @example * ```ts * // Запуск в режиме разработки * run({ * appConfig: { ... }, * appParam: { ... }, * controller: MyController, * testParams: { ... } * }, 'dev'); * * // Запуск в продакшн режиме * run({ * appConfig: { ... }, * appParam: { ... }, * controller: MyController * }, 'prod'); * ``` */ function run(config, mode = 'prod', hostname = 'localhost', port = 3000) { let bot; switch (mode) { case 'dev': bot = new test_1.BotTest(); _initParam(bot, config); bot.setAppMode('dev'); return bot.test(config.testParams); case 'dev-online': bot = new index_1.Bot(); _initParam(bot, config); bot.setAppMode('dev'); return bot.start(hostname, port); case 'prod': bot = new index_1.Bot(); _initParam(bot, config); bot.setAppMode('strict_prod'); return bot.start(hostname, port); } }