Skip to content

Commit 7afadbc

Browse files
authored
Merge pull request #162 from Flagsmith/feat/v4
feat!: Custom fetch support, remove node-fetch, ESM+CJS dual build, migrate to vitest, TS fixes, test improvements
2 parents 2b5df9f + 6c348e8 commit 7afadbc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+4243
-6524
lines changed

.github/workflows/publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ jobs:
1414
- name: Cloning repo
1515
uses: actions/checkout@v3
1616

17-
- uses: actions/setup-node@v3
17+
- uses: actions/setup-node@v4
1818
with:
19-
node-version: '16.x'
19+
node-version: '18.x'
2020
registry-url: 'https://registry.npmjs.org'
2121

2222
- run: npm ci

.github/workflows/pull_request.yaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ jobs:
2323
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
2424
git submodule sync --recursive
2525
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
26-
- uses: actions/setup-node@v1
26+
- uses: actions/setup-node@v4
2727
with:
28-
node-version: "15.x"
28+
node-version: "18.x"
2929
- name: cache node modules
3030
uses: actions/cache@v1
3131
with:
@@ -34,8 +34,7 @@ jobs:
3434
restore-keys: |
3535
npm-${{ hashFiles('package-lock.json') }}
3636
npm-
37-
- run: npm i -g npm@7.0.2
38-
- run: npm install
37+
- run: npm ci
3938
- run: npm test
4039
env:
4140
CI: true

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88

99
node_modules/
1010
build/
11+
coverage/
1112

1213
.tool-versions

flagsmith-engine/environments/models.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { FeatureStateModel } from '../features/models';
2-
import { IdentityModel } from '../identities/models';
3-
import { ProjectModel } from '../projects/models';
1+
import { FeatureStateModel } from '../features/models.js';
2+
import { IdentityModel } from '../identities/models.js';
3+
import { ProjectModel } from '../projects/models.js';
44

