@openfeature/web-sdk 0.0.2-experimental → 0.2.0-experimental
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/cjs/index.js +446 -34
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +456 -34
- package/dist/esm/index.js.map +4 -4
- package/dist/types.d.ts +52 -37
- package/package.json +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
5
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
7
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
9
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
10
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
11
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -17,6 +21,25 @@ var __spreadValues = (a, b) => {
|
|
|
17
21
|
return a;
|
|
18
22
|
};
|
|
19
23
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
25
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
26
|
+
};
|
|
27
|
+
var __copyProps = (to, from, except, desc) => {
|
|
28
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
29
|
+
for (let key of __getOwnPropNames(from))
|
|
30
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
31
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
32
|
+
}
|
|
33
|
+
return to;
|
|
34
|
+
};
|
|
35
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
36
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
37
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
38
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
39
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
40
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
41
|
+
mod
|
|
42
|
+
));
|
|
20
43
|
var __async = (__this, __arguments, generator) => {
|
|
21
44
|
return new Promise((resolve, reject) => {
|
|
22
45
|
var fulfilled = (value) => {
|
|
@@ -38,6 +61,378 @@ var __async = (__this, __arguments, generator) => {
|
|
|
38
61
|
});
|
|
39
62
|
};
|
|
40
63
|
|
|
64
|
+
// ../../node_modules/events/events.js
|
|
65
|
+
var require_events = __commonJS({
|
|
66
|
+
"../../node_modules/events/events.js"(exports, module) {
|
|
67
|
+
"use strict";
|
|
68
|
+
var R = typeof Reflect === "object" ? Reflect : null;
|
|
69
|
+
var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target, receiver, args) {
|
|
70
|
+
return Function.prototype.apply.call(target, receiver, args);
|
|
71
|
+
};
|
|
72
|
+
var ReflectOwnKeys;
|
|
73
|
+
if (R && typeof R.ownKeys === "function") {
|
|
74
|
+
ReflectOwnKeys = R.ownKeys;
|
|
75
|
+
} else if (Object.getOwnPropertySymbols) {
|
|
76
|
+
ReflectOwnKeys = function ReflectOwnKeys2(target) {
|
|
77
|
+
return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
|
|
78
|
+
};
|
|
79
|
+
} else {
|
|
80
|
+
ReflectOwnKeys = function ReflectOwnKeys2(target) {
|
|
81
|
+
return Object.getOwnPropertyNames(target);
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function ProcessEmitWarning(warning) {
|
|
85
|
+
if (console && console.warn)
|
|
86
|
+
console.warn(warning);
|
|
87
|
+
}
|
|
88
|
+
var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) {
|
|
89
|
+
return value !== value;
|
|
90
|
+
};
|
|
91
|
+
function EventEmitter2() {
|
|
92
|
+
EventEmitter2.init.call(this);
|
|
93
|
+
}
|
|
94
|
+
module.exports = EventEmitter2;
|
|
95
|
+
module.exports.once = once;
|
|
96
|
+
EventEmitter2.EventEmitter = EventEmitter2;
|
|
97
|
+
EventEmitter2.prototype._events = void 0;
|
|
98
|
+
EventEmitter2.prototype._eventsCount = 0;
|
|
99
|
+
EventEmitter2.prototype._maxListeners = void 0;
|
|
100
|
+
var defaultMaxListeners = 10;
|
|
101
|
+
function checkListener(listener) {
|
|
102
|
+
if (typeof listener !== "function") {
|
|
103
|
+
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
Object.defineProperty(EventEmitter2, "defaultMaxListeners", {
|
|
107
|
+
enumerable: true,
|
|
108
|
+
get: function() {
|
|
109
|
+
return defaultMaxListeners;
|
|
110
|
+
},
|
|
111
|
+
set: function(arg) {
|
|
112
|
+
if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) {
|
|
113
|
+
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + ".");
|
|
114
|
+
}
|
|
115
|
+
defaultMaxListeners = arg;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
EventEmitter2.init = function() {
|
|
119
|
+
if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
|
|
120
|
+
this._events = /* @__PURE__ */ Object.create(null);
|
|
121
|
+
this._eventsCount = 0;
|
|
122
|
+
}
|
|
123
|
+
this._maxListeners = this._maxListeners || void 0;
|
|
124
|
+
};
|
|
125
|
+
EventEmitter2.prototype.setMaxListeners = function setMaxListeners(n) {
|
|
126
|
+
if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) {
|
|
127
|
+
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
|
|
128
|
+
}
|
|
129
|
+
this._maxListeners = n;
|
|
130
|
+
return this;
|
|
131
|
+
};
|
|
132
|
+
function _getMaxListeners(that) {
|
|
133
|
+
if (that._maxListeners === void 0)
|
|
134
|
+
return EventEmitter2.defaultMaxListeners;
|
|
135
|
+
return that._maxListeners;
|
|
136
|
+
}
|
|
137
|
+
EventEmitter2.prototype.getMaxListeners = function getMaxListeners() {
|
|
138
|
+
return _getMaxListeners(this);
|
|
139
|
+
};
|
|
140
|
+
EventEmitter2.prototype.emit = function emit(type) {
|
|
141
|
+
var args = [];
|
|
142
|
+
for (var i = 1; i < arguments.length; i++)
|
|
143
|
+
args.push(arguments[i]);
|
|
144
|
+
var doError = type === "error";
|
|
145
|
+
var events = this._events;
|
|
146
|
+
if (events !== void 0)
|
|
147
|
+
doError = doError && events.error === void 0;
|
|
148
|
+
else if (!doError)
|
|
149
|
+
return false;
|
|
150
|
+
if (doError) {
|
|
151
|
+
var er;
|
|
152
|
+
if (args.length > 0)
|
|
153
|
+
er = args[0];
|
|
154
|
+
if (er instanceof Error) {
|
|
155
|
+
throw er;
|
|
156
|
+
}
|
|
157
|
+
var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : ""));
|
|
158
|
+
err.context = er;
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
var handler = events[type];
|
|
162
|
+
if (handler === void 0)
|
|
163
|
+
return false;
|
|
164
|
+
if (typeof handler === "function") {
|
|
165
|
+
ReflectApply(handler, this, args);
|
|
166
|
+
} else {
|
|
167
|
+
var len = handler.length;
|
|
168
|
+
var listeners = arrayClone(handler, len);
|
|
169
|
+
for (var i = 0; i < len; ++i)
|
|
170
|
+
ReflectApply(listeners[i], this, args);
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
};
|
|
174
|
+
function _addListener(target, type, listener, prepend) {
|
|
175
|
+
var m;
|
|
176
|
+
var events;
|
|
177
|
+
var existing;
|
|
178
|
+
checkListener(listener);
|
|
179
|
+
events = target._events;
|
|
180
|
+
if (events === void 0) {
|
|
181
|
+
events = target._events = /* @__PURE__ */ Object.create(null);
|
|
182
|
+
target._eventsCount = 0;
|
|
183
|
+
} else {
|
|
184
|
+
if (events.newListener !== void 0) {
|
|
185
|
+
target.emit(
|
|
186
|
+
"newListener",
|
|
187
|
+
type,
|
|
188
|
+
listener.listener ? listener.listener : listener
|
|
189
|
+
);
|
|
190
|
+
events = target._events;
|
|
191
|
+
}
|
|
192
|
+
existing = events[type];
|
|
193
|
+
}
|
|
194
|
+
if (existing === void 0) {
|
|
195
|
+
existing = events[type] = listener;
|
|
196
|
+
++target._eventsCount;
|
|
197
|
+
} else {
|
|
198
|
+
if (typeof existing === "function") {
|
|
199
|
+
existing = events[type] = prepend ? [listener, existing] : [existing, listener];
|
|
200
|
+
} else if (prepend) {
|
|
201
|
+
existing.unshift(listener);
|
|
202
|
+
} else {
|
|
203
|
+
existing.push(listener);
|
|
204
|
+
}
|
|
205
|
+
m = _getMaxListeners(target);
|
|
206
|
+
if (m > 0 && existing.length > m && !existing.warned) {
|
|
207
|
+
existing.warned = true;
|
|
208
|
+
var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit");
|
|
209
|
+
w.name = "MaxListenersExceededWarning";
|
|
210
|
+
w.emitter = target;
|
|
211
|
+
w.type = type;
|
|
212
|
+
w.count = existing.length;
|
|
213
|
+
ProcessEmitWarning(w);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return target;
|
|
217
|
+
}
|
|
218
|
+
EventEmitter2.prototype.addListener = function addListener(type, listener) {
|
|
219
|
+
return _addListener(this, type, listener, false);
|
|
220
|
+
};
|
|
221
|
+
EventEmitter2.prototype.on = EventEmitter2.prototype.addListener;
|
|
222
|
+
EventEmitter2.prototype.prependListener = function prependListener(type, listener) {
|
|
223
|
+
return _addListener(this, type, listener, true);
|
|
224
|
+
};
|
|
225
|
+
function onceWrapper() {
|
|
226
|
+
if (!this.fired) {
|
|
227
|
+
this.target.removeListener(this.type, this.wrapFn);
|
|
228
|
+
this.fired = true;
|
|
229
|
+
if (arguments.length === 0)
|
|
230
|
+
return this.listener.call(this.target);
|
|
231
|
+
return this.listener.apply(this.target, arguments);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function _onceWrap(target, type, listener) {
|
|
235
|
+
var state = { fired: false, wrapFn: void 0, target, type, listener };
|
|
236
|
+
var wrapped = onceWrapper.bind(state);
|
|
237
|
+
wrapped.listener = listener;
|
|
238
|
+
state.wrapFn = wrapped;
|
|
239
|
+
return wrapped;
|
|
240
|
+
}
|
|
241
|
+
EventEmitter2.prototype.once = function once2(type, listener) {
|
|
242
|
+
checkListener(listener);
|
|
243
|
+
this.on(type, _onceWrap(this, type, listener));
|
|
244
|
+
return this;
|
|
245
|
+
};
|
|
246
|
+
EventEmitter2.prototype.prependOnceListener = function prependOnceListener(type, listener) {
|
|
247
|
+
checkListener(listener);
|
|
248
|
+
this.prependListener(type, _onceWrap(this, type, listener));
|
|
249
|
+
return this;
|
|
250
|
+
};
|
|
251
|
+
EventEmitter2.prototype.removeListener = function removeListener(type, listener) {
|
|
252
|
+
var list, events, position, i, originalListener;
|
|
253
|
+
checkListener(listener);
|
|
254
|
+
events = this._events;
|
|
255
|
+
if (events === void 0)
|
|
256
|
+
return this;
|
|
257
|
+
list = events[type];
|
|
258
|
+
if (list === void 0)
|
|
259
|
+
return this;
|
|
260
|
+
if (list === listener || list.listener === listener) {
|
|
261
|
+
if (--this._eventsCount === 0)
|
|
262
|
+
this._events = /* @__PURE__ */ Object.create(null);
|
|
263
|
+
else {
|
|
264
|
+
delete events[type];
|
|
265
|
+
if (events.removeListener)
|
|
266
|
+
this.emit("removeListener", type, list.listener || listener);
|
|
267
|
+
}
|
|
268
|
+
} else if (typeof list !== "function") {
|
|
269
|
+
position = -1;
|
|
270
|
+
for (i = list.length - 1; i >= 0; i--) {
|
|
271
|
+
if (list[i] === listener || list[i].listener === listener) {
|
|
272
|
+
originalListener = list[i].listener;
|
|
273
|
+
position = i;
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (position < 0)
|
|
278
|
+
return this;
|
|
279
|
+
if (position === 0)
|
|
280
|
+
list.shift();
|
|
281
|
+
else {
|
|
282
|
+
spliceOne(list, position);
|
|
283
|
+
}
|
|
284
|
+
if (list.length === 1)
|
|
285
|
+
events[type] = list[0];
|
|
286
|
+
if (events.removeListener !== void 0)
|
|
287
|
+
this.emit("removeListener", type, originalListener || listener);
|
|
288
|
+
}
|
|
289
|
+
return this;
|
|
290
|
+
};
|
|
291
|
+
EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
|
|
292
|
+
EventEmitter2.prototype.removeAllListeners = function removeAllListeners(type) {
|
|
293
|
+
var listeners, events, i;
|
|
294
|
+
events = this._events;
|
|
295
|
+
if (events === void 0)
|
|
296
|
+
return this;
|
|
297
|
+
if (events.removeListener === void 0) {
|
|
298
|
+
if (arguments.length === 0) {
|
|
299
|
+
this._events = /* @__PURE__ */ Object.create(null);
|
|
300
|
+
this._eventsCount = 0;
|
|
301
|
+
} else if (events[type] !== void 0) {
|
|
302
|
+
if (--this._eventsCount === 0)
|
|
303
|
+
this._events = /* @__PURE__ */ Object.create(null);
|
|
304
|
+
else
|
|
305
|
+
delete events[type];
|
|
306
|
+
}
|
|
307
|
+
return this;
|
|
308
|
+
}
|
|
309
|
+
if (arguments.length === 0) {
|
|
310
|
+
var keys = Object.keys(events);
|
|
311
|
+
var key;
|
|
312
|
+
for (i = 0; i < keys.length; ++i) {
|
|
313
|
+
key = keys[i];
|
|
314
|
+
if (key === "removeListener")
|
|
315
|
+
continue;
|
|
316
|
+
this.removeAllListeners(key);
|
|
317
|
+
}
|
|
318
|
+
this.removeAllListeners("removeListener");
|
|
319
|
+
this._events = /* @__PURE__ */ Object.create(null);
|
|
320
|
+
this._eventsCount = 0;
|
|
321
|
+
return this;
|
|
322
|
+
}
|
|
323
|
+
listeners = events[type];
|
|
324
|
+
if (typeof listeners === "function") {
|
|
325
|
+
this.removeListener(type, listeners);
|
|
326
|
+
} else if (listeners !== void 0) {
|
|
327
|
+
for (i = listeners.length - 1; i >= 0; i--) {
|
|
328
|
+
this.removeListener(type, listeners[i]);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return this;
|
|
332
|
+
};
|
|
333
|
+
function _listeners(target, type, unwrap) {
|
|
334
|
+
var events = target._events;
|
|
335
|
+
if (events === void 0)
|
|
336
|
+
return [];
|
|
337
|
+
var evlistener = events[type];
|
|
338
|
+
if (evlistener === void 0)
|
|
339
|
+
return [];
|
|
340
|
+
if (typeof evlistener === "function")
|
|
341
|
+
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
342
|
+
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
|
|
343
|
+
}
|
|
344
|
+
EventEmitter2.prototype.listeners = function listeners(type) {
|
|
345
|
+
return _listeners(this, type, true);
|
|
346
|
+
};
|
|
347
|
+
EventEmitter2.prototype.rawListeners = function rawListeners(type) {
|
|
348
|
+
return _listeners(this, type, false);
|
|
349
|
+
};
|
|
350
|
+
EventEmitter2.listenerCount = function(emitter, type) {
|
|
351
|
+
if (typeof emitter.listenerCount === "function") {
|
|
352
|
+
return emitter.listenerCount(type);
|
|
353
|
+
} else {
|
|
354
|
+
return listenerCount.call(emitter, type);
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
EventEmitter2.prototype.listenerCount = listenerCount;
|
|
358
|
+
function listenerCount(type) {
|
|
359
|
+
var events = this._events;
|
|
360
|
+
if (events !== void 0) {
|
|
361
|
+
var evlistener = events[type];
|
|
362
|
+
if (typeof evlistener === "function") {
|
|
363
|
+
return 1;
|
|
364
|
+
} else if (evlistener !== void 0) {
|
|
365
|
+
return evlistener.length;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return 0;
|
|
369
|
+
}
|
|
370
|
+
EventEmitter2.prototype.eventNames = function eventNames() {
|
|
371
|
+
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
|
|
372
|
+
};
|
|
373
|
+
function arrayClone(arr, n) {
|
|
374
|
+
var copy = new Array(n);
|
|
375
|
+
for (var i = 0; i < n; ++i)
|
|
376
|
+
copy[i] = arr[i];
|
|
377
|
+
return copy;
|
|
378
|
+
}
|
|
379
|
+
function spliceOne(list, index) {
|
|
380
|
+
for (; index + 1 < list.length; index++)
|
|
381
|
+
list[index] = list[index + 1];
|
|
382
|
+
list.pop();
|
|
383
|
+
}
|
|
384
|
+
function unwrapListeners(arr) {
|
|
385
|
+
var ret = new Array(arr.length);
|
|
386
|
+
for (var i = 0; i < ret.length; ++i) {
|
|
387
|
+
ret[i] = arr[i].listener || arr[i];
|
|
388
|
+
}
|
|
389
|
+
return ret;
|
|
390
|
+
}
|
|
391
|
+
function once(emitter, name) {
|
|
392
|
+
return new Promise(function(resolve, reject) {
|
|
393
|
+
function errorListener(err) {
|
|
394
|
+
emitter.removeListener(name, resolver);
|
|
395
|
+
reject(err);
|
|
396
|
+
}
|
|
397
|
+
function resolver() {
|
|
398
|
+
if (typeof emitter.removeListener === "function") {
|
|
399
|
+
emitter.removeListener("error", errorListener);
|
|
400
|
+
}
|
|
401
|
+
resolve([].slice.call(arguments));
|
|
402
|
+
}
|
|
403
|
+
;
|
|
404
|
+
eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
|
|
405
|
+
if (name !== "error") {
|
|
406
|
+
addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
|
|
411
|
+
if (typeof emitter.on === "function") {
|
|
412
|
+
eventTargetAgnosticAddListener(emitter, "error", handler, flags);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
416
|
+
if (typeof emitter.on === "function") {
|
|
417
|
+
if (flags.once) {
|
|
418
|
+
emitter.once(name, listener);
|
|
419
|
+
} else {
|
|
420
|
+
emitter.on(name, listener);
|
|
421
|
+
}
|
|
422
|
+
} else if (typeof emitter.addEventListener === "function") {
|
|
423
|
+
emitter.addEventListener(name, function wrapListener(arg) {
|
|
424
|
+
if (flags.once) {
|
|
425
|
+
emitter.removeEventListener(name, wrapListener);
|
|
426
|
+
}
|
|
427
|
+
listener(arg);
|
|
428
|
+
});
|
|
429
|
+
} else {
|
|
430
|
+
throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
|
|
41
436
|
// ../shared/src/types.ts
|
|
42
437
|
var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
|
|
43
438
|
ProviderEvents2["Ready"] = "PROVIDER_READY";
|
|
@@ -264,6 +659,9 @@ var OpenFeatureCommonAPI = class {
|
|
|
264
659
|
}
|
|
265
660
|
};
|
|
266
661
|
|
|
662
|
+
// src/open-feature.ts
|
|
663
|
+
var import_events = __toESM(require_events());
|
|
664
|
+
|
|
267
665
|
// src/no-op-provider.ts
|
|
268
666
|
var REASON_NO_OP = "No-op";
|
|
269
667
|
var NoopFeatureProvider = class {
|
|
@@ -300,6 +698,8 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
|
|
|
300
698
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
301
699
|
constructor() {
|
|
302
700
|
super();
|
|
701
|
+
this._apiEvents = new import_events.EventEmitter();
|
|
702
|
+
this._providerReady = false;
|
|
303
703
|
this._hooks = [];
|
|
304
704
|
this._provider = NOOP_PROVIDER;
|
|
305
705
|
}
|
|
@@ -350,12 +750,29 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
|
|
|
350
750
|
});
|
|
351
751
|
}
|
|
352
752
|
setProvider(provider) {
|
|
353
|
-
var _a;
|
|
753
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
354
754
|
if (this._provider !== provider) {
|
|
355
755
|
const oldProvider = this._provider;
|
|
356
756
|
this._provider = provider;
|
|
357
|
-
|
|
358
|
-
(
|
|
757
|
+
this._providerReady = false;
|
|
758
|
+
if (!this._provider.events) {
|
|
759
|
+
this._provider.events = new import_events.EventEmitter();
|
|
760
|
+
}
|
|
761
|
+
if (typeof ((_a = this._provider) == null ? void 0 : _a.initialize) === "function") {
|
|
762
|
+
(_e = (_d = (_c = (_b = this._provider).initialize) == null ? void 0 : _c.call(_b, this._context)) == null ? void 0 : _d.then(() => {
|
|
763
|
+
var _a2;
|
|
764
|
+
this._providerReady = true;
|
|
765
|
+
(_a2 = this._provider.events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */);
|
|
766
|
+
})) == null ? void 0 : _e.catch(() => {
|
|
767
|
+
var _a2;
|
|
768
|
+
(_a2 = this._provider.events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */);
|
|
769
|
+
});
|
|
770
|
+
} else {
|
|
771
|
+
this._providerReady = true;
|
|
772
|
+
(_f = this._provider.events) == null ? void 0 : _f.emit("PROVIDER_READY" /* Ready */);
|
|
773
|
+
}
|
|
774
|
+
this._apiEvents.emit("providerChanged" /* ProviderChanged */);
|
|
775
|
+
(_g = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _g.call(oldProvider);
|
|
359
776
|
}
|
|
360
777
|
return this;
|
|
361
778
|
}
|
|
@@ -365,12 +782,15 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
|
|
|
365
782
|
yield (_b = (_a = this == null ? void 0 : this._provider) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a);
|
|
366
783
|
});
|
|
367
784
|
}
|
|
368
|
-
getClient(name, version
|
|
785
|
+
getClient(name, version) {
|
|
369
786
|
return new OpenFeatureClient(
|
|
787
|
+
// functions are passed here to make sure that these values are always up to date,
|
|
788
|
+
// and so we don't have to make these public properties on the API class.
|
|
370
789
|
() => this._provider,
|
|
790
|
+
() => this._providerReady,
|
|
791
|
+
() => this._apiEvents,
|
|
371
792
|
() => this._logger,
|
|
372
|
-
{ name, version }
|
|
373
|
-
context
|
|
793
|
+
{ name, version }
|
|
374
794
|
);
|
|
375
795
|
}
|
|
376
796
|
};
|
|
@@ -378,8 +798,9 @@ var OpenFeature = OpenFeatureAPI.getInstance();
|
|
|
378
798
|
|
|
379
799
|
// src/client.ts
|
|
380
800
|
var OpenFeatureClient = class {
|
|
381
|
-
constructor(providerAccessor,
|
|
801
|
+
constructor(providerAccessor, providerReady, apiEvents, globalLogger, options) {
|
|
382
802
|
this.providerAccessor = providerAccessor;
|
|
803
|
+
this.providerReady = providerReady;
|
|
383
804
|
this.globalLogger = globalLogger;
|
|
384
805
|
this._hooks = [];
|
|
385
806
|
this._handlerWrappers = [];
|
|
@@ -387,13 +808,14 @@ var OpenFeatureClient = class {
|
|
|
387
808
|
name: options.name,
|
|
388
809
|
version: options.version
|
|
389
810
|
};
|
|
390
|
-
this._context = context;
|
|
391
811
|
this.attachListeners();
|
|
392
|
-
|
|
812
|
+
apiEvents().on("providerChanged" /* ProviderChanged */, () => {
|
|
813
|
+
this.attachListeners();
|
|
814
|
+
});
|
|
393
815
|
}
|
|
394
816
|
addHandler(eventType, handler) {
|
|
395
817
|
this._handlerWrappers.push({ eventType, handler });
|
|
396
|
-
if (eventType === "PROVIDER_READY" /* Ready */ && this.
|
|
818
|
+
if (eventType === "PROVIDER_READY" /* Ready */ && this.providerReady()) {
|
|
397
819
|
handler();
|
|
398
820
|
}
|
|
399
821
|
}
|
|
@@ -412,54 +834,51 @@ var OpenFeatureClient = class {
|
|
|
412
834
|
this._hooks = [];
|
|
413
835
|
return this;
|
|
414
836
|
}
|
|
415
|
-
getBooleanValue(flagKey, defaultValue,
|
|
416
|
-
return this.getBooleanDetails(flagKey, defaultValue,
|
|
837
|
+
getBooleanValue(flagKey, defaultValue, options) {
|
|
838
|
+
return this.getBooleanDetails(flagKey, defaultValue, options).value;
|
|
417
839
|
}
|
|
418
|
-
getBooleanDetails(flagKey, defaultValue,
|
|
840
|
+
getBooleanDetails(flagKey, defaultValue, options) {
|
|
419
841
|
return this.evaluate(
|
|
420
842
|
flagKey,
|
|
421
843
|
this._provider.resolveBooleanEvaluation,
|
|
422
844
|
defaultValue,
|
|
423
845
|
"boolean",
|
|
424
|
-
context,
|
|
425
846
|
options
|
|
426
847
|
);
|
|
427
848
|
}
|
|
428
|
-
getStringValue(flagKey, defaultValue,
|
|
429
|
-
return this.getStringDetails(flagKey, defaultValue,
|
|
849
|
+
getStringValue(flagKey, defaultValue, options) {
|
|
850
|
+
return this.getStringDetails(flagKey, defaultValue, options).value;
|
|
430
851
|
}
|
|
431
|
-
getStringDetails(flagKey, defaultValue,
|
|
852
|
+
getStringDetails(flagKey, defaultValue, options) {
|
|
432
853
|
return this.evaluate(
|
|
433
854
|
flagKey,
|
|
434
855
|
// this isolates providers from our restricted string generic argument.
|
|
435
856
|
this._provider.resolveStringEvaluation,
|
|
436
857
|
defaultValue,
|
|
437
858
|
"string",
|
|
438
|
-
context,
|
|
439
859
|
options
|
|
440
860
|
);
|
|
441
861
|
}
|
|
442
|
-
getNumberValue(flagKey, defaultValue,
|
|
443
|
-
return this.getNumberDetails(flagKey, defaultValue,
|
|
862
|
+
getNumberValue(flagKey, defaultValue, options) {
|
|
863
|
+
return this.getNumberDetails(flagKey, defaultValue, options).value;
|
|
444
864
|
}
|
|
445
|
-
getNumberDetails(flagKey, defaultValue,
|
|
865
|
+
getNumberDetails(flagKey, defaultValue, options) {
|
|
446
866
|
return this.evaluate(
|
|
447
867
|
flagKey,
|
|
448
868
|
// this isolates providers from our restricted number generic argument.
|
|
449
869
|
this._provider.resolveNumberEvaluation,
|
|
450
870
|
defaultValue,
|
|
451
871
|
"number",
|
|
452
|
-
context,
|
|
453
872
|
options
|
|
454
873
|
);
|
|
455
874
|
}
|
|
456
|
-
getObjectValue(flagKey, defaultValue,
|
|
457
|
-
return this.getObjectDetails(flagKey, defaultValue,
|
|
875
|
+
getObjectValue(flagKey, defaultValue, options) {
|
|
876
|
+
return this.getObjectDetails(flagKey, defaultValue, options).value;
|
|
458
877
|
}
|
|
459
|
-
getObjectDetails(flagKey, defaultValue,
|
|
460
|
-
return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object",
|
|
878
|
+
getObjectDetails(flagKey, defaultValue, options) {
|
|
879
|
+
return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object", options);
|
|
461
880
|
}
|
|
462
|
-
evaluate(flagKey, resolver, defaultValue, flagType,
|
|
881
|
+
evaluate(flagKey, resolver, defaultValue, flagType, options = {}) {
|
|
463
882
|
const allHooks = [
|
|
464
883
|
...OpenFeature.getHooks(),
|
|
465
884
|
...this.getHooks(),
|
|
@@ -467,19 +886,19 @@ var OpenFeatureClient = class {
|
|
|
467
886
|
...this._provider.hooks || []
|
|
468
887
|
];
|
|
469
888
|
const allHooksReversed = [...allHooks].reverse();
|
|
470
|
-
const
|
|
889
|
+
const context = __spreadValues({}, OpenFeature.getContext());
|
|
471
890
|
const hookContext = {
|
|
472
891
|
flagKey,
|
|
473
892
|
defaultValue,
|
|
474
893
|
flagValueType: flagType,
|
|
475
894
|
clientMetadata: this.metadata,
|
|
476
895
|
providerMetadata: OpenFeature.providerMetadata,
|
|
477
|
-
context
|
|
896
|
+
context,
|
|
478
897
|
logger: this._logger
|
|
479
898
|
};
|
|
480
899
|
try {
|
|
481
|
-
|
|
482
|
-
const resolution = resolver.call(this._provider, flagKey, defaultValue,
|
|
900
|
+
this.beforeHooks(allHooks, hookContext, options);
|
|
901
|
+
const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);
|
|
483
902
|
const evaluationDetails = __spreadProps(__spreadValues({}, resolution), {
|
|
484
903
|
flagKey
|
|
485
904
|
});
|
|
@@ -549,9 +968,12 @@ var OpenFeatureClient = class {
|
|
|
549
968
|
return this._clientLogger || this.globalLogger();
|
|
550
969
|
}
|
|
551
970
|
attachListeners() {
|
|
552
|
-
Object.values(ProviderEvents).forEach((eventType) =>
|
|
553
|
-
|
|
554
|
-
|
|
971
|
+
Object.values(ProviderEvents).forEach((eventType) => {
|
|
972
|
+
var _a;
|
|
973
|
+
return (_a = this._provider.events) == null ? void 0 : _a.on(eventType, () => {
|
|
974
|
+
this._handlerWrappers.filter((wrapper) => wrapper.eventType === eventType).forEach((wrapper) => wrapper.handler());
|
|
975
|
+
});
|
|
976
|
+
});
|
|
555
977
|
}
|
|
556
978
|
};
|
|
557
979
|
export {
|