@newskit-render/feature-flags 0.0.0-1fc471ad

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.
@@ -0,0 +1,538 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { _resetInstance,
13
+ // closeFlagsInstance,
14
+ // getFlag,
15
+ // getFlagsAll,
16
+ // getFlagsByKeys,
17
+ } from '../utils';
18
+ // import { SDKConfig } from '../types'
19
+ var originalEnv = process.env;
20
+ jest.mock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
21
+ decide: jest
22
+ .fn()
23
+ .mockImplementation(function (key, options) {
24
+ return flagsMock[key];
25
+ }),
26
+ decideForKeys: jest
27
+ .fn()
28
+ .mockImplementation(function (keys, options) {
29
+ var filtered = {};
30
+ keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
31
+ return filtered;
32
+ }),
33
+ decideAll: jest
34
+ .fn()
35
+ .mockImplementation(function (options) {
36
+ return flagsMock;
37
+ }),
38
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
39
+ var flagsMock = {
40
+ qualtrics_flag: {
41
+ variationKey: 'on',
42
+ enabled: true,
43
+ variables: {},
44
+ ruleKey: 'default-rollout-216689-29200910123',
45
+ flagKey: 'qualtrics_flag',
46
+ userContext: {
47
+ _qualifiedSegments: null,
48
+ // optimizely: [e],
49
+ userId: 'user123',
50
+ attributes: {},
51
+ forcedDecisionsMap: {},
52
+ },
53
+ reasons: [],
54
+ },
55
+ testing_flag: {
56
+ variationKey: 'max_10',
57
+ enabled: true,
58
+ variables: { max_family_members: 10 },
59
+ ruleKey: 'default-rollout-223709-29200910123',
60
+ flagKey: 'testing_flag',
61
+ userContext: {
62
+ _qualifiedSegments: null,
63
+ // optimizely: [e],
64
+ userId: 'user123',
65
+ attributes: {},
66
+ forcedDecisionsMap: {},
67
+ },
68
+ reasons: [],
69
+ },
70
+ another_test_flag_1: {
71
+ variationKey: 'off',
72
+ enabled: false,
73
+ variables: {},
74
+ ruleKey: 'default-rollout-225089-29200910123',
75
+ flagKey: 'another_test_flag_1',
76
+ userContext: {
77
+ _qualifiedSegments: null,
78
+ // optimizely: [e],
79
+ userId: 'user123',
80
+ attributes: {},
81
+ forcedDecisionsMap: {},
82
+ },
83
+ reasons: [],
84
+ },
85
+ testing_flag_with_variations_and_variables: {
86
+ variationKey: 'primary_with_new_weclome_message_and_max_accounts',
87
+ enabled: true,
88
+ variables: {
89
+ family_primary_welcome_message: 'This is the new message',
90
+ family_primary_enable_secondary_accounts: true,
91
+ family_primary_max_secondary_accounts: 10,
92
+ family_primary_metadata_json: {
93
+ metadata1: 'a',
94
+ },
95
+ },
96
+ ruleKey: 'default-rollout-225097-29200910123',
97
+ flagKey: 'testing_flag_with_variations_and_variables',
98
+ userContext: {
99
+ _qualifiedSegments: null,
100
+ // optimizely: [e],
101
+ userId: 'user123',
102
+ attributes: {},
103
+ forcedDecisionsMap: {},
104
+ },
105
+ reasons: [],
106
+ },
107
+ };
108
+ // TO DO: Improve test coverage
109
+ beforeEach(function () {
110
+ jest.resetModules();
111
+ process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
112
+ });
113
+ afterEach(function () {
114
+ _resetInstance();
115
+ });
116
+ describe('initAndGetFeatureFlag', function () {
117
+ it('should return all feature flags', function () {
118
+ expect(true).toBe(true);
119
+ });
120
+ });
121
+ // describe('getFlagsAll', () => {
122
+ // it('should return all flags with default options', async () => {
123
+ // const flagsAll = await getFlagsAll()
124
+ // expect(flagsAll).toEqual({
125
+ // qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
126
+ // testing_flag: {
127
+ // variationKey: 'max_10',
128
+ // enabled: true,
129
+ // variables: { max_family_members: 10 },
130
+ // },
131
+ // another_test_flag_1: {
132
+ // variationKey: 'off',
133
+ // enabled: false,
134
+ // variables: {},
135
+ // },
136
+ // testing_flag_with_variations_and_variables: {
137
+ // variationKey: 'primary_with_new_weclome_message_and_max_accounts',
138
+ // enabled: true,
139
+ // variables: {
140
+ // family_primary_welcome_message: 'This is the new message',
141
+ // family_primary_enable_secondary_accounts: true,
142
+ // family_primary_max_secondary_accounts: 10,
143
+ // family_primary_metadata_json: {
144
+ // metadata1: 'a',
145
+ // },
146
+ // },
147
+ // },
148
+ // })
149
+ // })
150
+ // it('should return all flags with custom options', async () => {
151
+ // process.env = {
152
+ // ...originalEnv,
153
+ // OPTIMIZELY_SDK_KEY: undefined,
154
+ // }
155
+ // const options: SDKConfig = {
156
+ // sdkConfig: {
157
+ // sdkKey: 'custom-optimizely-sdk',
158
+ // },
159
+ // userData: {
160
+ // userId: 'user456',
161
+ // attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
162
+ // },
163
+ // includeFlagVariables: true,
164
+ // }
165
+ // const flagsAll = await getFlagsAll(options)
166
+ // expect(flagsAll).toEqual({
167
+ // qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
168
+ // testing_flag: {
169
+ // variationKey: 'max_10',
170
+ // enabled: true,
171
+ // variables: { max_family_members: 10 },
172
+ // },
173
+ // another_test_flag_1: {
174
+ // variationKey: 'off',
175
+ // enabled: false,
176
+ // variables: {},
177
+ // },
178
+ // testing_flag_with_variations_and_variables: {
179
+ // variationKey: 'primary_with_new_weclome_message_and_max_accounts',
180
+ // enabled: true,
181
+ // variables: {
182
+ // family_primary_welcome_message: 'This is the new message',
183
+ // family_primary_enable_secondary_accounts: true,
184
+ // family_primary_max_secondary_accounts: 10,
185
+ // family_primary_metadata_json: {
186
+ // metadata1: 'a',
187
+ // },
188
+ // },
189
+ // },
190
+ // })
191
+ // })
192
+ // it('should return empty object if no flags are fetched', async () => {
193
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
194
+ // ...jest.requireActual('@optimizely/optimizely-sdk'),
195
+ // createInstance: () => ({
196
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
197
+ // createUserContext: () => ({
198
+ // decideAll: jest
199
+ // .fn()
200
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
201
+ // return undefined
202
+ // }),
203
+ // }),
204
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
205
+ // close: jest.fn().mockResolvedValue({ success: true }),
206
+ // }),
207
+ // }))
208
+ // const { getFlagsAll } = require('../utils')
209
+ // const flagsAll = await getFlagsAll()
210
+ // expect(flagsAll).toEqual({})
211
+ // })
212
+ // it('should return empty object when called without sdk key', async () => {
213
+ // process.env = {
214
+ // ...originalEnv,
215
+ // OPTIMIZELY_SDK_KEY: undefined,
216
+ // }
217
+ // const flagsAll = await getFlagsAll()
218
+ // expect(flagsAll).toEqual({})
219
+ // })
220
+ // it('should return empty object when sdk not initialized', async () => {
221
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
222
+ // createInstance: jest.fn().mockReturnValue(null),
223
+ // }))
224
+ // const { getFlagsAll } = require('../utils')
225
+ // const flagsAll = await getFlagsAll()
226
+ // expect(flagsAll).toEqual({})
227
+ // })
228
+ // it('should return empty object when user context not initialized', async () => {
229
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
230
+ // createInstance: () => ({
231
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
232
+ // createUserContext: jest.fn().mockReturnValue(null),
233
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
234
+ // }),
235
+ // }))
236
+ // const { getFlagsAll } = require('../utils')
237
+ // const flagsAll = await getFlagsAll()
238
+ // expect(flagsAll).toEqual({})
239
+ // })
240
+ // it('should instantiate logger with log level', async () => {
241
+ // const options: SDKConfig = {
242
+ // logLevel: 'critical',
243
+ // }
244
+ // await getFlagsAll(options)
245
+ // expect(setLogLevel).toBeCalledWith('critical')
246
+ // expect(setLogger).toHaveBeenCalled()
247
+ // })
248
+ // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
249
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
250
+ // createInstance: () => ({
251
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
252
+ // createUserContext: () => ({
253
+ // decideAll: jest
254
+ // .fn()
255
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
256
+ // return flagsMock as {
257
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
258
+ // }
259
+ // }),
260
+ // }),
261
+ // onReady: jest
262
+ // .fn()
263
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
264
+ // }),
265
+ // }))
266
+ // const { getFlagsAll } = require('../utils')
267
+ // const options: SDKConfig = {
268
+ // defaultFeatureFlags: {
269
+ // default_flag: {
270
+ // variationKey: 'off',
271
+ // enabled: true,
272
+ // variables: {},
273
+ // },
274
+ // },
275
+ // }
276
+ // const flagsAll = await getFlagsAll(options)
277
+ // expect(flagsAll).toEqual(options.defaultFeatureFlags)
278
+ // })
279
+ // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
280
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
281
+ // createInstance: () => ({
282
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
283
+ // createUserContext: () => ({
284
+ // decideAll: jest
285
+ // .fn()
286
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
287
+ // return flagsMock as {
288
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
289
+ // }
290
+ // }),
291
+ // }),
292
+ // onReady: jest
293
+ // .fn()
294
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
295
+ // }),
296
+ // }))
297
+ // const { getFlagsAll } = require('../utils')
298
+ // const flagsAll = await getFlagsAll()
299
+ // expect(flagsAll).toEqual({})
300
+ // })
301
+ // })
302
+ // describe('closeFlagsInstance', () => {
303
+ // it('should close sdk instance successfully', async () => {
304
+ // const spy = jest.spyOn(console, 'log')
305
+ // await getFlagsAll()
306
+ // await closeFlagsInstance()
307
+ // expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully')
308
+ // })
309
+ // it('should not close sdk instance sucessfully', async () => {
310
+ // const spy = jest.spyOn(console, 'log')
311
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
312
+ // createInstance: () => ({
313
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
314
+ // createUserContext: () => ({
315
+ // decide: jest
316
+ // .fn()
317
+ // .mockImplementation(
318
+ // (key: string, options?: OptimizelyDecideOption[]) => {
319
+ // return getFlagsAll as Omit<OptimizelyDecision, 'userContext'>
320
+ // }
321
+ // ),
322
+ // }),
323
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
324
+ // close: jest
325
+ // .fn()
326
+ // .mockResolvedValue({ success: false, reason: 'Closing rejected' }),
327
+ // }),
328
+ // }))
329
+ // const { getFlagsAll, closeFlagsInstance } = require('../utils')
330
+ // await getFlagsAll()
331
+ // await closeFlagsInstance()
332
+ // expect(spy).toHaveBeenCalledWith(
333
+ // 'closing Optimizely instance failed, reason: Closing rejected'
334
+ // )
335
+ // })
336
+ // })
337
+ // describe('getFlag', () => {
338
+ // it('should return a flag with default options', async () => {
339
+ // const flag = await getFlag('testing_flag_with_variations_and_variables')
340
+ // expect(flag).toEqual({
341
+ // testing_flag_with_variations_and_variables: {
342
+ // variationKey: 'primary_with_new_weclome_message_and_max_accounts',
343
+ // enabled: true,
344
+ // variables: {
345
+ // family_primary_welcome_message: 'This is the new message',
346
+ // family_primary_enable_secondary_accounts: true,
347
+ // family_primary_max_secondary_accounts: 10,
348
+ // family_primary_metadata_json: {
349
+ // metadata1: 'a',
350
+ // },
351
+ // },
352
+ // },
353
+ // })
354
+ // })
355
+ // it('should return empty object if no flags are fetched', async () => {
356
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
357
+ // ...jest.requireActual('@optimizely/optimizely-sdk'),
358
+ // createInstance: () => ({
359
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
360
+ // createUserContext: () => ({
361
+ // decide: jest
362
+ // .fn()
363
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
364
+ // return undefined
365
+ // }),
366
+ // }),
367
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
368
+ // close: jest.fn().mockResolvedValue({ success: true }),
369
+ // }),
370
+ // }))
371
+ // const { getFlag } = require('../utils')
372
+ // const flagsAll = await getFlag('testing_flag_with_variations_and_variables')
373
+ // expect(flagsAll).toEqual({})
374
+ // })
375
+ // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
376
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
377
+ // createInstance: () => ({
378
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
379
+ // createUserContext: () => ({
380
+ // decide: jest
381
+ // .fn()
382
+ // .mockImplementation(
383
+ // (key: string, options?: OptimizelyDecideOption[]) => {
384
+ // return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
385
+ // }
386
+ // ),
387
+ // }),
388
+ // onReady: jest
389
+ // .fn()
390
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
391
+ // }),
392
+ // }))
393
+ // const { getFlag } = require('../utils')
394
+ // const options: SDKConfig = {
395
+ // defaultFeatureFlags: {
396
+ // default_flag: {
397
+ // variationKey: 'off',
398
+ // enabled: true,
399
+ // variables: {},
400
+ // },
401
+ // },
402
+ // }
403
+ // const flag = await getFlag(
404
+ // 'testing_flag_with_variations_and_variables',
405
+ // options
406
+ // )
407
+ // expect(flag).toEqual(options.defaultFeatureFlags)
408
+ // })
409
+ // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
410
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
411
+ // createInstance: () => ({
412
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
413
+ // createUserContext: () => ({
414
+ // decide: jest
415
+ // .fn()
416
+ // .mockImplementation(
417
+ // (key: string, options?: OptimizelyDecideOption[]) => {
418
+ // return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
419
+ // }
420
+ // ),
421
+ // }),
422
+ // onReady: jest
423
+ // .fn()
424
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
425
+ // }),
426
+ // }))
427
+ // const { getFlag } = require('../utils')
428
+ // const flag = await getFlag('testing_flag_with_variations_and_variables')
429
+ // expect(flag).toEqual({})
430
+ // })
431
+ // })
432
+ // describe('getFlagsByKeys', () => {
433
+ // it('should return flags by keys with default options', async () => {
434
+ // const flagsByKeys = await getFlagsByKeys([
435
+ // 'another_test_flag_1',
436
+ // 'qualtrics_flag',
437
+ // ])
438
+ // expect(flagsByKeys).toEqual({
439
+ // qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
440
+ // another_test_flag_1: {
441
+ // variationKey: 'off',
442
+ // enabled: false,
443
+ // variables: {},
444
+ // },
445
+ // })
446
+ // })
447
+ // it('should return empty object if no flags are fetched', async () => {
448
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
449
+ // ...jest.requireActual('@optimizely/optimizely-sdk'),
450
+ // createInstance: () => ({
451
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
452
+ // createUserContext: () => ({
453
+ // decideForKeys: jest
454
+ // .fn()
455
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
456
+ // return undefined
457
+ // }),
458
+ // }),
459
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
460
+ // close: jest.fn().mockResolvedValue({ success: true }),
461
+ // }),
462
+ // }))
463
+ // const { getFlagsByKeys } = require('../utils')
464
+ // const flagsAll = await getFlagsByKeys([
465
+ // 'another_test_flag_1',
466
+ // 'qualtrics_flag',
467
+ // ])
468
+ // expect(flagsAll).toEqual({})
469
+ // })
470
+ // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
471
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
472
+ // createInstance: () => ({
473
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
474
+ // createUserContext: () => ({
475
+ // decideForKeys: jest
476
+ // .fn()
477
+ // .mockImplementation(
478
+ // (keys: string[], options?: OptimizelyDecideOption[]) => {
479
+ // const filtered: {
480
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
481
+ // } = {}
482
+ // keys.forEach((k) => (filtered[k] = flagsMock[k]))
483
+ // return filtered
484
+ // }
485
+ // ),
486
+ // }),
487
+ // onReady: jest
488
+ // .fn()
489
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
490
+ // }),
491
+ // }))
492
+ // const { getFlagsByKeys } = require('../utils')
493
+ // const options: SDKConfig = {
494
+ // defaultFeatureFlags: {
495
+ // default_flag: {
496
+ // variationKey: 'off',
497
+ // enabled: true,
498
+ // variables: {},
499
+ // },
500
+ // },
501
+ // }
502
+ // const flagsByKeys = await getFlagsByKeys(
503
+ // ['another_test_flag_1', 'qualtrics_flag'],
504
+ // options
505
+ // )
506
+ // expect(flagsByKeys).toEqual(options.defaultFeatureFlags)
507
+ // })
508
+ // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
509
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
510
+ // createInstance: () => ({
511
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
512
+ // createUserContext: () => ({
513
+ // decideForKeys: jest
514
+ // .fn()
515
+ // .mockImplementation(
516
+ // (keys: string[], options?: OptimizelyDecideOption[]) => {
517
+ // const filtered: {
518
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
519
+ // } = {}
520
+ // keys.forEach((k) => (filtered[k] = flagsMock[k]))
521
+ // return filtered
522
+ // }
523
+ // ),
524
+ // }),
525
+ // onReady: jest
526
+ // .fn()
527
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
528
+ // }),
529
+ // }))
530
+ // const { getFlagsByKeys } = require('../utils')
531
+ // const flagsByKeys = await getFlagsByKeys([
532
+ // 'another_test_flag_1',
533
+ // 'qualtrics_flag',
534
+ // ])
535
+ // expect(flagsByKeys).toEqual({})
536
+ // })
537
+ // })
538
+ //# sourceMappingURL=utils.tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.tests.js","sourceRoot":"","sources":["../../../src/__tests__/utils.tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { ContextOptions, ContextProviderProps } from './types';
3
+ export declare const FeatureFlagsContextProvider: React.FC<ContextProviderProps>;
4
+ export declare const useFeatureFlagsContext: () => ContextOptions;
5
+ declare const _default: {
6
+ FeatureFlagsContextProvider: React.FC<ContextProviderProps>;
7
+ useFeatureFlagsContext: () => ContextOptions;
8
+ };
9
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import React, { createContext, useContext } from 'react';
2
+ import { MissingFeatureFlagsProvider, } from './types';
3
+ var FeatureFlagsContext = createContext(null);
4
+ export var FeatureFlagsContextProvider = function (_a) {
5
+ var context = _a.context, children = _a.children;
6
+ return (React.createElement(FeatureFlagsContext.Provider, { value: context }, children));
7
+ };
8
+ export var useFeatureFlagsContext = function () {
9
+ var featureFlagsContext = useContext(FeatureFlagsContext);
10
+ if (!featureFlagsContext) {
11
+ throw new MissingFeatureFlagsProvider();
12
+ }
13
+ return featureFlagsContext;
14
+ };
15
+ export default { FeatureFlagsContextProvider: FeatureFlagsContextProvider, useFeatureFlagsContext: useFeatureFlagsContext };
16
+ //# sourceMappingURL=feature-flags-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flags-context.js","sourceRoot":"","sources":["../../src/feature-flags-context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAGL,2BAA2B,GAC5B,MAAM,SAAS,CAAA;AAEhB,IAAM,mBAAmB,GAAG,aAAa,CAAwB,IAAI,CAAC,CAAA;AAEtE,MAAM,CAAC,IAAM,2BAA2B,GAAmC,UAAC,EAG3E;QAFC,OAAO,aAAA,EACP,QAAQ,cAAA;IAER,OAAO,CACL,oBAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,IACzC,QAAQ,CACoB,CAChC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,sBAAsB,GAAG;IACpC,IAAM,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAC3D,IAAI,CAAC,mBAAmB,EAAE;QACxB,MAAM,IAAI,2BAA2B,EAAE,CAAA;KACxC;IACD,OAAO,mBAAmB,CAAA;AAC5B,CAAC,CAAA;AAED,eAAe,EAAE,2BAA2B,6BAAA,EAAE,sBAAsB,wBAAA,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './feature-flags-context';
2
+ export * from './utils';
3
+ export * from './types';
@@ -0,0 +1,4 @@
1
+ export * from './feature-flags-context';
2
+ export * from './utils';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { ReactNode } from 'react';
2
+ import { Config, UserAttributes } from '@optimizely/optimizely-sdk';
3
+ export interface ContextOptions {
4
+ featureFlags?: Flags;
5
+ }
6
+ export interface ContextProviderProps {
7
+ children: ReactNode;
8
+ context: ContextOptions;
9
+ }
10
+ export type Flags = {
11
+ [key: string]: {
12
+ variationKey: string | null;
13
+ enabled: boolean;
14
+ variables: {
15
+ [variableKey: string]: unknown;
16
+ };
17
+ };
18
+ };
19
+ export type SDKConfig = {
20
+ sdkConfig?: Config;
21
+ logLevel?: 'critical' | 'error' | 'warning' | 'debug' | 'info';
22
+ userData?: {
23
+ userId?: string;
24
+ attributes?: UserAttributes;
25
+ };
26
+ defaultFeatureFlags?: Flags;
27
+ includeFlagVariables?: boolean;
28
+ };
29
+ export declare class MissingConfigurationError extends Error {
30
+ constructor();
31
+ }
32
+ export declare class MissingInstanceError extends Error {
33
+ constructor();
34
+ }
35
+ export declare class MissingUserContextError extends Error {
36
+ constructor();
37
+ }
38
+ export declare class MissingFeatureFlagsProvider extends Error {
39
+ constructor();
40
+ }