UNPKG

html-to-pdf-converter

Version:

HTML to PDF converter with support for HEADERS, FOOTERS and page numbers

91 lines 4.44 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 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