@terreno/rtk 0.26.0 → 0.27.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.
Files changed (77) hide show
  1. package/dist/authSlice.d.ts.map +1 -1
  2. package/dist/authSlice.js +2 -0
  3. package/dist/authSlice.js.map +1 -1
  4. package/dist/authSlice.test.js +4 -1
  5. package/dist/authSlice.test.js.map +1 -1
  6. package/dist/authSliceNative.test.js +3 -16
  7. package/dist/authSliceNative.test.js.map +1 -1
  8. package/dist/betterAuthClient.d.ts.map +1 -1
  9. package/dist/betterAuthClient.js +0 -1
  10. package/dist/betterAuthClient.js.map +1 -1
  11. package/dist/betterAuthSlice.test.js +1 -0
  12. package/dist/betterAuthSlice.test.js.map +1 -1
  13. package/dist/emptyApi.d.ts.map +1 -1
  14. package/dist/emptyApi.js +0 -2
  15. package/dist/emptyApi.js.map +1 -1
  16. package/dist/isolated/constants.isolated.d.ts +2 -0
  17. package/dist/isolated/constants.isolated.d.ts.map +1 -0
  18. package/dist/isolated/constants.isolated.js +81 -0
  19. package/dist/isolated/constants.isolated.js.map +1 -0
  20. package/dist/isolated/offlineMiddleware.isolated.js +0 -1
  21. package/dist/isolated/offlineMiddleware.isolated.js.map +1 -1
  22. package/dist/isolated/offlineMiddleware.native.isolated.js +0 -1
  23. package/dist/isolated/offlineMiddleware.native.isolated.js.map +1 -1
  24. package/dist/isolated/useUpgradeCheck.mobile.isolated.js +47 -0
  25. package/dist/isolated/useUpgradeCheck.mobile.isolated.js.map +1 -1
  26. package/dist/offlineGate.d.ts +1 -1
  27. package/dist/offlineGate.d.ts.map +1 -1
  28. package/dist/offlineGate.js +1 -3
  29. package/dist/offlineGate.js.map +1 -1
  30. package/dist/offlineMiddleware.d.ts.map +1 -1
  31. package/dist/offlineMiddleware.js +26 -0
  32. package/dist/offlineMiddleware.js.map +1 -1
  33. package/dist/offlineMiddleware.test.js +5 -1
  34. package/dist/offlineMiddleware.test.js.map +1 -1
  35. package/dist/realtime.test.js +1 -0
  36. package/dist/realtime.test.js.map +1 -1
  37. package/dist/sessionApi.test.d.ts +2 -0
  38. package/dist/sessionApi.test.d.ts.map +1 -0
  39. package/dist/sessionApi.test.js +84 -0
  40. package/dist/sessionApi.test.js.map +1 -0
  41. package/dist/sync.d.ts.map +1 -1
  42. package/dist/sync.js.map +1 -1
  43. package/dist/sync.test.js +1 -3
  44. package/dist/sync.test.js.map +1 -1
  45. package/dist/testPreload.test.js +6 -0
  46. package/dist/testPreload.test.js.map +1 -1
  47. package/dist/useFeatureFlags.d.ts.map +1 -1
  48. package/dist/useFeatureFlags.js.map +1 -1
  49. package/dist/useTerrenoFeatureFlags.d.ts.map +1 -1
  50. package/dist/useTerrenoFeatureFlags.js.map +1 -1
  51. package/dist/useTerrenoFeatureFlags.test.js +10 -0
  52. package/dist/useTerrenoFeatureFlags.test.js.map +1 -1
  53. package/dist/useUpgradeCheckNative.test.js +21 -0
  54. package/dist/useUpgradeCheckNative.test.js.map +1 -1
  55. package/package.json +2 -2
  56. package/src/authSlice.test.ts +5 -1
  57. package/src/authSlice.ts +2 -0
  58. package/src/authSliceNative.test.ts +4 -18
  59. package/src/betterAuthClient.ts +1 -2
  60. package/src/betterAuthSlice.test.ts +1 -0
  61. package/src/emptyApi.ts +5 -4
  62. package/src/isolated/constants.isolated.ts +118 -0
  63. package/src/isolated/offlineMiddleware.isolated.ts +1 -2
  64. package/src/isolated/offlineMiddleware.native.isolated.ts +1 -2
  65. package/src/isolated/useUpgradeCheck.mobile.isolated.ts +60 -0
  66. package/src/offlineGate.ts +1 -2
  67. package/src/offlineMiddleware.test.ts +6 -1
  68. package/src/offlineMiddleware.ts +27 -0
  69. package/src/realtime.test.ts +1 -0
  70. package/src/sessionApi.test.ts +115 -0
  71. package/src/sync.test.ts +1 -2
  72. package/src/sync.ts +2 -1
  73. package/src/testPreload.test.ts +7 -0
  74. package/src/useFeatureFlags.ts +1 -0
  75. package/src/useTerrenoFeatureFlags.test.ts +16 -0
  76. package/src/useTerrenoFeatureFlags.ts +2 -0
  77. package/src/useUpgradeCheckNative.test.ts +26 -0
