Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 141x 108x 108x 33x 141x 141x 141x 141x 141x 141x | import { Faker, en, de, es, fr, it, type LocaleDefinition } from '@faker-js/faker'
export interface GeneratorOptions {
locale?: 'en' | 'de' | 'es' | 'fr' | 'it'
seed?: number
refDate?: string
}
export abstract class BaseGenerator {
protected generator: Faker
protected seed: number
protected refDate?: Date
constructor(opts: GeneratorOptions) {
// Parse refDate with fallback to current time for invalid dates
if (opts.refDate) {
const parsedDate = new Date(opts.refDate.trim())
this.refDate = isNaN(parsedDate.getTime()) ? new Date() : parsedDate
} else {
this.refDate = new Date()
}
const localeData: LocaleDefinition = (() => {
switch (opts?.locale) {
case 'de':
return de
case 'es':
return es
case 'fr':
return fr
case 'it':
return it
default:
return en
}
})()
// Create isolated faker instance for deterministic seeding per generator
this.generator = new Faker({ locale: [localeData] })
// Use provided seed or a random 32-bit seed
this.seed = typeof opts?.seed === 'number'
? opts.seed
: Math.floor(Math.random() * 0x100000000)
this.generator.seed(this.seed)
}
abstract generate(...args: unknown[]): unknown
}
|