Skip to content

Commit

Permalink
fix(puppeteer): compatibility with ES
Browse files Browse the repository at this point in the history
  • Loading branch information
jrandolf-zz authored and jrandolf committed Feb 9, 2022
2 parents 55459ae + a858cf7 commit 67a4486
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Expand Up @@ -19,7 +19,7 @@ yarn.lock
test/coverage.json
temp/
new-docs/
puppeteer.tgz
puppeteer*.tgz
docs-api-json/
docs-dist/
website/docs
4 changes: 3 additions & 1 deletion compat/cjs/compat.ts
@@ -1 +1,3 @@
export const puppeteerDirname = __dirname;
import { dirname } from 'path';

export const puppeteerDirname = dirname(dirname(dirname(__dirname)));
6 changes: 5 additions & 1 deletion compat/esm/compat.ts
@@ -1,4 +1,8 @@
import { dirname } from 'path';
import { fileURLToPath } from 'url';

export const puppeteerDirname = dirname(fileURLToPath(import.meta.url));
// `import.meta.url` resolves to the nearest package.json which for ES modules
// is in `lib/esm` for compatibility reasons. Thus we go up three levels.
export const puppeteerDirname = dirname(
dirname(dirname(dirname(fileURLToPath(import.meta.url))))
);
2 changes: 1 addition & 1 deletion docs/api.md
@@ -1,4 +1,4 @@
# Puppeteer API <!-- GEN:version -->v13.2.0<!-- GEN:stop-->
# Puppeteer API <!-- GEN:version -->Tip-Of-Tree<!-- GEN:stop-->

<!-- GEN:empty-if-release --><!-- GEN:stop -->

Expand Down
5 changes: 3 additions & 2 deletions package.json
@@ -1,6 +1,6 @@
{
"name": "puppeteer",
"version": "13.2.0",
"version": "13.2.0-post",
"description": "A high-level API to control headless Chrome over the DevTools Protocol",
"type": "commonjs",
"main": "./cjs-entry.js",
Expand Down Expand Up @@ -58,6 +58,7 @@
"lib/**/*.d.ts.map",
"lib/**/*.js",
"lib/**/*.js.map",
"lib/**/package.json",
"install.js",
"typescript-if-required.js",
"cjs-entry.js",
Expand Down Expand Up @@ -87,7 +88,7 @@
"@types/debug": "4.1.7",
"@types/mime": "2.0.3",
"@types/mocha": "9.0.0",
"@types/node": "16.10.9",
"@types/node": "17.0.15",
"@types/progress": "2.0.5",
"@types/proxy-from-env": "1.0.1",
"@types/rimraf": "3.0.2",
Expand Down
26 changes: 26 additions & 0 deletions scripts/test-install.sh
Expand Up @@ -16,6 +16,26 @@ npm install --loglevel silent "${tarball}"
node --eval="require('puppeteer')"
ls $TMPDIR/node_modules/puppeteer/.local-chromium/

# Testing ES module features
TMPDIR="$(mktemp -d)"
cd $TMPDIR
echo '{"type":"module"}' >>$TMPDIR/package.json
npm install --loglevel silent "${tarball}"
node --input-type="module" --eval="import puppeteer from 'puppeteer'"
ls $TMPDIR/node_modules/puppeteer/.local-chromium/

node --input-type="module" --eval="
import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
"

# Again for Firefox
TMPDIR="$(mktemp -d)"
cd $TMPDIR
Expand All @@ -39,3 +59,9 @@ cd $TMPDIR
npm install --loglevel silent "${tarball}"
node --eval="require('puppeteer-core')"

# Testing ES module features
TMPDIR="$(mktemp -d)"
cd $TMPDIR
echo '{"type":"module"}' >>$TMPDIR/package.json
npm install --loglevel silent "${tarball}"
node --input-type="module" --eval="import puppeteer from 'puppeteer-core'"
6 changes: 2 additions & 4 deletions src/node/BrowserFetcher.ts
Expand Up @@ -34,6 +34,8 @@ import createHttpsProxyAgent, {
} from 'https-proxy-agent';
import { getProxyForUrl } from 'proxy-from-env';
import { assert } from '../common/assert.js';
import tar from 'tar-fs';
import bzip from 'unbzip2-stream';

const debugFetcher = debug('puppeteer:fetcher');

Expand Down Expand Up @@ -499,10 +501,6 @@ function install(archivePath: string, folderPath: string): Promise<unknown> {
* @internal
*/
function extractTar(tarPath: string, folderPath: string): Promise<unknown> {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const tar = require('tar-fs');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const bzip = require('unbzip2-stream');
return new Promise((fulfill, reject) => {
const tarStream = tar.extract(folderPath);
tarStream.on('error', reject);
Expand Down
14 changes: 11 additions & 3 deletions src/node/NodeWebSocketTransport.ts
Expand Up @@ -15,18 +15,26 @@
*/
import { ConnectionTransport } from '../common/ConnectionTransport.js';
import NodeWebSocket from 'ws';
import { readFileSync } from 'fs';
import { join } from 'path';
import { puppeteerDirname } from '../compat.js';

// We parse rather than import for ES module compatibility.
const version = JSON.parse(
readFileSync(join(puppeteerDirname, 'package.json'), {
encoding: 'utf8',
})
).version;

export class NodeWebSocketTransport implements ConnectionTransport {
static create(url: string): Promise<NodeWebSocketTransport> {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const pkg = require('../../../../package.json');
return new Promise((resolve, reject) => {
const ws = new NodeWebSocket(url, [], {
followRedirects: true,
perMessageDeflate: false,
maxPayload: 256 * 1024 * 1024, // 256Mb
headers: {
'User-Agent': `Puppeteer ${pkg.version}`,
'User-Agent': `Puppeteer ${version}`,
},
});

Expand Down
4 changes: 3 additions & 1 deletion utils/prepare_puppeteer_core.js
Expand Up @@ -21,7 +21,9 @@ const path = require('path');
const packagePath = path.join(__dirname, '..', 'package.json');
const json = require(packagePath);

json.name = 'puppeteer-core';
delete json.scripts.install;

json.name = 'puppeteer-core';
json.main = './cjs-entry-core.js';
json.exports.import = './lib/esm/puppeteer/node-puppeteer-core.js';
fs.writeFileSync(packagePath, JSON.stringify(json, null, ' '));

0 comments on commit 67a4486

Please sign in to comment.