Skip to content

Commit c4a4376

Browse files
committed
feat: introduce NumberRange type
1 parent e68db50 commit c4a4376

11 files changed

Lines changed: 63 additions & 456 deletions

File tree

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,4 @@ export {
9292
generateMersenne32Randomizer,
9393
generateMersenne53Randomizer,
9494
} from './utils/mersenne';
95-
export type { Casing } from './utils/types';
95+
export type { Casing, NumberRange } from './utils/types';

src/modules/airline/index.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* operations.
66
*/
77
import { ModuleBase } from '../../internal/module-base';
8+
import type { NumberRange } from '../../utils/types';
89

910
export enum Aircraft {
1011
Narrowbody = 'narrowbody',
@@ -246,18 +247,7 @@ export class AirlineModule extends ModuleBase {
246247
*
247248
* @default { min: 1, max: 4 }
248249
*/
249-
length?:
250-
| number
251-
| {
252-
/**
253-
* The minimum number of digits to generate.
254-
*/
255-
min: number;
256-
/**
257-
* The maximum number of digits to generate.
258-
*/
259-
max: number;
260-
};
250+
length?: number | NumberRange;
261251
/**
262252
* Whether to pad the flight number up to 4 digits with leading zeros.
263253
*

src/modules/date/index.ts

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { Faker } from '../../faker';
44
import { toDate } from '../../internal/date';
55
import { assertLocaleData } from '../../internal/locale-proxy';
66
import { SimpleModuleBase } from '../../internal/module-base';
7+
import type { NumberRange } from '../../utils/types';
78

89
/**
910
* Small helper function to convert a number of years to an amount of milliseconds.
@@ -79,22 +80,7 @@ export class SimpleDateModule extends SimpleModuleBase {
7980
*
8081
* @default 1
8182
*/
82-
years?:
83-
| number
84-
| {
85-
/**
86-
* The minimum amount of years the date should be in the past.
87-
*
88-
* @default 0
89-
*/
90-
min: number;
91-
/**
92-
* The maximum amount of years the date should be in the past.
93-
*
94-
* @default 1
95-
*/
96-
max: number;
97-
};
83+
years?: number | NumberRange;
9884
/**
9985
* The date to use as reference point for the newly generated date.
10086
*
@@ -154,22 +140,7 @@ export class SimpleDateModule extends SimpleModuleBase {
154140
*
155141
* @default 1
156142
*/
157-
years?:
158-
| number
159-
| {
160-
/**
161-
* The minimum amount of years the date should be in the future.
162-
*
163-
* @default 0
164-
*/
165-
min: number;
166-
/**
167-
* The maximum amount of years the date should be in the future.
168-
*
169-
* @default 1
170-
*/
171-
max: number;
172-
};
143+
years?: number | NumberRange;
173144
/**
174145
* The date to use as reference point for the newly generated date.
175146
*
@@ -281,18 +252,7 @@ export class SimpleDateModule extends SimpleModuleBase {
281252
*
282253
* @default 3
283254
*/
284-
count?:
285-
| number
286-
| {
287-
/**
288-
* The minimum number of dates to generate.
289-
*/
290-
min: number;
291-
/**
292-
* The maximum number of dates to generate.
293-
*/
294-
max: number;
295-
};
255+
count?: number | NumberRange;
296256
}): Date[] {
297257
const { from, to, count = 3 } = options;
298258
return this.faker.helpers

src/modules/finance/bitcoin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Casing } from '../../utils/types';
1+
import type { Casing, NumberRange } from '../../utils/types';
22

