diff --git a/src/index.ts b/src/index.ts index f3cde69e8ad..03650839086 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ import { Datatype } from './datatype'; import { Mersenne } from './mersenne'; +import { Music } from './music'; import { Random } from './random'; export interface FakerOptions { @@ -175,7 +176,7 @@ export class Faker { readonly image = new (require('./image'))(this); readonly internet = new (require('./internet'))(this); readonly lorem = new (require('./lorem'))(this); - readonly music = new (require('./music'))(this); + readonly music: Music = new Music(this); readonly name = new (require('./name'))(this); readonly phone = new (require('./phone_number'))(this); readonly system = new (require('./system'))(this); diff --git a/src/music.ts b/src/music.ts new file mode 100644 index 00000000000..5c773693fc6 --- /dev/null +++ b/src/music.ts @@ -0,0 +1,29 @@ +import type { Faker } from '.'; + +export class Music { + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Music.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + + // TODO @Shinigami92 2022-01-12: We should find a better strategy as assigning this property to a function + // @ts-expect-error + this.genre.schema = { + description: 'Generates a genre.', + sampleResults: ['Rock', 'Metal', 'Pop'], + }; + } + + /** + * genre + * + * @method faker.music.genre + */ + genre(): string { + return this.faker.random.arrayElement(this.faker.definitions.music.genre); + } +}