@aliceplex/core
Version:
[![License][license_badge]][license] [![Pipelines][pipelines_badge]][pipelines] [![Coverage][coverage_badge]][pipelines] [![NPM][npm_badge]][npm] [![semantic-release][semantic_release_badge]][semantic_release]
42 lines • 2.11 kB
JavaScript
;
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const cheerio_table_parser_1 = require("@joshuaavalon/cheerio-table-parser");
const utils_1 = require("../utils");
const utils_2 = require("./utils");
const selectTable = (options, dom) => {
const { tag, tagOffset = 0 } = options;
const tables = dom(`#${tag}`)
.parent()
.nextAll("table.wikitable")
.toArray();
if (tables.length <= tagOffset) {
throw new Error(`There are only ${tables.length} table(s).`);
}
return tables[tagOffset];
};
const fetchTable = (options) => __awaiter(void 0, void 0, void 0, function* () {
const { url, selector = selectTable } = options;
const dom = yield utils_1.fetchDomMemorized(url);
return selector(options, dom);
});
exports.createSmartWikiScrapper = (options) => (context) => __awaiter(void 0, void 0, void 0, function* () {
const { expect, multipleRow, parser = utils_2.parseElement, getRowNumber = (context) => context.episode } = options;
const tableEle = yield fetchTable(options);
const table = cheerio_table_parser_1.parseTable(tableEle, { parser });
if (expect) {
utils_2.checkExcept(table, expect);
}
const rowNum = getRowNumber(context);
const rowMap = utils_2.createRowMapping(table, multipleRow)[rowNum];
return utils_2.createData(options, table, rowMap);
});
//# sourceMappingURL=smartWiki.js.map