Skip to content

Commit 18a8566

Browse files
Merge pull request #316 from igoforth/handle-exact-optional-property-types
Handle exact optional property types
2 parents 31374b8 + c8c9bbd commit 18a8566

17 files changed

+492
-20
lines changed

packages/generator/src/functions/contentWriters/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ export * from './writeModelFields';
1414
export * from './writeNullableJsonValue';
1515
export * from './writeOutputObjectType';
1616
export * from './writePrismaEnum';
17+
export * from './writeRemoveUndefined';
1718
export * from './writeSelect';
1819
export * from './writeTransformJsonNull';

packages/generator/src/functions/contentWriters/writeArgs.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@ export const writeArgs = (
1212
}: ContentWriterOptions,
1313
model: ExtendedDMMFOutputType,
1414
) => {
15-
const { useMultipleFiles, prismaClientPath, inputTypePath, prismaVersion } =
16-
dmmf.generatorConfig;
15+
const {
16+
useMultipleFiles,
17+
useExactOptionalPropertyTypes,
18+
prismaClientPath,
19+
inputTypePath,
20+
prismaVersion,
21+
} = dmmf.generatorConfig;
1722

1823
if (useMultipleFiles && !getSingleFileContent) {
1924
writeImport('{ z }', 'zod');
@@ -22,6 +27,9 @@ export const writeArgs = (
2227
`{ ${model.name}SelectSchema }`,
2328
`../${inputTypePath}/${model.name}SelectSchema`,
2429
);
30+
if (useExactOptionalPropertyTypes) {
31+
writeImport('ru', `../${inputTypePath}/RemoveUndefined`);
32+
}
2533
if (model.hasRelationField()) {
2634
writeImport(
2735
`{ ${model.name}IncludeSchema }`,
@@ -55,7 +63,9 @@ export const writeArgs = (
5563
`include: z.lazy(() => ${model.name}IncludeSchema).optional(),`,
5664
);
5765
})
58-
.write(`).strict();`);
66+
.write(`).strict()`)
67+
.conditionalWrite(useExactOptionalPropertyTypes, '.transform(ru)')
68+
.write(`;`);
5969

6070
if (useMultipleFiles && !getSingleFileContent) {
6171
writer.blankLine().writeLine(`export default ${model.name}ArgsSchema;`);

packages/generator/src/functions/contentWriters/writeCountArgs.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,20 @@ export const writeCountArgs = (
99
}: ContentWriterOptions,
1010
model: ExtendedDMMFOutputType,
1111
) => {
12-
const { useMultipleFiles, prismaClientPath, prismaVersion } =
13-
dmmf.generatorConfig;
12+
const {
13+
useMultipleFiles,
14+
useExactOptionalPropertyTypes,
15+
prismaClientPath,
16+
inputTypePath,
17+
prismaVersion,
18+
} = dmmf.generatorConfig;
1419

1520
if (useMultipleFiles && !getSingleFileContent) {
1621
writeImport('{ z }', 'zod');
1722
writeImport('type { Prisma }', prismaClientPath);
23+
if (useExactOptionalPropertyTypes) {
24+
writeImport('ru', `../${inputTypePath}/RemoveUndefined`);
25+
}
1826
writeImport(
1927
`{ ${model.name}CountOutputTypeSelectSchema }`,
2028
`./${model.name}CountOutputTypeSelectSchema`,
@@ -42,7 +50,9 @@ export const writeCountArgs = (
4250
`select: z.lazy(() => ${model.name}CountOutputTypeSelectSchema).nullish(),`,
4351
);
4452
})
45-
.write(`).strict();`);
53+
.write(`).strict()`)
54+
.conditionalWrite(useExactOptionalPropertyTypes, '.transform(ru)')
55+
.write(`;`);
4656

4757
if (useMultipleFiles && !getSingleFileContent) {
4858
writer

packages/generator/src/functions/contentWriters/writeCountSelect.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,19 @@ export const writeCountSelect = (
1313
}: ContentWriterOptions,
1414
model: ExtendedDMMFOutputType,
1515
) => {
16-
const { useMultipleFiles, prismaClientPath } = dmmf.generatorConfig;
16+
const {
17+
useMultipleFiles,
18+
useExactOptionalPropertyTypes,
19+
prismaClientPath,
20+
inputTypePath,
21+
} = dmmf.generatorConfig;
1722

1823
if (useMultipleFiles && !getSingleFileContent) {
1924
writeImport('{ z }', 'zod');
2025
writeImport('type { Prisma }', prismaClientPath);
26+
if (useExactOptionalPropertyTypes) {
27+
writeImport('ru', `../${inputTypePath}/RemoveUndefined`);
28+
}
2129
}
2230

2331
writer
@@ -32,7 +40,9 @@ export const writeCountSelect = (
3240
}
3341
});
3442
})
35-
.write(`).strict();`);
43+
.write(`).strict()`)
44+
.conditionalWrite(useExactOptionalPropertyTypes, '.transform(ru)')
45+
.write(`;`);
3646

