@flagship.io/react-sdk
Version:
Flagship REACT SDK
1,156 lines (1,034 loc) • 97.2 kB
JavaScript
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./src/FSFlag.ts":
/*!***********************!*\
!*** ./src/FSFlag.ts ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ FSFlag: () => (/* binding */ FSFlag)
/* harmony export */ });
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.flags.js */ "./node_modules/core-js/modules/es.regexp.flags.js");
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class FSFlag {
constructor(key, state) {
_defineProperty(this, "key", void 0);
_defineProperty(this, "flag", void 0);
const flagsData = state.flags;
if (!state.hasVisitorData) {
(0,_utils__WEBPACK_IMPORTED_MODULE_1__.logWarn)(_deps__WEBPACK_IMPORTED_MODULE_2__.Flagship.getConfig(), _constants__WEBPACK_IMPORTED_MODULE_3__.noVisitorMessage, 'GetFlag');
}
this.key = key;
this.flag = flagsData === null || flagsData === void 0 ? void 0 : flagsData.get(key);
}
getValue(defaultValue) {
if (!this.flag) {
return defaultValue;
}
if (this.flag.value === null || this.flag.value === undefined) {
return defaultValue;
}
if (defaultValue !== null && defaultValue !== undefined && !(0,_utils__WEBPACK_IMPORTED_MODULE_1__.hasSameType)(this.flag.value, defaultValue)) {
(0,_utils__WEBPACK_IMPORTED_MODULE_1__.logInfo)(_deps__WEBPACK_IMPORTED_MODULE_2__.Flagship.getConfig(), (0,_utils__WEBPACK_IMPORTED_MODULE_1__.sprintf)(_constants__WEBPACK_IMPORTED_MODULE_3__.GET_FLAG_CAST_ERROR, this.key), 'getValue');
return defaultValue;
}
return this.flag.value;
}
exists() {
if (!this.flag) {
return false;
}
return !!(this.flag.campaignId && this.flag.variationId && this.flag.variationGroupId);
}
async visitorExposed() {
// do nothing
}
get metadata() {
if (!this.flag) {
return _deps__WEBPACK_IMPORTED_MODULE_2__.FSFlagMetadata.Empty();
}
return new _deps__WEBPACK_IMPORTED_MODULE_2__.FSFlagMetadata({
campaignId: this.flag.campaignId,
campaignName: this.flag.campaignName,
variationGroupId: this.flag.variationGroupId,
variationGroupName: this.flag.variationGroupName,
variationId: this.flag.variationId,
variationName: this.flag.variationName,
isReference: !!this.flag.isReference,
campaignType: this.flag.campaignType,
slug: this.flag.slug
});
}
get status() {
if (!this.exists()) {
return _deps__WEBPACK_IMPORTED_MODULE_2__.FSFlagStatus.NOT_FOUND;
}
return _deps__WEBPACK_IMPORTED_MODULE_2__.FSFlagStatus.FETCHED;
}
}
/***/ }),
/***/ "./src/FlagshipContext.tsx":
/*!*********************************!*\
!*** ./src/FlagshipContext.tsx ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ FlagshipContext: () => (/* binding */ FlagshipContext),
/* harmony export */ initStat: () => (/* binding */ initStat)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @flagship.io/js-sdk */ "@flagship.io/js-sdk");
/* harmony import */ var _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1__);
"use client";
const initStat = {
isInitializing: true,
sdkStatus: _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_NOT_INITIALIZED
};
const FlagshipContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({
state: {
...initStat
}
});
/***/ }),
/***/ "./src/FlagshipHooks.ts":
/*!******************************!*\
!*** ./src/FlagshipHooks.ts ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useFlagship: () => (/* binding */ useFlagship),
/* harmony export */ useFsFlag: () => (/* binding */ useFsFlag)
/* harmony export */ });
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.flags.js */ "./node_modules/core-js/modules/es.regexp.flags.js");
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
/* harmony import */ var _FlagshipContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FlagshipContext */ "./src/FlagshipContext.tsx");
/* harmony import */ var _FSFlag__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FSFlag */ "./src/FSFlag.ts");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hooks */ "./src/hooks.ts");
'use client';
/**
* This hook returns a flag object by its key. If no flag match the given key an empty flag will be returned.
* @param key
* @param defaultValue
* @returns
*/
const useFsFlag = key => {
const {
state
} = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_FlagshipContext__WEBPACK_IMPORTED_MODULE_2__.FlagshipContext);
const {
visitor
} = state;
if (!visitor) {
return new _FSFlag__WEBPACK_IMPORTED_MODULE_3__.FSFlag(key, state);
}
return visitor.getFlag(key);
};
const handleContextChange = param => {
const {
updateFunction,
functionName,
visitor,
config
} = param;
if (!visitor) {
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(config, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
return;
}
const originalContextClone = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deepClone)(visitor.context);
updateFunction();
const updatedContext = visitor.context;
if ((0,_utils__WEBPACK_IMPORTED_MODULE_4__.hasContextChanged)(originalContextClone, updatedContext)) {
visitor.fetchFlags();
}
};
const useFlagship = () => {
const {
state
} = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_FlagshipContext__WEBPACK_IMPORTED_MODULE_2__.FlagshipContext);
const {
visitor,
config
} = state;
const visitorRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_6__.useLatestRef)(visitor);
const configRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_6__.useLatestRef)(config);
const stateRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_6__.useLatestRef)(state);
const visitorContext = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => ({
...(visitor === null || visitor === void 0 ? void 0 : visitor.context)
}), [JSON.stringify(visitor === null || visitor === void 0 ? void 0 : visitor.context)]);
const fsUpdateContext = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(context => {
handleContextChange({
config: configRef.current,
visitor: visitorRef.current,
updateFunction: () => {
var _visitorRef$current;
return (_visitorRef$current = visitorRef.current) === null || _visitorRef$current === void 0 ? void 0 : _visitorRef$current.updateContext(context);
},
functionName: 'updateContext'
});
}, []);
const fsClearContext = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
handleContextChange({
config: configRef.current,
visitor: visitorRef.current,
updateFunction: () => {
var _visitorRef$current2;
return (_visitorRef$current2 = visitorRef.current) === null || _visitorRef$current2 === void 0 ? void 0 : _visitorRef$current2.clearContext();
},
functionName: 'cleanContext'
});
}, []);
const fsAuthenticate = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(visitorId => {
const functionName = 'authenticate';
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
return;
}
const originalVisitorId = currentVisitor.visitorId;
currentVisitor.authenticate(visitorId);
if (originalVisitorId !== visitorId) {
currentVisitor.fetchFlags();
}
}, []);
const fsUnauthenticate = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
const functionName = 'unauthenticate';
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
return;
}
const originalVisitorId = currentVisitor.visitorId;
currentVisitor.unauthenticate();
if (originalVisitorId !== currentVisitor.visitorId) {
currentVisitor.fetchFlags();
}
}, []);
const fsSendHit = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(hit => {
const functionName = 'sendHit';
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
return Promise.resolve();
}
if (Array.isArray(hit)) {
return currentVisitor.sendHits(hit);
}
return currentVisitor.sendHit(hit);
}, []);
const getFlag = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(key => {
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
return new _FSFlag__WEBPACK_IMPORTED_MODULE_3__.FSFlag(key, stateRef.current);
}
return currentVisitor.getFlag(key);
}, []);
const fetchFlags = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async () => {
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logWarn)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, 'fetchFlags');
return Promise.resolve();
}
return currentVisitor.fetchFlags();
}, []);
const setConsent = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(hasConsented => {
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logWarn)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, 'setConsent');
return;
}
currentVisitor.setConsent(hasConsented);
}, []);
const close = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
return _deps__WEBPACK_IMPORTED_MODULE_7__.Flagship.close();
}, []);
const getFlags = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
var _stateRef$current$fla;
const flags = new Map();
(_stateRef$current$fla = stateRef.current.flags) === null || _stateRef$current$fla === void 0 || _stateRef$current$fla.forEach((flag, key) => {
flags.set(key, new _FSFlag__WEBPACK_IMPORTED_MODULE_3__.FSFlag(key, stateRef.current));
});
return new _deps__WEBPACK_IMPORTED_MODULE_7__.FSFlagCollection({
flags
});
}
return currentVisitor.getFlags();
}, []);
const collectEAIEventsAsync = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async (...args) => {
const currentVisitor = visitorRef.current;
if (!currentVisitor) {
return;
}
return currentVisitor.collectEAIEventsAsync(...args);
}, []);
return (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => ({
visitorId: visitor === null || visitor === void 0 ? void 0 : visitor.visitorId,
anonymousId: visitor === null || visitor === void 0 ? void 0 : visitor.anonymousId,
context: visitorContext,
hasConsented: visitor === null || visitor === void 0 ? void 0 : visitor.hasConsented,
sdkStatus: state.sdkStatus,
flagsStatus: state.flagsStatus,
setConsent,
updateContext: fsUpdateContext,
clearContext: fsClearContext,
authenticate: fsAuthenticate,
unauthenticate: fsUnauthenticate,
sendHits: fsSendHit,
getFlag,
fetchFlags,
close,
getFlags,
collectEAIEventsAsync
}), [visitor === null || visitor === void 0 ? void 0 : visitor.visitorId, visitor === null || visitor === void 0 ? void 0 : visitor.anonymousId, visitor === null || visitor === void 0 ? void 0 : visitor.hasConsented, visitorContext, state.sdkStatus, state.flagsStatus, setConsent, fsUpdateContext, fsClearContext, fsAuthenticate, fsUnauthenticate, fsSendHit, getFlag, fetchFlags, close, getFlags, collectEAIEventsAsync]);
};
/***/ }),
/***/ "./src/FlagshipProvider.tsx":
/*!**********************************!*\
!*** ./src/FlagshipProvider.tsx ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ FlagshipProvider: () => (/* binding */ FlagshipProvider)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _FlagshipContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FlagshipContext */ "./src/FlagshipContext.tsx");
/* harmony import */ var _internalType__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./internalType */ "./src/internalType.ts");
/* harmony import */ var _sdkVersion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdkVersion */ "./src/sdkVersion.ts");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ "./src/hooks.ts");
"use client";
function FlagshipProvider({
children,
envId,
apiKey,
decisionMode = _deps__WEBPACK_IMPORTED_MODULE_1__.DecisionMode.DECISION_API,
visitorData,
loadingComponent,
onSdkStatusChanged,
onBucketingUpdated,
initialCampaigns,
initialFlagsData,
fetchFlagsOnBucketingUpdated,
hitDeduplicationTime = 2,
fetchNow = true,
language = 1,
sdkVersion = _sdkVersion__WEBPACK_IMPORTED_MODULE_2__.version,
onFlagsStatusChanged,
shouldSaveInstance,
...props
}) {
const flags = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils__WEBPACK_IMPORTED_MODULE_3__.extractFlagsMap)(initialFlagsData, initialCampaigns), [initialFlagsData, initialCampaigns]);
const [flagshipState, setFlagshipState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
..._FlagshipContext__WEBPACK_IMPORTED_MODULE_4__.initStat,
flags,
hasVisitorData: !!visitorData
});
const [lastModified, setLastModified] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
const flagshipVisitorRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
flagshipVisitorRef.current = flagshipState.visitor;
}, [flagshipState.visitor]);
const propsRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)(props);
const configRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)({
fetchNow,
hitDeduplicationTime,
language,
sdkVersion
});
const callbacksRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)({
onSdkStatusChanged,
onBucketingUpdated,
onFlagsStatusChanged
});
const visitorDataMemo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => visitorData, [visitorData === null || visitorData === void 0 ? void 0 : visitorData.id, visitorData === null || visitorData === void 0 ? void 0 : visitorData.isAuthenticated, visitorData === null || visitorData === void 0 ? void 0 : visitorData.hasConsented, JSON.stringify(visitorData === null || visitorData === void 0 ? void 0 : visitorData.context)]);
// #region functions
const handleBucketingUpdate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(lastUpdate => {
if (callbacksRef.current.onBucketingUpdated) {
callbacksRef.current.onBucketingUpdated(lastUpdate);
}
setLastModified(lastUpdate);
}, []);
const handleFlagsStatusChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({
status,
reason
}) => {
var _callbacksRef$current, _callbacksRef$current2;
(_callbacksRef$current = (_callbacksRef$current2 = callbacksRef.current).onFlagsStatusChanged) === null || _callbacksRef$current === void 0 || _callbacksRef$current.call(_callbacksRef$current2, {
status,
reason
});
setFlagshipState(currentState => ({
...currentState,
flagsStatus: {
status,
reason
}
}));
}, []);
const initializeVisitorState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(param => {
setFlagshipState(currentState => ({
...currentState,
visitor: param.fsVisitor,
config: _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(),
isInitializing: false,
hasVisitorData: !!visitorDataMemo,
sdkStatus: param.sdkStatus
}));
}, [!!visitorDataMemo]);
const handleVisitorReady = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((fsVisitor, error, sdkStatus) => {
if (error) {
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.logError)(_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(), error.message || error, "onReady");
}
initializeVisitorState({
fsVisitor,
sdkStatus
});
}, [initializeVisitorState]);
const createFlagshipVisitor = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(sdkStatus => {
if (!visitorDataMemo) {
return;
}
const fsVisitor = _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.newVisitor({
visitorId: visitorDataMemo.id,
context: visitorDataMemo.context,
isAuthenticated: visitorDataMemo.isAuthenticated,
hasConsented: visitorDataMemo.hasConsented,
initialCampaigns,
initialFlagsData,
onFlagsStatusChanged: handleFlagsStatusChange,
shouldSaveInstance
});
fsVisitor === null || fsVisitor === void 0 || fsVisitor.on("ready", error => {
handleVisitorReady(fsVisitor, error, sdkStatus);
});
if (!fetchNow) {
initializeVisitorState({
fsVisitor,
sdkStatus
});
}
}, [initialCampaigns, initialFlagsData, handleFlagsStatusChange, shouldSaveInstance, fetchNow, handleVisitorReady, initializeVisitorState, visitorDataMemo]);
const handleSdkStatusChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(sdkStatus => {
if (callbacksRef.current.onSdkStatusChanged) {
callbacksRef.current.onSdkStatusChanged(sdkStatus);
}
switch (sdkStatus) {
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_PANIC:
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_INITIALIZED:
createFlagshipVisitor(sdkStatus);
break;
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_NOT_INITIALIZED:
setFlagshipState(prev => ({
...prev,
config: _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(),
isInitializing: false,
sdkStatus
}));
break;
}
}, [createFlagshipVisitor]);
const handleSdkStatusChangeRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)(handleSdkStatusChange);
const handleBucketingUpdateRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)(handleBucketingUpdate);
const initializeFlagshipSdk = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.start(envId, apiKey, {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
decisionMode: decisionMode,
fetchNow: configRef.current.fetchNow,
onSdkStatusChanged: (...args) => handleSdkStatusChangeRef.current(...args),
onBucketingUpdated: (...args) => handleBucketingUpdateRef.current(...args),
hitDeduplicationTime: configRef.current.hitDeduplicationTime,
language: configRef.current.language,
sdkVersion: configRef.current.sdkVersion,
...propsRef.current
});
}, [envId, apiKey, decisionMode, props.isQAModeEnabled]);
const updateFlagshipVisitor = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
if (!visitorDataMemo || _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getStatus() !== _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_INITIALIZED) {
return;
}
const currentVisitor = flagshipVisitorRef.current;
if ((0,_hooks__WEBPACK_IMPORTED_MODULE_5__.shouldRecreateVisitor)(currentVisitor, visitorDataMemo.id, visitorDataMemo.isAuthenticated)) {
currentVisitor === null || currentVisitor === void 0 || currentVisitor.cleanup();
createFlagshipVisitor(_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getStatus());
return;
}
// Update existing visitor
if (currentVisitor) {
(0,_hooks__WEBPACK_IMPORTED_MODULE_5__.updateVisitorData)(currentVisitor, visitorDataMemo.id, visitorDataMemo.context, visitorDataMemo.hasConsented, visitorDataMemo.isAuthenticated);
}
}, [createFlagshipVisitor, visitorDataMemo]);
// #endregion
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.useNonInitialEffect)(() => {
if (fetchFlagsOnBucketingUpdated) {
var _flagshipVisitorRef$c;
(_flagshipVisitorRef$c = flagshipVisitorRef.current) === null || _flagshipVisitorRef$c === void 0 || _flagshipVisitorRef$c.fetchFlags();
}
}, [lastModified, fetchFlagsOnBucketingUpdated]);
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.useNonInitialEffect)(() => {
updateFlagshipVisitor();
}, [updateFlagshipVisitor]);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
initializeFlagshipSdk();
}, [initializeFlagshipSdk]);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
return () => {
var _flagshipVisitorRef$c2;
(_flagshipVisitorRef$c2 = flagshipVisitorRef.current) === null || _flagshipVisitorRef$c2 === void 0 || _flagshipVisitorRef$c2.cleanup();
_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.close();
};
}, []);
const handleDisplay = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
const isFirstInit = !flagshipState.visitor;
if (flagshipState.isInitializing && loadingComponent && isFirstInit && fetchNow) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, loadingComponent);
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, children);
}, [flagshipState.isInitializing, flagshipState.visitor, loadingComponent, fetchNow, children]);
const handleForcedVariations = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {
const {
detail
} = e;
if (detail.forcedReFetchFlags) {
var _flagshipVisitorRef$c3;
(_flagshipVisitorRef$c3 = flagshipVisitorRef.current) === null || _flagshipVisitorRef$c3 === void 0 || _flagshipVisitorRef$c3.fetchFlags();
} else {
setFlagshipState(state => ({
...state,
toggleForcedVariations: !state.toggleForcedVariations
}));
}
}, []);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
var _window, _window$addEventListe;
(_window = window) === null || _window === void 0 || (_window$addEventListe = _window.addEventListener) === null || _window$addEventListe === void 0 || _window$addEventListe.call(_window, _internalType__WEBPACK_IMPORTED_MODULE_6__.INTERNAL_EVENTS.FsTriggerRendering, handleForcedVariations);
globalThis.__abTastyOnTriggerRender__ = arg => {
const event = {
detail: arg
};
handleForcedVariations(event);
};
return () => {
var _window2, _window2$removeEventL;
return (_window2 = window) === null || _window2 === void 0 || (_window2$removeEventL = _window2.removeEventListener) === null || _window2$removeEventL === void 0 ? void 0 : _window2$removeEventL.call(_window2, _internalType__WEBPACK_IMPORTED_MODULE_6__.INTERNAL_EVENTS.FsTriggerRendering, handleForcedVariations);
};
}, [handleForcedVariations]);
const contextValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({
state: flagshipState,
setState: setFlagshipState
}), [flagshipState]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_FlagshipContext__WEBPACK_IMPORTED_MODULE_4__.FlagshipContext.Provider, {
value: contextValue
}, handleDisplay);
}
/***/ }),
/***/ "./src/FlagshipProviderSSR.tsx":
/*!*************************************!*\
!*** ./src/FlagshipProviderSSR.tsx ***!
\*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ FlagshipProviderSSR: () => (/* binding */ FlagshipProviderSSR)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _FlagshipProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FlagshipProvider */ "./src/FlagshipProvider.tsx");
/* harmony import */ var _sdkVersion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdkVersion */ "./src/sdkVersion.ts");
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
async function initFlagship({
envId,
apiKey,
config
}) {
if (_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getStatus() !== _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_NOT_INITIALIZED) {
return _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship;
}
await _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.start(envId, apiKey, {
...config,
fetchNow: false,
sdkVersion: _sdkVersion__WEBPACK_IMPORTED_MODULE_2__.version
});
return _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship;
}
/**
* FlagshipProviderSSR is a server-side rendering component for Flagship.
* It initializes the Flagship SDK and provides the necessary context for rendering.
* This component is designed to be used in server-side environments where you need to fetch and provide
* Flagship data before rendering the React application.
* @returns
*/
async function FlagshipProviderSSR({
children,
envId,
apiKey,
decisionMode = _deps__WEBPACK_IMPORTED_MODULE_1__.DecisionMode.DECISION_API,
visitorData,
loadingComponent,
onSdkStatusChanged,
onBucketingUpdated,
fetchFlagsOnBucketingUpdated,
hitDeduplicationTime = 2,
fetchNow = false,
onFlagsStatusChanged,
shouldSaveInstance,
...props
}) {
const language = 1;
const fs = await initFlagship({
envId,
apiKey,
config: {
...props,
decisionMode: decisionMode,
initialBucketing: props.initialBucketing,
hitDeduplicationTime,
language
}
});
let initialFlagsData = props.initialFlagsData;
if (!props.initialFlagsData && !props.initialCampaigns) {
const visitor = fs.newVisitor({
visitorId: visitorData === null || visitorData === void 0 ? void 0 : visitorData.id,
context: visitorData === null || visitorData === void 0 ? void 0 : visitorData.context,
isAuthenticated: visitorData === null || visitorData === void 0 ? void 0 : visitorData.isAuthenticated,
hasConsented: visitorData === null || visitorData === void 0 ? void 0 : visitorData.hasConsented,
onFlagsStatusChanged,
shouldSaveInstance
});
await visitor.fetchFlags();
initialFlagsData = visitor.getFlags().toJSON();
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_FlagshipProvider__WEBPACK_IMPORTED_MODULE_3__.FlagshipProvider, _extends({
envId: envId,
apiKey: apiKey,
decisionMode: decisionMode,
visitorData: visitorData,
loadingComponent: loadingComponent,
onSdkStatusChanged: onSdkStatusChanged,
onBucketingUpdated: onBucketingUpdated,
initialFlagsData: initialFlagsData,
fetchFlagsOnBucketingUpdated: fetchFlagsOnBucketingUpdated,
hitDeduplicationTime: hitDeduplicationTime,
fetchNow: fetchNow,
language: language,
sdkVersion: _sdkVersion__WEBPACK_IMPORTED_MODULE_2__.version,
onFlagsStatusChanged: onFlagsStatusChanged,
shouldSaveInstance: shouldSaveInstance
}, props), children);
}
/***/ }),
/***/ "./src/constants.ts":
/*!**************************!*\
!*** ./src/constants.ts ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ GET_FLAG_CAST_ERROR: () => (/* binding */ GET_FLAG_CAST_ERROR),
/* harmony export */ GET_METADATA_CAST_ERROR: () => (/* binding */ GET_METADATA_CAST_ERROR),
/* harmony export */ noVisitorDefault: () => (/* binding */ noVisitorDefault),
/* harmony export */ noVisitorMessage: () => (/* binding */ noVisitorMessage)
/* harmony export */ });
const noVisitorMessage = 'flagship Visitor not initialized.';
const noVisitorDefault = 'fsVisitor not initialized, returns default value';
const GET_FLAG_CAST_ERROR = 'Flag for key {0} has a different type. Default value is returned.';
const GET_METADATA_CAST_ERROR = 'Flag for key {0} has a different type with defaultValue, an empty metadata object is returned';
/***/ }),
/***/ "./src/deps.ts":
/*!*********************!*\
!*** ./src/deps.ts ***!
\*********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @flagship.io/js-sdk */ "@flagship.io/js-sdk");
/* harmony import */ var _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/hooks.ts":
/*!**********************!*\
!*** ./src/hooks.ts ***!
\**********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getAuthenticationAction: () => (/* binding */ getAuthenticationAction),
/* harmony export */ shouldRecreateVisitor: () => (/* binding */ shouldRecreateVisitor),
/* harmony export */ shouldUpdateConsent: () => (/* binding */ shouldUpdateConsent),
/* harmony export */ updateVisitorData: () => (/* binding */ updateVisitorData),
/* harmony export */ useLatestRef: () => (/* binding */ useLatestRef)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
'use client';
function useLatestRef(value) {
const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(value);
ref.current = value;
return ref;
}
function shouldRecreateVisitor(currentVisitor, visitorId, isAuthenticated) {
if (!currentVisitor) {
return true;
}
const hasIdChanged = currentVisitor.visitorId !== visitorId;
return hasIdChanged && (!isAuthenticated || isAuthenticated && !!currentVisitor.anonymousId);
}
function shouldUpdateConsent(currentVisitor, hasConsented) {
return currentVisitor.hasConsented !== hasConsented;
}
function getAuthenticationAction(currentVisitor, isAuthenticated) {
if (!currentVisitor.anonymousId && isAuthenticated) {
return "authenticate";
}
if (currentVisitor.anonymousId && !isAuthenticated) {
return "unauthenticate";
}
return null;
}
function updateVisitorData(visitor, visitorId, context, hasConsented, isAuthenticated) {
if (shouldUpdateConsent(visitor, hasConsented)) {
visitor.setConsent(hasConsented !== null && hasConsented !== void 0 ? hasConsented : true);
}
visitor.updateContext(context);
const authAction = getAuthenticationAction(visitor, isAuthenticated);
if (authAction === "authenticate") {
visitor.authenticate(visitorId);
} else if (authAction === "unauthenticate") {
visitor.unauthenticate();
}
visitor.fetchFlags();
}
/***/ }),
/***/ "./src/internalType.ts":
/*!*****************************!*\
!*** ./src/internalType.ts ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ INTERNAL_EVENTS: () => (/* binding */ INTERNAL_EVENTS)
/* harmony export */ });
let INTERNAL_EVENTS = /*#__PURE__*/function (INTERNAL_EVENTS) {
INTERNAL_EVENTS["FsTriggerRendering"] = "FS_TRIGGER_RENDERING";
return INTERNAL_EVENTS;
}({});
/***/ }),
/***/ "./src/sdkVersion.ts":
/*!***************************!*\
!*** ./src/sdkVersion.ts ***!
\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ version: () => (/* binding */ version)
/* harmony export */ });
// Generated by genversion.
const version = '5.2.4';
/***/ }),
/***/ "./src/utils.ts":
/*!**********************!*\
!*** ./src/utils.ts ***!
\**********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ deepClone: () => (/* binding */ deepClone),
/* harmony export */ extractFlagsMap: () => (/* binding */ extractFlagsMap),
/* harmony export */ getFlagsFromCampaigns: () => (/* binding */ getFlagsFromCampaigns),
/* harmony export */ hasContextChanged: () => (/* binding */ hasContextChanged),
/* harmony export */ hasSameType: () => (/* binding */ hasSameType),
/* harmony export */ hexToValue: () => (/* binding */ hexToValue),
/* harmony export */ logError: () => (/* binding */ logError),
/* harmony export */ logInfo: () => (/* binding */ logInfo),
/* harmony export */ logWarn: () => (/* binding */ logWarn),
/* harmony export */ sprintf: () => (/* binding */ sprintf),
/* harmony export */ useNonInitialEffect: () => (/* binding */ useNonInitialEffect),
/* harmony export */ uuidV4: () => (/* binding */ uuidV4)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_1__);
'use client';
function logError(config, message, tag) {
if (!config || !config.logLevel || config.logLevel < _deps__WEBPACK_IMPORTED_MODULE_1__.LogLevel.ERROR) {
return;
}
if (typeof config.onLog === 'function') {
config.onLog(_deps__WEBPACK_IMPORTED_MODULE_1__.LogLevel.ERROR, tag, message);
}
if (config.logManager && typeof config.logManager.error === 'function') {
config.logManager.error(message, tag);
}
}
function logInfo(config, message, tag) {
if (!config || !config.logLevel || config.logLevel < _deps__WEBPACK_IMPORTED_MODULE_1__.LogLevel.INFO) {
return;
}
if (typeof config.onLog === 'function') {
config.onLog(_deps__WEBPACK_IMPORTED_MODULE_1__.LogLevel.INFO, tag, message);
}
if (config.logManager && typeof config.logManager.info === 'function') {
config.logManager.info(message, tag);
}
}
function logWarn(config, message, tag) {
if (!config || !config.logLevel || config.logLevel < _deps__WEBPACK_IMPORTED_MODULE_1__.LogLevel.WARNING) {
return;
}
if (typeof config.onLog === 'function') {
config.onLog(_deps__WEBPACK_IMPORTED_MODULE_1__.LogLevel.WARNING, tag, message);
}
if (config.logManager && typeof config.logManager.warning === 'function') {
config.logManager.warning(message, tag);
}
}
const getFlagsFromCampaigns = campaigns => {
const flags = new Map();
if (!campaigns || !Array.isArray(campaigns)) {
return flags;
}
campaigns.forEach(campaign => {
const object = campaign.variation.modifications.value;
for (const key in object) {
const value = object[key];
flags.set(key, {
key,
campaignId: campaign.id,
campaignName: campaign.name || '',
variationGroupId: campaign.variationGroupId,
variationGroupName: campaign.variationGroupName || '',
variationId: campaign.variation.id,
variationName: campaign.variation.name || '',
isReference: campaign.variation.reference,
slug: campaign.slug || '',
value
});
}
});
return flags;
};
function uuidV4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (char) {
const rand = Math.random() * 16 | 0;
const value = char === 'x' ? rand : rand & 0x3 | 0x8;
return value.toString(16);
});
}
function useNonInitialEffect(effect, deps) {
const initialRender = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(true);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
if (initialRender.current) {
initialRender.current = false;
return;
}
if (typeof effect === 'function') {
return effect();
}
}, deps);
}
function hasSameType(flagValue, defaultValue) {
if (typeof flagValue !== typeof defaultValue) {
return false;
}
if (typeof flagValue === 'object' && typeof defaultValue === 'object' && Array.isArray(flagValue) !== Array.isArray(defaultValue)) {
return false;
}
return true;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function sprintf(format, ...value) {
let formatted = format;
for (let i = 0; i < value.length; i++) {
const element = value[i];
formatted = formatted.replace(new RegExp(`\\{${i}\\}`, 'g'), element);
}
return formatted;
}
function hexToValue(hex, config) {
if (typeof hex !== 'string') {
logError(config, `Invalid hex string: ${hex}`, 'hexToValue');
return null;
}
let jsonString = '';
for (let i = 0; i < hex.length; i += 2) {
const hexChar = hex.slice(i, i + 2);
const charCode = parseInt(hexChar, 16);
if (isNaN(charCode)) {
logError(config, `Invalid hex character: ${hexChar}`, 'hexToValue');
return null;
}
jsonString += String.fromCharCode(charCode);
}
try {
const value = JSON.parse(jsonString);
return value;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (error) {
logError(config, `Error while parsing JSON: ${error === null || error === void 0 ? void 0 : error.message}`, 'hexToValue');
return null;
}
}
function extractFlagsMap(initialFlagsData, initialCampaigns) {
let flags = new Map();
if (Array.isArray(initialFlagsData)) {
initialFlagsData.forEach(flag => {
var _hexToValue;
flags.set(flag.key, {
key: flag.key,
campaignId: flag.campaignId,
campaignName: flag.campaignName,
variationGroupId: flag.variationGroupId,
variationGroupName: flag.variationGroupName,
variationId: flag.variationId,
variationName: flag.variationName,
isReference: flag.isReference,
campaignType: flag.campaignType,
slug: flag.slug,
value: (_hexToValue = hexToValue(flag.hex, _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig())) === null || _hexToValue === void 0 ? void 0 : _hexToValue.v
});
});
} else if (initialCampaigns) {
flags = getFlagsFromCampaigns(initialCampaigns);
}
return flags;
}
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
function hasContextChanged(original, updated) {
return JSON.stringify(original) !== JSON.stringify(updated);
}
/***/ }),
/***/ "@flagship.io/js-sdk":
/*!**************************************!*\
!*** external "@flagship.io/js-sdk" ***!
\**************************************/
/***/ ((module) => {
module.exports = require("@flagship.io/js-sdk");
/***/ }),
/***/ "react":
/*!************************!*\
!*** external "react" ***!
\************************/
/***/ ((module) => {
module.exports = require("react");
/***/ }),
/***/ "./node_modules/core-js/internals/a-callable.js":
/*!******************************************************!*\
!*** ./node_modules/core-js/internals/a-callable.js ***!
\******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");
var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js/internals/try-to-string.js");
var $TypeError = TypeError;
// `Assert: IsCallable(argument) is true`
module.exports = function (argument) {
if (isCallable(argument)) return argument;
throw new $TypeError(tryToString(argument) + ' is not a function');
};
/***/ }),
/***/ "./node_modules/core-js/internals/an-object.js":
/*!*****************************************************!*\
!*** ./node_modules/core-js/internals/an-object.js ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
var $String = String;
var $TypeError = TypeError;
// `Assert: Type(argument) is Object`
module.exports = function (argument) {
if (isObject(argument)) return argument;
throw new $TypeError($String(argument) + ' is not an object');
};
/***/ }),
/***/ "./node_modules/core-js/internals/create-non-enumerable-property.js":
/*!**************************************************************************!*\
!*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***!
\**************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");
module.exports = DESCRIPTORS ? function (object, key, value) {
return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
/***/ }),
/***/ "./node_modules/core-js/internals/create-property-descriptor.js":
/*!**********************************************************************!*\
!*** ./node_modules/core-js/internals/create-property-descriptor.js ***!
\**********************************************************************/
/***/ ((module) => {
module.exports = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
configurable: !(bitmap & 2),
writable: !(bitmap & 4),
value: value
};
};
/***/ }),
/***/ "./node_modules/core-js/internals/define-built-in-accessor.js":
/*!********************************************************************!*\
!*** ./node_modules/core-js/internals/define-built-in-accessor.js ***!
\********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var makeBuiltIn = __webpack_require__(/*! ../internals/make-built-in */ "./node_modules/core-js/internals/make-built-in.js");
var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
module.exports = function (target, name, descriptor) {
if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
return defineProperty.f(target, name, descriptor);
};
/***/ }),
/***/ "./node_modules/core-js/internals/define-global-property.js":
/*!******************************************************************!*\
!*** ./node_modules/core-js/internals/define-global-property.js ***!
\******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
// eslint-disable-next-line es/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;
module.exports = function (key, value) {
try {
defineProperty(global, key, { value: value, configurable: true, writable: true });
} catch (error) {
global[key] = value;
} return value;
};
/***/ }),
/***/ "./node_modules/core-js/internals/descriptors.js":
/*!*******************************************************!*\
!*** ./node_modules/core-js/internals/descriptors.js ***!
\*******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fai