@payloadcms/graphql 3.0.0-canary.c13f9ba → 3.0.0-canary.c696728
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.
- package/bin.js +51 -2
- package/dist/bin/generateSchema.d.ts +1 -1
- package/dist/bin/generateSchema.d.ts.map +1 -1
- package/dist/bin/generateSchema.js +1 -1
- package/dist/bin/generateSchema.js.map +1 -1
- package/dist/bin/index.js +2 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/exports/types.d.ts +4 -0
- package/dist/exports/types.d.ts.map +1 -0
- package/dist/exports/types.js +5 -0
- package/dist/exports/types.js.map +1 -0
- package/dist/exports/utilities.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts +2 -2
- package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts.map +1 -1
- package/dist/packages/graphql-query-complexity/QueryComplexity.js +4 -4
- package/dist/packages/graphql-query-complexity/QueryComplexity.js.map +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts.map +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.js +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.js.map +1 -1
- package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.js.map +1 -1
- package/dist/packages/graphql-query-complexity/estimators/simple/index.js.map +1 -1
- package/dist/packages/graphql-query-complexity/index.js.map +1 -1
- package/dist/packages/graphql-type-json/index.d.ts.map +1 -1
- package/dist/packages/graphql-type-json/index.js +0 -1
- package/dist/packages/graphql-type-json/index.js.map +1 -1
- package/dist/resolvers/auth/access.d.ts +2 -3
- package/dist/resolvers/auth/access.d.ts.map +1 -1
- package/dist/resolvers/auth/access.js +3 -5
- package/dist/resolvers/auth/access.js.map +1 -1
- package/dist/resolvers/auth/forgotPassword.d.ts +2 -3
- package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/forgotPassword.js +4 -5
- package/dist/resolvers/auth/forgotPassword.js.map +1 -1
- package/dist/resolvers/auth/init.d.ts +1 -2
- package/dist/resolvers/auth/init.d.ts.map +1 -1
- package/dist/resolvers/auth/init.js +2 -4
- package/dist/resolvers/auth/init.js.map +1 -1
- package/dist/resolvers/auth/login.d.ts +2 -3
- package/dist/resolvers/auth/login.d.ts.map +1 -1
- package/dist/resolvers/auth/login.js +4 -6
- package/dist/resolvers/auth/login.js.map +1 -1
- package/dist/resolvers/auth/logout.d.ts +2 -3
- package/dist/resolvers/auth/logout.d.ts.map +1 -1
- package/dist/resolvers/auth/logout.js +2 -5
- package/dist/resolvers/auth/logout.js.map +1 -1
- package/dist/resolvers/auth/me.d.ts +2 -3
- package/dist/resolvers/auth/me.d.ts.map +1 -1
- package/dist/resolvers/auth/me.js +4 -4
- package/dist/resolvers/auth/me.js.map +1 -1
- package/dist/resolvers/auth/refresh.d.ts +2 -3
- package/dist/resolvers/auth/refresh.d.ts.map +1 -1
- package/dist/resolvers/auth/refresh.js +4 -13
- package/dist/resolvers/auth/refresh.js.map +1 -1
- package/dist/resolvers/auth/resetPassword.d.ts +2 -3
- package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/resetPassword.js +8 -7
- package/dist/resolvers/auth/resetPassword.js.map +1 -1
- package/dist/resolvers/auth/unlock.d.ts +2 -3
- package/dist/resolvers/auth/unlock.d.ts.map +1 -1
- package/dist/resolvers/auth/unlock.js +4 -5
- package/dist/resolvers/auth/unlock.js.map +1 -1
- package/dist/resolvers/auth/verifyEmail.d.ts +2 -3
- package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
- package/dist/resolvers/auth/verifyEmail.js +8 -6
- package/dist/resolvers/auth/verifyEmail.js.map +1 -1
- package/dist/resolvers/collections/count.d.ts +2 -3
- package/dist/resolvers/collections/count.d.ts.map +1 -1
- package/dist/resolvers/collections/count.js +1 -2
- package/dist/resolvers/collections/count.js.map +1 -1
- package/dist/resolvers/collections/create.d.ts +6 -9
- package/dist/resolvers/collections/create.d.ts.map +1 -1
- package/dist/resolvers/collections/create.js +2 -3
- package/dist/resolvers/collections/create.js.map +1 -1
- package/dist/resolvers/collections/delete.d.ts +5 -7
- package/dist/resolvers/collections/delete.d.ts.map +1 -1
- package/dist/resolvers/collections/delete.js +7 -4
- package/dist/resolvers/collections/delete.js.map +1 -1
- package/dist/resolvers/collections/docAccess.d.ts +2 -3
- package/dist/resolvers/collections/docAccess.d.ts.map +1 -1
- package/dist/resolvers/collections/docAccess.js +1 -2
- package/dist/resolvers/collections/docAccess.js.map +1 -1
- package/dist/resolvers/collections/duplicate.d.ts +5 -7
- package/dist/resolvers/collections/duplicate.d.ts.map +1 -1
- package/dist/resolvers/collections/duplicate.js +2 -3
- package/dist/resolvers/collections/duplicate.js.map +1 -1
- package/dist/resolvers/collections/find.d.ts +2 -4
- package/dist/resolvers/collections/find.d.ts.map +1 -1
- package/dist/resolvers/collections/find.js +13 -7
- package/dist/resolvers/collections/find.js.map +1 -1
- package/dist/resolvers/collections/findByID.d.ts +5 -7
- package/dist/resolvers/collections/findByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findByID.js +7 -4
- package/dist/resolvers/collections/findByID.js.map +1 -1
- package/dist/resolvers/collections/findVersionByID.d.ts +2 -4
- package/dist/resolvers/collections/findVersionByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersionByID.js +1 -2
- package/dist/resolvers/collections/findVersionByID.js.map +1 -1
- package/dist/resolvers/collections/findVersions.d.ts +2 -4
- package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersions.js +7 -4
- package/dist/resolvers/collections/findVersions.js.map +1 -1
- package/dist/resolvers/collections/restoreVersion.d.ts +4 -4
- package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -1
- package/dist/resolvers/collections/restoreVersion.js +3 -3
- package/dist/resolvers/collections/restoreVersion.js.map +1 -1
- package/dist/resolvers/collections/update.d.ts +6 -8
- package/dist/resolvers/collections/update.d.ts.map +1 -1
- package/dist/resolvers/collections/update.js +7 -4
- package/dist/resolvers/collections/update.js.map +1 -1
- package/dist/resolvers/globals/docAccess.d.ts +2 -3
- package/dist/resolvers/globals/docAccess.d.ts.map +1 -1
- package/dist/resolvers/globals/docAccess.js +1 -2
- package/dist/resolvers/globals/docAccess.js.map +1 -1
- package/dist/resolvers/globals/findOne.d.ts +2 -2
- package/dist/resolvers/globals/findOne.d.ts.map +1 -1
- package/dist/resolvers/globals/findOne.js +8 -5
- package/dist/resolvers/globals/findOne.js.map +1 -1
- package/dist/resolvers/globals/findVersionByID.d.ts +3 -3
- package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -1
- package/dist/resolvers/globals/findVersionByID.js +8 -5
- package/dist/resolvers/globals/findVersionByID.js.map +1 -1
- package/dist/resolvers/globals/findVersions.d.ts +3 -3
- package/dist/resolvers/globals/findVersions.d.ts.map +1 -1
- package/dist/resolvers/globals/findVersions.js +2 -3
- package/dist/resolvers/globals/findVersions.js.map +1 -1
- package/dist/resolvers/globals/index.d.ts +5 -5
- package/dist/resolvers/globals/index.d.ts.map +1 -1
- package/dist/resolvers/globals/index.js +5 -5
- package/dist/resolvers/globals/index.js.map +1 -1
- package/dist/resolvers/globals/restoreVersion.d.ts +4 -3
- package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -1
- package/dist/resolvers/globals/restoreVersion.js +3 -3
- package/dist/resolvers/globals/restoreVersion.js.map +1 -1
- package/dist/resolvers/globals/update.d.ts +6 -7
- package/dist/resolvers/globals/update.d.ts.map +1 -1
- package/dist/resolvers/globals/update.js +8 -5
- package/dist/resolvers/globals/update.js.map +1 -1
- package/dist/resolvers/types.d.ts +2 -2
- package/dist/resolvers/types.d.ts.map +1 -1
- package/dist/resolvers/types.js.map +1 -1
- package/dist/schema/buildFallbackLocaleInputType.d.ts +2 -3
- package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -1
- package/dist/schema/buildFallbackLocaleInputType.js +2 -3
- package/dist/schema/buildFallbackLocaleInputType.js.map +1 -1
- package/dist/schema/buildLocaleInputType.d.ts +2 -3
- package/dist/schema/buildLocaleInputType.d.ts.map +1 -1
- package/dist/schema/buildLocaleInputType.js +2 -3
- package/dist/schema/buildLocaleInputType.js.map +1 -1
- package/dist/schema/buildMutationInputType.d.ts +1 -2
- package/dist/schema/buildMutationInputType.d.ts.map +1 -1
- package/dist/schema/buildMutationInputType.js +60 -17
- package/dist/schema/buildMutationInputType.js.map +1 -1
- package/dist/schema/buildObjectType.d.ts +1 -2
- package/dist/schema/buildObjectType.d.ts.map +1 -1
- package/dist/schema/buildObjectType.js +267 -88
- package/dist/schema/buildObjectType.js.map +1 -1
- package/dist/schema/buildPaginatedListType.d.ts +1 -2
- package/dist/schema/buildPaginatedListType.d.ts.map +1 -1
- package/dist/schema/buildPaginatedListType.js +1 -2
- package/dist/schema/buildPaginatedListType.js.map +1 -1
- package/dist/schema/buildPoliciesType.d.ts +2 -2
- package/dist/schema/buildPoliciesType.d.ts.map +1 -1
- package/dist/schema/buildPoliciesType.js +6 -4
- package/dist/schema/buildPoliciesType.js.map +1 -1
- package/dist/schema/buildWhereInputType.d.ts +3 -3
- package/dist/schema/buildWhereInputType.d.ts.map +1 -1
- package/dist/schema/buildWhereInputType.js +6 -7
- package/dist/schema/buildWhereInputType.js.map +1 -1
- package/dist/schema/fieldToWhereInputSchemaMap.d.ts +2 -2
- package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -1
- package/dist/schema/fieldToWhereInputSchemaMap.js +31 -7
- package/dist/schema/fieldToWhereInputSchemaMap.js.map +1 -1
- package/dist/schema/initCollections.d.ts +3 -4
- package/dist/schema/initCollections.d.ts.map +1 -1
- package/dist/schema/initCollections.js +51 -42
- package/dist/schema/initCollections.js.map +1 -1
- package/dist/schema/initGlobals.d.ts +3 -4
- package/dist/schema/initGlobals.d.ts.map +1 -1
- package/dist/schema/initGlobals.js +26 -20
- package/dist/schema/initGlobals.js.map +1 -1
- package/dist/schema/isFieldNullable.d.ts +2 -3
- package/dist/schema/isFieldNullable.d.ts.map +1 -1
- package/dist/schema/isFieldNullable.js +2 -3
- package/dist/schema/isFieldNullable.js.map +1 -1
- package/dist/schema/operators.d.ts +1 -2
- package/dist/schema/operators.d.ts.map +1 -1
- package/dist/schema/operators.js +1 -2
- package/dist/schema/operators.js.map +1 -1
- package/dist/schema/recursivelyBuildNestedPaths.d.ts +3 -3
- package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -1
- package/dist/schema/recursivelyBuildNestedPaths.js +3 -4
- package/dist/schema/recursivelyBuildNestedPaths.js.map +1 -1
- package/dist/schema/withNullableType.d.ts +2 -3
- package/dist/schema/withNullableType.d.ts.map +1 -1
- package/dist/schema/withNullableType.js +1 -2
- package/dist/schema/withNullableType.js.map +1 -1
- package/dist/schema/withOperators.d.ts +1 -1
- package/dist/schema/withOperators.d.ts.map +1 -1
- package/dist/schema/withOperators.js +12 -7
- package/dist/schema/withOperators.js.map +1 -1
- package/dist/utilities/combineParentName.d.ts +1 -2
- package/dist/utilities/combineParentName.d.ts.map +1 -1
- package/dist/utilities/combineParentName.js +2 -3
- package/dist/utilities/combineParentName.js.map +1 -1
- package/dist/utilities/formatName.d.ts +1 -2
- package/dist/utilities/formatName.d.ts.map +1 -1
- package/dist/utilities/formatName.js +1 -2
- package/dist/utilities/formatName.js.map +1 -1
- package/dist/utilities/formatName.spec.js +1 -1
- package/dist/utilities/formatName.spec.js.map +1 -1
- package/dist/utilities/formatOptions.d.ts +2 -3
- package/dist/utilities/formatOptions.d.ts.map +1 -1
- package/dist/utilities/formatOptions.js +2 -3
- package/dist/utilities/formatOptions.js.map +1 -1
- package/dist/utilities/groupOrTabHasRequiredSubfield.d.ts +1 -1
- package/dist/utilities/groupOrTabHasRequiredSubfield.d.ts.map +1 -1
- package/dist/utilities/groupOrTabHasRequiredSubfield.js +1 -1
- package/dist/utilities/groupOrTabHasRequiredSubfield.js.map +1 -1
- package/dist/utilities/wrapCustomResolver.d.ts +2 -2
- package/dist/utilities/wrapCustomResolver.d.ts.map +1 -1
- package/dist/utilities/wrapCustomResolver.js +1 -1
- package/dist/utilities/wrapCustomResolver.js.map +1 -1
- package/package.json +22 -14
- package/dist/utilities/getCheckIfLocaleObject.d.ts +0 -5
- package/dist/utilities/getCheckIfLocaleObject.d.ts.map +0 -1
- package/dist/utilities/getCheckIfLocaleObject.js +0 -3
- package/dist/utilities/getCheckIfLocaleObject.js.map +0 -1
- package/dist/utilities/uppercase.d.ts +0 -3
- package/dist/utilities/uppercase.d.ts.map +0 -1
- package/dist/utilities/uppercase.js +0 -11
- package/dist/utilities/uppercase.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { GraphQLFieldConfig } from 'graphql';
|
|
2
|
-
import type { GraphQLInfo } from 'payload
|
|
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":"
|
|
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
|
-
|
|
1
|
+
import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
|
|
2
2
|
import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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
|
|
10
|
-
import
|
|
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)
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
if (
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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')
|
|
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)
|
|
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)
|
|
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
|
|
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
|
-
|
|
444
|
-
const
|
|
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
|
-
|
|
573
|
+
relationshipArgs.locale = {
|
|
447
574
|
type: graphqlResult.types.localeInputType
|
|
448
575
|
};
|
|
449
|
-
|
|
576
|
+
relationshipArgs.fallbackLocale = {
|
|
450
577
|
type: graphqlResult.types.fallbackLocaleInputType
|
|
451
578
|
};
|
|
452
579
|
}
|
|
453
|
-
const
|
|
454
|
-
|
|
455
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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]:
|
|
673
|
+
[field.name]: relationship
|
|
495
674
|
};
|
|
496
675
|
}
|
|
497
676
|
};
|