3747
if (useMultipleFiles && !getSingleFileContent) {
3848
writer

packages/generator/src/functions/contentWriters/writeInclude.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,19 @@ export const writeInclude = (
99
model: ExtendedDMMFOutputType,
1010
getSingleFileContent = false,
1111
) => {
12-
const { useMultipleFiles, prismaClientPath } = dmmf.generatorConfig;
12+
const {
13+
useMultipleFiles,
14+
useExactOptionalPropertyTypes,
15+
prismaClientPath,
16+
inputTypePath,
17+
} = dmmf.generatorConfig;
1318

1419
if (useMultipleFiles && !getSingleFileContent) {
1520
writeImport('{ z }', 'zod');
1621
writeImport('type { Prisma }', prismaClientPath);
22+
if (useExactOptionalPropertyTypes) {
23+
writeImport('ru', `../${inputTypePath}/RemoveUndefined`);
24+
}
1725
writeImportSet(model.includeImports);
1826
}
1927

@@ -45,7 +53,9 @@ export const writeInclude = (
4553
}
4654
});
4755
})
48-
.write(`).strict()`);
56+
.write(`).strict()`)
57+
.conditionalWrite(useExactOptionalPropertyTypes, '.transform(ru)')
58+
.write(`;`);
4959

5060
if (useMultipleFiles && !getSingleFileContent) {
5161
writer.blankLine().writeLine(`export default ${model.name}IncludeSchema;`);

packages/generator/src/functions/contentWriters/writeInputObjectType.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,24 @@ const writeInputTypeField = ({
108108

109109
export const writeInputObjectType = (
110110
{
111-
fileWriter: { writer, writeImportSet },
111+
fileWriter: { writer, writeImportSet, writeImport },
112112
dmmf,
113113
getSingleFileContent = false,
114114
}: ContentWriterOptions,
115115
inputType: ExtendedDMMFInputType,
116116
) => {
117-
const { useMultipleFiles, addInputTypeValidation, useTypeAssertions } =
118-
dmmf.generatorConfig;
117+
const {
118+
useMultipleFiles,
119+
useExactOptionalPropertyTypes,
120+
addInputTypeValidation,
121+
useTypeAssertions,
122+
} = dmmf.generatorConfig;
119123

120124
if (useMultipleFiles && !getSingleFileContent) {
121125
writeImportSet(inputType.imports);
126+
if (useExactOptionalPropertyTypes) {
127+
writeImport('ru', `./RemoveUndefined`);
128+
}
122129
}
123130

124131
// when an omit field is present, the type is not a native prism type
@@ -196,8 +203,11 @@ export const writeInputObjectType = (
196203
});
197204
});
198205
})
199-
.conditionalWrite(!writeExtendedWhereUniqueInput, `).strict()`)
200-
.conditionalWrite(writeExtendedWhereUniqueInput, `).strict())`)
206+
.write(`)`)
207+
.conditionalWrite(!writeExtendedWhereUniqueInput, `.strict()`)
208+
.conditionalWrite(writeExtendedWhereUniqueInput, `.strict()`)
209+
.conditionalWrite(useExactOptionalPropertyTypes, '.transform(ru)')
210+
.conditionalWrite(writeExtendedWhereUniqueInput, `)`)
201211
.conditionalWrite(useTypeAssertions, ` as ${type};`)
202212
.conditionalWrite(!useTypeAssertions, `;`);
203213

packages/generator/src/functions/contentWriters/writeOutputObjectType.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,22 @@ export const writeOutputObjectType = (
77
{ fileWriter, dmmf, getSingleFileContent = false }: ContentWriterOptions,
88
field: ExtendedDMMFSchemaField,
99
) => {
10-
const { writer, writeImportSet, writeHeading } = fileWriter;
10+
const { writer, writeImportSet, writeImport, writeHeading } = fileWriter;
1111

12-
const { useMultipleFiles, useTypeAssertions } = dmmf.generatorConfig;
12+
const {
13+
useMultipleFiles,
14+
useExactOptionalPropertyTypes,
15+
useTypeAssertions,
16+
inputTypePath,
17+
} = dmmf.generatorConfig;
1318

1419
if (useMultipleFiles && !getSingleFileContent) {
1520
writeImportSet(field.argTypeImports);
1621

22+
if (useExactOptionalPropertyTypes) {
23+
writeImport('ru', `../${inputTypePath}/RemoveUndefined`);
24+
}
25+
1726
// determine if the outputType should include the "select" or "include" field
1827
const modelWithSelect = dmmf.schema.getModelWithIncludeAndSelect(field);
1928

@@ -135,7 +144,9 @@ export const writeOutputObjectType = (
135144
writer.newLine();
136145
});
137146
})
138-
.write(`).strict() `)
147+
.write(`)`)
148+
.write(`.strict()`)
149+
.conditionalWrite(useExactOptionalPropertyTypes, '.transform(ru)')
139150
.conditionalWrite(useTypeAssertions, `as ${field.customArgType};`)
140151
.conditionalWrite(!useTypeAssertions, `;`);
141152

0 commit comments

Comments
 (0)