UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

267 lines (244 loc) 4.56 kB
import Utils from './utils.js'; import { PLATFORMS_MAP } from './constants.js'; /* * Tablets go first since usually they have more specific * signs to detect. */ export default [ /* Googlebot */ { test: [/googlebot/i], describe() { return { type: 'bot', vendor: 'Google', }; }, }, /* Huawei */ { test: [/huawei/i], describe(ua) { const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova'; const platform = { type: PLATFORMS_MAP.mobile, vendor: 'Huawei', }; if (model) { platform.model = model; } return platform; }, }, /* Nexus Tablet */ { test: [/nexus\s*(?:7|8|9|10).*/i], describe() { return { type: PLATFORMS_MAP.tablet, vendor: 'Nexus', }; }, }, /* iPad */ { test: [/ipad/i], describe() { return { type: PLATFORMS_MAP.tablet, vendor: 'Apple', model: 'iPad', }; }, }, /* Firefox on iPad */ { test: [/Macintosh(.*?) FxiOS(.*?)\//], describe() { return { type: PLATFORMS_MAP.tablet, vendor: 'Apple', model: 'iPad', }; }, }, /* Amazon Kindle Fire */ { test: [/kftt build/i], describe() { return { type: PLATFORMS_MAP.tablet, vendor: 'Amazon', model: 'Kindle Fire HD 7', }; }, }, /* Another Amazon Tablet with Silk */ { test: [/silk/i], describe() { return { type: PLATFORMS_MAP.tablet, vendor: 'Amazon', }; }, }, /* Tablet */ { test: [/tablet(?! pc)/i], describe() { return { type: PLATFORMS_MAP.tablet, }; }, }, /* iPod/iPhone */ { test(parser) { const iDevice = parser.test(/ipod|iphone/i); const likeIDevice = parser.test(/like (ipod|iphone)/i); return iDevice && !likeIDevice; }, describe(ua) { const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua); return { type: PLATFORMS_MAP.mobile, vendor: 'Apple', model, }; }, }, /* Nexus Mobile */ { test: [/nexus\s*[0-6].*/i, /galaxy nexus/i], describe() { return { type: PLATFORMS_MAP.mobile, vendor: 'Nexus', }; }, }, /* Mobile */ { test: [/[^-]mobi/i], describe() { return { type: PLATFORMS_MAP.mobile, }; }, }, /* BlackBerry */ { test(parser) { return parser.getBrowserName(true) === 'blackberry'; }, describe() { return { type: PLATFORMS_MAP.mobile, vendor: 'BlackBerry', }; }, }, /* Bada */ { test(parser) { return parser.getBrowserName(true) === 'bada'; }, describe() { return { type: PLATFORMS_MAP.mobile, }; }, }, /* Windows Phone */ { test(parser) { return parser.getBrowserName() === 'windows phone'; }, describe() { return { type: PLATFORMS_MAP.mobile, vendor: 'Microsoft', }; }, }, /* Android Tablet */ { test(parser) { const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]); return parser.getOSName(true) === 'android' && (osMajorVersion >= 3); }, describe() { return { type: PLATFORMS_MAP.tablet, }; }, }, /* Android Mobile */ { test(parser) { return parser.getOSName(true) === 'android'; }, describe() { return { type: PLATFORMS_MAP.mobile, }; }, }, /* desktop */ { test(parser) { return parser.getOSName(true) === 'macos'; }, describe() { return { type: PLATFORMS_MAP.desktop, vendor: 'Apple', }; }, }, /* Windows */ { test(parser) { return parser.getOSName(true) === 'windows'; }, describe() { return { type: PLATFORMS_MAP.desktop, }; }, }, /* Linux */ { test(parser) { return parser.getOSName(true) === 'linux'; }, describe() { return { type: PLATFORMS_MAP.desktop, }; }, }, /* PlayStation 4 */ { test(parser) { return parser.getOSName(true) === 'playstation 4'; }, describe() { return { type: PLATFORMS_MAP.tv, }; }, }, /* Roku */ { test(parser) { return parser.getOSName(true) === 'roku'; }, describe() { return { type: PLATFORMS_MAP.tv, }; }, }, ];