@payloadcms/graphql 3.0.0-canary.3ab8665 → 3.0.0-canary.3eda767

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 (236) hide show
  1. package/bin.js +51 -2
  2. package/dist/bin/generateSchema.d.ts +1 -1
  3. package/dist/bin/generateSchema.d.ts.map +1 -1
  4. package/dist/bin/generateSchema.js +1 -1
  5. package/dist/bin/generateSchema.js.map +1 -1
  6. package/dist/bin/index.js +2 -2
  7. package/dist/bin/index.js.map +1 -1
  8. package/dist/exports/types.d.ts +4 -0
  9. package/dist/exports/types.d.ts.map +1 -0
  10. package/dist/exports/types.js +5 -0
  11. package/dist/exports/types.js.map +1 -0
  12. package/dist/exports/utilities.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +9 -9
  16. package/dist/index.js.map +1 -1
  17. package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts +2 -2
  18. package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts.map +1 -1
  19. package/dist/packages/graphql-query-complexity/QueryComplexity.js +4 -4
  20. package/dist/packages/graphql-query-complexity/QueryComplexity.js.map +1 -1
  21. package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts +1 -1
  22. package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts.map +1 -1
  23. package/dist/packages/graphql-query-complexity/createComplexityRule.js +1 -1
  24. package/dist/packages/graphql-query-complexity/createComplexityRule.js.map +1 -1
  25. package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.js.map +1 -1
  26. package/dist/packages/graphql-query-complexity/estimators/simple/index.js.map +1 -1
  27. package/dist/packages/graphql-query-complexity/index.js.map +1 -1
  28. package/dist/packages/graphql-type-json/index.d.ts.map +1 -1
  29. package/dist/packages/graphql-type-json/index.js +0 -1
  30. package/dist/packages/graphql-type-json/index.js.map +1 -1
  31. package/dist/resolvers/auth/access.d.ts +2 -3
  32. package/dist/resolvers/auth/access.d.ts.map +1 -1
  33. package/dist/resolvers/auth/access.js +3 -5
  34. package/dist/resolvers/auth/access.js.map +1 -1
  35. package/dist/resolvers/auth/forgotPassword.d.ts +2 -3
  36. package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -1
  37. package/dist/resolvers/auth/forgotPassword.js +4 -5
  38. package/dist/resolvers/auth/forgotPassword.js.map +1 -1
  39. package/dist/resolvers/auth/init.d.ts +1 -2
  40. package/dist/resolvers/auth/init.d.ts.map +1 -1
  41. package/dist/resolvers/auth/init.js +2 -4
  42. package/dist/resolvers/auth/init.js.map +1 -1
  43. package/dist/resolvers/auth/login.d.ts +2 -3
  44. package/dist/resolvers/auth/login.d.ts.map +1 -1
  45. package/dist/resolvers/auth/login.js +6 -8
  46. package/dist/resolvers/auth/login.js.map +1 -1
  47. package/dist/resolvers/auth/logout.d.ts +2 -3
  48. package/dist/resolvers/auth/logout.d.ts.map +1 -1
  49. package/dist/resolvers/auth/logout.js +5 -7
  50. package/dist/resolvers/auth/logout.js.map +1 -1
  51. package/dist/resolvers/auth/me.d.ts +2 -3
  52. package/dist/resolvers/auth/me.d.ts.map +1 -1
  53. package/dist/resolvers/auth/me.js +4 -4
  54. package/dist/resolvers/auth/me.js.map +1 -1
  55. package/dist/resolvers/auth/refresh.d.ts +2 -3
  56. package/dist/resolvers/auth/refresh.d.ts.map +1 -1
  57. package/dist/resolvers/auth/refresh.js +6 -15
  58. package/dist/resolvers/auth/refresh.js.map +1 -1
  59. package/dist/resolvers/auth/resetPassword.d.ts +2 -3
  60. package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
  61. package/dist/resolvers/auth/resetPassword.js +10 -9
  62. package/dist/resolvers/auth/resetPassword.js.map +1 -1
  63. package/dist/resolvers/auth/unlock.d.ts +2 -3
  64. package/dist/resolvers/auth/unlock.d.ts.map +1 -1
  65. package/dist/resolvers/auth/unlock.js +4 -5
  66. package/dist/resolvers/auth/unlock.js.map +1 -1
  67. package/dist/resolvers/auth/verifyEmail.d.ts +2 -3
  68. package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
  69. package/dist/resolvers/auth/verifyEmail.js +8 -6
  70. package/dist/resolvers/auth/verifyEmail.js.map +1 -1
  71. package/dist/resolvers/collections/count.d.ts +2 -3
  72. package/dist/resolvers/collections/count.d.ts.map +1 -1
  73. package/dist/resolvers/collections/count.js +1 -2
  74. package/dist/resolvers/collections/count.js.map +1 -1
  75. package/dist/resolvers/collections/create.d.ts +6 -9
  76. package/dist/resolvers/collections/create.d.ts.map +1 -1
  77. package/dist/resolvers/collections/create.js +2 -3
  78. package/dist/resolvers/collections/create.js.map +1 -1
  79. package/dist/resolvers/collections/delete.d.ts +5 -7
  80. package/dist/resolvers/collections/delete.d.ts.map +1 -1
  81. package/dist/resolvers/collections/delete.js +7 -4
  82. package/dist/resolvers/collections/delete.js.map +1 -1
  83. package/dist/resolvers/collections/docAccess.d.ts +2 -3
  84. package/dist/resolvers/collections/docAccess.d.ts.map +1 -1
  85. package/dist/resolvers/collections/docAccess.js +1 -2
  86. package/dist/resolvers/collections/docAccess.js.map +1 -1
  87. package/dist/resolvers/collections/duplicate.d.ts +5 -7
  88. package/dist/resolvers/collections/duplicate.d.ts.map +1 -1
  89. package/dist/resolvers/collections/duplicate.js +2 -3
  90. package/dist/resolvers/collections/duplicate.js.map +1 -1
  91. package/dist/resolvers/collections/find.d.ts +2 -4
  92. package/dist/resolvers/collections/find.d.ts.map +1 -1
  93. package/dist/resolvers/collections/find.js +13 -7
  94. package/dist/resolvers/collections/find.js.map +1 -1
  95. package/dist/resolvers/collections/findByID.d.ts +5 -7
  96. package/dist/resolvers/collections/findByID.d.ts.map +1 -1
  97. package/dist/resolvers/collections/findByID.js +7 -4
  98. package/dist/resolvers/collections/findByID.js.map +1 -1
  99. package/dist/resolvers/collections/findVersionByID.d.ts +2 -4
  100. package/dist/resolvers/collections/findVersionByID.d.ts.map +1 -1
  101. package/dist/resolvers/collections/findVersionByID.js +1 -2
  102. package/dist/resolvers/collections/findVersionByID.js.map +1 -1
  103. package/dist/resolvers/collections/findVersions.d.ts +2 -4
  104. package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
  105. package/dist/resolvers/collections/findVersions.js +7 -4
  106. package/dist/resolvers/collections/findVersions.js.map +1 -1
  107. package/dist/resolvers/collections/restoreVersion.d.ts +4 -4
  108. package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -1
  109. package/dist/resolvers/collections/restoreVersion.js +3 -3
  110. package/dist/resolvers/collections/restoreVersion.js.map +1 -1
  111. package/dist/resolvers/collections/update.d.ts +6 -8
  112. package/dist/resolvers/collections/update.d.ts.map +1 -1
  113. package/dist/resolvers/collections/update.js +7 -4
  114. package/dist/resolvers/collections/update.js.map +1 -1
  115. package/dist/resolvers/globals/docAccess.d.ts +2 -3
  116. package/dist/resolvers/globals/docAccess.d.ts.map +1 -1
  117. package/dist/resolvers/globals/docAccess.js +1 -2
  118. package/dist/resolvers/globals/docAccess.js.map +1 -1
  119. package/dist/resolvers/globals/findOne.d.ts +2 -2
  120. package/dist/resolvers/globals/findOne.d.ts.map +1 -1
  121. package/dist/resolvers/globals/findOne.js +8 -5
  122. package/dist/resolvers/globals/findOne.js.map +1 -1
  123. package/dist/resolvers/globals/findVersionByID.d.ts +3 -3
  124. package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -1
  125. package/dist/resolvers/globals/findVersionByID.js +8 -5
  126. package/dist/resolvers/globals/findVersionByID.js.map +1 -1
  127. package/dist/resolvers/globals/findVersions.d.ts +3 -3
  128. package/dist/resolvers/globals/findVersions.d.ts.map +1 -1
  129. package/dist/resolvers/globals/findVersions.js +2 -3
  130. package/dist/resolvers/globals/findVersions.js.map +1 -1
  131. package/dist/resolvers/globals/index.d.ts +5 -5
  132. package/dist/resolvers/globals/index.d.ts.map +1 -1
  133. package/dist/resolvers/globals/index.js +5 -5
  134. package/dist/resolvers/globals/index.js.map +1 -1
  135. package/dist/resolvers/globals/restoreVersion.d.ts +4 -3
  136. package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -1
  137. package/dist/resolvers/globals/restoreVersion.js +3 -3
  138. package/dist/resolvers/globals/restoreVersion.js.map +1 -1
  139. package/dist/resolvers/globals/update.d.ts +6 -7
  140. package/dist/resolvers/globals/update.d.ts.map +1 -1
  141. package/dist/resolvers/globals/update.js +8 -5
  142. package/dist/resolvers/globals/update.js.map +1 -1
  143. package/dist/resolvers/types.d.ts +2 -2
  144. package/dist/resolvers/types.d.ts.map +1 -1
  145. package/dist/resolvers/types.js.map +1 -1
  146. package/dist/schema/buildFallbackLocaleInputType.d.ts +2 -3
  147. package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -1
  148. package/dist/schema/buildFallbackLocaleInputType.js +2 -3
  149. package/dist/schema/buildFallbackLocaleInputType.js.map +1 -1
  150. package/dist/schema/buildLocaleInputType.d.ts +2 -3
  151. package/dist/schema/buildLocaleInputType.d.ts.map +1 -1
  152. package/dist/schema/buildLocaleInputType.js +2 -3
  153. package/dist/schema/buildLocaleInputType.js.map +1 -1
  154. package/dist/schema/buildMutationInputType.d.ts +1 -2
  155. package/dist/schema/buildMutationInputType.d.ts.map +1 -1
  156. package/dist/schema/buildMutationInputType.js +60 -17
  157. package/dist/schema/buildMutationInputType.js.map +1 -1
  158. package/dist/schema/buildObjectType.d.ts +1 -2
  159. package/dist/schema/buildObjectType.d.ts.map +1 -1
  160. package/dist/schema/buildObjectType.js +267 -88
  161. package/dist/schema/buildObjectType.js.map +1 -1
  162. package/dist/schema/buildPaginatedListType.d.ts +1 -2
  163. package/dist/schema/buildPaginatedListType.d.ts.map +1 -1
  164. package/dist/schema/buildPaginatedListType.js +1 -2
  165. package/dist/schema/buildPaginatedListType.js.map +1 -1
  166. package/dist/schema/buildPoliciesType.d.ts +2 -2
  167. package/dist/schema/buildPoliciesType.d.ts.map +1 -1
  168. package/dist/schema/buildPoliciesType.js +6 -4
  169. package/dist/schema/buildPoliciesType.js.map +1 -1
  170. package/dist/schema/buildWhereInputType.d.ts +3 -3
  171. package/dist/schema/buildWhereInputType.d.ts.map +1 -1
  172. package/dist/schema/buildWhereInputType.js +6 -7
  173. package/dist/schema/buildWhereInputType.js.map +1 -1
  174. package/dist/schema/fieldToWhereInputSchemaMap.d.ts +2 -2
  175. package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -1
  176. package/dist/schema/fieldToWhereInputSchemaMap.js +31 -7
  177. package/dist/schema/fieldToWhereInputSchemaMap.js.map +1 -1
  178. package/dist/schema/initCollections.d.ts +3 -4
  179. package/dist/schema/initCollections.d.ts.map +1 -1
  180. package/dist/schema/initCollections.js +51 -42
  181. package/dist/schema/initCollections.js.map +1 -1
  182. package/dist/schema/initGlobals.d.ts +3 -4
  183. package/dist/schema/initGlobals.d.ts.map +1 -1
  184. package/dist/schema/initGlobals.js +26 -20
  185. package/dist/schema/initGlobals.js.map +1 -1
  186. package/dist/schema/isFieldNullable.d.ts +2 -3
  187. package/dist/schema/isFieldNullable.d.ts.map +1 -1
  188. package/dist/schema/isFieldNullable.js +2 -3
  189. package/dist/schema/isFieldNullable.js.map +1 -1
  190. package/dist/schema/operators.d.ts +1 -2
  191. package/dist/schema/operators.d.ts.map +1 -1
  192. package/dist/schema/operators.js +1 -2
  193. package/dist/schema/operators.js.map +1 -1
  194. package/dist/schema/recursivelyBuildNestedPaths.d.ts +3 -3
  195. package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -1
  196. package/dist/schema/recursivelyBuildNestedPaths.js +3 -4
  197. package/dist/schema/recursivelyBuildNestedPaths.js.map +1 -1
  198. package/dist/schema/withNullableType.d.ts +2 -3
  199. package/dist/schema/withNullableType.d.ts.map +1 -1
  200. package/dist/schema/withNullableType.js +1 -2
  201. package/dist/schema/withNullableType.js.map +1 -1
  202. package/dist/schema/withOperators.d.ts +1 -1
  203. package/dist/schema/withOperators.d.ts.map +1 -1
  204. package/dist/schema/withOperators.js +12 -7
  205. package/dist/schema/withOperators.js.map +1 -1
  206. package/dist/utilities/combineParentName.d.ts +1 -2
  207. package/dist/utilities/combineParentName.d.ts.map +1 -1
  208. package/dist/utilities/combineParentName.js +2 -3
  209. package/dist/utilities/combineParentName.js.map +1 -1
  210. package/dist/utilities/formatName.d.ts +1 -2
  211. package/dist/utilities/formatName.d.ts.map +1 -1
  212. package/dist/utilities/formatName.js +1 -2
  213. package/dist/utilities/formatName.js.map +1 -1
  214. package/dist/utilities/formatName.spec.js +1 -1
  215. package/dist/utilities/formatName.spec.js.map +1 -1
  216. package/dist/utilities/formatOptions.d.ts +2 -3
  217. package/dist/utilities/formatOptions.d.ts.map +1 -1
  218. package/dist/utilities/formatOptions.js +2 -3
  219. package/dist/utilities/formatOptions.js.map +1 -1
  220. package/dist/utilities/groupOrTabHasRequiredSubfield.d.ts +1 -1
  221. package/dist/utilities/groupOrTabHasRequiredSubfield.d.ts.map +1 -1
  222. package/dist/utilities/groupOrTabHasRequiredSubfield.js +1 -1
  223. package/dist/utilities/groupOrTabHasRequiredSubfield.js.map +1 -1
  224. package/dist/utilities/wrapCustomResolver.d.ts +2 -2
  225. package/dist/utilities/wrapCustomResolver.d.ts.map +1 -1
  226. package/dist/utilities/wrapCustomResolver.js +1 -1
  227. package/dist/utilities/wrapCustomResolver.js.map +1 -1
  228. package/package.json +22 -14
  229. package/dist/utilities/getCheckIfLocaleObject.d.ts +0 -5
  230. package/dist/utilities/getCheckIfLocaleObject.d.ts.map +0 -1
  231. package/dist/utilities/getCheckIfLocaleObject.js +0 -3
  232. package/dist/utilities/getCheckIfLocaleObject.js.map +0 -1
  233. package/dist/utilities/uppercase.d.ts +0 -3
  234. package/dist/utilities/uppercase.d.ts.map +0 -1
  235. package/dist/utilities/uppercase.js +0 -11
  236. 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 { GraphQLInfo } from 'payload/config'\nimport type {\n ArrayField,\n BlockField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\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/types'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLString,\n} from 'graphql'\nimport { fieldAffectsData, optionIsObject, tabHasName } from 'payload/types'\nimport { toWords } from 'payload/utilities'\nimport { flattenTopLevelFields } from 'payload/utilities'\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","fieldAffectsData","optionIsObject","tabHasName","toWords","flattenTopLevelFields","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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AA4BA,SACEA,cAAc,EACdC,eAAe,EACfC,YAAY,EACZC,sBAAsB,EACtBC,UAAU,EACVC,WAAW,EACXC,cAAc,EACdC,aAAa,QACR,UAAS;AAChB,SAASC,gBAAgB,EAAEC,cAAc,EAAEC,UAAU,QAAQ,gBAAe;AAC5E,SAASC,OAAO,QAAQ,oBAAmB;AAC3C,SAASC,qBAAqB,QAAQ,oBAAmB;AAEzD,SAASC,WAAW,QAAQ,yCAAwC;AACpE,OAAOC,uBAAuB,oCAAmC;AACjE,OAAOC,gBAAgB,6BAA4B;AACnD,SAASC,6BAA6B,QAAQ,gDAA+C;AAC7F,OAAOC,sBAAsB,wBAAuB;AAEpD,MAAMC,eAAe;IACnBC,QAAQf;IACRgB,MAAMb;AACR;AAEA,OAAO,MAAMc,sBAAsB,CACjCC,MACAC;IAEA,MAAMC,UAAUZ,sBAAsBW,WAAWE,MAAM,EAAEC,IAAI,CAC3D,CAACC,QAAUnB,iBAAiBmB,UAAUA,MAAMC,IAAI,KAAK;IAGvD,IAAI,CAACJ,SAAS;QACZ,OAAON,YAAY,CAACI,KAAK;IAC3B;IAEA,OAAOJ,YAAY,CAACM,QAAQF,IAAI,CAAC;AACnC,EAAC;AAeD,OAAO,SAASO,uBAAuB,EACrCD,IAAI,EACJE,MAAM,EACNL,MAAM,EACNM,gBAAgB,KAAK,EACrBC,aAAa,EACbC,UAAU,EACiB;IAC3B,MAAMC,mBAAmB;QACvBC,OAAO,CAACC,uBAA8CT;YACpD,MAAMU,WAAWvB,kBAAkBmB,YAAYtB,QAAQgB,MAAMC,IAAI,EAAE;YACnE,IAAIN,OAA+CO,uBAAuB;gBACxED,MAAMS;gBACNP;gBACAL,QAAQE,MAAMF,MAAM;gBACpBO;gBACAC,YAAYI;YACd;YAEA,IAAI,CAACf,MAAM,OAAOc;YAElBd,OAAO,IAAIjB,YAAYY,iBAAiBU,OAAOL,MAAMS;YACrD,OAAO;gBACL,GAAGK,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN;gBAAK;YACvB;QACF;QACAgB,QAAQ,CAACF,uBAA8CT,QAAuB,CAAA;gBAC5E,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAMT;gBAAY;YACpC,CAAA;QACA0B,UAAU,CAACH,uBAA8CT,QAA0B,CAAA;gBACjF,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAMtB;gBAAe;YACvC,CAAA;QACAwC,MAAM,CAACJ,uBAA8CT,QAAsB,CAAA;gBACzE,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOpB,eAAewB;gBAAe;YAC9E,CAAA;QACAU,aAAa,CAACL,uBAA8CT,QAC1DA,MAAMF,MAAM,CAACiB,MAAM,CAAC,CAACC,KAAKC;gBACxB,MAAMC,cAAcX,gBAAgB,CAACU,SAAStB,IAAI,CAAC;gBACnD,IAAIuB,aAAa,OAAOA,YAAYF,KAAKC;gBACzC,OAAOD;YACT,GAAGP;QACLU,MAAM,CAACV,uBAA8CT,QAAsB,CAAA;gBACzE,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOpB,eAAewB;gBAAe;YAC9E,CAAA;QACAgB,OAAO,CAACX,uBAA8CT,QAAuB,CAAA;gBAC3E,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOpB,eAAewB;gBAAe;YAC9E,CAAA;QACAiB,OAAO,CAACZ,uBAA8CT;YACpD,MAAMsB,0BAA0BjC,8BAA8BW;YAC9D,MAAMU,WAAWvB,kBAAkBmB,YAAYtB,QAAQgB,MAAMC,IAAI,EAAE;YACnE,IAAIN,OAAoBO,uBAAuB;gBAC7CD,MAAMS;gBACNP;gBACAL,QAAQE,MAAMF,MAAM;gBACpBO;gBACAC,YAAYI;YACd;YAEA,IAAI,CAACf,MAAM,OAAOc;YAElB,IAAIa,yBAAyB3B,OAAO,IAAIhB,eAAegB;YACvD,OAAO;gBACL,GAAGc,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN;gBAAK;YACvB;QACF;QACA4B,MAAM,CAACd,uBAA8CT,QAAsB,CAAA;gBACzE,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOd,aAAakB;gBAAe;YAC5E,CAAA;QACAZ,QAAQ,CAACiB,uBAA8CT;YACrD,MAAML,OAAOK,MAAMC,IAAI,KAAK,OAAOxB,aAAaF;YAChD,OAAO;gBACL,GAAGkC,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBACZN,MAAML,iBACJU,OACAA,MAAMwB,OAAO,KAAK,OAAO,IAAI9C,YAAYiB,QAAQA,MACjDS;gBAEJ;YACF;QACF;QACAqB,OAAO,CAAChB,uBAA8CT,QAAuB,CAAA;gBAC3E,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAO,IAAItB,YAAYH,eAAe6B;gBAAe;YAC9F,CAAA;QACAsB,OAAO,CAACjB,uBAA8CT,QAAuB,CAAA;gBAC3E,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOpB,eAAewB;gBAAe;YAC9E,CAAA;QACAuB,cAAc,CAAClB,uBAA8CT;YAC3D,MAAM,EAAE4B,UAAU,EAAE,GAAG5B;YAKvB,IAAIL;YAEJ,IAAIkC,MAAMC,OAAO,CAACF,aAAa;gBAC7B,MAAMlB,WAAW,CAAC,EAAEvB,kBAClBmB,YACAtB,QAAQgB,MAAMC,IAAI,EAAE,OACpB,iBAAiB,CAAC;gBACpBN,OAAO,IAAInB,uBAAuB;oBAChCyB,MAAMS;oBACNZ,QAAQ;wBACN8B,YAAY;4BACVjC,MAAM,IAAIrB,gBAAgB;gCACxB2B,MAAM,CAAC,EAAES,SAAS,UAAU,CAAC;gCAC7BqB,QAAQH,WAAWb,MAAM,CACvB,CAACgB,QAAQC,SAAY,CAAA;wCACnB,GAAGD,MAAM;wCACT,CAAC3C,WAAW4C,QAAQ,EAAE;4CACpBC,OAAOD;wCACT;oCACF,CAAA,GACA,CAAC;4BAEL;wBACF;wBACAC,OAAO;4BAAEtC,MAAMT;wBAAY;oBAC7B;gBACF;YACF,OAAO;gBACLS,OAAOD,oBACLS,OAAO+B,EAAE,CAACC,aAAa,EACvB9B,cAAc+B,WAAW,CAACR,WAAW,CAACzB,MAAM;YAEhD;YAEA,OAAO;gBACL,GAAGM,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAMK,MAAMwB,OAAO,GAAG,IAAI9C,YAAYiB,QAAQA;gBAAK;YACrE;QACF;QACA0C,UAAU,CAAC5B,uBAA8CT,QAA0B,CAAA;gBACjF,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOd,aAAakB;gBAAe;YAC5E,CAAA;QACAkC,KAAK,CAAC7B,uBAA8CT,QAClDA,MAAMF,MAAM,CAACiB,MAAM,CAAC,CAACC,KAAKC;gBACxB,MAAMC,cAAcX,gBAAgB,CAACU,SAAStB,IAAI,CAAC;gBACnD,IAAIuB,aAAa,OAAOA,YAAYF,KAAKC;gBACzC,OAAOD;YACT,GAAGP;QACL8B,QAAQ,CAAC9B,uBAA8CT;YACrD,MAAMwC,gBAAgB,CAAC,EAAErD,kBAAkBmB,YAAYN,MAAMC,IAAI,EAAE,cAAc,CAAC;YAClF,IAAIN,OAAoB,IAAIrB,gBAAgB;gBAC1C2B,MAAMuC;gBACNT,QAAQ/B,MAAMyC,OAAO,CAAC1B,MAAM,CAAC,CAACgB,QAAQC;oBACpC,IAAIlD,eAAekD,SAAS;wBAC1B,OAAO;4BACL,GAAGD,MAAM;4BACT,CAAC3C,WAAW4C,OAAOC,KAAK,EAAE,EAAE;gCAC1BA,OAAOD,OAAOC,KAAK;4BACrB;wBACF;oBACF;oBAEA,OAAO;wBACL,GAAGF,MAAM;wBACT,CAAC3C,WAAW4C,QAAQ,EAAE;4BACpBC,OAAOD;wBACT;oBACF;gBACF,GAAG,CAAC;YACN;YAEArC,OAAOK,MAAMwB,OAAO,GAAG,IAAI9C,YAAYiB,QAAQA;YAC/CA,OAAOL,iBAAiBU,OAAOL,MAAMS;YAErC,OAAO;gBACL,GAAGK,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN;gBAAK;YACvB;QACF;QACA+C,MAAM,CAACjC,uBAA8CT;YACnD,OAAOA,MAAM0C,IAAI,CAAC3B,MAAM,CAAC,CAACC,KAAK2B;gBAC7B,IAAI5D,WAAW4D,MAAM;oBACnB,MAAMjC,WAAWvB,kBAAkBmB,YAAYtB,QAAQ2D,IAAI1C,IAAI,EAAE;oBACjE,MAAMqB,0BAA0BjC,8BAA8BW;oBAC9D,IAAIL,OAAoBO,uBAAuB;wBAC7CD,MAAMS;wBACNP;wBACAL,QAAQ6C,IAAI7C,MAAM;wBAClBO;wBACAC,YAAYI;oBACd;oBAEA,IAAI,CAACf,MAAM,OAAOqB;oBAElB,IAAIM,yBAAyB3B,OAAO,IAAIhB,eAAegB;oBACvD,OAAO;wBACL,GAAGqB,GAAG;wBACN,CAAC2B,IAAI1C,IAAI,CAAC,EAAE;4BAAEN;wBAAK;oBACrB;gBACF;gBAEA,OAAO;oBACL,GAAGqB,GAAG;oBACN,GAAG2B,IAAI7C,MAAM,CAACiB,MAAM,CAAC,CAAC6B,gBAAgB3B;wBACpC,MAAMC,cAAcX,gBAAgB,CAACU,SAAStB,IAAI,CAAC;wBACnD,IAAIuB,aAAa,OAAOA,YAAY0B,gBAAgB3B;wBACpD,OAAO2B;oBACT,GAAG5B,IAAI;gBACT;YACF,GAAGP;QACL;QACAhB,MAAM,CAACgB,uBAA8CT,QAAsB,CAAA;gBACzE,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBACZN,MAAML,iBACJU,OACAA,MAAMwB,OAAO,KAAK,OAAO,IAAI9C,YAAYE,iBAAiBA,eAC1DwB;gBAEJ;YACF,CAAA;QACAyC,UAAU,CAACpC,uBAA8CT,QAA0B,CAAA;gBACjF,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOpB,eAAewB;gBAAe;YAC9E,CAAA;QACA0C,QAAQ,CAACrC,uBAA8CT,QAAwB,CAAA;gBAC7E,GAAGS,qBAAqB;gBACxB,CAACT,MAAMC,IAAI,CAAC,EAAE;oBAAEN,MAAML,iBAAiBU,OAAOpB,eAAewB;gBAAe;YAC9E,CAAA;IACF;IAEA,MAAM2C,YAAY3D,WAAWa;IAE7B,MAAM+C,eAAelD,OAAOiB,MAAM,CAAC,CAACN,uBAAuBT;QACzD,MAAMiD,cAAc1C,gBAAgB,CAACP,MAAML,IAAI,CAAC;QAEhD,IAAI,OAAOsD,gBAAgB,YAAY;YACrC,OAAOxC;QACT;QAEA,MAAMyC,SAASD,YAAYxC,uBAAuBT;QAClD,IAAImD,OAAOC,IAAI,CAACF,QAAQG,MAAM,KAAK,GAAG;YACpC,OAAO5C;QACT;QAEA,OAAO;YACL,GAAGA,qBAAqB;YACxB,GAAGwC,YAAYxC,uBAAuBT,MAAM;QAC9C;IACF,GAAG,CAAC;IAEJ,IAAImD,OAAOC,IAAI,CAACJ,cAAcK,MAAM,KAAK,GAAG;QAC1C,OAAO;IACT;IAEA,OAAO,IAAI7E,uBAAuB;QAChCyB,MAAM,CAAC,QAAQ,EAAE8C,UAAU,KAAK,CAAC;QACjCjD,QAAQkD;IACV;AACF"}
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,6 +1,5 @@
1
1
  import type { GraphQLFieldConfig } from 'graphql';
2
- import type { GraphQLInfo } from 'payload/config';
3
- import type { Field, SanitizedConfig } from 'payload/types';
2
+ import type { Field, GraphQLInfo, SanitizedConfig } from 'payload';
4
3
  import { GraphQLObjectType } from 'graphql';
5
4
  export type ObjectTypeConfig = {
6
5
  [path: string]: GraphQLFieldConfig<any, any>;
@@ -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,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAQV,KAAK,EAUL,eAAe,EAMhB,MAAM,eAAe,CAAA;AAEtB,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,CA4lB1B"}
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 { tabHasName } from 'payload/types';
4
- import { createDataloaderCacheKey, toWords } from 'payload/utilities';
3
+ import { combineQueries, createDataloaderCacheKey, MissingEditorProp, toWords } from 'payload';
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,13 @@ 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
+ }
405
+ if (!field?.editor) {
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
407
+ ;
408
+ }
335
409
  if (typeof field?.editor === 'function') {
336
410
  throw new Error('Attempted to access unsanitized rich text editor.');
337
411
  }
@@ -368,7 +442,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
368
442
  }),
