@openfeature/web-sdk 0.4.13 → 0.4.15
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/README.md +2 -5
- package/dist/cjs/index.js +224 -389
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +228 -392
- package/dist/esm/index.js.map +4 -4
- package/dist/types.d.ts +180 -45
- package/package.json +3 -3
package/dist/cjs/index.js
CHANGED
|
@@ -31,374 +31,184 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
31
31
|
));
|
|
32
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
33
33
|
|
|
34
|
-
// ../../node_modules/
|
|
35
|
-
var
|
|
36
|
-
"../../node_modules/
|
|
34
|
+
// ../../node_modules/eventemitter3/index.js
|
|
35
|
+
var require_eventemitter3 = __commonJS({
|
|
36
|
+
"../../node_modules/eventemitter3/index.js"(exports, module2) {
|
|
37
37
|
"use strict";
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
38
|
+
var has = Object.prototype.hasOwnProperty;
|
|
39
|
+
var prefix = "~";
|
|
40
|
+
function Events() {
|
|
41
|
+
}
|
|
42
|
+
if (Object.create) {
|
|
43
|
+
Events.prototype = /* @__PURE__ */ Object.create(null);
|
|
44
|
+
if (!new Events().__proto__)
|
|
45
|
+
prefix = false;
|
|
46
|
+
}
|
|
47
|
+
function EE(fn, context, once) {
|
|
48
|
+
this.fn = fn;
|
|
49
|
+
this.context = context;
|
|
50
|
+
this.once = once || false;
|
|
51
|
+
}
|
|
52
|
+
function addListener(emitter, event, fn, context, once) {
|
|
53
|
+
if (typeof fn !== "function") {
|
|
54
|
+
throw new TypeError("The listener must be a function");
|
|
55
|
+
}
|
|
56
|
+
var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
|
|
57
|
+
if (!emitter._events[evt])
|
|
58
|
+
emitter._events[evt] = listener, emitter._eventsCount++;
|
|
59
|
+
else if (!emitter._events[evt].fn)
|
|
60
|
+
emitter._events[evt].push(listener);
|
|
61
|
+
else
|
|
62
|
+
emitter._events[evt] = [emitter._events[evt], listener];
|
|
63
|
+
return emitter;
|
|
64
|
+
}
|
|
65
|
+
function clearEvent(emitter, evt) {
|
|
66
|
+
if (--emitter._eventsCount === 0)
|
|
67
|
+
emitter._events = new Events();
|
|
68
|
+
else
|
|
69
|
+
delete emitter._events[evt];
|
|
57
70
|
}
|
|
58
|
-
var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) {
|
|
59
|
-
return value !== value;
|
|
60
|
-
};
|
|
61
71
|
function EventEmitter2() {
|
|
62
|
-
|
|
72
|
+
this._events = new Events();
|
|
73
|
+
this._eventsCount = 0;
|
|
63
74
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
function checkListener(listener) {
|
|
72
|
-
if (typeof listener !== "function") {
|
|
73
|
-
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
Object.defineProperty(EventEmitter2, "defaultMaxListeners", {
|
|
77
|
-
enumerable: true,
|
|
78
|
-
get: function() {
|
|
79
|
-
return defaultMaxListeners;
|
|
80
|
-
},
|
|
81
|
-
set: function(arg) {
|
|
82
|
-
if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) {
|
|
83
|
-
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + ".");
|
|
84
|
-
}
|
|
85
|
-
defaultMaxListeners = arg;
|
|
75
|
+
EventEmitter2.prototype.eventNames = function eventNames() {
|
|
76
|
+
var names = [], events, name;
|
|
77
|
+
if (this._eventsCount === 0)
|
|
78
|
+
return names;
|
|
79
|
+
for (name in events = this._events) {
|
|
80
|
+
if (has.call(events, name))
|
|
81
|
+
names.push(prefix ? name.slice(1) : name);
|
|
86
82
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
|
|
90
|
-
this._events = /* @__PURE__ */ Object.create(null);
|
|
91
|
-
this._eventsCount = 0;
|
|
83
|
+
if (Object.getOwnPropertySymbols) {
|
|
84
|
+
return names.concat(Object.getOwnPropertySymbols(events));
|
|
92
85
|
}
|
|
93
|
-
|
|
86
|
+
return names;
|
|
94
87
|
};
|
|
95
|
-
EventEmitter2.prototype.
|
|
96
|
-
|
|
97
|
-
|
|
88
|
+
EventEmitter2.prototype.listeners = function listeners(event) {
|
|
89
|
+
var evt = prefix ? prefix + event : event, handlers = this._events[evt];
|
|
90
|
+
if (!handlers)
|
|
91
|
+
return [];
|
|
92
|
+
if (handlers.fn)
|
|
93
|
+
return [handlers.fn];
|
|
94
|
+
for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
|
|
95
|
+
ee[i] = handlers[i].fn;
|
|
98
96
|
}
|
|
99
|
-
|
|
100
|
-
return this;
|
|
97
|
+
return ee;
|
|
101
98
|
};
|
|
102
|
-
function
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return
|
|
99
|
+
EventEmitter2.prototype.listenerCount = function listenerCount(event) {
|
|
100
|
+
var evt = prefix ? prefix + event : event, listeners = this._events[evt];
|
|
101
|
+
if (!listeners)
|
|
102
|
+
return 0;
|
|
103
|
+
if (listeners.fn)
|
|
104
|
+
return 1;
|
|
105
|
+
return listeners.length;
|
|
109
106
|
};
|
|
110
|
-
EventEmitter2.prototype.emit = function emit(
|
|
111
|
-
var
|
|
112
|
-
|
|
113
|
-
args.push(arguments[i]);
|
|
114
|
-
var doError = type === "error";
|
|
115
|
-
var events = this._events;
|
|
116
|
-
if (events !== void 0)
|
|
117
|
-
doError = doError && events.error === void 0;
|
|
118
|
-
else if (!doError)
|
|
107
|
+
EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
|
|
108
|
+
var evt = prefix ? prefix + event : event;
|
|
109
|
+
if (!this._events[evt])
|
|
119
110
|
return false;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
111
|
+
var listeners = this._events[evt], len = arguments.length, args, i;
|
|
112
|
+
if (listeners.fn) {
|
|
113
|
+
if (listeners.once)
|
|
114
|
+
this.removeListener(event, listeners.fn, void 0, true);
|
|
115
|
+
switch (len) {
|
|
116
|
+
case 1:
|
|
117
|
+
return listeners.fn.call(listeners.context), true;
|
|
118
|
+
case 2:
|
|
119
|
+
return listeners.fn.call(listeners.context, a1), true;
|
|
120
|
+
case 3:
|
|
121
|
+
return listeners.fn.call(listeners.context, a1, a2), true;
|
|
122
|
+
case 4:
|
|
123
|
+
return listeners.fn.call(listeners.context, a1, a2, a3), true;
|
|
124
|
+
case 5:
|
|
125
|
+
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
|
|
126
|
+
case 6:
|
|
127
|
+
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
|
|
126
128
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
throw err;
|
|
130
|
-
}
|
|
131
|
-
var handler = events[type];
|
|
132
|
-
if (handler === void 0)
|
|
133
|
-
return false;
|
|
134
|
-
if (typeof handler === "function") {
|
|
135
|
-
ReflectApply(handler, this, args);
|
|
136
|
-
} else {
|
|
137
|
-
var len = handler.length;
|
|
138
|
-
var listeners = arrayClone(handler, len);
|
|
139
|
-
for (var i = 0; i < len; ++i)
|
|
140
|
-
ReflectApply(listeners[i], this, args);
|
|
141
|
-
}
|
|
142
|
-
return true;
|
|
143
|
-
};
|
|
144
|
-
function _addListener(target, type, listener, prepend) {
|
|
145
|
-
var m;
|
|
146
|
-
var events;
|
|
147
|
-
var existing;
|
|
148
|
-
checkListener(listener);
|
|
149
|
-
events = target._events;
|
|
150
|
-
if (events === void 0) {
|
|
151
|
-
events = target._events = /* @__PURE__ */ Object.create(null);
|
|
152
|
-
target._eventsCount = 0;
|
|
153
|
-
} else {
|
|
154
|
-
if (events.newListener !== void 0) {
|
|
155
|
-
target.emit(
|
|
156
|
-
"newListener",
|
|
157
|
-
type,
|
|
158
|
-
listener.listener ? listener.listener : listener
|
|
159
|
-
);
|
|
160
|
-
events = target._events;
|
|
129
|
+
for (i = 1, args = new Array(len - 1); i < len; i++) {
|
|
130
|
+
args[i - 1] = arguments[i];
|
|
161
131
|
}
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
if (existing === void 0) {
|
|
165
|
-
existing = events[type] = listener;
|
|
166
|
-
++target._eventsCount;
|
|
132
|
+
listeners.fn.apply(listeners.context, args);
|
|
167
133
|
} else {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
134
|
+
var length = listeners.length, j;
|
|
135
|
+
for (i = 0; i < length; i++) {
|
|
136
|
+
if (listeners[i].once)
|
|
137
|
+
this.removeListener(event, listeners[i].fn, void 0, true);
|
|
138
|
+
switch (len) {
|
|
139
|
+
case 1:
|
|
140
|
+
listeners[i].fn.call(listeners[i].context);
|
|
141
|
+
break;
|
|
142
|
+
case 2:
|
|
143
|
+
listeners[i].fn.call(listeners[i].context, a1);
|
|
144
|
+
break;
|
|
145
|
+
case 3:
|
|
146
|
+
listeners[i].fn.call(listeners[i].context, a1, a2);
|
|
147
|
+
break;
|
|
148
|
+
case 4:
|
|
149
|
+
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
if (!args)
|
|
153
|
+
for (j = 1, args = new Array(len - 1); j < len; j++) {
|
|
154
|
+
args[j - 1] = arguments[j];
|
|
155
|
+
}
|
|
156
|
+
listeners[i].fn.apply(listeners[i].context, args);
|
|
157
|
+
}
|
|
184
158
|
}
|
|
185
159
|
}
|
|
186
|
-
return
|
|
187
|
-
}
|
|
188
|
-
EventEmitter2.prototype.addListener = function addListener(type, listener) {
|
|
189
|
-
return _addListener(this, type, listener, false);
|
|
190
|
-
};
|
|
191
|
-
EventEmitter2.prototype.on = EventEmitter2.prototype.addListener;
|
|
192
|
-
EventEmitter2.prototype.prependListener = function prependListener(type, listener) {
|
|
193
|
-
return _addListener(this, type, listener, true);
|
|
160
|
+
return true;
|
|
194
161
|
};
|
|
195
|
-
function
|
|
196
|
-
|
|
197
|
-
this.target.removeListener(this.type, this.wrapFn);
|
|
198
|
-
this.fired = true;
|
|
199
|
-
if (arguments.length === 0)
|
|
200
|
-
return this.listener.call(this.target);
|
|
201
|
-
return this.listener.apply(this.target, arguments);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
function _onceWrap(target, type, listener) {
|
|
205
|
-
var state = { fired: false, wrapFn: void 0, target, type, listener };
|
|
206
|
-
var wrapped = onceWrapper.bind(state);
|
|
207
|
-
wrapped.listener = listener;
|
|
208
|
-
state.wrapFn = wrapped;
|
|
209
|
-
return wrapped;
|
|
210
|
-
}
|
|
211
|
-
EventEmitter2.prototype.once = function once2(type, listener) {
|
|
212
|
-
checkListener(listener);
|
|
213
|
-
this.on(type, _onceWrap(this, type, listener));
|
|
214
|
-
return this;
|
|
162
|
+
EventEmitter2.prototype.on = function on(event, fn, context) {
|
|
163
|
+
return addListener(this, event, fn, context, false);
|
|
215
164
|
};
|
|
216
|
-
EventEmitter2.prototype.
|
|
217
|
-
|
|
218
|
-
this.prependListener(type, _onceWrap(this, type, listener));
|
|
219
|
-
return this;
|
|
165
|
+
EventEmitter2.prototype.once = function once(event, fn, context) {
|
|
166
|
+
return addListener(this, event, fn, context, true);
|
|
220
167
|
};
|
|
221
|
-
EventEmitter2.prototype.removeListener = function removeListener(
|
|
222
|
-
var
|
|
223
|
-
|
|
224
|
-
events = this._events;
|
|
225
|
-
if (events === void 0)
|
|
168
|
+
EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {
|
|
169
|
+
var evt = prefix ? prefix + event : event;
|
|
170
|
+
if (!this._events[evt])
|
|
226
171
|
return this;
|
|
227
|
-
|
|
228
|
-
|
|
172
|
+
if (!fn) {
|
|
173
|
+
clearEvent(this, evt);
|
|
229
174
|
return this;
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
if (events.removeListener)
|
|
236
|
-
this.emit("removeListener", type, list.listener || listener);
|
|
175
|
+
}
|
|
176
|
+
var listeners = this._events[evt];
|
|
177
|
+
if (listeners.fn) {
|
|
178
|
+
if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
|
|
179
|
+
clearEvent(this, evt);
|
|
237
180
|
}
|
|
238
|
-
} else
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
originalListener = list[i].listener;
|
|
243
|
-
position = i;
|
|
244
|
-
break;
|
|
181
|
+
} else {
|
|
182
|
+
for (var i = 0, events = [], length = listeners.length; i < length; i++) {
|
|
183
|
+
if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
|
|
184
|
+
events.push(listeners[i]);
|
|
245
185
|
}
|
|
246
186
|
}
|
|
247
|
-
if (
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
else {
|
|
252
|
-
spliceOne(list, position);
|
|
253
|
-
}
|
|
254
|
-
if (list.length === 1)
|
|
255
|
-
events[type] = list[0];
|
|
256
|
-
if (events.removeListener !== void 0)
|
|
257
|
-
this.emit("removeListener", type, originalListener || listener);
|
|
187
|
+
if (events.length)
|
|
188
|
+
this._events[evt] = events.length === 1 ? events[0] : events;
|
|
189
|
+
else
|
|
190
|
+
clearEvent(this, evt);
|
|
258
191
|
}
|
|
259
192
|
return this;
|
|
260
193
|
};
|
|
261
|
-
EventEmitter2.prototype.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
this._events = /* @__PURE__ */ Object.create(null);
|
|
270
|
-
this._eventsCount = 0;
|
|
271
|
-
} else if (events[type] !== void 0) {
|
|
272
|
-
if (--this._eventsCount === 0)
|
|
273
|
-
this._events = /* @__PURE__ */ Object.create(null);
|
|
274
|
-
else
|
|
275
|
-
delete events[type];
|
|
276
|
-
}
|
|
277
|
-
return this;
|
|
278
|
-
}
|
|
279
|
-
if (arguments.length === 0) {
|
|
280
|
-
var keys = Object.keys(events);
|
|
281
|
-
var key;
|
|
282
|
-
for (i = 0; i < keys.length; ++i) {
|
|
283
|
-
key = keys[i];
|
|
284
|
-
if (key === "removeListener")
|
|
285
|
-
continue;
|
|
286
|
-
this.removeAllListeners(key);
|
|
287
|
-
}
|
|
288
|
-
this.removeAllListeners("removeListener");
|
|
289
|
-
this._events = /* @__PURE__ */ Object.create(null);
|
|
194
|
+
EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {
|
|
195
|
+
var evt;
|
|
196
|
+
if (event) {
|
|
197
|
+
evt = prefix ? prefix + event : event;
|
|
198
|
+
if (this._events[evt])
|
|
199
|
+
clearEvent(this, evt);
|
|
200
|
+
} else {
|
|
201
|
+
this._events = new Events();
|
|
290
202
|
this._eventsCount = 0;
|
|
291
|
-
return this;
|
|
292
|
-
}
|
|
293
|
-
listeners = events[type];
|
|
294
|
-
if (typeof listeners === "function") {
|
|
295
|
-
this.removeListener(type, listeners);
|
|
296
|
-
} else if (listeners !== void 0) {
|
|
297
|
-
for (i = listeners.length - 1; i >= 0; i--) {
|
|
298
|
-
this.removeListener(type, listeners[i]);
|
|
299
|
-
}
|
|
300
203
|
}
|
|
301
204
|
return this;
|
|
302
205
|
};
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return [];
|
|
310
|
-
if (typeof evlistener === "function")
|
|
311
|
-
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
312
|
-
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
|
|
313
|
-
}
|
|
314
|
-
EventEmitter2.prototype.listeners = function listeners(type) {
|
|
315
|
-
return _listeners(this, type, true);
|
|
316
|
-
};
|
|
317
|
-
EventEmitter2.prototype.rawListeners = function rawListeners(type) {
|
|
318
|
-
return _listeners(this, type, false);
|
|
319
|
-
};
|
|
320
|
-
EventEmitter2.listenerCount = function(emitter, type) {
|
|
321
|
-
if (typeof emitter.listenerCount === "function") {
|
|
322
|
-
return emitter.listenerCount(type);
|
|
323
|
-
} else {
|
|
324
|
-
return listenerCount.call(emitter, type);
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
EventEmitter2.prototype.listenerCount = listenerCount;
|
|
328
|
-
function listenerCount(type) {
|
|
329
|
-
var events = this._events;
|
|
330
|
-
if (events !== void 0) {
|
|
331
|
-
var evlistener = events[type];
|
|
332
|
-
if (typeof evlistener === "function") {
|
|
333
|
-
return 1;
|
|
334
|
-
} else if (evlistener !== void 0) {
|
|
335
|
-
return evlistener.length;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
return 0;
|
|
339
|
-
}
|
|
340
|
-
EventEmitter2.prototype.eventNames = function eventNames() {
|
|
341
|
-
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
|
|
342
|
-
};
|
|
343
|
-
function arrayClone(arr, n) {
|
|
344
|
-
var copy = new Array(n);
|
|
345
|
-
for (var i = 0; i < n; ++i)
|
|
346
|
-
copy[i] = arr[i];
|
|
347
|
-
return copy;
|
|
348
|
-
}
|
|
349
|
-
function spliceOne(list, index) {
|
|
350
|
-
for (; index + 1 < list.length; index++)
|
|
351
|
-
list[index] = list[index + 1];
|
|
352
|
-
list.pop();
|
|
353
|
-
}
|
|
354
|
-
function unwrapListeners(arr) {
|
|
355
|
-
var ret = new Array(arr.length);
|
|
356
|
-
for (var i = 0; i < ret.length; ++i) {
|
|
357
|
-
ret[i] = arr[i].listener || arr[i];
|
|
358
|
-
}
|
|
359
|
-
return ret;
|
|
360
|
-
}
|
|
361
|
-
function once(emitter, name) {
|
|
362
|
-
return new Promise(function(resolve, reject) {
|
|
363
|
-
function errorListener(err) {
|
|
364
|
-
emitter.removeListener(name, resolver);
|
|
365
|
-
reject(err);
|
|
366
|
-
}
|
|
367
|
-
function resolver() {
|
|
368
|
-
if (typeof emitter.removeListener === "function") {
|
|
369
|
-
emitter.removeListener("error", errorListener);
|
|
370
|
-
}
|
|
371
|
-
resolve([].slice.call(arguments));
|
|
372
|
-
}
|
|
373
|
-
;
|
|
374
|
-
eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
|
|
375
|
-
if (name !== "error") {
|
|
376
|
-
addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
|
|
377
|
-
}
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
|
|
381
|
-
if (typeof emitter.on === "function") {
|
|
382
|
-
eventTargetAgnosticAddListener(emitter, "error", handler, flags);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
386
|
-
if (typeof emitter.on === "function") {
|
|
387
|
-
if (flags.once) {
|
|
388
|
-
emitter.once(name, listener);
|
|
389
|
-
} else {
|
|
390
|
-
emitter.on(name, listener);
|
|
391
|
-
}
|
|
392
|
-
} else if (typeof emitter.addEventListener === "function") {
|
|
393
|
-
emitter.addEventListener(name, function wrapListener(arg) {
|
|
394
|
-
if (flags.once) {
|
|
395
|
-
emitter.removeEventListener(name, wrapListener);
|
|
396
|
-
}
|
|
397
|
-
listener(arg);
|
|
398
|
-
});
|
|
399
|
-
} else {
|
|
400
|
-
throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
|
|
401
|
-
}
|
|
206
|
+
EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
|
|
207
|
+
EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;
|
|
208
|
+
EventEmitter2.prefixed = prefix;
|
|
209
|
+
EventEmitter2.EventEmitter = EventEmitter2;
|
|
210
|
+
if ("undefined" !== typeof module2) {
|
|
211
|
+
module2.exports = EventEmitter2;
|
|
402
212
|
}
|
|
403
213
|
}
|
|
404
214
|
});
|
|
@@ -412,7 +222,8 @@ __export(src_exports, {
|
|
|
412
222
|
OpenFeatureAPI: () => OpenFeatureAPI,
|
|
413
223
|
OpenFeatureClient: () => OpenFeatureClient,
|
|
414
224
|
OpenFeatureEventEmitter: () => OpenFeatureEventEmitter,
|
|
415
|
-
ProviderEvents: () => import_core2.ClientProviderEvents
|
|
225
|
+
ProviderEvents: () => import_core2.ClientProviderEvents,
|
|
226
|
+
ProviderStatus: () => import_core3.ClientProviderStatus
|
|
416
227
|
});
|
|
417
228
|
module.exports = __toCommonJS(src_exports);
|
|
418
229
|
|
|
@@ -424,30 +235,30 @@ var import_core6 = require("@openfeature/core");
|
|
|
424
235
|
|
|
425
236
|
// src/events/open-feature-event-emitter.ts
|
|
426
237
|
var import_core = require("@openfeature/core");
|
|
427
|
-
|
|
238
|
+
|
|
239
|
+
// ../../node_modules/eventemitter3/index.mjs
|
|
240
|
+
var import_index = __toESM(require_eventemitter3(), 1);
|
|
241
|
+
|
|
242
|
+
// src/events/open-feature-event-emitter.ts
|
|
428
243
|
var OpenFeatureEventEmitter = class extends import_core.GenericEventEmitter {
|
|
429
|
-
eventEmitter = new
|
|
244
|
+
eventEmitter = new import_index.default();
|
|
430
245
|
constructor() {
|
|
431
246
|
super();
|
|
432
|
-
this.eventEmitter.on("error", (err) => {
|
|
433
|
-
this._logger?.error("Error running event handler:", err);
|
|
434
|
-
});
|
|
435
247
|
}
|
|
436
248
|
};
|
|
437
249
|
|
|
438
250
|
// src/events/events.ts
|
|
439
251
|
var import_core2 = require("@openfeature/core");
|
|
440
252
|
|
|
441
|
-
// src/provider/
|
|
253
|
+
// src/provider/provider.ts
|
|
442
254
|
var import_core3 = require("@openfeature/core");
|
|
255
|
+
|
|
256
|
+
// src/provider/no-op-provider.ts
|
|
443
257
|
var REASON_NO_OP = "No-op";
|
|
444
258
|
var NoopFeatureProvider = class {
|
|
445
259
|
metadata = {
|
|
446
260
|
name: "No-op Provider"
|
|
447
261
|
};
|
|
448
|
-
get status() {
|
|
449
|
-
return import_core3.ProviderStatus.NOT_READY;
|
|
450
|
-
}
|
|
451
262
|
resolveBooleanEvaluation(_, defaultValue) {
|
|
452
263
|
return this.noOp(defaultValue);
|
|
453
264
|
}
|
|
@@ -488,7 +299,6 @@ var VariantNotFoundError = class _VariantNotFoundError extends import_core4.Open
|
|
|
488
299
|
var InMemoryProvider = class {
|
|
489
300
|
events = new OpenFeatureEventEmitter();
|
|
490
301
|
runsOn = "client";
|
|
491
|
-
status = import_core5.ProviderStatus.NOT_READY;
|
|
492
302
|
metadata = {
|
|
493
303
|
name: "in-memory"
|
|
494
304
|
};
|
|
@@ -503,10 +313,8 @@ var InMemoryProvider = class {
|
|
|
503
313
|
this.resolveFlagWithReason(key, context);
|
|
504
314
|
}
|
|
505
315
|
this._context = context;
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
this.status = import_core5.ProviderStatus.ERROR;
|
|
509
|
-
throw error;
|
|
316
|
+
} catch (err) {
|
|
317
|
+
throw new Error("initialization failure", { cause: err });
|
|
510
318
|
}
|
|
511
319
|
}
|
|
512
320
|
/**
|
|
@@ -515,13 +323,10 @@ var InMemoryProvider = class {
|
|
|
515
323
|
*/
|
|
516
324
|
async putConfiguration(flagConfiguration) {
|
|
517
325
|
const flagsChanged = Object.entries(flagConfiguration).filter(([key, value]) => this._flagConfiguration[key] !== value).map(([key]) => key);
|
|
518
|
-
this.status = import_core5.ProviderStatus.STALE;
|
|
519
|
-
this.events.emit(import_core2.ClientProviderEvents.Stale);
|
|
520
326
|
this._flagConfiguration = { ...flagConfiguration };
|
|
521
|
-
this.events.emit(import_core2.ClientProviderEvents.ConfigurationChanged, { flagsChanged });
|
|
522
327
|
try {
|
|
523
328
|
await this.initialize(this._context);
|
|
524
|
-
this.events.emit(import_core2.ClientProviderEvents.
|
|
329
|
+
this.events.emit(import_core2.ClientProviderEvents.ConfigurationChanged, { flagsChanged });
|
|
525
330
|
} catch (err) {
|
|
526
331
|
this.events.emit(import_core2.ClientProviderEvents.Error);
|
|
527
332
|
throw err;
|
|
@@ -575,8 +380,7 @@ var InMemoryProvider = class {
|
|
|
575
380
|
const isContextEval = ctx && flagSpec?.contextEvaluator;
|
|
576
381
|
const variant = isContextEval ? flagSpec.contextEvaluator?.(ctx) : flagSpec.defaultVariant;
|
|
577
382
|
const value = variant && flagSpec?.variants[variant];
|
|
578
|
-
const
|
|
579
|
-
const reason = this.status === import_core5.ProviderStatus.STALE ? import_core5.StandardResolutionReasons.CACHED : evalReason;
|
|
383
|
+
const reason = isContextEval ? import_core5.StandardResolutionReasons.TARGETING_MATCH : import_core5.StandardResolutionReasons.STATIC;
|
|
580
384
|
return {
|
|
581
385
|
value,
|
|
582
386
|
...variant && { variant },
|
|
@@ -589,8 +393,10 @@ var InMemoryProvider = class {
|
|
|
589
393
|
var GLOBAL_OPENFEATURE_API_KEY = Symbol.for("@openfeature/web-sdk/api");
|
|
590
394
|
var _globalThis = globalThis;
|
|
591
395
|
var OpenFeatureAPI = class _OpenFeatureAPI extends import_core6.OpenFeatureCommonAPI {
|
|
592
|
-
|
|
593
|
-
|
|
396
|
+
_statusEnumType = import_core3.ClientProviderStatus;
|
|
397
|
+
_apiEmitter = new OpenFeatureEventEmitter();
|
|
398
|
+
_defaultProvider = new import_core6.ProviderWrapper(NOOP_PROVIDER, import_core3.ClientProviderStatus.NOT_READY, this._statusEnumType);
|
|
399
|
+
_domainScopedProviders = /* @__PURE__ */ new Map();
|
|
594
400
|
_createEventEmitter = () => new OpenFeatureEventEmitter();
|
|
595
401
|
constructor() {
|
|
596
402
|
super("client");
|
|
@@ -609,33 +415,39 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends import_core6.OpenFeatureCommo
|
|
|
609
415
|
_globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;
|
|
610
416
|
return instance;
|
|
611
417
|
}
|
|
418
|
+
getProviderStatus(domain) {
|
|
419
|
+
if (!domain) {
|
|
420
|
+
return this._defaultProvider.status;
|
|
421
|
+
}
|
|
422
|
+
return this._domainScopedProviders.get(domain)?.status ?? this._defaultProvider.status;
|
|
423
|
+
}
|
|
612
424
|
async setContext(domainOrContext, contextOrUndefined) {
|
|
613
425
|
const domain = (0, import_core6.stringOrUndefined)(domainOrContext);
|
|
614
426
|
const context = (0, import_core6.objectOrUndefined)(domainOrContext) ?? (0, import_core6.objectOrUndefined)(contextOrUndefined) ?? {};
|
|
615
427
|
if (domain) {
|
|
616
|
-
const
|
|
617
|
-
if (
|
|
428
|
+
const wrapper = this._domainScopedProviders.get(domain);
|
|
429
|
+
if (wrapper) {
|
|
618
430
|
const oldContext = this.getContext(domain);
|
|
619
431
|
this._domainScopedContext.set(domain, context);
|
|
620
|
-
await this.runProviderContextChangeHandler(domain,
|
|
432
|
+
await this.runProviderContextChangeHandler(domain, wrapper, oldContext, context);
|
|
621
433
|
} else {
|
|
622
434
|
this._domainScopedContext.set(domain, context);
|
|
623
435
|
}
|
|
624
436
|
} else {
|
|
625
437
|
const oldContext = this._context;
|
|
626
438
|
this._context = context;
|
|
627
|
-
const unboundProviders = Array.from(this._domainScopedProviders.entries()).filter(([domain2]) => !this._domainScopedContext.has(domain2)).reduce((acc, [domain2,
|
|
628
|
-
acc.push({ domain: domain2,
|
|
439
|
+
const unboundProviders = Array.from(this._domainScopedProviders.entries()).filter(([domain2]) => !this._domainScopedContext.has(domain2)).reduce((acc, [domain2, wrapper]) => {
|
|
440
|
+
acc.push({ domain: domain2, wrapper });
|
|
629
441
|
return acc;
|
|
630
442
|
}, []);
|
|
631
|
-
const
|
|
443
|
+
const allDomainRecords = [
|
|
632
444
|
// add in the default (no domain)
|
|
633
|
-
{ domain: void 0,
|
|
445
|
+
{ domain: void 0, wrapper: this._defaultProvider },
|
|
634
446
|
...unboundProviders
|
|
635
447
|
];
|
|
636
448
|
await Promise.all(
|
|
637
|
-
|
|
638
|
-
(
|
|
449
|
+
allDomainRecords.map(
|
|
450
|
+
(dm) => this.runProviderContextChangeHandler(dm.domain, dm.wrapper, oldContext, context)
|
|
639
451
|
)
|
|
640
452
|
);
|
|
641
453
|
}
|
|
@@ -655,12 +467,12 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends import_core6.OpenFeatureCommo
|
|
|
655
467
|
async clearContext(domainOrUndefined) {
|
|
656
468
|
const domain = (0, import_core6.stringOrUndefined)(domainOrUndefined);
|
|
657
469
|
if (domain) {
|
|
658
|
-
const
|
|
659
|
-
if (
|
|
470
|
+
const wrapper = this._domainScopedProviders.get(domain);
|
|
471
|
+
if (wrapper) {
|
|
660
472
|
const oldContext = this.getContext(domain);
|
|
661
473
|
this._domainScopedContext.delete(domain);
|
|
662
474
|
const newContext = this.getContext();
|
|
663
|
-
await this.runProviderContextChangeHandler(domain,
|
|
475
|
+
await this.runProviderContextChangeHandler(domain, wrapper, oldContext, newContext);
|
|
664
476
|
} else {
|
|
665
477
|
this._domainScopedContext.delete(domain);
|
|
666
478
|
}
|
|
@@ -692,6 +504,7 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends import_core6.OpenFeatureCommo
|
|
|
692
504
|
// functions are passed here to make sure that these values are always up to date,
|
|
693
505
|
// and so we don't have to make these public properties on the API class.
|
|
694
506
|
() => this.getProviderForClient(domain),
|
|
507
|
+
() => this.getProviderStatus(domain),
|
|
695
508
|
() => this.buildAndCacheEventEmitterForClient(domain),
|
|
696
509
|
() => this._logger,
|
|
697
510
|
{ domain, version }
|
|
@@ -705,22 +518,38 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends import_core6.OpenFeatureCommo
|
|
|
705
518
|
await super.clearProvidersAndSetDefault(NOOP_PROVIDER);
|
|
706
519
|
this._domainScopedContext.clear();
|
|
707
520
|
}
|
|
708
|
-
async runProviderContextChangeHandler(domain,
|
|
709
|
-
const providerName = provider
|
|
521
|
+
async runProviderContextChangeHandler(domain, wrapper, oldContext, newContext) {
|
|
522
|
+
const providerName = wrapper.provider?.metadata?.name || "unnamed-provider";
|
|
710
523
|
try {
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
524
|
+
if (typeof wrapper.provider.onContextChange === "function") {
|
|
525
|
+
wrapper.incrementPendingContextChanges();
|
|
526
|
+
wrapper.status = this._statusEnumType.RECONCILING;
|
|
527
|
+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
|
|
528
|
+
emitter?.emit(import_core2.ClientProviderEvents.Reconciling, { domain, providerName });
|
|
529
|
+
});
|
|
530
|
+
this._apiEmitter?.emit(import_core2.ClientProviderEvents.Reconciling, { domain, providerName });
|
|
531
|
+
await wrapper.provider.onContextChange(oldContext, newContext);
|
|
532
|
+
wrapper.decrementPendingContextChanges();
|
|
533
|
+
}
|
|
534
|
+
wrapper.status = this._statusEnumType.READY;
|
|
535
|
+
if (wrapper.allContextChangesSettled) {
|
|
536
|
+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
|
|
537
|
+
emitter?.emit(import_core2.ClientProviderEvents.ContextChanged, { clientName: domain, domain, providerName });
|
|
538
|
+
});
|
|
539
|
+
this._apiEmitter?.emit(import_core2.ClientProviderEvents.ContextChanged, { clientName: domain, domain, providerName });
|
|
540
|
+
}
|
|
716
541
|
} catch (err) {
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
542
|
+
wrapper.decrementPendingContextChanges();
|
|
543
|
+
wrapper.status = this._statusEnumType.ERROR;
|
|
544
|
+
if (wrapper.allContextChangesSettled) {
|
|
545
|
+
const error = err;
|
|
546
|
+
const message = `Error running ${providerName}'s context change handler: ${error?.message}`;
|
|
547
|
+
this._logger?.error(`${message}`, err);
|
|
548
|
+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
|
|
549
|
+
emitter?.emit(import_core2.ClientProviderEvents.Error, { clientName: domain, domain, providerName, message });
|
|
550
|
+
});
|
|
551
|
+
this._apiEmitter?.emit(import_core2.ClientProviderEvents.Error, { clientName: domain, domain, providerName, message });
|
|
552
|
+
}
|
|
724
553
|
}
|
|
725
554
|
}
|
|
726
555
|
};
|
|
@@ -728,8 +557,9 @@ var OpenFeature = OpenFeatureAPI.getInstance();
|
|
|
728
557
|
|
|
729
558
|
// src/client/open-feature-client.ts
|
|
730
559
|
var OpenFeatureClient = class {
|
|
731
|
-
constructor(providerAccessor, emitterAccessor, globalLogger, options) {
|
|
560
|
+
constructor(providerAccessor, providerStatusAccessor, emitterAccessor, globalLogger, options) {
|
|
732
561
|
this.providerAccessor = providerAccessor;
|
|
562
|
+
this.providerStatusAccessor = providerStatusAccessor;
|
|
733
563
|
this.emitterAccessor = emitterAccessor;
|
|
734
564
|
this.globalLogger = globalLogger;
|
|
735
565
|
this.options = options;
|
|
@@ -746,11 +576,11 @@ var OpenFeatureClient = class {
|
|
|
746
576
|
};
|
|
747
577
|
}
|
|
748
578
|
get providerStatus() {
|
|
749
|
-
return this.
|
|
579
|
+
return this.providerStatusAccessor();
|
|
750
580
|
}
|
|
751
581
|
addHandler(eventType, handler) {
|
|
752
582
|
this.emitterAccessor().addHandler(eventType, handler);
|
|
753
|
-
const shouldRunNow = (0, import_core7.statusMatchesEvent)(eventType, this.
|
|
583
|
+
const shouldRunNow = (0, import_core7.statusMatchesEvent)(eventType, this.providerStatus);
|
|
754
584
|
if (shouldRunNow) {
|
|
755
585
|
try {
|
|
756
586
|
handler({
|
|
@@ -844,6 +674,11 @@ var OpenFeatureClient = class {
|
|
|
844
674
|
};
|
|
845
675
|
try {
|
|
846
676
|
this.beforeHooks(allHooks, hookContext, options);
|
|
677
|
+
if (this.providerStatus === import_core3.ClientProviderStatus.NOT_READY) {
|
|
678
|
+
throw new import_core7.ProviderNotReadyError("provider has not yet initialized");
|
|
679
|
+
} else if (this.providerStatus === import_core3.ClientProviderStatus.FATAL) {
|
|
680
|
+
throw new import_core7.ProviderFatalError("provider is in an irrecoverable error state");
|
|
681
|
+
}
|
|
847
682
|
const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);
|
|
848
683
|
const evaluationDetails = {
|
|
849
684
|
...resolution,
|