55
export class EnvironmentAPIKeyModel {
66
id: number;

flagsmith-engine/environments/util.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { buildFeatureStateModel } from '../features/util';
2-
import { buildIdentityModel } from '../identities/util';
3-
import { buildProjectModel } from '../projects/util';
4-
import { EnvironmentAPIKeyModel, EnvironmentModel } from './models';
1+
import { buildFeatureStateModel } from '../features/util.js';
2+
import { buildIdentityModel } from '../identities/util.js';
3+
import { buildProjectModel } from '../projects/util.js';
4+
import { EnvironmentAPIKeyModel, EnvironmentModel } from './models.js';
55

66
export function buildEnvironmentModel(environmentJSON: any) {
77
const project = buildProjectModel(environmentJSON.project);

flagsmith-engine/features/models.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { v4 as uuidv4 } from 'uuid';
2-
import { getHashedPercentateForObjIds } from '../utils/hashing';
2+
import { getHashedPercentateForObjIds } from '../utils/hashing/index.js';
33

44
export class FeatureModel {
55
id: number;

flagsmith-engine/features/util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
FeatureStateModel,
55
MultivariateFeatureOptionModel,
66
MultivariateFeatureStateValueModel
7-
} from './models';
7+
} from './models.js';
88

99
export function buildFeatureModel(featuresModelJSON: any): FeatureModel {
1010
return new FeatureModel(featuresModelJSON.id, featuresModelJSON.name, featuresModelJSON.type);

flagsmith-engine/identities/models.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { FeatureStateModel } from '../features/models';
2-
import { IdentityFeaturesList } from '../utils/collections';
3-
import { TraitModel } from './traits/models';
1+
import { IdentityFeaturesList } from '../utils/collections.js';
2+
import { TraitModel } from './traits/models.js';
43

54
const { v4: uuidv4 } = require('uuid');
65

flagsmith-engine/identities/util.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { buildFeatureStateModel } from '../features/util';
2-
import { IdentityFeaturesList } from '../utils/collections';
3-
import { IdentityModel } from './models';
4-
import { TraitModel } from './traits/models';
1+
import { buildFeatureStateModel } from '../features/util.js';
2+
import { IdentityFeaturesList } from '../utils/collections.js';
3+
import { IdentityModel } from './models.js';
4+
import { TraitModel } from './traits/models.js';
55

66
export function buildTraitModel(traitJSON: any): TraitModel {
77
return new TraitModel(traitJSON.trait_key, traitJSON.trait_value);

flagsmith-engine/index.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { EnvironmentModel } from './environments/models';
2-
import { FeatureStateModel } from './features/models';
3-
import { IdentityModel } from './identities/models';
4-
import { TraitModel } from './identities/traits/models';
5-
import { getIdentitySegments } from './segments/evaluators';
6-
import { SegmentModel } from './segments/models';
7-
import { FeatureStateNotFound } from './utils/errors';
1+
import { EnvironmentModel } from './environments/models.js';
2+
import { FeatureStateModel } from './features/models.js';
3+
import { IdentityModel } from './identities/models.js';
4+
import { TraitModel } from './identities/traits/models.js';
5+
import { getIdentitySegments } from './segments/evaluators.js';
6+
import { SegmentModel } from './segments/models.js';
7+
import { FeatureStateNotFound } from './utils/errors.js';
88

9-
export { EnvironmentModel } from './environments/models';
10-
export { FeatureStateModel } from './features/models';
11-
export { IdentityModel } from './identities/models';
12-
export { TraitModel } from './identities/traits/models';
13-
export { SegmentModel } from './segments/models';
14-
export { OrganisationModel } from './organisations/models';
9+
export { EnvironmentModel } from './environments/models.js';
10+
export { FeatureStateModel } from './features/models.js';
11+
export { IdentityModel } from './identities/models.js';
12+
export { TraitModel } from './identities/traits/models.js';
13+
export { SegmentModel } from './segments/models.js';
14+
export { OrganisationModel } from './organisations/models.js';
1515

1616
function getIdentityFeatureStatesDict(
1717
environment: EnvironmentModel,

flagsmith-engine/organisations/util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { OrganisationModel } from './models';
1+
import { OrganisationModel } from './models.js';
22

33
export function buildOrganizationModel(organizationJSON: any): OrganisationModel {
44
return new OrganisationModel(

flagsmith-engine/projects/models.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { OrganisationModel } from '../organisations/models';
2-
import { SegmentModel } from '../segments/models';
1+
import { OrganisationModel } from '../organisations/models.js';
2+
import { SegmentModel } from '../segments/models.js';
33

44
export class ProjectModel {
55
id: number;

flagsmith-engine/projects/util.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { buildOrganizationModel } from '../organisations/util';
2-
import { SegmentModel } from '../segments/models';
3-
import { buildSegmentModel } from '../segments/util';
4-
import { ProjectModel } from './models';
1+
import { buildOrganizationModel } from '../organisations/util.js';
2+
import { SegmentModel } from '../segments/models.js';
3+
import { buildSegmentModel } from '../segments/util.js';
4+
import { ProjectModel } from './models.js';
55

66
export function buildProjectModel(projectJSON: any): ProjectModel {
77
const segments: SegmentModel[] = projectJSON['segments']

flagsmith-engine/segments/evaluators.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { EnvironmentModel } from '../environments/models';
2-
import { IdentityModel } from '../identities/models';
3-
import { TraitModel } from '../identities/traits/models';
4-
import { getHashedPercentateForObjIds } from '../utils/hashing';
5-
import { PERCENTAGE_SPLIT, IS_SET, IS_NOT_SET } from './constants';
6-
import { SegmentConditionModel, SegmentModel, SegmentRuleModel } from './models';
1+
import { EnvironmentModel } from '../environments/models.js';
2+
import { IdentityModel } from '../identities/models.js';
3+
import { TraitModel } from '../identities/traits/models.js';
4+
import { getHashedPercentateForObjIds } from '../utils/hashing/index.js';
5+
import { PERCENTAGE_SPLIT, IS_SET, IS_NOT_SET } from './constants.js';
6+
import { SegmentConditionModel, SegmentModel, SegmentRuleModel } from './models.js';
77

88
export function getIdentitySegments(
99
environment: EnvironmentModel,

flagsmith-engine/segments/models.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import semver from 'semver';
22

3-
import { FeatureStateModel } from '../features/models';
4-
import { getCastingFunction as getCastingFunction } from '../utils';
3+
import { FeatureStateModel } from '../features/models.js';
4+
import { getCastingFunction as getCastingFunction } from '../utils/index.js';
55
import {
66
ALL_RULE,
77
ANY_RULE,
@@ -11,8 +11,8 @@ import {
1111
MODULO,
1212
IN,
1313
CONDITION_OPERATORS
14-
} from './constants';
15-
import { isSemver } from './util';
14+
} from './constants.js';
15+
import { isSemver } from './util.js';
1616

1717
export const all = (iterable: Array<any>) => iterable.filter(e => !!e).length === iterable.length;
1818
export const any = (iterable: Array<any>) => iterable.filter(e => !!e).length > 0;

flagsmith-engine/segments/util.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { buildFeatureStateModel } from '../features/util';
2-
import { SegmentConditionModel, SegmentModel, SegmentRuleModel } from './models';
1+
import { buildFeatureStateModel } from '../features/util.js';
2+
import { SegmentConditionModel, SegmentModel, SegmentRuleModel } from './models.js';
33

44
export function buildSegmentConditionModel(segmentConditionJSON: any): SegmentConditionModel {
55
return new SegmentConditionModel(
@@ -34,4 +34,4 @@ export function isSemver(value: any) {
3434

3535
export function removeSemverSuffix(value: string) {
3636
return value.replace(':semver', '');
37-
}
37+
}

flagsmith-engine/utils/collections.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import { FeatureStateModel } from '../features/models';
1+
import { FeatureStateModel } from '../features/models.js';
22

33
export class IdentityFeaturesList extends Array<FeatureStateModel> {}

flagsmith-engine/utils/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { removeSemverSuffix } from "../segments/util";
1+
import { removeSemverSuffix } from "../segments/util.js";
22

33
export function getCastingFunction(traitType: 'boolean' | 'string' | 'number' | 'semver' | any): CallableFunction {
44
switch (traitType) {

index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Flagsmith from "./sdk";
1+
import Flagsmith from "./sdk/index.js";
22

33
export {
44
AnalyticsProcessor,
@@ -9,11 +9,11 @@ export {
99
DefaultFlag,
1010
Flags,
1111
default
12-
} from './sdk';
12+
} from './sdk/index.js';
1313

1414
export {
1515
FlagsmithConfig
16-
} from './sdk/types'
16+
} from './sdk/types.js'
1717

1818
export {
1919
EnvironmentModel,
@@ -22,6 +22,6 @@ export {
2222
TraitModel,
2323
SegmentModel,
2424
OrganisationModel
25-
} from './flagsmith-engine';
25+
} from './flagsmith-engine/index.js';
2626

2727
module.exports = Flagsmith;

jest.config.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)