369
443
  row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
370
444
  const addSubField = fieldToSchemaMap[subField.type];
371
- if (addSubField) return addSubField(objectTypeConfigWithRowFields, subField);
445
+ if (addSubField) {
446
+ return addSubField(objectTypeConfigWithRowFields, subField);
447
+ }
372
448
  return objectTypeConfigWithRowFields;
373
449
  }, objectTypeConfig),
374
450
  select: (objectTypeConfig, field)=>{
@@ -408,7 +484,13 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
408
484
  return {
409
485
  ...tabSchema,
410
486
  [tab.name]: {
411
- 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
+ }
412
494
  }
413
495
  };
414
496
  }
@@ -416,7 +498,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
416
498
  ...tabSchema,
417
499
  ...tab.fields.reduce((subFieldSchema, subField)=>{
418
500
  const addSubField = fieldToSchemaMap[subField.type];
419
- if (addSubField) return addSubField(subFieldSchema, subField);
501
+ if (addSubField) {
502
+ return addSubField(subFieldSchema, subField);
503
+ }
420
504
  return subFieldSchema;
421
505
  }, tabSchema)
422
506
  };
@@ -435,34 +519,125 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
435
519
  }),
436
520
  upload: (objectTypeConfig, field)=>{
437
521
  const { relationTo } = field;
438
- 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
+ }
439
558
  // If the relationshipType is undefined at this point,
