diff --git a/packages/experiment-browser/src/factory.ts b/packages/experiment-browser/src/factory.ts index 5904901a..5f880189 100644 --- a/packages/experiment-browser/src/factory.ts +++ b/packages/experiment-browser/src/factory.ts @@ -1,11 +1,14 @@ import { AnalyticsConnector } from '@amplitude/analytics-connector'; +import { safeGlobal } from '@amplitude/experiment-core'; import { Defaults, ExperimentConfig } from './config'; import { ExperimentClient } from './experimentClient'; import { AmplitudeIntegrationPlugin } from './integration/amplitude'; import { DefaultUserProvider } from './providers/default'; -const instances = {}; +// Global instances for debugging. +safeGlobal.experimentInstances = {}; +const instances = safeGlobal.experimentInstances; const getInstanceName = (config: ExperimentConfig): string => { return config?.instanceName || Defaults.instanceName; @@ -18,7 +21,7 @@ const getInstanceName = (config: ExperimentConfig): string => { * @param apiKey The deployment API Key * @param config See {@link ExperimentConfig} for config options */ -const initialize = ( +export const initialize = ( apiKey: string, config?: ExperimentConfig, ): ExperimentClient => { @@ -52,7 +55,7 @@ const initialize = ( * @param apiKey The deployment API Key * @param config See {@link ExperimentConfig} for config options */ -const initializeWithAmplitudeAnalytics = ( +export const initializeWithAmplitudeAnalytics = ( apiKey: string, config?: ExperimentConfig, ): ExperimentClient => { diff --git a/packages/experiment-browser/src/index.ts b/packages/experiment-browser/src/index.ts index 958502d8..f19e72a8 100644 --- a/packages/experiment-browser/src/index.ts +++ b/packages/experiment-browser/src/index.ts @@ -11,7 +11,11 @@ export { AmplitudeAnalyticsProvider, } from './providers/amplitude'; export { AmplitudeIntegrationPlugin } from './integration/amplitude'; -export { Experiment } from './factory'; +export { + Experiment, + initialize, + initializeWithAmplitudeAnalytics, +} from './factory'; export { StubExperimentClient } from './stubClient'; export { ExperimentClient } from './experimentClient'; export { Client, FetchOptions } from './types/client'; diff --git a/packages/experiment-tag/src/experiment.ts b/packages/experiment-tag/src/experiment.ts index d81bab0e..7391842d 100644 --- a/packages/experiment-tag/src/experiment.ts +++ b/packages/experiment-tag/src/experiment.ts @@ -5,6 +5,7 @@ import { getGlobalScope, isLocalStorageAvailable, } from '@amplitude/experiment-core'; +import { safeGlobal } from '@amplitude/experiment-core'; import { Experiment, ExperimentUser, @@ -12,6 +13,7 @@ import { Variants, AmplitudeIntegrationPlugin, } from '@amplitude/experiment-js-client'; +import * as FeatureExperiment from '@amplitude/experiment-js-client'; import mutate, { MutationController } from 'dom-mutator'; import { getInjectUtils } from './inject-utils'; @@ -24,6 +26,8 @@ import { concatenateQueryParamsOf, } from './util'; +safeGlobal.Experiment = FeatureExperiment; + const appliedInjections: Set = new Set(); const appliedMutations: MutationController[] = []; let previousUrl: string | undefined; diff --git a/packages/experiment-tag/test/experiment.test.ts b/packages/experiment-tag/test/experiment.test.ts index d9d5c1f5..5509d865 100644 --- a/packages/experiment-tag/test/experiment.test.ts +++ b/packages/experiment-tag/test/experiment.test.ts @@ -1,4 +1,5 @@ import * as coreUtil from '@amplitude/experiment-core'; +import { safeGlobal } from '@amplitude/experiment-core'; import { ExperimentClient } from '@amplitude/experiment-js-client'; import { initializeExperiment } from 'src/experiment'; import * as experiment from 'src/experiment'; @@ -736,3 +737,7 @@ describe('initializeExperiment', () => { expect(mockExposure).not.toHaveBeenCalled(); }); }); + +test('feature experiment on global Experiment object', () => { + expect(safeGlobal.Experiment).toBeDefined(); +});