@terreno/rtk 0.19.0 → 0.20.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.
@@ -1,46 +1,54 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, mock } from "bun:test";
2
- import { renderHook } from "@testing-library/react-native";
2
+ import { NOOP_PROVIDER, OpenFeature } from "@openfeature/web-sdk";
3
+ import { renderHook, waitFor } from "@testing-library/react-native";
3
4
  import { resolveFeatureFlagsOptions, useFeatureFlags } from "./useFeatureFlags";
4
5
  describe("resolveFeatureFlagsOptions", () => {
5
6
  it("applies defaults when no argument is provided", () => {
6
7
  expect(resolveFeatureFlagsOptions()).toEqual({
7
8
  basePath: "/feature-flags",
9
+ domain: "feature-flags",
8
10
  skip: false,
9
11
  });
10
12
  });
11
13
  it("applies defaults when an empty options object is provided", () => {
12
14
  expect(resolveFeatureFlagsOptions({})).toEqual({
13
15
  basePath: "/feature-flags",
16
+ domain: "feature-flags",
14
17
  skip: false,
15
18
  });
16
19
  });
17
20
  it("treats a string argument as a legacy basePath with skip=false", () => {
18
21
  expect(resolveFeatureFlagsOptions("/custom-path")).toEqual({
19
22
  basePath: "/custom-path",
23
+ domain: "feature-flags",
20
24
  skip: false,
21
25
  });
22
26
  });
23
27
  it("preserves an empty string basePath when passed as a legacy string argument", () => {
24
28
  expect(resolveFeatureFlagsOptions("")).toEqual({
25
29
  basePath: "",
30
+ domain: "feature-flags",
26
31
  skip: false,
27
32
  });
28
33
  });
29
34
  it("uses options.basePath when provided", () => {
30
35
  expect(resolveFeatureFlagsOptions({ basePath: "/flags" })).toEqual({
31
36
  basePath: "/flags",
37
+ domain: "feature-flags",
32
38
  skip: false,
33
39
  });
34
40
  });
35
41
  it("uses options.skip when provided", () => {
36
42
  expect(resolveFeatureFlagsOptions({ skip: true })).toEqual({
37
43
  basePath: "/feature-flags",
44
+ domain: "feature-flags",
38
45
  skip: true,
39
46
  });
40
47
  });
41
48
  it("uses both options.basePath and options.skip when provided together", () => {
42
49
  expect(resolveFeatureFlagsOptions({ basePath: "/flags", skip: true })).toEqual({
43
50
  basePath: "/flags",
51
+ domain: "feature-flags",
44
52
  skip: true,
45
53
  });
46
54
  });
@@ -48,59 +56,104 @@ describe("resolveFeatureFlagsOptions", () => {
48
56
  expect(resolveFeatureFlagsOptions("/custom-path").skip).toBe(false);
49
57
  });
50
58
  });
59
+ const boolDef = (variant) => ({
60
+ defaultVariant: variant,
61
+ disabled: false,
62
+ variants: { off: false, on: true },
63
+ });
51
64
  const buildApi = (queryResult) => {
52
65
  const refetch = mock(() => { });
53
66
  const capturedQueryBuilder = [];
54
- const useEvaluateFeatureFlagsQuery = mock(() => ({
55
- data: queryResult.data,
56
- error: queryResult.error,
57
- isLoading: queryResult.isLoading ?? false,
58
- refetch,
59
- }));
67
+ const useTerrenoFlagConfigurationQuery = mock(() => {
68
+ const hasData = Boolean(queryResult.data);
69
+ return {
70
+ data: queryResult.data,
71
+ error: queryResult.error,
72
+ isFetching: queryResult.isFetching ?? false,
73
+ isLoading: queryResult.isLoading ?? false,
74
+ isSuccess: queryResult.isSuccess ?? hasData,
75
+ refetch,
76
+ };
77
+ });
60
78
  const api = {
61
79
  injectEndpoints: mock((opts) => {
62
80
  const builder = {
63
81
  query: (def) => {
64
82
  capturedQueryBuilder.push(def.query());
65
- return { useQuery: useEvaluateFeatureFlagsQuery };
83
+ return { useQuery: useTerrenoFlagConfigurationQuery };
66
84
  },
67
85
  };
68
86
  opts.endpoints(builder);
69
- return { useEvaluateFeatureFlagsQuery };
87
+ return { useTerrenoFlagConfigurationQuery };
70
88
  }),
71
89
  };
72
- return { api, capturedQueryBuilder, refetch, useEvaluateFeatureFlagsQuery };
90
+ return { api, capturedQueryBuilder, refetch, useTerrenoFlagConfigurationQuery };
73
91
  };
