flagsmith-nodejs 6.0.0 → 6.1.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/.github/workflows/publish.yml +17 -17
- package/.github/workflows/pull_request.yaml +33 -33
- package/.husky/pre-commit +0 -0
- package/.prettierignore +2 -1
- package/README.md +2 -1
- package/build/cjs/flagsmith-engine/features/util.js +3 -3
- package/build/cjs/flagsmith-engine/index.d.ts +1 -1
- package/build/cjs/flagsmith-engine/index.js +2 -1
- package/build/cjs/flagsmith-engine/segments/models.js +7 -7
- package/build/cjs/flagsmith-engine/utils/hashing/index.js +1 -1
- package/build/cjs/index.d.ts +4 -4
- package/build/cjs/index.js +3 -1
- package/build/cjs/sdk/analytics.d.ts +1 -1
- package/build/cjs/sdk/index.d.ts +5 -5
- package/build/cjs/sdk/index.js +7 -5
- package/build/cjs/sdk/models.d.ts +32 -5
- package/build/cjs/sdk/models.js +25 -0
- package/build/cjs/sdk/types.d.ts +14 -4
- package/build/cjs/sdk/utils.d.ts +4 -4
- package/build/cjs/sdk/utils.js +2 -2
- package/build/esm/flagsmith-engine/features/models.js +1 -1
- package/build/esm/flagsmith-engine/features/util.js +3 -3
- package/build/esm/flagsmith-engine/index.d.ts +1 -1
- package/build/esm/flagsmith-engine/index.js +1 -1
- package/build/esm/flagsmith-engine/segments/models.js +7 -7
- package/build/esm/flagsmith-engine/utils/hashing/index.js +2 -2
- package/build/esm/flagsmith-engine/utils/index.js +1 -1
- package/build/esm/index.d.ts +4 -4
- package/build/esm/index.js +3 -3
- package/build/esm/sdk/analytics.d.ts +1 -1
- package/build/esm/sdk/index.d.ts +5 -5
- package/build/esm/sdk/index.js +6 -5
- package/build/esm/sdk/models.d.ts +32 -5
- package/build/esm/sdk/models.js +25 -0
- package/build/esm/sdk/types.d.ts +14 -4
- package/build/esm/sdk/utils.d.ts +4 -4
- package/build/esm/sdk/utils.js +2 -2
- package/flagsmith-engine/environments/util.ts +2 -2
- package/flagsmith-engine/features/models.ts +1 -1
- package/flagsmith-engine/features/util.ts +14 -14
- package/flagsmith-engine/identities/models.ts +1 -1
- package/flagsmith-engine/index.ts +1 -1
- package/flagsmith-engine/segments/evaluators.ts +2 -3
- package/flagsmith-engine/segments/models.ts +25 -15
- package/flagsmith-engine/utils/hashing/index.ts +3 -3
- package/flagsmith-engine/utils/index.ts +4 -2
- package/index.ts +19 -22
- package/package.json +2 -2
- package/sdk/analytics.ts +7 -5
- package/sdk/index.ts +38 -21
- package/sdk/models.ts +34 -12
- package/sdk/offline_handlers.ts +1 -1
- package/sdk/types.ts +17 -8
- package/sdk/utils.ts +8 -8
- package/tests/engine/e2e/engine.test.ts +2 -4
- package/tests/engine/unit/engine.test.ts +1 -5
- package/tests/engine/unit/features/models.test.ts +2 -2
- package/tests/engine/unit/identities/identities_builders.test.ts +1 -1
- package/tests/engine/unit/segments/segment_evaluators.test.ts +52 -23
- package/tests/engine/unit/segments/segments_model.test.ts +35 -37
- package/tests/engine/unit/utils/utils.test.ts +28 -30
- package/tests/sdk/analytics.test.ts +25 -26
- package/tests/sdk/flagsmith-cache.test.ts +84 -76
- package/tests/sdk/flagsmith-environment-flags.test.ts +93 -93
- package/tests/sdk/flagsmith-identity-flags.test.ts +146 -149
- package/tests/sdk/flagsmith.test.ts +40 -42
- package/tests/sdk/offline-handlers.test.ts +32 -32
- package/tests/sdk/polling.test.ts +0 -1
- package/tests/sdk/utils.ts +26 -18
- package/vitest.config.ts +10 -15
|
@@ -29,26 +29,26 @@ test('test_flagsmith_local_evaluation_key_required', () => {
|
|
|
29
29
|
environmentKey: 'bad.key',
|
|
30
30
|
enableLocalEvaluation: true
|
|
31
31
|
});
|
|
32
|
-
}).toThrow('Using local evaluation requires a server-side environment key')
|
|
32
|
+
}).toThrow('Using local evaluation requires a server-side environment key');
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
test('test_update_environment_sets_environment', async () => {
|
|
36
36
|
const flg = flagsmith({
|
|
37
|
-
environmentKey: 'ser.key'
|
|
37
|
+
environmentKey: 'ser.key'
|
|
38
38
|
});
|
|
39
39
|
const model = environmentModel(JSON.parse(environmentJSON));
|
|
40
40
|
expect(await flg.getEnvironment()).toStrictEqual(model);
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
test('test_set_agent_options', async () => {
|
|
44
|
-
const agent = new Agent({})
|
|
44
|
+
const agent = new Agent({});
|
|
45
45
|
|
|
46
46
|
fetch.mockImplementationOnce((url, options) => {
|
|
47
47
|
//@ts-ignore I give up
|
|
48
48
|
if (options.dispatcher !== agent) {
|
|
49
|
-
throw new Error(
|
|
49
|
+
throw new Error('Agent has not been set on retry fetch');
|
|
50
50
|
}
|
|
51
|
-
return Promise.resolve(new Response(environmentJSON))
|
|
51
|
+
return Promise.resolve(new Response(environmentJSON));
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
const flg = flagsmith({
|
|
@@ -69,7 +69,6 @@ test('test_get_identity_segments', async () => {
|
|
|
69
69
|
expect(segments2.length).toEqual(0);
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
|
|
73
72
|
test('test_get_identity_segments_empty_without_local_eval', async () => {
|
|
74
73
|
const flg = new Flagsmith({
|
|
75
74
|
environmentKey: 'ser.key',
|
|
@@ -82,7 +81,7 @@ test('test_get_identity_segments_empty_without_local_eval', async () => {
|
|
|
82
81
|
test('test_update_environment_uses_req_when_inited', async () => {
|
|
83
82
|
const flg = flagsmith({
|
|
84
83
|
environmentKey: 'ser.key',
|
|
85
|
-
enableLocalEvaluation: true
|
|
84
|
+
enableLocalEvaluation: true
|
|
86
85
|
});
|
|
87
86
|
|
|
88
87
|
delay(400);
|
|
@@ -100,7 +99,7 @@ test('test_isFeatureEnabled_environment', async () => {
|
|
|
100
99
|
const flg = new Flagsmith({
|
|
101
100
|
environmentKey: 'key',
|
|
102
101
|
defaultFlagHandler: defaultFlagHandler,
|
|
103
|
-
enableAnalytics: true
|
|
102
|
+
enableAnalytics: true
|
|
104
103
|
});
|
|
105
104
|
|
|
106
105
|
const flags = await flg.getEnvironmentFlags();
|
|
@@ -110,9 +109,9 @@ test('test_isFeatureEnabled_environment', async () => {
|
|
|
110
109
|
});
|
|
111
110
|
|
|
112
111
|
test('test_fetch_recovers_after_single_API_error', async () => {
|
|
113
|
-
fetch.mockRejectedValueOnce('Error during fetching the API response')
|
|
112
|
+
fetch.mockRejectedValueOnce('Error during fetching the API response');
|
|
114
113
|
const flg = flagsmith({
|
|
115
|
-
environmentKey: 'key'
|
|
114
|
+
environmentKey: 'key'
|
|
116
115
|
});
|
|
117
116
|
|
|
118
117
|
const flags = await flg.getEnvironmentFlags();
|
|
@@ -132,7 +131,7 @@ test.each([
|
|
|
132
131
|
enableLocalEvaluation,
|
|
133
132
|
environmentKey,
|
|
134
133
|
defaultFlagHandler: () => new DefaultFlag('some-default-value', true),
|
|
135
|
-
fetch: badFetch
|
|
134
|
+
fetch: badFetch
|
|
136
135
|
});
|
|
137
136
|
const flags = await flg.getEnvironmentFlags();
|
|
138
137
|
const flag = flags.getFlag('some_feature');
|
|
@@ -144,9 +143,9 @@ test.each([
|
|
|
144
143
|
|
|
145
144
|
test('default flag handler used when timeout occurs', async () => {
|
|
146
145
|
fetch.mockImplementation(async (...args) => {
|
|
147
|
-
const forever = new Promise(() => {})
|
|
148
|
-
await forever
|
|
149
|
-
throw new Error('waited forever')
|
|
146
|
+
const forever = new Promise(() => {});
|
|
147
|
+
await forever;
|
|
148
|
+
throw new Error('waited forever');
|
|
150
149
|
});
|
|
151
150
|
|
|
152
151
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
@@ -156,7 +155,7 @@ test('default flag handler used when timeout occurs', async () => {
|
|
|
156
155
|
const flg = flagsmith({
|
|
157
156
|
environmentKey: 'key',
|
|
158
157
|
defaultFlagHandler: defaultFlagHandler,
|
|
159
|
-
requestTimeoutSeconds: 0.0001
|
|
158
|
+
requestTimeoutSeconds: 0.0001
|
|
160
159
|
});
|
|
161
160
|
|
|
162
161
|
const flags = await flg.getEnvironmentFlags();
|
|
@@ -164,35 +163,32 @@ test('default flag handler used when timeout occurs', async () => {
|
|
|
164
163
|
expect(flag.isDefault).toBe(true);
|
|
165
164
|
expect(flag.enabled).toBe(defaultFlag.enabled);
|
|
166
165
|
expect(flag.value).toBe(defaultFlag.value);
|
|
167
|
-
})
|
|
166
|
+
});
|
|
168
167
|
|
|
169
168
|
test('request timeout uses default if not provided', async () => {
|
|
170
|
-
|
|
171
169
|
const flg = new Flagsmith({
|
|
172
|
-
environmentKey: 'key'
|
|
170
|
+
environmentKey: 'key'
|
|
173
171
|
});
|
|
174
172
|
|
|
175
173
|
expect(flg.requestTimeoutMs).toBe(10000);
|
|
176
|
-
})
|
|
174
|
+
});
|
|
177
175
|
|
|
178
176
|
test('test_throws_when_no_identityFlags_returned_due_to_error', async () => {
|
|
179
177
|
const flg = flagsmith({
|
|
180
178
|
environmentKey: 'key',
|
|
181
|
-
fetch: badFetch
|
|
179
|
+
fetch: badFetch
|
|
182
180
|
});
|
|
183
181
|
|
|
184
|
-
await expect(async () => await flg.getIdentityFlags('identifier'))
|
|
185
|
-
.rejects
|
|
186
|
-
.toThrow();
|
|
182
|
+
await expect(async () => await flg.getIdentityFlags('identifier')).rejects.toThrow();
|
|
187
183
|
});
|
|
188
184
|
|
|
189
185
|
test('test onEnvironmentChange is called when provided', async () => {
|
|
190
|
-
const callback = vi.fn()
|
|
186
|
+
const callback = vi.fn();
|
|
191
187
|
|
|
192
188
|
const flg = new Flagsmith({
|
|
193
189
|
environmentKey: 'ser.key',
|
|
194
190
|
enableLocalEvaluation: true,
|
|
195
|
-
onEnvironmentChange: callback
|
|
191
|
+
onEnvironmentChange: callback
|
|
196
192
|
});
|
|
197
193
|
|
|
198
194
|
fetch.mockRejectedValueOnce(new Error('API error'));
|
|
@@ -209,7 +205,7 @@ test('test onEnvironmentChange is called after error', async () => {
|
|
|
209
205
|
environmentKey: 'ser.key',
|
|
210
206
|
enableLocalEvaluation: true,
|
|
211
207
|
onEnvironmentChange: callback,
|
|
212
|
-
fetch: badFetch
|
|
208
|
+
fetch: badFetch
|
|
213
209
|
});
|
|
214
210
|
await flg.updateEnvironment();
|
|
215
211
|
expect(callback).toHaveBeenCalled();
|
|
@@ -217,15 +213,17 @@ test('test onEnvironmentChange is called after error', async () => {
|
|
|
217
213
|
|
|
218
214
|
test('getIdentityFlags throws error if identifier is empty string', async () => {
|
|
219
215
|
const flg = flagsmith({
|
|
220
|
-
environmentKey: 'key'
|
|
216
|
+
environmentKey: 'key'
|
|
221
217
|
});
|
|
222
218
|
|
|
223
|
-
await expect(flg.getIdentityFlags('')).rejects.toThrow(
|
|
224
|
-
|
|
219
|
+
await expect(flg.getIdentityFlags('')).rejects.toThrow(
|
|
220
|
+
'`identifier` argument is missing or invalid.'
|
|
221
|
+
);
|
|
222
|
+
});
|
|
225
223
|
|
|
226
224
|
test('getIdentitySegments throws error if identifier is empty string', async () => {
|
|
227
225
|
const flg = flagsmith({
|
|
228
|
-
environmentKey: 'key'
|
|
226
|
+
environmentKey: 'key'
|
|
229
227
|
});
|
|
230
228
|
|
|
231
229
|
await expect(flg.getIdentitySegments('')).rejects.toThrow(
|
|
@@ -254,15 +252,13 @@ test('offline_mode', async () => {
|
|
|
254
252
|
expect(flag.enabled).toBe(true);
|
|
255
253
|
expect(flag.value).toBe('offline-value');
|
|
256
254
|
|
|
257
|
-
|
|
258
|
-
const identityFlags: Flags = await flg.getIdentityFlags("identity");
|
|
255
|
+
const identityFlags: Flags = await flg.getIdentityFlags('identity');
|
|
259
256
|
flag = identityFlags.getFlag('some_feature');
|
|
260
257
|
expect(flag.isDefault).toBe(false);
|
|
261
258
|
expect(flag.enabled).toBe(true);
|
|
262
259
|
expect(flag.value).toBe('offline-value');
|
|
263
260
|
});
|
|
264
261
|
|
|
265
|
-
|
|
266
262
|
test('test_flagsmith_uses_offline_handler_if_set_and_no_api_response', async () => {
|
|
267
263
|
// Given
|
|
268
264
|
const environment: EnvironmentModel = environmentModel(JSON.parse(offlineEnvironmentJSON));
|
|
@@ -281,14 +277,13 @@ test('test_flagsmith_uses_offline_handler_if_set_and_no_api_response', async ()
|
|
|
281
277
|
vi.spyOn(flg, 'getEnvironmentFlags');
|
|
282
278
|
vi.spyOn(flg, 'getIdentityFlags');
|
|
283
279
|
|
|
284
|
-
|
|
285
280
|
flg.environmentFlagsUrl = 'http://some.flagsmith.com/api/v1/environment-flags';
|
|
286
281
|
flg.identitiesUrl = 'http://some.flagsmith.com/api/v1/identities';
|
|
287
282
|
|
|
288
283
|
// Mock a 500 Internal Server Error response
|
|
289
284
|
const errorResponse = new Response(null, {
|
|
290
285
|
status: 500,
|
|
291
|
-
statusText: 'Internal Server Error'
|
|
286
|
+
statusText: 'Internal Server Error'
|
|
292
287
|
});
|
|
293
288
|
|
|
294
289
|
fetch.mockResolvedValue(errorResponse);
|
|
@@ -318,25 +313,28 @@ test('cannot use offline mode without offline handler', () => {
|
|
|
318
313
|
|
|
319
314
|
test('cannot use both default handler and offline handler', () => {
|
|
320
315
|
// When and Then
|
|
321
|
-
expect(() =>
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
316
|
+
expect(() =>
|
|
317
|
+
flagsmith({
|
|
318
|
+
offlineHandler: new BaseOfflineHandler(),
|
|
319
|
+
defaultFlagHandler: () => new DefaultFlag('foo', true)
|
|
320
|
+
})
|
|
321
|
+
).toThrowError('ValueError: Cannot use both defaultFlagHandler and offlineHandler.');
|
|
325
322
|
});
|
|
326
323
|
|
|
327
324
|
test('cannot create Flagsmith client in remote evaluation without API key', () => {
|
|
328
325
|
// When and Then
|
|
329
|
-
expect(() => new Flagsmith({ environmentKey: '' })).toThrowError(
|
|
326
|
+
expect(() => new Flagsmith({ environmentKey: '' })).toThrowError(
|
|
327
|
+
'ValueError: environmentKey is required.'
|
|
328
|
+
);
|
|
330
329
|
});
|
|
331
330
|
|
|
332
|
-
|
|
333
331
|
test('test_localEvaluation_true__identity_overrides_evaluated', async () => {
|
|
334
332
|
const flg = flagsmith({
|
|
335
333
|
environmentKey: 'ser.key',
|
|
336
334
|
enableLocalEvaluation: true
|
|
337
335
|
});
|
|
338
336
|
|
|
339
|
-
await flg.updateEnvironment()
|
|
337
|
+
await flg.updateEnvironment();
|
|
340
338
|
const flags = await flg.getIdentityFlags('overridden-id');
|
|
341
339
|
expect(flags.getFeatureValue('some_feature')).toEqual('some-overridden-value');
|
|
342
340
|
});
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import { LocalFileHandler } from '../../sdk/offline_handlers.js';
|
|
3
|
-
import { EnvironmentModel } from '../../flagsmith-engine/index.js';
|
|
4
|
-
|
|
5
|
-
import * as offlineEnvironment from
|
|
6
|
-
|
|
7
|
-
vi.mock('fs')
|
|
8
|
-
|
|
9
|
-
const offlineEnvironmentString = JSON.stringify(offlineEnvironment)
|
|
10
|
-
|
|
11
|
-
test('local file handler', () => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
});
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { LocalFileHandler } from '../../sdk/offline_handlers.js';
|
|
3
|
+
import { EnvironmentModel } from '../../flagsmith-engine/index.js';
|
|
4
|
+
|
|
5
|
+
import * as offlineEnvironment from './data/offline-environment.json';
|
|
6
|
+
|
|
7
|
+
vi.mock('fs');
|
|
8
|
+
|
|
9
|
+
const offlineEnvironmentString = JSON.stringify(offlineEnvironment);
|
|
10
|
+
|
|
11
|
+
test('local file handler', () => {
|
|
12
|
+
const environmentDocumentFilePath = '/some/path/environment.json';
|
|
13
|
+
|
|
14
|
+
// Mock the fs.readFileSync function to return environmentJson
|
|
15
|
+
|
|
16
|
+
const readFileSyncMock = vi.spyOn(fs, 'readFileSync');
|
|
17
|
+
readFileSyncMock.mockImplementation(() => offlineEnvironmentString);
|
|
18
|
+
|
|
19
|
+
// Given
|
|
20
|
+
const localFileHandler = new LocalFileHandler(environmentDocumentFilePath);
|
|
21
|
+
|
|
22
|
+
// When
|
|
23
|
+
const environmentModel = localFileHandler.getEnvironment();
|
|
24
|
+
|
|
25
|
+
// Then
|
|
26
|
+
expect(environmentModel).toBeInstanceOf(EnvironmentModel);
|
|
27
|
+
expect(environmentModel.apiKey).toBe('B62qaMZNwfiqT76p38ggrQ');
|
|
28
|
+
expect(readFileSyncMock).toHaveBeenCalledWith(environmentDocumentFilePath, 'utf8');
|
|
29
|
+
|
|
30
|
+
// Restore the original implementation of fs.readFileSync
|
|
31
|
+
readFileSyncMock.mockRestore();
|
|
32
|
+
});
|
|
@@ -39,7 +39,6 @@ test('test_polling_manager_handles_double_start', async () => {
|
|
|
39
39
|
expect(flagsmith.updateEnvironment).toHaveBeenCalled();
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
|
|
43
42
|
test('test_polling_manager_calls_update_environment_on_each_refresh', async () => {
|
|
44
43
|
const flagsmith = new Flagsmith({
|
|
45
44
|
environmentKey: 'key'
|
package/tests/sdk/utils.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from 'fs';
|
|
2
2
|
import { buildEnvironmentModel } from '../../flagsmith-engine/environments/util.js';
|
|
3
3
|
import { AnalyticsProcessor } from '../../sdk/analytics.js';
|
|
4
|
-
import Flagsmith, {FlagsmithConfig} from '../../sdk/index.js';
|
|
4
|
+
import Flagsmith, { FlagsmithConfig } from '../../sdk/index.js';
|
|
5
5
|
import { Fetch, FlagsmithCache } from '../../sdk/types.js';
|
|
6
6
|
import { Flags } from '../../sdk/models.js';
|
|
7
7
|
|
|
@@ -21,31 +21,36 @@ export class TestCache implements FlagsmithCache {
|
|
|
21
21
|
|
|
22
22
|
export const fetch = vi.fn((url: string, options?: RequestInit) => {
|
|
23
23
|
const headers = options?.headers as Record<string, string>;
|
|
24
|
-
if (!headers) throw new Error('missing request headers')
|
|
24
|
+
if (!headers) throw new Error('missing request headers');
|
|
25
25
|
const env = headers['X-Environment-Key'];
|
|
26
|
-
if (!env)
|
|
26
|
+
if (!env)
|
|
27
|
+
return Promise.resolve(new Response('missing x-environment-key header', { status: 404 }));
|
|
27
28
|
if (url.includes('/environment-document')) {
|
|
28
29
|
if (env.startsWith('ser.')) {
|
|
29
|
-
return Promise.resolve(new Response(environmentJSON, { status: 200 }))
|
|
30
|
+
return Promise.resolve(new Response(environmentJSON, { status: 200 }));
|
|
30
31
|
}
|
|
31
|
-
return Promise.resolve(
|
|
32
|
+
return Promise.resolve(
|
|
33
|
+
new Response('environment-document called without a server-side key', { status: 401 })
|
|
34
|
+
);
|
|
32
35
|
}
|
|
33
|
-
if (url.includes(
|
|
34
|
-
return Promise.resolve(new Response(flagsJSON, { status: 200 }))
|
|
36
|
+
if (url.includes('/flags')) {
|
|
37
|
+
return Promise.resolve(new Response(flagsJSON, { status: 200 }));
|
|
35
38
|
}
|
|
36
|
-
if (url.includes(
|
|
37
|
-
return Promise.resolve(new Response(identitiesJSON, { status: 200 }))
|
|
39
|
+
if (url.includes('/identities')) {
|
|
40
|
+
return Promise.resolve(new Response(identitiesJSON, { status: 200 }));
|
|
38
41
|
}
|
|
39
|
-
return Promise.resolve(new Response('unknown url ' + url, { status: 404 }))
|
|
42
|
+
return Promise.resolve(new Response('unknown url ' + url, { status: 404 }));
|
|
40
43
|
});
|
|
41
44
|
|
|
42
|
-
export const badFetch: Fetch = () => {
|
|
45
|
+
export const badFetch: Fetch = () => {
|
|
46
|
+
throw new Error('fetch failed');
|
|
47
|
+
};
|
|
43
48
|
|
|
44
49
|
export function analyticsProcessor() {
|
|
45
50
|
return new AnalyticsProcessor({
|
|
46
51
|
environmentKey: 'test-key',
|
|
47
52
|
analyticsUrl: 'http://testUrl/analytics/flags/',
|
|
48
|
-
fetch: (url, options) => fetch(url.toString(), options)
|
|
53
|
+
fetch: (url, options) => fetch(url.toString(), options)
|
|
49
54
|
});
|
|
50
55
|
}
|
|
51
56
|
|
|
@@ -59,22 +64,25 @@ export function flagsmith(params: FlagsmithConfig = {}) {
|
|
|
59
64
|
environmentRefreshIntervalSeconds: 0,
|
|
60
65
|
requestRetryDelayMilliseconds: 0,
|
|
61
66
|
fetch: (url, options) => fetch(url.toString(), options),
|
|
62
|
-
...params
|
|
67
|
+
...params
|
|
63
68
|
});
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
export const environmentJSON = readFileSync(DATA_DIR + 'environment.json', 'utf-8');
|
|
67
72
|
|
|
68
|
-
export const offlineEnvironmentJSON = readFileSync(DATA_DIR + 'offline-environment.json', 'utf-8')
|
|
73
|
+
export const offlineEnvironmentJSON = readFileSync(DATA_DIR + 'offline-environment.json', 'utf-8');
|
|
69
74
|
|
|
70
75
|
export function environmentModel(environmentJSON: any) {
|
|
71
76
|
return buildEnvironmentModel(environmentJSON);
|
|
72
77
|
}
|
|
73
78
|
|
|
74
|
-
export const flagsJSON = readFileSync(DATA_DIR + 'flags.json', 'utf-8')
|
|
79
|
+
export const flagsJSON = readFileSync(DATA_DIR + 'flags.json', 'utf-8');
|
|
75
80
|
|
|
76
|
-
export const identitiesJSON = readFileSync(DATA_DIR + 'identities.json', 'utf-8')
|
|
81
|
+
export const identitiesJSON = readFileSync(DATA_DIR + 'identities.json', 'utf-8');
|
|
77
82
|
|
|
78
|
-
export const transientIdentityJSON = readFileSync(DATA_DIR + 'transient-identity.json', 'utf-8')
|
|
83
|
+
export const transientIdentityJSON = readFileSync(DATA_DIR + 'transient-identity.json', 'utf-8');
|
|
79
84
|
|
|
80
|
-
export const identityWithTransientTraitsJSON = readFileSync(
|
|
85
|
+
export const identityWithTransientTraitsJSON = readFileSync(
|
|
86
|
+
DATA_DIR + 'identity-with-transient-traits.json',
|
|
87
|
+
'utf-8'
|
|
88
|
+
);
|
package/vitest.config.ts
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import { defineConfig } from 'vitest/config'
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
2
|
|
|
3
3
|
export default defineConfig({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
include: [
|
|
13
|
-
'sdk/**',
|
|
14
|
-
'flagsmith-engine/**',
|
|
15
|
-
]
|
|
4
|
+
test: {
|
|
5
|
+
globals: true,
|
|
6
|
+
restoreMocks: true,
|
|
7
|
+
coverage: {
|
|
8
|
+
reporter: ['text'],
|
|
9
|
+
exclude: ['build/**'],
|
|
10
|
+
include: ['sdk/**', 'flagsmith-engine/**']
|
|
11
|
+
}
|
|
16
12
|
}
|
|
17
|
-
|
|
18
|
-
})
|
|
13
|
+
});
|