"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var filterInputs_1 = require("@libs/filterInputs"); var defaultCover_1 = require("@libs/defaultCover"); var fetch_1 = require("@libs/fetch"); var novelStatus_1 = require("@libs/novelStatus"); var cheerio_1 = require("cheerio"); var dayjs_1 = __importDefault(require("dayjs")); var TL = /** @class */ (function () { function TL() { this.id = "TL"; this.name = "NovelTL"; this.site = "https://novel.tl"; this.version = "1.0.0"; this.icon = "src/ru/noveltl/icon.png"; this.userAgent = ""; this.cookieString = ""; this.fetchImage = fetch_1.fetchFile; this.filters = [ { key: "tags", label: "Тэги", values: [ { label: "Автоматы", value: 64 }, { label: "Агрессивные персонажи", value: 26 }, { label: "Ад", value: 338 }, { label: "Адаптация манги", value: 8 }, { label: "Академия", value: 5 }, { label: "Актёрское искусство", value: 7 }, { label: "Актеры озвучки", value: 746 }, { label: "Алхимия", value: 27 }, { label: "Альтернативная реальность", value: 30 }, { label: "Амнезия", value: 31 }, { label: "Анабиоз", value: 170 }, { label: "Анал", value: 33 }, { label: "Ангелы", value: 38 }, { label: "Андроиды", value: 37 }, { label: "Анти-рост персонажа", value: 25 }, { label: "Антигерой", value: 43 }, { label: "Антикварный магазин", value: 44 }, { label: "Антимагия", value: 41 }, { label: "Антиутопия", value: 225 }, { label: "Апатичный главный герой", value: 46 }, { label: "Апокалипсис", value: 47 }, { label: "Аристократия", value: 51 }, { label: "Армия", value: 53 }, { label: "Артефакты", value: 58 }, { label: "Асоциальный главный герой", value: 42 }, { label: "Ассасины", value: 61 }, { label: "Атмосфера Европы", value: 245 }, { label: "Банды", value: 302 }, { label: "БДСМ", value: 77 }, { label: "Бедный главный герой", value: 541 }, { label: "Бездушный главный герой", value: 143 }, { label: "Беззаботный герой", value: 115 }, { label: "Безответная любовь", value: 213 }, { label: "Безответная любовь", value: 740 }, { label: "Безработные", value: 377 }, { label: "Беременность", value: 551 }, { label: "Бескорыстная любовь", value: 733 }, { label: "Бессмертные", value: 359 }, { label: "Бесстрашный главный герой", value: 274 }, { label: "Библиотека", value: 393 }, { label: "Биография", value: 86 }, { label: "Близнецы", value: 729 }, { label: "Богачи", value: 753 }, { label: "Боги", value: 318 }, { label: "Богини", value: 316 }, { label: "Богоподобный протагонист", value: 314 }, { label: "Боевая академия", value: 75 }, { label: "Боевая парочка", value: 547 }, { label: "Божественная защита", value: 208 }, { label: "Божественная сила", value: 317 }, { label: "Болеющие персонажи", value: 648 }, { label: "Борьба за власть", value: 548 }, { label: "Брак по расчету", value: 55 }, { label: "Братство", value: 106 }, { label: "Братья или сёстры", value: 646 }, { label: "Брошенные дети", value: 1 }, { label: "Бывший герой", value: 290 }, { label: "Вампиры", value: 742 }, { label: "Ваншот", value: 496 }, { label: "Вдали от родителей", value: 3 }, { label: "Ведьмы", value: 756 }, { label: "Везучий главный герой", value: 411 }, { label: "Верные подданные", value: 410 }, { label: "Вероломные герои/плетение интриг", value: 424 }, { label: "Взросление персонажа", value: 24 }, { label: "Видит то, чего остальной люд не в силах", value: 617 }, { label: "Виртуальная реальность", value: 744 }, { label: "Владелец магазина", value: 677 }, { label: "Владелец уникального оружия", value: 736 }, { label: "Властные персонажи", value: 545 }, { label: "Влияние прошлого", value: 517 }, { label: "Внезапное обогащение", value: 691 }, { label: "Внезапное обретение силы", value: 690 }, { label: "Военные хроники", value: 749 }, { label: "Возвращение в родной мир", value: 587 }, { label: "Война", value: 750 }, { label: "Вокалоид", value: 745 }, { label: "Волшебные твари", value: 413 }, { label: "Воскрешение", value: 586 }, { label: "Воспитанный главный герой", value: 537 }, { label: "Воспоминания прошлого", value: 283 }, { label: "Враги становятся союзниками", value: 238 }, { label: "Врата в иной мир", value: 303 }, { label: "Временной парадокс", value: 711 }, { label: "Вторжение на Землю", value: 228 }, { label: "Второй шанс", value: 608 }, { label: "Выживание", value: 695 }, { label: "Вынужденные условия проживания", value: 287 }, { label: "Высокомерный герой", value: 56 }, { label: "Гадание", value: 207 }, { label: "Галлюцинации", value: 189 }, { label: "Гарем рабов", value: 656 }, { label: "Геймеры", value: 301 }, { label: "Генетические модификации", value: 306 }, { label: "Герои", value: 341 }, { label: "Герои непонятного пола", value: 36 }, { label: "Героиня девушка-сорванец", value: 715 }, { label: "Героиня красавица", value: 81 }, { label: "Герой влюбляется первым", value: 561 }, { label: "Герой использует щит", value: 636 }, { label: "Герой красавец", value: 329 }, { label: "Герой со множеством тел", value: 564 }, { label: "Герой-бесстыдник", value: 632 }, { label: "Герой-извращенец", value: 521 }, { label: "Герой-трудяга", value: 330 }, { label: "Герой-яндере", value: 421 }, { label: "Гетерохромия", value: 342 }, { label: "Гильдии", value: 324 }, { label: "Гиперопека", value: 509 }, { label: "Главная героиня — женщина", value: 277 }, { label: "Главный герой - гений", value: 308 }, { label: "Главный герой - Моб", value: 446 }, { label: "Главный герой — знаменитость", value: 263 }, { label: "Главный герой — мужчина", value: 419 }, { label: "Главный герой в поисках гарема", value: 331 }, { label: "Главный герой заранее готовится", value: 557 }, { label: "Главный герой не человек", value: 488 }, { label: "Главный герой приёмный", value: 20 }, { label: "Главный герой сразу силён", value: 563 }, { label: "Гладиаторы", value: 310 }, { label: "Глухой к любви герой", value: 194 }, { label: "Гоблины", value: 313 }, { label: "Големы", value: 319 }, { label: "Гомункул", value: 347 }, { label: "Горничные", value: 418 }, { label: "Государственные интриги", value: 212 }, { label: "Гринд", value: 322 }, { label: "Давняя травма", value: 518 }, { label: "Двойник", value: 97 }, { label: "Дворецкие", value: 111 }, { label: "Дворфы", value: 224 }, { label: "Дворяне", value: 487 }, { label: "Двоюродные братья или сёстры", value: 162 }, { label: "Девочки-волшебницы", value: 415 }, { label: "Демоны", value: 193 }, { label: "Депрессия", value: 196 }, { label: "Детектив", value: 198 }, { label: "Детективное расследование", value: 473 }, { label: "Детское насилие", value: 125 }, { label: "Детское обещание", value: 130 }, { label: "Дискриминация", value: 203 }, { label: "Длительный разрыв отношений", value: 400 }, { label: "Домашняя жизнь", value: 45 }, { label: "Драконы", value: 218 }, { label: "Древний Китай", value: 34 }, { label: "Дружба", value: 293 }, { label: "Друзья детства", value: 128 }, { label: "Друзья становятся врагами", value: 292 }, { label: "Духи", value: 673 }, { label: "Духовная сила", value: 665 }, { label: "Духовный наставник", value: 671 }, { label: "Душещипательная история", value: 335 }, { label: "Души", value: 666 }, { label: "Дьявольский путь культивации", value: 192 }, { label: "Ёкай", value: 763 }, { label: "Есть аниме-адаптация", value: 10 }, { label: "Есть видеоигра", value: 13 }, { label: "Есть дорама-адаптация", value: 11 }, { label: "Есть манга-адаптация", value: 14 }, { label: "Есть манхва-адаптация", value: 16 }, { label: "Есть маньхуа-адаптация", value: 15 }, { label: "Есть фильм", value: 17 }, { label: "Есть CD дорама-адаптация", value: 12 }, { label: "Жёсткий главный герой", value: 597 }, { label: "Жестокие персонажи", value: 4 }, { label: "Жёстокие персонажи", value: 169 }, { label: "Животное-спутник", value: 78 }, { label: "Жизнь в одиночку", value: 396 }, { label: "Жрецы", value: 555 }, { label: "Жрицы", value: 554 }, { label: "Забота о детях", value: 127 }, { label: "Заботливый главный герой", value: 116 }, { label: "Загадочное заболевание", value: 471 }, { label: "Загадочное прошлое родителей", value: 470 }, { label: "Заговоры", value: 154 }, { label: "Закалка тела", value: 96 }, { label: "Закон джунглей", value: 682 }, { label: "Закулисная борба", value: 603 }, { label: "Замкнутый главный герой", value: 371 }, { label: "Запечатанная сила", value: 607 }, { label: "Затворник", value: 346 }, { label: "Звери", value: 80 }, { label: "Зверолюди", value: 39 }, { label: "Звероподобные", value: 79 }, { label: "Земледелие", value: 268 }, { label: "Злобные благородные девы", value: 743 }, { label: "Зловещие организации", value: 247 }, { label: "Злой главный герой", value: 248 }, { label: "Злые боги", value: 246 }, { label: "Злые религии", value: 249 }, { label: "Знаменитости", value: 118 }, { label: "Знания из прошлой жизни", value: 553 }, { label: "Зомби", value: 767 }, { label: "Игра на выживание", value: 696 }, { label: "Игровая рейтинговая система", value: 300 }, { label: "Из грязи в князи", value: 542 }, { label: "Известные родители", value: 262 }, { label: "Изменение внешнего вида", value: 48 }, { label: "Изнасилование", value: 574 }, { label: "Инвалидность", value: 202 }, { label: "Индустриализация", value: 364 }, { label: "Инженер", value: 241 }, { label: "Инцест", value: 361 }, { label: "Искажённая личность", value: 730 }, { label: "Искусственный интеллект", value: 59 }, { label: "Исполнение желаний", value: 755 }, { label: "Каннибализм", value: 113 }, { label: "Карточные игры", value: 114 }, { label: "Кладбищенский смотритель", value: 321 }, { label: "Классика", value: 134 }, { label: "Книги", value: 99 }, { label: "Книги навыков", value: 654 }, { label: "Книжный червь", value: 100 }, { label: "Коллеги", value: 140 }, { label: "Колледж/Университет", value: 145 }, { label: "Командная работа", value: 701 }, { label: "Комедийный подтекст", value: 147 }, { label: "Комплекс брата", value: 105 }, { label: "Комплекс неполноценности", value: 365 }, { label: "Контракты", value: 155 }, { label: "Контроль разума", value: 441 }, { label: "Конфликт в семье", value: 261 }, { label: "Конфликт верности", value: 153 }, { label: "Копейщик", value: 668 }, { label: "Королевская особа", value: 596 }, { label: "Королевства", value: 382 }, { label: "Короткий рассказ", value: 638 }, { label: "Коррупция", value: 157 }, { label: "Космические Войны", value: 158 }, { label: "Космос", value: 507 }, { label: "Косплей", value: 159 }, { label: "Кража способностей", value: 2 }, { label: "Крафтинг", value: 164 }, { label: "Кризис личности", value: 357 }, { label: "Кровь", value: 320 }, { label: "Кружки, клубы", value: 138 }, { label: "Кудэрэ", value: 384 }, { label: "Кузнец", value: 90 }, { label: "Кукловоды", value: 567 }, { label: "Куклы/Марионетки", value: 211 }, { label: "Кулинария", value: 156 }, { label: "Культивация", value: 171 }, { label: "Куннилингус", value: 172 }, { label: "Легенды", value: 391 }, { label: "Легкая жизнь", value: 229 }, { label: "Лекари", value: 334 }, { label: "Ленивый главный герой", value: 389 }, { label: "Лидерство", value: 390 }, { label: "Любит персонажа младше себя", value: 765 }, { label: "Любит персонажа старше себя", value: 494 }, { label: "Любовное соперничество", value: 406 }, { label: "Любовные треугольники", value: 407 }, { label: "Любовь детства", value: 129 }, { label: "Любовь с первого взгляда", value: 404 }, { label: "Любящие родители", value: 215 }, { label: "Маги", value: 757 }, { label: "Магические технологии", value: 417 }, { label: "Магия", value: 412 }, { label: "Магия призыва", value: 694 }, { label: "Маленькие девочки", value: 397 }, { label: "Мангака", value: 423 }, { label: "Маниакальная любовь", value: 492 }, { label: "Марти Сью", value: 508 }, { label: "Мастер подземелий", value: 222 }, { label: "Мастурбация", value: 432 }, { label: "Матриархат", value: 433 }, { label: "Межпространственные путешествия", value: 370 }, { label: "Менеджмент", value: 422 }, { label: "Месть", value: 588 }, { label: "Мечи и магия", value: 697 }, { label: "Мечники", value: 698 }, { label: "Миленькие дети", value: 176 }, { label: "Милитаризм", value: 439 }, { label: "Миловидная история", value: 178 }, { label: "Милый главный герой", value: 177 }, { label: "Минет", value: 275 }, { label: "Мировое древо", value: 760 }, { label: "Миролюбивый главный герой", value: 510 }, { label: "Мифология", value: 475 }, { label: "Младшие сёстры", value: 766 }, { label: "ММОРПГ", value: 445 }, { label: "Множество временных линий", value: 463 }, { label: "Модели", value: 447 }, { label: "Молод не по годам", value: 49 }, { label: "Монстры", value: 454 }, { label: "Мрачность", value: 183 }, { label: "Музыка", value: 466 }, { label: "Музыкальные группы", value: 68 }, { label: "Мутации", value: 468 }, { label: "На волосок от смерти", value: 479 }, { label: "На все руки мастер", value: 374 }, { label: "Навыки имеют стоимость", value: 150 }, { label: "Нагота", value: 490 }, { label: "Наездники на драконах", value: 216 }, { label: "Наёмники", value: 437 }, { label: "Наивный главный герой", value: 476 }, { label: "Наследие", value: 366 }, { label: "Настоящая любовь", value: 200 }, { label: "Настоящий гарем", value: 540 }, { label: "Небесное испытание", value: 337 }, { label: "Невезучий главный герой", value: 738 }, { label: "Недоверчивый протагонист", value: 206 }, { label: "Недооцененный главный герой", value: 734 }, { label: "Недопонимание", value: 444 }, { label: "Некромант", value: 480 }, { label: "Нелинейное повествование", value: 489 }, { label: "Неловкий главный герой", value: 67 }, { label: "Нелюбимый протагонист", value: 333 }, { label: "Немой персонаж", value: 469 }, { label: "Ненадежный рассказчик", value: 739 }, { label: "Непримечательный герой", value: 65 }, { label: "Нерешительный протагонист", value: 363 }, { label: "Несгибаемый главный герой", value: 676 }, { label: "Несколько главных героев", value: 460 }, { label: "Несколько миров", value: 461 }, { label: "Несколько перерожденцев", value: 462 }, { label: "Несколько попаданцев", value: 464 }, { label: "Несравненная скорость культивации", value: 269 }, { label: "Нехватка/отсутствие здравого смысла", value: 385 }, { label: "Нечестный протагонист", value: 205 }, { label: "НИИТ", value: 481 }, { label: "Ниндзя", value: 486 }, { label: "Обмен телами", value: 95 }, { label: "Оборотни", value: 754 }, { label: "Объект любви влюбился первым", value: 405 }, { label: "Объект любви популярен", value: 543 }, { label: "Огнестрельное оружие", value: 280 }, { label: "Ограничение на время жизни", value: 394 }, { label: "Одержимость", value: 544 }, { label: "Один родитель", value: 651 }, { label: "Одинокий главный герой", value: 399 }, { label: "Одиночество", value: 398 }, { label: "Одно тело на двоих", value: 634 }, { label: "Око силы", value: 253 }, { label: "Оммёдзи", value: 498 }, { label: "Организованная преступность", value: 500 }, { label: "Оргия", value: 501 }, { label: "Орки", value: 499 }, { label: "Основано на аниме", value: 74 }, { label: "Основано на видеоигре", value: 72 }, { label: "Основано на визуальной новелле", value: 73 }, { label: "Основано на песне", value: 70 }, { label: "Основано на фильме", value: 69 }, { label: "Осторожный главный герой", value: 117 }, { label: "От ненависти до любви один шаг", value: 239 }, { label: "От сильного с сильнейшему", value: 684 }, { label: "От слабого к сильному", value: 752 }, { label: "Отаку", value: 503 }, { label: "Отзывчивая любовь", value: 380 }, { label: "Отзывчивый главный герой", value: 339 }, { label: "Отношение учитель-ученик", value: 430 }, { label: "Отношения бог-человек", value: 315 }, { label: "Отношения между учителем и учеником", value: 687 }, { label: "Отношения начальник-подчинённый", value: 101 }, { label: "Отношения против воли", value: 286 }, { label: "Отношения с нечеловеком", value: 353 }, { label: "Отношения сэмпай-кохай", value: 621 }, { label: "Отношения хозяин-слуга", value: 431 }, { label: "Отомэ-игры", value: 504 }, { label: "ОТП", value: 562 }, { label: "Отшельники", value: 505 }, { label: "Офисный работник", value: 600 }, { label: "Официанты", value: 748 }, { label: "Охотники", value: 355 }, { label: "Падшие ангелы", value: 255 }, { label: "Падшие дворяне", value: 256 }, { label: "Пайзури", value: 511 }, { label: "Паразиты", value: 513 }, { label: "Параллельные миры", value: 512 }, { label: "Парк развлечений", value: 32 }, { label: "Пародия", value: 515 }, { label: "Перемещение между мирами", value: 758 }, { label: "Переодевание", value: 167 }, { label: "Переплавка пилюль", value: 529 }, { label: "Перерождение в девушку", value: 420 }, { label: "Перерождение в другом мире", value: 580 }, { label: "Перерождение в другом мире", value: 720 }, { label: "Перерождение в игровом мире", value: 579 }, { label: "Перерождение в монстра", value: 577 }, { label: "Персонажи с мазохистскими наклонностями", value: 429 }, { label: "Персонажи с садистскими наклонностями", value: 598 }, { label: "Петля времени", value: 709 }, { label: "Петтинг", value: 328 }, { label: "Писатели", value: 761 }, { label: "Питомцы", value: 522 }, { label: "Племенное общество", value: 726 }, { label: "Повелитель демонов", value: 191 }, { label: "Повествование от нескольких лиц", value: 459 }, { label: "Поглощение навыков", value: 653 }, { label: "Подземелья", value: 223 }, { label: "Поздно начинающаяся романтическая линия", value: 387 }, { label: "Политика", value: 538 }, { label: "Полулюди", value: 190 }, { label: "Помолвка", value: 240 }, { label: "Попаданец в другой мир", value: 723 }, { label: "Попаданец в игровой мир", value: 722 }, { label: "Постапокалипсис", value: 546 }, { label: "Постижение Дао", value: 181 }, { label: "Потеря девственности", value: 282 }, { label: "Потустороннее пространство", value: 416 }, { label: "Похищения", value: 379 }, { label: "Прагматичный главный герой", value: 549 }, { label: "Предательство", value: 83 }, { label: "Предвидение", value: 550 }, { label: "Преследователи", value: 674 }, { label: "Преступление", value: 165 }, { label: "Преступность", value: 166 }, { label: "Приёмные дети", value: 19 }, { label: "Призванный герой", value: 693 }, { label: "Призраки", value: 309 }, { label: "Приключения", value: 22 }, { label: "Принуждение", value: 108 }, { label: "Приручатель", value: 453 }, { label: "Прислуга", value: 625 }, { label: "Приставучий любовник", value: 136 }, { label: "Притворная любовь", value: 552 }, { label: "Пришельцы", value: 28 }, { label: "Программист", value: 558 }, { label: "Произведение - обладатель наград", value: 66 }, { label: "Проклятия", value: 175 }, { label: "Промывка мозгов", value: 102 }, { label: "Пропуск времени", value: 712 }, { label: "Пророчества", value: 559 }, { label: "Протагонист в очках", value: 312 }, { label: "Протагонист раб", value: 657 }, { label: "Психокинез", value: 565 }, { label: "Психопаты", value: 566 }, { label: "Путешествия", value: 759 }, { label: "Путешествия во времени", value: 713 }, { label: "Пытки", value: 716 }, { label: "Рабы", value: 658 }, { label: "Развитие отношений", value: 160 }, { label: "Развитие персонажа", value: 119 }, { label: "Раздвоение личности", value: 458 }, { label: "Размеренная романтика", value: 661 }, { label: "Разница в статусе", value: 201 }, { label: "Разорванная помолвка", value: 104 }, { label: "Разумные предметы", value: 622 }, { label: "Рай", value: 336 }, { label: "Раняя романтика", value: 227 }, { label: "Расизм", value: 573 }, { label: "Расследования", value: 372 }, { label: "Ребенок — главный герой", value: 126 }, { label: "Реверс-гарем", value: 589 }, { label: "Реверс-изнасилование", value: 590 }, { label: "Резкая смена характера", value: 520 }, { label: "Реинкарнация", value: 581 }, { label: "Религии", value: 582 }, { label: "Ресторан", value: 585 }, { label: "Решительный главный герой", value: 199 }, { label: "Робкий протагонист", value: 714 }, { label: "Родительсткий комплекс", value: 514 }, { label: "Родные не связанные кровью", value: 647 }, { label: "Родословные", value: 94 }, { label: "РПГ-система", value: 392 }, { label: "Рыцари", value: 383 }, { label: "Самовлюбленный главный герой", value: 477 }, { label: "Самоубийства", value: 692 }, { label: "Самураи", value: 601 }, { label: "Сборник коротких историй", value: 144 }, { label: "Свадьба", value: 426 }, { label: "Связанные сюжетные линии", value: 369 }, { label: "Святые", value: 599 }, { label: "Секреты", value: 614 }, { label: "Секс втроём", value: 707 }, { label: "Секс-рабыня", value: 629 }, { label: "Семейная любовь", value: 257 }, { label: "Семь добродетелей", value: 627 }, { label: "Семь смертных грехов", value: 626 }, { label: "Серийные убийцы", value: 624 }, { label: "Сикигами", value: 637 }, { label: "Сильная любовь от старших", value: 214 }, { label: "Синдром восьмиклассника", value: 132 }, { label: "Синдром сестры", value: 652 }, { label: "Сироты", value: 502 }, { label: "Системный администратор", value: 699 }, { label: "Скромный главный герой", value: 409 }, { label: "Скрытые романтические отношения", value: 23 }, { label: "Скрытые способности", value: 343 }, { label: "Скряга", value: 450 }, { label: "Скульпторы", value: 606 }, { label: "Слабая романтика", value: 688 }, { label: "Слабый главный герой", value: 751 }, { label: "Сложные семейные отношения", value: 149 }, { label: "Смена расы", value: 572 }, { label: "Смертельное заболевание", value: 704 }, { label: "Смерть", value: 185 }, { label: "Смерть любимых", value: 186 }, { label: "Современность", value: 448 }, { label: "Современные знания в слаборазвитых мирах", value: 449 }, { label: "Сожительство", value: 141 }, { label: "Создание артефактов", value: 57 }, { label: "Создание клана", value: 133 }, { label: "Создание королевства", value: 381 }, { label: "Создание навыков", value: 655 }, { label: "Сокрытие истинных способностей", value: 344 }, { label: "Сокрытие личности", value: 345 }, { label: "Солдаты", value: 664 }, { label: "Сон", value: 659 }, { label: "Соседи по комнате", value: 595 }, { label: "Социальные изгои", value: 663 }, { label: "Спасение мира", value: 602 }, { label: "Спорящая пара", value: 84 }, { label: "Способность перевоплощения", value: 719 }, { label: "Средневековье", value: 436 }, { label: "Стеснительные персонажи", value: 643 }, { label: "Стокгольмский синдром", value: 575 }, { label: "Стокгольмский синдром", value: 675 }, { label: "Стратег", value: 681 }, { label: "Стратегические битвы", value: 680 }, { label: "Стрелки", value: 325 }, { label: "Стрельба из лука", value: 50 }, { label: "Студенческий совет", value: 686 }, { label: "Судьба", value: 197 }, { label: "Суккубы", value: 689 }, { label: "Суперспособности", value: 669 }, { label: "Суровая тренировка", value: 332 }, { label: "Сцены насилия", value: 195 }, { label: "Таинственное прошлое", value: 472 }, { label: "Тайная личность", value: 610 }, { label: "Тайные организации", value: 611 }, { label: "Телохранители", value: 98 }, { label: "Тентакли", value: 703 }, { label: "Террористы", value: 705 }, { label: "Технологический разрыв", value: 702 }, { label: "Тихие герои", value: 568 }, { label: "Толстый протагонист", value: 271 }, { label: "Торговцы", value: 438 }, { label: "Травник", value: 340 }, { label: "Трагичное прошлое", value: 718 }, { label: "Трап", value: 725 }, { label: "Триллер", value: 708 }, { label: "Турнир", value: 76 }, { label: "Тюрьма", value: 556 }, { label: "Убийства", value: 465 }, { label: "Уверенный в себе главный герой", value: 151 }, { label: "Умная пара", value: 662 }, { label: "Умный главный герой", value: 135 }, { label: "Уникальная техника культивации", value: 735 }, { label: "Уникальные оружия", value: 737 }, { label: "Управление бизнесом", value: 109 }, { label: "Управление временем", value: 710 }, { label: "Управление пространством", value: 667 }, { label: "Ускоренный рост", value: 6 }, { label: "Учёные", value: 605 }, { label: "Учителя", value: 700 }, { label: "Фамильяры", value: 258 }, { label: "Фанатизм", value: 264 }, { label: "Фармацевт", value: 523 }, { label: "Феи", value: 254 }, { label: "Фениксы", value: 526 }, { label: "Фетиш на грудь", value: 103 }, { label: "Фетиш на очки", value: 311 }, { label: "Философия", value: 524 }, { label: "Фобии/Страхи", value: 525 }, { label: "Фольклор", value: 285 }, { label: "Формирование армии", value: 54 }, { label: "Футанари", value: 295 }, { label: "Футуристический мир", value: 296 }, { label: "Фэнтези", value: 267 }, { label: "Фэнтезийные существа", value: 266 }, { label: "Хакеры", value: 326 }, { label: "Харизматичный протагонист", value: 120 }, { label: "Хитрый главный герой", value: 173 }, { label: "Хладнокровный главный герой", value: 112 }, { label: "Художники", value: 60 }, { label: "Хулиганы", value: 188 }, { label: "Цундере", value: 728 }, { label: "Чат", value: 122 }, { label: "Человек-оружие", value: 352 }, { label: "Человекоподобный главный герой", value: 354 }, { label: "Честный главный герой", value: 348 }, { label: "Четкие любовные убеждения", value: 683 }, { label: "Читы", value: 123 }, { label: "Чудаковатые герои", value: 569 }, { label: "Чужие воспоминания", value: 721 }, { label: "Шантаж", value: 89 }, { label: "Шеф-повар", value: 124 }, { label: "Школа для девочек", value: 29 }, { label: "Шоу-бизнес", value: 642 }, { label: "Шпионы", value: 670 }, { label: "Эволюция", value: 250 }, { label: "Эгоистичный главный герой", value: 618 }, { label: "Экзорцизм", value: 252 }, { label: "Экономика", value: 230 }, { label: "Эксгибиционизм", value: 251 }, { label: "Эксперименты на людях", value: 351 }, { label: "Элементальная магия", value: 234 }, { label: "Элементы игрового мира", value: 299 }, { label: "Элементы романтики", value: 594 }, { label: "Элементы юри", value: 640 }, { label: "Элементы яоя", value: 641 }, { label: "Эльфы", value: 235 }, { label: "Эпизодичность", value: 243 }, { label: "Язвительные персонажи", value: 635 }, { label: "Языковой барьер", value: 386 }, { label: "Яндере", value: 762 }, { label: "Яойщица", value: 294 }, { label: "Японские силы самообороны", value: 378 }, { label: "R-15", value: 570 }, { label: "R-18", value: 571 }, ], inputType: filterInputs_1.FilterInputs.Checkbox, }, { key: "genres", label: "Жанры", values: [ { label: "16+", value: 1 }, { label: "18+", value: 2 }, { label: "Боевик", value: 3 }, { label: "Боевые искусства", value: 4 }, { label: "Вампиры", value: 47 }, { label: "Военное", value: 44 }, { label: "Гарем", value: 5 }, { label: "Демоны", value: 48 }, { label: "Детектив", value: 6 }, { label: "Дзёсей", value: 50 }, { label: "Драма", value: 7 }, { label: "Игры", value: 45 }, { label: "Историческое", value: 8 }, { label: "Киберпанк", value: 9 }, { label: "Комедия", value: 10 }, { label: "Космос", value: 46 }, { label: "Магия", value: 42 }, { label: "Махо-сёдзё", value: 12 }, { label: "Меха", value: 13 }, { label: "Мистика", value: 14 }, { label: "Музыка", value: 49 }, { label: "Научная фантастика", value: 15 }, { label: "Пародия", value: 16 }, { label: "Повседневность", value: 17 }, { label: "Приключения", value: 18 }, { label: "Психологическое", value: 19 }, { label: "Романтика", value: 20 }, { label: "Сверхъестественное", value: 21 }, { label: "Сёдзё", value: 22 }, { label: "Сёдзё-ай", value: 23 }, { label: "Сёнэн", value: 24 }, { label: "Сёнэн-ай", value: 25 }, { label: "Смена пола", value: 26 }, { label: "Современность", value: 27 }, { label: "Спорт", value: 28 }, { label: "Супер сила", value: 43 }, { label: "Сэйнэн", value: 29 }, { label: "Трагедия", value: 32 }, { label: "Триллер", value: 33 }, { label: "Ужасы", value: 34 }, { label: "Уся", value: 35 }, { label: "Фэнтези", value: 36 }, { label: "Школьная жизнь", value: 37 }, { label: "Этти", value: 38 }, { label: "Юри", value: 39 }, { label: "Яой", value: 40 }, { label: "LitRPG", value: 41 }, ], inputType: filterInputs_1.FilterInputs.Checkbox, }, ]; } TL.prototype.popularNovels = function (page, _a) { var _b, _c, _d; var showLatestNovels = _a.showLatestNovels, filters = _a.filters; return __awaiter(this, void 0, void 0, function () { var result, json, novels; var _this = this; return __generator(this, function (_e) { switch (_e.label) { case 0: return [4 /*yield*/, (0, fetch_1.fetchApi)(this.site + "/api/site/v2/graphql", { method: "post", headers: { Accept: "application/json, text/plain, */*", "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", "Content-Type": "application/json", }, referrer: this.site, body: JSON.stringify({ operationName: "Projects", query: "query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title fullUrl covers{url}}}}", variables: { filter: { tags: (filters === null || filters === void 0 ? void 0 : filters.tags) || [], genres: (filters === null || filters === void 0 ? void 0 : filters.genres) || [], }, hostname: "novel.tl", limit: 40, page: page, }, }), })]; case 1: result = _e.sent(); return [4 /*yield*/, result.json()]; case 2: json = (_e.sent()); novels = []; (_d = (_c = (_b = json.data) === null || _b === void 0 ? void 0 : _b.projects) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d.forEach(function (novel) { var _a, _b; return novels.push({ name: novel.title, url: "https://" + novel.fullUrl, cover: ((_b = (_a = novel === null || novel === void 0 ? void 0 : novel.covers) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.url) ? _this.site + novel.covers[0].url : defaultCover_1.defaultCover, }); }); return [2 /*return*/, novels]; } }); }); }; TL.prototype.parseNovelAndChapters = function (novelUrl) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return __awaiter(this, void 0, void 0, function () { var result, json, novel, genres, chapters; return __generator(this, function (_q) { switch (_q.label) { case 0: return [4 /*yield*/, (0, fetch_1.fetchApi)(this.site + "/api/site/v2/graphql", { method: "post", headers: { Accept: "application/json, text/plain, */*", "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", "Content-Type": "application/json", }, referrer: this.site, body: JSON.stringify({ operationName: "Book", query: 'query Book($url:String){project(project:{fullUrl:$url}){title translationStatus fullUrl covers{url}persons(langs:["ru","en","*"],roles:["author","illustrator"]){role name{firstName lastName}}genres{nameRu nameEng}tags{nameRu nameEng}annotation{text}subprojects{content{title volumes{content{shortName chapters{title publishDate fullUrl published}}}}}}}', variables: { url: novelUrl, }, }), })]; case 1: result = _q.sent(); return [4 /*yield*/, result.json()]; case 2: json = (_q.sent()); novel = { url: novelUrl, name: (_a = json.data.project) === null || _a === void 0 ? void 0 : _a.title, cover: ((_d = (_c = (_b = json.data.project) === null || _b === void 0 ? void 0 : _b.covers) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.url) ? this.site + json.data.project.covers[0].url : defaultCover_1.defaultCover, summary: (_f = (_e = json.data.project) === null || _e === void 0 ? void 0 : _e.annotation) === null || _f === void 0 ? void 0 : _f.text, status: ((_g = json.data.project) === null || _g === void 0 ? void 0 : _g.translationStatus) === "active" ? novelStatus_1.NovelStatus.Ongoing : novelStatus_1.NovelStatus.Completed, }; genres = [(_h = json.data.project) === null || _h === void 0 ? void 0 : _h.tags, (_j = json.data.project) === null || _j === void 0 ? void 0 : _j.genres] .flat() .map(function (item) { return (item === null || item === void 0 ? void 0 : item.nameRu) || (item === null || item === void 0 ? void 0 : item.nameEng); }) .filter(function (item) { return item; }); if (genres === null || genres === void 0 ? void 0 : genres.length) { novel.genres = genres.join(", "); } (_l = (_k = json.data.project) === null || _k === void 0 ? void 0 : _k.persons) === null || _l === void 0 ? void 0 : _l.forEach(function (person) { var _a; if (person.role == "author" && person.name.firstName) { novel.author = person.name.firstName + " " + (((_a = person.name) === null || _a === void 0 ? void 0 : _a.lastName) || ""); } }); chapters = []; (_p = (_o = (_m = json.data.project) === null || _m === void 0 ? void 0 : _m.subprojects) === null || _o === void 0 ? void 0 : _o.content) === null || _p === void 0 ? void 0 : _p.forEach(function (work) { return work.volumes.content.forEach(function (volume) { return volume.chapters.forEach(function (chapter) { return (chapter === null || chapter === void 0 ? void 0 : chapter.published) && chapters.push({ name: volume.shortName + " " + chapter.title, url: "https://" + chapter.fullUrl, releaseTime: (0, dayjs_1.default)(chapter.publishDate).format("LLL"), }); }); }); }); novel.chapters = chapters; return [2 /*return*/, novel]; } }); }); }; TL.prototype.parseChapter = function (chapterUrl) { var _a, _b; return __awaiter(this, void 0, void 0, function () { var result, json, baseUrl, loadedCheerio, chapterText; return __generator(this, function (_c) { switch (_c.label) { case 0: return [4 /*yield*/, (0, fetch_1.fetchApi)(this.site + "/api/site/v2/graphql", { method: "post", headers: { Accept: "application/json, text/plain, */*", "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", "Content-Type": "application/json", }, referrer: this.site, body: JSON.stringify({ query: "query($url:String){chapter(chapter:{fullUrl:$url}){text{text}}}", variables: { url: chapterUrl, }, }), })]; case 1: result = _c.sent(); return [4 /*yield*/, result.json()]; case 2: json = (_c.sent()); baseUrl = this.site; loadedCheerio = (0, cheerio_1.load)(((_b = (_a = json.data.chapter) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.text) || ""); loadedCheerio("p > a[href]").each(function () { var src = baseUrl + loadedCheerio(this).attr("href"); if (!src.startsWith("http")) { src = baseUrl + src; } loadedCheerio(this).find("picture").remove(); loadedCheerio(this).removeAttr("href"); loadedCheerio("")).appendTo(this); }); chapterText = loadedCheerio.html(); return [2 /*return*/, chapterText]; } }); }); }; TL.prototype.searchNovels = function (searchTerm, page) { var _a, _b, _c; if (page === void 0) { page = 1; } return __awaiter(this, void 0, void 0, function () { var result, json, novels; var _this = this; return __generator(this, function (_d) { switch (_d.label) { case 0: return [4 /*yield*/, (0, fetch_1.fetchApi)(this.site + "/api/site/v2/graphql", { method: "post", headers: { Accept: "application/json, text/plain, */*", "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", "Content-Type": "application/json", }, referrer: this.site, body: JSON.stringify({ operationName: "Projects", query: "query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title fullUrl covers{url}}}}", variables: { filter: { query: searchTerm, }, hostname: "novel.tl", limit: 40, page: page, }, }), })]; case 1: result = _d.sent(); return [4 /*yield*/, result.json()]; case 2: json = (_d.sent()); novels = []; (_c = (_b = (_a = json === null || json === void 0 ? void 0 : json.data) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.forEach(function (novel) { var _a, _b; return novels.push({ name: novel.title, url: "https://" + novel.fullUrl, cover: ((_b = (_a = novel === null || novel === void 0 ? void 0 : novel.covers) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.url) ? _this.site + novel.covers[0].url : defaultCover_1.defaultCover, }); }); return [2 /*return*/, novels]; } }); }); }; return TL; }()); exports.default = new TL();