Skip to content

Commit acd5fda

Browse files
authored
feat: introduce NumberRange type (#3838)
1 parent fd33b72 commit acd5fda

14 files changed

Lines changed: 204 additions & 461 deletions

File tree

scripts/apidocs/processing/type.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ export function getTypeText(
9191
: newSimpleType('string');
9292

9393
return newUnionType([displayType, baseType]);
94+
} else if (name === 'NumberRange') {
95+
return newSimpleType('{ min: number; max: number }');
9496
}
9597

9698
const typeParameters = typeArguments.map((t) => getTypeText(t, options));

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/module.ts

Lines changed: 2 additions & 12 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

34
export enum Aircraft {
45
Narrowbody = 'narrowbody',
@@ -240,18 +241,7 @@ export class AirlineModule extends ModuleBase {
240241
*
241242
* @default { min: 1, max: 4 }
242243
*/
243-
length?:
244-
| number
245-
| {
246-
/**
247-
* The minimum number of digits to generate.
248-
*/
249-
min: number;
250-
/**
251-
* The maximum number of digits to generate.
252-
*/
253-
max: number;
254-
};
244+
length?: number | NumberRange;
255245
/**
256246
* Whether to pad the flight number up to 4 digits with leading zeros.
257247
*

src/modules/date/module.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
* Module to generate dates (without methods requiring localized data).
@@ -70,22 +71,7 @@ export class SimpleDateModule extends SimpleModuleBase {
7071
*
7172
* @default 1
7273
*/
73-
years?:
74-
| number
75-
| {
76-
/**
77-
* The minimum amount of years the date should be in the past.
78-
*
79-
* @default 0
80-
*/
81-
min: number;
82-
/**
83-
* The maximum amount of years the date should be in the past.
84-
*
85-
* @default 1
86-
*/
87-
max: number;
88-
};
74+
years?: number | NumberRange;
8975
/**
9076
* The date to use as reference point for the newly generated date.
9177
*
@@ -149,22 +135,7 @@ export class SimpleDateModule extends SimpleModuleBase {
149135
*
150136
* @default 1
151137
*/
152-
years?:
153-
| number
154-
| {
155-
/**
156-
* The minimum amount of years the date should be in the future.
157-
*
158-
* @default 0
159-
*/
160-
min: number;
161-
/**
162-
* The maximum amount of years the date should be in the future.
163-
*
164-
* @default 1
165-
*/
166-
max: number;
167-
};
138+
years?: number | NumberRange;
168139
/**
169140
* The date to use as reference point for the newly generated date.
170141
*
@@ -280,18 +251,7 @@ export class SimpleDateModule extends SimpleModuleBase {
280251
*
281252
* @default 3
282253
*/
283-
count?:
284-
| number
285-
| {
286-
/**
287-
* The minimum number of dates to generate.
288-
*/
289-
min: number;
290-
/**
291-
* The maximum number of dates to generate.
292-
*/
293-
max: number;
294-
};
254+
count?: number | NumberRange;
295255
}): Date[] {
296256
const { from, to, count = 3 } = options;
297257
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/module.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

@@ -1029,18 +1030,7 @@ export class SimpleHelpersModule extends SimpleModuleBase {
10291030
*/
10301031
arrayElements<const T>(
10311032
array: ReadonlyArray<T>,
1032-
count?:
1033-
| number
1034-
| {
1035-
/**
1036-
* The minimum number of elements to pick.
1037-
*/
1038-
min: number;
1039-
/**
1040-
* The maximum number of elements to pick.
1041-
*/
1042-
max: number;
1043-
}
1033+
count?: number | NumberRange
10441034
): T[] {
10451035
if (array.length === 0) {
10461036
return [];
@@ -1117,20 +1107,7 @@ export class SimpleHelpersModule extends SimpleModuleBase {
11171107
*
11181108
* @since 8.0.0
11191109
*/
1120-
rangeToNumber(
1121-
numberOrRange:
1122-
| number
1123-
| {
1124-
/**
1125-
* The minimum value for the range.
1126-
*/
1127-
min: number;
1128-
/**
1129-
* The maximum value for the range.
1130-
*/
1131-
max: number;
1132-
}
1133-
): number {
1110+
rangeToNumber(numberOrRange: number | NumberRange): number {
11341111
if (typeof numberOrRange === 'number') {
11351112
return numberOrRange;
11361113
}
@@ -1163,18 +1140,7 @@ export class SimpleHelpersModule extends SimpleModuleBase {
11631140
*
11641141
* @default 3
11651142
*/
1166-
count?:
1167-
| number
1168-
| {
1169-
/**
1170-
* The minimum value for the range.
1171-
*/
1172-
min: number;
1173-
/**
1174-
* The maximum value for the range.
1175-
*/
1176-
max: number;
1177-
};
1143+
count?: number | NumberRange;
11781144
} = {}
11791145
): TResult[] {
11801146
const count = this.rangeToNumber(options.count ?? 3);

src/modules/lorem/module.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)