-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathinitLDClient.ts
45 lines (40 loc) · 1.61 KB
/
initLDClient.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { initialize as ldClientInitialize, LDClient, LDFlagSet, LDOptions, LDUser } from 'launchdarkly-js-client-sdk';
import { AllFlagsLDClient, defaultReactOptions, LDReactOptions } from './types';
import { camelCaseKeys } from './utils';
import { version } from '../package.json';
/**
* Internal function to initialize the `LDClient`.
*
* @param clientSideID Your project and environment specific client side ID
* @param user A LaunchDarkly user object
* @param options LaunchDarkly initialization options
* @param targetFlags If specified, `launchdarkly-react-client-sdk` will only request and listen to these flags.
*
* @see `ProviderConfig` for more details about the parameters
* @return An initialized client and flags
*/
const initLDClient = async (
clientSideID: string,
user: LDUser = { anonymous: true },
reactOptions: LDReactOptions = defaultReactOptions,
options?: LDOptions,
targetFlags?: LDFlagSet,
): Promise<AllFlagsLDClient> => {
const allOptions = { wrapperName: 'react-client-sdk', wrapperVersion: version, ...options };
const ldClient = ldClientInitialize(clientSideID, user, allOptions);
return new Promise<AllFlagsLDClient>(resolve => {
ldClient.on('ready', () => {
let rawFlags: LDFlagSet = {};
if (targetFlags) {
for (const flag in targetFlags) {
rawFlags[flag] = ldClient.variation(flag, targetFlags[flag]);
}
} else {
rawFlags = ldClient.allFlags();
}
const flags = reactOptions.useCamelCaseFlagKeys ? camelCaseKeys(rawFlags) : rawFlags;
resolve({ flags, ldClient });
});
});
};
export default initLDClient;