@vercel/flags-core 0.1.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts DELETED
@@ -1,79 +0,0 @@
1
- import { D as DataSource, P as Packed, E as EvaluationParams, a as EvaluationResult, C as ConnectionOptions, F as FlagsClient } from './client-BxFTPk0J.js';
2
- export { R as Reason, c as createClient } from './client-BxFTPk0J.js';
3
- import { EdgeConfigClient } from '@vercel/edge-config';
4
- import { AsyncLocalStorage } from 'node:async_hooks';
5
-
6
- /**
7
- * Implements the DataSource interface for Edge Config.
8
- */
9
- declare class EdgeConfigDataSource implements DataSource {
10
- connectionString?: string;
11
- edgeConfigClient: EdgeConfigClient;
12
- edgeConfigItemKey: string;
13
- requestCache: WeakMap<WeakKey, Promise<Packed.Data | undefined>>;
14
- projectId?: string;
15
- constructor(options: {
16
- edgeConfigItemKey: string;
17
- edgeConfigClient: EdgeConfigClient;
18
- projectId?: string;
19
- });
20
- private getCachedData;
21
- getData(): Promise<Packed.Data>;
22
- }
23
-
24
- declare class InMemoryDataSource implements DataSource {
25
- private data;
26
- projectId?: string;
27
- constructor(data: Packed.Data, projectId?: string);
28
- getData(): Promise<Packed.Data>;
29
- }
30
-
31
- /**
32
- * A store to avoid reading the Edge Config for every flag evaluation,
33
- * and instead reading it once per request.
34
- */
35
- declare const store: AsyncLocalStorage<WeakKey>;
36
-
37
- /**
38
- * Evaluates a single feature flag.
39
- *
40
- * This function should never throw for expected errors, instead it returns
41
- * { reason: Reason.ERROR, errorMessage: ... }.
42
- *
43
- * The function can however throw for situations which should not happen under
44
- * normal circumstances, for example if the environment config is not found.
45
- */
46
- declare function evaluate<T>(
47
- /**
48
- * The params used for the evaluation
49
- */
50
- params: EvaluationParams<T>): EvaluationResult<T>;
51
-
52
- declare function parseFlagsConnectionString(connectionString: string): ConnectionOptions;
53
- /**
54
- * Internal function for testing purposes
55
- */
56
- declare function resetDefaultFlagsClient(): void;
57
- declare function createClientFromConnectionString(connectionString: string): FlagsClient;
58
- /**
59
- * This function is for internal use only.
60
- *
61
- * Produces a default flags client reading from a default edge config.
62
- *
63
- * - relies on process.env.FLAGS
64
- * - does not use process.env.EDGE_CONFIG
65
- *
66
- * @param connectionString - usually from process.env.FLAGS
67
- * @returns - a flags client
68
- */
69
- declare function getDefaultFlagsClient(): FlagsClient;
70
- /**
71
- * Resolve the Flags environment. If connectionOptionsEnv is provided, use it as-is.
72
- *
73
- * Fall back to VERCEL_ENV if it is a known Vercel environment (production, preview, development)
74
- * If VERCEL_ENV is unset, it will resolve 'development' (Vercel provides it in preview and production)
75
- * If VERCEL_ENV is not one of the known values, it will resolve 'preview'
76
- */
77
- declare function getFlagsEnvironment(connectionOptionsEnv: string | null): string;
78
-
79
- export { DataSource, EdgeConfigDataSource, FlagsClient, InMemoryDataSource, Packed, createClientFromConnectionString, evaluate, getDefaultFlagsClient, getFlagsEnvironment, parseFlagsConnectionString, resetDefaultFlagsClient, store };
package/dist/index.js DELETED
@@ -1,27 +0,0 @@
1
- import {
2
- EdgeConfigDataSource,
3
- InMemoryDataSource,
4
- ResolutionReason,
5
- createClient,
6
- createClientFromConnectionString,
7
- evaluate,
8
- getDefaultFlagsClient,
9
- getFlagsEnvironment,
10
- parseFlagsConnectionString,
11
- resetDefaultFlagsClient,
12
- store
13
- } from "./chunk-4IFGPGNY.js";
14
- export {
15
- EdgeConfigDataSource,
16
- InMemoryDataSource,
17
- ResolutionReason as Reason,
18
- createClient,
19
- createClientFromConnectionString,
20
- evaluate,
21
- getDefaultFlagsClient,
22
- getFlagsEnvironment,
23
- parseFlagsConnectionString,
24
- resetDefaultFlagsClient,
25
- store
26
- };
27
- //# sourceMappingURL=index.js.map
@@ -1,151 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _class;
2
-
3
- var _chunk6ZAELH3Kcjs = require('./chunk-6ZAELH3K.cjs');
4
-
5
- // src/openfeature.ts
6
-
7
-
8
-
9
- var _serversdk = require('@openfeature/server-sdk');
10
- function mapReason(reason) {
11
- switch (reason) {
12
- case "error" /* ERROR */:
13
- return _serversdk.StandardResolutionReasons.ERROR;
14
- case "paused" /* PAUSED */:
15
- return _serversdk.StandardResolutionReasons.STATIC;
16
- case "fallthrough" /* FALLTHROUGH */:
17
- return _serversdk.StandardResolutionReasons.DEFAULT;
18
- case "target_match" /* TARGET_MATCH */:
19
- case "rule_match" /* RULE_MATCH */:
20
- return _serversdk.StandardResolutionReasons.TARGETING_MATCH;
21
- default:
22
- return _serversdk.StandardResolutionReasons.UNKNOWN;
23
- }
24
- }
25
- var VercelProvider = (_class = class {
26
- __init() {this.metadata = {
27
- name: "vercel-nodejs-provider"
28
- }}
29
- __init2() {this.runsOn = "server"}
30
-
31
- constructor(clientOrConnectionString) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
32
- if (typeof clientOrConnectionString === "string") {
33
- this.client = _chunk6ZAELH3Kcjs.createClientFromConnectionString.call(void 0, clientOrConnectionString);
34
- } else {
35
- this.client = clientOrConnectionString;
36
- }
37
- }
38
- async initialize(context) {
39
- await this.client.initialize();
40
- }
41
- async onClose() {
42
- await this.client.shutdown();
43
- }
44
- async resolveBooleanEvaluation(flagKey, defaultValue, context) {
45
- const result = await this.client.evaluate(
46
- flagKey,
47
- defaultValue,
48
- context
49
- );
50
- if (result.reason === "error" /* ERROR */) {
51
- return {
52
- value: defaultValue,
53
- reason: _serversdk.StandardResolutionReasons.ERROR,
54
- errorCode: _serversdk.ErrorCode.GENERAL,
55
- errorMessage: result.errorMessage
56
- };
57
- }
58
- if (typeof result.value !== "boolean") {
59
- return {
60
- value: defaultValue,
61
- reason: _serversdk.StandardResolutionReasons.ERROR,
62
- errorCode: _serversdk.ErrorCode.TYPE_MISMATCH,
63
- errorMessage: `Expected boolean value for flag "${flagKey}"`
64
- };
65
- }
66
- return {
67
- value: result.value,
68
- reason: mapReason(result.reason)
69
- };
70
- }
71
- async resolveStringEvaluation(flagKey, defaultValue, context) {
72
- const result = await this.client.evaluate(
73
- flagKey,
74
- defaultValue,
75
- context
76
- );
77
- if (result.reason === "error" /* ERROR */) {
78
- return {
79
- value: defaultValue,
80
- reason: _serversdk.StandardResolutionReasons.ERROR,
81
- errorCode: _serversdk.ErrorCode.GENERAL,
82
- errorMessage: result.errorMessage
83
- };
84
- }
85
- if (typeof result.value !== "string") {
86
- return {
87
- value: defaultValue,
88
- reason: _serversdk.StandardResolutionReasons.ERROR,
89
- errorCode: _serversdk.ErrorCode.TYPE_MISMATCH,
90
- errorMessage: `Expected string value for flag "${flagKey}"`
91
- };
92
- }
93
- return {
94
- value: result.value,
95
- reason: mapReason(result.reason),
96
- errorMessage: result.errorMessage
97
- };
98
- }
99
- async resolveNumberEvaluation(flagKey, defaultValue, context) {
100
- const result = await this.client.evaluate(
101
- flagKey,
102
- defaultValue,
103
- context
104
- );
105
- if (result.reason === "error" /* ERROR */) {
106
- return {
107
- value: defaultValue,
108
- reason: _serversdk.StandardResolutionReasons.ERROR,
109
- errorCode: _serversdk.ErrorCode.GENERAL,
110
- errorMessage: result.errorMessage
111
- };
112
- }
113
- if (typeof result.value !== "number") {
114
- return {
115
- value: defaultValue,
116
- reason: _serversdk.StandardResolutionReasons.ERROR,
117
- errorCode: _serversdk.ErrorCode.TYPE_MISMATCH,
118
- errorMessage: `Expected number value for flag "${flagKey}"`
119
- };
120
- }
121
- return {
122
- value: result.value,
123
- reason: mapReason(result.reason),
124
- errorMessage: result.errorMessage
125
- };
126
- }
127
- async resolveObjectEvaluation(flagKey, defaultValue, context) {
128
- const result = await this.client.evaluate(
129
- flagKey,
130
- defaultValue,
131
- context
132
- );
133
- if (result.reason === "error" /* ERROR */) {
134
- return {
135
- value: defaultValue,
136
- reason: _serversdk.StandardResolutionReasons.ERROR,
137
- errorCode: _serversdk.ErrorCode.GENERAL,
138
- errorMessage: result.errorMessage
139
- };
140
- }
141
- return {
142
- value: result.value,
143
- reason: mapReason(result.reason),
144
- errorMessage: result.errorMessage
145
- };
146
- }
147
- }, _class);
148
-
149
-
150
- exports.VercelProvider = VercelProvider;
151
- //# sourceMappingURL=openfeature.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/openfeature.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ErrorCode,\n type EvaluationContext,\n type JsonValue,\n type Provider,\n type ProviderMetadata,\n type ResolutionDetails,\n type ResolutionReason,\n StandardResolutionReasons,\n} from '@openfeature/server-sdk';\nimport { createClientFromConnectionString, Reason } from '.';\nimport type { FlagsClient } from './client';\n\nfunction mapReason(reason: Reason): ResolutionReason {\n switch (reason) {\n case Reason.ERROR:\n return StandardResolutionReasons.ERROR;\n case Reason.PAUSED:\n return StandardResolutionReasons.STATIC;\n case Reason.FALLTHROUGH:\n return StandardResolutionReasons.DEFAULT;\n case Reason.TARGET_MATCH:\n case Reason.RULE_MATCH:\n return StandardResolutionReasons.TARGETING_MATCH;\n default:\n return StandardResolutionReasons.UNKNOWN;\n }\n}\n\nexport class VercelProvider implements Provider {\n readonly metadata: ProviderMetadata = {\n name: 'vercel-nodejs-provider',\n } as const;\n\n readonly runsOn = 'server';\n private client: FlagsClient;\n\n /**\n * Creates a VercelProvider from an existing FlagsClient\n */\n constructor(client: FlagsClient);\n /**\n * Creates a VercelProvider from a connection string\n */\n constructor(connectionString: string);\n constructor(clientOrConnectionString: FlagsClient | string) {\n if (typeof clientOrConnectionString === 'string') {\n this.client = createClientFromConnectionString(clientOrConnectionString);\n } else {\n this.client = clientOrConnectionString;\n }\n }\n\n async initialize(context?: EvaluationContext): Promise<void> {\n await this.client.initialize();\n }\n\n async onClose() {\n await this.client.shutdown();\n }\n\n async resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<boolean>> {\n const result = await this.client.evaluate<boolean>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n if (typeof result.value !== 'boolean') {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.TYPE_MISMATCH,\n errorMessage: `Expected boolean value for flag \"${flagKey}\"`,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n };\n }\n\n async resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<string>> {\n const result = await this.client.evaluate<string>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n if (typeof result.value !== 'string') {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.TYPE_MISMATCH,\n errorMessage: `Expected string value for flag \"${flagKey}\"`,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n errorMessage: result.errorMessage,\n };\n }\n\n async resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<number>> {\n const result = await this.client.evaluate<number>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n if (typeof result.value !== 'number') {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.TYPE_MISMATCH,\n errorMessage: `Expected number value for flag \"${flagKey}\"`,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n errorMessage: result.errorMessage,\n };\n }\n\n async resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<T>> {\n const result = await this.client.evaluate<T>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n errorMessage: result.errorMessage,\n };\n }\n}\n"]}
@@ -1,24 +0,0 @@
1
- import { Provider, ProviderMetadata, EvaluationContext, ResolutionDetails, JsonValue } from '@openfeature/server-sdk';
2
- import { F as FlagsClient } from './client-BxFTPk0J.cjs';
3
-
4
- declare class VercelProvider implements Provider {
5
- readonly metadata: ProviderMetadata;
6
- readonly runsOn = "server";
7
- private client;
8
- /**
9
- * Creates a VercelProvider from an existing FlagsClient
10
- */
11
- constructor(client: FlagsClient);
12
- /**
13
- * Creates a VercelProvider from a connection string
14
- */
15
- constructor(connectionString: string);
16
- initialize(context?: EvaluationContext): Promise<void>;
17
- onClose(): Promise<void>;
18
- resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext): Promise<ResolutionDetails<boolean>>;
19
- resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext): Promise<ResolutionDetails<string>>;
20
- resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext): Promise<ResolutionDetails<number>>;
21
- resolveObjectEvaluation<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext): Promise<ResolutionDetails<T>>;
22
- }
23
-
24
- export { VercelProvider };
@@ -1,24 +0,0 @@
1
- import { Provider, ProviderMetadata, EvaluationContext, ResolutionDetails, JsonValue } from '@openfeature/server-sdk';
2
- import { F as FlagsClient } from './client-BxFTPk0J.js';
3
-
4
- declare class VercelProvider implements Provider {
5
- readonly metadata: ProviderMetadata;
6
- readonly runsOn = "server";
7
- private client;
8
- /**
9
- * Creates a VercelProvider from an existing FlagsClient
10
- */
11
- constructor(client: FlagsClient);
12
- /**
13
- * Creates a VercelProvider from a connection string
14
- */
15
- constructor(connectionString: string);
16
- initialize(context?: EvaluationContext): Promise<void>;
17
- onClose(): Promise<void>;
18
- resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext): Promise<ResolutionDetails<boolean>>;
19
- resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext): Promise<ResolutionDetails<string>>;
20
- resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext): Promise<ResolutionDetails<number>>;
21
- resolveObjectEvaluation<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext): Promise<ResolutionDetails<T>>;
22
- }
23
-
24
- export { VercelProvider };
@@ -1,151 +0,0 @@
1
- import {
2
- createClientFromConnectionString
3
- } from "./chunk-4IFGPGNY.js";
4
-
5
- // src/openfeature.ts
6
- import {
7
- ErrorCode,
8
- StandardResolutionReasons
9
- } from "@openfeature/server-sdk";
10
- function mapReason(reason) {
11
- switch (reason) {
12
- case "error" /* ERROR */:
13
- return StandardResolutionReasons.ERROR;
14
- case "paused" /* PAUSED */:
15
- return StandardResolutionReasons.STATIC;
16
- case "fallthrough" /* FALLTHROUGH */:
17
- return StandardResolutionReasons.DEFAULT;
18
- case "target_match" /* TARGET_MATCH */:
19
- case "rule_match" /* RULE_MATCH */:
20
- return StandardResolutionReasons.TARGETING_MATCH;
21
- default:
22
- return StandardResolutionReasons.UNKNOWN;
23
- }
24
- }
25
- var VercelProvider = class {
26
- metadata = {
27
- name: "vercel-nodejs-provider"
28
- };
29
- runsOn = "server";
30
- client;
31
- constructor(clientOrConnectionString) {
32
- if (typeof clientOrConnectionString === "string") {
33
- this.client = createClientFromConnectionString(clientOrConnectionString);
34
- } else {
35
- this.client = clientOrConnectionString;
36
- }
37
- }
38
- async initialize(context) {
39
- await this.client.initialize();
40
- }
41
- async onClose() {
42
- await this.client.shutdown();
43
- }
44
- async resolveBooleanEvaluation(flagKey, defaultValue, context) {
45
- const result = await this.client.evaluate(
46
- flagKey,
47
- defaultValue,
48
- context
49
- );
50
- if (result.reason === "error" /* ERROR */) {
51
- return {
52
- value: defaultValue,
53
- reason: StandardResolutionReasons.ERROR,
54
- errorCode: ErrorCode.GENERAL,
55
- errorMessage: result.errorMessage
56
- };
57
- }
58
- if (typeof result.value !== "boolean") {
59
- return {
60
- value: defaultValue,
61
- reason: StandardResolutionReasons.ERROR,
62
- errorCode: ErrorCode.TYPE_MISMATCH,
63
- errorMessage: `Expected boolean value for flag "${flagKey}"`
64
- };
65
- }
66
- return {
67
- value: result.value,
68
- reason: mapReason(result.reason)
69
- };
70
- }
71
- async resolveStringEvaluation(flagKey, defaultValue, context) {
72
- const result = await this.client.evaluate(
73
- flagKey,
74
- defaultValue,
75
- context
76
- );
77
- if (result.reason === "error" /* ERROR */) {
78
- return {
79
- value: defaultValue,
80
- reason: StandardResolutionReasons.ERROR,
81
- errorCode: ErrorCode.GENERAL,
82
- errorMessage: result.errorMessage
83
- };
84
- }
85
- if (typeof result.value !== "string") {
86
- return {
87
- value: defaultValue,
88
- reason: StandardResolutionReasons.ERROR,
89
- errorCode: ErrorCode.TYPE_MISMATCH,
90
- errorMessage: `Expected string value for flag "${flagKey}"`
91
- };
92
- }
93
- return {
94
- value: result.value,
95
- reason: mapReason(result.reason),
96
- errorMessage: result.errorMessage
97
- };
98
- }
99
- async resolveNumberEvaluation(flagKey, defaultValue, context) {
100
- const result = await this.client.evaluate(
101
- flagKey,
102
- defaultValue,
103
- context
104
- );
105
- if (result.reason === "error" /* ERROR */) {
106
- return {
107
- value: defaultValue,
108
- reason: StandardResolutionReasons.ERROR,
109
- errorCode: ErrorCode.GENERAL,
110
- errorMessage: result.errorMessage
111
- };
112
- }
113
- if (typeof result.value !== "number") {
114
- return {
115
- value: defaultValue,
116
- reason: StandardResolutionReasons.ERROR,
117
- errorCode: ErrorCode.TYPE_MISMATCH,
118
- errorMessage: `Expected number value for flag "${flagKey}"`
119
- };
120
- }
121
- return {
122
- value: result.value,
123
- reason: mapReason(result.reason),
124
- errorMessage: result.errorMessage
125
- };
126
- }
127
- async resolveObjectEvaluation(flagKey, defaultValue, context) {
128
- const result = await this.client.evaluate(
129
- flagKey,
130
- defaultValue,
131
- context
132
- );
133
- if (result.reason === "error" /* ERROR */) {
134
- return {
135
- value: defaultValue,
136
- reason: StandardResolutionReasons.ERROR,
137
- errorCode: ErrorCode.GENERAL,
138
- errorMessage: result.errorMessage
139
- };
140
- }
141
- return {
142
- value: result.value,
143
- reason: mapReason(result.reason),
144
- errorMessage: result.errorMessage
145
- };
146
- }
147
- };
148
- export {
149
- VercelProvider
150
- };
151
- //# sourceMappingURL=openfeature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/openfeature.ts"],"sourcesContent":["import {\n ErrorCode,\n type EvaluationContext,\n type JsonValue,\n type Provider,\n type ProviderMetadata,\n type ResolutionDetails,\n type ResolutionReason,\n StandardResolutionReasons,\n} from '@openfeature/server-sdk';\nimport { createClientFromConnectionString, Reason } from '.';\nimport type { FlagsClient } from './client';\n\nfunction mapReason(reason: Reason): ResolutionReason {\n switch (reason) {\n case Reason.ERROR:\n return StandardResolutionReasons.ERROR;\n case Reason.PAUSED:\n return StandardResolutionReasons.STATIC;\n case Reason.FALLTHROUGH:\n return StandardResolutionReasons.DEFAULT;\n case Reason.TARGET_MATCH:\n case Reason.RULE_MATCH:\n return StandardResolutionReasons.TARGETING_MATCH;\n default:\n return StandardResolutionReasons.UNKNOWN;\n }\n}\n\nexport class VercelProvider implements Provider {\n readonly metadata: ProviderMetadata = {\n name: 'vercel-nodejs-provider',\n } as const;\n\n readonly runsOn = 'server';\n private client: FlagsClient;\n\n /**\n * Creates a VercelProvider from an existing FlagsClient\n */\n constructor(client: FlagsClient);\n /**\n * Creates a VercelProvider from a connection string\n */\n constructor(connectionString: string);\n constructor(clientOrConnectionString: FlagsClient | string) {\n if (typeof clientOrConnectionString === 'string') {\n this.client = createClientFromConnectionString(clientOrConnectionString);\n } else {\n this.client = clientOrConnectionString;\n }\n }\n\n async initialize(context?: EvaluationContext): Promise<void> {\n await this.client.initialize();\n }\n\n async onClose() {\n await this.client.shutdown();\n }\n\n async resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<boolean>> {\n const result = await this.client.evaluate<boolean>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n if (typeof result.value !== 'boolean') {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.TYPE_MISMATCH,\n errorMessage: `Expected boolean value for flag \"${flagKey}\"`,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n };\n }\n\n async resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<string>> {\n const result = await this.client.evaluate<string>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n if (typeof result.value !== 'string') {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.TYPE_MISMATCH,\n errorMessage: `Expected string value for flag \"${flagKey}\"`,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n errorMessage: result.errorMessage,\n };\n }\n\n async resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<number>> {\n const result = await this.client.evaluate<number>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n if (typeof result.value !== 'number') {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.TYPE_MISMATCH,\n errorMessage: `Expected number value for flag \"${flagKey}\"`,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n errorMessage: result.errorMessage,\n };\n }\n\n async resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n context: EvaluationContext,\n ): Promise<ResolutionDetails<T>> {\n const result = await this.client.evaluate<T>(\n flagKey,\n defaultValue,\n context,\n );\n\n if (result.reason === Reason.ERROR) {\n return {\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n errorCode: ErrorCode.GENERAL,\n errorMessage: result.errorMessage,\n };\n }\n\n return {\n value: result.value,\n reason: mapReason(result.reason),\n errorMessage: result.errorMessage,\n };\n }\n}\n"],"mappings":"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","names":[]}
File without changes