@flopflip/launchdarkly-adapter 13.3.3 → 13.4.0

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.
@@ -88,7 +88,8 @@ async function getCache(cacheIdentifier, cacheKey) {
88
88
  }
89
89
  function getCachedFlags(cacheIdentifier) {
90
90
  const cacheModule = cacheIdentifier === types.cacheIdentifiers.local ? localStorage : sessionStorage;
91
- const referenceToCachedFlags = cacheModule.getItem(FLAGS_REFERENCE_KEY);
91
+ const flagReferenceKey = [CACHE_PREFIX, FLAGS_REFERENCE_KEY].join('/');
92
+ const referenceToCachedFlags = cacheModule.getItem(flagReferenceKey);
92
93
  if (referenceToCachedFlags) {
93
94
  try {
94
95
  const cacheKey = JSON.parse(referenceToCachedFlags);
@@ -111,6 +112,7 @@ var _getIsAnonymousContext = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAnony
111
112
  var _ensureContext = /*#__PURE__*/_classPrivateFieldLooseKey("ensureContext");
112
113
  var _initializeClient = /*#__PURE__*/_classPrivateFieldLooseKey("initializeClient");
113
114
  var _changeClientContext = /*#__PURE__*/_classPrivateFieldLooseKey("changeClientContext");
115
+ var _maybeUpdateFlagsInCache = /*#__PURE__*/_classPrivateFieldLooseKey("maybeUpdateFlagsInCache");
114
116
  var _getInitialFlags = /*#__PURE__*/_classPrivateFieldLooseKey("getInitialFlags");
115
117
  var _didFlagChange = /*#__PURE__*/_classPrivateFieldLooseKey("didFlagChange");
116
118
  var _setupFlagSubcription = /*#__PURE__*/_classPrivateFieldLooseKey("setupFlagSubcription");
@@ -190,6 +192,17 @@ class LaunchDarklyAdapter {
190
192
  return (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) !== null && _classPrivateFieldLoo !== void 0 && _classPrivateFieldLoo.identify ? _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.identify(nextContext) : Promise.reject(new Error('Can not change user context: client not yet initialized.'));
191
193
  }
192
194
  });
195
+ Object.defineProperty(this, _maybeUpdateFlagsInCache, {
196
+ writable: true,
197
+ value: async (flagsToCache, cacheIdentifier) => {
198
+ if (cacheIdentifier) {
199
+ var _classPrivateFieldLoo2;
200
+ const cache = await getCache(cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
201
+ const cachedFlags = cache.get();
202
+ cache.set(_objectSpread(_objectSpread({}, cachedFlags), flagsToCache));
203
+ }
204
+ }
205
+ });
193
206
  Object.defineProperty(this, _getInitialFlags, {
194
207
  writable: true,
195
208
  value: async _ref5 => {
@@ -213,11 +226,7 @@ class LaunchDarklyAdapter {
213
226
  }
214
227
  if (flagsFromSdk) {
215
228
  const normalizedFlags = adapterUtilities.normalizeFlags(flagsFromSdk);
216
- if (cacheIdentifier) {
217
- var _classPrivateFieldLoo2;
218
- const cache = await getCache(cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
219
- cache.set(normalizedFlags);
220
- }
229
+ await _classPrivateFieldLooseBase(this, _maybeUpdateFlagsInCache)[_maybeUpdateFlagsInCache](normalizedFlags, cacheIdentifier);
221
230
  const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
222
231
  this.updateFlags(flags);
223
232
  }
@@ -250,15 +259,19 @@ class LaunchDarklyAdapter {
250
259
  writable: true,
251
260
  value: _ref8 => {
252
261
  let flagsFromSdk = _ref8.flagsFromSdk,
253
- flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs;
262
+ flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs,
263
+ cacheIdentifier = _ref8.cacheIdentifier;
254
264
  for (const flagName in flagsFromSdk) {
255
265
  // Dispatch whenever a configured flag value changes
256
266
  if (Object.hasOwn(flagsFromSdk, flagName) && _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
257
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), flagValue => {
267
+ _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), async flagValue => {
258
268
  const _normalizeFlag = adapterUtilities.normalizeFlag(flagName, flagValue),
259
269
  _normalizeFlag2 = _slicedToArray(_normalizeFlag, 2),
260
270
  normalizedFlagName = _normalizeFlag2[0],
261
271
  normalizedFlagValue = _normalizeFlag2[1];
272
+ await _classPrivateFieldLooseBase(this, _maybeUpdateFlagsInCache)[_maybeUpdateFlagsInCache]({
273
+ [normalizedFlagName]: normalizedFlagValue
274
+ }, cacheIdentifier);
262
275
  if (_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](normalizedFlagName)) return;
263
276
 
264
277
  // Sometimes the SDK flushes flag changes without a value having changed.
@@ -351,6 +364,9 @@ class LaunchDarklyAdapter {
351
364
  const cache = await getCache(adapterArgs.cacheIdentifier, context.key);
352
365
  cachedFlags = cache.get();
353
366
  if (cachedFlags) {
367
+ _classPrivateFieldLooseBase(this, _updateFlagsInAdapterState)[_updateFlagsInAdapterState](cachedFlags, {
368
+ unsubscribeFlags: adapterArgs.unsubscribeFromCachedFlags
369
+ });
354
370
  _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
355
371
  _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
356
372
  }
@@ -366,7 +382,8 @@ class LaunchDarklyAdapter {
366
382
  if (subscribeToFlagChanges && flagsFromSdk) {
367
383
  _classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
368
384
  flagsFromSdk,
369
- flagsUpdateDelayMs
385
+ flagsUpdateDelayMs,
386
+ cacheIdentifier: adapterArgs.cacheIdentifier
370
387
  });
371
388
  }
372
389
  return {
@@ -418,7 +435,7 @@ class LaunchDarklyAdapter {
418
435
  const adapter = new LaunchDarklyAdapter();
419
436
  adapterUtilities.exposeGlobally(adapter);
420
437
 
421
- const version = "13.3.3";
438
+ const version = "13.4.0";
422
439
 
423
440
  exports["default"] = adapter;
424
441
  exports.getCachedFlags = getCachedFlags;
@@ -88,7 +88,8 @@ async function getCache(cacheIdentifier, cacheKey) {
88
88
  }
89
89
  function getCachedFlags(cacheIdentifier) {
90
90
  const cacheModule = cacheIdentifier === types.cacheIdentifiers.local ? localStorage : sessionStorage;
91
- const referenceToCachedFlags = cacheModule.getItem(FLAGS_REFERENCE_KEY);
91
+ const flagReferenceKey = [CACHE_PREFIX, FLAGS_REFERENCE_KEY].join('/');
92
+ const referenceToCachedFlags = cacheModule.getItem(flagReferenceKey);
92
93
  if (referenceToCachedFlags) {
93
94
  try {
94
95
  const cacheKey = JSON.parse(referenceToCachedFlags);
@@ -111,6 +112,7 @@ var _getIsAnonymousContext = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAnony
111
112
  var _ensureContext = /*#__PURE__*/_classPrivateFieldLooseKey("ensureContext");
112
113
  var _initializeClient = /*#__PURE__*/_classPrivateFieldLooseKey("initializeClient");
113
114
  var _changeClientContext = /*#__PURE__*/_classPrivateFieldLooseKey("changeClientContext");
115
+ var _maybeUpdateFlagsInCache = /*#__PURE__*/_classPrivateFieldLooseKey("maybeUpdateFlagsInCache");
114
116
  var _getInitialFlags = /*#__PURE__*/_classPrivateFieldLooseKey("getInitialFlags");
115
117
  var _didFlagChange = /*#__PURE__*/_classPrivateFieldLooseKey("didFlagChange");
116
118
  var _setupFlagSubcription = /*#__PURE__*/_classPrivateFieldLooseKey("setupFlagSubcription");
@@ -190,6 +192,17 @@ class LaunchDarklyAdapter {
190
192
  return (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) !== null && _classPrivateFieldLoo !== void 0 && _classPrivateFieldLoo.identify ? _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.identify(nextContext) : Promise.reject(new Error('Can not change user context: client not yet initialized.'));
191
193
  }
192
194
  });
195
+ Object.defineProperty(this, _maybeUpdateFlagsInCache, {
196
+ writable: true,
197
+ value: async (flagsToCache, cacheIdentifier) => {
198
+ if (cacheIdentifier) {
199
+ var _classPrivateFieldLoo2;
200
+ const cache = await getCache(cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
201
+ const cachedFlags = cache.get();
202
+ cache.set(_objectSpread(_objectSpread({}, cachedFlags), flagsToCache));
203
+ }
204
+ }
205
+ });
193
206
  Object.defineProperty(this, _getInitialFlags, {
194
207
  writable: true,
195
208
  value: async _ref5 => {
@@ -213,11 +226,7 @@ class LaunchDarklyAdapter {
213
226
  }
214
227
  if (flagsFromSdk) {
215
228
  const normalizedFlags = adapterUtilities.normalizeFlags(flagsFromSdk);
216
- if (cacheIdentifier) {
217
- var _classPrivateFieldLoo2;
218
- const cache = await getCache(cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
219
- cache.set(normalizedFlags);
220
- }
229
+ await _classPrivateFieldLooseBase(this, _maybeUpdateFlagsInCache)[_maybeUpdateFlagsInCache](normalizedFlags, cacheIdentifier);
221
230
  const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
222
231
  this.updateFlags(flags);
223
232
  }
@@ -250,15 +259,19 @@ class LaunchDarklyAdapter {
250
259
  writable: true,
251
260
  value: _ref8 => {
252
261
  let flagsFromSdk = _ref8.flagsFromSdk,
253
- flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs;
262
+ flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs,
263
+ cacheIdentifier = _ref8.cacheIdentifier;
254
264
  for (const flagName in flagsFromSdk) {
255
265
  // Dispatch whenever a configured flag value changes
256
266
  if (Object.hasOwn(flagsFromSdk, flagName) && _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
257
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), flagValue => {
267
+ _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), async flagValue => {
258
268
  const _normalizeFlag = adapterUtilities.normalizeFlag(flagName, flagValue),
259
269
  _normalizeFlag2 = _slicedToArray(_normalizeFlag, 2),
260
270
  normalizedFlagName = _normalizeFlag2[0],
261
271
  normalizedFlagValue = _normalizeFlag2[1];
272
+ await _classPrivateFieldLooseBase(this, _maybeUpdateFlagsInCache)[_maybeUpdateFlagsInCache]({
273
+ [normalizedFlagName]: normalizedFlagValue
274
+ }, cacheIdentifier);
262
275
  if (_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](normalizedFlagName)) return;
263
276
 
264
277
  // Sometimes the SDK flushes flag changes without a value having changed.
@@ -351,6 +364,9 @@ class LaunchDarklyAdapter {
351
364
  const cache = await getCache(adapterArgs.cacheIdentifier, context.key);
352
365
  cachedFlags = cache.get();
353
366
  if (cachedFlags) {
367
+ _classPrivateFieldLooseBase(this, _updateFlagsInAdapterState)[_updateFlagsInAdapterState](cachedFlags, {
368
+ unsubscribeFlags: adapterArgs.unsubscribeFromCachedFlags
369
+ });
354
370
  _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
355
371
  _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
356
372
  }
@@ -366,7 +382,8 @@ class LaunchDarklyAdapter {
366
382
  if (subscribeToFlagChanges && flagsFromSdk) {
367
383
  _classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
368
384
  flagsFromSdk,
369
- flagsUpdateDelayMs
385
+ flagsUpdateDelayMs,
386
+ cacheIdentifier: adapterArgs.cacheIdentifier
370
387
  });
371
388
  }
372
389
  return {
@@ -418,7 +435,7 @@ class LaunchDarklyAdapter {
418
435
  const adapter = new LaunchDarklyAdapter();
419
436
  adapterUtilities.exposeGlobally(adapter);
420
437
 
421
- const version = "13.3.3";
438
+ const version = "13.4.0";
422
439
 
423
440
  exports["default"] = adapter;
424
441
  exports.getCachedFlags = getCachedFlags;
@@ -59,7 +59,8 @@ async function getCache(cacheIdentifier, cacheKey) {
59
59
  }
60
60
  function getCachedFlags(cacheIdentifier) {
61
61
  const cacheModule = cacheIdentifier === cacheIdentifiers.local ? localStorage : sessionStorage;
62
- const referenceToCachedFlags = cacheModule.getItem(FLAGS_REFERENCE_KEY);
62
+ const flagReferenceKey = [CACHE_PREFIX, FLAGS_REFERENCE_KEY].join('/');
63
+ const referenceToCachedFlags = cacheModule.getItem(flagReferenceKey);
63
64
  if (referenceToCachedFlags) {
64
65
  try {
65
66
  const cacheKey = JSON.parse(referenceToCachedFlags);
@@ -82,6 +83,7 @@ var _getIsAnonymousContext = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAnony
82
83
  var _ensureContext = /*#__PURE__*/_classPrivateFieldLooseKey("ensureContext");
83
84
  var _initializeClient = /*#__PURE__*/_classPrivateFieldLooseKey("initializeClient");
84
85
  var _changeClientContext = /*#__PURE__*/_classPrivateFieldLooseKey("changeClientContext");
86
+ var _maybeUpdateFlagsInCache = /*#__PURE__*/_classPrivateFieldLooseKey("maybeUpdateFlagsInCache");
85
87
  var _getInitialFlags = /*#__PURE__*/_classPrivateFieldLooseKey("getInitialFlags");
86
88
  var _didFlagChange = /*#__PURE__*/_classPrivateFieldLooseKey("didFlagChange");
87
89
  var _setupFlagSubcription = /*#__PURE__*/_classPrivateFieldLooseKey("setupFlagSubcription");
@@ -161,6 +163,17 @@ class LaunchDarklyAdapter {
161
163
  return (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) !== null && _classPrivateFieldLoo !== void 0 && _classPrivateFieldLoo.identify ? _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.identify(nextContext) : Promise.reject(new Error('Can not change user context: client not yet initialized.'));
162
164
  }
163
165
  });
166
+ Object.defineProperty(this, _maybeUpdateFlagsInCache, {
167
+ writable: true,
168
+ value: async (flagsToCache, cacheIdentifier) => {
169
+ if (cacheIdentifier) {
170
+ var _classPrivateFieldLoo2;
171
+ const cache = await getCache(cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
172
+ const cachedFlags = cache.get();
173
+ cache.set(_objectSpread(_objectSpread({}, cachedFlags), flagsToCache));
174
+ }
175
+ }
176
+ });
164
177
  Object.defineProperty(this, _getInitialFlags, {
165
178
  writable: true,
166
179
  value: async _ref5 => {
@@ -184,11 +197,7 @@ class LaunchDarklyAdapter {
184
197
  }
185
198
  if (flagsFromSdk) {
186
199
  const normalizedFlags = normalizeFlags(flagsFromSdk);
187
- if (cacheIdentifier) {
188
- var _classPrivateFieldLoo2;
189
- const cache = await getCache(cacheIdentifier, (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key);
190
- cache.set(normalizedFlags);
191
- }
200
+ await _classPrivateFieldLooseBase(this, _maybeUpdateFlagsInCache)[_maybeUpdateFlagsInCache](normalizedFlags, cacheIdentifier);
192
201
  const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
193
202
  this.updateFlags(flags);
194
203
  }
@@ -221,15 +230,19 @@ class LaunchDarklyAdapter {
221
230
  writable: true,
222
231
  value: _ref8 => {
223
232
  let flagsFromSdk = _ref8.flagsFromSdk,
224
- flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs;
233
+ flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs,
234
+ cacheIdentifier = _ref8.cacheIdentifier;
225
235
  for (const flagName in flagsFromSdk) {
226
236
  // Dispatch whenever a configured flag value changes
227
237
  if (Object.hasOwn(flagsFromSdk, flagName) && _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
228
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), flagValue => {
238
+ _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), async flagValue => {
229
239
  const _normalizeFlag = normalizeFlag(flagName, flagValue),
230
240
  _normalizeFlag2 = _slicedToArray(_normalizeFlag, 2),
231
241
  normalizedFlagName = _normalizeFlag2[0],
232
242
  normalizedFlagValue = _normalizeFlag2[1];
243
+ await _classPrivateFieldLooseBase(this, _maybeUpdateFlagsInCache)[_maybeUpdateFlagsInCache]({
244
+ [normalizedFlagName]: normalizedFlagValue
245
+ }, cacheIdentifier);
233
246
  if (_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](normalizedFlagName)) return;
234
247
 
235
248
  // Sometimes the SDK flushes flag changes without a value having changed.
@@ -322,6 +335,9 @@ class LaunchDarklyAdapter {
322
335
  const cache = await getCache(adapterArgs.cacheIdentifier, context.key);
323
336
  cachedFlags = cache.get();
324
337
  if (cachedFlags) {
338
+ _classPrivateFieldLooseBase(this, _updateFlagsInAdapterState)[_updateFlagsInAdapterState](cachedFlags, {
339
+ unsubscribeFlags: adapterArgs.unsubscribeFromCachedFlags
340
+ });
325
341
  _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
326
342
  _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
327
343
  }
@@ -337,7 +353,8 @@ class LaunchDarklyAdapter {
337
353
  if (subscribeToFlagChanges && flagsFromSdk) {
338
354
  _classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
339
355
  flagsFromSdk,
340
- flagsUpdateDelayMs
356
+ flagsUpdateDelayMs,
357
+ cacheIdentifier: adapterArgs.cacheIdentifier
341
358
  });
342
359
  }
343
360
  return {
@@ -389,6 +406,6 @@ class LaunchDarklyAdapter {
389
406
  const adapter = new LaunchDarklyAdapter();
390
407
  exposeGlobally(adapter);
391
408
 
392
- const version = "13.3.3";
409
+ const version = "13.4.0";
393
410
 
394
411
  export { adapter as default, getCachedFlags, version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flopflip/launchdarkly-adapter",
3
- "version": "13.3.3",
3
+ "version": "13.4.0",
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",
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@babel/runtime": "7.24.0",
30
- "@flopflip/adapter-utilities": "13.3.3",
31
- "@flopflip/localstorage-cache": "13.3.3",
32
- "@flopflip/sessionstorage-cache": "13.3.3",
33
- "@flopflip/types": "13.3.3",
30
+ "@flopflip/adapter-utilities": "13.4.0",
31
+ "@flopflip/localstorage-cache": "13.4.0",
32
+ "@flopflip/sessionstorage-cache": "13.4.0",
33
+ "@flopflip/types": "13.4.0",
34
34
  "debounce-fn": "4.0.0",
35
35
  "launchdarkly-js-client-sdk": "3.1.4",
36
36
  "lodash": "4.17.21",