Skip to content

Commit 6225891

Browse files
committed
feat: add abbility for detecting puppeteer dep
1 parent e77c3d7 commit 6225891

File tree

5 files changed

+51
-13
lines changed

5 files changed

+51
-13
lines changed

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ $ npm install puppeteer browserless --save
2525

2626
## Usage
2727

28-
**browserless** is an high level API simplification over for do common actions.
28+
**browserless** is an high level API simplification over for doing common actions.
2929

3030
For example, if you want to take an screenshot, just do:
3131

@@ -47,7 +47,8 @@ All methods follow the same interface:
4747

4848
- `url` (*required*): The target URL
4949
- `options`: Specific settings for the method (*optional*).
50-
- `callback`: Node.js callback. If you don't provide one, the method will return a `Promise`.
50+
51+
The methods returns a Promise or a Node.js callback if pass an additional function as the last parameter.
5152

5253
### .constructor(options)
5354

@@ -87,10 +88,19 @@ default: `30000`
8788

8889
This setting will change the default maximum navigation time.
8990

91+
##### puppeteer
92+
93+
type:`Puppeteer`</br>
94+
default: `puppeteer`|`puppeteer-core`|`puppeteer-firefox`
95+
96+
It's automatically detected based on your `dependencies` being supported [puppeteer](https://www.npmjs.com/package/puppeteer), [puppeteer-core](https://www.npmjs.com/package/puppeteer-core) or [puppeteer-firefox](https://www.npmjs.com/package/puppeteer-firefox).
97+
98+
Alternatively, you can pass it.
99+
90100
##### incognito
91101

92102
type:`boolean`</br>
93-
default: `true`
103+
default: `false`
94104

95105
Every time a new page is created, it will be an incognito page.
96106

packages/benchmark/index.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
'use strict'
22

33
const createBrowserless = require('browserless')
4-
createBrowserless.pool = require('@browserless/pool')
5-
4+
const createBrowserlessPool = require('@browserless/pool')
65
const { includes, reduce } = require('lodash')
76
const processStats = require('process-stats')
87
const asciichart = require('asciichart')
@@ -24,6 +23,7 @@ const cli = meow(
2423
--pool-min Mininum of instances in pool mode.
2524
--pool-max Maximum of instances in pool mode.
2625
--concurrency Define number of concurrent request.
26+
--firefox Use Firefox browser.
2727
2828
Options
2929
The rest of parameters provided are passed as options.
@@ -45,6 +45,10 @@ const cli = meow(
4545
iterations: {
4646
type: 'number',
4747
default: 10
48+
},
49+
firefox: {
50+
type: 'boolean',
51+
default: false
4852
}
4953
}
5054
}
@@ -86,14 +90,19 @@ const benchmark = async ({
8690
poolMin,
8791
poolMax,
8892
iterations,
93+
firefox,
8994
...opts
9095
} = cli.flags
9196

9297
if (!method) throw new TypeError('Need to provide a method to run.')
9398

99+
const puppeteer = firefox
100+
? require('puppeteer-firefox')
101+
: require('puppeteer')
102+
94103
const browserless = isPool
95-
? createBrowserless.pool({ min: poolMin, max: poolMax, ...opts })
96-
: createBrowserless(opts)
104+
? createBrowserlessPool({ min: poolMin, max: poolMax, puppeteer, ...opts })
105+
: createBrowserless({ puppeteer, ...opts })
97106

98107
console.log(prettyObj(cli.flags))
99108

packages/benchmark/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"pretty-ms": "latest",
4242
"process-stats": "latest",
4343
"puppeteer": "latest",
44+
"puppeteer-firefox": "latest",
4445
"time-span": "latest"
4546
},
4647
"engines": {

packages/browserless/package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,5 @@
5454
"coveralls": "nyc report --reporter=text-lcov | coveralls",
5555
"test": "nyc ava"
5656
},
57-
"license": "MIT",
58-
"peerDependencies": {
59-
"puppeteer": "1.x"
60-
}
57+
"license": "MIT"
6158
}

packages/browserless/src/index.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
const extractDomain = require('extract-domain')
44
const debug = require('debug')('browserless')
5-
const puppeteer = require('puppeteer')
65

76
const { getDevice } = require('./devices')
87
const isTracker = require('./is-tracker')
@@ -20,8 +19,30 @@ const isEmpty = val => val == null || !(Object.keys(val) || val).length
2019
// The puppeteer launch causes many events to be emitted.
2120
process.setMaxListeners(0)
2221

22+
const hasModule = m => {
23+
try {
24+
require.resolve(m)
25+
} catch (e) {
26+
return false
27+
}
28+
29+
return true
30+
}
31+
32+
function requireOneOf (modules) {
33+
for (let module of modules) if (hasModule(module)) return require(module)
34+
throw new TypeError(`'${modules.join(', ')}' not found on the system.`)
35+
}
36+
37+
const _puppeteer = requireOneOf([
38+
'puppeteer',
39+
'puppeteer-core',
40+
'puppeteer-firefox'
41+
])
42+
2343
module.exports = ({
24-
incognito = true,
44+
puppeteer = _puppeteer,
45+
incognito = false,
2546
timeout = 30000,
2647
...launchOpts
2748
} = {}) => {

0 commit comments

Comments
 (0)