Skip to content

Commit

Permalink
improve resolvedData types
Browse files Browse the repository at this point in the history
  • Loading branch information
Noviny committed Aug 23, 2022
1 parent 9deddfa commit dc7dcfe
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
5 changes: 5 additions & 0 deletions .changeset/slimy-snakes-jump.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@keystone-6/core': patch
---

Improved types for `resolvedData` for hooks so it properly mirrors prisma types
41 changes: 38 additions & 3 deletions packages/core/src/lib/schema-type-printer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,34 @@ function printInputTypesFromSchema(schema: GraphQLSchema, scalars: Record<string
return typeString + '\n\n';
}

function printInterimType<L extends InitialisedList>(
list: L,
listKey: string,
typename: string,
type: 'Create' | 'Update'
) {
let resolvedTypeString = `type Resolved${typename} = {\n`;
for (let [fieldKey, { dbField }] of Object.entries(list.fields)) {
if (dbField.kind === 'multi') {
resolvedTypeString +=
` ${fieldKey}: {\n` +
Object.keys(dbField.fields)
.map(
key =>
` ${key}?: import('.prisma/client').Prisma.${listKey}${type}Input["${fieldKey}_${key}"];`
)
.join('\n') +
'\n }\n';
} else if (dbField.kind === 'none') {
resolvedTypeString += ` ${fieldKey}?: undefined\n`;
} else {
resolvedTypeString += ` ${fieldKey}?: import('.prisma/client').Prisma.${listKey}${type}Input["${fieldKey}"];\n`;
}
}
resolvedTypeString += '};\n\n';
return resolvedTypeString;
}

export function printGeneratedTypes(
graphQLSchema: GraphQLSchema,
lists: Record<string, InitialisedList>
Expand All @@ -93,10 +121,15 @@ export function printGeneratedTypes(

let allListsStr = '';
let listsNamespaceStr = '\nexport declare namespace Lists {';
let interimCreateUpdateTypes = '';

for (const [listKey, list] of Object.entries(lists)) {
const gqlNames = getGqlNames(list);

interimCreateUpdateTypes +=
printInterimType(list, listKey, gqlNames.createInputName, 'Create') +
printInterimType(list, listKey, gqlNames.updateInputName, 'Update');

const listTypeInfoName = `Lists.${listKey}.TypeInfo`;

allListsStr += `\n readonly ${listKey}: ${listTypeInfoName};`;
Expand All @@ -118,8 +151,8 @@ export function printGeneratedTypes(
orderBy: ${gqlNames.listOrderName};
};
prisma: {
create: Record<string, any>; // TODO: actual types
update: Record<string, any>; // TODO: actual types
create: Resolved${gqlNames.createInputName}
update: Resolved${gqlNames.updateInputName}
};
all: __TypeInfo;
};
Expand All @@ -144,6 +177,8 @@ type __TypeInfo = TypeInfo;
export type Lists = {
[Key in keyof TypeInfo['lists']]?: import('@keystone-6/core').ListConfig<TypeInfo['lists'][Key], any>
} & Record<string, import('@keystone-6/core').ListConfig<any, any>>;
export {}
`;
return printedTypes + listsNamespaceStr + postlude;
return printedTypes + interimCreateUpdateTypes + listsNamespaceStr + postlude;
}

0 comments on commit dc7dcfe

Please sign in to comment.