74
92
  describe("useFeatureFlags hook", () => {
75
93
  const debugCalls = [];
76
94
  const originalDebug = console.debug;
77
- beforeEach(() => {
95
+ beforeEach(async () => {
78
96
  debugCalls.length = 0;
79
97
  console.debug = (...args) => {
80
98
  debugCalls.push(args);
81
99
  };
100
+ await OpenFeature.setProviderAndWait("feature-flags", NOOP_PROVIDER);
82
101
  });
83
- afterEach(() => {
102
+ afterEach(async () => {
84
103
  console.debug = originalDebug;
104
+ await OpenFeature.setProviderAndWait("feature-flags", NOOP_PROVIDER);
85
105
  });
86
- it("builds the evaluate endpoint with the default basePath", () => {
87
- const { api, capturedQueryBuilder } = buildApi({ data: { foo: true } });
88
- renderHook(() => useFeatureFlags(api));
106
+ it("builds the flagConfiguration endpoint with the default basePath", () => {
107
+ const { api, capturedQueryBuilder } = buildApi({ data: { foo: boolDef("on") } });
108
+ renderHook(() => useFeatureFlags(api, {
109
+ userId: "u1",
110
+ }));
89
111
  expect(capturedQueryBuilder[0]).toEqual({
90
112
  method: "GET",
91
- url: "/feature-flags/evaluate",
113
+ url: "/feature-flags/flagConfiguration",
92
114
  });
93
115
  });
94
- it("builds the evaluate endpoint with a custom basePath from legacy string argument", () => {
95
- const { api, capturedQueryBuilder } = buildApi({ data: { foo: true } });
116
+ it("builds the flagConfiguration endpoint with a custom basePath from legacy string argument", () => {
117
+ const { api, capturedQueryBuilder } = buildApi({ data: { foo: boolDef("on") } });
96
118
  renderHook(() => useFeatureFlags(api, "/flags"));
97
- expect(capturedQueryBuilder[0]).toEqual({ method: "GET", url: "/flags/evaluate" });
119
+ expect(capturedQueryBuilder[0]).toEqual({ method: "GET", url: "/flags/flagConfiguration" });
98
120
  });
99
- it("returns flag accessors that read boolean and string values", () => {
121
+ it("projects FlagConfiguration to flat flags like the legacy /evaluate map", async () => {
100
122
  const { api } = buildApi({
101
- data: { booleanOff: false, booleanOn: true, variantFlag: "variant-a" },
123
+ data: {
124
+ b1: boolDef("on"),
125
+ v1: {
126
+ defaultVariant: "compact",
127
+ disabled: false,
128
+ variants: { compact: "compact", detailed: "detailed" },
129
+ },
130
+ },
131
+ });
132
+ const { result } = renderHook(() => useFeatureFlags(api, { userId: "u1" }));
133
+ await waitFor(() => {
134
+ expect(result.current.isLoading).toBe(false);
135
+ });
136
+ expect(result.current.flags).toEqual({
137
+ b1: true,
138
+ v1: "compact",
139
+ });
140
+ });
141
+ it("returns flag accessors that read boolean and string values", async () => {
142
+ const { api } = buildApi({
143
+ data: {
144
+ booleanOff: boolDef("off"),
145
+ booleanOn: boolDef("on"),
146
+ variantFlag: {
147
+ defaultVariant: "variant-a",
148
+ disabled: false,
149
+ variants: { compact: "compact", detailed: "detailed", "variant-a": "variant-a" },
150
+ },
151
+ },
152
+ });
153
+ const { result } = renderHook(() => useFeatureFlags(api, { userId: "u1" }));
154
+ await waitFor(() => {
155
+ expect(result.current.isLoading).toBe(false);
102
156
  });
103
- const { result } = renderHook(() => useFeatureFlags(api));
104
157
  expect(result.current.getFlag("booleanOn")).toBe(true);
105
158
  expect(result.current.getFlag("booleanOff")).toBe(false);
106
159
  expect(result.current.getFlag("variantFlag")).toBe(false);
@@ -109,75 +162,88 @@ describe("useFeatureFlags hook", () => {
109
162
  expect(result.current.getVariant("missing")).toBeNull();
110
163
  });
111
164
  it("returns an empty flags map when no data is available", () => {
112
- const { api } = buildApi({ isLoading: true });
113
- const { result } = renderHook(() => useFeatureFlags(api));
165
+ const { api } = buildApi({ isLoading: true, isSuccess: false });
166
+ const { result } = renderHook(() => useFeatureFlags(api, { userId: "u1" }));
114
167
  expect(result.current.flags).toEqual({});
115
168
  expect(result.current.isLoading).toBe(true);
116
169
  });
117
- it("exposes refetch from the underlying query hook", () => {
118
- const { api, refetch } = buildApi({ data: { foo: true } });
119
- const { result } = renderHook(() => useFeatureFlags(api));
170
+ it("exposes refetch from the underlying query hook", async () => {
171
+ const { api, refetch } = buildApi({ data: { foo: boolDef("on") } });
172
+ const { result } = renderHook(() => useFeatureFlags(api, { userId: "u1" }));
173
+ await waitFor(() => {
174
+ expect(result.current.isLoading).toBe(false);
175
+ });
120
176
  result.current.refetch();
121
177
  expect(refetch).toHaveBeenCalled();
122
178
  });
123
- it("logs evaluate request started when loading begins without prior data", () => {
124
- const { api } = buildApi({ isLoading: true });
125
- renderHook(() => useFeatureFlags(api));
126
- const started = debugCalls.find((args) => args[0] === "[feature-flags] evaluate request started");
179
+ it("logs flagConfiguration request started when loading begins without prior data", () => {
180
+ const { api } = buildApi({ isLoading: true, isSuccess: false });
181
+ renderHook(() => useFeatureFlags(api, { userId: "u1" }));
182
+ const started = debugCalls.find((args) => args[0] === "[feature-flags] flagConfiguration request started");
127
183
  expect(started).toBeDefined();
128
184
  });
129
- it("logs evaluate request completed when data resolves after a loading phase", () => {
130
- const api = buildApi({ isLoading: true });
185
+ it("logs flagConfiguration request completed when data resolves after a loading phase", async () => {
186
+ const api = buildApi({ isLoading: true, isSuccess: false });
131
187
  const { rerender } = renderHook(({ queryResult }) => {
132
- api.useEvaluateFeatureFlagsQuery.mockImplementationOnce(() => ({
188
+ api.useTerrenoFlagConfigurationQuery.mockImplementationOnce(() => ({
133
189
  data: queryResult.data,
134
190
  error: queryResult.error,
191
+ isFetching: queryResult.isFetching ?? false,
135
192
  isLoading: queryResult.isLoading ?? false,
193
+ isSuccess: queryResult.isSuccess ?? Boolean(queryResult.data),
136
194
  refetch: api.refetch,
137
195
  }));
138
- return useFeatureFlags(api.api);
139
- }, { initialProps: { queryResult: { isLoading: true } } });
140
- rerender({ queryResult: { data: { alpha: true }, isLoading: false } });
141
- const completed = debugCalls.find((args) => args[0] === "[feature-flags] evaluate request completed");
142
- const started = debugCalls.find((args) => args[0] === "[feature-flags] evaluate request started");
196
+ return useFeatureFlags(api.api, {
197
+ userId: "u1",
198
+ });
199
+ }, { initialProps: { queryResult: { isLoading: true, isSuccess: false } } });
200
+ rerender({ queryResult: { data: { alpha: boolDef("on") }, isLoading: false, isSuccess: true } });
201
+ await waitFor(() => {
202
+ const completed = debugCalls.find((args) => args[0] === "[feature-flags] flagConfiguration request completed");
203
+ expect(completed).toBeDefined();
204
+ });
205
+ const started = debugCalls.find((args) => args[0] === "[feature-flags] flagConfiguration request started");
143
206
  expect(started).toBeDefined();
144
- expect(completed).toBeDefined();
145
207
  });
146
- it("injects the evaluate endpoint only once per (api, basePath)", () => {
208
+ it("injects the flagConfiguration endpoint only once per (api, basePath)", () => {
147
209
  let injectCallCount = 0;
148
210
  const refetch = mock(() => { });
149
- const useEvaluateFeatureFlagsQuery = mock(() => ({
211
+ const useTerrenoFlagConfigurationQuery = mock(() => ({
150
212
  data: {},
151
213
  error: undefined,
214
+ isFetching: false,
152
215
  isLoading: false,
216
+ isSuccess: true,
153
217
  refetch,
154
218
  }));
155
219
  const api = {
156
220
  injectEndpoints: () => {
157
221
  injectCallCount += 1;
158
- return { useEvaluateFeatureFlagsQuery };
222
+ return { useTerrenoFlagConfigurationQuery };
159
223
  },
160
224
  };
161
- const { rerender } = renderHook(() => useFeatureFlags(api));
225
+ const { rerender } = renderHook(() => useFeatureFlags(api, { userId: "u1" }));
162
226
  rerender(undefined);
163
227
  rerender(undefined);
164
- // The hook reuses the cached enhanced api after the first render so the
165
- // dev-mode RTK warning about re-injecting endpoints never fires.
166
228
  expect(injectCallCount).toBe(1);
167
229
  });
168
- it("logs evaluate request failed when error is returned after loading", () => {
169
- const api = buildApi({ isLoading: true });
230
+ it("logs flagConfiguration request failed when error is returned after loading", () => {
231
+ const api = buildApi({ isLoading: true, isSuccess: false });
170
232
  const { rerender } = renderHook(({ queryResult }) => {
171
- api.useEvaluateFeatureFlagsQuery.mockImplementationOnce(() => ({
233
+ api.useTerrenoFlagConfigurationQuery.mockImplementationOnce(() => ({
172
234
  data: queryResult.data,
173
235
  error: queryResult.error,
236
+ isFetching: queryResult.isFetching ?? false,
174
237
  isLoading: queryResult.isLoading ?? false,
238
+ isSuccess: queryResult.isSuccess ?? false,
175
239
  refetch: api.refetch,
176
240
  }));
177
- return useFeatureFlags(api.api);
178
- }, { initialProps: { queryResult: { isLoading: true } } });
179
- rerender({ queryResult: { error: new Error("boom"), isLoading: false } });
180
- const failed = debugCalls.find((args) => args[0] === "[feature-flags] evaluate request failed");
241
+ return useFeatureFlags(api.api, {
242
+ userId: "u1",
243
+ });
244
+ }, { initialProps: { queryResult: { isLoading: true, isSuccess: false } } });
245
+ rerender({ queryResult: { error: new Error("boom"), isLoading: false, isSuccess: false } });
246
+ const failed = debugCalls.find((args) => args[0] === "[feature-flags] flagConfiguration request failed");
181
247
  expect(failed).toBeDefined();
182
248
  });
183
249
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useFeatureFlags.test.js","sourceRoot":"","sources":["../src/useFeatureFlags.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFeatureFlags.test.js","sourceRoot":"","sources":["../src/useFeatureFlags.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { OpenFeature } from "@openfeature/web-sdk";
2
+ import type { Api } from "@reduxjs/toolkit/query/react";
3
+ /** Shape returned by `GET .../flagConfiguration` (OpenFeature static flag map). */
4
+ export interface TerrenoFlagDefinition {
5
+ defaultVariant: string;
6
+ disabled: boolean;
7
+ variants: Record<string, boolean | string>;
8
+ }
9
+ export type TerrenoFlagConfiguration = Record<string, TerrenoFlagDefinition>;
10
+ export interface UseTerrenoFeatureFlagsOptions {
11
+ basePath?: string;
12
+ skip?: boolean;
13
+ /** Current user id — included in RTK cache key and OpenFeature targeting context. */
14
+ userId?: string | null;
15
+ /** Optional socket.io client for live flag refresh. */
16
+ socket?: {
17
+ off: (event: string, handler: (...args: unknown[]) => void) => void;
18
+ on: (event: string, handler: (...args: unknown[]) => void) => void;
19
+ } | null;
20
+ socketEventName?: string;
21
+ /** OpenFeature domain — must match `<OpenFeatureProvider domain>` on the client. */
22
+ domain?: string;
23
+ }
24
+ export interface UseTerrenoFeatureFlagsResult {
25
+ client: ReturnType<typeof OpenFeature.getClient>;
26
+ error: unknown;
27
+ flags: TerrenoFlagConfiguration;
28
+ isLoading: boolean;
29
+ refetch: () => unknown;
30
+ }
31
+ type FlagsApi = Api<any, any, any, any>;
32
+ /**
33
+ * Wires Terreno's bulk `/flagConfiguration` fetch into OpenFeature's
34
+ * {@link TypedInMemoryProvider} for the given domain. Prefer OpenFeature React
35
+ * hooks (`useBooleanFlagValue`, etc.) as children of `<OpenFeatureProvider>`.
36
+ */
37
+ export declare const useTerrenoFeatureFlags: (api: FlagsApi, options?: UseTerrenoFeatureFlagsOptions) => UseTerrenoFeatureFlagsResult;
38
+ export {};
39
+ //# sourceMappingURL=useTerrenoFeatureFlags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerrenoFeatureFlags.d.ts","sourceRoot":"","sources":["../src/useTerrenoFeatureFlags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAwB,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,8BAA8B,CAAC;AAGtD,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAE7E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uDAAuD;IACvD,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;QACpE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;KACpE,GAAG,IAAI,CAAC;IACT,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,wBAAwB,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC;CACxB;AAGD,KAAK,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAuCxC;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,QAAQ,EACb,UAAU,6BAA6B,KACtC,4BA6IF,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { NOOP_PROVIDER, OpenFeature, TypedInMemoryProvider } from "@openfeature/web-sdk";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ const enhancedApiCache = new WeakMap();
4
+ const getEnhancedApi = (api, basePath) => {
5
+ let byBase = enhancedApiCache.get(api);
6
+ if (!byBase) {
7
+ byBase = new Map();
8
+ enhancedApiCache.set(api, byBase);
9
+ }
10
+ const cached = byBase.get(basePath);
11
+ if (cached) {
12
+ return cached;
13
+ }
14
+ const enhanced = api.injectEndpoints({
15
+ endpoints: (builder) => ({
16
+ terrenoFlagConfiguration: builder.query({
17
+ providesTags: (_result, _err, arg) => [{ id: arg.cacheKey, type: "feature-flags" }],
18
+ query: () => ({
19
+ method: "GET",
20
+ url: `${basePath}/flagConfiguration`,
21
+ }),
22
+ }),
23
+ }),
24
+ overrideExisting: false,
25
+ });
26
+ byBase.set(basePath, enhanced);
27
+ return enhanced;
28
+ };
29
+ /** In-flight `useTerrenoFeatureFlags` instances per OpenFeature domain (for last-unmount NOOP cleanup). */
30
+ const terrenoOpenFeatureHookRefCounts = new Map();
31
+ /** Last in-flight `setProviderAndWait` per OpenFeature domain (shared across hook instances). */
32
+ const domainProviderSwitchPromises = new Map();
33
+ /**
34
+ * Wires Terreno's bulk `/flagConfiguration` fetch into OpenFeature's
35
+ * {@link TypedInMemoryProvider} for the given domain. Prefer OpenFeature React
36
+ * hooks (`useBooleanFlagValue`, etc.) as children of `<OpenFeatureProvider>`.
37
+ */
38
+ export const useTerrenoFeatureFlags = (api, options) => {
39
+ const basePath = options?.basePath ?? "/feature-flags";
40
+ const domain = options?.domain ?? "feature-flags";
41
+ const userId = options?.userId ?? null;
42
+ const skip = options?.skip === true;
43
+ const socket = options?.socket ?? null;
44
+ const socketEventName = options?.socketEventName ?? "featureFlagsChanged";
45
+ const enhancedApi = useMemo(() => getEnhancedApi(api, basePath), [api, basePath]);
46
+ const useTerrenoFlagConfigurationQuery = enhancedApi.useTerrenoFlagConfigurationQuery;
47
+ const { data, error, isError, isFetching, isLoading: isQueryLoading, isSuccess, refetch, } = useTerrenoFlagConfigurationQuery({ cacheKey: userId ?? "" }, { skip });
48
+ const [providerReady, setProviderReady] = useState(skip);
49
+ const client = useMemo(() => OpenFeature.getClient(domain), [domain]);
50
+ useEffect(() => {
51
+ const prev = terrenoOpenFeatureHookRefCounts.get(domain) ?? 0;
52
+ terrenoOpenFeatureHookRefCounts.set(domain, prev + 1);
53
+ return () => {
54
+ const current = terrenoOpenFeatureHookRefCounts.get(domain) ?? 0;
55
+ const next = current - 1;
56
+ if (next <= 0) {
57
+ terrenoOpenFeatureHookRefCounts.delete(domain);
58
+ void (async () => {
59
+ const pending = domainProviderSwitchPromises.get(domain);
60
+ if (pending) {
61
+ await pending;
62
+ }
63
+ await OpenFeature.setProviderAndWait(domain, NOOP_PROVIDER);
64
+ })();
65
+ }
66
+ else {
67
+ terrenoOpenFeatureHookRefCounts.set(domain, next);
68
+ }
69
+ };
70
+ }, [domain]);
71
+ useEffect(() => {
72
+ if (skip) {
73
+ return;
74
+ }
75
+ void OpenFeature.setContext(domain, { targetingKey: userId ?? "" });
76
+ }, [domain, skip, userId]);
77
+ useEffect(() => {
78
+ if (skip) {
79
+ setProviderReady(true);
80
+ return;
81
+ }
82
+ setProviderReady(false);
83
+ }, [skip, userId]);
84
+ useEffect(() => {
85
+ if (skip || !isSuccess || !data) {
86
+ return;
87
+ }
88
+ let cancelled = false;
89
+ const applyProvider = async () => {
90
+ const pending = domainProviderSwitchPromises.get(domain);
91
+ const run = (async () => {
92
+ if (pending) {
93
+ await pending;
94
+ }
95
+ await OpenFeature.setProviderAndWait(domain, new TypedInMemoryProvider(data));
96
+ })();
97
+ domainProviderSwitchPromises.set(domain, run);
98
+ try {
99
+ await run;
100
+ }
101
+ finally {
102
+ if (domainProviderSwitchPromises.get(domain) === run) {
103
+ domainProviderSwitchPromises.delete(domain);
104
+ }
105
+ }
106
+ if (!cancelled) {
107
+ setProviderReady(true);
108
+ }
109
+ };
110
+ void applyProvider();
111
+ return () => {
112
+ cancelled = true;
113
+ };
114
+ }, [data, domain, isSuccess, skip]);
115
+ useEffect(() => {
116
+ if (!socket) {
117
+ return;
118
+ }
119
+ const handler = () => {
120
+ void refetch();
121
+ };
122
+ socket.on(socketEventName, handler);
123
+ return () => {
124
+ socket.off(socketEventName, handler);
125
+ };
126
+ }, [refetch, socket, socketEventName]);
127
+ const flags = data ?? {};
128
+ const isLoading = useMemo(() => {
129
+ if (skip) {
130
+ return false;
131
+ }
132
+ if (isError) {
133
+ return false;
134
+ }
135
+ if (!isSuccess || !data) {
136
+ return true;
137
+ }
138
+ if (isQueryLoading || isFetching) {
139
+ return true;
140
+ }
141
+ if (!providerReady) {
142
+ return true;
143
+ }
144
+ return false;
145
+ }, [data, isError, isFetching, isQueryLoading, isSuccess, providerReady, skip]);
146
+ const stableRefetch = useCallback(() => {
147
+ return refetch();
148
+ }, [refetch]);
149
+ return {
150
+ client,
151
+ error,
152
+ flags,
153
+ isLoading,
154
+ refetch: stableRefetch,
155
+ };
156
+ };
157
+ //# sourceMappingURL=useTerrenoFeatureFlags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerrenoFeatureFlags.js","sourceRoot":"","sources":["../src/useTerrenoFeatureFlags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useTerrenoFeatureFlags.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerrenoFeatureFlags.test.d.ts","sourceRoot":"","sources":["../src/useTerrenoFeatureFlags.test.ts"],"names":[],"mappings":""}