440
559
  // it can be assumed that this blockType can have a relationship
441
560
  // to itself. Therefore, we set the relationshipType equal to the blockType
442
561
  // that is currently being created.
443
- const type = withNullableType(field, graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType, forceNullable);
444
- 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
+ }
445
572
  if (config.localization) {
446
- uploadArgs.locale = {
573
+ relationshipArgs.locale = {
447
574
  type: graphqlResult.types.localeInputType
448
575
  };
449
- uploadArgs.fallbackLocale = {
576
+ relationshipArgs.fallbackLocale = {
450
577
  type: graphqlResult.types.fallbackLocaleInputType
451
578
  };
452
579
  }
453
- const relatedCollectionSlug = field.relationTo;
454
- const upload = {
455
- type,
456
- args: uploadArgs,
580
+ const relationship = {
581
+ type: withNullableType(field, hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type, forceNullable),
582
+ args: relationshipArgs,
457
583
  extensions: {
458
- complexity: 20
584
+ complexity: 10
459
585
  },
460
586
  async resolve (parent, args, context) {
461
587
  const value = parent[field.name];
462
588
  const locale = args.locale || context.req.locale;
463
589
  const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
464
- const id = value;
590
+ let relatedCollectionSlug = field.relationTo;
465
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
+ }
466
641
  if (id) {
467
642
  const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
468
643
  collectionSlug: relatedCollectionSlug,
@@ -476,22 +651,26 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
476
651
  showHiddenFields: false,
477
652
  transactionID: context.req.transactionID
478
653
  }));
479
- 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;
480
667
  }
481
668
  return null;
482
669
  }
483
670
  };
484
- const whereFields = graphqlResult.collections[relationTo].config.fields;
485
- upload.args.where = {
486
- type: buildWhereInputType({
487
- name: uploadName,
488
- fields: whereFields,
489
- parentName: uploadName
490
- })
491
- };
492
671
  return {
493
672
  ...objectTypeConfig,
494
- [field.name]: upload
673
+ [field.name]: relationship
495
674
  };
496
675
  }
497
676
  };