Skip to content

Commit b738e5d

Browse files
committed
Convert split to plain object
1 parent 3b29bef commit b738e5d

File tree

8 files changed

+30
-42
lines changed

8 files changed

+30
-42
lines changed

src/abConfiguration.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { getSplitVariants } from './split';
12
import Visitor from './visitor';
23

34
type Options = {
@@ -8,7 +9,7 @@ type Options = {
89

910
export function getABVariants({ splitName, trueVariant, visitor }: Options) {
1011
const split = visitor.config.splitRegistry.getSplit(splitName);
11-
const splitVariants = split?.getVariants();
12+
const splitVariants = split && getSplitVariants(split);
1213

1314
if (splitVariants && splitVariants.length > 2) {
1415
visitor.logError(`A/B for ${splitName} configures split with more than 2 variants`);

src/calculateVariant.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { md5 } from 'js-md5';
22
import Visitor from './visitor';
3-
import Split from './split';
3+
import { getSplitVariants, type Split } from './split';
44

55
function getSplit(visitor: Visitor, splitName: string): Split {
66
const split = visitor.config.splitRegistry.getSplit(splitName);
@@ -29,7 +29,7 @@ export function calculateVariant(visitor: Visitor, splitName: string): string |
2929
const assignmentBucket = getAssignmentBucket(visitor, splitName);
3030
const split = getSplit(visitor, splitName);
3131
const weighting = split.weighting;
32-
const sortedVariants = split.getVariants().sort();
32+
const sortedVariants = getSplitVariants(split).sort();
3333

3434
for (const variant of sortedVariants) {
3535
bucketCeiling += weighting[variant];

src/config.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Assignment from './assignment';
2-
import Split from './split';
2+
import { type Split } from './split';
33
import { createSplitRegistry, type SplitRegistry } from './splitRegistry';
44

55
const DEFAULT_VISITOR_COOKIE_NAME = 'tt_visitor_id';
@@ -38,9 +38,11 @@ function parseSplitRegistry(rawSplits: RawConfig['splits']): SplitRegistry {
3838
return createSplitRegistry(null);
3939
}
4040

41-
const splits = Object.entries(rawSplits).map(([splitName, rawSplit]) => {
42-
return new Split(splitName, rawSplit['feature_gate'], rawSplit['weights']);
43-
});
41+
const splits = Object.entries(rawSplits).map<Split>(([name, values]) => ({
42+
name,
43+
isFeatureGate: values.feature_gate,
44+
weighting: values.weights
45+
}));
4446

4547
return createSplitRegistry(splits);
4648
}

src/split.test.ts

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
1-
import Split from './split';
1+
import { getSplitVariants, type Split } from './split';
22

3-
function createSplit() {
4-
return new Split('split name', true, { foo: 50, bar: 50, baz: 0 });
5-
}
3+
describe('.getVariants()', () => {
4+
it('returns all variants', () => {
5+
const split: Split = {
6+
name: 'split name',
7+
isFeatureGate: true,
8+
weighting: { foo: 50, bar: 50, baz: 0 }
9+
};
610

7-
describe('Split', () => {
8-
describe('.getVariants()', () => {
9-
it('returns all variants', () => {
10-
const split = createSplit();
11-
expect(split.getVariants()).toEqual(['foo', 'bar', 'baz']);
12-
});
13-
});
14-
15-
describe('.weighting', () => {
16-
it('returns the weightings hash', () => {
17-
const split = createSplit();
18-
expect(split.weighting).toEqual({ foo: 50, bar: 50, baz: 0 });
19-
});
11+
expect(getSplitVariants(split)).toEqual(['foo', 'bar', 'baz']);
2012
});
2113
});

src/split.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,12 @@ export type Weighting = {
22
[variant: string]: number;
33
};
44

5-
class Split {
5+
export type Split = {
66
name: string;
77
isFeatureGate: boolean;
88
weighting: Weighting;
9+
};
910

10-
constructor(name: string, isFeatureGate: boolean, weighting: Weighting) {
11-
this.name = name;
12-
this.isFeatureGate = isFeatureGate;
13-
this.weighting = weighting;
14-
}
15-
16-
getVariants(): string[] {
17-
return Object.keys(this.weighting);
18-
}
11+
export function getSplitVariants(split: Split): string[] {
12+
return Object.keys(split.weighting);
1913
}
20-
21-
export default Split;

src/splitRegistry.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import Split from './split';
21
import { createSplitRegistry } from './splitRegistry';
32

43
function setupSplitRegistry() {
5-
const split1 = new Split('split1', true, { foo: 50, bar: 50, baz: 0 });
6-
const split2 = new Split('split2', true, { up: 50, down: 50 });
7-
return createSplitRegistry([split1, split2]);
4+
return createSplitRegistry([
5+
{ name: 'split1', isFeatureGate: true, weighting: { foo: 50, bar: 50, baz: 0 } },
6+
{ name: 'split2', isFeatureGate: true, weighting: { up: 50, down: 50 } }
7+
]);
88
}
99

1010
describe('SplitRegistry', () => {

src/splitRegistry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Split, { type Weighting } from './split';
1+
import type { Split, Weighting } from './split';
22

33
export type V1Hash = {
44
[splitName: string]: Weighting;

src/vary.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Assignment from './assignment';
2+
import { getSplitVariants } from './split';
23
import Visitor from './visitor';
34

45
type Handler = () => void;
@@ -23,7 +24,7 @@ function validateVariants(visitor: Visitor, assignment: Assignment, variants: Va
2324
const split = visitor.config.splitRegistry.getSplit(assignment.getSplitName());
2425
if (!split) return;
2526

26-
const splitVariants = split.getVariants();
27+
const splitVariants = getSplitVariants(split);
2728
const unknownVariants = configuredVariants.filter(variant => !splitVariants.includes(variant));
2829
const missingVariants = splitVariants.filter(variant => !configuredVariants.includes(variant));
2930

0 commit comments

Comments
 (0)