@goliapkg/sentori-react-native 0.8.4 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/sentori/SentoriMobileVitals.kt +100 -0
- package/android/src/main/java/com/sentori/SentoriModule.kt +18 -0
- package/ios/SentoriMobileVitals.swift +104 -0
- package/ios/SentoriModule.swift +17 -0
- package/lib/feedback-widget.d.ts.map +1 -1
- package/lib/feedback-widget.js +8 -1
- package/lib/feedback-widget.js.map +1 -1
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +21 -1
- package/lib/init.js.map +1 -1
- package/lib/launch-crash-guard.d.ts.map +1 -1
- package/lib/launch-crash-guard.js +8 -0
- package/lib/launch-crash-guard.js.map +1 -1
- package/lib/mobile-vitals.d.ts +35 -0
- package/lib/mobile-vitals.d.ts.map +1 -0
- package/lib/mobile-vitals.js +89 -0
- package/lib/mobile-vitals.js.map +1 -0
- package/lib/native-loader.d.ts +6 -0
- package/lib/native-loader.d.ts.map +1 -0
- package/lib/native-loader.js +31 -0
- package/lib/native-loader.js.map +1 -0
- package/lib/native.d.ts +11 -0
- package/lib/native.d.ts.map +1 -1
- package/lib/native.js +37 -0
- package/lib/native.js.map +1 -1
- package/lib/navigation.d.ts.map +1 -1
- package/lib/navigation.js +14 -2
- package/lib/navigation.js.map +1 -1
- package/lib/netinfo.d.ts.map +1 -1
- package/lib/netinfo.js +6 -12
- package/lib/netinfo.js.map +1 -1
- package/lib/transport.d.ts.map +1 -1
- package/lib/transport.js +6 -0
- package/lib/transport.js.map +1 -1
- package/package.json +1 -9
- package/src/feedback-widget.tsx +8 -1
- package/src/index.ts +12 -0
- package/src/init.ts +21 -1
- package/src/launch-crash-guard.ts +9 -0
- package/src/mobile-vitals.ts +114 -0
- package/src/native-loader.ts +33 -0
- package/src/native.ts +60 -0
- package/src/navigation.ts +16 -2
- package/src/netinfo.ts +7 -14
- package/src/transport.ts +6 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// v0.9.4 #1 — Mobile Vitals.
|
|
2
|
+
//
|
|
3
|
+
// Three measurements, three call paths, one server schema:
|
|
4
|
+
//
|
|
5
|
+
// • Cold start: native side measures at app launch (iOS
|
|
6
|
+
// mach_absolute_time / Android Process.getStartElapsedRealtime)
|
|
7
|
+
// and exposes via the bundled native module — read once on JS
|
|
8
|
+
// side at init() and ride along on the first event.
|
|
9
|
+
// • TTID (Time-To-Initial-Display): automatic via
|
|
10
|
+
// useTraceNavigation extension — span from navigation.dispatch
|
|
11
|
+
// to first frame after route mount.
|
|
12
|
+
// • TTFD (Time-To-Full-Display): manual. Host calls
|
|
13
|
+
// sentori.markTimeToFullDisplay('Home').end() when the screen's
|
|
14
|
+
// data has loaded.
|
|
15
|
+
// • Slow / frozen frame counts: native side hooks CADisplayLink /
|
|
16
|
+
// Choreographer.FrameCallback; counters flush per navigation
|
|
17
|
+
// span.
|
|
18
|
+
//
|
|
19
|
+
// JS-side first: TTFD API + bundle-level vital captures. Native
|
|
20
|
+
// pieces ship as a separate native module method `getColdStartMs`
|
|
21
|
+
// + `getFrameCounts()` — graceful no-op if not linked.
|
|
22
|
+
import { startSpan } from '@goliapkg/sentori-core';
|
|
23
|
+
import { getNativeColdStartMs } from './native';
|
|
24
|
+
let _coldStartMs = null;
|
|
25
|
+
let _coldStartCaptured = false;
|
|
26
|
+
/** Read the native-side cold start measurement once. Cached. Returns
|
|
27
|
+
* null when the native module isn't linked (Expo Go / tests). */
|
|
28
|
+
export function getColdStartMs() {
|
|
29
|
+
if (_coldStartCaptured)
|
|
30
|
+
return _coldStartMs;
|
|
31
|
+
_coldStartCaptured = true;
|
|
32
|
+
try {
|
|
33
|
+
_coldStartMs = getNativeColdStartMs();
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
_coldStartMs = null;
|
|
37
|
+
}
|
|
38
|
+
return _coldStartMs;
|
|
39
|
+
}
|
|
40
|
+
let _activeTtfd = null;
|
|
41
|
+
export function markTimeToFullDisplay(route) {
|
|
42
|
+
if (_activeTtfd && _activeTtfd.route !== route) {
|
|
43
|
+
_activeTtfd.finish('cancelled');
|
|
44
|
+
}
|
|
45
|
+
const span = startSpan('react.navigation.ttfd', {
|
|
46
|
+
name: route,
|
|
47
|
+
tags: { 'nav.route': route, 'vital.kind': 'ttfd' },
|
|
48
|
+
});
|
|
49
|
+
let finished = false;
|
|
50
|
+
const finish = (status) => {
|
|
51
|
+
if (finished)
|
|
52
|
+
return;
|
|
53
|
+
finished = true;
|
|
54
|
+
span.finish({ status });
|
|
55
|
+
if (_activeTtfd && _activeTtfd.route === route)
|
|
56
|
+
_activeTtfd = null;
|
|
57
|
+
};
|
|
58
|
+
_activeTtfd = { finish, route };
|
|
59
|
+
return {
|
|
60
|
+
cancel: () => finish('cancelled'),
|
|
61
|
+
end: (opts) => finish(opts?.status ?? 'ok'),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** v0.9.4 #1 — read the per-screen slow/frozen frame counts since
|
|
65
|
+
* the most recent navigation transition. Native module reads
|
|
66
|
+
* CADisplayLink / Choreographer counters; returns null when not
|
|
67
|
+
* linked. */
|
|
68
|
+
export function getFrameCounters() {
|
|
69
|
+
try {
|
|
70
|
+
// native binding lazily required in native.ts
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
72
|
+
const nativeMod = require('./native');
|
|
73
|
+
if (typeof nativeMod.getNativeFrameCounters !== 'function')
|
|
74
|
+
return null;
|
|
75
|
+
return nativeMod.getNativeFrameCounters();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Test-only. */
|
|
82
|
+
export function __resetMobileVitalsForTests() {
|
|
83
|
+
if (_activeTtfd)
|
|
84
|
+
_activeTtfd.finish('cancelled');
|
|
85
|
+
_activeTtfd = null;
|
|
86
|
+
_coldStartCaptured = false;
|
|
87
|
+
_coldStartMs = null;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=mobile-vitals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-vitals.js","sourceRoot":"","sources":["../src/mobile-vitals.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,2DAA2D;AAC3D,EAAE;AACF,0DAA0D;AAC1D,oEAAoE;AACpE,kEAAkE;AAClE,wDAAwD;AACxD,oDAAoD;AACpD,mEAAmE;AACnE,wCAAwC;AACxC,sDAAsD;AACtD,oEAAoE;AACpE,uBAAuB;AACvB,oEAAoE;AACpE,iEAAiE;AACjE,YAAY;AACZ,EAAE;AACF,gEAAgE;AAChE,kEAAkE;AAClE,uDAAuD;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B;kEACkE;AAClE,MAAM,UAAU,cAAc;IAC5B,IAAI,kBAAkB;QAAE,OAAO,YAAY,CAAC;IAC5C,kBAAkB,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,YAAY,GAAG,oBAAoB,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAqBD,IAAI,WAAW,GAGX,IAAI,CAAC;AAET,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC/C,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,uBAAuB,EAAE;QAC9C,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE;KACnD,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,MAAM,GAAG,CAAC,MAAoC,EAAQ,EAAE;QAC5D,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACxB,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK;YAAE,WAAW,GAAG,IAAI,CAAC;IACrE,CAAC,CAAC;IACF,WAAW,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChC,OAAO;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QACjC,GAAG,EAAE,CAAC,IAAgD,EAAE,EAAE,CACxD,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;;cAGc;AACd,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,8CAA8C;QAC9C,iEAAiE;QACjE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAEnC,CAAC;QACF,IAAI,OAAO,SAAS,CAAC,sBAAsB,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QACxE,OAAO,SAAS,CAAC,sBAAsB,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,2BAA2B;IACzC,IAAI,WAAW;QAAE,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjD,WAAW,GAAG,IAAI,CAAC;IACnB,kBAAkB,GAAG,KAAK,CAAC;IAC3B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isNativeModuleLinked(name: string): boolean;
|
|
2
|
+
/** Some native modules are registered under multiple alternative names
|
|
3
|
+
* across RN versions / Expo packaging. Returns `true` iff *any* name
|
|
4
|
+
* is linked. */
|
|
5
|
+
export declare function isAnyNativeModuleLinked(names: string[]): boolean;
|
|
6
|
+
//# sourceMappingURL=native-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-loader.d.ts","sourceRoot":"","sources":["../src/native-loader.ts"],"names":[],"mappings":"AAeA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU1D;AAED;;iBAEiB;AACjB,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEhE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// v0.8.5 — shared guard for "JS package is in node_modules but native
|
|
2
|
+
// module isn't linked".
|
|
3
|
+
//
|
|
4
|
+
// The pattern that bit us in 0.8.0–0.8.3 (NetInfo, AsyncStorage,
|
|
5
|
+
// expo-sensors, ...): host had the JS package via npm hoisting (or
|
|
6
|
+
// via our old `optionalDependencies` mistake) but never ran
|
|
7
|
+
// `pod install` / `prebuild` / `react-native link`. We `require(...)`
|
|
8
|
+
// successfully, call a method, then the lib's internal native bridge
|
|
9
|
+
// access throws — and most of those errors arrive on an emitter or
|
|
10
|
+
// microtask where our try/catch can't reach.
|
|
11
|
+
//
|
|
12
|
+
// Fix: before requireing such a package, check that the registered
|
|
13
|
+
// NativeModule actually exists. `null` → skip the whole feature; cost
|
|
14
|
+
// is one nullable map read.
|
|
15
|
+
export function isNativeModuleLinked(name) {
|
|
16
|
+
try {
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
18
|
+
const RN = require('react-native');
|
|
19
|
+
return RN.NativeModules?.[name] != null;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Some native modules are registered under multiple alternative names
|
|
26
|
+
* across RN versions / Expo packaging. Returns `true` iff *any* name
|
|
27
|
+
* is linked. */
|
|
28
|
+
export function isAnyNativeModuleLinked(names) {
|
|
29
|
+
return names.some(isNativeModuleLinked);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=native-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-loader.js","sourceRoot":"","sources":["../src/native-loader.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wBAAwB;AACxB,EAAE;AACF,iEAAiE;AACjE,mEAAmE;AACnE,4DAA4D;AAC5D,sEAAsE;AACtE,qEAAqE;AACrE,mEAAmE;AACnE,6CAA6C;AAC7C,EAAE;AACF,mEAAmE;AACnE,sEAAsE;AACtE,4BAA4B;AAE5B,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAEhC,CAAC;QACF,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;iBAEiB;AACjB,MAAM,UAAU,uBAAuB,CAAC,KAAe;IACrD,OAAO,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC"}
|
package/lib/native.d.ts
CHANGED
|
@@ -37,6 +37,17 @@ export declare function startAnrWatchdog(options?: {
|
|
|
37
37
|
timeoutMs?: number;
|
|
38
38
|
}): void;
|
|
39
39
|
export declare function stopAnrWatchdog(): void;
|
|
40
|
+
/** v0.9.4 #1 — finalize cold-start measurement. Idempotent. */
|
|
41
|
+
export declare function markNativeJsBridgeReady(): void;
|
|
42
|
+
/** v0.9.4 #1 — read cold start ms once. null when native unavailable. */
|
|
43
|
+
export declare function getNativeColdStartMs(): null | number;
|
|
44
|
+
/** v0.9.4 #1 — read slow/frozen frame counters since last reset. */
|
|
45
|
+
export declare function getNativeFrameCounters(): null | {
|
|
46
|
+
frozen: number;
|
|
47
|
+
slow: number;
|
|
48
|
+
};
|
|
49
|
+
/** v0.9.4 #1 — reset frame counters on navigation transition. */
|
|
50
|
+
export declare function resetNativeFrameCounters(): void;
|
|
40
51
|
/**
|
|
41
52
|
* v0.7.3 — drives the native screenshot path. JS side passes the
|
|
42
53
|
* current list of mask `nativeID`s (read from the consumer's
|
package/lib/native.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6EH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,IAAI,CAMP;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IACzC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,IAAI,CAMP;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAED,+DAA+D;AAC/D,wBAAgB,uBAAuB,IAAI,IAAI,CAM9C;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,IAAI,IAAI,GAAG,MAAM,CAOpD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMhF;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAQvD"}
|
package/lib/native.js
CHANGED
|
@@ -80,6 +80,43 @@ export function stopAnrWatchdog() {
|
|
|
80
80
|
// ignore
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
/** v0.9.4 #1 — finalize cold-start measurement. Idempotent. */
|
|
84
|
+
export function markNativeJsBridgeReady() {
|
|
85
|
+
try {
|
|
86
|
+
native()?.markJsBridgeReady?.();
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// ignore
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** v0.9.4 #1 — read cold start ms once. null when native unavailable. */
|
|
93
|
+
export function getNativeColdStartMs() {
|
|
94
|
+
try {
|
|
95
|
+
const v = native()?.getColdStartMs?.();
|
|
96
|
+
return typeof v === 'number' && Number.isFinite(v) ? v : null;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** v0.9.4 #1 — read slow/frozen frame counters since last reset. */
|
|
103
|
+
export function getNativeFrameCounters() {
|
|
104
|
+
try {
|
|
105
|
+
return native()?.getFrameCounters?.() ?? null;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** v0.9.4 #1 — reset frame counters on navigation transition. */
|
|
112
|
+
export function resetNativeFrameCounters() {
|
|
113
|
+
try {
|
|
114
|
+
native()?.resetFrameCounters?.();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// ignore
|
|
118
|
+
}
|
|
119
|
+
}
|
|
83
120
|
/**
|
|
84
121
|
* v0.7.3 — drives the native screenshot path. JS side passes the
|
|
85
122
|
* current list of mask `nativeID`s (read from the consumer's
|
package/lib/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
package/lib/navigation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAgCA;;kDAEkD;AAClD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAClE,eAAe,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CA2FzE"}
|
package/lib/navigation.js
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
// `startSpan(op, { parent: activeSpan() })`.
|
|
22
22
|
import { useEffect, useRef } from 'react';
|
|
23
23
|
import { setActiveSpan, startSpan } from '@goliapkg/sentori-core';
|
|
24
|
+
import { getNativeFrameCounters, resetNativeFrameCounters, } from './native';
|
|
24
25
|
import { captureStep } from './trail';
|
|
25
26
|
/**
|
|
26
27
|
* Subscribe to react-navigation state changes and emit a
|
|
@@ -85,11 +86,22 @@ export function useTraceNavigation(navigationRef) {
|
|
|
85
86
|
if (!span)
|
|
86
87
|
return null;
|
|
87
88
|
const dwellMs = enteredAt !== null ? Math.max(0, Date.now() - enteredAt) : null;
|
|
89
|
+
// v0.9.4 #1 — drain native frame counters at screen-leave.
|
|
90
|
+
// Empty/null when native module not linked; tags omitted.
|
|
91
|
+
const fc = getNativeFrameCounters();
|
|
92
|
+
const finishTags = {};
|
|
93
|
+
if (dwellMs !== null)
|
|
94
|
+
finishTags['nav.dwell_ms'] = String(dwellMs);
|
|
95
|
+
if (fc) {
|
|
96
|
+
finishTags['vital.slow_frames'] = String(fc.slow);
|
|
97
|
+
finishTags['vital.frozen_frames'] = String(fc.frozen);
|
|
98
|
+
}
|
|
88
99
|
span.finish({
|
|
89
100
|
status: 'ok',
|
|
90
|
-
|
|
91
|
-
tags: dwellMs !== null ? { 'nav.dwell_ms': String(dwellMs) } : undefined,
|
|
101
|
+
tags: Object.keys(finishTags).length > 0 ? finishTags : undefined,
|
|
92
102
|
});
|
|
103
|
+
// Reset counters for the next screen.
|
|
104
|
+
resetNativeFrameCounters();
|
|
93
105
|
return dwellMs;
|
|
94
106
|
};
|
|
95
107
|
// Open a span for the initial screen so its requests are grouped
|
package/lib/navigation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oEAAoE;AACpE,0DAA0D;AAC1D,qEAAqE;AACrE,iEAAiE;AACjE,EAAE;AACF,yDAAyD;AACzD,8DAA8D;AAC9D,mEAAmE;AACnE,4CAA4C;AAC5C,EAAE;AACF,oEAAoE;AACpE,gEAAgE;AAChE,mEAAmE;AACnE,kEAAkE;AAClE,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,gEAAgE;AAChE,6CAA6C;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAmB,MAAM,wBAAwB,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAUtC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAgC;IACjE,oCAAoC;IACpC,MAAM,YAAY,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACjD,oEAAoE;IACpE,kEAAkE;IAClE,MAAM,qBAAqB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC1D,kEAAkE;IAClE,0CAA0C;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,aAAa,CAAC,WAAW,KAAK,UAAU;YAAE,OAAO;QAC5D,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU;YAAE,OAAO;QAEhE,iEAAiE;QACjE,4DAA4D;QAC5D,mDAAmD;QACnD,MAAM,cAAc,GAAG,CACrB,IAAmB,EACnB,EAAU,EACV,WAA0B,EAC1B,EAAE;YACF,MAAM,IAAI,GAAG,SAAS,CAAC,kBAAkB,EAAE;gBACzC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;gBACnC,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC/C,CAAC,CAAC;YACH,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC;YAC1B,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3C,0DAA0D;YAC1D,yDAAyD;YACzD,6DAA6D;YAC7D,kEAAkE;YAClE,wDAAwD;YACxD,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE;gBAC1B,UAAU,EAAE;oBACV,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;oBACrE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;oBACtC,IAAI,EAAE,YAAY;iBACnB;aACF,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,GAAkB,EAAE;YAClD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;YACjC,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC;YAChD,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChF,
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
|
package/lib/netinfo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netinfo.d.ts","sourceRoot":"","sources":["../src/netinfo.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"netinfo.d.ts","sourceRoot":"","sources":["../src/netinfo.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD,KAAK,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AA8BzC;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAqB5C;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED,iBAAiB;AACjB,wBAAgB,0BAA0B,IAAI,IAAI,CAKjD"}
|
package/lib/netinfo.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// `wifi`, `2g/3g/4g/slow-2g`, `offline`, `unknown`. 5G collapses
|
|
14
14
|
// into `4g` because the schema doesn't have a 5g slot yet; the
|
|
15
15
|
// information loss is acceptable for an analytics dimension.
|
|
16
|
+
import { isNativeModuleLinked } from './native-loader';
|
|
16
17
|
let _cached;
|
|
17
18
|
let _started = false;
|
|
18
19
|
let _unsubscribe = null;
|
|
@@ -43,18 +44,11 @@ export function startNetworkTypeWatch() {
|
|
|
43
44
|
return;
|
|
44
45
|
_started = true;
|
|
45
46
|
try {
|
|
46
|
-
// v0.8.4 hotfix
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
// emitter — past where this try/catch can reach. Gate on the
|
|
52
|
-
// NativeModules entry first so we no-op cleanly in that case.
|
|
53
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
54
|
-
const RN = require('react-native');
|
|
55
|
-
const native = RN.NativeModules?.RNCNetInfo;
|
|
56
|
-
if (native == null) {
|
|
57
|
-
// JS package present but native module isn't linked. Skip.
|
|
47
|
+
// v0.8.4 hotfix → v0.8.5 generalised via isNativeModuleLinked.
|
|
48
|
+
// host may have the JS package via hoisted node_modules but
|
|
49
|
+
// never ran pod install / prebuild → calling addEventListener
|
|
50
|
+
// crashes deep inside the lib's emitter past try/catch reach.
|
|
51
|
+
if (!isNativeModuleLinked('RNCNetInfo')) {
|
|
58
52
|
return;
|
|
59
53
|
}
|
|
60
54
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
package/lib/netinfo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netinfo.js","sourceRoot":"","sources":["../src/netinfo.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,oEAAoE;AACpE,iEAAiE;AACjE,iEAAiE;AACjE,0DAA0D;AAC1D,kEAAkE;AAClE,gEAAgE;AAChE,wBAAwB;AACxB,EAAE;AACF,+DAA+D;AAC/D,gEAAgE;AAChE,iEAAiE;AACjE,+DAA+D;AAC/D,6DAA6D;
|
|
1
|
+
{"version":3,"file":"netinfo.js","sourceRoot":"","sources":["../src/netinfo.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,oEAAoE;AACpE,iEAAiE;AACjE,iEAAiE;AACjE,0DAA0D;AAC1D,kEAAkE;AAClE,gEAAgE;AAChE,wBAAwB;AACxB,EAAE;AACF,+DAA+D;AAC/D,gEAAgE;AAChE,iEAAiE;AACjE,+DAA+D;AAC/D,6DAA6D;AAI7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAevD,IAAI,OAAoB,CAAC;AACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,SAAS,QAAQ,CAAC,KAAmB;IACnC,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC;QAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;QAC7D,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,QAAQ;QAAE,OAAO;IACrB,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC;QACH,+DAA+D;QAC/D,4DAA4D;QAC5D,8DAA8D;QAC9D,8DAA8D;QAC9D,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QACD,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,iCAAiC,CAAkB,CAAC;QACxE,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC;QAClE,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,OAAO;QACtC,YAAY,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,0BAA0B;IACxC,YAAY,EAAE,EAAE,CAAC;IACjB,YAAY,GAAG,IAAI,CAAC;IACpB,QAAQ,GAAG,KAAK,CAAC;IACjB,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC"}
|
package/lib/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAqBrC,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,IAUtC,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,IAOjC,CAAC;AAEF,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,IAAI,CAe/C,CAAC;AAqBF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAkB1C,CAAC;AAiGF,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAatD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,IAOlC,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,SAAS,KAAK,EAAY,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,MAAM,OAAO,KACZ,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,SAAS,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,KACD,OAAO,CAAC,IAAI,CAed,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,QAAQ;IACN,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,KACA,OAAO,CAAC,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAiBvD,CAAC;AAMF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,MAAM,OAAO,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,EAC9C,MAAM;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAM;IAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAAA;CAAO,KAC/C,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,GAAG,IAAI,CAmDjD,CAAC"}
|
package/lib/transport.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { drainSpans } from '@goliapkg/sentori-core';
|
|
2
2
|
import { getConfig } from './config';
|
|
3
|
+
import { isAnyNativeModuleLinked } from './native-loader';
|
|
3
4
|
const FLUSH_INTERVAL_MS = 5_000;
|
|
4
5
|
const BATCH_SIZE = 10;
|
|
5
6
|
const MAX_RETRY = 3;
|
|
@@ -139,6 +140,11 @@ const sendOnce = async (events, ingestUrl, token) => {
|
|
|
139
140
|
};
|
|
140
141
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
141
142
|
const getAsyncStorage = async () => {
|
|
143
|
+
// v0.8.5 — host may have the JS package without pod install /
|
|
144
|
+
// prebuild → getItem crashes from a microtask outside our reach.
|
|
145
|
+
if (!isAnyNativeModuleLinked(['RNCAsyncStorage', 'AsyncStorageModule'])) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
142
148
|
try {
|
|
143
149
|
const mod = (await import('@react-native-async-storage/async-storage'));
|
|
144
150
|
return mod.default;
|
package/lib/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,sEAAsE;AACtE,sEAAsE;AACtE,6DAA6D;AAC7D,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,IAAI,MAAM,GAAY,EAAE,CAAC;AACzB,IAAI,WAAW,GAAyC,IAAI,CAAC;AAC7D,IAAI,UAAU,GAA0C,IAAI,CAAC;AAC7D,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;IAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,KAAK,KAAK,EAAE,CAAC;IACf,CAAC;SAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxB,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,WAAW,GAAG,IAAI,CAAC;YACnB,KAAK,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAS,EAAE;IACvC,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,UAAU,EAAE,CAAC;QACpB,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EACzB,KAAgB,EAChB,SAAiB,EACjB,KAAa,EACE,EAAE;IACjB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,iBAAiB,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,aAAa,EAAE,gBAAgB,WAAW,EAAE;SAC7C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,oEAAoE;IACpE,qEAAqE;IACrE,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EACzB,MAAe,EACf,SAAiB,EACjB,KAAa,EACE,EAAE;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,SAAS;gBAAE,MAAM,CAAC,CAAC;YAClC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EACpB,MAAe,EACf,SAAiB,EACjB,KAAa,EACE,EAAE;IACjB,MAAM,GAAG,GACP,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,kBAAkB,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,aAAa,EAAE,gBAAgB,WAAW,EAAE;SAC7C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACxB,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA8B,CAAC;YAC3D,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;gBAAE,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QACD,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,mDAAmD;AACrD,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC1C,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAQxC,MAAM,eAAe,GAAG,KAAK,IAAsC,EAAE;IACnE,8DAA8D;IAC9D,iEAAiE;IACjE,IAAI,CAAC,uBAAuB,CAAC,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CACvB,2CAA2C,CAC5C,CAAkC,CAAC;QACpC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAe,EAAiB,EAAE;IACvD,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;QAC1D,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;IACzD,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAS,EAAE;IACxC,MAAM,GAAG,EAAE,CAAC;IACZ,IAAI,WAAW;QAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC3C,WAAW,GAAG,IAAI,CAAC;IACnB,IAAI,UAAU;QAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,UAAU,GAAG,IAAI,CAAC;IAClB,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAqB,EAAE,CAAC,MAAM,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,SAAiB,EACjB,KAAa,EACb,IAAa,EACE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,SAAS,cAAc,EAAE;YACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,gBAAgB,WAAW,EAAE;aAC7C;YACD,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,SAAiB,EACjB,KAAa,EACb,OAKE,EACa,EAAE;IACjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,SAAS,mBAAmB,EAAE;YAC3C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;YACjC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,gBAAgB,WAAW,EAAE;aAC7C;YACD,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,SAAiB,EACjB,KAAa,EACb,MAMC,EACuD,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,kBAAkB,EAAE;YACvD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,gBAAgB,WAAW,EAAE;aAC7C;YACD,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2C,CAAC;QACxE,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,qEAAqE;AACrE,iDAAiD;AACjD,qEAAqE;AAErE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAAe,EACf,IAA8C,EAC9C,IAA2C,EAC3C,OAA8C,EAAE,EACE,EAAE;IACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,cAAc,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAEnH,+DAA+D;IAC/D,+DAA+D;IAC/D,+DAA+D;IAC/D,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CACT,MAAM,EACN;QACE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,SAAS;QACpB,GAAG,EAAE,QAAQ,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,MAAM,EAAE;KACjC,CACrB,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;gBACvC,aAAa,EAAE,gBAAgB,WAAW,EAAE;aAC7C;YACD,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,gEAAgE;QAChE,iEAAiE;QACjE,6DAA6D;QAC7D,8DAA8D;QAC9D,wDAAwD;QACxD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAK7C,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAChC,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,GAAG,EAAE,CAAC,CAAC,KAAK;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;SAC5B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY,EAAE,SAAiB;IAClD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;IAC7C,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-react-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Sentori SDK for React Native \u2014 JS-layer error capture, native crash handlers (iOS / Android), batched transport, fetch + react-navigation tracing.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://sentori.golia.jp",
|
|
@@ -63,14 +63,6 @@
|
|
|
63
63
|
"optional": true
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
|
-
"optionalDependencies": {
|
|
67
|
-
"@react-native-async-storage/async-storage": ">=1.23",
|
|
68
|
-
"@react-native-community/netinfo": ">=11.0",
|
|
69
|
-
"expo-modules-core": ">=2.0",
|
|
70
|
-
"expo-sensors": ">=14.0",
|
|
71
|
-
"expo-updates": ">=0.27",
|
|
72
|
-
"react-native-code-push": ">=8.0"
|
|
73
|
-
},
|
|
74
66
|
"devDependencies": {
|
|
75
67
|
"@types/bun": "latest",
|
|
76
68
|
"@types/react": "^19",
|
package/src/feedback-widget.tsx
CHANGED
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
} from 'react-native';
|
|
29
29
|
|
|
30
30
|
import { sendUserFeedback } from './capture';
|
|
31
|
+
import { isAnyNativeModuleLinked } from './native-loader';
|
|
31
32
|
|
|
32
33
|
type Trigger = 'fab' | 'manual' | 'shake';
|
|
33
34
|
|
|
@@ -86,9 +87,15 @@ export const FeedbackButton = forwardRef<FeedbackButtonHandle, FeedbackButtonPro
|
|
|
86
87
|
);
|
|
87
88
|
|
|
88
89
|
// Shake detection — opt-in. We load expo-sensors lazily so apps
|
|
89
|
-
// that don't install it never pay the bundle cost.
|
|
90
|
+
// that don't install it never pay the bundle cost. Same native
|
|
91
|
+
// module guard as netinfo: if the JS package is in node_modules
|
|
92
|
+
// but native bridge isn't linked we'd otherwise crash inside the
|
|
93
|
+
// sensor emitter.
|
|
90
94
|
useEffect(() => {
|
|
91
95
|
if (trigger !== 'shake') return;
|
|
96
|
+
if (!isAnyNativeModuleLinked(['ExponentAccelerometer', 'EXAccelerometer', 'ExpoAccelerometer'])) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
92
99
|
let sub: { remove: () => void } | null = null;
|
|
93
100
|
try {
|
|
94
101
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
package/src/index.ts
CHANGED
|
@@ -18,6 +18,11 @@ import {
|
|
|
18
18
|
} from './feature-flags';
|
|
19
19
|
import { clearMaskQuery, registerMaskQuery } from './mask';
|
|
20
20
|
import { measureFn } from './measure';
|
|
21
|
+
import {
|
|
22
|
+
getColdStartMs,
|
|
23
|
+
markTimeToFullDisplay,
|
|
24
|
+
type TimeToFullDisplayHandle,
|
|
25
|
+
} from './mobile-vitals';
|
|
21
26
|
import { bindState, recordState, unbindState } from './state-snapshots';
|
|
22
27
|
import { startMoment } from '@goliapkg/sentori-core';
|
|
23
28
|
import { flushMetrics, recordMetric } from './metrics';
|
|
@@ -44,6 +49,8 @@ export const sentori = {
|
|
|
44
49
|
bindState,
|
|
45
50
|
recordState,
|
|
46
51
|
unbindState,
|
|
52
|
+
markTimeToFullDisplay,
|
|
53
|
+
getColdStartMs,
|
|
47
54
|
setFeatureFlag,
|
|
48
55
|
clearFeatureFlag,
|
|
49
56
|
clearAllFeatureFlags,
|
|
@@ -81,6 +88,11 @@ export {
|
|
|
81
88
|
export { clearMaskQuery, registerMaskQuery } from './mask';
|
|
82
89
|
export { flushMetrics, recordMetric } from './metrics';
|
|
83
90
|
export { measureFn } from './measure';
|
|
91
|
+
export {
|
|
92
|
+
getColdStartMs,
|
|
93
|
+
markTimeToFullDisplay,
|
|
94
|
+
type TimeToFullDisplayHandle,
|
|
95
|
+
} from './mobile-vitals';
|
|
84
96
|
export { MomentHandle, type MomentProperties, startMoment } from '@goliapkg/sentori-core';
|
|
85
97
|
export {
|
|
86
98
|
bindState,
|
package/src/init.ts
CHANGED
|
@@ -9,7 +9,9 @@ import {
|
|
|
9
9
|
runLaunchCrashGuard,
|
|
10
10
|
} from './launch-crash-guard';
|
|
11
11
|
import { startMetricsTimer } from './metrics';
|
|
12
|
-
import { drainNativePending, setNativeConfig } from './native';
|
|
12
|
+
import { drainNativePending, markNativeJsBridgeReady, setNativeConfig } from './native';
|
|
13
|
+
import { getColdStartMs } from './mobile-vitals';
|
|
14
|
+
import { startSpan } from '@goliapkg/sentori-core';
|
|
13
15
|
import { startNetworkTypeWatch } from './netinfo';
|
|
14
16
|
import { startPreCrashSentinel, type PreCrashChannel } from './pre-crash-sentinel';
|
|
15
17
|
import { startSession } from './session-tracker';
|
|
@@ -142,6 +144,24 @@ export const init = (options: InitOptions): void => {
|
|
|
142
144
|
release: options.release,
|
|
143
145
|
environment: env,
|
|
144
146
|
});
|
|
147
|
+
// v0.9.4 #1 — finalize cold-start measurement. iOS uses the
|
|
148
|
+
// delta from `applicationDidFinishLaunching` to this call;
|
|
149
|
+
// Android uses Process.getStartElapsedRealtime() so the value is
|
|
150
|
+
// computed at this point and cached.
|
|
151
|
+
markNativeJsBridgeReady();
|
|
152
|
+
// Emit a one-off cold-start span. Server aggregates these per
|
|
153
|
+
// release for the Mobile Vitals dashboard. No-op when native
|
|
154
|
+
// module isn't linked.
|
|
155
|
+
const coldMs = getColdStartMs();
|
|
156
|
+
if (coldMs !== null && coldMs > 0 && coldMs < 60_000) {
|
|
157
|
+
const span = startSpan('sentori.cold_start', {
|
|
158
|
+
name: 'cold-start',
|
|
159
|
+
parent: null,
|
|
160
|
+
startNowMs: Date.now() - coldMs,
|
|
161
|
+
tags: { 'vital.kind': 'cold_start' },
|
|
162
|
+
});
|
|
163
|
+
span.finish({ status: 'ok' });
|
|
164
|
+
}
|
|
145
165
|
|
|
146
166
|
startTransport();
|
|
147
167
|
// v0.8.0-c — start watching network class. No-op if NetInfo isn't
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
// add a native marker for the small set of "crashed before bridge"
|
|
18
18
|
// cases.
|
|
19
19
|
|
|
20
|
+
import { isAnyNativeModuleLinked } from './native-loader';
|
|
21
|
+
|
|
20
22
|
const MARKER_KEY = '@sentori/launch_marker';
|
|
21
23
|
const COMPLETED_KEY = '@sentori/launch_completed';
|
|
22
24
|
const COUNT_KEY = '@sentori/launch_crash_count';
|
|
@@ -54,6 +56,13 @@ type AsyncStorageLike = {
|
|
|
54
56
|
};
|
|
55
57
|
|
|
56
58
|
function loadAsyncStorage(): AsyncStorageLike | null {
|
|
59
|
+
// v0.8.5 — same NativeModule guard as netinfo/transport. The
|
|
60
|
+
// require() can succeed without the native module linked, but
|
|
61
|
+
// getItem will crash from a microtask path our try/catch can't
|
|
62
|
+
// reach.
|
|
63
|
+
if (!isAnyNativeModuleLinked(['RNCAsyncStorage', 'AsyncStorageModule'])) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
57
66
|
try {
|
|
58
67
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
59
68
|
const mod = require('@react-native-async-storage/async-storage') as {
|