Skip to content

Commit f5060fc

Browse files
committed
fix: use correct values for browser meta
1 parent 0f6e372 commit f5060fc

File tree

6 files changed

+1054
-103
lines changed

6 files changed

+1054
-103
lines changed

packages/core/src/utils/is.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,5 @@ export const isMapDefined = typeof Map !== 'undefined';
6767

6868
export const isMap = ((value) => isMapDefined && isInstanceOf(value, Map)) as IsFnHelper<Map<any, any>>;
6969

70-
export const isSyntheticEvent = ((value) =>
71-
isObject(value) &&
72-
'nativeEvent' in value &&
73-
'preventDefault' in value &&
74-
'stopPropagation' in value) as IsFnHelper<Event>;
70+
export const isSyntheticEvent = (value: unknown) =>
71+
isObject(value) && 'nativeEvent' in value && 'preventDefault' in value && 'stopPropagation' in value;

packages/react-native-sdk/package.json

+5
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,18 @@
5353
},
5454
"dependencies": {
5555
"@grafana/faro-core": "^1.12.2",
56+
"react-native-device-info": "^14.0.2",
5657
"ua-parser-js": "^1.0.32",
5758
"web-vitals": "^4.0.1"
5859
},
5960
"devDependencies": {
6061
"@types/ua-parser-js": "^0.7.36",
62+
"react-native": "0.72.6",
6163
"user-agent-data-types": "^0.4.2"
6264
},
65+
"peerDependencies": {
66+
"react-native": ">=0.70.0"
67+
},
6368
"publishConfig": {
6469
"access": "public"
6570
}
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,21 @@
1-
import { UAParser } from 'ua-parser-js';
1+
// eslint-disable-next-line import/namespace
2+
import { Dimensions, Platform } from 'react-native';
3+
import { getBrand, getModel, getReadableVersion, getSystemVersion } from 'react-native-device-info';
24

3-
import { unknownString } from '@grafana/faro-core';
4-
import type { Meta, MetaBrowser, MetaItem } from '@grafana/faro-core';
5+
import { Meta, MetaItem } from '@grafana/faro-core';
56

6-
export const browserMeta: MetaItem<Pick<Meta, 'browser'>> = () => {
7-
const parser = new UAParser();
8-
const { name, version } = parser.getBrowser();
9-
const { name: osName, version: osVersion } = parser.getOS();
10-
const userAgent = parser.getUA();
11-
const language = navigator.language;
12-
const mobile = navigator.userAgent.includes('Mobi');
13-
const brands = getBrands();
7+
const { width, height } = Dimensions.get('window');
148

15-
return {
16-
browser: {
17-
name: name ?? unknownString,
18-
version: version ?? unknownString,
19-
os: `${osName ?? unknownString} ${osVersion ?? unknownString}`,
20-
userAgent: userAgent ?? unknownString,
21-
language: language ?? unknownString,
22-
mobile,
23-
brands: brands ?? unknownString,
24-
viewportWidth: `${window.innerWidth}`,
25-
viewportHeight: `${window.innerHeight}`,
9+
export const browserMeta: MetaItem<Pick<Meta, 'browser'>> = () => ({
10+
browser: {
11+
name: Platform.OS,
12+
version: getReadableVersion(),
13+
os: getSystemVersion(),
14+
mobile: true,
15+
userAgent: `${Platform.OS}/${getSystemVersion()} (${getBrand()} ${getModel()})`,
16+
windowSize: {
17+
width,
18+
height,
2619
},
27-
};
28-
29-
function getBrands(): MetaBrowser['brands'] | undefined {
30-
if (!name || !version) {
31-
return undefined;
32-
}
33-
34-
if ('userAgentData' in navigator && navigator.userAgentData) {
35-
// userAgentData in experimental (only Chrome supports it) thus TS does not ship the respective type declarations
36-
return (navigator as any).userAgentData.brands;
37-
}
38-
39-
return undefined;
40-
}
41-
};
20+
},
21+
});

rollup.config.base.js

+43-11
Original file line numberDiff line numberDiff line change
@@ -87,40 +87,72 @@ const modules = {
8787
bundleName: 'faro-instrumentation-otel-redux-saga',
8888
globalName: 'GrafanaFaroInstrumentationOtelReduxSaga',
8989
externals: [],
90-
}
90+
},
9191
};
9292

9393
exports.getRollupConfigBase = (moduleName) => {
9494
const module = modules[moduleName];
9595

96-
return {
96+
const isReactNative = moduleName.startsWith('rn');
97+
98+
const baseConfig = {
9799
input: './src/index.ts',
98100
output: {
99101
file: `./dist/bundle/${module.bundleName}.iife.js`,
100102
format: 'iife',
101-
globals: module.externals.reduce(
102-
(acc, external) => ({
103-
...acc,
104-
[modules[external].name]: modules[external].globalName,
105-
}),
106-
{}
107-
),
103+
globals: {
104+
'react-native': 'ReactNative',
105+
react: 'React',
106+
...module.externals.reduce(
107+
(acc, external) => ({
108+
...acc,
109+
[modules[external].name]: modules[external].globalName,
110+
}),
111+
{}
112+
),
113+
},
108114
name: module.globalName,
109115
},
110-
external: module.externals.map((external) => modules[external].name),
116+
external: ['react-native', 'react', ...module.externals.map((external) => modules[external].name)],
111117
plugins: [
112118
resolve({
113119
browser: true,
120+
preferBuiltins: false,
121+
extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
122+
moduleDirectories: ['node_modules'],
123+
}),
124+
commonjs({
125+
ignore: isReactNative ? ['react-native'] : [],
126+
requireReturnsDefault: 'auto',
127+
transformMixedEsModules: true,
128+
exclude: isReactNative ? ['node_modules/react-native/**'] : [],
114129
}),
115-
commonjs(),
116130
typescript({
117131
cacheDir: '../../.cache/rollup',
118132
inlineSources: false,
119133
outputToFilesystem: true,
120134
sourceMap: false,
121135
tsconfig: './tsconfig.esm.json',
136+
exclude: ['node_modules/**'],
122137
}),
123138
terser(),
124139
],
125140
};
141+
142+
if (isReactNative) {
143+
baseConfig.onwarn = (warning, warn) => {
144+
// Suppress certain warnings for React Native
145+
if (warning.code === 'CIRCULAR_DEPENDENCY') {
146+
return;
147+
}
148+
149+
if (warning.code === 'THIS_IS_UNDEFINED') {
150+
return;
151+
}
152+
153+
warn(warning);
154+
};
155+
}
156+
157+
return baseConfig;
126158
};

tsconfig.base.json

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"esModuleInterop": true,
88
"experimentalDecorators": true,
99
"forceConsistentCasingInFileNames": true,
10-
"importsNotUsedAsValues": "error",
1110
"incremental": true,
1211
"inlineSources": true,
1312
"isolatedModules": true,

0 commit comments

Comments
 (0)