tg-bot-builder
Version:
Modular NestJS builder for multi-step Telegram bots with Prisma persistence and pluggable session storage.
94 lines • 4.08 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var BotBuilder_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BotBuilder = void 0;
const common_1 = require("@nestjs/common");
const app_constants_1 = require("./app.constants");
const builder_service_1 = require("./builder/builder.service");
const bot_registry_service_1 = require("./builder/bot-registry.service");
const bot_runtime_1 = require("./builder/bot-runtime");
const BOT_BUILDER_BOTS_REGISTRATION = Symbol('BOT_BUILDER_BOTS_REGISTRATION');
let BotBuilder = BotBuilder_1 = class BotBuilder {
static forRootAsync(options) {
const asyncOptions = this.createAsyncOptionsProvider(options);
const botsRegistration = this.createBotsRegistrationProvider();
const prismaProvider = this.createPrismaProvider();
return {
module: BotBuilder_1,
imports: options.imports ?? [],
providers: [
asyncOptions,
builder_service_1.BuilderService,
botsRegistration,
bot_registry_service_1.BotRegistryService,
prismaProvider,
],
exports: [
BotBuilder_1,
builder_service_1.BuilderService,
bot_registry_service_1.BotRegistryService,
app_constants_1.BOT_BUILDER_MODULE_OPTIONS,
app_constants_1.BOT_BUILDER_PRISMA,
],
};
}
static forFeature(options) {
const normalized = this.normalizeOptions(options);
const featureToken = Symbol('BOT_BUILDER_FEATURE_REGISTRATION');
const featureRegistration = {
provide: featureToken,
useFactory: (builderService) => {
builderService.registerBots(normalized);
return true;
},
inject: [builder_service_1.BuilderService],
};
return {
module: BotBuilder_1,
providers: [featureRegistration],
exports: [builder_service_1.BuilderService],
};
}
static createAsyncOptionsProvider(options) {
return {
provide: app_constants_1.BOT_BUILDER_MODULE_OPTIONS,
useFactory: async (...args) => {
const resolvedOptions = await options.useFactory(...args);
return BotBuilder_1.normalizeOptions(resolvedOptions);
},
inject: options.inject || [],
};
}
static createBotsRegistrationProvider() {
return {
provide: BOT_BUILDER_BOTS_REGISTRATION,
useFactory: (builderService, options) => {
builderService.registerBots(options);
return true;
},
inject: [builder_service_1.BuilderService, app_constants_1.BOT_BUILDER_MODULE_OPTIONS],
};
}
static createPrismaProvider() {
return {
provide: app_constants_1.BOT_BUILDER_PRISMA,
useFactory: (options) => options.find((option) => option.prisma)?.prisma,
inject: [app_constants_1.BOT_BUILDER_MODULE_OPTIONS],
};
}
static normalizeOptions(options) {
const list = Array.isArray(options) ? options : [options];
return list.map((option, index) => (0, bot_runtime_1.normalizeBotOptions)(option, index));
}
};
exports.BotBuilder = BotBuilder;
exports.BotBuilder = BotBuilder = BotBuilder_1 = __decorate([
(0, common_1.Module)({})
], BotBuilder);
//# sourceMappingURL=app.module.js.map
;