diff --git a/packages/prisma-fabbrica/src/templates/index.ts b/packages/prisma-fabbrica/src/templates/index.ts index 654c22d8..5766e219 100644 --- a/packages/prisma-fabbrica/src/templates/index.ts +++ b/packages/prisma-fabbrica/src/templates/index.ts @@ -31,7 +31,9 @@ function isInputObjectTypeField(field: DMMF.SchemaArg) { } function filterRequiredScalarOrEnumFields(inputType: DMMF.InputType) { - return filterRequiredFields(inputType).filter(isScalarOrEnumField); + return filterRequiredFields(inputType) + .filter(inputType => !inputType.isNullable) + .filter(isScalarOrEnumField); } function filterRequiredInputObjectTypeField(inputType: DMMF.InputType) { @@ -94,6 +96,8 @@ export const scalarFieldType = ( throw new Error("Invalid call. This function is allowed for only scalar field."); } switch (inputType.type) { + case "Null": + return ast.literalTypeNode(ast.null()); case "Boolean": return ast.keywordTypeNode(ts.SyntaxKind.BooleanKeyword); case "String": diff --git a/packages/prisma-fabbrica/src/templates/modelScalarOrEnumFields.test.ts b/packages/prisma-fabbrica/src/templates/modelScalarOrEnumFields.test.ts index c7401cb0..85b3b881 100644 --- a/packages/prisma-fabbrica/src/templates/modelScalarOrEnumFields.test.ts +++ b/packages/prisma-fabbrica/src/templates/modelScalarOrEnumFields.test.ts @@ -30,6 +30,20 @@ describe(modelScalarOrEnumFields, () => { } `, }, + { + pattern: "Nullable field", + datamodel: ` + model TestModel { + id Int @id + nullableField String? + } + `, + expected: ` + type TestModelScalarOrEnumFields = { + id: number; + } + `, + }, { pattern: "Complex id", datamodel: ` diff --git a/packages/ts-compile-testing/fixtures/field-variation/__generated__/fabbrica/index.ts b/packages/ts-compile-testing/fixtures/field-variation/__generated__/fabbrica/index.ts index e7ed38ce..3873aa66 100644 --- a/packages/ts-compile-testing/fixtures/field-variation/__generated__/fabbrica/index.ts +++ b/packages/ts-compile-testing/fixtures/field-variation/__generated__/fabbrica/index.ts @@ -8,6 +8,7 @@ import { ModelWithFields, createScreener } from "@quramy/prisma-fabbrica/lib/rel import scalarFieldValueGenerator from "@quramy/prisma-fabbrica/lib/scalar/gen"; import { Resolver, normalizeResolver, getSequenceCounter } from "@quramy/prisma-fabbrica/lib/helpers"; export { initialize, resetSequence } from "@quramy/prisma-fabbrica"; + type BuildDataOptions = { readonly seq: number; }; @@ -24,6 +25,7 @@ type UserScalarOrEnumFields = { }; type UserFactoryDefineInput = { id?: string; + nullableStr?: string | null; role?: Role; roleDefault?: Role; roles?: Prisma.UserCreaterolesInput | Prisma.Enumerable; diff --git a/packages/ts-compile-testing/fixtures/field-variation/schema.prisma b/packages/ts-compile-testing/fixtures/field-variation/schema.prisma index 7e33e7f2..43ed9c79 100644 --- a/packages/ts-compile-testing/fixtures/field-variation/schema.prisma +++ b/packages/ts-compile-testing/fixtures/field-variation/schema.prisma @@ -16,6 +16,7 @@ datasource db { model User { id String @id + nullableStr String? role Role roleDefault Role @default(USER) roles Role[] diff --git a/packages/ts-compile-testing/scripts/generateFixtures.ts b/packages/ts-compile-testing/scripts/generateFixtures.ts index d3257ea4..d68922e2 100644 --- a/packages/ts-compile-testing/scripts/generateFixtures.ts +++ b/packages/ts-compile-testing/scripts/generateFixtures.ts @@ -13,8 +13,6 @@ async function main() { for (const fixtureDir of dirs) { const schemaPath = path.resolve(fixturesDir, fixtureDir, "schema.prisma"); if (!existsSync(schemaPath)) continue; - const { stdout } = await exec(`npx prisma generate --schema=${schemaPath}`); - process.stdout.write(stdout); const schemaContents = await fs.readFile(schemaPath, "utf8"); const dmmfDocument = await getDMMF({ datamodel: schemaContents, @@ -24,6 +22,8 @@ async function main() { JSON.stringify(dmmfDocument, null, 2), "utf8", ); + const { stdout } = await exec(`npx prisma generate --schema=${schemaPath}`); + process.stdout.write(stdout); } }