diff --git a/.gitignore b/.gitignore index b512c09d476623ff4bf8d0d63c29b784925dbdf8..14062779341f0bac408e84dd5eab983f171f1786 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +output diff --git a/package-lock.json b/package-lock.json index 06b59756f0db46ab4af033db83f57458c312d6bc..9830fd69facf4cf1a38527304e8389277853ad3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "pagedjs-cli", - "version": "0.0.3", + "version": "0.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -58,11 +58,6 @@ "pako": "^1.0.6" } }, - "@types/node": { - "version": "11.13.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", - "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==" - }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -176,11 +171,6 @@ "type-is": "~1.6.16" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -222,19 +212,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -336,17 +313,6 @@ "which": "^1.2.9" } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, "css-tree": { "version": "1.0.0-alpha.29", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", @@ -356,11 +322,6 @@ "source-map": "^0.5.3" } }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, "d": { "version": "1.0.0", "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -410,37 +371,6 @@ "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -457,11 +387,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, "es5-ext": { "version": "0.10.49", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", @@ -848,31 +773,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -1184,13 +1084,10 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } + "node-fetch": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.4.1.tgz", + "integrity": "sha512-P9UbpFK87NyqBZzUuDBDz4f6Yiys8xm8j7ACDbi6usvFm6KItklQUKjeoqTrYS/S1k6I8oaOC2YLLDr/gg26Mw==" }, "on-finished": { "version": "2.3.0", @@ -1290,14 +1187,6 @@ "callsites": "^3.0.0" } }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "requires": { - "@types/node": "*" - } - }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", diff --git a/package.json b/package.json index 5801225e8e85df1442db86b2c779e843b5269488..02bae4b823fe4f5b92e9794feaa7372dd76071af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pagedjs-cli", - "version": "0.0.3", + "version": "0.0.5", "author": "Fred Chasen", "license": "MIT", "homepage": "https://pagedmedia.org", @@ -21,6 +21,7 @@ "katex": "^0.10.1", "lodash": "^4.17.11", "mathjax": "^2.7.5", + "node-fetch": "^2.4.1", "ora": "^3.4.0", "pagedjs": "^0.1.34", "pdf-lib": "^0.6.1", diff --git a/src/printer.js b/src/printer.js index 88f6ad379b676ec0ea7a0df348931ab3477b45d6..29d4b543e655d90bb456672262fde58557b1a4bf 100644 --- a/src/printer.js +++ b/src/printer.js @@ -3,13 +3,16 @@ const EventEmitter = require('events'); const puppeteer = require('puppeteer'); const util = require('util'); const fs = require('fs'); -const readFile = util.promisify(fs.readFile); +const fetch = require("node-fetch"); const path = require('path'); let dir = process.cwd(); -let scriptPath = path.resolve(dir, "./node_modules/pagedjs/dist/"); +// Find top most pagedjs +let pagedjsLocation = require.resolve("pagedjs/dist/paged.polyfill.js"); +let paths = pagedjsLocation.split("node_modules"); +let scriptPath = paths[0] + "node_modules" + paths[paths.length-1]; const PostProcesser = require('./postprocesser'); @@ -36,7 +39,8 @@ class Printer extends EventEmitter { async setup() { const browser = await puppeteer.launch({ headless: this.headless, - args: this.allowLocal ? ['--allow-file-access-from-files'] : [] + args: this.allowLocal ? ['--allow-file-access-from-files', '--disable-dev-shm-usage', '--no-sandbox'] : ['--disable-dev-shm-usage', '--no-sandbox'], + ignoreHTTPSErrors: true }); return browser; @@ -54,10 +58,15 @@ class Printer extends EventEmitter { const page = await this.browser.newPage(); - let url, html; + let uri, url, html; if (typeof input === "string") { try { - url = new URL(input); + uri = new URL(input); + if (uri.protocol === "https:") { + html = await fetch(input) + .then(res => res.text()) + } + url = input; } catch { let relativePath = path.resolve(dir, input); url = "file://" + relativePath; @@ -72,6 +81,18 @@ class Printer extends EventEmitter { .catch((e) => { console.error(e); }); + + if (url) { + await page.evaluate((url) => { + let base = document.querySelector("base"); + if (!base) { + base = document.createElement("base"); + document.querySelector("head").appendChild(base); + } + base.setAttribute("href", url); + }, url); + } + } else { await page.goto(url) .catch((e) => { @@ -85,8 +106,10 @@ class Printer extends EventEmitter { } }); + + await page.addScriptTag({ - path: path.resolve(__dirname, "../node_modules/pagedjs/dist/paged.polyfill.js") + path: scriptPath }); // await page.exposeFunction('PuppeteerLogger', (msg) => {