@payloadcms/graphql 3.0.0-canary.a0b06af → 3.0.0-canary.a5aaf21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/bin.js +51 -2
  2. package/dist/bin/generateSchema.d.ts.map +1 -1
  3. package/dist/bin/generateSchema.js +1 -1
  4. package/dist/bin/generateSchema.js.map +1 -1
  5. package/dist/bin/index.js +2 -2
  6. package/dist/bin/index.js.map +1 -1
  7. package/dist/exports/types.d.ts +1 -1
  8. package/dist/exports/types.d.ts.map +1 -1
  9. package/dist/exports/types.js +1 -1
  10. package/dist/exports/types.js.map +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +9 -9
  13. package/dist/index.js.map +1 -1
  14. package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts +2 -2
  15. package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts.map +1 -1
  16. package/dist/packages/graphql-query-complexity/QueryComplexity.js +4 -4
  17. package/dist/packages/graphql-query-complexity/QueryComplexity.js.map +1 -1
  18. package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts +1 -1
  19. package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts.map +1 -1
  20. package/dist/packages/graphql-query-complexity/createComplexityRule.js +1 -1
  21. package/dist/packages/graphql-query-complexity/createComplexityRule.js.map +1 -1
  22. package/dist/packages/graphql-type-json/index.d.ts.map +1 -1
  23. package/dist/packages/graphql-type-json/index.js +0 -1
  24. package/dist/packages/graphql-type-json/index.js.map +1 -1
  25. package/dist/resolvers/auth/access.d.ts +1 -2
  26. package/dist/resolvers/auth/access.d.ts.map +1 -1
  27. package/dist/resolvers/auth/access.js +2 -3
  28. package/dist/resolvers/auth/access.js.map +1 -1
  29. package/dist/resolvers/auth/forgotPassword.d.ts +1 -2
  30. package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -1
  31. package/dist/resolvers/auth/forgotPassword.js +1 -2
  32. package/dist/resolvers/auth/forgotPassword.js.map +1 -1
  33. package/dist/resolvers/auth/init.d.ts +1 -2
  34. package/dist/resolvers/auth/init.d.ts.map +1 -1
  35. package/dist/resolvers/auth/init.js +1 -2
  36. package/dist/resolvers/auth/init.js.map +1 -1
  37. package/dist/resolvers/auth/login.d.ts +1 -2
  38. package/dist/resolvers/auth/login.d.ts.map +1 -1
  39. package/dist/resolvers/auth/login.js +1 -2
  40. package/dist/resolvers/auth/login.js.map +1 -1
  41. package/dist/resolvers/auth/logout.d.ts +1 -2
  42. package/dist/resolvers/auth/logout.d.ts.map +1 -1
  43. package/dist/resolvers/auth/logout.js +1 -2
  44. package/dist/resolvers/auth/logout.js.map +1 -1
  45. package/dist/resolvers/auth/me.d.ts +1 -2
  46. package/dist/resolvers/auth/me.d.ts.map +1 -1
  47. package/dist/resolvers/auth/me.js +1 -2
  48. package/dist/resolvers/auth/me.js.map +1 -1
  49. package/dist/resolvers/auth/refresh.d.ts +1 -2
  50. package/dist/resolvers/auth/refresh.d.ts.map +1 -1
  51. package/dist/resolvers/auth/refresh.js +1 -2
  52. package/dist/resolvers/auth/refresh.js.map +1 -1
  53. package/dist/resolvers/auth/resetPassword.d.ts +1 -2
  54. package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
  55. package/dist/resolvers/auth/resetPassword.js +7 -4
  56. package/dist/resolvers/auth/resetPassword.js.map +1 -1
  57. package/dist/resolvers/auth/unlock.d.ts +1 -2
  58. package/dist/resolvers/auth/unlock.d.ts.map +1 -1
  59. package/dist/resolvers/auth/unlock.js +3 -3
  60. package/dist/resolvers/auth/unlock.js.map +1 -1
  61. package/dist/resolvers/auth/verifyEmail.d.ts +1 -2
  62. package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
  63. package/dist/resolvers/auth/verifyEmail.js +7 -4
  64. package/dist/resolvers/auth/verifyEmail.js.map +1 -1
  65. package/dist/resolvers/collections/count.d.ts.map +1 -1
  66. package/dist/resolvers/collections/count.js.map +1 -1
  67. package/dist/resolvers/collections/create.d.ts +1 -1
  68. package/dist/resolvers/collections/create.d.ts.map +1 -1
  69. package/dist/resolvers/collections/create.js +1 -1
  70. package/dist/resolvers/collections/create.js.map +1 -1
  71. package/dist/resolvers/collections/delete.d.ts.map +1 -1
  72. package/dist/resolvers/collections/delete.js +6 -2
  73. package/dist/resolvers/collections/delete.js.map +1 -1
  74. package/dist/resolvers/collections/duplicate.d.ts +1 -1
  75. package/dist/resolvers/collections/duplicate.d.ts.map +1 -1
  76. package/dist/resolvers/collections/duplicate.js +1 -1
  77. package/dist/resolvers/collections/duplicate.js.map +1 -1
  78. package/dist/resolvers/collections/find.d.ts.map +1 -1
  79. package/dist/resolvers/collections/find.js +6 -2
  80. package/dist/resolvers/collections/find.js.map +1 -1
  81. package/dist/resolvers/collections/findByID.d.ts.map +1 -1
  82. package/dist/resolvers/collections/findByID.js +6 -2
  83. package/dist/resolvers/collections/findByID.js.map +1 -1
  84. package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
  85. package/dist/resolvers/collections/findVersions.js +6 -2
  86. package/dist/resolvers/collections/findVersions.js.map +1 -1
  87. package/dist/resolvers/collections/restoreVersion.d.ts +2 -1
  88. package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -1
  89. package/dist/resolvers/collections/restoreVersion.js +2 -1
  90. package/dist/resolvers/collections/restoreVersion.js.map +1 -1
  91. package/dist/resolvers/collections/update.d.ts.map +1 -1
  92. package/dist/resolvers/collections/update.js +6 -2
  93. package/dist/resolvers/collections/update.js.map +1 -1
  94. package/dist/resolvers/globals/findOne.d.ts +1 -1
  95. package/dist/resolvers/globals/findOne.d.ts.map +1 -1
  96. package/dist/resolvers/globals/findOne.js +7 -3
  97. package/dist/resolvers/globals/findOne.js.map +1 -1
  98. package/dist/resolvers/globals/findVersionByID.d.ts +1 -1
  99. package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -1
  100. package/dist/resolvers/globals/findVersionByID.js +7 -3
  101. package/dist/resolvers/globals/findVersionByID.js.map +1 -1
  102. package/dist/resolvers/globals/findVersions.d.ts +1 -1
  103. package/dist/resolvers/globals/findVersions.d.ts.map +1 -1
  104. package/dist/resolvers/globals/findVersions.js +1 -1
  105. package/dist/resolvers/globals/findVersions.js.map +1 -1
  106. package/dist/resolvers/globals/index.d.ts +5 -5
  107. package/dist/resolvers/globals/index.d.ts.map +1 -1
  108. package/dist/resolvers/globals/index.js +5 -5
  109. package/dist/resolvers/globals/index.js.map +1 -1
  110. package/dist/resolvers/globals/restoreVersion.d.ts +2 -1
  111. package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -1
  112. package/dist/resolvers/globals/restoreVersion.js +2 -1
  113. package/dist/resolvers/globals/restoreVersion.js.map +1 -1
  114. package/dist/resolvers/globals/update.d.ts +1 -1
  115. package/dist/resolvers/globals/update.d.ts.map +1 -1
  116. package/dist/resolvers/globals/update.js +7 -3
  117. package/dist/resolvers/globals/update.js.map +1 -1
  118. package/dist/schema/buildFallbackLocaleInputType.d.ts +1 -2
  119. package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -1
  120. package/dist/schema/buildFallbackLocaleInputType.js +2 -3
  121. package/dist/schema/buildFallbackLocaleInputType.js.map +1 -1
  122. package/dist/schema/buildLocaleInputType.d.ts +1 -2
  123. package/dist/schema/buildLocaleInputType.d.ts.map +1 -1
  124. package/dist/schema/buildLocaleInputType.js +2 -3
  125. package/dist/schema/buildLocaleInputType.js.map +1 -1
  126. package/dist/schema/buildMutationInputType.d.ts.map +1 -1
  127. package/dist/schema/buildMutationInputType.js +58 -14
  128. package/dist/schema/buildMutationInputType.js.map +1 -1
  129. package/dist/schema/buildObjectType.d.ts.map +1 -1
  130. package/dist/schema/buildObjectType.js +262 -87
  131. package/dist/schema/buildObjectType.js.map +1 -1
  132. package/dist/schema/buildPoliciesType.d.ts +1 -1
  133. package/dist/schema/buildPoliciesType.d.ts.map +1 -1
  134. package/dist/schema/buildPoliciesType.js +5 -3
  135. package/dist/schema/buildPoliciesType.js.map +1 -1
  136. package/dist/schema/buildWhereInputType.d.ts +2 -2
  137. package/dist/schema/buildWhereInputType.d.ts.map +1 -1
  138. package/dist/schema/buildWhereInputType.js +4 -5
  139. package/dist/schema/buildWhereInputType.js.map +1 -1
  140. package/dist/schema/fieldToWhereInputSchemaMap.d.ts +2 -2
  141. package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -1
  142. package/dist/schema/fieldToWhereInputSchemaMap.js +31 -7
  143. package/dist/schema/fieldToWhereInputSchemaMap.js.map +1 -1
  144. package/dist/schema/initCollections.d.ts +3 -4
  145. package/dist/schema/initCollections.d.ts.map +1 -1
  146. package/dist/schema/initCollections.js +42 -36
  147. package/dist/schema/initCollections.js.map +1 -1
  148. package/dist/schema/initGlobals.d.ts +2 -2
  149. package/dist/schema/initGlobals.d.ts.map +1 -1
  150. package/dist/schema/initGlobals.js +24 -17
  151. package/dist/schema/initGlobals.js.map +1 -1
  152. package/dist/schema/isFieldNullable.d.ts +1 -2
  153. package/dist/schema/isFieldNullable.d.ts.map +1 -1
  154. package/dist/schema/isFieldNullable.js +1 -2
  155. package/dist/schema/isFieldNullable.js.map +1 -1
  156. package/dist/schema/operators.d.ts +1 -2
  157. package/dist/schema/operators.d.ts.map +1 -1
  158. package/dist/schema/operators.js +1 -2
  159. package/dist/schema/operators.js.map +1 -1
  160. package/dist/schema/recursivelyBuildNestedPaths.d.ts +2 -2
  161. package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -1
  162. package/dist/schema/recursivelyBuildNestedPaths.js +2 -3
  163. package/dist/schema/recursivelyBuildNestedPaths.js.map +1 -1
  164. package/dist/schema/withNullableType.d.ts +1 -2
  165. package/dist/schema/withNullableType.d.ts.map +1 -1
  166. package/dist/schema/withNullableType.js +1 -2
  167. package/dist/schema/withNullableType.js.map +1 -1
  168. package/dist/schema/withOperators.d.ts.map +1 -1
  169. package/dist/schema/withOperators.js +11 -6
  170. package/dist/schema/withOperators.js.map +1 -1
  171. package/dist/utilities/combineParentName.d.ts +1 -2
  172. package/dist/utilities/combineParentName.d.ts.map +1 -1
  173. package/dist/utilities/combineParentName.js +2 -3
  174. package/dist/utilities/combineParentName.js.map +1 -1
  175. package/dist/utilities/formatName.d.ts +1 -2
  176. package/dist/utilities/formatName.d.ts.map +1 -1
  177. package/dist/utilities/formatName.js +1 -2
  178. package/dist/utilities/formatName.js.map +1 -1
  179. package/dist/utilities/formatName.spec.js +1 -1
  180. package/dist/utilities/formatName.spec.js.map +1 -1
  181. package/dist/utilities/formatOptions.d.ts +1 -2
  182. package/dist/utilities/formatOptions.d.ts.map +1 -1
  183. package/dist/utilities/formatOptions.js +2 -3
  184. package/dist/utilities/formatOptions.js.map +1 -1
  185. package/package.json +9 -6
  186. package/dist/utilities/getCheckIfLocaleObject.d.ts +0 -5
  187. package/dist/utilities/getCheckIfLocaleObject.d.ts.map +0 -1
  188. package/dist/utilities/getCheckIfLocaleObject.js +0 -3
  189. package/dist/utilities/getCheckIfLocaleObject.js.map +0 -1
  190. package/dist/utilities/uppercase.d.ts +0 -3
  191. package/dist/utilities/uppercase.d.ts.map +0 -1
  192. package/dist/utilities/uppercase.js +0 -11
  193. package/dist/utilities/uppercase.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/buildMutationInputType.ts"],"sourcesContent":["import type { GraphQLInputFieldConfig, GraphQLScalarType, GraphQLType } from 'graphql'\nimport type {\n ArrayField,\n BlockField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\n GraphQLInfo,\n GroupField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RichTextField,\n RowField,\n SanitizedCollectionConfig,\n SanitizedConfig,\n SelectField,\n TabsField,\n TextField,\n TextareaField,\n UploadField,\n} from 'payload'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLString,\n} from 'graphql'\nimport { flattenTopLevelFields, toWords } from 'payload'\nimport { fieldAffectsData, optionIsObject, tabHasName } from 'payload/shared'\n\nimport { GraphQLJSON } from '../packages/graphql-type-json/index.js'\nimport combineParentName from '../utilities/combineParentName.js'\nimport formatName from '../utilities/formatName.js'\nimport { groupOrTabHasRequiredSubfield } from '../utilities/groupOrTabHasRequiredSubfield.js'\nimport withNullableType from './withNullableType.js'\n\nconst idFieldTypes = {\n number: GraphQLInt,\n text: GraphQLString,\n}\n\nexport const getCollectionIDType = (\n type: keyof typeof idFieldTypes,\n collection: SanitizedCollectionConfig,\n): GraphQLScalarType => {\n const idField = flattenTopLevelFields(collection.fields).find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (!idField) {\n return idFieldTypes[type]\n }\n\n return idFieldTypes[idField.type]\n}\n\nexport type InputObjectTypeConfig = {\n [path: string]: GraphQLInputFieldConfig\n}\n\ntype BuildMutationInputTypeArgs = {\n config: SanitizedConfig\n fields: Field[]\n forceNullable?: boolean\n graphqlResult: GraphQLInfo\n name: string\n parentName: string\n}\n\nexport function buildMutationInputType({\n name,\n config,\n fields,\n forceNullable = false,\n graphqlResult,\n parentName,\n}: BuildMutationInputTypeArgs): GraphQLInputObjectType | null {\n const fieldToSchemaMap = {\n array: (inputObjectTypeConfig: InputObjectTypeConfig, field: ArrayField) => {\n const fullName = combineParentName(parentName, toWords(field.name, true))\n let type: GraphQLList<GraphQLType> | GraphQLType = buildMutationInputType({\n name: fullName,\n config,\n fields: field.fields,\n graphqlResult,\n parentName: fullName,\n })\n\n if (!type) return inputObjectTypeConfig\n\n type = new GraphQLList(withNullableType(field, type, forceNullable))\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type },\n }\n },\n blocks: (inputObjectTypeConfig: InputObjectTypeConfig, field: BlockField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: GraphQLJSON },\n }),\n checkbox: (inputObjectTypeConfig: InputObjectTypeConfig, field: CheckboxField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: GraphQLBoolean },\n }),\n code: (inputObjectTypeConfig: InputObjectTypeConfig, field: CodeField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n collapsible: (inputObjectTypeConfig: InputObjectTypeConfig, field: CollapsibleField) =>\n field.fields.reduce((acc, subField: CollapsibleField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) return addSubField(acc, subField)\n return acc\n }, inputObjectTypeConfig),\n date: (inputObjectTypeConfig: InputObjectTypeConfig, field: DateField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n email: (inputObjectTypeConfig: InputObjectTypeConfig, field: EmailField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n group: (inputObjectTypeConfig: InputObjectTypeConfig, field: GroupField) => {\n const requiresAtLeastOneField = groupOrTabHasRequiredSubfield(field)\n const fullName = combineParentName(parentName, toWords(field.name, true))\n let type: GraphQLType = buildMutationInputType({\n name: fullName,\n config,\n fields: field.fields,\n graphqlResult,\n parentName: fullName,\n })\n\n if (!type) return inputObjectTypeConfig\n\n if (requiresAtLeastOneField) type = new GraphQLNonNull(type)\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type },\n }\n },\n json: (inputObjectTypeConfig: InputObjectTypeConfig, field: JSONField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLJSON, forceNullable) },\n }),\n number: (inputObjectTypeConfig: InputObjectTypeConfig, field: NumberField) => {\n const type = field.name === 'id' ? GraphQLInt : GraphQLFloat\n return {\n ...inputObjectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n field.hasMany === true ? new GraphQLList(type) : type,\n forceNullable,\n ),\n },\n }\n },\n point: (inputObjectTypeConfig: InputObjectTypeConfig, field: PointField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, new GraphQLList(GraphQLFloat), forceNullable) },\n }),\n radio: (inputObjectTypeConfig: InputObjectTypeConfig, field: RadioField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n relationship: (inputObjectTypeConfig: InputObjectTypeConfig, field: RelationshipField) => {\n const { relationTo } = field\n type PayloadGraphQLRelationshipType =\n | GraphQLInputObjectType\n | GraphQLList<GraphQLScalarType>\n | GraphQLScalarType\n let type: PayloadGraphQLRelationshipType\n\n if (Array.isArray(relationTo)) {\n const fullName = `${combineParentName(\n parentName,\n toWords(field.name, true),\n )}RelationshipInput`\n type = new GraphQLInputObjectType({\n name: fullName,\n fields: {\n relationTo: {\n type: new GraphQLEnumType({\n name: `${fullName}RelationTo`,\n values: relationTo.reduce(\n (values, option) => ({\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }),\n {},\n ),\n }),\n },\n value: { type: GraphQLJSON },\n },\n })\n } else {\n type = getCollectionIDType(\n config.db.defaultIDType,\n graphqlResult.collections[relationTo].config,\n )\n }\n\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type: field.hasMany ? new GraphQLList(type) : type },\n }\n },\n richText: (inputObjectTypeConfig: InputObjectTypeConfig, field: RichTextField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLJSON, forceNullable) },\n }),\n row: (inputObjectTypeConfig: InputObjectTypeConfig, field: RowField) =>\n field.fields.reduce((acc, subField: Field) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) return addSubField(acc, subField)\n return acc\n }, inputObjectTypeConfig),\n select: (inputObjectTypeConfig: InputObjectTypeConfig, field: SelectField) => {\n const formattedName = `${combineParentName(parentName, field.name)}_MutationInput`\n let type: GraphQLType = new GraphQLEnumType({\n name: formattedName,\n values: field.options.reduce((values, option) => {\n if (optionIsObject(option)) {\n return {\n ...values,\n [formatName(option.value)]: {\n value: option.value,\n },\n }\n }\n\n return {\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }\n }, {}),\n })\n\n type = field.hasMany ? new GraphQLList(type) : type\n type = withNullableType(field, type, forceNullable)\n\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type },\n }\n },\n tabs: (inputObjectTypeConfig: InputObjectTypeConfig, field: TabsField) => {\n return field.tabs.reduce((acc, tab) => {\n if (tabHasName(tab)) {\n const fullName = combineParentName(parentName, toWords(tab.name, true))\n const requiresAtLeastOneField = groupOrTabHasRequiredSubfield(field)\n let type: GraphQLType = buildMutationInputType({\n name: fullName,\n config,\n fields: tab.fields,\n graphqlResult,\n parentName: fullName,\n })\n\n if (!type) return acc\n\n if (requiresAtLeastOneField) type = new GraphQLNonNull(type)\n return {\n ...acc,\n [tab.name]: { type },\n }\n }\n\n return {\n ...acc,\n ...tab.fields.reduce((subFieldSchema, subField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) return addSubField(subFieldSchema, subField)\n return subFieldSchema\n }, acc),\n }\n }, inputObjectTypeConfig)\n },\n text: (inputObjectTypeConfig: InputObjectTypeConfig, field: TextField) => ({\n ...inputObjectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n field.hasMany === true ? new GraphQLList(GraphQLString) : GraphQLString,\n forceNullable,\n ),\n },\n }),\n textarea: (inputObjectTypeConfig: InputObjectTypeConfig, field: TextareaField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n upload: (inputObjectTypeConfig: InputObjectTypeConfig, field: UploadField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n }\n\n const fieldName = formatName(name)\n\n const fieldSchemas = fields.reduce((inputObjectTypeConfig, field) => {\n const fieldSchema = fieldToSchemaMap[field.type]\n\n if (typeof fieldSchema !== 'function') {\n return inputObjectTypeConfig\n }\n\n const schema = fieldSchema(inputObjectTypeConfig, field)\n if (Object.keys(schema).length === 0) {\n return inputObjectTypeConfig\n }\n\n return {\n ...inputObjectTypeConfig,\n ...fieldSchema(inputObjectTypeConfig, field),\n }\n }, {})\n\n if (Object.keys(fieldSchemas).length === 0) {\n return null\n }\n\n return new GraphQLInputObjectType({\n name: `mutation${fieldName}Input`,\n fields: fieldSchemas,\n })\n}\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInputObjectType","GraphQLInt","GraphQLList","GraphQLNonNull","GraphQLString","flattenTopLevelFields","toWords","fieldAffectsData","optionIsObject","tabHasName","GraphQLJSON","combineParentName","formatName","groupOrTabHasRequiredSubfield","withNullableType","idFieldTypes","number","text","getCollectionIDType","type","collection","idField","fields","find","field","name","buildMutationInputType","config","forceNullable","graphqlResult","parentName","fieldToSchemaMap","array","inputObjectTypeConfig","fullName","blocks","checkbox","code","collapsible","reduce","acc","subField","addSubField","date","email","group","requiresAtLeastOneField","json","hasMany","point","radio","relationship","relationTo","Array","isArray","values","option","value","db","defaultIDType","collections","richText","row","select","formattedName","options","tabs","tab","subFieldSchema","textarea","upload","fieldName","fieldSchemas","fieldSchema","schema","Object","keys","length"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/schema/buildMutationInputType.ts"],"sourcesContent":["import type { GraphQLInputFieldConfig, GraphQLScalarType, GraphQLType } from 'graphql'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\n GraphQLInfo,\n GroupField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RichTextField,\n RowField,\n SanitizedCollectionConfig,\n SanitizedConfig,\n SelectField,\n TabsField,\n TextareaField,\n TextField,\n UploadField,\n} from 'payload'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLString,\n} from 'graphql'\nimport { flattenTopLevelFields, toWords } from 'payload'\nimport { fieldAffectsData, optionIsObject, tabHasName } from 'payload/shared'\n\nimport { GraphQLJSON } from '../packages/graphql-type-json/index.js'\nimport { combineParentName } from '../utilities/combineParentName.js'\nimport { formatName } from '../utilities/formatName.js'\nimport { groupOrTabHasRequiredSubfield } from '../utilities/groupOrTabHasRequiredSubfield.js'\nimport { withNullableType } from './withNullableType.js'\n\nconst idFieldTypes = {\n number: GraphQLInt,\n text: GraphQLString,\n}\n\nexport const getCollectionIDType = (\n type: keyof typeof idFieldTypes,\n collection: SanitizedCollectionConfig,\n): GraphQLScalarType => {\n const idField = flattenTopLevelFields(collection.fields).find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (!idField) {\n return idFieldTypes[type]\n }\n\n return idFieldTypes[idField.type]\n}\n\nexport type InputObjectTypeConfig = {\n [path: string]: GraphQLInputFieldConfig\n}\n\ntype BuildMutationInputTypeArgs = {\n config: SanitizedConfig\n fields: Field[]\n forceNullable?: boolean\n graphqlResult: GraphQLInfo\n name: string\n parentName: string\n}\n\nexport function buildMutationInputType({\n name,\n config,\n fields,\n forceNullable = false,\n graphqlResult,\n parentName,\n}: BuildMutationInputTypeArgs): GraphQLInputObjectType | null {\n const fieldToSchemaMap = {\n array: (inputObjectTypeConfig: InputObjectTypeConfig, field: ArrayField) => {\n const fullName = combineParentName(parentName, toWords(field.name, true))\n let type: GraphQLList<GraphQLType> | GraphQLType = buildMutationInputType({\n name: fullName,\n config,\n fields: field.fields,\n graphqlResult,\n parentName: fullName,\n })\n\n if (!type) {\n return inputObjectTypeConfig\n }\n\n type = new GraphQLList(withNullableType(field, type, forceNullable))\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type },\n }\n },\n blocks: (inputObjectTypeConfig: InputObjectTypeConfig, field: BlocksField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: GraphQLJSON },\n }),\n checkbox: (inputObjectTypeConfig: InputObjectTypeConfig, field: CheckboxField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: GraphQLBoolean },\n }),\n code: (inputObjectTypeConfig: InputObjectTypeConfig, field: CodeField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n collapsible: (inputObjectTypeConfig: InputObjectTypeConfig, field: CollapsibleField) =>\n field.fields.reduce((acc, subField: CollapsibleField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField(acc, subField)\n }\n return acc\n }, inputObjectTypeConfig),\n date: (inputObjectTypeConfig: InputObjectTypeConfig, field: DateField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n email: (inputObjectTypeConfig: InputObjectTypeConfig, field: EmailField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n group: (inputObjectTypeConfig: InputObjectTypeConfig, field: GroupField) => {\n const requiresAtLeastOneField = groupOrTabHasRequiredSubfield(field)\n const fullName = combineParentName(parentName, toWords(field.name, true))\n let type: GraphQLType = buildMutationInputType({\n name: fullName,\n config,\n fields: field.fields,\n graphqlResult,\n parentName: fullName,\n })\n\n if (!type) {\n return inputObjectTypeConfig\n }\n\n if (requiresAtLeastOneField) {\n type = new GraphQLNonNull(type)\n }\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type },\n }\n },\n json: (inputObjectTypeConfig: InputObjectTypeConfig, field: JSONField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLJSON, forceNullable) },\n }),\n number: (inputObjectTypeConfig: InputObjectTypeConfig, field: NumberField) => {\n const type = field.name === 'id' ? GraphQLInt : GraphQLFloat\n return {\n ...inputObjectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n field.hasMany === true ? new GraphQLList(type) : type,\n forceNullable,\n ),\n },\n }\n },\n point: (inputObjectTypeConfig: InputObjectTypeConfig, field: PointField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, new GraphQLList(GraphQLFloat), forceNullable) },\n }),\n radio: (inputObjectTypeConfig: InputObjectTypeConfig, field: RadioField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n relationship: (inputObjectTypeConfig: InputObjectTypeConfig, field: RelationshipField) => {\n const { relationTo } = field\n type PayloadGraphQLRelationshipType =\n | GraphQLInputObjectType\n | GraphQLList<GraphQLScalarType>\n | GraphQLScalarType\n let type: PayloadGraphQLRelationshipType\n\n if (Array.isArray(relationTo)) {\n const fullName = `${combineParentName(\n parentName,\n toWords(field.name, true),\n )}RelationshipInput`\n type = new GraphQLInputObjectType({\n name: fullName,\n fields: {\n relationTo: {\n type: new GraphQLEnumType({\n name: `${fullName}RelationTo`,\n values: relationTo.reduce(\n (values, option) => ({\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }),\n {},\n ),\n }),\n },\n value: { type: GraphQLJSON },\n },\n })\n } else {\n type = getCollectionIDType(\n config.db.defaultIDType,\n graphqlResult.collections[relationTo].config,\n )\n }\n\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type: field.hasMany ? new GraphQLList(type) : type },\n }\n },\n richText: (inputObjectTypeConfig: InputObjectTypeConfig, field: RichTextField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLJSON, forceNullable) },\n }),\n row: (inputObjectTypeConfig: InputObjectTypeConfig, field: RowField) =>\n field.fields.reduce((acc, subField: Field) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField(acc, subField)\n }\n return acc\n }, inputObjectTypeConfig),\n select: (inputObjectTypeConfig: InputObjectTypeConfig, field: SelectField) => {\n const formattedName = `${combineParentName(parentName, field.name)}_MutationInput`\n let type: GraphQLType = new GraphQLEnumType({\n name: formattedName,\n values: field.options.reduce((values, option) => {\n if (optionIsObject(option)) {\n return {\n ...values,\n [formatName(option.value)]: {\n value: option.value,\n },\n }\n }\n\n return {\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }\n }, {}),\n })\n\n type = field.hasMany ? new GraphQLList(type) : type\n type = withNullableType(field, type, forceNullable)\n\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type },\n }\n },\n tabs: (inputObjectTypeConfig: InputObjectTypeConfig, field: TabsField) => {\n return field.tabs.reduce((acc, tab) => {\n if (tabHasName(tab)) {\n const fullName = combineParentName(parentName, toWords(tab.name, true))\n const requiresAtLeastOneField = groupOrTabHasRequiredSubfield(field)\n let type: GraphQLType = buildMutationInputType({\n name: fullName,\n config,\n fields: tab.fields,\n graphqlResult,\n parentName: fullName,\n })\n\n if (!type) {\n return acc\n }\n\n if (requiresAtLeastOneField) {\n type = new GraphQLNonNull(type)\n }\n return {\n ...acc,\n [tab.name]: { type },\n }\n }\n\n return {\n ...acc,\n ...tab.fields.reduce((subFieldSchema, subField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField(subFieldSchema, subField)\n }\n return subFieldSchema\n }, acc),\n }\n }, inputObjectTypeConfig)\n },\n text: (inputObjectTypeConfig: InputObjectTypeConfig, field: TextField) => ({\n ...inputObjectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n field.hasMany === true ? new GraphQLList(GraphQLString) : GraphQLString,\n forceNullable,\n ),\n },\n }),\n textarea: (inputObjectTypeConfig: InputObjectTypeConfig, field: TextareaField) => ({\n ...inputObjectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n upload: (inputObjectTypeConfig: InputObjectTypeConfig, field: UploadField) => {\n const { relationTo } = field\n type PayloadGraphQLRelationshipType =\n | GraphQLInputObjectType\n | GraphQLList<GraphQLScalarType>\n | GraphQLScalarType\n let type: PayloadGraphQLRelationshipType\n\n if (Array.isArray(relationTo)) {\n const fullName = `${combineParentName(\n parentName,\n toWords(field.name, true),\n )}RelationshipInput`\n type = new GraphQLInputObjectType({\n name: fullName,\n fields: {\n relationTo: {\n type: new GraphQLEnumType({\n name: `${fullName}RelationTo`,\n values: relationTo.reduce(\n (values, option) => ({\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }),\n {},\n ),\n }),\n },\n value: { type: GraphQLJSON },\n },\n })\n } else {\n type = getCollectionIDType(\n config.db.defaultIDType,\n graphqlResult.collections[relationTo].config,\n )\n }\n\n return {\n ...inputObjectTypeConfig,\n [field.name]: { type: field.hasMany ? new GraphQLList(type) : type },\n }\n },\n }\n\n const fieldName = formatName(name)\n\n const fieldSchemas = fields.reduce((inputObjectTypeConfig, field) => {\n const fieldSchema = fieldToSchemaMap[field.type]\n\n if (typeof fieldSchema !== 'function') {\n return inputObjectTypeConfig\n }\n\n const schema = fieldSchema(inputObjectTypeConfig, field)\n if (Object.keys(schema).length === 0) {\n return inputObjectTypeConfig\n }\n\n return {\n ...inputObjectTypeConfig,\n ...fieldSchema(inputObjectTypeConfig, field),\n }\n }, {})\n\n if (Object.keys(fieldSchemas).length === 0) {\n return null\n }\n\n return new GraphQLInputObjectType({\n name: `mutation${fieldName}Input`,\n fields: fieldSchemas,\n })\n}\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInputObjectType","GraphQLInt","GraphQLList","GraphQLNonNull","GraphQLString","flattenTopLevelFields","toWords","fieldAffectsData","optionIsObject","tabHasName","GraphQLJSON","combineParentName","formatName","groupOrTabHasRequiredSubfield","withNullableType","idFieldTypes","number","text","getCollectionIDType","type","collection","idField","fields","find","field","name","buildMutationInputType","config","forceNullable","graphqlResult","parentName","fieldToSchemaMap","array","inputObjectTypeConfig","fullName","blocks","checkbox","code","collapsible","reduce","acc","subField","addSubField","date","email","group","requiresAtLeastOneField","json","hasMany","point","radio","relationship","relationTo","Array","isArray","values","option","value","db","defaultIDType","collections","richText","row","select","formattedName","options","tabs","tab","subFieldSchema","textarea","upload","fieldName","fieldSchemas","fieldSchema","schema","Object","keys","length"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildObjectType.d.ts","sourceRoot":"","sources":["../../src/schema/buildObjectType.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAA;AAC9D,OAAO,KAAK,EAQV,KAAK,EACL,WAAW,EAUX,eAAe,EAMhB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAOL,iBAAiB,EAGlB,MAAM,SAAS,CAAA;AA2BhB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CAC7C,CAAA;AAED,KAAK,IAAI,GAAG;IACV,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,WAAW,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,UAAe,EACf,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,GACX,EAAE,IAAI,GAAG,iBAAiB,CAgmB1B"}
1
+ {"version":3,"file":"buildObjectType.d.ts","sourceRoot":"","sources":["../../src/schema/buildObjectType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAA;AAC9D,OAAO,KAAK,EAQV,KAAK,EACL,WAAW,EAWX,eAAe,EAMhB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAOL,iBAAiB,EAGlB,MAAM,SAAS,CAAA;AAchB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CAC7C,CAAA;AAED,KAAK,IAAI,GAAG;IACV,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,WAAW,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,UAAe,EACf,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,GACX,EAAE,IAAI,GAAG,iBAAiB,CAwzB1B"}
@@ -1,14 +1,13 @@
1
- /* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-restricted-syntax */ import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
1
+ import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
2
2
  import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars';
3
- import { MissingEditorProp, createDataloaderCacheKey, toWords } from 'payload';
3
+ import { combineQueries, createDataloaderCacheKey, MissingEditorProp, toWords } from 'payload';
4
4
  import { tabHasName } from 'payload/shared';
5
5
  import { GraphQLJSON } from '../packages/graphql-type-json/index.js';
6
- import combineParentName from '../utilities/combineParentName.js';
7
- import formatName from '../utilities/formatName.js';
8
- import formatOptions from '../utilities/formatOptions.js';
9
- import buildWhereInputType from './buildWhereInputType.js';
10
- import isFieldNullable from './isFieldNullable.js';
11
- import withNullableType from './withNullableType.js';
6
+ import { combineParentName } from '../utilities/combineParentName.js';
7
+ import { formatName } from '../utilities/formatName.js';
8
+ import { formatOptions } from '../utilities/formatOptions.js';
9
+ import { isFieldNullable } from './isFieldNullable.js';
10
+ import { withNullableType } from './withNullableType.js';
12
11
  export function buildObjectType({ name, baseFields = {}, config, fields, forceNullable, graphqlResult, parentName }) {
13
12
  const fieldToSchemaMap = {
14
13
  array: (objectTypeConfig, field)=>{
@@ -94,7 +93,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
94
93
  }),
95
94
  collapsible: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField)=>{
96
95
  const addSubField = fieldToSchemaMap[subField.type];
97
- if (addSubField) return addSubField(objectTypeConfigWithCollapsibleFields, subField);
96
+ if (addSubField) {
97
+ return addSubField(objectTypeConfigWithCollapsibleFields, subField);
98
+ }
98
99
  return objectTypeConfigWithCollapsibleFields;
99
100
  }, objectTypeConfig),
100
101
  date: (objectTypeConfig, field)=>({
@@ -130,10 +131,71 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
130
131
  return {
131
132
  ...objectTypeConfig,
132
133
  [field.name]: {
133
- type: graphqlResult.types.groupTypes[interfaceName]
134
+ type: graphqlResult.types.groupTypes[interfaceName],
135
+ resolve: (parent, args, context)=>{
136
+ return {
137
+ ...parent[field.name],
138
+ _id: parent._id ?? parent.id
139
+ };
140
+ }
134
141
  }
135
142
  };
136
143
  },
144
+ join: (objectTypeConfig, field)=>{
145
+ const joinName = combineParentName(parentName, toWords(field.name, true));
146
+ const joinType = {
147
+ type: new GraphQLObjectType({
148
+ name: joinName,
149
+ fields: {
150
+ docs: {
151
+ type: new GraphQLList(graphqlResult.collections[field.collection].graphQL.type)
152
+ },
153
+ hasNextPage: {
154
+ type: GraphQLBoolean
155
+ }
156
+ }
157
+ }),
158
+ args: {
159
+ limit: {
160
+ type: GraphQLInt
161
+ },
162
+ sort: {
163
+ type: GraphQLString
164
+ },
165
+ where: {
166
+ type: graphqlResult.collections[field.collection].graphQL.whereInputType
167
+ }
168
+ },
169
+ extensions: {
170
+ complexity: 10
171
+ },
172
+ async resolve (parent, args, context) {
173
+ const { collection } = field;
174
+ const { limit, sort, where } = args;
175
+ const { req } = context;
176
+ const fullWhere = combineQueries(where, {
177
+ [field.on]: {
178
+ equals: parent._id ?? parent.id
179
+ }
180
+ });
181
+ const results = await req.payload.find({
182
+ collection,
183
+ depth: 0,
184
+ fallbackLocale: req.fallbackLocale,
185
+ limit,
186
+ locale: req.locale,
187
+ req,
188
+ sort,
189
+ where: fullWhere
190
+ });
191
+ return results;
192
+ }
193
+ };
194
+ return {
195
+ ...objectTypeConfig,
196
+ [field.name]: joinType
197
+ };
198
+ },
137
199
  json: (objectTypeConfig, field)=>({
138
200
  ...objectTypeConfig,
139
201
  [field.name]: {
@@ -171,17 +233,19 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
171
233
  const relationshipName = combineParentName(parentName, toWords(field.name, true));
172
234
  let type;
173
235
  let relationToType = null;
236
+ const graphQLCollections = config.collections.filter((collectionConfig)=>collectionConfig.graphQL !== false);
174
237
  if (Array.isArray(relationTo)) {
175
238
  relationToType = new GraphQLEnumType({
176
239
  name: `${relationshipName}_RelationTo`,
177
- values: relationTo.reduce((relations, relation)=>({
240
+ values: relationTo.filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).reduce((relations, relation)=>({
178
241
  ...relations,
179
242
  [formatName(relation)]: {
180
243
  value: relation
181
244
  }
182
245
  }), {})
183
246
  });
184
- const types = relationTo.map((relation)=>graphqlResult.collections[relation].graphQL.type);
247
+ // Only pass collections that are GraphQL enabled
248
+ const types = relationTo.filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).map((relation)=>graphqlResult.collections[relation]?.graphQL.type);
185
249
  type = new GraphQLObjectType({
186
250
  name: `${relationshipName}_Relationship`,
187
251
  fields: {
@@ -191,7 +255,7 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
191
255
  value: {
192
256
  type: new GraphQLUnionType({
193
257
  name: relationshipName,
194
- resolveType (data, { req }) {
258
+ resolveType (data) {
195
259
  return graphqlResult.collections[data.collection].graphQL.type.name;
196
260
  },
197
261
  types
@@ -210,7 +274,7 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
210
274
  const relationshipArgs = {};
211
275
  const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [
212
276
  relationTo
213
- ]).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
277
+ ]).filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
214
278
  if (relationsUseDrafts) {
215
279
  relationshipArgs.draft = {
216
280
  type: GraphQLBoolean
@@ -242,33 +306,35 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
242
306
  const createPopulationPromise = async (relatedDoc, i)=>{
243
307
  let id = relatedDoc;
244
308
  let collectionSlug = field.relationTo;
245
- if (isRelatedToManyCollections) {
246
- collectionSlug = relatedDoc.relationTo;
247
- id = relatedDoc.value;
248
- }
249
- const result = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
250
- collectionSlug: collectionSlug,
251
- currentDepth: 0,
252
- depth: 0,
253
- docID: id,
254
- draft,
255
- fallbackLocale,
256
- locale,
257
- overrideAccess: false,
258
- showHiddenFields: false,
259
- transactionID: context.req.transactionID
260
- }));
261
- if (result) {
309
+ if (graphQLCollections.some((collection)=>collection.slug === collectionSlug)) {
262
310
  if (isRelatedToManyCollections) {
263
- results[i] = {
264
- relationTo: collectionSlug,
265
- value: {
266
- ...result,
267
- collection: collectionSlug
268
- }
269
- };
270
- } else {
271
- results[i] = result;
311
+ collectionSlug = relatedDoc.relationTo;
312
+ id = relatedDoc.value;
313
+ }
314
+ const result = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
315
+ collectionSlug: collectionSlug,
316
+ currentDepth: 0,
317
+ depth: 0,
318
+ docID: id,
319
+ draft,
320
+ fallbackLocale,
321
+ locale,
322
+ overrideAccess: false,
323
+ showHiddenFields: false,
324
+ transactionID: context.req.transactionID
325
+ }));
326
+ if (result) {
327
+ if (isRelatedToManyCollections) {
328
+ results[i] = {
329
+ relationTo: collectionSlug,
330
+ value: {
331
+ ...result,
332
+ collection: collectionSlug
333
+ }
334
+ };
335
+ } else {
336
+ results[i] = result;
337
+ }
272
338
  }
273
339
  }
274
340
  };
@@ -286,29 +352,31 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
286
352
  relatedCollectionSlug = value.relationTo;
287
353
  }
288
354
  if (id) {
289
- const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
290
- collectionSlug: relatedCollectionSlug,
291
- currentDepth: 0,
292
- depth: 0,
293
- docID: id,
294
- draft,
295
- fallbackLocale,
296
- locale,
297
- overrideAccess: false,
298
- showHiddenFields: false,
299
- transactionID: context.req.transactionID
300
- }));
301
- if (relatedDocument) {
302
- if (isRelatedToManyCollections) {
303
- return {
304
- relationTo: relatedCollectionSlug,
305
- value: {
306
- ...relatedDocument,
307
- collection: relatedCollectionSlug
308
- }
309
- };
355
+ if (graphQLCollections.some((collection)=>collection.slug === relatedCollectionSlug)) {
356
+ const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
357
+ collectionSlug: relatedCollectionSlug,
358
+ currentDepth: 0,
359
+ depth: 0,
360
+ docID: id,
361
+ draft,
362
+ fallbackLocale,
363
+ locale,
364
+ overrideAccess: false,
365
+ showHiddenFields: false,
366
+ transactionID: context.req.transactionID
367
+ }));
368
+ if (relatedDocument) {
369
+ if (isRelatedToManyCollections) {
370
+ return {
371
+ relationTo: relatedCollectionSlug,
372
+ value: {
373
+ ...relatedDocument,
374
+ collection: relatedCollectionSlug
375
+ }
376
+ };
377
+ }
378
+ return relatedDocument;
310
379
  }
311
- return relatedDocument;
312
380
  }
313
381
  return null;
314
382
  }
@@ -331,7 +399,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
331
399
  },
332
400
  async resolve (parent, args, context) {
333
401
  let depth = config.defaultDepth;
334
- if (typeof args.depth !== 'undefined') depth = args.depth;
402
+ if (typeof args.depth !== 'undefined') {
403
+ depth = args.depth;
404
+ }
335
405
  if (!field?.editor) {
336
406
  throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
337
407
  ;
@@ -372,7 +442,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
372
442
  }),
373
443
  row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
374
444
  const addSubField = fieldToSchemaMap[subField.type];
375
- if (addSubField) return addSubField(objectTypeConfigWithRowFields, subField);
445
+ if (addSubField) {
446
+ return addSubField(objectTypeConfigWithRowFields, subField);
447
+ }
376
448
  return objectTypeConfigWithRowFields;
377
449
  }, objectTypeConfig),
