feat: Introduce BrowserFetcher class (#1983)

This patch introduces `BrowserFetcher` class that manages
downloaded versions of products.

This patch:
- shapes Downloader API to be minimal yet usable for our needs. This
  includes removing such methods as `Downloader.supportedPlatforms` and
  `Downloader.defaultRevision`.
- makes most of the fs-related methods in Downloader async. The only
  exception is the `Downloader.revisionInfo`: it has stay sync due to the
  `pptr.executablePath()` method being sync.
- updates `install.js` and `utils/check_availability.js` to use new API
- finally, renames `Downloader` into `BrowserFetcher`

Fixes #1748.
This commit is contained in:
Andrey Lushnikov
2018-02-07 12:31:53 -05:00
committed by GitHub
parent 18c975509f
commit a363a733b7
11 changed files with 260 additions and 141 deletions

View File

@@ -13,10 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const fs = require('fs');
const path = require('path');
const debugError = require('debug')(`puppeteer:error`);
/** @type {?Map<string, boolean>} */
let apiCoverage = null;
let projectRoot = null;
class Helper {
/**
* @param {Function|string} fun
@@ -41,6 +44,17 @@ class Helper {
}
}
/**
* @return {string}
*/
static projectRoot() {
if (!projectRoot) {
// Project root will be different for node6-transpiled code.
projectRoot = fs.existsSync(path.join(__dirname, '..', 'package.json')) ? path.join(__dirname, '..') : path.join(__dirname, '..', '..');
}
return projectRoot;
}
/**
* @param {!Object} exceptionDetails
* @return {string}