-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathmodels.ts
More file actions
96 lines (78 loc) · 2.66 KB
/
models.ts
File metadata and controls
96 lines (78 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// This file is the entry point for the evaluation module types
// All types from evaluations should be at least imported here and re-exported
// Do not use types directly from generated files
import type {
EvaluationResult as EvaluationContextResult,
FlagResult,
FeatureMetadata,
SegmentMetadata
} from './evaluationResult/evaluationResult.types.js';
import type {
FeatureContext,
EnvironmentContext,
IdentityContext,
SegmentContext
} from './evaluationContext/evaluationContext.types.js';
export * from './evaluationContext/evaluationContext.types.js';
export enum SegmentSource {
API = 'api',
IDENTITY_OVERRIDE = 'identity_override'
}
// Feature types
export interface CustomFeatureMetadata extends FeatureMetadata {
id: number;
}
export interface FeatureContextWithMetadata<T extends FeatureMetadata = FeatureMetadata>
extends FeatureContext {
metadata: T;
[k: string]: unknown;
}
export type FeaturesWithMetadata<T extends FeatureMetadata = FeatureMetadata> = {
[k: string]: FeatureContextWithMetadata<T>;
};
export type FlagResultWithMetadata<T extends FeatureMetadata = FeatureMetadata> = FlagResult & {
metadata: T;
};
export type EvaluationResultFlags<T extends FeatureMetadata = FeatureMetadata> = Record<
string,
FlagResultWithMetadata<T>
>;
// Segment types
export interface CustomSegmentMetadata extends SegmentMetadata {
id?: number;
source?: SegmentSource;
}
export interface SegmentContextWithMetadata<T extends SegmentMetadata = SegmentMetadata>
extends SegmentContext {
metadata: T;
overrides?: FeatureContextWithMetadata<FeatureMetadata>[];
}
export type SegmentsWithMetadata<T extends SegmentMetadata = SegmentMetadata> = {
[k: string]: SegmentContextWithMetadata<T>;
};
export interface SegmentResultWithMetadata {
name: string;
metadata: CustomSegmentMetadata;
}
export type EvaluationResultSegments = SegmentResultWithMetadata[];
// Evaluation context types
export interface GenericEvaluationContext<
T extends FeatureMetadata = FeatureMetadata,
S extends SegmentMetadata = SegmentMetadata
> {
environment: EnvironmentContext;
identity?: IdentityContext | null;
segments?: SegmentsWithMetadata<S>;
features?: FeaturesWithMetadata<T>;
[k: string]: unknown;
}
export type EvaluationContextWithMetadata = GenericEvaluationContext<
CustomFeatureMetadata,
CustomSegmentMetadata
>;
// Evaluation result types
export type EvaluationResult<T extends FeatureMetadata = FeatureMetadata> = {
flags: EvaluationResultFlags<T>;
segments: EvaluationResultSegments;
};
export type EvaluationResultWithMetadata = EvaluationResult<CustomFeatureMetadata>;