@flopflip/launchdarkly-adapter 13.2.1 → 13.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -17,17 +17,37 @@ var tsDeepmerge = require('ts-deepmerge');
|
|
|
17
17
|
|
|
18
18
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
19
19
|
|
|
20
|
+
function _interopNamespace(e) {
|
|
21
|
+
if (e && e.__esModule) return e;
|
|
22
|
+
var n = Object.create(null);
|
|
23
|
+
if (e) {
|
|
24
|
+
Object.keys(e).forEach(function (k) {
|
|
25
|
+
if (k !== 'default') {
|
|
26
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
27
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return e[k]; }
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
n["default"] = e;
|
|
35
|
+
return Object.freeze(n);
|
|
36
|
+
}
|
|
37
|
+
|
|
20
38
|
var debounce__default = /*#__PURE__*/_interopDefault(debounce);
|
|
21
39
|
var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
22
40
|
var mitt__default = /*#__PURE__*/_interopDefault(mitt);
|
|
23
41
|
var warning__default = /*#__PURE__*/_interopDefault(warning);
|
|
24
42
|
|
|
43
|
+
const STORAGE_SLICE = '@flopflip/launchdarkly-adapter';
|
|
25
44
|
var _adapterState = /*#__PURE__*/_classPrivateFieldLooseKey("adapterState");
|
|
26
45
|
var _updateFlagsInAdapterState = /*#__PURE__*/_classPrivateFieldLooseKey("updateFlagsInAdapterState");
|
|
27
46
|
var _getIsAdapterUnsubscribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAdapterUnsubscribed");
|
|
28
47
|
var _getIsFlagUnsubcribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagUnsubcribed");
|
|
29
48
|
var _getIsFlagLocked = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagLocked");
|
|
30
49
|
var _withoutUnsubscribedOrLockedFlags = /*#__PURE__*/_classPrivateFieldLooseKey("withoutUnsubscribedOrLockedFlags");
|
|
50
|
+
var _getCache = /*#__PURE__*/_classPrivateFieldLooseKey("getCache");
|
|
31
51
|
var _getIsAnonymousContext = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAnonymousContext");
|
|
32
52
|
var _ensureContext = /*#__PURE__*/_classPrivateFieldLooseKey("ensureContext");
|
|
33
53
|
var _initializeClient = /*#__PURE__*/_classPrivateFieldLooseKey("initializeClient");
|
|
@@ -84,6 +104,40 @@ class LaunchDarklyAdapter {
|
|
|
84
104
|
return !_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](flagName) && !_classPrivateFieldLooseBase(this, _getIsFlagLocked)[_getIsFlagLocked](flagName);
|
|
85
105
|
}))
|
|
86
106
|
});
|
|
107
|
+
Object.defineProperty(this, _getCache, {
|
|
108
|
+
writable: true,
|
|
109
|
+
value: async (cacheIdentifier, cacheKey) => {
|
|
110
|
+
let cacheModule;
|
|
111
|
+
switch (cacheIdentifier) {
|
|
112
|
+
case types.cacheIdentifiers.local:
|
|
113
|
+
{
|
|
114
|
+
cacheModule = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@flopflip/localstorage-cache')); });
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case types.cacheIdentifiers.session:
|
|
118
|
+
{
|
|
119
|
+
cacheModule = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@flopflip/sessionstorage-cache')); });
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const createCache = cacheModule.default;
|
|
124
|
+
const cachePrefix = [STORAGE_SLICE, cacheKey].filter(Boolean).join('/');
|
|
125
|
+
const cache = createCache({
|
|
126
|
+
prefix: cachePrefix
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
set(flags) {
|
|
130
|
+
return cache.set('flags', flags);
|
|
131
|
+
},
|
|
132
|
+
get() {
|
|
133
|
+
return cache.get('flags');
|
|
134
|
+
},
|
|
135
|
+
unset() {
|
|
136
|
+
return cache.unset('flags');
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
});
|
|
87
141
|
Object.defineProperty(this, _getIsAnonymousContext, {
|
|
88
142
|
writable: true,
|
|
89
143
|
value: context => !(context !== null && context !== void 0 && context.key)
|
|
@@ -115,7 +169,8 @@ class LaunchDarklyAdapter {
|
|
|
115
169
|
writable: true,
|
|
116
170
|
value: async _ref5 => {
|
|
117
171
|
let flags = _ref5.flags,
|
|
118
|
-
throwOnInitializationFailure = _ref5.throwOnInitializationFailure
|
|
172
|
+
throwOnInitializationFailure = _ref5.throwOnInitializationFailure,
|
|
173
|
+
cacheIdentifier = _ref5.cacheIdentifier;
|
|
119
174
|
if (_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
|
|
120
175
|
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.waitForInitialization().then(async () => {
|
|
121
176
|
let flagsFromSdk;
|
|
@@ -133,6 +188,11 @@ class LaunchDarklyAdapter {
|
|
|
133
188
|
}
|
|
134
189
|
if (flagsFromSdk) {
|
|
135
190
|
const normalizedFlags = adapterUtilities.normalizeFlags(flagsFromSdk);
|
|
191
|
+
if (cacheIdentifier) {
|
|
192
|
+
var _classPrivateFieldLoo2;
|
|
193
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
|
|
194
|
+
cache.set(normalizedFlags);
|
|
195
|
+
}
|
|
136
196
|
const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
|
|
137
197
|
this.updateFlags(flags);
|
|
138
198
|
}
|
|
@@ -261,18 +321,30 @@ class LaunchDarklyAdapter {
|
|
|
261
321
|
_adapterArgs$throwOnI = adapterArgs.throwOnInitializationFailure,
|
|
262
322
|
throwOnInitializationFailure = _adapterArgs$throwOnI === void 0 ? false : _adapterArgs$throwOnI,
|
|
263
323
|
flagsUpdateDelayMs = adapterArgs.flagsUpdateDelayMs;
|
|
324
|
+
let cachedFlags;
|
|
264
325
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](context);
|
|
326
|
+
if (adapterArgs.cacheIdentifier) {
|
|
327
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](adapterArgs.cacheIdentifier, context.key);
|
|
328
|
+
cachedFlags = cache.get();
|
|
329
|
+
if (cachedFlags) {
|
|
330
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
|
|
331
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
265
334
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client = _classPrivateFieldLooseBase(this, _initializeClient)[_initializeClient](sdk.clientSideId, _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, (_sdk$clientOptions = sdk.clientOptions) !== null && _sdk$clientOptions !== void 0 ? _sdk$clientOptions : {});
|
|
266
335
|
return _classPrivateFieldLooseBase(this, _getInitialFlags)[_getInitialFlags]({
|
|
267
336
|
flags,
|
|
268
|
-
throwOnInitializationFailure
|
|
337
|
+
throwOnInitializationFailure,
|
|
338
|
+
cacheIdentifier: adapterArgs.cacheIdentifier
|
|
269
339
|
}).then(_ref9 => {
|
|
270
340
|
let flagsFromSdk = _ref9.flagsFromSdk,
|
|
271
341
|
initializationStatus = _ref9.initializationStatus;
|
|
272
|
-
if (subscribeToFlagChanges && flagsFromSdk)
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
342
|
+
if (subscribeToFlagChanges && flagsFromSdk) {
|
|
343
|
+
_classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
|
|
344
|
+
flagsFromSdk,
|
|
345
|
+
flagsUpdateDelayMs
|
|
346
|
+
});
|
|
347
|
+
}
|
|
276
348
|
return {
|
|
277
349
|
initializationStatus
|
|
278
350
|
};
|
|
@@ -280,9 +352,14 @@ class LaunchDarklyAdapter {
|
|
|
280
352
|
}
|
|
281
353
|
async reconfigure(adapterArgs, _adapterEventHandlers) {
|
|
282
354
|
if (!this.getIsConfigurationStatus(types.AdapterConfigurationStatus.Configured)) return Promise.reject(new Error('@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.'));
|
|
283
|
-
const nextContext = adapterArgs.context;
|
|
355
|
+
const nextContext = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](adapterArgs.context);
|
|
284
356
|
if (!isEqual__default["default"](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, nextContext)) {
|
|
285
|
-
|
|
357
|
+
if (adapterArgs.cacheIdentifier) {
|
|
358
|
+
var _classPrivateFieldLoo3;
|
|
359
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](adapterArgs.cacheIdentifier, (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo3 === void 0 ? void 0 : _classPrivateFieldLoo3.key);
|
|
360
|
+
cache.unset();
|
|
361
|
+
}
|
|
362
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = nextContext;
|
|
286
363
|
await _classPrivateFieldLooseBase(this, _changeClientContext)[_changeClientContext](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context);
|
|
287
364
|
return Promise.resolve({
|
|
288
365
|
initializationStatus: types.AdapterInitializationStatus.Succeeded
|
|
@@ -317,7 +394,7 @@ class LaunchDarklyAdapter {
|
|
|
317
394
|
const adapter = new LaunchDarklyAdapter();
|
|
318
395
|
adapterUtilities.exposeGlobally(adapter);
|
|
319
396
|
|
|
320
|
-
const version = "13.2.
|
|
397
|
+
const version = "13.2.3";
|
|
321
398
|
|
|
322
399
|
exports["default"] = adapter;
|
|
323
400
|
exports.version = version;
|
|
@@ -17,17 +17,37 @@ var tsDeepmerge = require('ts-deepmerge');
|
|
|
17
17
|
|
|
18
18
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
19
19
|
|
|
20
|
+
function _interopNamespace(e) {
|
|
21
|
+
if (e && e.__esModule) return e;
|
|
22
|
+
var n = Object.create(null);
|
|
23
|
+
if (e) {
|
|
24
|
+
Object.keys(e).forEach(function (k) {
|
|
25
|
+
if (k !== 'default') {
|
|
26
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
27
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return e[k]; }
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
n["default"] = e;
|
|
35
|
+
return Object.freeze(n);
|
|
36
|
+
}
|
|
37
|
+
|
|
20
38
|
var debounce__default = /*#__PURE__*/_interopDefault(debounce);
|
|
21
39
|
var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
22
40
|
var mitt__default = /*#__PURE__*/_interopDefault(mitt);
|
|
23
41
|
var warning__default = /*#__PURE__*/_interopDefault(warning);
|
|
24
42
|
|
|
43
|
+
const STORAGE_SLICE = '@flopflip/launchdarkly-adapter';
|
|
25
44
|
var _adapterState = /*#__PURE__*/_classPrivateFieldLooseKey("adapterState");
|
|
26
45
|
var _updateFlagsInAdapterState = /*#__PURE__*/_classPrivateFieldLooseKey("updateFlagsInAdapterState");
|
|
27
46
|
var _getIsAdapterUnsubscribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAdapterUnsubscribed");
|
|
28
47
|
var _getIsFlagUnsubcribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagUnsubcribed");
|
|
29
48
|
var _getIsFlagLocked = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagLocked");
|
|
30
49
|
var _withoutUnsubscribedOrLockedFlags = /*#__PURE__*/_classPrivateFieldLooseKey("withoutUnsubscribedOrLockedFlags");
|
|
50
|
+
var _getCache = /*#__PURE__*/_classPrivateFieldLooseKey("getCache");
|
|
31
51
|
var _getIsAnonymousContext = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAnonymousContext");
|
|
32
52
|
var _ensureContext = /*#__PURE__*/_classPrivateFieldLooseKey("ensureContext");
|
|
33
53
|
var _initializeClient = /*#__PURE__*/_classPrivateFieldLooseKey("initializeClient");
|
|
@@ -84,6 +104,40 @@ class LaunchDarklyAdapter {
|
|
|
84
104
|
return !_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](flagName) && !_classPrivateFieldLooseBase(this, _getIsFlagLocked)[_getIsFlagLocked](flagName);
|
|
85
105
|
}))
|
|
86
106
|
});
|
|
107
|
+
Object.defineProperty(this, _getCache, {
|
|
108
|
+
writable: true,
|
|
109
|
+
value: async (cacheIdentifier, cacheKey) => {
|
|
110
|
+
let cacheModule;
|
|
111
|
+
switch (cacheIdentifier) {
|
|
112
|
+
case types.cacheIdentifiers.local:
|
|
113
|
+
{
|
|
114
|
+
cacheModule = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@flopflip/localstorage-cache')); });
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case types.cacheIdentifiers.session:
|
|
118
|
+
{
|
|
119
|
+
cacheModule = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@flopflip/sessionstorage-cache')); });
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const createCache = cacheModule.default;
|
|
124
|
+
const cachePrefix = [STORAGE_SLICE, cacheKey].filter(Boolean).join('/');
|
|
125
|
+
const cache = createCache({
|
|
126
|
+
prefix: cachePrefix
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
set(flags) {
|
|
130
|
+
return cache.set('flags', flags);
|
|
131
|
+
},
|
|
132
|
+
get() {
|
|
133
|
+
return cache.get('flags');
|
|
134
|
+
},
|
|
135
|
+
unset() {
|
|
136
|
+
return cache.unset('flags');
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
});
|
|
87
141
|
Object.defineProperty(this, _getIsAnonymousContext, {
|
|
88
142
|
writable: true,
|
|
89
143
|
value: context => !(context !== null && context !== void 0 && context.key)
|
|
@@ -115,7 +169,8 @@ class LaunchDarklyAdapter {
|
|
|
115
169
|
writable: true,
|
|
116
170
|
value: async _ref5 => {
|
|
117
171
|
let flags = _ref5.flags,
|
|
118
|
-
throwOnInitializationFailure = _ref5.throwOnInitializationFailure
|
|
172
|
+
throwOnInitializationFailure = _ref5.throwOnInitializationFailure,
|
|
173
|
+
cacheIdentifier = _ref5.cacheIdentifier;
|
|
119
174
|
if (_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
|
|
120
175
|
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.waitForInitialization().then(async () => {
|
|
121
176
|
let flagsFromSdk;
|
|
@@ -133,6 +188,11 @@ class LaunchDarklyAdapter {
|
|
|
133
188
|
}
|
|
134
189
|
if (flagsFromSdk) {
|
|
135
190
|
const normalizedFlags = adapterUtilities.normalizeFlags(flagsFromSdk);
|
|
191
|
+
if (cacheIdentifier) {
|
|
192
|
+
var _classPrivateFieldLoo2;
|
|
193
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
|
|
194
|
+
cache.set(normalizedFlags);
|
|
195
|
+
}
|
|
136
196
|
const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
|
|
137
197
|
this.updateFlags(flags);
|
|
138
198
|
}
|
|
@@ -261,18 +321,30 @@ class LaunchDarklyAdapter {
|
|
|
261
321
|
_adapterArgs$throwOnI = adapterArgs.throwOnInitializationFailure,
|
|
262
322
|
throwOnInitializationFailure = _adapterArgs$throwOnI === void 0 ? false : _adapterArgs$throwOnI,
|
|
263
323
|
flagsUpdateDelayMs = adapterArgs.flagsUpdateDelayMs;
|
|
324
|
+
let cachedFlags;
|
|
264
325
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](context);
|
|
326
|
+
if (adapterArgs.cacheIdentifier) {
|
|
327
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](adapterArgs.cacheIdentifier, context.key);
|
|
328
|
+
cachedFlags = cache.get();
|
|
329
|
+
if (cachedFlags) {
|
|
330
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
|
|
331
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
265
334
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client = _classPrivateFieldLooseBase(this, _initializeClient)[_initializeClient](sdk.clientSideId, _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, (_sdk$clientOptions = sdk.clientOptions) !== null && _sdk$clientOptions !== void 0 ? _sdk$clientOptions : {});
|
|
266
335
|
return _classPrivateFieldLooseBase(this, _getInitialFlags)[_getInitialFlags]({
|
|
267
336
|
flags,
|
|
268
|
-
throwOnInitializationFailure
|
|
337
|
+
throwOnInitializationFailure,
|
|
338
|
+
cacheIdentifier: adapterArgs.cacheIdentifier
|
|
269
339
|
}).then(_ref9 => {
|
|
270
340
|
let flagsFromSdk = _ref9.flagsFromSdk,
|
|
271
341
|
initializationStatus = _ref9.initializationStatus;
|
|
272
|
-
if (subscribeToFlagChanges && flagsFromSdk)
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
342
|
+
if (subscribeToFlagChanges && flagsFromSdk) {
|
|
343
|
+
_classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
|
|
344
|
+
flagsFromSdk,
|
|
345
|
+
flagsUpdateDelayMs
|
|
346
|
+
});
|
|
347
|
+
}
|
|
276
348
|
return {
|
|
277
349
|
initializationStatus
|
|
278
350
|
};
|
|
@@ -280,9 +352,14 @@ class LaunchDarklyAdapter {
|
|
|
280
352
|
}
|
|
281
353
|
async reconfigure(adapterArgs, _adapterEventHandlers) {
|
|
282
354
|
if (!this.getIsConfigurationStatus(types.AdapterConfigurationStatus.Configured)) return Promise.reject(new Error('@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.'));
|
|
283
|
-
const nextContext = adapterArgs.context;
|
|
355
|
+
const nextContext = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](adapterArgs.context);
|
|
284
356
|
if (!isEqual__default["default"](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, nextContext)) {
|
|
285
|
-
|
|
357
|
+
if (adapterArgs.cacheIdentifier) {
|
|
358
|
+
var _classPrivateFieldLoo3;
|
|
359
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](adapterArgs.cacheIdentifier, (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo3 === void 0 ? void 0 : _classPrivateFieldLoo3.key);
|
|
360
|
+
cache.unset();
|
|
361
|
+
}
|
|
362
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = nextContext;
|
|
286
363
|
await _classPrivateFieldLooseBase(this, _changeClientContext)[_changeClientContext](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context);
|
|
287
364
|
return Promise.resolve({
|
|
288
365
|
initializationStatus: types.AdapterInitializationStatus.Succeeded
|
|
@@ -317,7 +394,7 @@ class LaunchDarklyAdapter {
|
|
|
317
394
|
const adapter = new LaunchDarklyAdapter();
|
|
318
395
|
adapterUtilities.exposeGlobally(adapter);
|
|
319
396
|
|
|
320
|
-
const version = "13.2.
|
|
397
|
+
const version = "13.2.3";
|
|
321
398
|
|
|
322
399
|
exports["default"] = adapter;
|
|
323
400
|
exports.version = version;
|
|
@@ -3,7 +3,7 @@ import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
|
|
|
3
3
|
import _classPrivateFieldLooseBase from '@babel/runtime/helpers/esm/classPrivateFieldLooseBase';
|
|
4
4
|
import _classPrivateFieldLooseKey from '@babel/runtime/helpers/esm/classPrivateFieldLooseKey';
|
|
5
5
|
import { exposeGlobally, denormalizeFlagName, normalizeFlags, normalizeFlag } from '@flopflip/adapter-utilities';
|
|
6
|
-
import { AdapterSubscriptionStatus, AdapterConfigurationStatus, AdapterInitializationStatus, adapterIdentifiers } from '@flopflip/types';
|
|
6
|
+
import { AdapterSubscriptionStatus, cacheIdentifiers, AdapterConfigurationStatus, AdapterInitializationStatus, adapterIdentifiers } from '@flopflip/types';
|
|
7
7
|
import debounce from 'debounce-fn';
|
|
8
8
|
import { initialize } from 'launchdarkly-js-client-sdk';
|
|
9
9
|
import isEqual from 'lodash/isEqual';
|
|
@@ -11,12 +11,14 @@ import mitt from 'mitt';
|
|
|
11
11
|
import warning from 'tiny-warning';
|
|
12
12
|
import { merge } from 'ts-deepmerge';
|
|
13
13
|
|
|
14
|
+
const STORAGE_SLICE = '@flopflip/launchdarkly-adapter';
|
|
14
15
|
var _adapterState = /*#__PURE__*/_classPrivateFieldLooseKey("adapterState");
|
|
15
16
|
var _updateFlagsInAdapterState = /*#__PURE__*/_classPrivateFieldLooseKey("updateFlagsInAdapterState");
|
|
16
17
|
var _getIsAdapterUnsubscribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAdapterUnsubscribed");
|
|
17
18
|
var _getIsFlagUnsubcribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagUnsubcribed");
|
|
18
19
|
var _getIsFlagLocked = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagLocked");
|
|
19
20
|
var _withoutUnsubscribedOrLockedFlags = /*#__PURE__*/_classPrivateFieldLooseKey("withoutUnsubscribedOrLockedFlags");
|
|
21
|
+
var _getCache = /*#__PURE__*/_classPrivateFieldLooseKey("getCache");
|
|
20
22
|
var _getIsAnonymousContext = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAnonymousContext");
|
|
21
23
|
var _ensureContext = /*#__PURE__*/_classPrivateFieldLooseKey("ensureContext");
|
|
22
24
|
var _initializeClient = /*#__PURE__*/_classPrivateFieldLooseKey("initializeClient");
|
|
@@ -73,6 +75,40 @@ class LaunchDarklyAdapter {
|
|
|
73
75
|
return !_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](flagName) && !_classPrivateFieldLooseBase(this, _getIsFlagLocked)[_getIsFlagLocked](flagName);
|
|
74
76
|
}))
|
|
75
77
|
});
|
|
78
|
+
Object.defineProperty(this, _getCache, {
|
|
79
|
+
writable: true,
|
|
80
|
+
value: async (cacheIdentifier, cacheKey) => {
|
|
81
|
+
let cacheModule;
|
|
82
|
+
switch (cacheIdentifier) {
|
|
83
|
+
case cacheIdentifiers.local:
|
|
84
|
+
{
|
|
85
|
+
cacheModule = await import('@flopflip/localstorage-cache');
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case cacheIdentifiers.session:
|
|
89
|
+
{
|
|
90
|
+
cacheModule = await import('@flopflip/sessionstorage-cache');
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const createCache = cacheModule.default;
|
|
95
|
+
const cachePrefix = [STORAGE_SLICE, cacheKey].filter(Boolean).join('/');
|
|
96
|
+
const cache = createCache({
|
|
97
|
+
prefix: cachePrefix
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
set(flags) {
|
|
101
|
+
return cache.set('flags', flags);
|
|
102
|
+
},
|
|
103
|
+
get() {
|
|
104
|
+
return cache.get('flags');
|
|
105
|
+
},
|
|
106
|
+
unset() {
|
|
107
|
+
return cache.unset('flags');
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
});
|
|
76
112
|
Object.defineProperty(this, _getIsAnonymousContext, {
|
|
77
113
|
writable: true,
|
|
78
114
|
value: context => !(context !== null && context !== void 0 && context.key)
|
|
@@ -104,7 +140,8 @@ class LaunchDarklyAdapter {
|
|
|
104
140
|
writable: true,
|
|
105
141
|
value: async _ref5 => {
|
|
106
142
|
let flags = _ref5.flags,
|
|
107
|
-
throwOnInitializationFailure = _ref5.throwOnInitializationFailure
|
|
143
|
+
throwOnInitializationFailure = _ref5.throwOnInitializationFailure,
|
|
144
|
+
cacheIdentifier = _ref5.cacheIdentifier;
|
|
108
145
|
if (_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
|
|
109
146
|
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.waitForInitialization().then(async () => {
|
|
110
147
|
let flagsFromSdk;
|
|
@@ -122,6 +159,11 @@ class LaunchDarklyAdapter {
|
|
|
122
159
|
}
|
|
123
160
|
if (flagsFromSdk) {
|
|
124
161
|
const normalizedFlags = normalizeFlags(flagsFromSdk);
|
|
162
|
+
if (cacheIdentifier) {
|
|
163
|
+
var _classPrivateFieldLoo2;
|
|
164
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
|
|
165
|
+
cache.set(normalizedFlags);
|
|
166
|
+
}
|
|
125
167
|
const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
|
|
126
168
|
this.updateFlags(flags);
|
|
127
169
|
}
|
|
@@ -250,18 +292,30 @@ class LaunchDarklyAdapter {
|
|
|
250
292
|
_adapterArgs$throwOnI = adapterArgs.throwOnInitializationFailure,
|
|
251
293
|
throwOnInitializationFailure = _adapterArgs$throwOnI === void 0 ? false : _adapterArgs$throwOnI,
|
|
252
294
|
flagsUpdateDelayMs = adapterArgs.flagsUpdateDelayMs;
|
|
295
|
+
let cachedFlags;
|
|
253
296
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](context);
|
|
297
|
+
if (adapterArgs.cacheIdentifier) {
|
|
298
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](adapterArgs.cacheIdentifier, context.key);
|
|
299
|
+
cachedFlags = cache.get();
|
|
300
|
+
if (cachedFlags) {
|
|
301
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
|
|
302
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
254
305
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client = _classPrivateFieldLooseBase(this, _initializeClient)[_initializeClient](sdk.clientSideId, _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, (_sdk$clientOptions = sdk.clientOptions) !== null && _sdk$clientOptions !== void 0 ? _sdk$clientOptions : {});
|
|
255
306
|
return _classPrivateFieldLooseBase(this, _getInitialFlags)[_getInitialFlags]({
|
|
256
307
|
flags,
|
|
257
|
-
throwOnInitializationFailure
|
|
308
|
+
throwOnInitializationFailure,
|
|
309
|
+
cacheIdentifier: adapterArgs.cacheIdentifier
|
|
258
310
|
}).then(_ref9 => {
|
|
259
311
|
let flagsFromSdk = _ref9.flagsFromSdk,
|
|
260
312
|
initializationStatus = _ref9.initializationStatus;
|
|
261
|
-
if (subscribeToFlagChanges && flagsFromSdk)
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
313
|
+
if (subscribeToFlagChanges && flagsFromSdk) {
|
|
314
|
+
_classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
|
|
315
|
+
flagsFromSdk,
|
|
316
|
+
flagsUpdateDelayMs
|
|
317
|
+
});
|
|
318
|
+
}
|
|
265
319
|
return {
|
|
266
320
|
initializationStatus
|
|
267
321
|
};
|
|
@@ -269,9 +323,14 @@ class LaunchDarklyAdapter {
|
|
|
269
323
|
}
|
|
270
324
|
async reconfigure(adapterArgs, _adapterEventHandlers) {
|
|
271
325
|
if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) return Promise.reject(new Error('@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.'));
|
|
272
|
-
const nextContext = adapterArgs.context;
|
|
326
|
+
const nextContext = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](adapterArgs.context);
|
|
273
327
|
if (!isEqual(_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, nextContext)) {
|
|
274
|
-
|
|
328
|
+
if (adapterArgs.cacheIdentifier) {
|
|
329
|
+
var _classPrivateFieldLoo3;
|
|
330
|
+
const cache = await _classPrivateFieldLooseBase(this, _getCache)[_getCache](adapterArgs.cacheIdentifier, (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo3 === void 0 ? void 0 : _classPrivateFieldLoo3.key);
|
|
331
|
+
cache.unset();
|
|
332
|
+
}
|
|
333
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = nextContext;
|
|
275
334
|
await _classPrivateFieldLooseBase(this, _changeClientContext)[_changeClientContext](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context);
|
|
276
335
|
return Promise.resolve({
|
|
277
336
|
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
@@ -306,6 +365,6 @@ class LaunchDarklyAdapter {
|
|
|
306
365
|
const adapter = new LaunchDarklyAdapter();
|
|
307
366
|
exposeGlobally(adapter);
|
|
308
367
|
|
|
309
|
-
const version = "13.2.
|
|
368
|
+
const version = "13.2.3";
|
|
310
369
|
|
|
311
370
|
export { adapter as default, version };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flopflip/launchdarkly-adapter",
|
|
3
|
-
"version": "13.2.
|
|
3
|
+
"version": "13.2.3",
|
|
4
4
|
"description": "A adapter around the LaunchDarkly client for flipflop",
|
|
5
5
|
"main": "dist/flopflip-launchdarkly-adapter.cjs.js",
|
|
6
6
|
"module": "dist/flopflip-launchdarkly-adapter.esm.js",
|
|
@@ -26,9 +26,11 @@
|
|
|
26
26
|
"globalthis": "1.0.3"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@babel/runtime": "7.
|
|
30
|
-
"@flopflip/adapter-utilities": "13.2.
|
|
31
|
-
"@flopflip/
|
|
29
|
+
"@babel/runtime": "7.24.0",
|
|
30
|
+
"@flopflip/adapter-utilities": "13.2.3",
|
|
31
|
+
"@flopflip/localstorage-cache": "13.2.3",
|
|
32
|
+
"@flopflip/sessionstorage-cache": "13.2.3",
|
|
33
|
+
"@flopflip/types": "13.2.3",
|
|
32
34
|
"debounce-fn": "4.0.0",
|
|
33
35
|
"launchdarkly-js-client-sdk": "3.1.4",
|
|
34
36
|
"lodash": "4.17.21",
|