diff --git a/README.md b/README.md index 3ad7991..65ed28a 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,9 @@ model User { id String @id @default(cuid()) email String @unique name String + /// Use comments to specify the faker method. For example: + ///FAKE:faker.location.streetAddress({ useFullAddress: true }) + address String ///FAKE:{notificationsEnabled: faker.datatype.boolean(), preferredColor: faker.color.rgb()} settings Json status UserStatus diff --git a/src/__tests__/__snapshots__/createMethods.test.ts.snap b/src/__tests__/__snapshots__/createMethods.test.ts.snap index 518906c..acba652 100644 --- a/src/__tests__/__snapshots__/createMethods.test.ts.snap +++ b/src/__tests__/__snapshots__/createMethods.test.ts.snap @@ -11,6 +11,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -46,6 +47,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -119,6 +121,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -154,6 +157,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -227,6 +231,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -262,6 +267,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -335,6 +341,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -370,6 +377,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -443,6 +451,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -478,6 +487,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -551,6 +561,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -586,6 +597,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -659,6 +671,7 @@ export function fakeUser() { return { email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), @@ -694,6 +707,7 @@ export function fakeUserComplete() { id: faker.string.uuid(), email: faker.internet.email(), name: faker.person.fullName(), + companyName: faker.company.name(), age: faker.number.int({min: 0, max: 99}), firstName: faker.person.firstName(), lastName: faker.person.lastName(), diff --git a/src/__tests__/sample.prisma b/src/__tests__/sample.prisma index 3368d53..3126874 100644 --- a/src/__tests__/sample.prisma +++ b/src/__tests__/sample.prisma @@ -7,6 +7,8 @@ model User { id String @id @default(cuid()) email String name String + ///FAKE:faker.company.name() + companyName String age Int firstName String lastName String diff --git a/src/helpers/createMethods.ts b/src/helpers/createMethods.ts index 0c87298..28faeef 100644 --- a/src/helpers/createMethods.ts +++ b/src/helpers/createMethods.ts @@ -12,6 +12,14 @@ function getFieldDefinition( const fakeLine = docLines.find((line) => line.startsWith('FAKE:')); const fakeValue = fakeLine?.replace('FAKE:', ''); + if(fakeLine && !fakeValue) { + logger.warn(`${model.name}.${field.name} appears to have a '///FAKE:' comment but is missing a method or JSON after it.`) + } + + if (fakeValue) { + return `${field.name}: ${fakeValue}`; + } + if (field.isId) { return `${field.name}: ${ field.type === 'String' ? 'faker.string.uuid()' : 'faker.number.int()' @@ -144,18 +152,6 @@ function getFieldDefinition( return `${field.name}: faker.date.anytime()`; } if (field.type === 'Json') { - const docLines = field.documentation?.split('\n') || []; - const fake = docLines.find((line) => line.startsWith('FAKE:')); - if (fake) { - const fakeValue = fake.replace('FAKE:', ''); - if (!fakeValue) { - logger.warn( - `Incorrect format for fake JSON. Field ${field.name} won't be generated. Example: ///[FAKE:{"test": "faker.lorem.word()"}]`, - ); - return null; - } - return `${field.name}: ${fakeValue}`; - } return `${field.name}: JSON.stringify(${generateRandomJson()})`; } logger.warn(