@flopflip/memory-adapter
Version:
An in memory adapter for flipflop
217 lines (207 loc) • 9.05 kB
JavaScript
"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