@powerlines/plugin-open-feature 0.1.2 → 0.1.4
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 +1 -1
- package/dist/types/plugin.cjs +2 -3
- package/dist/types/plugin.d.cts +1 -2
- package/dist/types/plugin.d.cts.map +1 -1
- package/dist/types/plugin.d.mts +1 -2
- package/dist/types/plugin.d.mts.map +1 -1
- package/dist/types/plugin.mjs +1 -2
- package/dist/types/plugin.mjs.map +1 -1
- package/package.json +10 -12
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/esm/index.cjs +0 -643
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/esm/index.mjs +0 -618
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/esm/index.mjs.map +0 -1
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/types.d.cts +0 -489
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/types.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/types.d.mts +0 -489
- package/dist/node_modules/.pnpm/@openfeature_core@1.9.2/node_modules/@openfeature/core/dist/types.d.mts.map +0 -1
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/esm/index.cjs +0 -423
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/esm/index.mjs +0 -424
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/esm/index.mjs.map +0 -1
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/types.d.cts +0 -41
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/types.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/types.d.mts +0 -42
- package/dist/node_modules/.pnpm/@openfeature_server-sdk@1.20.2_@openfeature_core@1.9.2/node_modules/@openfeature/server-sdk/dist/types.d.mts.map +0 -1
|
@@ -1,618 +0,0 @@
|
|
|
1
|
-
//#region ../../node_modules/.pnpm/@openfeature+core@1.9.2/node_modules/@openfeature/core/dist/esm/index.js
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
configurable: true,
|
|
11
|
-
writable: true,
|
|
12
|
-
value
|
|
13
|
-
}) : obj[key] = value;
|
|
14
|
-
var __spreadValues = (a, b) => {
|
|
15
|
-
for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]);
|
|
16
|
-
if (__getOwnPropSymbols) {
|
|
17
|
-
for (var prop of __getOwnPropSymbols(b)) if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]);
|
|
18
|
-
}
|
|
19
|
-
return a;
|
|
20
|
-
};
|
|
21
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
|
-
var __async = (__this, __arguments, generator) => {
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
var fulfilled = (value) => {
|
|
25
|
-
try {
|
|
26
|
-
step(generator.next(value));
|
|
27
|
-
} catch (e) {
|
|
28
|
-
reject(e);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var rejected = (value) => {
|
|
32
|
-
try {
|
|
33
|
-
step(generator.throw(value));
|
|
34
|
-
} catch (e) {
|
|
35
|
-
reject(e);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
39
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
var MapHookData = class {
|
|
43
|
-
constructor() {
|
|
44
|
-
this.data = /* @__PURE__ */ new Map();
|
|
45
|
-
}
|
|
46
|
-
set(key, value) {
|
|
47
|
-
this.data.set(key, value);
|
|
48
|
-
}
|
|
49
|
-
get(key) {
|
|
50
|
-
return this.data.get(key);
|
|
51
|
-
}
|
|
52
|
-
has(key) {
|
|
53
|
-
return this.data.has(key);
|
|
54
|
-
}
|
|
55
|
-
delete(key) {
|
|
56
|
-
return this.data.delete(key);
|
|
57
|
-
}
|
|
58
|
-
clear() {
|
|
59
|
-
this.data.clear();
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
var StandardResolutionReasons = {
|
|
63
|
-
STATIC: "STATIC",
|
|
64
|
-
DEFAULT: "DEFAULT",
|
|
65
|
-
TARGETING_MATCH: "TARGETING_MATCH",
|
|
66
|
-
SPLIT: "SPLIT",
|
|
67
|
-
CACHED: "CACHED",
|
|
68
|
-
DISABLED: "DISABLED",
|
|
69
|
-
UNKNOWN: "UNKNOWN",
|
|
70
|
-
STALE: "STALE",
|
|
71
|
-
ERROR: "ERROR"
|
|
72
|
-
};
|
|
73
|
-
var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
|
|
74
|
-
ErrorCode2["PROVIDER_NOT_READY"] = "PROVIDER_NOT_READY";
|
|
75
|
-
ErrorCode2["PROVIDER_FATAL"] = "PROVIDER_FATAL";
|
|
76
|
-
ErrorCode2["FLAG_NOT_FOUND"] = "FLAG_NOT_FOUND";
|
|
77
|
-
ErrorCode2["PARSE_ERROR"] = "PARSE_ERROR";
|
|
78
|
-
ErrorCode2["TYPE_MISMATCH"] = "TYPE_MISMATCH";
|
|
79
|
-
ErrorCode2["TARGETING_KEY_MISSING"] = "TARGETING_KEY_MISSING";
|
|
80
|
-
ErrorCode2["INVALID_CONTEXT"] = "INVALID_CONTEXT";
|
|
81
|
-
ErrorCode2["GENERAL"] = "GENERAL";
|
|
82
|
-
return ErrorCode2;
|
|
83
|
-
})(ErrorCode || {});
|
|
84
|
-
var OpenFeatureError = class _OpenFeatureError extends Error {
|
|
85
|
-
constructor(message, options) {
|
|
86
|
-
super(message);
|
|
87
|
-
Object.setPrototypeOf(this, _OpenFeatureError.prototype);
|
|
88
|
-
this.name = "OpenFeatureError";
|
|
89
|
-
this.cause = options == null ? void 0 : options.cause;
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
var FlagNotFoundError = class _FlagNotFoundError extends OpenFeatureError {
|
|
93
|
-
constructor(message, options) {
|
|
94
|
-
super(message, options);
|
|
95
|
-
Object.setPrototypeOf(this, _FlagNotFoundError.prototype);
|
|
96
|
-
this.name = "FlagNotFoundError";
|
|
97
|
-
this.code = "FLAG_NOT_FOUND";
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
var GeneralError = class _GeneralError extends OpenFeatureError {
|
|
101
|
-
constructor(message, options) {
|
|
102
|
-
super(message, options);
|
|
103
|
-
Object.setPrototypeOf(this, _GeneralError.prototype);
|
|
104
|
-
this.name = "GeneralError";
|
|
105
|
-
this.code = "GENERAL";
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
var InvalidContextError = class _InvalidContextError extends OpenFeatureError {
|
|
109
|
-
constructor(message, options) {
|
|
110
|
-
super(message, options);
|
|
111
|
-
Object.setPrototypeOf(this, _InvalidContextError.prototype);
|
|
112
|
-
this.name = "InvalidContextError";
|
|
113
|
-
this.code = "INVALID_CONTEXT";
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
var ParseError = class _ParseError extends OpenFeatureError {
|
|
117
|
-
constructor(message, options) {
|
|
118
|
-
super(message, options);
|
|
119
|
-
Object.setPrototypeOf(this, _ParseError.prototype);
|
|
120
|
-
this.name = "ParseError";
|
|
121
|
-
this.code = "PARSE_ERROR";
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
var ProviderFatalError = class _ProviderFatalError extends OpenFeatureError {
|
|
125
|
-
constructor(message, options) {
|
|
126
|
-
super(message, options);
|
|
127
|
-
Object.setPrototypeOf(this, _ProviderFatalError.prototype);
|
|
128
|
-
this.name = "ProviderFatalError";
|
|
129
|
-
this.code = "PROVIDER_FATAL";
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
var ProviderNotReadyError = class _ProviderNotReadyError extends OpenFeatureError {
|
|
133
|
-
constructor(message, options) {
|
|
134
|
-
super(message, options);
|
|
135
|
-
Object.setPrototypeOf(this, _ProviderNotReadyError.prototype);
|
|
136
|
-
this.name = "ProviderNotReadyError";
|
|
137
|
-
this.code = "PROVIDER_NOT_READY";
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
var TargetingKeyMissingError = class _TargetingKeyMissingError extends OpenFeatureError {
|
|
141
|
-
constructor(message, options) {
|
|
142
|
-
super(message, options);
|
|
143
|
-
Object.setPrototypeOf(this, _TargetingKeyMissingError.prototype);
|
|
144
|
-
this.name = "TargetingKeyMissingError";
|
|
145
|
-
this.code = "TARGETING_KEY_MISSING";
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
var TypeMismatchError = class _TypeMismatchError extends OpenFeatureError {
|
|
149
|
-
constructor(message, options) {
|
|
150
|
-
super(message, options);
|
|
151
|
-
Object.setPrototypeOf(this, _TypeMismatchError.prototype);
|
|
152
|
-
this.name = "TypeMismatchError";
|
|
153
|
-
this.code = "TYPE_MISMATCH";
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
var instantiateErrorByErrorCode = (errorCode, message) => {
|
|
157
|
-
switch (errorCode) {
|
|
158
|
-
case "FLAG_NOT_FOUND": return new FlagNotFoundError(message);
|
|
159
|
-
case "PARSE_ERROR": return new ParseError(message);
|
|
160
|
-
case "TYPE_MISMATCH": return new TypeMismatchError(message);
|
|
161
|
-
case "TARGETING_KEY_MISSING": return new TargetingKeyMissingError(message);
|
|
162
|
-
case "INVALID_CONTEXT": return new InvalidContextError(message);
|
|
163
|
-
case "PROVIDER_NOT_READY": return new ProviderNotReadyError(message);
|
|
164
|
-
case "PROVIDER_FATAL": return new ProviderFatalError(message);
|
|
165
|
-
default: return new GeneralError(message);
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
var ServerProviderStatus = /* @__PURE__ */ ((ServerProviderStatus2) => {
|
|
169
|
-
ServerProviderStatus2["NOT_READY"] = "NOT_READY";
|
|
170
|
-
ServerProviderStatus2["READY"] = "READY";
|
|
171
|
-
ServerProviderStatus2["ERROR"] = "ERROR";
|
|
172
|
-
ServerProviderStatus2["STALE"] = "STALE";
|
|
173
|
-
ServerProviderStatus2["FATAL"] = "FATAL";
|
|
174
|
-
return ServerProviderStatus2;
|
|
175
|
-
})(ServerProviderStatus || {});
|
|
176
|
-
var ClientProviderEvents = /* @__PURE__ */ ((ClientProviderEvents2) => {
|
|
177
|
-
ClientProviderEvents2["Ready"] = "PROVIDER_READY";
|
|
178
|
-
ClientProviderEvents2["Error"] = "PROVIDER_ERROR";
|
|
179
|
-
ClientProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
|
|
180
|
-
ClientProviderEvents2["ContextChanged"] = "PROVIDER_CONTEXT_CHANGED";
|
|
181
|
-
ClientProviderEvents2["Reconciling"] = "PROVIDER_RECONCILING";
|
|
182
|
-
ClientProviderEvents2["Stale"] = "PROVIDER_STALE";
|
|
183
|
-
return ClientProviderEvents2;
|
|
184
|
-
})(ClientProviderEvents || {});
|
|
185
|
-
var eventStatusMap = {
|
|
186
|
-
["READY"]: "PROVIDER_READY",
|
|
187
|
-
["ERROR"]: "PROVIDER_ERROR",
|
|
188
|
-
["FATAL"]: "PROVIDER_ERROR",
|
|
189
|
-
["STALE"]: "PROVIDER_STALE",
|
|
190
|
-
["RECONCILING"]: "PROVIDER_RECONCILING",
|
|
191
|
-
["NOT_READY"]: void 0
|
|
192
|
-
};
|
|
193
|
-
var statusMatchesEvent = (event, status) => {
|
|
194
|
-
return !status && event === "PROVIDER_READY" || eventStatusMap[status] === event;
|
|
195
|
-
};
|
|
196
|
-
var DefaultLogger = class {
|
|
197
|
-
error(...args) {
|
|
198
|
-
console.error(...args);
|
|
199
|
-
}
|
|
200
|
-
warn(...args) {
|
|
201
|
-
console.warn(...args);
|
|
202
|
-
}
|
|
203
|
-
info() {}
|
|
204
|
-
debug() {}
|
|
205
|
-
};
|
|
206
|
-
var LOG_LEVELS = [
|
|
207
|
-
"error",
|
|
208
|
-
"warn",
|
|
209
|
-
"info",
|
|
210
|
-
"debug"
|
|
211
|
-
];
|
|
212
|
-
var SafeLogger = class {
|
|
213
|
-
constructor(logger) {
|
|
214
|
-
this.fallbackLogger = new DefaultLogger();
|
|
215
|
-
try {
|
|
216
|
-
for (const level of LOG_LEVELS) if (!logger[level] || typeof logger[level] !== "function") throw new Error(`The provided logger is missing the ${level} method.`);
|
|
217
|
-
this.logger = logger;
|
|
218
|
-
} catch (err) {
|
|
219
|
-
console.error(err);
|
|
220
|
-
console.error("Falling back to the default logger.");
|
|
221
|
-
this.logger = this.fallbackLogger;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
error(...args) {
|
|
225
|
-
this.log("error", ...args);
|
|
226
|
-
}
|
|
227
|
-
warn(...args) {
|
|
228
|
-
this.log("warn", ...args);
|
|
229
|
-
}
|
|
230
|
-
info(...args) {
|
|
231
|
-
this.log("info", ...args);
|
|
232
|
-
}
|
|
233
|
-
debug(...args) {
|
|
234
|
-
this.log("debug", ...args);
|
|
235
|
-
}
|
|
236
|
-
log(level, ...args) {
|
|
237
|
-
try {
|
|
238
|
-
this.logger[level](...args);
|
|
239
|
-
} catch (error) {
|
|
240
|
-
this.fallbackLogger[level](...args);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
var GenericEventEmitter = class {
|
|
245
|
-
constructor(globalLogger) {
|
|
246
|
-
this.globalLogger = globalLogger;
|
|
247
|
-
this._handlers = {
|
|
248
|
-
["PROVIDER_CONFIGURATION_CHANGED"]: /* @__PURE__ */ new WeakMap(),
|
|
249
|
-
["PROVIDER_CONTEXT_CHANGED"]: /* @__PURE__ */ new WeakMap(),
|
|
250
|
-
["PROVIDER_READY"]: /* @__PURE__ */ new WeakMap(),
|
|
251
|
-
["PROVIDER_ERROR"]: /* @__PURE__ */ new WeakMap(),
|
|
252
|
-
["PROVIDER_STALE"]: /* @__PURE__ */ new WeakMap(),
|
|
253
|
-
["PROVIDER_RECONCILING"]: /* @__PURE__ */ new WeakMap()
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
emit(eventType, context) {
|
|
257
|
-
this.eventEmitter.emit(eventType, context);
|
|
258
|
-
}
|
|
259
|
-
addHandler(eventType, handler) {
|
|
260
|
-
const asyncHandler = (details) => __async(this, null, function* () {
|
|
261
|
-
var _a;
|
|
262
|
-
try {
|
|
263
|
-
yield handler(details);
|
|
264
|
-
} catch (err) {
|
|
265
|
-
(_a = this._logger) == null || _a.error("Error running event handler:", err);
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
const existingAsyncHandlers = this._handlers[eventType].get(handler);
|
|
269
|
-
this._handlers[eventType].set(handler, [...existingAsyncHandlers || [], asyncHandler]);
|
|
270
|
-
this.eventEmitter.on(eventType, asyncHandler);
|
|
271
|
-
}
|
|
272
|
-
removeHandler(eventType, handler) {
|
|
273
|
-
const existingAsyncHandlers = this._handlers[eventType].get(handler);
|
|
274
|
-
if (existingAsyncHandlers) {
|
|
275
|
-
const removedAsyncHandler = existingAsyncHandlers.pop();
|
|
276
|
-
if (removedAsyncHandler) this.eventEmitter.removeListener(eventType, removedAsyncHandler);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
removeAllHandlers(eventType) {
|
|
280
|
-
if (eventType) this.eventEmitter.removeAllListeners(eventType);
|
|
281
|
-
else this.eventEmitter.removeAllListeners();
|
|
282
|
-
}
|
|
283
|
-
getHandlers(eventType) {
|
|
284
|
-
return this.eventEmitter.listeners(eventType);
|
|
285
|
-
}
|
|
286
|
-
setLogger(logger) {
|
|
287
|
-
this._eventLogger = new SafeLogger(logger);
|
|
288
|
-
return this;
|
|
289
|
-
}
|
|
290
|
-
get _logger() {
|
|
291
|
-
var _a, _b;
|
|
292
|
-
return (_b = this._eventLogger) != null ? _b : (_a = this.globalLogger) == null ? void 0 : _a.call(this);
|
|
293
|
-
}
|
|
294
|
-
};
|
|
295
|
-
function isString(value) {
|
|
296
|
-
return typeof value === "string";
|
|
297
|
-
}
|
|
298
|
-
function stringOrUndefined(value) {
|
|
299
|
-
return isString(value) ? value : void 0;
|
|
300
|
-
}
|
|
301
|
-
function isObject(value) {
|
|
302
|
-
return typeof value === "object";
|
|
303
|
-
}
|
|
304
|
-
function objectOrUndefined(value) {
|
|
305
|
-
return isObject(value) ? value : void 0;
|
|
306
|
-
}
|
|
307
|
-
function isDefined(input) {
|
|
308
|
-
return typeof input !== "undefined" && input !== null;
|
|
309
|
-
}
|
|
310
|
-
var ProviderWrapper = class {
|
|
311
|
-
constructor(_provider, _status, _statusEnumType) {
|
|
312
|
-
this._provider = _provider;
|
|
313
|
-
this._status = _status;
|
|
314
|
-
this._pendingContextChanges = 0;
|
|
315
|
-
var _a, _b, _c;
|
|
316
|
-
(_a = _provider.events) == null || _a.addHandler("PROVIDER_READY", () => {
|
|
317
|
-
this._status = _statusEnumType.READY;
|
|
318
|
-
});
|
|
319
|
-
(_b = _provider.events) == null || _b.addHandler("PROVIDER_STALE", () => {
|
|
320
|
-
this._status = _statusEnumType.STALE;
|
|
321
|
-
});
|
|
322
|
-
(_c = _provider.events) == null || _c.addHandler("PROVIDER_ERROR", (details) => {
|
|
323
|
-
if ((details == null ? void 0 : details.errorCode) === "PROVIDER_FATAL") this._status = _statusEnumType.FATAL;
|
|
324
|
-
else this._status = _statusEnumType.ERROR;
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
get provider() {
|
|
328
|
-
return this._provider;
|
|
329
|
-
}
|
|
330
|
-
set provider(provider) {
|
|
331
|
-
this._provider = provider;
|
|
332
|
-
}
|
|
333
|
-
get status() {
|
|
334
|
-
return this._status;
|
|
335
|
-
}
|
|
336
|
-
set status(status) {
|
|
337
|
-
this._status = status;
|
|
338
|
-
}
|
|
339
|
-
get allContextChangesSettled() {
|
|
340
|
-
return this._pendingContextChanges === 0;
|
|
341
|
-
}
|
|
342
|
-
incrementPendingContextChanges() {
|
|
343
|
-
this._pendingContextChanges++;
|
|
344
|
-
}
|
|
345
|
-
decrementPendingContextChanges() {
|
|
346
|
-
this._pendingContextChanges--;
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
var OpenFeatureCommonAPI = class {
|
|
350
|
-
constructor(category) {
|
|
351
|
-
this._hooks = [];
|
|
352
|
-
this._context = {};
|
|
353
|
-
this._logger = new DefaultLogger();
|
|
354
|
-
this._clientEventHandlers = /* @__PURE__ */ new Map();
|
|
355
|
-
this._domainScopedContext = /* @__PURE__ */ new Map();
|
|
356
|
-
this._clientEvents = /* @__PURE__ */ new Map();
|
|
357
|
-
this._runsOn = category;
|
|
358
|
-
}
|
|
359
|
-
addHooks(...hooks) {
|
|
360
|
-
this._hooks = [...this._hooks, ...hooks];
|
|
361
|
-
return this;
|
|
362
|
-
}
|
|
363
|
-
getHooks() {
|
|
364
|
-
return this._hooks;
|
|
365
|
-
}
|
|
366
|
-
clearHooks() {
|
|
367
|
-
this._hooks = [];
|
|
368
|
-
return this;
|
|
369
|
-
}
|
|
370
|
-
setLogger(logger) {
|
|
371
|
-
this._logger = new SafeLogger(logger);
|
|
372
|
-
return this;
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Get metadata about the default provider.
|
|
376
|
-
* @returns {ProviderMetadata} Provider Metadata
|
|
377
|
-
*/
|
|
378
|
-
get providerMetadata() {
|
|
379
|
-
return this.getProviderMetadata();
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Get metadata about a registered provider using the client name.
|
|
383
|
-
* An unbound or empty client name will return metadata from the default provider.
|
|
384
|
-
* @param {string} domain An identifier which logically binds clients with providers
|
|
385
|
-
* @returns {ProviderMetadata} Provider Metadata
|
|
386
|
-
*/
|
|
387
|
-
getProviderMetadata(domain) {
|
|
388
|
-
return this.getProviderForClient(domain).metadata;
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Adds a handler for the given provider event type.
|
|
392
|
-
* The handlers are called in the order they have been added.
|
|
393
|
-
* API (global) events run for all providers.
|
|
394
|
-
* @param {AnyProviderEvent} eventType The provider event type to listen to
|
|
395
|
-
* @param {EventHandler} handler The handler to run on occurrence of the event type
|
|
396
|
-
* @param {EventOptions} options Optional options such as signal for aborting
|
|
397
|
-
*/
|
|
398
|
-
addHandler(eventType, handler, options) {
|
|
399
|
-
[.../* @__PURE__ */ new Map([[void 0, this._defaultProvider]]), ...this._domainScopedProviders].forEach((keyProviderTuple) => {
|
|
400
|
-
var _a;
|
|
401
|
-
const domain = keyProviderTuple[0];
|
|
402
|
-
const provider = keyProviderTuple[1].provider;
|
|
403
|
-
const status = keyProviderTuple[1].status;
|
|
404
|
-
if (statusMatchesEvent(eventType, status)) try {
|
|
405
|
-
handler({
|
|
406
|
-
domain,
|
|
407
|
-
providerName: provider.metadata.name
|
|
408
|
-
});
|
|
409
|
-
} catch (err) {
|
|
410
|
-
(_a = this._logger) == null || _a.error("Error running event handler:", err);
|
|
411
|
-
}
|
|
412
|
-
});
|
|
413
|
-
this._apiEmitter.addHandler(eventType, handler);
|
|
414
|
-
if ((options == null ? void 0 : options.signal) && typeof options.signal.addEventListener === "function") options.signal.addEventListener("abort", () => {
|
|
415
|
-
this.removeHandler(eventType, handler);
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Removes a handler for the given provider event type.
|
|
420
|
-
* @param {AnyProviderEvent} eventType The provider event type to remove the listener for
|
|
421
|
-
* @param {EventHandler} handler The handler to remove for the provider event type
|
|
422
|
-
*/
|
|
423
|
-
removeHandler(eventType, handler) {
|
|
424
|
-
this._apiEmitter.removeHandler(eventType, handler);
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Removes all event handlers.
|
|
428
|
-
*/
|
|
429
|
-
clearHandlers() {
|
|
430
|
-
this._apiEmitter.removeAllHandlers();
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Gets the current handlers for the given provider event type.
|
|
434
|
-
* @param {AnyProviderEvent} eventType The provider event type to get the current handlers for
|
|
435
|
-
* @returns {EventHandler[]} The handlers currently attached to the given provider event type
|
|
436
|
-
*/
|
|
437
|
-
getHandlers(eventType) {
|
|
438
|
-
return this._apiEmitter.getHandlers(eventType);
|
|
439
|
-
}
|
|
440
|
-
setAwaitableProvider(domainOrProvider, providerOrUndefined) {
|
|
441
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
442
|
-
const domain = stringOrUndefined(domainOrProvider);
|
|
443
|
-
const provider = (_a = objectOrUndefined(domainOrProvider)) != null ? _a : objectOrUndefined(providerOrUndefined);
|
|
444
|
-
if (!provider) {
|
|
445
|
-
this._logger.debug("No provider defined, ignoring setProvider call");
|
|
446
|
-
return;
|
|
447
|
-
}
|
|
448
|
-
const oldProvider = this.getProviderForClient(domain);
|
|
449
|
-
const providerName = provider.metadata.name;
|
|
450
|
-
if (oldProvider === provider) {
|
|
451
|
-
this._logger.debug("Provider is already set, ignoring setProvider call");
|
|
452
|
-
return;
|
|
453
|
-
}
|
|
454
|
-
if (!provider.runsOn) this._logger.debug(`Provider '${provider.metadata.name}' has not defined its intended use.`);
|
|
455
|
-
else if (provider.runsOn !== this._runsOn) throw new GeneralError(`Provider '${provider.metadata.name}' is intended for use on the ${provider.runsOn}.`);
|
|
456
|
-
const emitters = this.getAssociatedEventEmitters(domain);
|
|
457
|
-
let initializationPromise = void 0;
|
|
458
|
-
const wrappedProvider = new ProviderWrapper(provider, this._statusEnumType.NOT_READY, this._statusEnumType);
|
|
459
|
-
if (typeof provider.initialize === "function" && !this.allProviders.includes(provider)) initializationPromise = (_e = (_d = (_c = provider.initialize) == null ? void 0 : _c.call(provider, domain ? (_b = this._domainScopedContext.get(domain)) != null ? _b : this._context : this._context)) == null ? void 0 : _d.then(() => {
|
|
460
|
-
var _a2;
|
|
461
|
-
wrappedProvider.status = this._statusEnumType.READY;
|
|
462
|
-
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
|
|
463
|
-
emitter?.emit("PROVIDER_READY", {
|
|
464
|
-
clientName: domain,
|
|
465
|
-
domain,
|
|
466
|
-
providerName
|
|
467
|
-
});
|
|
468
|
-
});
|
|
469
|
-
(_a2 = this._apiEmitter) == null || _a2.emit("PROVIDER_READY", {
|
|
470
|
-
clientName: domain,
|
|
471
|
-
domain,
|
|
472
|
-
providerName
|
|
473
|
-
});
|
|
474
|
-
})) == null ? void 0 : _e.catch((error) => {
|
|
475
|
-
var _a2;
|
|
476
|
-
if ((error == null ? void 0 : error.code) === "PROVIDER_FATAL") wrappedProvider.status = this._statusEnumType.FATAL;
|
|
477
|
-
else wrappedProvider.status = this._statusEnumType.ERROR;
|
|
478
|
-
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
|
|
479
|
-
emitter?.emit("PROVIDER_ERROR", {
|
|
480
|
-
clientName: domain,
|
|
481
|
-
domain,
|
|
482
|
-
providerName,
|
|
483
|
-
message: error == null ? void 0 : error.message
|
|
484
|
-
});
|
|
485
|
-
});
|
|
486
|
-
(_a2 = this._apiEmitter) == null || _a2.emit("PROVIDER_ERROR", {
|
|
487
|
-
clientName: domain,
|
|
488
|
-
domain,
|
|
489
|
-
providerName,
|
|
490
|
-
message: error == null ? void 0 : error.message
|
|
491
|
-
});
|
|
492
|
-
throw error;
|
|
493
|
-
});
|
|
494
|
-
else {
|
|
495
|
-
wrappedProvider.status = this._statusEnumType.READY;
|
|
496
|
-
emitters.forEach((emitter) => {
|
|
497
|
-
emitter?.emit("PROVIDER_READY", {
|
|
498
|
-
clientName: domain,
|
|
499
|
-
domain,
|
|
500
|
-
providerName
|
|
501
|
-
});
|
|
502
|
-
});
|
|
503
|
-
(_f = this._apiEmitter) == null || _f.emit("PROVIDER_READY", {
|
|
504
|
-
clientName: domain,
|
|
505
|
-
domain,
|
|
506
|
-
providerName
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
if (domain) this._domainScopedProviders.set(domain, wrappedProvider);
|
|
510
|
-
else this._defaultProvider = wrappedProvider;
|
|
511
|
-
this.transferListeners(oldProvider, provider, domain, emitters);
|
|
512
|
-
if (!this.allProviders.includes(oldProvider)) (_h = (_g = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _g.call(oldProvider)) == null || _h.catch((err) => {
|
|
513
|
-
this._logger.error(`error closing provider: ${err == null ? void 0 : err.message}, ${err == null ? void 0 : err.stack}`);
|
|
514
|
-
});
|
|
515
|
-
return initializationPromise;
|
|
516
|
-
}
|
|
517
|
-
getProviderForClient(domain) {
|
|
518
|
-
var _a, _b;
|
|
519
|
-
if (!domain) return this._defaultProvider.provider;
|
|
520
|
-
return (_b = (_a = this._domainScopedProviders.get(domain)) == null ? void 0 : _a.provider) != null ? _b : this._defaultProvider.provider;
|
|
521
|
-
}
|
|
522
|
-
buildAndCacheEventEmitterForClient(domain) {
|
|
523
|
-
const emitter = this._clientEvents.get(domain);
|
|
524
|
-
if (emitter) return emitter;
|
|
525
|
-
const newEmitter = this._createEventEmitter();
|
|
526
|
-
this._clientEvents.set(domain, newEmitter);
|
|
527
|
-
const clientProvider = this.getProviderForClient(domain);
|
|
528
|
-
Object.values(ClientProviderEvents).forEach((eventType) => {
|
|
529
|
-
var _a;
|
|
530
|
-
return (_a = clientProvider.events) == null ? void 0 : _a.addHandler(eventType, (details) => __async(this, null, function* () {
|
|
531
|
-
newEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), {
|
|
532
|
-
clientName: domain,
|
|
533
|
-
domain,
|
|
534
|
-
providerName: clientProvider.metadata.name
|
|
535
|
-
}));
|
|
536
|
-
}));
|
|
537
|
-
});
|
|
538
|
-
return newEmitter;
|
|
539
|
-
}
|
|
540
|
-
getUnboundEmitters() {
|
|
541
|
-
const domainScopedProviders = [...this._domainScopedProviders.keys()];
|
|
542
|
-
return [...[...this._clientEvents.keys()].filter(isDefined).filter((name) => !domainScopedProviders.includes(name)).map((name) => this._clientEvents.get(name)), this._clientEvents.get(void 0)].filter(isDefined);
|
|
543
|
-
}
|
|
544
|
-
getAssociatedEventEmitters(domain) {
|
|
545
|
-
return domain ? [this.buildAndCacheEventEmitterForClient(domain)] : this.getUnboundEmitters();
|
|
546
|
-
}
|
|
547
|
-
transferListeners(oldProvider, newProvider, domain, emitters) {
|
|
548
|
-
var _a;
|
|
549
|
-
(_a = this._clientEventHandlers.get(domain)) == null || _a.forEach((eventHandler) => {
|
|
550
|
-
var _a2;
|
|
551
|
-
return (_a2 = oldProvider.events) == null ? void 0 : _a2.removeHandler(...eventHandler);
|
|
552
|
-
});
|
|
553
|
-
const newClientHandlers = Object.values(ClientProviderEvents).map((eventType) => {
|
|
554
|
-
const handler = (details) => __async(this, null, function* () {
|
|
555
|
-
emitters.forEach((emitter) => {
|
|
556
|
-
emitter?.emit(eventType, __spreadProps(__spreadValues({}, details), {
|
|
557
|
-
clientName: domain,
|
|
558
|
-
domain,
|
|
559
|
-
providerName: newProvider.metadata.name
|
|
560
|
-
}));
|
|
561
|
-
});
|
|
562
|
-
this._apiEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), {
|
|
563
|
-
clientName: domain,
|
|
564
|
-
domain,
|
|
565
|
-
providerName: newProvider.metadata.name
|
|
566
|
-
}));
|
|
567
|
-
});
|
|
568
|
-
return [eventType, handler];
|
|
569
|
-
});
|
|
570
|
-
this._clientEventHandlers.set(domain, newClientHandlers);
|
|
571
|
-
newClientHandlers.forEach((eventHandler) => {
|
|
572
|
-
var _a2;
|
|
573
|
-
return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(...eventHandler);
|
|
574
|
-
});
|
|
575
|
-
}
|
|
576
|
-
close() {
|
|
577
|
-
return __async(this, null, function* () {
|
|
578
|
-
var _a, _b;
|
|
579
|
-
try {
|
|
580
|
-
yield (_b = (_a = this == null ? void 0 : this._defaultProvider.provider) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a);
|
|
581
|
-
} catch (err) {
|
|
582
|
-
this.handleShutdownError(this._defaultProvider.provider, err);
|
|
583
|
-
}
|
|
584
|
-
const wrappers = Array.from(this._domainScopedProviders);
|
|
585
|
-
yield Promise.all(wrappers.map((_0) => __async(this, [_0], function* ([, wrapper]) {
|
|
586
|
-
var _a2, _b2;
|
|
587
|
-
try {
|
|
588
|
-
yield (_b2 = wrapper == null ? void 0 : (_a2 = wrapper.provider).onClose) == null ? void 0 : _b2.call(_a2);
|
|
589
|
-
} catch (err) {
|
|
590
|
-
this.handleShutdownError(wrapper == null ? void 0 : wrapper.provider, err);
|
|
591
|
-
}
|
|
592
|
-
})));
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
clearProvidersAndSetDefault(defaultProvider) {
|
|
596
|
-
return __async(this, null, function* () {
|
|
597
|
-
try {
|
|
598
|
-
yield this.close();
|
|
599
|
-
} catch (err) {
|
|
600
|
-
this._logger.error("Unable to cleanly close providers. Resetting to the default configuration.");
|
|
601
|
-
} finally {
|
|
602
|
-
this._domainScopedProviders.clear();
|
|
603
|
-
this._defaultProvider = new ProviderWrapper(defaultProvider, this._statusEnumType.NOT_READY, this._statusEnumType);
|
|
604
|
-
}
|
|
605
|
-
});
|
|
606
|
-
}
|
|
607
|
-
get allProviders() {
|
|
608
|
-
return [...[...this._domainScopedProviders.values()].map((wrappers) => wrappers.provider), this._defaultProvider.provider];
|
|
609
|
-
}
|
|
610
|
-
handleShutdownError(provider, err) {
|
|
611
|
-
this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);
|
|
612
|
-
this._logger.error(err == null ? void 0 : err.stack);
|
|
613
|
-
}
|
|
614
|
-
};
|
|
615
|
-
|
|
616
|
-
//#endregion
|
|
617
|
-
export { ClientProviderEvents, DefaultLogger, ErrorCode, FlagNotFoundError, GeneralError, GenericEventEmitter, InvalidContextError, LOG_LEVELS, MapHookData, OpenFeatureCommonAPI, OpenFeatureError, ParseError, ProviderFatalError, ProviderNotReadyError, ProviderWrapper, SafeLogger, ServerProviderStatus, StandardResolutionReasons, TargetingKeyMissingError, TypeMismatchError, instantiateErrorByErrorCode, isObject, isString, objectOrUndefined, statusMatchesEvent, stringOrUndefined };
|
|
618
|
-
//# sourceMappingURL=index.mjs.map
|