flagsmith-nodejs 6.0.1 → 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.
Files changed (70) hide show
  1. package/.github/workflows/publish.yml +17 -17
  2. package/.github/workflows/pull_request.yaml +33 -33
  3. package/.husky/pre-commit +0 -0
  4. package/.prettierignore +2 -1
  5. package/README.md +2 -1
  6. package/build/cjs/flagsmith-engine/features/util.js +3 -3
  7. package/build/cjs/flagsmith-engine/index.d.ts +1 -1
  8. package/build/cjs/flagsmith-engine/index.js +2 -1
  9. package/build/cjs/flagsmith-engine/segments/models.js +7 -7
  10. package/build/cjs/flagsmith-engine/utils/hashing/index.js +1 -1
  11. package/build/cjs/index.d.ts +4 -4
  12. package/build/cjs/index.js +3 -1
  13. package/build/cjs/sdk/analytics.d.ts +1 -1
  14. package/build/cjs/sdk/index.d.ts +5 -5
  15. package/build/cjs/sdk/index.js +7 -5
  16. package/build/cjs/sdk/models.d.ts +25 -0
  17. package/build/cjs/sdk/models.js +25 -0
  18. package/build/cjs/sdk/types.d.ts +14 -4
  19. package/build/cjs/sdk/utils.d.ts +4 -4
  20. package/build/cjs/sdk/utils.js +2 -2
  21. package/build/esm/flagsmith-engine/features/models.js +1 -1
  22. package/build/esm/flagsmith-engine/features/util.js +3 -3
  23. package/build/esm/flagsmith-engine/index.d.ts +1 -1
  24. package/build/esm/flagsmith-engine/index.js +1 -1
  25. package/build/esm/flagsmith-engine/segments/models.js +7 -7
  26. package/build/esm/flagsmith-engine/utils/hashing/index.js +2 -2
  27. package/build/esm/flagsmith-engine/utils/index.js +1 -1
  28. package/build/esm/index.d.ts +4 -4
  29. package/build/esm/index.js +3 -3
  30. package/build/esm/sdk/analytics.d.ts +1 -1
  31. package/build/esm/sdk/index.d.ts +5 -5
  32. package/build/esm/sdk/index.js +6 -5
  33. package/build/esm/sdk/models.d.ts +25 -0
  34. package/build/esm/sdk/models.js +25 -0
  35. package/build/esm/sdk/types.d.ts +14 -4
  36. package/build/esm/sdk/utils.d.ts +4 -4
  37. package/build/esm/sdk/utils.js +2 -2
  38. package/flagsmith-engine/environments/util.ts +2 -2
  39. package/flagsmith-engine/features/models.ts +1 -1
  40. package/flagsmith-engine/features/util.ts +14 -14
  41. package/flagsmith-engine/identities/models.ts +1 -1
  42. package/flagsmith-engine/index.ts +1 -1
  43. package/flagsmith-engine/segments/evaluators.ts +2 -3
  44. package/flagsmith-engine/segments/models.ts +25 -15
  45. package/flagsmith-engine/utils/hashing/index.ts +3 -3
  46. package/flagsmith-engine/utils/index.ts +4 -2
  47. package/index.ts +19 -22
  48. package/package.json +1 -1
  49. package/sdk/analytics.ts +7 -5
  50. package/sdk/index.ts +38 -21
  51. package/sdk/models.ts +25 -0
  52. package/sdk/offline_handlers.ts +1 -1
  53. package/sdk/types.ts +17 -8
  54. package/sdk/utils.ts +8 -8
  55. package/tests/engine/e2e/engine.test.ts +2 -4
  56. package/tests/engine/unit/engine.test.ts +1 -5
  57. package/tests/engine/unit/features/models.test.ts +2 -2
  58. package/tests/engine/unit/identities/identities_builders.test.ts +1 -1
  59. package/tests/engine/unit/segments/segment_evaluators.test.ts +52 -23
  60. package/tests/engine/unit/segments/segments_model.test.ts +35 -37
  61. package/tests/engine/unit/utils/utils.test.ts +28 -30
  62. package/tests/sdk/analytics.test.ts +25 -26
  63. package/tests/sdk/flagsmith-cache.test.ts +84 -76
  64. package/tests/sdk/flagsmith-environment-flags.test.ts +93 -93
  65. package/tests/sdk/flagsmith-identity-flags.test.ts +146 -149
  66. package/tests/sdk/flagsmith.test.ts +40 -42
  67. package/tests/sdk/offline-handlers.test.ts +32 -32
  68. package/tests/sdk/polling.test.ts +0 -1
  69. package/tests/sdk/utils.ts +26 -18
  70. package/vitest.config.ts +10 -15
@@ -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 "./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
- });
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'
@@ -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) return Promise.resolve(new Response('missing x-environment-key header', { status: 404 }));
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(new Response('environment-document called without a server-side key', { status: 401 }))
32
+ return Promise.resolve(
33
+ new Response('environment-document called without a server-side key', { status: 401 })
34
+ );
32
35
  }
33
- if (url.includes("/flags")) {
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("/identities")) {
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 = () => { throw new Error('fetch failed')}
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(DATA_DIR + 'identity-with-transient-traits.json', 'utf-8')
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
- test: {
5
- globals: true,
6
- restoreMocks: true,
7
- coverage: {
8
- reporter: ['text'],
9
- exclude: [
10
- 'build/**'
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
+ });