diff options
| author | Shinigami <[email protected]> | 2022-05-03 15:48:20 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-05-03 15:48:20 +0200 |
| commit | a2da7c496e9a3741d165ddfe6128b50837fec361 (patch) | |
| tree | 88d371bc19487bc8a34d9043035aed8e4fedd7d5 /src/modules/vehicle | |
| parent | cc46a0c19af2752b6210c24b715fcce20197b6d9 (diff) | |
| download | faker-a2da7c496e9a3741d165ddfe6128b50837fec361.tar.xz faker-a2da7c496e9a3741d165ddfe6128b50837fec361.zip | |
refactor!: reorganize src folder (#909)
Diffstat (limited to 'src/modules/vehicle')
| -rw-r--r-- | src/modules/vehicle/index.ts | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/modules/vehicle/index.ts b/src/modules/vehicle/index.ts new file mode 100644 index 00000000..ec010af9 --- /dev/null +++ b/src/modules/vehicle/index.ts @@ -0,0 +1,131 @@ +import type { Faker } from '../..'; + +/** + * Module to generate vehicle related entries. + */ +export class Vehicle { + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Vehicle.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + } + + /** + * Returns a random vehicle. + * + * @example + * faker.vehicle.vehicle() // 'BMW Explorer' + */ + vehicle(): string { + return `${this.manufacturer()} ${this.model()}`; + } + + /** + * Returns a manufacturer name. + * + * @example + * faker.vehicle.manufacturer() // 'Ford' + */ + manufacturer(): string { + return this.faker.helpers.arrayElement( + this.faker.definitions.vehicle.manufacturer + ); + } + + /** + * Returns a vehicle model. + * + * @example + * faker.vehicle.model() // 'Explorer' + */ + model(): string { + return this.faker.helpers.arrayElement( + this.faker.definitions.vehicle.model + ); + } + + /** + * Returns a vehicle type. + * + * @example + * faker.vehicle.type() // 'Coupe' + */ + type(): string { + return this.faker.helpers.arrayElement(this.faker.definitions.vehicle.type); + } + + /** + * Returns a fuel type. + * + * @example + * faker.vehicle.fuel() // 'Electric' + */ + fuel(): string { + return this.faker.helpers.arrayElement(this.faker.definitions.vehicle.fuel); + } + + /** + * Returns a vehicle identification number (VIN). + * + * @example + * faker.vehicle.vin() // 'YV1MH682762184654' + */ + vin(): string { + const bannedChars = ['o', 'i', 'q']; + return `${this.faker.random.alphaNumeric(10, { + bannedChars, + })}${this.faker.random.alpha({ + count: 1, + upcase: true, + bannedChars, + })}${this.faker.random.alphaNumeric(1, { + bannedChars, + })}${this.faker.datatype.number({ min: 10000, max: 99999 })}` // return five digit # + .toUpperCase(); + } + + /** + * Returns a vehicle color. + * + * @example + * faker.vehicle.color() // 'red' + */ + color(): string { + return this.faker.commerce.color(); + } + + /** + * Returns a vehicle registration number (Vehicle Registration Mark - VRM) + * + * @example + * faker.vehicle.vrm() // 'MF56UPA' + */ + vrm(): string { + return `${this.faker.random.alpha({ + count: 2, + upcase: true, + })}${this.faker.datatype.number({ + min: 0, + max: 9, + })}${this.faker.datatype.number({ + min: 0, + max: 9, + })}${this.faker.random.alpha({ count: 3, upcase: true })}`.toUpperCase(); + } + + /** + * Returns a type of bicycle. + * + * @example + * faker.vehicle.bicycle() // 'Adventure Road Bicycle' + */ + bicycle(): string { + return this.faker.helpers.arrayElement( + this.faker.definitions.vehicle.bicycle_type + ); + } +} |
