fortissimo-html
Version:
Fortissimo HTML - Flexible, Forgiving, Formatting HTML Parser
63 lines • 2.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = __importDefault(require("commander"));
const fast_glob_1 = __importDefault(require("fast-glob"));
const fs_1 = __importDefault(require("fs"));
const iconv_lite_1 = __importDefault(require("iconv-lite"));
const html_parser_1 = require("./html-parser");
const logErrorsFlag = true;
const logWarningFlag = true;
commander_1.default
.option('-x, --exclude <exclude>', 'pattern for files/directories to exclude')
.arguments('<globs...>')
.action(async (globs) => {
const options = {
ignore: commander_1.default.exclude ? [commander_1.default.exclude] : undefined,
};
const files = fast_glob_1.default.sync(globs, options);
for (const file of files)
await processFile(file);
})
.parse(process.argv);
async function processFile(file) {
let readEncoding = 'utf8';
let tries = 0;
let dom;
try {
while (tries++ < 2 && !dom) {
const content = fs_1.default.readFileSync(file, { encoding: readEncoding });
const parser = new html_parser_1.HtmlParser();
dom = parser
.on('encoding', (encoding, normalizedEncoding) => {
if (readEncoding === normalizedEncoding)
return false;
logWarnings('*** Attempted encoding %s did not match declared encoding %s', readEncoding, normalizedEncoding);
if (!iconv_lite_1.default.encodingExists(normalizedEncoding)) {
logErrors('*** Encoding %s is not supported', normalizedEncoding);
tries = Number.MAX_SAFE_INTEGER;
}
readEncoding = normalizedEncoding;
return true;
})
.on('error', (error, line, col) => {
logErrors('*** %s: [%s, %s]', error, line, col);
})
.parse(content).domRoot;
}
}
catch (err) {
console.error('Error reading file "%s": %s', file, err.toString());
}
}
function logErrors(...args) {
if (logErrorsFlag)
console.error(...args);
}
function logWarnings(...args) {
if (logWarningFlag)
console.warn(...args);
}
//# sourceMappingURL=cli.js.map