From 38a2deab219585b69bea4008c9ef03e52f120dac Mon Sep 17 00:00:00 2001 From: Mathias Bynens Date: Wed, 16 Oct 2019 14:35:53 +0200 Subject: [PATCH] Restore helper.promisify so puppeteer-web doesn't break We can reconsider this once https://github.com/browserify/browserify/pull/1844 gets merged. --- .../puppeteer-firefox/lib/BrowserFetcher.js | 8 ++--- experimental/puppeteer-firefox/lib/Page.js | 3 +- experimental/puppeteer-firefox/lib/helper.js | 20 +++++++++++++ lib/BrowserFetcher.js | 10 +++---- lib/DOMWorld.js | 3 +- lib/Launcher.js | 5 ++-- lib/Page.js | 3 +- lib/helper.js | 29 +++++++++++++++---- test/launcher.spec.js | 11 ++++--- 9 files changed, 63 insertions(+), 29 deletions(-) diff --git a/experimental/puppeteer-firefox/lib/BrowserFetcher.js b/experimental/puppeteer-firefox/lib/BrowserFetcher.js index c222754d32584..c7d1250e4c1ee 100644 --- a/experimental/puppeteer-firefox/lib/BrowserFetcher.js +++ b/experimental/puppeteer-firefox/lib/BrowserFetcher.js @@ -82,10 +82,10 @@ function downloadURL(product, platform, host, revision) { return util.format(downloadURLs[product][platform], host, revision, archiveName(product, platform, revision)); } -const readdirAsync = util.promisify(fs.readdir.bind(fs)); -const mkdirAsync = util.promisify(fs.mkdir.bind(fs)); -const unlinkAsync = util.promisify(fs.unlink.bind(fs)); -const chmodAsync = util.promisify(fs.chmod.bind(fs)); +const readdirAsync = helper.promisify(fs.readdir.bind(fs)); +const mkdirAsync = helper.promisify(fs.mkdir.bind(fs)); +const unlinkAsync = helper.promisify(fs.unlink.bind(fs)); +const chmodAsync = helper.promisify(fs.chmod.bind(fs)); function existsAsync(filePath) { let fulfill = null; diff --git a/experimental/puppeteer-firefox/lib/Page.js b/experimental/puppeteer-firefox/lib/Page.js index c2ce1bdb3ed6f..de5c7b41e95f1 100644 --- a/experimental/puppeteer-firefox/lib/Page.js +++ b/experimental/puppeteer-firefox/lib/Page.js @@ -4,7 +4,6 @@ const {Dialog} = require('./Dialog'); const {TimeoutError} = require('./Errors'); const fs = require('fs'); const mime = require('mime'); -const util = require('util'); const EventEmitter = require('events'); const {createHandle} = require('./JSHandle'); const {Events} = require('./Events'); @@ -15,7 +14,7 @@ const {TimeoutSettings} = require('./TimeoutSettings'); const {NavigationWatchdog} = require('./NavigationWatchdog'); const {Accessibility} = require('./Accessibility'); -const writeFileAsync = util.promisify(fs.writeFile); +const writeFileAsync = helper.promisify(fs.writeFile); class Page extends EventEmitter { /** diff --git a/experimental/puppeteer-firefox/lib/helper.js b/experimental/puppeteer-firefox/lib/helper.js index 07f180c7f1be7..92e86ad22b5c6 100644 --- a/experimental/puppeteer-firefox/lib/helper.js +++ b/experimental/puppeteer-firefox/lib/helper.js @@ -65,6 +65,26 @@ class Helper { } } + /** + * @param {function} nodeFunction + * @return {function} + */ + static promisify(nodeFunction) { + function promisified(...args) { + return new Promise((resolve, reject) => { + function callback(err, ...result) { + if (err) + return reject(err); + if (result.length === 1) + return resolve(result[0]); + return resolve(result); + } + nodeFunction.call(null, ...args, callback); + }); + } + return promisified; + } + /** * @param {!Object} obj * @return {boolean} diff --git a/lib/BrowserFetcher.js b/lib/BrowserFetcher.js index cea6e3ee97f13..aace9220591f4 100644 --- a/lib/BrowserFetcher.js +++ b/lib/BrowserFetcher.js @@ -20,7 +20,7 @@ const path = require('path'); const util = require('util'); const extract = require('extract-zip'); const URL = require('url'); -const {assert} = require('./helper'); +const {helper, assert} = require('./helper'); const removeRecursive = require('rimraf'); // @ts-ignore const ProxyAgent = require('https-proxy-agent'); @@ -64,10 +64,10 @@ function downloadURL(platform, host, revision) { return util.format(downloadURLs[platform], host, revision, archiveName(platform, revision)); } -const readdirAsync = util.promisify(fs.readdir.bind(fs)); -const mkdirAsync = util.promisify(fs.mkdir.bind(fs)); -const unlinkAsync = util.promisify(fs.unlink.bind(fs)); -const chmodAsync = util.promisify(fs.chmod.bind(fs)); +const readdirAsync = helper.promisify(fs.readdir.bind(fs)); +const mkdirAsync = helper.promisify(fs.mkdir.bind(fs)); +const unlinkAsync = helper.promisify(fs.unlink.bind(fs)); +const chmodAsync = helper.promisify(fs.chmod.bind(fs)); function existsAsync(filePath) { let fulfill = null; diff --git a/lib/DOMWorld.js b/lib/DOMWorld.js index ba1a3193449d4..c5852cacd9faf 100644 --- a/lib/DOMWorld.js +++ b/lib/DOMWorld.js @@ -15,11 +15,10 @@ */ const fs = require('fs'); -const util = require('util'); const {helper, assert} = require('./helper'); const {LifecycleWatcher} = require('./LifecycleWatcher'); const {TimeoutError} = require('./Errors'); -const readFileAsync = util.promisify(fs.readFile); +const readFileAsync = helper.promisify(fs.readFile); /** * @unrestricted diff --git a/lib/Launcher.js b/lib/Launcher.js index 6a3e4db0463f1..41dc1e5da3ce5 100644 --- a/lib/Launcher.js +++ b/lib/Launcher.js @@ -15,7 +15,6 @@ */ const os = require('os'); const path = require('path'); -const util = require('util'); const http = require('http'); const https = require('https'); const URL = require('url'); @@ -31,8 +30,8 @@ const {TimeoutError} = require('./Errors'); const WebSocketTransport = require('./WebSocketTransport'); const PipeTransport = require('./PipeTransport'); -const mkdtempAsync = util.promisify(fs.mkdtemp); -const removeFolderAsync = util.promisify(removeFolder); +const mkdtempAsync = helper.promisify(fs.mkdtemp); +const removeFolderAsync = helper.promisify(removeFolder); const CHROME_PROFILE_PATH = path.join(os.tmpdir(), 'puppeteer_dev_profile-'); diff --git a/lib/Page.js b/lib/Page.js index d1cd837bfc400..0bdd217c8291f 100644 --- a/lib/Page.js +++ b/lib/Page.js @@ -18,7 +18,6 @@ const fs = require('fs'); const path = require('path'); const EventEmitter = require('events'); const mime = require('mime'); -const util = require('util'); const {Events} = require('./Events'); const {Connection} = require('./Connection'); const {Dialog} = require('./Dialog'); @@ -33,7 +32,7 @@ const {createJSHandle} = require('./JSHandle'); const {Accessibility} = require('./Accessibility'); const {TimeoutSettings} = require('./TimeoutSettings'); -const writeFileAsync = util.promisify(fs.writeFile); +const writeFileAsync = helper.promisify(fs.writeFile); class Page extends EventEmitter { /** diff --git a/lib/helper.js b/lib/helper.js index 231a148e08803..3c5d987ad0b99 100644 --- a/lib/helper.js +++ b/lib/helper.js @@ -16,11 +16,6 @@ const {TimeoutError} = require('./Errors'); const debugError = require('debug')(`puppeteer:error`); const fs = require('fs'); -const util = require('util'); - -const openAsync = util.promisify(fs.open); -const writeAsync = util.promisify(fs.write); -const closeAsync = util.promisify(fs.close); class Helper { /** @@ -161,6 +156,26 @@ class Helper { return typeof obj === 'number' || obj instanceof Number; } + /** + * @param {function} nodeFunction + * @return {function} + */ + static promisify(nodeFunction) { + function promisified(...args) { + return new Promise((resolve, reject) => { + function callback(err, ...result) { + if (err) + return reject(err); + if (result.length === 1) + return resolve(result[0]); + return resolve(result); + } + nodeFunction.call(null, ...args, callback); + }); + } + return promisified; + } + /** * @param {!NodeJS.EventEmitter} emitter * @param {(string|symbol)} eventName @@ -255,6 +270,10 @@ class Helper { } } +const openAsync = Helper.promisify(fs.open); +const writeAsync = Helper.promisify(fs.write); +const closeAsync = Helper.promisify(fs.close); + /** * @param {*} value * @param {string=} message diff --git a/test/launcher.spec.js b/test/launcher.spec.js index 78fdd93cef1d0..8cb43a9737a42 100644 --- a/test/launcher.spec.js +++ b/test/launcher.spec.js @@ -16,12 +16,11 @@ const fs = require('fs'); const os = require('os'); const path = require('path'); -const util = require('util'); - -const rmAsync = util.promisify(require('rimraf')); -const mkdtempAsync = util.promisify(fs.mkdtemp); -const readFileAsync = util.promisify(fs.readFile); -const statAsync = util.promisify(fs.stat); +const {helper} = require('../lib/helper'); +const rmAsync = helper.promisify(require('rimraf')); +const mkdtempAsync = helper.promisify(fs.mkdtemp); +const readFileAsync = helper.promisify(fs.readFile); +const statAsync = helper.promisify(fs.stat); const TMP_FOLDER = path.join(os.tmpdir(), 'pptr_tmp_folder-'); const utils = require('./utils');