/
index.js
46 lines (36 loc) · 1.33 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'use strict'
const { default: didyoumean } = require('didyoumean3')
const requireOneOf = require('require-one-of')
const memoizeOne = require('memoize-one')
const customDevices = require('./devices.json')
module.exports = ({
puppeteer = requireOneOf(['puppeteer', 'puppeteer-core', 'puppeteer-firefox']),
lossyDeviceName = true
} = {}) => {
const { KnownDevices: puppeteerDevices } = puppeteer
const devices = { ...puppeteerDevices, ...customDevices }
const deviceDescriptors = Object.keys(devices)
const findDevice = memoizeOne((deviceDescriptor, lossyEnabled) => {
if (!deviceDescriptor) return undefined
if (!lossyEnabled) return devices[deviceDescriptor]
const result = didyoumean(deviceDescriptor, deviceDescriptors)
if (!result) return undefined
return devices[result.winner]
})
const getDevices = ({ device: deviceDescriptor, headers = {}, viewport } = {}) => {
const device = findDevice(deviceDescriptor, lossyDeviceName)
return device
? {
userAgent: device.userAgent || headers['user-agent'],
viewport: { ...device.viewport, ...viewport }
}
: {
userAgent: headers['user-agent'],
viewport
}
}
getDevices.devices = devices
getDevices.findDevice = findDevice
getDevices.deviceDescriptors = deviceDescriptors
return getDevices
}