|
| 1 | +import { process } from 'process' |
| 2 | + |
| 3 | +import { version } from '../package.json' |
| 4 | + |
| 5 | +const isNode = function () { |
| 6 | + return typeof process === 'object' |
| 7 | +} |
| 8 | + |
| 9 | +const getBrowserName = function () { |
| 10 | + const { userAgent } = navigator |
| 11 | + let browserName = 'Unkown Browser' |
| 12 | + |
| 13 | + if (/chrome|chromium|crios/i.test(userAgent)) browserName = 'chrome' |
| 14 | + if (/firefox|fxios/i.test(userAgent)) browserName = 'firefox' |
| 15 | + if (/safari/i.test(userAgent)) browserName = 'safari' |
| 16 | + if (/opr/i.test(userAgent)) browserName = 'opera' |
| 17 | + if (/edg/i.test(userAgent)) browserName = 'edge' |
| 18 | + |
| 19 | + return browserName |
| 20 | +} |
| 21 | + |
| 22 | +const getBrowserPlatormData = function () { |
| 23 | + const browserName = getBrowserName() |
| 24 | + const { appVersion } = navigator |
| 25 | + |
| 26 | + let OSName = 'Unknown OS' |
| 27 | + |
| 28 | + if (appVersion.includes('Win')) OSName = 'Windows' |
| 29 | + if (appVersion.includes('Mac')) OSName = 'MacOS' |
| 30 | + if (appVersion.includes('X11')) OSName = 'UNIX' |
| 31 | + if (appVersion.includes('Linux')) OSName = 'Linux' |
| 32 | + |
| 33 | + return { os: OSName, runtime: browserName, runtimeVersion: appVersion } |
| 34 | +} |
| 35 | + |
| 36 | +const getNodePlatformData = function () { |
| 37 | + const { platform } = process |
| 38 | + const { |
| 39 | + versions: { node: runtimeVersion }, |
| 40 | + } = process |
| 41 | + |
| 42 | + let OSName = platform |
| 43 | + |
| 44 | + if (platform === 'darwin') OSName = 'MacOS' |
| 45 | + if (platform.includes('win')) OSName = 'Windows' |
| 46 | + |
| 47 | + return { os: OSName, runtime: 'nodeJS', runtimeVersion } |
| 48 | +} |
| 49 | + |
| 50 | +export const getUserAgent = function () { |
| 51 | + const packageVersion = version |
| 52 | + const platformData = isNode() ? getNodePlatformData() : getBrowserPlatormData() |
| 53 | + const { os, runtime, runtimeVersion } = platformData |
| 54 | + |
| 55 | + return `netlify/js-client ${packageVersion}; ${runtime} version ${runtimeVersion}; OS: ${os}` |
| 56 | +} |
0 commit comments