UNPKG

html-test

Version:

Node.js library for testing HTML files on the fly and output errors in the console with Gulp.js compatibilities

115 lines (92 loc) 2.27 kB
import { glob } from 'glob'; import fs from 'fs'; import { post } from './post.js'; import chalk from 'chalk'; /** * HTML Test */ const htmlTest = async (folder = '', cfg = '') => { let hide = cfg.hide; let pattern = []; if (cfg.hide) { if (Array.isArray(hide)) { hide.forEach(item => { let p = getPattern(item); if (p) { pattern.push(p); } }); } else { let p = getPattern(hide); if (p) { pattern.push(p); } } } function getPattern(item) { switch (item) { case 'js-literals': return /\$\{.+\}/; break; case 'twig': case 'mustache': case 'handlebars': return /\{\{.+\}\}/; break; } return ''; } /** * Requests Delay * * @param {*} ms * @returns */ // function delay(ms) { // return new Promise(resolve => setTimeout(resolve, ms)); // } async function process(data, file) { let results = await post(data.toString()); if (results && results.length > 0) { results.forEach(item => { const msg = item.message; let hideMsg = false; for (let i = 0; i < pattern.length; i++) { hideMsg = false; const regex = new RegExp(pattern[i], 'g'); hideMsg = regex.test(msg); if (hideMsg === true) break; } if (!hideMsg) { if (item.type === 'error') { console.log(`\n[Line: ${item.lastLine}] ` + chalk.gray(file) + `\n${msg}` + chalk.green(`\n${item.extract}`)); } } }); } } const files = await glob(folder, cfg); // Max Requests const maxReq = 5; let filesLength = files.length; // let iterations = Math.ceil(filesLength / maxReq); let iterations = 1; if (filesLength > 0) { for (let i = 1; i <= iterations; i++) { let filesSlice = files.splice(0, maxReq); filesSlice.forEach((file) => { fs.readFile(file, async (err, data) => { if (err) { console.log(err); } else { process(data.toString(), file); } }); }); // if (iterations > 1) { // await delay(1000) // } } } }; export default htmlTest;