UNPKG

@flopflip/memory-adapter

Version:

An in memory adapter for flipflop

217 lines (207 loc) 9.05 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var __defProp = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __typeError = (msg) => { throw TypeError(msg); }; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/adapter.ts var _adapterutilities = require('@flopflip/adapter-utilities'); var _types = require('@flopflip/types'); var _mitt = require('mitt'); var _mitt2 = _interopRequireDefault(_mitt); var _tinywarning = require('tiny-warning'); var _tinywarning2 = _interopRequireDefault(_tinywarning); var intialAdapterState = { configurationStatus: _types.AdapterConfigurationStatus.Unconfigured, subscriptionStatus: _types.AdapterSubscriptionStatus.Subscribed, flags: {}, lockedFlags: /* @__PURE__ */ new Set(), user: {}, emitter: _mitt2.default.call(void 0, ) }; var ___internalConfiguredStatusChange__, _adapterState, _getIsAdapterUnsubscribed, _getIsFlagLocked, _updateUser; var MemoryAdapter = class { constructor() { __privateAdd(this, ___internalConfiguredStatusChange__, "__internalConfiguredStatusChange__"); __privateAdd(this, _adapterState); __privateAdd(this, _getIsAdapterUnsubscribed, () => __privateGet(this, _adapterState).subscriptionStatus === _types.AdapterSubscriptionStatus.Unsubscribed); __privateAdd(this, _getIsFlagLocked, (flagName) => __privateGet(this, _adapterState).lockedFlags.has(flagName)); __privateAdd(this, _updateUser, (user) => { __privateGet(this, _adapterState).user = user; }); this.getUser = () => __privateGet(this, _adapterState).user; this.updateFlags = (flags, options) => { const isAdapterConfigured = this.getIsConfigurationStatus( _types.AdapterConfigurationStatus.Configured ); _tinywarning2.default.call(void 0, isAdapterConfigured, "@flopflip/memory-adapter: adapter is not configured. Flags can not be updated before." ); if (!isAdapterConfigured) { return; } for (const [flagName, flagValue] of Object.entries(flags)) { const [normalizedFlagName, normalizedFlagValue] = _adapterutilities.normalizeFlag.call(void 0, flagName, flagValue ); if (__privateGet(this, _getIsFlagLocked).call(this, normalizedFlagName)) { return; } if (options == null ? void 0 : options.lockFlags) { __privateGet(this, _adapterState).lockedFlags.add(normalizedFlagName); } __privateGet(this, _adapterState).flags = __spreadProps(__spreadValues({}, __privateGet(this, _adapterState).flags), { [normalizedFlagName]: normalizedFlagValue }); } __privateGet(this, _adapterState).emitter.emit( "flagsStateChange", __privateGet(this, _adapterState).flags ); }; this.reset = () => { __privateSet(this, _adapterState, __spreadValues({}, intialAdapterState)); }; this.unsubscribe = () => { __privateGet(this, _adapterState).subscriptionStatus = _types.AdapterSubscriptionStatus.Unsubscribed; }; this.subscribe = () => { __privateGet(this, _adapterState).subscriptionStatus = _types.AdapterSubscriptionStatus.Subscribed; }; __privateSet(this, _adapterState, __spreadValues({}, intialAdapterState)); this.id = _types.adapterIdentifiers.memory; } configure(adapterArgs, adapterEventHandlers) { return __async(this, null, function* () { const handleFlagsChange = (nextFlags) => { if (__privateGet(this, _getIsAdapterUnsubscribed).call(this)) { return; } adapterEventHandlers.onFlagsStateChange({ flags: nextFlags, id: this.id }); }; const handleStatusChange = (nextStatus) => { if (__privateGet(this, _getIsAdapterUnsubscribed).call(this)) { return; } adapterEventHandlers.onStatusStateChange({ status: nextStatus, id: this.id }); }; __privateGet(this, _adapterState).emitter.on("flagsStateChange", handleFlagsChange); __privateGet(this, _adapterState).emitter.on("statusStateChange", handleStatusChange); this.setConfigurationStatus(_types.AdapterConfigurationStatus.Configuring); const { user } = adapterArgs; __privateGet(this, _adapterState).user = user; return Promise.resolve().then(() => { __privateGet(this, _adapterState).flags = {}; __privateGet(this, _updateUser).call(this, user); this.setConfigurationStatus(_types.AdapterConfigurationStatus.Configured); __privateGet(this, _adapterState).emitter.emit( "flagsStateChange", __privateGet(this, _adapterState).flags ); __privateGet(this, _adapterState).emitter.emit(__privateGet(this, ___internalConfiguredStatusChange__)); return { initializationStatus: _types.AdapterInitializationStatus.Succeeded }; }); }); } reconfigure(adapterArgs, _adapterEventHandlers) { return __async(this, null, function* () { this.setConfigurationStatus(_types.AdapterConfigurationStatus.Configuring); __privateGet(this, _updateUser).call(this, adapterArgs.user); __privateGet(this, _adapterState).flags = {}; this.setConfigurationStatus(_types.AdapterConfigurationStatus.Configured); __privateGet(this, _adapterState).emitter.emit( "flagsStateChange", __privateGet(this, _adapterState).flags ); return Promise.resolve({ initializationStatus: _types.AdapterInitializationStatus.Succeeded }); }); } getIsConfigurationStatus(configurationStatus) { return __privateGet(this, _adapterState).configurationStatus === configurationStatus; } setConfigurationStatus(nextConfigurationStatus) { __privateGet(this, _adapterState).configurationStatus = nextConfigurationStatus; __privateGet(this, _adapterState).emitter.emit("statusStateChange", { configurationStatus: __privateGet(this, _adapterState).configurationStatus }); } waitUntilConfigured() { return __async(this, null, function* () { return new Promise((resolve) => { if (this.getIsConfigurationStatus(_types.AdapterConfigurationStatus.Configured)) { resolve(); } else { __privateGet(this, _adapterState).emitter.on( __privateGet(this, ___internalConfiguredStatusChange__), resolve ); } }); }); } getFlag(flagName) { var _a; return (_a = __privateGet(this, _adapterState)) == null ? void 0 : _a.flags[flagName]; } }; ___internalConfiguredStatusChange__ = new WeakMap(); _adapterState = new WeakMap(); _getIsAdapterUnsubscribed = new WeakMap(); _getIsFlagLocked = new WeakMap(); _updateUser = new WeakMap(); var adapter = new MemoryAdapter(); _adapterutilities.exposeGlobally.call(void 0, adapter); // src/index.ts var version = "__@FLOPFLIP/VERSION_OF_RELEASE__"; exports.adapter = adapter; exports.version = version; //# sourceMappingURL=index.cjs.map