@@ -7,6 +7,7 @@ interface FlagValues {
7
7
  [key: string]: boolean | string | null;
8
8
  }
9
9
 
10
+ // noExplicitAny: RTK Query API generic typing is intentionally flexible here.
10
11
  // biome-ignore lint/suspicious/noExplicitAny: RTK Query API generic typing is intentionally flexible here.
11
12
  type FlagsApi = Api<any, any, any, any>;
12
13
 
@@ -104,6 +104,22 @@ describe("useTerrenoFeatureFlags", () => {
104
104
  expect(result.current.error).toBeDefined();
105
105
  });
106
106
 
107
+ it("reports loading while the initial flag configuration query has no data yet", () => {
108
+ const {api} = buildApi({isLoading: true, isSuccess: false});
109
+ const {result} = renderHook(() =>
110
+ useTerrenoFeatureFlags(api as never, {domain: "feature-flags", userId: "u1"})
111
+ );
112
+ expect(result.current.isLoading).toBe(true);
113
+ });
114
+
115
+ it("reports loading while a refetch is in flight even after data has loaded", () => {
116
+ const {api} = buildApi({data: {alpha: boolDef("on")}, isFetching: true, isSuccess: true});
117
+ const {result} = renderHook(() =>
118
+ useTerrenoFeatureFlags(api as never, {domain: "feature-flags", userId: "u1"})
119
+ );
120
+ expect(result.current.isLoading).toBe(true);
121
+ });
122
+
107
123
  it("isolates domains so a custom domain does not read another domain's provider", async () => {
108
124
  const {api} = buildApi({data: {alpha: boolDef("on")}});
109
125
  const {result} = renderHook(() =>
@@ -34,9 +34,11 @@ export interface UseTerrenoFeatureFlagsResult {
34
34
  refetch: () => unknown;
35
35
  }
36
36
 
37
+ // noExplicitAny: RTK Query API generic typing is intentionally flexible here.
37
38
  // biome-ignore lint/suspicious/noExplicitAny: RTK Query API generic typing is intentionally flexible here.
38
39
  type FlagsApi = Api<any, any, any, any>;
39
40
 
41
+ // noExplicitAny: Endpoint hook is injected dynamically by RTK Query.
40
42
  // biome-ignore lint/suspicious/noExplicitAny: Endpoint hook is injected dynamically by RTK Query.
41
43
  type EnhancedTerrenoFlagsApi = FlagsApi & {useTerrenoFlagConfigurationQuery: any};
42
44
 
@@ -6,6 +6,7 @@ import React from "react";
6
6
  import {Provider} from "react-redux";
7
7
 
8
8
  const openedUrls: string[] = [];
9
+ let openUrlShouldReject = false;
9
10
 
10
11
  // Keep this react-native mock a superset of the preload's mock so other test
11
12
  // files still resolve AppState / Linking / Platform after this file runs.
@@ -16,6 +17,9 @@ mock.module("react-native", () => ({
16
17
  },
17
18
  Linking: {
18
19
  openURL: async (url: string) => {
20
+ if (openUrlShouldReject) {
21
+ throw new Error("openURL failed");
22
+ }
19
23
  openedUrls.push(url);
20
24
  return true;
21
25
  },
@@ -74,6 +78,7 @@ describe("useUpgradeCheck (native)", () => {
74
78
  beforeEach(() => {
75
79
  originalFetch = globalThis.fetch;
76
80
  openedUrls.length = 0;
81
+ openUrlShouldReject = false;
77
82
  constantsWithExtra.expoConfig.extra.buildNumber = 100;
78
83
  });
79
84
 
@@ -103,6 +108,27 @@ describe("useUpgradeCheck (native)", () => {
103
108
  unmount();
104
109
  });
105
110
 
111
+ it("swallows errors when opening the update URL fails on native", async () => {
112
+ mockFetchWith({status: "required", updateUrl: "https://example.com/app-update"});
113
+ openUrlShouldReject = true;
114
+
115
+ const {result, unmount} = renderHook(() => useUpgradeCheck(), {
116
+ wrapper: createWrapper(createTestStore()),
117
+ });
118
+ await flush();
119
+
120
+ expect(result.current.canUpdate).toBe(true);
121
+
122
+ await act(async () => {
123
+ result.current.onUpdate();
124
+ await new Promise((resolve) => setTimeout(resolve, 10));
125
+ });
126
+
127
+ // The rejection is caught internally; no URL is recorded and nothing throws.
128
+ expect(openedUrls).toEqual([]);
129
+ unmount();
130
+ });
131
+
106
132
  it("does not open a URL on native when no update URL is available", async () => {
107
133
  mockFetchWith({status: "required"});
108
134