378
450
  select: (objectTypeConfig, field)=>{
@@ -412,7 +484,13 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
412
484
  return {
413
485
  ...tabSchema,
414
486
  [tab.name]: {
415
- type: graphqlResult.types.groupTypes[interfaceName]
487
+ type: graphqlResult.types.groupTypes[interfaceName],
488
+ resolve (parent, args, context) {
489
+ return {
490
+ ...parent[tab.name],
491
+ _id: parent._id ?? parent.id
492
+ };
493
+ }
416
494
  }
417
495
  };
418
496
  }
@@ -420,7 +498,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
420
498
  ...tabSchema,
421
499
  ...tab.fields.reduce((subFieldSchema, subField)=>{
422
500
  const addSubField = fieldToSchemaMap[subField.type];
423
- if (addSubField) return addSubField(subFieldSchema, subField);
501
+ if (addSubField) {
502
+ return addSubField(subFieldSchema, subField);
503
+ }
424
504
  return subFieldSchema;
425
505
  }, tabSchema)
426
506
  };
@@ -439,34 +519,125 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
439
519
  }),
440
520
  upload: (objectTypeConfig, field)=>{
441
521
  const { relationTo } = field;
442
- const uploadName = combineParentName(parentName, toWords(field.name, true));
522
+ const isRelatedToManyCollections = Array.isArray(relationTo);
523
+ const hasManyValues = field.hasMany;
524
+ const relationshipName = combineParentName(parentName, toWords(field.name, true));
525
+ let type;
526
+ let relationToType = null;
527
+ if (Array.isArray(relationTo)) {
528
+ relationToType = new GraphQLEnumType({
529
+ name: `${relationshipName}_RelationTo`,
530
+ values: relationTo.reduce((relations, relation)=>({
531
+ ...relations,
532
+ [formatName(relation)]: {
533
+ value: relation
534
+ }
535
+ }), {})
536
+ });
537
+ const types = relationTo.map((relation)=>graphqlResult.collections[relation].graphQL.type);
538
+ type = new GraphQLObjectType({
539
+ name: `${relationshipName}_Relationship`,
540
+ fields: {
541
+ relationTo: {
542
+ type: relationToType
543
+ },
544
+ value: {
545
+ type: new GraphQLUnionType({
546
+ name: relationshipName,
547
+ resolveType (data) {
548
+ return graphqlResult.collections[data.collection].graphQL.type.name;
549
+ },
550
+ types
551
+ })
552
+ }
553
+ }
554
+ });
555
+ } else {
556
+ ({ type } = graphqlResult.collections[relationTo].graphQL);
557
+ }
443
558
  // If the relationshipType is undefined at this point,
444
559
  // it can be assumed that this blockType can have a relationship
445
560
  // to itself. Therefore, we set the relationshipType equal to the blockType
446
561
  // that is currently being created.
447
- const type = withNullableType(field, graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType, forceNullable);
448
- const uploadArgs = {};
562
+ type = type || newlyCreatedBlockType;
563
+ const relationshipArgs = {};
564
+ const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [
565
+ relationTo
566
+ ]).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
567
+ if (relationsUseDrafts) {
568
+ relationshipArgs.draft = {
569
+ type: GraphQLBoolean
570
+ };
571
+ }
449
572
  if (config.localization) {
450
- uploadArgs.locale = {
573
+ relationshipArgs.locale = {
451
574
  type: graphqlResult.types.localeInputType
452
575
  };
453
- uploadArgs.fallbackLocale = {
576
+ relationshipArgs.fallbackLocale = {
454
577
  type: graphqlResult.types.fallbackLocaleInputType
455
578
  };
456
579
  }
457
- const relatedCollectionSlug = field.relationTo;
458
- const upload = {
459
- type,
460
- args: uploadArgs,
580
+ const relationship = {
581
+ type: withNullableType(field, hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type, forceNullable),
582
+ args: relationshipArgs,
461
583
  extensions: {
462
- complexity: 20
584
+ complexity: 10
463
585
  },
464
586
  async resolve (parent, args, context) {
465
587
  const value = parent[field.name];
466
588
  const locale = args.locale || context.req.locale;
467
589
  const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
468
- const id = value;
590
+ let relatedCollectionSlug = field.relationTo;
469
591
  const draft = Boolean(args.draft ?? context.req.query?.draft);
592
+ if (hasManyValues) {
593
+ const results = [];
594
+ const resultPromises = [];
595
+ const createPopulationPromise = async (relatedDoc, i)=>{
596
+ let id = relatedDoc;
597
+ let collectionSlug = field.relationTo;
598
+ if (isRelatedToManyCollections) {
599
+ collectionSlug = relatedDoc.relationTo;
600
+ id = relatedDoc.value;
601
+ }
602
+ const result = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
603
+ collectionSlug,
604
+ currentDepth: 0,
605
+ depth: 0,
606
+ docID: id,
607
+ draft,
608
+ fallbackLocale,
609
+ locale,
610
+ overrideAccess: false,
611
+ showHiddenFields: false,
612
+ transactionID: context.req.transactionID
613
+ }));
614
+ if (result) {
615
+ if (isRelatedToManyCollections) {
616
+ results[i] = {
617
+ relationTo: collectionSlug,
618
+ value: {
619
+ ...result,
620
+ collection: collectionSlug
621
+ }
622
+ };
623
+ } else {
624
+ results[i] = result;
625
+ }
626
+ }
627
+ };
628
+ if (value) {
629
+ value.forEach((relatedDoc, i)=>{
630
+ resultPromises.push(createPopulationPromise(relatedDoc, i));
631
+ });
632
+ }
633
+ await Promise.all(resultPromises);
634
+ return results;
635
+ }
636
+ let id = value;
637
+ if (isRelatedToManyCollections && value) {
638
+ id = value.value;
639
+ relatedCollectionSlug = value.relationTo;
640
+ }
470
641
  if (id) {
471
642
  const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
472
643
  collectionSlug: relatedCollectionSlug,
@@ -480,22 +651,26 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
480
651
  showHiddenFields: false,
481
652
  transactionID: context.req.transactionID
482
653
  }));
483
- return relatedDocument || null;
654
+ if (relatedDocument) {
655
+ if (isRelatedToManyCollections) {
656
+ return {
657
+ relationTo: relatedCollectionSlug,
658
+ value: {
659
+ ...relatedDocument,
660
+ collection: relatedCollectionSlug
661
+ }
662
+ };
663
+ }
664
+ return relatedDocument;
665
+ }
666
+ return null;
484
667
  }
485
668
  return null;
486
669
  }
487
670
  };
488
- const whereFields = graphqlResult.collections[relationTo].config.fields;
489
- upload.args.where = {
490
- type: buildWhereInputType({
491
- name: uploadName,
492
- fields: whereFields,
493
- parentName: uploadName
494
- })
495
- };
496
671
  return {
497
672
  ...objectTypeConfig,
498
- [field.name]: upload
673
+ [field.name]: relationship
499
674
  };
500
675
  }
501
676
  };