@v4fire/client
Version:
V4Fire client core library
55 lines (45 loc) • 1.14 kB
text/typescript
/*!
* V4Fire Client Core
* https://github.com/V4Fire/Client
*
* Released under the MIT license
* https://github.com/V4Fire/Client/blob/master/LICENSE
*/
/**
* [[include:core/abt/README.md]]
* @packageDocumentation
*/
import state from 'core/component/state';
import adapter from 'core/abt/engines';
import { emitter } from 'core/abt/const';
import type { ExperimentsSet } from 'core/abt/interface';
export * from 'core/abt/const';
export * from 'core/abt/interface';
/**
* Saves the specified ABT options
*
* @param opts
* @emits `set(config:` [[ExperimentsSet]]`)`
* @emits `clear(config:` [[ExperimentsSet]]`)`
*/
export default async function saveABT(opts: unknown): Promise<void> {
let
config = <CanPromise<CanUndef<ExperimentsSet>>>adapter(opts);
if (Object.isPromise(config)) {
try {
config = await config;
} catch (err) {
stderr(err);
config = undefined;
}
}
if (Object.isArray(config)) {
if (!Object.fastCompare(state.experiments, config)) {
state.experiments = config;
emitter.emit('set', config);
}
} else {
state.experiments = [];
emitter.emit('clear', config);
}
}