Skip to content

Commit 2670d28

Browse files
authored
fix: seedrandom dependency (#424)
allow DataGenerator class to take a random number generator function
1 parent 22baa00 commit 2670d28

File tree

7 files changed

+30
-19
lines changed

7 files changed

+30
-19
lines changed

.storybook/utils.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import seedrandom from 'seedrandom';
2+
3+
import { DataGenerator } from '../src';
4+
5+
export const getRandomNumber = seedrandom(process.env.RNG_SEED || undefined);
6+
7+
export class SeededDataGenerator extends DataGenerator {
8+
constructor(frequency = 500) {
9+
super(frequency, getRandomNumber);
10+
}
11+
}

src/utils/data_generators/data_generator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { Simple1DNoise } from './simple_noise';
1+
import { Simple1DNoise, RandomNumberGenerator } from './simple_noise';
22

33
export class DataGenerator {
44
private generator: Simple1DNoise;
55
private frequency: number;
6-
constructor(frequency = 500) {
7-
this.generator = new Simple1DNoise();
6+
constructor(frequency = 500, randomNumberGenerator?: RandomNumberGenerator) {
7+
this.generator = new Simple1DNoise(randomNumberGenerator);
88
this.frequency = frequency;
99
}
1010
generateSimpleSeries(totalPoints = 50, group = 1) {

src/utils/data_generators/simple_noise.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
import seedrandom from 'seedrandom';
2-
3-
export const getRandomNumber = seedrandom(process.env.RNG_SEED || undefined);
1+
export type RandomNumberGenerator = () => number;
42

53
export class Simple1DNoise {
64
private maxVertices: number;
75
private maxVerticesMask: number;
86
private amplitude: number;
97
private scale: number;
10-
constructor(maxVertices = 256, amplitude = 5.1, scale = 0.6) {
8+
private getRandomNumber: RandomNumberGenerator;
9+
10+
constructor(randomNumberGenerator?: RandomNumberGenerator, maxVertices = 256, amplitude = 5.1, scale = 0.6) {
11+
this.getRandomNumber = randomNumberGenerator ? randomNumberGenerator : Math.random;
1112
this.maxVerticesMask = maxVertices - 1;
1213
this.amplitude = amplitude;
1314
this.scale = scale;
1415
this.maxVertices = maxVertices;
1516
}
1617

1718
getValue(x: number) {
18-
const r = new Array(this.maxVertices).fill(0).map(getRandomNumber);
19+
const r = new Array(this.maxVertices).fill(0).map(this.getRandomNumber);
1920
const scaledX = x * this.scale;
2021
const xFloor = Math.floor(scaledX);
2122
const t = scaledX - xFloor;

stories/area_chart.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
timeFormatter,
1717
} from '../src';
1818
import { KIBANA_METRICS } from '../src/utils/data_samples/test_dataset_kibana';
19-
import { getRandomNumber } from '../src/utils/data_generators/simple_noise';
19+
import { getRandomNumber } from '../.storybook/utils';
2020

2121
const dateFormatter = timeFormatter('HH:mm');
2222

stories/axis.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { array, boolean, number } from '@storybook/addon-knobs';
22
import { storiesOf } from '@storybook/react';
33
import React from 'react';
4+
45
import {
56
AreaSeries,
67
Axis,
78
BarSeries,
89
Chart,
9-
DataGenerator,
1010
getAxisId,
1111
getGroupId,
1212
getSpecId,
@@ -19,6 +19,7 @@ import {
1919
Settings,
2020
niceTimeFormatter,
2121
} from '../src/';
22+
import { SeededDataGenerator } from '../.storybook/utils';
2223
import { KIBANA_METRICS } from '../src/utils/data_samples/test_dataset_kibana';
2324

2425
function createThemeAction(title: string, min: number, max: number, value: number) {
@@ -364,7 +365,7 @@ storiesOf('Axis', module)
364365
);
365366
})
366367
.add('w many tick labels', () => {
367-
const dg = new DataGenerator();
368+
const dg = new SeededDataGenerator();
368369
const data = dg.generateSimpleSeries(31);
369370
const customStyle = {
370371
tickLabelPadding: number('Tick Label Padding', 0),

stories/bar_chart.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
BarSeries,
1111
Chart,
1212
DARK_THEME,
13-
DataGenerator,
1413
getAnnotationId,
1514
getAxisId,
1615
getGroupId,
@@ -28,17 +27,15 @@ import {
2827
timeFormatter,
2928
TooltipType,
3029
} from '../src';
30+
import { SeededDataGenerator, getRandomNumber } from '../.storybook/utils';
3131
import * as TestDatasets from '../src/utils/data_samples/test_dataset';
32-
3332
import { KIBANA_METRICS } from '../src/utils/data_samples/test_dataset_kibana';
34-
3533
import { TEST_DATASET_DISCOVER } from '../src/utils/data_samples/test_dataset_discover_per_30s';
36-
import { getRandomNumber } from '../src/utils/data_generators/simple_noise';
3734
import { getChartRotationKnob } from './common';
3835

3936
const dateFormatter = timeFormatter('HH:mm:ss');
4037

41-
const dataGen = new DataGenerator();
38+
const dataGen = new SeededDataGenerator();
4239
function generateDataWithAdditional(num: number) {
4340
return [...dataGen.generateSimpleSeries(num), { x: num, y: 0.25, g: 0 }, { x: num + 1, y: 8, g: 0 }];
4441
}
@@ -827,7 +824,7 @@ storiesOf('Bar Chart', module)
827824
);
828825
})
829826
.add('with high data volume', () => {
830-
const dg = new DataGenerator();
827+
const dg = new SeededDataGenerator();
831828
const data = dg.generateSimpleSeries(15000);
832829
const tooltipProps = {
833830
type: TooltipType.Follow,

stories/styling.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { boolean, color, number, select } from '@storybook/addon-knobs';
22
import { storiesOf } from '@storybook/react';
33
import React from 'react';
4+
45
import { switchTheme } from '../.storybook/theme_service';
56
import {
67
AreaSeries,
@@ -9,7 +10,6 @@ import {
910
Chart,
1011
CurveType,
1112
CustomSeriesColorsMap,
12-
DataGenerator,
1313
DataSeriesColorsValues,
1414
DEFAULT_MISSING_COLOR,
1515
getAxisId,
@@ -28,6 +28,7 @@ import {
2828
BarSeriesStyle,
2929
PointStyle,
3030
} from '../src/';
31+
import { SeededDataGenerator } from '../.storybook/utils';
3132
import * as TestDatasets from '../src/utils/data_samples/test_dataset';
3233
import { palettes } from '../src/utils/themes/colors';
3334
import { BarStyleAccessor, PointStyleAccessor } from '../src/chart_types/xy_chart/utils/specs';
@@ -104,7 +105,7 @@ function generateAreaSeriesStyleKnobs(
104105
};
105106
}
106107

107-
const dg = new DataGenerator();
108+
const dg = new SeededDataGenerator();
108109
const data1 = dg.generateGroupedSeries(40, 4);
109110
const data2 = dg.generateSimpleSeries(40);
110111
const data3 = dg.generateSimpleSeries(40);

0 commit comments

Comments
 (0)