33
/**
44
* The bitcoin address families.
@@ -30,7 +30,7 @@ export type BitcoinNetworkType = `${BitcoinNetwork}`;
3030

3131
type BitcoinAddressOptions = {
3232
prefix: Record<BitcoinNetworkType, string>;
33-
length: { min: number; max: number };
33+
length: NumberRange;
3434
casing: Casing;
3535
exclude: string;
3636
};

src/modules/helpers/index.ts

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Faker, SimpleFaker } from '../..';
22
import { FakerError } from '../../errors/faker-error';
33
import { SimpleModuleBase } from '../../internal/module-base';
4+
import type { NumberRange } from '../../utils/types';
45
import { fakeEval } from './eval';
56
import { luhnCheckValue } from './luhn-check';
67

@@ -945,18 +946,7 @@ export class SimpleHelpersModule extends SimpleModuleBase {
945946
*/
946947
arrayElements<const T>(
947948
array: ReadonlyArray<T>,
948-
count?:
949-
| number
950-
| {
951-
/**
952-
* The minimum number of elements to pick.
953-
*/
954-
min: number;
955-
/**
956-
* The maximum number of elements to pick.
957-
*/
958-
max: number;
959-
}
949+
count?: number | NumberRange
960950
): T[] {
961951
if (array.length === 0) {
962952
return [];
@@ -1035,20 +1025,7 @@ export class SimpleHelpersModule extends SimpleModuleBase {
10351025
*
10361026
* @since 8.0.0
10371027
*/
1038-
rangeToNumber(
1039-
numberOrRange:
1040-
| number
1041-
| {
1042-
/**
1043-
* The minimum value for the range.
1044-
*/
1045-
min: number;
1046-
/**
1047-
* The maximum value for the range.
1048-
*/
1049-
max: number;
1050-
}
1051-
): number {
1028+
rangeToNumber(numberOrRange: number | NumberRange): number {
10521029
if (typeof numberOrRange === 'number') {
10531030
return numberOrRange;
10541031
}
@@ -1081,18 +1058,7 @@ export class SimpleHelpersModule extends SimpleModuleBase {
10811058
*
10821059
* @default 3
10831060
*/
1084-
count?:
1085-
| number
1086-
| {
1087-
/**
1088-
* The minimum value for the range.
1089-
*/
1090-
min: number;
1091-
/**
1092-
* The maximum value for the range.
1093-
*/
1094-
max: number;
1095-
};
1061+
count?: number | NumberRange;
10961062
} = {}
10971063
): TResult[] {
10981064
const count = this.rangeToNumber(options.count ?? 3);

src/modules/lorem/index.ts

Lines changed: 9 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ModuleBase } from '../../internal/module-base';
2+
import type { NumberRange } from '../../utils/types';
23
import { filterWordListByLength } from '../word/filter-word-list-by-length';
34

45
/**
@@ -47,18 +48,7 @@ export class LoremModule extends ModuleBase {
4748
*
4849
* @default 1
4950
*/
50-
length?:
51-
| number
52-
| {
53-
/**
54-
* The minimum length of the word.
55-
*/
56-
min: number;
57-
/**
58-
* The maximum length of the word.
59-
*/
60-
max: number;
61-
};
51+
length?: number | NumberRange;
6252
/**
6353
* The strategy to apply when no words with a matching length are found.
6454
*
@@ -101,20 +91,7 @@ export class LoremModule extends ModuleBase {
10191
*
10292
* @since 2.0.1
10393
*/
104-
words(
105-
wordCount:
106-
| number
107-
| {
108-
/**
109-
* The minimum number of words to generate.
110-
*/
111-
min: number;
112-
/**
113-
* The maximum number of words to generate.
114-
*/
115-
max: number;
116-
} = 3
117-
): string {
94+
words(wordCount: number | NumberRange = 3): string {
11895
return this.faker.helpers
11996
.multiple(() => this.word(), { count: wordCount })
12097
.join(' ');
@@ -134,20 +111,7 @@ export class LoremModule extends ModuleBase {
134111
*
135112
* @since 2.0.1
136113
*/
137-
sentence(
138-
wordCount:
139-
| number
140-
| {
141-
/**
142-
* The minimum number of words to generate.
143-
*/
144-
min: number;
145-
/**
146-
* The maximum number of words to generate.
147-
*/
148-
max: number;
149-
} = { min: 3, max: 10 }
150-
): string {
114+
sentence(wordCount: number | NumberRange = { min: 3, max: 10 }): string {
151115
const sentence = this.words(wordCount);
152116
return `${sentence.charAt(0).toUpperCase() + sentence.substring(1)}.`;
153117
}
@@ -166,20 +130,7 @@ export class LoremModule extends ModuleBase {
166130
*
167131
* @since 4.0.0
168132
*/
169-
slug(
170-
wordCount:
171-
| number
172-
| {
173-
/**
174-
* The minimum number of words to generate.
175-
*/
176-
min: number;
177-
/**
178-
* The maximum number of words to generate.
179-
*/
180-
max: number;
181-
} = 3
182-
): string {
133+
slug(wordCount: number | NumberRange = 3): string {
183134
const words = this.words(wordCount);
184135
return this.faker.helpers.slugify(words);
185136
}
@@ -203,18 +154,7 @@ export class LoremModule extends ModuleBase {
203154
* @since 2.0.1
204155
*/
205156
sentences(
206-
sentenceCount:
207-
| number
208-
| {
209-
/**
210-
* The minimum number of sentences to generate.
211-
*/
212-
min: number;
213-
/**
214-
* The maximum number of sentences to generate.
215-
*/
216-
max: number;
217-
} = { min: 2, max: 6 },
157+
sentenceCount: number | NumberRange = { min: 2, max: 6 },
218158
separator: string = ' '
219159
): string {
220160
return this.faker.helpers
@@ -236,20 +176,7 @@ export class LoremModule extends ModuleBase {
236176
*
237177
* @since 2.0.1
238178
*/
239-
paragraph(
240-
sentenceCount:
241-
| number
242-
| {
243-
/**
244-
* The minimum number of sentences to generate.
245-
*/
246-
min: number;
247-
/**
248-
* The maximum number of sentences to generate.
249-
*/
250-
max: number;
251-
} = 3
252-
): string {
179+
paragraph(sentenceCount: number | NumberRange = 3): string {
253180
return this.sentences(sentenceCount);
254181
}
255182

@@ -286,18 +213,7 @@ export class LoremModule extends ModuleBase {
286213
* @since 2.0.1
287214
*/
288215
paragraphs(
289-
paragraphCount:
290-
| number
291-
| {
292-
/**
293-
* The minimum number of paragraphs to generate.
294-
*/
295-
min: number;
296-
/**
297-
* The maximum number of paragraphs to generate.
298-
*/
299-
max: number;
300-
} = 3,
216+
paragraphCount: number | NumberRange = 3,
301217
separator: string = '\n'
302218
): string {
303219
return this.faker.helpers
@@ -360,20 +276,7 @@ export class LoremModule extends ModuleBase {
360276
*
361277
* @since 3.1.0
362278
*/
363-
lines(
364-
lineCount:
365-
| number
366-
| {
367-
/**
368-
* The minimum number of lines to generate.
369-
*/
370-
min: number;
371-
/**
372-
* The maximum number of lines to generate.
373-
*/
374-
max: number;
375-
} = { min: 1, max: 5 }
376-
): string {
279+
lines(lineCount: number | NumberRange = { min: 1, max: 5 }): string {
377280
return this.sentences(lineCount, '\n');
378281
}
379282
}

0 commit comments

Comments
 (0)