UNPKG

@flopflip/types

Version:
1 lines 17.6 kB
{"version":3,"sources":["/home/runner/work/flopflip/flopflip/packages/types/dist/index.cjs","../src/index.ts"],"names":["AdapterSubscriptionStatus","AdapterConfigurationStatus","AdapterInitializationStatus"],"mappings":"AAAA;ACmBO,IAAK,0BAAA,kBAAL,CAAA,CAAKA,0BAAAA,EAAAA,GAAL;AACL,EAAAA,0BAAAA,CAAAA,0BAAAA,CAAA,YAAA,EAAA,EAAa,CAAA,EAAA,EAAb,YAAA;AACA,EAAAA,0BAAAA,CAAAA,0BAAAA,CAAA,cAAA,EAAA,EAAe,CAAA,EAAA,EAAf,cAAA;AAFU,EAAA,OAAAA,0BAAAA;AAAA,CAAA,CAAA,CAAA,0BAAA,GAAA,CAAA,CAAA,CAAA;AAIL,IAAK,2BAAA,kBAAL,CAAA,CAAKC,2BAAAA,EAAAA,GAAL;AACL,EAAAA,2BAAAA,CAAAA,2BAAAA,CAAA,cAAA,EAAA,EAAe,CAAA,EAAA,EAAf,cAAA;AACA,EAAAA,2BAAAA,CAAAA,2BAAAA,CAAA,aAAA,EAAA,EAAc,CAAA,EAAA,EAAd,aAAA;AACA,EAAAA,2BAAAA,CAAAA,2BAAAA,CAAA,YAAA,EAAA,EAAa,CAAA,EAAA,EAAb,YAAA;AAHU,EAAA,OAAAA,2BAAAA;AAAA,CAAA,CAAA,CAAA,2BAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,4BAAA,kBAAL,CAAA,CAAKC,4BAAAA,EAAAA,GAAL;AACL,EAAAA,4BAAAA,CAAAA,4BAAAA,CAAA,WAAA,EAAA,EAAY,CAAA,EAAA,EAAZ,WAAA;AACA,EAAAA,4BAAAA,CAAAA,4BAAAA,CAAA,QAAA,EAAA,EAAS,CAAA,EAAA,EAAT,QAAA;AAFU,EAAA,OAAAA,4BAAAA;AAAA,CAAA,CAAA,CAAA,4BAAA,GAAA,CAAA,CAAA,CAAA;AAWL,IAAM,WAAA,EAAa;AAAA,EACxB,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAoGO,IAAM,mBAAA,EAAqB;AAAA,EAChC,YAAA,EAAc,cAAA;AAAA,EACd,YAAA,EAAc,cAAA;AAAA,EACd,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU;AACZ,CAAA;AAKO,IAAM,iBAAA,EAAmB;AAAA,EAC9B,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AD5HA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,iUAAC","file":"/home/runner/work/flopflip/flopflip/packages/types/dist/index.cjs","sourcesContent":[null,"import type {\n LDContext,\n LDClient as TLDClient,\n LDOptions as TLDOptions,\n} from 'launchdarkly-js-client-sdk';\nimport type React from 'react';\n\nexport type TFlagName = string;\nexport type TFlagVariation =\n | boolean\n | string\n | number\n | Record<string, unknown>\n | unknown[];\nexport type TFlag = [flagName: TFlagName, flagVariation: TFlagVariation];\nexport type TFlags = Record<string, TFlagVariation>;\nexport type TUser<TAdditionalUserProperties = Record<string, unknown>> = {\n key?: string;\n} & TAdditionalUserProperties;\nexport enum AdapterSubscriptionStatus {\n Subscribed = 0,\n Unsubscribed = 1,\n}\nexport enum AdapterConfigurationStatus {\n Unconfigured = 0,\n Configuring = 1,\n Configured = 2,\n}\nexport enum AdapterInitializationStatus {\n Succeeded = 0,\n Failed = 1,\n}\nexport type TAdapterConfiguration = {\n initializationStatus?: AdapterInitializationStatus;\n};\nexport type TAdapterStatus = {\n configurationStatus: AdapterConfigurationStatus;\n subscriptionStatus: AdapterSubscriptionStatus;\n};\nexport const cacheModes = {\n eager: 'eager',\n lazy: 'lazy',\n} as const;\nexport type TCacheModes = (typeof cacheModes)[keyof typeof cacheModes];\nexport type TAdaptersStatus = Record<TAdapterIdentifiers, TAdapterStatus>;\nexport type TAdapterStatusChange = {\n id?: TAdapterIdentifiers;\n status: Partial<TAdapterStatus>;\n};\nexport type TFlagsChange = { id?: TAdapterIdentifiers; flags: TFlags };\nexport type TAdapterEventHandlers = {\n onFlagsStateChange: (flagsChange: TFlagsChange) => void;\n onStatusStateChange: (statusChange: TAdapterStatusChange) => void;\n};\ntype TDefaultAdditionalUserProperties = Record<string, unknown>;\nexport type TBaseAdapterArgs<\n TAdditionalUserProperties = TDefaultAdditionalUserProperties,\n> = {\n user: TUser<TAdditionalUserProperties>;\n cacheIdentifier?: TCacheIdentifiers;\n cacheMode?: TCacheModes;\n};\nexport type TLaunchDarklyContextArgs = { context: LDContext };\nexport type TLaunchDarklyAdapterArgs = TLaunchDarklyContextArgs & {\n sdk: {\n clientSideId: string;\n clientOptions?: TLDOptions;\n };\n flags?: TFlags;\n throwOnInitializationFailure?: boolean;\n initializationTimeout?: number;\n flagsUpdateDelayMs?: number;\n cacheIdentifier?: TCacheIdentifiers;\n cacheMode?: TCacheModes;\n};\nexport type TGraphQlAdapterArgs<\n TAdditionalUserProperties = TDefaultAdditionalUserProperties,\n> = TBaseAdapterArgs<TAdditionalUserProperties> & {\n fetcher?: typeof fetch;\n uri: string;\n query: string;\n pollingIntervalMs?: number;\n getQueryVariables?: (adapterArgs: TGraphQlAdapterArgs) => unknown;\n getRequestHeaders?: (\n adapterArgs: TGraphQlAdapterArgs\n ) => Record<string, string>;\n parseFlags?: <TFetchedFlags = unknown, TParsedFlags = TFlags>(\n fetchedFlags: TFetchedFlags\n ) => TParsedFlags;\n};\nexport type THttpAdapterArgs<\n TAdditionalUserProperties = TDefaultAdditionalUserProperties,\n> = TBaseAdapterArgs<TAdditionalUserProperties> & {\n execute: <\n TPassedAdapterArgs extends TBaseAdapterArgs<TAdditionalUserProperties>,\n >(\n adapterArgs: TPassedAdapterArgs\n ) => Promise<any>;\n pollingIntervalMs?: number;\n};\nexport type TLocalStorageAdapterArgs<\n TAdditionalUserProperties = TDefaultAdditionalUserProperties,\n> = TBaseAdapterArgs<TAdditionalUserProperties> & {\n pollingIntervalMs?: number;\n};\nexport type TMemoryAdapterArgs<\n TAdditionalUserProperties = TDefaultAdditionalUserProperties,\n> = TBaseAdapterArgs<TAdditionalUserProperties>;\nexport type TSplitioAdapterArgs = TBaseAdapterArgs & {\n sdk: {\n authorizationKey: string;\n options?: Record<string, unknown> & { core?: Record<string, string> };\n // Matches the signature of SplitIO.Attributes\n treatmentAttributes?: Record<\n string,\n string | number | boolean | Array<string | number>\n >;\n };\n};\nexport type TCombinedAdapterArgs<\n TAdditionalUserProperties = TDefaultAdditionalUserProperties,\n TAdditionalHttpUserProperties = TDefaultAdditionalUserProperties,\n TAdditionalGraphQlUserProperties = TDefaultAdditionalUserProperties,\n TAdditionalLocalStorageUserProperties = TDefaultAdditionalUserProperties,\n TAdditionalMemoryUserProperties = TDefaultAdditionalUserProperties,\n> = TBaseAdapterArgs<TAdditionalUserProperties> & {\n launchdarkly?: TLaunchDarklyAdapterArgs;\n localstorage?: TLocalStorageAdapterArgs<TAdditionalLocalStorageUserProperties>;\n memory?: TMemoryAdapterArgs<TAdditionalMemoryUserProperties>;\n splitio?: TSplitioAdapterArgs;\n graphql?: TGraphQlAdapterArgs<TAdditionalGraphQlUserProperties>;\n http?: THttpAdapterArgs<TAdditionalHttpUserProperties>;\n};\nexport type TAdapterArgs =\n | TLaunchDarklyAdapterArgs\n | TLocalStorageAdapterArgs\n | TMemoryAdapterArgs\n | TSplitioAdapterArgs\n | TGraphQlAdapterArgs\n | THttpAdapterArgs\n | TCombinedAdapterArgs;\n\nexport const adapterIdentifiers = {\n launchdarkly: 'launchdarkly',\n localstorage: 'localstorage',\n memory: 'memory',\n splitio: 'splitio',\n graphql: 'graphql',\n http: 'http',\n combined: 'combined',\n} as const;\nexport type TAdapterIdentifiers =\n | (typeof adapterIdentifiers)[keyof typeof adapterIdentifiers]\n | string;\nexport type TFlagsContext = Record<TAdapterIdentifiers, TFlags>;\nexport const cacheIdentifiers = {\n local: 'local',\n session: 'session',\n} as const;\nexport type TCacheIdentifiers =\n (typeof cacheIdentifiers)[keyof typeof cacheIdentifiers];\nexport type TUpdateFlagsOptions = {\n lockFlags?: boolean;\n unsubscribeFlags?: boolean;\n};\nexport type TFlagsUpdateFunction = (\n flags: TFlags,\n options?: TUpdateFlagsOptions\n) => void;\n\nexport interface TAdapterInterface<Args extends TAdapterArgs> {\n // Identifiers are used to uniquely identify an interface when performing a condition check.\n id: TAdapterIdentifiers;\n // Used if a combined adapter intends to affect variaus other adapter's feature states\n effectIds?: TAdapterIdentifiers[];\n configure: (\n adapterArgs: Args,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: Args,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n configurationStatus: AdapterConfigurationStatus\n ) => boolean;\n setConfigurationStatus?: (\n nextConfigurationStatus: AdapterConfigurationStatus\n ) => void;\n waitUntilConfigured?: () => Promise<unknown>;\n reset?: () => void;\n getFlag?: (flagName: TFlagName) => TFlagVariation | undefined;\n unsubscribe: () => void;\n subscribe: () => void;\n updateFlags: TFlagsUpdateFunction;\n getUser?: () => TUser | undefined;\n}\n\nexport interface TLaunchDarklyAdapterInterface\n extends TAdapterInterface<TLaunchDarklyAdapterArgs> {\n id: typeof adapterIdentifiers.launchdarkly;\n configure: (\n adapterArgs: TLaunchDarklyAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: TLaunchDarklyAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n getClient: () => TLDClient | undefined;\n getFlag: (flagName: TFlagName) => TFlagVariation | undefined;\n updateClientContext: (\n updatedContextProps: TLaunchDarklyAdapterArgs['context']\n ) => Promise<unknown>;\n unsubscribe: () => void;\n subscribe: () => void;\n}\n\nexport interface TLocalStorageAdapterInterface\n extends TAdapterInterface<TLocalStorageAdapterArgs> {\n id: typeof adapterIdentifiers.localstorage;\n configure: (\n adapterArgs: TLocalStorageAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: TLocalStorageAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n waitUntilConfigured: () => Promise<unknown>;\n unsubscribe: () => void;\n subscribe: () => void;\n}\n\nexport interface TGraphQlAdapterInterface\n extends TAdapterInterface<TGraphQlAdapterArgs> {\n id: typeof adapterIdentifiers.graphql;\n configure: (\n adapterArgs: TGraphQlAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: TGraphQlAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n waitUntilConfigured: () => Promise<unknown>;\n unsubscribe: () => void;\n subscribe: () => void;\n}\n\nexport interface THttpAdapterInterface\n extends TAdapterInterface<THttpAdapterArgs> {\n id: typeof adapterIdentifiers.http;\n configure: (\n adapterArgs: THttpAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: THttpAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n waitUntilConfigured: () => Promise<unknown>;\n unsubscribe: () => void;\n subscribe: () => void;\n}\n\nexport interface TMemoryAdapterInterface\n extends TAdapterInterface<TMemoryAdapterArgs> {\n id: typeof adapterIdentifiers.memory;\n configure: (\n adapterArgs: TMemoryAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: TMemoryAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n waitUntilConfigured: () => Promise<unknown>;\n reset: () => void;\n updateFlags: TFlagsUpdateFunction;\n unsubscribe: () => void;\n subscribe: () => void;\n}\n\nexport interface TCombinedAdapterInterface\n extends TAdapterInterface<TCombinedAdapterArgs> {\n id: typeof adapterIdentifiers.combined;\n effectIds?: TAdapterIdentifiers[];\n combine: <TAdapterInstance extends TAdapter>(\n adapters: TAdapterInstance[]\n ) => void;\n configure: (\n adapterArgs: TCombinedAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: TCombinedAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n waitUntilConfigured: () => Promise<unknown>;\n reset: () => void;\n updateFlags: TFlagsUpdateFunction;\n unsubscribe: () => void;\n subscribe: () => void;\n}\n\nexport interface TSplitioAdapterInterface\n extends TAdapterInterface<TSplitioAdapterArgs> {\n id: typeof adapterIdentifiers.splitio;\n configure: (\n adapterArgs: TSplitioAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n reconfigure: (\n adapterArgs: TSplitioAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) => Promise<TAdapterConfiguration>;\n getIsConfigurationStatus: (\n adapterConfigurationStatus: AdapterConfigurationStatus\n ) => boolean;\n unsubscribe: () => void;\n subscribe: () => void;\n}\nexport type TAdapter =\n | TLaunchDarklyAdapterInterface\n | TLocalStorageAdapterInterface\n | TMemoryAdapterInterface\n | TSplitioAdapterInterface\n | TGraphQlAdapterInterface\n | THttpAdapterInterface\n | TCombinedAdapterInterface;\nexport type TConfigureAdapterArgs<TAdapterInstance extends TAdapter> =\n TAdapterInstance extends TLaunchDarklyAdapterInterface\n ? TLaunchDarklyAdapterArgs\n : TAdapterInstance extends TLocalStorageAdapterInterface\n ? TLocalStorageAdapterArgs\n : TAdapterInstance extends TMemoryAdapterInterface\n ? TMemoryAdapterArgs\n : TAdapterInstance extends TSplitioAdapterInterface\n ? TSplitioAdapterArgs\n : TAdapterInstance extends TGraphQlAdapterInterface\n ? TGraphQlAdapterArgs\n : TAdapterInstance extends THttpAdapterInterface\n ? THttpAdapterArgs\n : TAdapterInstance extends TCombinedAdapterInterface\n ? TCombinedAdapterArgs\n : never;\nexport type TConfigureAdapterProps<TAdapterInstance extends TAdapter> = {\n adapter: TAdapterInstance extends TLaunchDarklyAdapterInterface\n ? TLaunchDarklyAdapterInterface\n : TAdapterInstance extends TLocalStorageAdapterInterface\n ? TLocalStorageAdapterInterface\n : TAdapterInstance extends TMemoryAdapterInterface\n ? TMemoryAdapterInterface\n : TAdapterInstance extends TSplitioAdapterInterface\n ? TSplitioAdapterInterface\n : TAdapterInstance extends TGraphQlAdapterInterface\n ? TGraphQlAdapterInterface\n : TAdapterInstance extends THttpAdapterInterface\n ? THttpAdapterInterface\n : TAdapterInstance extends TCombinedAdapterInterface\n ? TCombinedAdapterInterface\n : never;\n adapterArgs: TConfigureAdapterArgs<TAdapterInstance>;\n};\nexport type TAdapterReconfigurationOptions = {\n shouldOverwrite?: boolean;\n};\nexport type TAdapterReconfiguration = {\n adapterArgs: TAdapterArgs;\n options: TAdapterReconfigurationOptions;\n};\nexport type TConfigureAdapterChildrenAsFunctionArgs = {\n isAdapterConfigured: boolean;\n};\nexport type TConfigureAdapterChildrenAsFunction = (\n args: TConfigureAdapterChildrenAsFunctionArgs\n) => React.ReactNode;\nexport type TConfigureAdapterChildren =\n | TConfigureAdapterChildrenAsFunction\n | React.ReactNode;\nexport type TReconfigureAdapter = (\n adapterArgs: TAdapterArgs,\n options: TAdapterReconfigurationOptions\n) => void;\nexport type TAdapterContext = {\n adapterEffectIdentifiers: TAdapterIdentifiers[];\n reconfigure: TReconfigureAdapter;\n status?: TAdaptersStatus;\n};\n\ntype TLaunchDarklyFlopflipGlobal = {\n adapter: TLaunchDarklyAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\ntype TSplitioAdapterGlobal = {\n adapter: TSplitioAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\ntype TMemoryAdapterGlobal = {\n adapter: TMemoryAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\ntype TLocalStorageAdapterGlobal = {\n adapter: TLocalStorageAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\ntype TGraphQlAdapterGlobal = {\n adapter: TLocalStorageAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\ntype THttpAdapterGlobal = {\n adapter: TLocalStorageAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\ntype TCombinedAdapterGlobal = {\n adapter: TCombinedAdapterInterface;\n updateFlags: TFlagsUpdateFunction;\n};\n\nexport type TFlopflipGlobal = {\n [adapterIdentifiers.launchdarkly]?: TLaunchDarklyFlopflipGlobal;\n [adapterIdentifiers.splitio]?: TSplitioAdapterGlobal;\n [adapterIdentifiers.memory]?: TMemoryAdapterGlobal;\n [adapterIdentifiers.localstorage]?: TLocalStorageAdapterGlobal;\n [adapterIdentifiers.graphql]?: TGraphQlAdapterGlobal;\n [adapterIdentifiers.http]?: THttpAdapterGlobal;\n [adapterIdentifiers.combined]?: TCombinedAdapterGlobal;\n};\ndeclare global {\n interface Window {\n __flopflip__: TFlopflipGlobal;\n }\n}\nexport type TDiff<ExcludedFrom, ToExclude> = Pick<\n ExcludedFrom,\n Exclude<keyof ExcludedFrom, keyof ToExclude>\n>;\nexport type TCache = {\n get: <T = any>(key: string) => T;\n set: (key: string, value: any) => boolean;\n unset: (key: string) => void;\n};\nexport type TCacheOptions = {\n prefix: string;\n};\n"]}