@dcl/hooks 1.2.2-20260218215717.commit-9afb22b → 1.2.2-20260330212234.commit-f13404f
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.
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { AdvancedNavigatorUAData } from "./useAdvancedUserAgentData.type";
|
|
2
|
+
/** @internal Reset module-level cache — only for testing. */
|
|
3
|
+
export declare function resetUserAgentCache(): void;
|
|
2
4
|
/**
|
|
3
5
|
* extract or infer the [UserAgentData](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData)
|
|
4
6
|
* that is an object which can be used to access the User-Agent Client Hints API.
|
|
@@ -3,14 +3,31 @@ import { UAParser } from "ua-parser-js";
|
|
|
3
3
|
import { isAppleSilicon } from "ua-parser-js/device-detection";
|
|
4
4
|
import { useAsyncEffect } from "../useAsyncEffect";
|
|
5
5
|
const DEFAULT_VALUE = "Unknown";
|
|
6
|
+
// Module-level cache: the user agent never changes during a session, so once
|
|
7
|
+
// resolved the result is reused across component remounts (React StrictMode,
|
|
8
|
+
// Suspense boundaries, lazy chunks, etc.). Without this cache every remount
|
|
9
|
+
// re-runs the async Client Hints call, resetting state to undefined in between
|
|
10
|
+
// and causing a visible flash in any UI that depends on the detected OS.
|
|
11
|
+
let _cachedData;
|
|
12
|
+
let _cacheResolved = false;
|
|
13
|
+
/** @internal Reset module-level cache — only for testing. */
|
|
14
|
+
export function resetUserAgentCache() {
|
|
15
|
+
_cachedData = undefined;
|
|
16
|
+
_cacheResolved = false;
|
|
17
|
+
}
|
|
6
18
|
/**
|
|
7
19
|
* extract or infer the [UserAgentData](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData)
|
|
8
20
|
* that is an object which can be used to access the User-Agent Client Hints API.
|
|
9
21
|
*/
|
|
10
22
|
export function useAdvancedUserAgentData() {
|
|
11
|
-
const [isLoading, setLoading] = useState(
|
|
12
|
-
const [data, setData] = useState();
|
|
23
|
+
const [isLoading, setLoading] = useState(!_cacheResolved);
|
|
24
|
+
const [data, setData] = useState(_cachedData);
|
|
13
25
|
useAsyncEffect(async () => {
|
|
26
|
+
// useState initializers already picked up the cached values,
|
|
27
|
+
// so no setter calls needed — just skip the async work.
|
|
28
|
+
if (_cacheResolved) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
14
31
|
setLoading(true);
|
|
15
32
|
const ua = new UAParser(navigator.userAgent);
|
|
16
33
|
const uaData = ua.getResult();
|
|
@@ -41,7 +58,7 @@ export function useAdvancedUserAgentData() {
|
|
|
41
58
|
else {
|
|
42
59
|
architecture = cpuData.architecture;
|
|
43
60
|
}
|
|
44
|
-
|
|
61
|
+
const result = {
|
|
45
62
|
browser,
|
|
46
63
|
engine,
|
|
47
64
|
os,
|
|
@@ -50,9 +67,12 @@ export function useAdvancedUserAgentData() {
|
|
|
50
67
|
},
|
|
51
68
|
mobile: ua.getDevice().is("mobile"),
|
|
52
69
|
tablet: ua.getDevice().is("tablet"),
|
|
53
|
-
}
|
|
70
|
+
};
|
|
71
|
+
_cachedData = result;
|
|
72
|
+
_cacheResolved = true;
|
|
73
|
+
setData(result);
|
|
54
74
|
setLoading(false);
|
|
55
75
|
}, []);
|
|
56
|
-
return [isLoading, data];
|
|
76
|
+
return [isLoading, _cachedData ?? data];
|
|
57
77
|
}
|
|
58
78
|
//# sourceMappingURL=useAdvancedUserAgentData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAdvancedUserAgentData.js","sourceRoot":"","sources":["../../../src/hooks/useAdvancedUserAgentData/useAdvancedUserAgentData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,MAAM,aAAa,GAAG,SAAS,CAAA;AAE/B;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IAItC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"useAdvancedUserAgentData.js","sourceRoot":"","sources":["../../../src/hooks/useAdvancedUserAgentData/useAdvancedUserAgentData.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl/hooks",
|
|
3
|
-
"version": "1.2.2-
|
|
3
|
+
"version": "1.2.2-20260330212234.commit-f13404f",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "esm/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"<rootDir>/test/setup.ts"
|
|
81
81
|
]
|
|
82
82
|
},
|
|
83
|
-
"commit": "
|
|
83
|
+
"commit": "f13404fa4a4a9988fcc805b9fe95ee583025eec5"
|
|
84
84
|
}
|