html-to-pdf-converter
Version:
HTML to PDF converter with support for HEADERS, FOOTERS and page numbers
91 lines • 4.44 kB
JavaScript
;
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 fs_1 = require("fs");
const path_1 = require("path");
const gm = require("gm");
const glob = require("glob");
const ramda_1 = require("ramda");
const getFilePaths = (filePath, pattern) => new Promise((resolve, reject) => {
glob(`${filePath}/${pattern}`, { nodir: true, ignore: ['*.diff.*'] }, (err, files) => {
return err ? reject(err) : resolve(files);
});
});
const savePdfToPng = (filePath, pdfBuffer) => new Promise((resolve, reject) => {
gm(pdfBuffer, `${path_1.basename(filePath, path_1.extname(filePath))}.pdf`)
.density(300, 300)
.out('-append')
.write(filePath, (err) => (err ? reject(err) : resolve()));
});
const savePdfToPngs = (filePath, fileName, pdfBuffer) => new Promise((resolve, reject) => {
gm(pdfBuffer, `${path_1.basename(filePath, path_1.extname(filePath))}.pdf`)
.density(300, 300)
.out('+adjoin')
.write(`${path_1.join(filePath, fileName)}%02d.png`, (err) => (err ? reject(err) : resolve()));
});
const compareImages = (expectedImagePath, resultImagePath, tolerance = 0) => new Promise((resolve, reject) => {
gm.compare(expectedImagePath, resultImagePath, { tolerance }, (err, isEqual, equality, raw) => {
if (err) {
return reject(err);
}
if (isEqual === false) {
console.log(...[
`Expected: ${expectedImagePath} \n`,
`Result: ${resultImagePath} \n`,
`The images were equal: ${isEqual} \n`,
`Actual equality: ${equality} \n`,
raw,
]);
const options = {
file: `${resultImagePath}.diff.png`,
highlightColor: 'yellow',
tolerance,
};
gm.compare(expectedImagePath, resultImagePath, options, () => {
resolve({ isEqual, equality, raw });
});
}
else {
resolve({ isEqual, equality, raw });
}
});
});
const expectedPath = path_1.join(__dirname, '../../expected');
const outputPath = path_1.join(__dirname, '../../output');
// TODO: quick hack
if (!fs_1.existsSync(outputPath)) {
fs_1.mkdirSync(outputPath);
}
exports.compareToExpected = (fileName, pdfBuffer, mkSnapshot = false) => __awaiter(this, void 0, void 0, function* () {
const expectedImagePath = path_1.join(expectedPath, `${fileName}.png`);
if (mkSnapshot) {
fs_1.writeFileSync(path_1.join(expectedPath, `${fileName}.pdf`), pdfBuffer);
yield savePdfToPng(expectedImagePath, pdfBuffer);
}
const resultImagePath = path_1.join(outputPath, `${fileName}.png`);
yield savePdfToPng(resultImagePath, pdfBuffer);
const { isEqual } = yield compareImages(expectedImagePath, resultImagePath);
expect(isEqual).toEqual(true);
});
exports.compareToExpectedMultiple = (fileName, pdfBuffer, mkSnapshot = false) => __awaiter(this, void 0, void 0, function* () {
if (mkSnapshot) {
fs_1.writeFileSync(path_1.join(expectedPath, `${fileName}.pdf`), pdfBuffer);
yield savePdfToPngs(expectedPath, fileName, pdfBuffer);
}
yield savePdfToPngs(outputPath, fileName, pdfBuffer);
const [expectedFilePaths, resultFilePaths] = yield Promise.all([
getFilePaths(expectedPath, `${fileName}+([0-9]).png`),
getFilePaths(outputPath, `${fileName}+([0-9]).png`),
]);
expect(expectedFilePaths.length).toEqual(resultFilePaths.length);
const results = (yield Promise.all(ramda_1.zip(expectedFilePaths, resultFilePaths).map(([expectedImagePath, resultImagePath]) => compareImages(expectedImagePath, resultImagePath)))).map(({ isEqual }) => isEqual);
expect(results.every(x => x === true)).toEqual(true);
});
//# sourceMappingURL=test-helpers.js.map