From e053f6041eadec0e1e0f06b94593ba752a125238 Mon Sep 17 00:00:00 2001 From: Shinigami Date: Fri, 14 Jan 2022 17:13:49 +0100 Subject: [PATCH] feat: migrate database (#89) --- src/database.ts | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 3 +- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 src/database.ts diff --git a/src/database.ts b/src/database.ts new file mode 100644 index 00000000000..c0513bbc5ec --- /dev/null +++ b/src/database.ts @@ -0,0 +1,77 @@ +import type { Faker } from '.'; + +export class Database { + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Database.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + + // TODO @Shinigami92 2022-01-11: We should find a better strategy as assigning this property to a function + // @ts-expect-error + this.column.schema = { + description: 'Generates a column name.', + sampleResults: ['id', 'title', 'createdAt'], + }; + // @ts-expect-error + this.type.schema = { + description: 'Generates a column type.', + sampleResults: ['byte', 'int', 'varchar', 'timestamp'], + }; + // @ts-expect-error + this.collation.schema = { + description: 'Generates a collation.', + sampleResults: ['utf8_unicode_ci', 'utf8_bin'], + }; + // @ts-expect-error + this.engine.schema = { + description: 'Generates a storage engine.', + sampleResults: ['MyISAM', 'InnoDB'], + }; + } + + /** + * column + * + * @method faker.database.column + */ + column() { + return this.faker.random.arrayElement( + this.faker.definitions.database.column + ); + } + + /** + * type + * + * @method faker.database.type + */ + type() { + return this.faker.random.arrayElement(this.faker.definitions.database.type); + } + + /** + * collation + * + * @method faker.database.collation + */ + collation() { + return this.faker.random.arrayElement( + this.faker.definitions.database.collation + ); + } + + /** + * engine + * + * @method faker.database.engine + */ + engine() { + return this.faker.random.arrayElement( + this.faker.definitions.database.engine + ); + } +} diff --git a/src/index.ts b/src/index.ts index e41569c5721..ee741166ca5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,4 @@ +import { Database } from './database'; import { Datatype } from './datatype'; import { _Date } from './date'; import { Fake } from './fake'; @@ -174,7 +175,7 @@ export class Faker { readonly animal = new (require('./animal'))(this); readonly commerce = new (require('./commerce'))(this); readonly company = new (require('./company'))(this); - readonly database = new (require('./database'))(this); + readonly database: Database = new Database(this); readonly date: _Date = new _Date(this); readonly finance = new (require('./finance'))(this); readonly git: Git = new Git(this);