@flopflip/launchdarkly-adapter 13.0.0 → 13.0.2
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.
- package/dist/flopflip-launchdarkly-adapter.cjs.d.ts +1 -0
- package/dist/flopflip-launchdarkly-adapter.cjs.d.ts.map +1 -0
- package/dist/flopflip-launchdarkly-adapter.cjs.dev.js +174 -316
- package/dist/flopflip-launchdarkly-adapter.cjs.prod.js +174 -316
- package/dist/flopflip-launchdarkly-adapter.esm.js +175 -316
- package/package.json +6 -6
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import _asyncToGenerator from '@babel/runtime/helpers/esm/asyncToGenerator';
|
|
2
|
-
import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
|
|
3
1
|
import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';
|
|
4
2
|
import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
|
|
5
|
-
import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';
|
|
6
|
-
import _createClass from '@babel/runtime/helpers/esm/createClass';
|
|
7
3
|
import _classPrivateFieldLooseBase from '@babel/runtime/helpers/esm/classPrivateFieldLooseBase';
|
|
8
4
|
import _classPrivateFieldLooseKey from '@babel/runtime/helpers/esm/classPrivateFieldLooseKey';
|
|
9
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
10
5
|
import { exposeGlobally, denormalizeFlagName, normalizeFlags, normalizeFlag } from '@flopflip/adapter-utilities';
|
|
11
|
-
import { AdapterConfigurationStatus, AdapterInitializationStatus,
|
|
6
|
+
import { AdapterSubscriptionStatus, AdapterConfigurationStatus, AdapterInitializationStatus, adapterIdentifiers } from '@flopflip/types';
|
|
12
7
|
import debounce from 'debounce-fn';
|
|
13
8
|
import { initialize } from 'launchdarkly-js-client-sdk';
|
|
14
9
|
import isEqual from 'lodash/isEqual';
|
|
@@ -29,10 +24,8 @@ var _changeClientContext = /*#__PURE__*/_classPrivateFieldLooseKey("changeClient
|
|
|
29
24
|
var _getInitialFlags = /*#__PURE__*/_classPrivateFieldLooseKey("getInitialFlags");
|
|
30
25
|
var _didFlagChange = /*#__PURE__*/_classPrivateFieldLooseKey("didFlagChange");
|
|
31
26
|
var _setupFlagSubcription = /*#__PURE__*/_classPrivateFieldLooseKey("setupFlagSubcription");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
var _this = this;
|
|
35
|
-
_classCallCheck(this, LaunchDarklyAdapter);
|
|
27
|
+
class LaunchDarklyAdapter {
|
|
28
|
+
constructor() {
|
|
36
29
|
this.id = void 0;
|
|
37
30
|
Object.defineProperty(this, _adapterState, {
|
|
38
31
|
writable: true,
|
|
@@ -40,62 +33,54 @@ var LaunchDarklyAdapter = /*#__PURE__*/function () {
|
|
|
40
33
|
});
|
|
41
34
|
Object.defineProperty(this, _updateFlagsInAdapterState, {
|
|
42
35
|
writable: true,
|
|
43
|
-
value:
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
value: (flags, options) => {
|
|
37
|
+
const updatedFlags = Object.entries(flags).reduce((updatedFlags, _ref) => {
|
|
38
|
+
let _ref2 = _slicedToArray(_ref, 2),
|
|
46
39
|
flagName = _ref2[0],
|
|
47
40
|
flagValue = _ref2[1];
|
|
48
|
-
if (_classPrivateFieldLooseBase(
|
|
41
|
+
if (_classPrivateFieldLooseBase(this, _getIsFlagLocked)[_getIsFlagLocked](flagName)) return updatedFlags;
|
|
49
42
|
if (options !== null && options !== void 0 && options.lockFlags) {
|
|
50
|
-
_classPrivateFieldLooseBase(
|
|
43
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].lockedFlags.add(flagName);
|
|
51
44
|
}
|
|
52
45
|
if (options !== null && options !== void 0 && options.unsubscribeFlags) {
|
|
53
|
-
_classPrivateFieldLooseBase(
|
|
46
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].unsubscribedFlags.add(flagName);
|
|
54
47
|
}
|
|
55
|
-
updatedFlags = _objectSpread(_objectSpread({}, updatedFlags), {},
|
|
48
|
+
updatedFlags = _objectSpread(_objectSpread({}, updatedFlags), {}, {
|
|
49
|
+
[flagName]: flagValue
|
|
50
|
+
});
|
|
56
51
|
return updatedFlags;
|
|
57
52
|
}, {});
|
|
58
|
-
_classPrivateFieldLooseBase(
|
|
53
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = _objectSpread(_objectSpread({}, _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags), updatedFlags);
|
|
59
54
|
}
|
|
60
55
|
});
|
|
61
56
|
Object.defineProperty(this, _getIsAdapterUnsubscribed, {
|
|
62
57
|
writable: true,
|
|
63
|
-
value:
|
|
64
|
-
return _classPrivateFieldLooseBase(_this, _adapterState)[_adapterState].subscriptionStatus === AdapterSubscriptionStatus.Unsubscribed;
|
|
65
|
-
}
|
|
58
|
+
value: () => _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].subscriptionStatus === AdapterSubscriptionStatus.Unsubscribed
|
|
66
59
|
});
|
|
67
60
|
Object.defineProperty(this, _getIsFlagUnsubcribed, {
|
|
68
61
|
writable: true,
|
|
69
|
-
value:
|
|
70
|
-
return _classPrivateFieldLooseBase(_this, _adapterState)[_adapterState].unsubscribedFlags.has(flagName);
|
|
71
|
-
}
|
|
62
|
+
value: flagName => _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].unsubscribedFlags.has(flagName)
|
|
72
63
|
});
|
|
73
64
|
Object.defineProperty(this, _getIsFlagLocked, {
|
|
74
65
|
writable: true,
|
|
75
|
-
value:
|
|
76
|
-
return _classPrivateFieldLooseBase(_this, _adapterState)[_adapterState].lockedFlags.has(flagName);
|
|
77
|
-
}
|
|
66
|
+
value: flagName => _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].lockedFlags.has(flagName)
|
|
78
67
|
});
|
|
79
68
|
Object.defineProperty(this, _withoutUnsubscribedOrLockedFlags, {
|
|
80
69
|
writable: true,
|
|
81
|
-
value:
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
70
|
+
value: flags => Object.fromEntries(Object.entries(flags).filter(_ref3 => {
|
|
71
|
+
let _ref4 = _slicedToArray(_ref3, 1),
|
|
72
|
+
flagName = _ref4[0];
|
|
73
|
+
return !_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](flagName) && !_classPrivateFieldLooseBase(this, _getIsFlagLocked)[_getIsFlagLocked](flagName);
|
|
74
|
+
}))
|
|
88
75
|
});
|
|
89
76
|
Object.defineProperty(this, _getIsAnonymousContext, {
|
|
90
77
|
writable: true,
|
|
91
|
-
value:
|
|
92
|
-
return !(context !== null && context !== void 0 && context.key);
|
|
93
|
-
}
|
|
78
|
+
value: context => !(context !== null && context !== void 0 && context.key)
|
|
94
79
|
});
|
|
95
80
|
Object.defineProperty(this, _ensureContext, {
|
|
96
81
|
writable: true,
|
|
97
|
-
value:
|
|
98
|
-
|
|
82
|
+
value: context => {
|
|
83
|
+
const isAnonymousContext = _classPrivateFieldLooseBase(this, _getIsAnonymousContext)[_getIsAnonymousContext](context);
|
|
99
84
|
|
|
100
85
|
// NOTE: When marked `anonymous` the SDK will generate a unique key and cache it in local storage
|
|
101
86
|
return merge(context, {
|
|
@@ -106,150 +91,97 @@ var LaunchDarklyAdapter = /*#__PURE__*/function () {
|
|
|
106
91
|
});
|
|
107
92
|
Object.defineProperty(this, _initializeClient, {
|
|
108
93
|
writable: true,
|
|
109
|
-
value:
|
|
110
|
-
return initialize(clientSideId, context, options);
|
|
111
|
-
}
|
|
94
|
+
value: (clientSideId, context, options) => initialize(clientSideId, context, options)
|
|
112
95
|
});
|
|
113
96
|
Object.defineProperty(this, _changeClientContext, {
|
|
114
97
|
writable: true,
|
|
115
|
-
value:
|
|
116
|
-
var
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
while (1) switch (_context.prev = _context.next) {
|
|
120
|
-
case 0:
|
|
121
|
-
return _context.abrupt("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.')));
|
|
122
|
-
case 1:
|
|
123
|
-
case "end":
|
|
124
|
-
return _context.stop();
|
|
125
|
-
}
|
|
126
|
-
}, _callee);
|
|
127
|
-
}));
|
|
128
|
-
function value(_x) {
|
|
129
|
-
return _value.apply(this, arguments);
|
|
130
|
-
}
|
|
131
|
-
return value;
|
|
132
|
-
}()
|
|
98
|
+
value: async nextContext => {
|
|
99
|
+
var _classPrivateFieldLoo;
|
|
100
|
+
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.'));
|
|
101
|
+
}
|
|
133
102
|
});
|
|
134
103
|
Object.defineProperty(this, _getInitialFlags, {
|
|
135
104
|
writable: true,
|
|
136
|
-
value:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
_ref8 = _slicedToArray(_ref7, 2);
|
|
159
|
-
requestedFlagName = _ref8[0];
|
|
160
|
-
defaultFlagValue = _ref8[1];
|
|
161
|
-
denormalizedRequestedFlagName = denormalizeFlagName(requestedFlagName);
|
|
162
|
-
flagsFromSdk[denormalizedRequestedFlagName] = _classPrivateFieldLooseBase(_this, _adapterState)[_adapterState].client.variation(denormalizedRequestedFlagName, defaultFlagValue);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (flagsFromSdk) {
|
|
166
|
-
normalizedFlags = normalizeFlags(flagsFromSdk);
|
|
167
|
-
_flags = _classPrivateFieldLooseBase(_this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
|
|
168
|
-
_this.updateFlags(_flags);
|
|
169
|
-
}
|
|
170
|
-
_this.setConfigurationStatus(AdapterConfigurationStatus.Configured);
|
|
171
|
-
return _context2.abrupt("return", Promise.resolve({
|
|
172
|
-
flagsFromSdk: flagsFromSdk,
|
|
173
|
-
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
174
|
-
}));
|
|
175
|
-
case 4:
|
|
176
|
-
case "end":
|
|
177
|
-
return _context2.stop();
|
|
178
|
-
}
|
|
179
|
-
}, _callee2);
|
|
180
|
-
}))).catch( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
181
|
-
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
182
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
183
|
-
case 0:
|
|
184
|
-
if (!throwOnInitializationFailure) {
|
|
185
|
-
_context3.next = 2;
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
return _context3.abrupt("return", Promise.reject(new Error('@flopflip/launchdarkly-adapter: adapter failed to initialize.')));
|
|
189
|
-
case 2:
|
|
190
|
-
console.warn('@flopflip/launchdarkly-adapter: adapter failed to initialize.');
|
|
191
|
-
return _context3.abrupt("return", Promise.resolve({
|
|
192
|
-
flagsFromSdk: undefined,
|
|
193
|
-
initializationStatus: AdapterInitializationStatus.Failed
|
|
194
|
-
}));
|
|
195
|
-
case 4:
|
|
196
|
-
case "end":
|
|
197
|
-
return _context3.stop();
|
|
198
|
-
}
|
|
199
|
-
}, _callee3);
|
|
200
|
-
}))));
|
|
201
|
-
case 3:
|
|
202
|
-
return _context4.abrupt("return", Promise.reject(new Error('@flopflip/launchdarkly-adapter: can not subscribe with non initialized client.')));
|
|
203
|
-
case 4:
|
|
204
|
-
case "end":
|
|
205
|
-
return _context4.stop();
|
|
105
|
+
value: async _ref5 => {
|
|
106
|
+
let flags = _ref5.flags,
|
|
107
|
+
throwOnInitializationFailure = _ref5.throwOnInitializationFailure;
|
|
108
|
+
if (_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
|
|
109
|
+
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.waitForInitialization().then(async () => {
|
|
110
|
+
let flagsFromSdk;
|
|
111
|
+
if (_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client && !flags) {
|
|
112
|
+
flagsFromSdk = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.allFlags();
|
|
113
|
+
} else if (_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client && flags) {
|
|
114
|
+
flagsFromSdk = {};
|
|
115
|
+
for (const _ref6 of Object.entries(flags)) {
|
|
116
|
+
var _ref7 = _slicedToArray(_ref6, 2);
|
|
117
|
+
const requestedFlagName = _ref7[0];
|
|
118
|
+
const defaultFlagValue = _ref7[1];
|
|
119
|
+
const denormalizedRequestedFlagName = denormalizeFlagName(requestedFlagName);
|
|
120
|
+
flagsFromSdk[denormalizedRequestedFlagName] = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.variation(denormalizedRequestedFlagName, defaultFlagValue);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (flagsFromSdk) {
|
|
124
|
+
const normalizedFlags = normalizeFlags(flagsFromSdk);
|
|
125
|
+
const flags = _classPrivateFieldLooseBase(this, _withoutUnsubscribedOrLockedFlags)[_withoutUnsubscribedOrLockedFlags](normalizedFlags);
|
|
126
|
+
this.updateFlags(flags);
|
|
206
127
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
128
|
+
this.setConfigurationStatus(AdapterConfigurationStatus.Configured);
|
|
129
|
+
return Promise.resolve({
|
|
130
|
+
flagsFromSdk,
|
|
131
|
+
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
132
|
+
});
|
|
133
|
+
}).catch(async () => {
|
|
134
|
+
if (throwOnInitializationFailure) return Promise.reject(new Error('@flopflip/launchdarkly-adapter: adapter failed to initialize.'));
|
|
135
|
+
console.warn('@flopflip/launchdarkly-adapter: adapter failed to initialize.');
|
|
136
|
+
return Promise.resolve({
|
|
137
|
+
flagsFromSdk: undefined,
|
|
138
|
+
initializationStatus: AdapterInitializationStatus.Failed
|
|
139
|
+
});
|
|
140
|
+
});
|
|
211
141
|
}
|
|
212
|
-
return
|
|
213
|
-
}
|
|
142
|
+
return Promise.reject(new Error('@flopflip/launchdarkly-adapter: can not subscribe with non initialized client.'));
|
|
143
|
+
}
|
|
214
144
|
});
|
|
215
145
|
Object.defineProperty(this, _didFlagChange, {
|
|
216
146
|
writable: true,
|
|
217
|
-
value:
|
|
218
|
-
|
|
147
|
+
value: (flagName, nextFlagValue) => {
|
|
148
|
+
const previousFlagValue = this.getFlag(flagName);
|
|
219
149
|
if (previousFlagValue === undefined) return true;
|
|
220
150
|
return previousFlagValue !== nextFlagValue;
|
|
221
151
|
}
|
|
222
152
|
});
|
|
223
153
|
Object.defineProperty(this, _setupFlagSubcription, {
|
|
224
154
|
writable: true,
|
|
225
|
-
value:
|
|
226
|
-
|
|
227
|
-
flagsUpdateDelayMs =
|
|
228
|
-
|
|
155
|
+
value: _ref8 => {
|
|
156
|
+
let flagsFromSdk = _ref8.flagsFromSdk,
|
|
157
|
+
flagsUpdateDelayMs = _ref8.flagsUpdateDelayMs;
|
|
158
|
+
for (const flagName in flagsFromSdk) {
|
|
229
159
|
// Dispatch whenever a configured flag value changes
|
|
230
|
-
if (Object.prototype.hasOwnProperty.call(flagsFromSdk, flagName) && _classPrivateFieldLooseBase(
|
|
231
|
-
_classPrivateFieldLooseBase(
|
|
232
|
-
|
|
160
|
+
if (Object.prototype.hasOwnProperty.call(flagsFromSdk, flagName) && _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client) {
|
|
161
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client.on("change:".concat(flagName), flagValue => {
|
|
162
|
+
const _normalizeFlag = normalizeFlag(flagName, flagValue),
|
|
233
163
|
_normalizeFlag2 = _slicedToArray(_normalizeFlag, 2),
|
|
234
164
|
normalizedFlagName = _normalizeFlag2[0],
|
|
235
165
|
normalizedFlagValue = _normalizeFlag2[1];
|
|
236
|
-
if (_classPrivateFieldLooseBase(
|
|
166
|
+
if (_classPrivateFieldLooseBase(this, _getIsFlagUnsubcribed)[_getIsFlagUnsubcribed](normalizedFlagName)) return;
|
|
237
167
|
|
|
238
168
|
// Sometimes the SDK flushes flag changes without a value having changed.
|
|
239
|
-
if (!_classPrivateFieldLooseBase(
|
|
240
|
-
|
|
169
|
+
if (!_classPrivateFieldLooseBase(this, _didFlagChange)[_didFlagChange](normalizedFlagName, normalizedFlagValue)) return;
|
|
170
|
+
const updatedFlags = {
|
|
171
|
+
[normalizedFlagName]: normalizedFlagValue
|
|
172
|
+
};
|
|
241
173
|
|
|
242
174
|
// NOTE: Adapter state needs to be updated outside of debounced-fn
|
|
243
175
|
// so that no flag updates are lost.
|
|
244
|
-
_classPrivateFieldLooseBase(
|
|
245
|
-
|
|
246
|
-
_classPrivateFieldLooseBase(
|
|
176
|
+
_classPrivateFieldLooseBase(this, _updateFlagsInAdapterState)[_updateFlagsInAdapterState](updatedFlags);
|
|
177
|
+
const flushFlagsUpdate = () => {
|
|
178
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags);
|
|
247
179
|
};
|
|
248
|
-
|
|
180
|
+
const scheduleImmediately = {
|
|
249
181
|
before: true,
|
|
250
182
|
after: false
|
|
251
183
|
};
|
|
252
|
-
|
|
184
|
+
const scheduleTrailingEdge = {
|
|
253
185
|
before: false,
|
|
254
186
|
after: true
|
|
255
187
|
};
|
|
@@ -258,24 +190,21 @@ var LaunchDarklyAdapter = /*#__PURE__*/function () {
|
|
|
258
190
|
}, flagsUpdateDelayMs ? scheduleTrailingEdge : scheduleImmediately))();
|
|
259
191
|
});
|
|
260
192
|
}
|
|
261
|
-
};
|
|
262
|
-
for (var flagName in flagsFromSdk) {
|
|
263
|
-
_loop(flagName);
|
|
264
193
|
}
|
|
265
194
|
}
|
|
266
195
|
});
|
|
267
196
|
// External. Flags are autolocked when updated.
|
|
268
|
-
this.updateFlags =
|
|
269
|
-
_classPrivateFieldLooseBase(
|
|
197
|
+
this.updateFlags = (flags, options) => {
|
|
198
|
+
_classPrivateFieldLooseBase(this, _updateFlagsInAdapterState)[_updateFlagsInAdapterState](flags, options);
|
|
270
199
|
|
|
271
200
|
// ...and flush initial state of flags
|
|
272
|
-
_classPrivateFieldLooseBase(
|
|
201
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags);
|
|
273
202
|
};
|
|
274
|
-
this.unsubscribe =
|
|
275
|
-
_classPrivateFieldLooseBase(
|
|
203
|
+
this.unsubscribe = () => {
|
|
204
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].subscriptionStatus = AdapterSubscriptionStatus.Unsubscribed;
|
|
276
205
|
};
|
|
277
|
-
this.subscribe =
|
|
278
|
-
_classPrivateFieldLooseBase(
|
|
206
|
+
this.subscribe = () => {
|
|
207
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].subscriptionStatus = AdapterSubscriptionStatus.Subscribed;
|
|
279
208
|
};
|
|
280
209
|
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState] = {
|
|
281
210
|
subscriptionStatus: AdapterSubscriptionStatus.Subscribed,
|
|
@@ -291,162 +220,92 @@ var LaunchDarklyAdapter = /*#__PURE__*/function () {
|
|
|
291
220
|
};
|
|
292
221
|
this.id = adapterIdentifiers.launchdarkly;
|
|
293
222
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}
|
|
350
|
-
return configure;
|
|
351
|
-
}()
|
|
352
|
-
}, {
|
|
353
|
-
key: "reconfigure",
|
|
354
|
-
value: function () {
|
|
355
|
-
var _reconfigure = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(adapterArgs, _adapterEventHandlers) {
|
|
356
|
-
var nextContext;
|
|
357
|
-
return _regeneratorRuntime.wrap(function _callee6$(_context6) {
|
|
358
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
359
|
-
case 0:
|
|
360
|
-
if (this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) {
|
|
361
|
-
_context6.next = 2;
|
|
362
|
-
break;
|
|
363
|
-
}
|
|
364
|
-
return _context6.abrupt("return", Promise.reject(new Error('@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.')));
|
|
365
|
-
case 2:
|
|
366
|
-
nextContext = adapterArgs.context;
|
|
367
|
-
if (isEqual(_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, nextContext)) {
|
|
368
|
-
_context6.next = 8;
|
|
369
|
-
break;
|
|
370
|
-
}
|
|
371
|
-
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](nextContext);
|
|
372
|
-
_context6.next = 7;
|
|
373
|
-
return _classPrivateFieldLooseBase(this, _changeClientContext)[_changeClientContext](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context);
|
|
374
|
-
case 7:
|
|
375
|
-
return _context6.abrupt("return", Promise.resolve({
|
|
376
|
-
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
377
|
-
}));
|
|
378
|
-
case 8:
|
|
379
|
-
return _context6.abrupt("return", Promise.resolve({
|
|
380
|
-
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
381
|
-
}));
|
|
382
|
-
case 9:
|
|
383
|
-
case "end":
|
|
384
|
-
return _context6.stop();
|
|
385
|
-
}
|
|
386
|
-
}, _callee6, this);
|
|
387
|
-
}));
|
|
388
|
-
function reconfigure(_x5, _x6) {
|
|
389
|
-
return _reconfigure.apply(this, arguments);
|
|
390
|
-
}
|
|
391
|
-
return reconfigure;
|
|
392
|
-
}()
|
|
393
|
-
}, {
|
|
394
|
-
key: "getIsConfigurationStatus",
|
|
395
|
-
value: function getIsConfigurationStatus(configurationStatus) {
|
|
396
|
-
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus === configurationStatus;
|
|
397
|
-
}
|
|
398
|
-
}, {
|
|
399
|
-
key: "setConfigurationStatus",
|
|
400
|
-
value: function setConfigurationStatus(nextConfigurationStatus) {
|
|
401
|
-
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus = nextConfigurationStatus;
|
|
402
|
-
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('statusStateChange', {
|
|
403
|
-
configurationStatus: _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus
|
|
223
|
+
async configure(adapterArgs, adapterEventHandlers) {
|
|
224
|
+
var _sdk$clientOptions;
|
|
225
|
+
const handleFlagsChange = nextFlags => {
|
|
226
|
+
if (_classPrivateFieldLooseBase(this, _getIsAdapterUnsubscribed)[_getIsAdapterUnsubscribed]()) return;
|
|
227
|
+
adapterEventHandlers.onFlagsStateChange({
|
|
228
|
+
flags: nextFlags,
|
|
229
|
+
id: this.id
|
|
230
|
+
});
|
|
231
|
+
};
|
|
232
|
+
const handleStatusChange = nextStatus => {
|
|
233
|
+
if (_classPrivateFieldLooseBase(this, _getIsAdapterUnsubscribed)[_getIsAdapterUnsubscribed]()) return;
|
|
234
|
+
adapterEventHandlers.onStatusStateChange({
|
|
235
|
+
status: nextStatus,
|
|
236
|
+
id: this.id
|
|
237
|
+
});
|
|
238
|
+
};
|
|
239
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus = AdapterConfigurationStatus.Configuring;
|
|
240
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.on('flagsStateChange', handleFlagsChange);
|
|
241
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.on('statusStateChange', handleStatusChange);
|
|
242
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('statusStateChange', {
|
|
243
|
+
configurationStatus: _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus
|
|
244
|
+
});
|
|
245
|
+
const sdk = adapterArgs.sdk,
|
|
246
|
+
context = adapterArgs.context,
|
|
247
|
+
flags = adapterArgs.flags,
|
|
248
|
+
_adapterArgs$subscrib = adapterArgs.subscribeToFlagChanges,
|
|
249
|
+
subscribeToFlagChanges = _adapterArgs$subscrib === void 0 ? true : _adapterArgs$subscrib,
|
|
250
|
+
_adapterArgs$throwOnI = adapterArgs.throwOnInitializationFailure,
|
|
251
|
+
throwOnInitializationFailure = _adapterArgs$throwOnI === void 0 ? false : _adapterArgs$throwOnI,
|
|
252
|
+
flagsUpdateDelayMs = adapterArgs.flagsUpdateDelayMs;
|
|
253
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](context);
|
|
254
|
+
_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
|
+
return _classPrivateFieldLooseBase(this, _getInitialFlags)[_getInitialFlags]({
|
|
256
|
+
flags,
|
|
257
|
+
throwOnInitializationFailure
|
|
258
|
+
}).then(_ref9 => {
|
|
259
|
+
let flagsFromSdk = _ref9.flagsFromSdk,
|
|
260
|
+
initializationStatus = _ref9.initializationStatus;
|
|
261
|
+
if (subscribeToFlagChanges && flagsFromSdk) _classPrivateFieldLooseBase(this, _setupFlagSubcription)[_setupFlagSubcription]({
|
|
262
|
+
flagsFromSdk,
|
|
263
|
+
flagsUpdateDelayMs
|
|
264
|
+
});
|
|
265
|
+
return {
|
|
266
|
+
initializationStatus
|
|
267
|
+
};
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
async reconfigure(adapterArgs, _adapterEventHandlers) {
|
|
271
|
+
if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) return Promise.reject(new Error('@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.'));
|
|
272
|
+
const nextContext = adapterArgs.context;
|
|
273
|
+
if (!isEqual(_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context, nextContext)) {
|
|
274
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context = _classPrivateFieldLooseBase(this, _ensureContext)[_ensureContext](nextContext);
|
|
275
|
+
await _classPrivateFieldLooseBase(this, _changeClientContext)[_changeClientContext](_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context);
|
|
276
|
+
return Promise.resolve({
|
|
277
|
+
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
404
278
|
});
|
|
405
279
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
case 5:
|
|
434
|
-
case "end":
|
|
435
|
-
return _context7.stop();
|
|
436
|
-
}
|
|
437
|
-
}, _callee7, this);
|
|
438
|
-
}));
|
|
439
|
-
function updateClientContext(_x7) {
|
|
440
|
-
return _updateClientContext.apply(this, arguments);
|
|
441
|
-
}
|
|
442
|
-
return updateClientContext;
|
|
443
|
-
}()
|
|
444
|
-
}]);
|
|
445
|
-
return LaunchDarklyAdapter;
|
|
446
|
-
}();
|
|
447
|
-
var adapter = new LaunchDarklyAdapter();
|
|
280
|
+
return Promise.resolve({
|
|
281
|
+
initializationStatus: AdapterInitializationStatus.Succeeded
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
getIsConfigurationStatus(configurationStatus) {
|
|
285
|
+
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus === configurationStatus;
|
|
286
|
+
}
|
|
287
|
+
setConfigurationStatus(nextConfigurationStatus) {
|
|
288
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus = nextConfigurationStatus;
|
|
289
|
+
_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('statusStateChange', {
|
|
290
|
+
configurationStatus: _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
getClient() {
|
|
294
|
+
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].client;
|
|
295
|
+
}
|
|
296
|
+
getFlag(flagName) {
|
|
297
|
+
return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags[flagName];
|
|
298
|
+
}
|
|
299
|
+
async updateClientContext(updatedContextProps) {
|
|
300
|
+
const isAdapterConfigured = this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured);
|
|
301
|
+
warning(isAdapterConfigured, '@flopflip/launchdarkly-adapter: adapter not configured. Client context can not be updated before.');
|
|
302
|
+
if (!isAdapterConfigured) return Promise.reject(new Error('Can not update client context: adapter not yet configured.'));
|
|
303
|
+
return _classPrivateFieldLooseBase(this, _changeClientContext)[_changeClientContext](_objectSpread(_objectSpread({}, _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].context), updatedContextProps));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
const adapter = new LaunchDarklyAdapter();
|
|
448
307
|
exposeGlobally(adapter);
|
|
449
308
|
|
|
450
|
-
|
|
309
|
+
const version = "13.0.2";
|
|
451
310
|
|
|
452
311
|
export { adapter as default, version };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flopflip/launchdarkly-adapter",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.2",
|
|
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,15 +26,15 @@
|
|
|
26
26
|
"globalthis": "1.0.3"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@babel/runtime": "7.21.
|
|
30
|
-
"@flopflip/adapter-utilities": "13.0.
|
|
31
|
-
"@flopflip/types": "13.0.
|
|
29
|
+
"@babel/runtime": "7.21.5",
|
|
30
|
+
"@flopflip/adapter-utilities": "13.0.2",
|
|
31
|
+
"@flopflip/types": "13.0.2",
|
|
32
32
|
"debounce-fn": "4.0.0",
|
|
33
|
-
"launchdarkly-js-client-sdk": "3.1.
|
|
33
|
+
"launchdarkly-js-client-sdk": "3.1.3",
|
|
34
34
|
"lodash": "4.17.21",
|
|
35
35
|
"mitt": "3.0.0",
|
|
36
36
|
"tiny-warning": "1.0.3",
|
|
37
|
-
"ts-deepmerge": "
|
|
37
|
+
"ts-deepmerge": "6.0.3"
|
|
38
38
|
},
|
|
39
39
|
"keywords": [
|
|
40
40
|
"feature-flags",
|