UNPKG

epubinator

Version:

NPM package to generate epub files out of url

84 lines (83 loc) 3.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSinglePageBook = exports.generateBookChapters = void 0; var tslib_1 = require("tslib"); var ramda_1 = require("ramda"); var html_parser_1 = require("./html-parser"); var stripper_1 = require("./stripper"); var paginator_1 = require("./paginator"); var jsdom_1 = require("jsdom"); var jsdom_2 = require("./util/jsdom"); var logger_1 = require("./logger"); var generateBookChapters = function (url_1) { var args_1 = []; for (var _i = 1; _i < arguments.length; _i++) { args_1[_i - 1] = arguments[_i]; } return tslib_1.__awaiter(void 0, tslib_1.__spreadArray([url_1], tslib_1.__read(args_1), false), void 0, function (url, chapters) { var dom, main, title, article, nextPageHref; if (chapters === void 0) { chapters = []; } return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!url) return [2 /*return*/, chapters]; (0, logger_1.log)((0, logger_1.info)('Downloading page for'), (0, logger_1.emphasizedInfo)(url)); return [4 /*yield*/, (0, html_parser_1.getDom)(url)]; case 1: dom = _a.sent(); main = (0, html_parser_1.getMain)(dom, { url: url, }); title = (0, ramda_1.compose)(stripper_1.stripNbsp, stripper_1.stripHtmlAttributes)((0, html_parser_1.getTitle)(main)); article = (0, html_parser_1.getBodyHtmlFromDom)((0, ramda_1.compose)(html_parser_1.getArticle, html_parser_1.removeTitle)(main)); return [4 /*yield*/, (0, paginator_1.getNextPageLink)(dom)]; case 2: nextPageHref = _a.sent(); return [4 /*yield*/, (0, exports.generateBookChapters)((0, html_parser_1.generateLink)(url, nextPageHref), chapters.concat([ { title: title, data: article, }, ]))]; case 3: return [2 /*return*/, _a.sent()]; } }); }); }; exports.generateBookChapters = generateBookChapters; var generateSinglePageBook = function (url) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var dom, main, title, toc, article, data; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, html_parser_1.getDom)(url)]; case 1: dom = _a.sent(); main = (0, html_parser_1.getMain)(dom, { url: url, }); title = (0, html_parser_1.getTitle)(dom, { url: url }); toc = (0, html_parser_1.getBodyHtmlFromDom)(generateToc(main, { id: 'toc' })); article = (0, html_parser_1.getBodyHtmlFromDom)((0, ramda_1.compose)(html_parser_1.getArticle, html_parser_1.removeToc, html_parser_1.removeTitle)(main)); data = toc.concat(article); return [2 /*return*/, { title: title && (0, ramda_1.compose)(stripper_1.stripNbsp, stripper_1.stripHtmlAttributes)(title), content: [ { data: data, }, ], }]; } }); }); }; exports.generateSinglePageBook = generateSinglePageBook; // TODO write specific function function generateToc(dom, context) { if (context === void 0) { context = {}; } var document = (0, jsdom_2.getDocument)(dom); var tableOfContent = document.querySelector("#".concat(context.id)); if (!tableOfContent) return; return new jsdom_1.JSDOM(tableOfContent.outerHTML); }