Skip to content

Commit 9bebed5

Browse files
talissoncostaclaude
andcommitted
fix: unwrap TraitConfig values in local evaluation before segment matching
TraitConfig objects ({ value, transient }) were passed directly to the evaluation engine without extracting the actual value. This caused segment condition comparisons to fail (e.g. 'cedars' == { value: 'cedars', transient: true } → false), so segment overrides were never applied. The remote evaluation path already handled this correctly via isTraitConfig() in generateIdentitiesData. This fix applies the same unwrapping in getIdentityFlagsFromDocument and getIdentitySegments. Fixes #238 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a357194 commit 9bebed5

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

sdk/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ import { FlagsmithAPIError, FlagsmithClientError } from './errors.js';
88

99
import { DefaultFlag, Flags } from './models.js';
1010
import { EnvironmentDataPollingManager } from './polling_manager.js';
11-
import { Deferred, generateIdentitiesData, getUserAgent, retryFetch } from './utils.js';
11+
import {
12+
Deferred,
13+
generateIdentitiesData,
14+
getUserAgent,
15+
isTraitConfig,
16+
retryFetch
17+
} from './utils.js';
1218
import {
1319
SegmentModel,
1420
EnvironmentModel,
@@ -275,7 +281,7 @@ export class Flagsmith {
275281
identifier,
276282
Object.keys(traits || {}).map(key => ({
277283
key,
278-
value: traits?.[key]
284+
value: isTraitConfig(traits?.[key]) ? traits![key].value : traits?.[key]
279285
}))
280286
);
281287

@@ -474,7 +480,7 @@ export class Flagsmith {
474480
identifier,
475481
Object.keys(traits).map(key => ({
476482
key,
477-
value: traits[key]
483+
value: isTraitConfig(traits[key]) ? traits[key].value : traits[key]
478484
}))
479485
);
480486

0 commit comments

Comments
 (0)