UNPKG

yoda-seo-tips

Version:
102 lines 3.61 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const cheerio = require("cheerio"); const fs_1 = require("fs"); ; class HtmlValidator { constructor(rules) { this.rules = rules; } process(input, output) { return __awaiter(this, void 0, void 0, function* () { let inputStream = typeof input === 'string' ? fs_1.createReadStream(input) : input && typeof input.on === 'function' ? input : error('input: expecting filename or readable stream as input'); var writer = !output ? new ConsoleWriter : typeof output === 'string' ? new FileWriter(output) : typeof output.write === 'function' ? new StreamWriter(output) : error('output: expecting filename or writable stream'); let data = yield consumeStream(inputStream); let cheerioDom = cheerio.load(data); for (let rule of this.rules) { rule(cheerioDom, msg => { writer.write(msg + '\n'); }); } yield writer.close(); }); } } exports.HtmlValidator = HtmlValidator; class StreamWriter { constructor(stream) { this.stream = stream; } write(msg) { this.stream.write(msg); } close() { return __awaiter(this, void 0, void 0, function* () { }); } } class ConsoleWriter { write(msg) { return __awaiter(this, void 0, void 0, function* () { console.log(msg.replace(/\s*$/, '')); }); } close() { return __awaiter(this, void 0, void 0, function* () { }); } } class FileWriter { constructor(filename) { this.filename = filename; this.stream = fs_1.createWriteStream(this.filename, { flags: 'w' }); this.stream.on('error', err => { this.error = err; }); } write(msg) { if (this.error) throw this.error; this.stream.write(msg); } close() { return __awaiter(this, void 0, void 0, function* () { if (this.error) throw this.error; return new Promise((resolve, reject) => { this.stream.on('error', reject); this.stream.on('finish', () => { this.stream.close(); this.stream.destroy(); resolve(); }); this.stream.end(); }); }); } } function consumeStream(stream) { return new Promise((resolve, reject) => { let data = ''; stream.on('data', chunk => { data += chunk; }); stream.on('end', () => { resolve(data); }); stream.on('error', reject); }); } function error(msg) { throw new Error(msg); } //# sourceMappingURL=validator.js.map