@payloadcms/graphql 3.0.0-beta.12 → 3.0.0-beta.121
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 +54 -0
- package/dist/bin/generateSchema.d.ts +3 -0
- package/dist/bin/generateSchema.d.ts.map +1 -0
- package/dist/bin/generateSchema.js +10 -0
- package/dist/bin/generateSchema.js.map +1 -0
- package/dist/bin/index.d.ts +2 -0
- package/dist/bin/index.d.ts.map +1 -0
- package/dist/bin/index.js +17 -0
- package/dist/bin/index.js.map +1 -0
- 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.d.ts +3 -0
- package/dist/exports/utilities.d.ts.map +1 -0
- package/dist/exports/utilities.js +4 -0
- package/dist/exports/utilities.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts +51 -0
- package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts.map +1 -0
- package/dist/packages/graphql-query-complexity/QueryComplexity.js +270 -0
- package/dist/packages/graphql-query-complexity/QueryComplexity.js.map +1 -0
- package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts +5 -0
- package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts.map +1 -0
- package/dist/packages/graphql-query-complexity/createComplexityRule.js +8 -0
- package/dist/packages/graphql-query-complexity/createComplexityRule.js.map +1 -0
- package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.d.ts +3 -0
- package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.d.ts.map +1 -0
- package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.js +14 -0
- package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.js.map +1 -0
- package/dist/packages/graphql-query-complexity/estimators/simple/index.d.ts +5 -0
- package/dist/packages/graphql-query-complexity/estimators/simple/index.d.ts.map +1 -0
- package/dist/packages/graphql-query-complexity/estimators/simple/index.js +8 -0
- package/dist/packages/graphql-query-complexity/estimators/simple/index.js.map +1 -0
- package/dist/packages/graphql-query-complexity/index.d.ts +4 -0
- package/dist/packages/graphql-query-complexity/index.d.ts.map +1 -0
- package/dist/packages/graphql-query-complexity/index.js +5 -0
- package/dist/packages/graphql-query-complexity/index.js.map +1 -0
- package/dist/packages/graphql-type-json/index.d.ts +4 -0
- package/dist/packages/graphql-type-json/index.d.ts.map +1 -0
- package/dist/packages/graphql-type-json/index.js +63 -0
- package/dist/packages/graphql-type-json/index.js.map +1 -0
- 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 +6 -8
- 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 +5 -7
- 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 +6 -15
- 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 +10 -9
- 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 +3 -3
- package/dist/resolvers/collections/count.js.map +1 -1
- package/dist/resolvers/collections/create.d.ts +5 -8
- 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 +6 -6
- package/dist/resolvers/collections/delete.d.ts.map +1 -1
- package/dist/resolvers/collections/delete.js +12 -6
- package/dist/resolvers/collections/delete.js.map +1 -1
- package/dist/resolvers/collections/docAccess.d.ts +1 -2
- 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 +4 -6
- package/dist/resolvers/collections/duplicate.d.ts.map +1 -1
- package/dist/resolvers/collections/duplicate.js +3 -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 +16 -6
- package/dist/resolvers/collections/find.js.map +1 -1
- package/dist/resolvers/collections/findByID.d.ts +4 -6
- package/dist/resolvers/collections/findByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findByID.js +10 -3
- package/dist/resolvers/collections/findByID.js.map +1 -1
- package/dist/resolvers/collections/findVersionByID.d.ts +2 -5
- package/dist/resolvers/collections/findVersionByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersionByID.js +3 -4
- package/dist/resolvers/collections/findVersionByID.js.map +1 -1
- package/dist/resolvers/collections/findVersions.d.ts +3 -4
- package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersions.js +12 -6
- package/dist/resolvers/collections/findVersions.js.map +1 -1
- package/dist/resolvers/collections/restoreVersion.d.ts +3 -3
- 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 -7
- package/dist/resolvers/collections/update.d.ts.map +1 -1
- package/dist/resolvers/collections/update.js +12 -6
- package/dist/resolvers/collections/update.js.map +1 -1
- package/dist/resolvers/globals/docAccess.d.ts +1 -2
- 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 +2 -2
- 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 +2 -2
- 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 +3 -2
- 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 +5 -6
- 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 +1 -1
- 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 +62 -19
- package/dist/schema/buildMutationInputType.js.map +1 -1
- package/dist/schema/buildObjectType.d.ts +3 -4
- package/dist/schema/buildObjectType.d.ts.map +1 -1
- package/dist/schema/buildObjectType.js +303 -102
- 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 +7 -5
- 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 +32 -9
- 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 +59 -50
- 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 +27 -21
- 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 +13 -8
- 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 +1 -1
- 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 +37 -24
- 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,15 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
|
|
2
2
|
import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars';
|
|
3
|
-
|
|
4
|
-
import { tabHasName } from 'payload/
|
|
5
|
-
import {
|
|
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
|
-
|
|
12
|
-
function buildObjectType({ name, baseFields = {}, config, fields, forceNullable, graphqlResult, parentName }) {
|
|
3
|
+
import { combineQueries, createDataloaderCacheKey, MissingEditorProp, toWords } from 'payload';
|
|
4
|
+
import { tabHasName } from 'payload/shared';
|
|
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 { isFieldNullable } from './isFieldNullable.js';
|
|
10
|
+
import { withNullableType } from './withNullableType.js';
|
|
11
|
+
export function buildObjectType({ name, baseFields = {}, config, fields, forceNullable, graphqlResult, parentName }) {
|
|
13
12
|
const fieldToSchemaMap = {
|
|
14
13
|
array: (objectTypeConfig, field)=>{
|
|
15
14
|
const interfaceName = field?.interfaceName || combineParentName(parentName, toWords(field.name, true));
|
|
@@ -94,7 +93,9 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
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 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
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 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
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 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
191
255
|
value: {
|
|
192
256
|
type: new GraphQLUnionType({
|
|
193
257
|
name: relationshipName,
|
|
194
|
-
|
|
258
|
+
resolveType (data) {
|
|
195
259
|
return graphqlResult.collections[data.collection].graphQL.type.name;
|
|
196
260
|
},
|
|
197
261
|
types
|
|
@@ -208,6 +272,14 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
208
272
|
// that is currently being created.
|
|
209
273
|
type = type || newlyCreatedBlockType;
|
|
210
274
|
const relationshipArgs = {};
|
|
275
|
+
const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [
|
|
276
|
+
relationTo
|
|
277
|
+
]).filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
|
|
278
|
+
if (relationsUseDrafts) {
|
|
279
|
+
relationshipArgs.draft = {
|
|
280
|
+
type: GraphQLBoolean
|
|
281
|
+
};
|
|
282
|
+
}
|
|
211
283
|
if (config.localization) {
|
|
212
284
|
relationshipArgs.locale = {
|
|
213
285
|
type: graphqlResult.types.localeInputType
|
|
@@ -227,38 +299,42 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
227
299
|
const locale = args.locale || context.req.locale;
|
|
228
300
|
const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
|
|
229
301
|
let relatedCollectionSlug = field.relationTo;
|
|
302
|
+
const draft = Boolean(args.draft ?? context.req.query?.draft);
|
|
230
303
|
if (hasManyValues) {
|
|
231
304
|
const results = [];
|
|
232
305
|
const resultPromises = [];
|
|
233
306
|
const createPopulationPromise = async (relatedDoc, i)=>{
|
|
234
307
|
let id = relatedDoc;
|
|
235
308
|
let collectionSlug = field.relationTo;
|
|
236
|
-
if (
|
|
237
|
-
collectionSlug = relatedDoc.relationTo;
|
|
238
|
-
id = relatedDoc.value;
|
|
239
|
-
}
|
|
240
|
-
const result = await context.req.payloadDataLoader.load(JSON.stringify([
|
|
241
|
-
context.req.transactionID,
|
|
242
|
-
collectionSlug,
|
|
243
|
-
id,
|
|
244
|
-
0,
|
|
245
|
-
0,
|
|
246
|
-
locale,
|
|
247
|
-
fallbackLocale,
|
|
248
|
-
false,
|
|
249
|
-
false
|
|
250
|
-
]));
|
|
251
|
-
if (result) {
|
|
309
|
+
if (graphQLCollections.some((collection)=>collection.slug === collectionSlug)) {
|
|
252
310
|
if (isRelatedToManyCollections) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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
|
+
}
|
|
262
338
|
}
|
|
263
339
|
}
|
|
264
340
|
};
|
|
@@ -276,28 +352,31 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
276
352
|
relatedCollectionSlug = value.relationTo;
|
|
277
353
|
}
|
|
278
354
|
if (id) {
|
|
279
|
-
|
|
280
|
-
context.req.
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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;
|
|
299
379
|
}
|
|
300
|
-
return relatedDocument;
|
|
301
380
|
}
|
|
302
381
|
return null;
|
|
303
382
|
}
|
|
@@ -320,26 +399,42 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
320
399
|
},
|
|
321
400
|
async resolve (parent, args, context) {
|
|
322
401
|
let depth = config.defaultDepth;
|
|
323
|
-
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
|
+
}
|
|
409
|
+
if (typeof field?.editor === 'function') {
|
|
410
|
+
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
411
|
+
}
|
|
324
412
|
const editor = field?.editor;
|
|
325
413
|
// RichText fields have their own depth argument in GraphQL.
|
|
326
414
|
// This is why the populationPromise (which populates richtext fields like uploads and relationships)
|
|
327
415
|
// is run here again, with the provided depth.
|
|
328
416
|
// In the graphql find.ts resolver, the depth is then hard-coded to 0.
|
|
329
417
|
// Effectively, this means that the populationPromise for GraphQL is only run here, and not in the find.ts resolver / normal population promise.
|
|
330
|
-
if (editor?.
|
|
331
|
-
|
|
418
|
+
if (editor?.graphQLPopulationPromises) {
|
|
419
|
+
const fieldPromises = [];
|
|
420
|
+
const populationPromises = [];
|
|
421
|
+
const populateDepth = field?.maxDepth !== undefined && field?.maxDepth < depth ? field?.maxDepth : depth;
|
|
422
|
+
editor?.graphQLPopulationPromises({
|
|
332
423
|
context,
|
|
333
|
-
depth,
|
|
424
|
+
depth: populateDepth,
|
|
425
|
+
draft: args.draft,
|
|
334
426
|
field,
|
|
427
|
+
fieldPromises,
|
|
335
428
|
findMany: false,
|
|
336
429
|
flattenLocales: false,
|
|
337
430
|
overrideAccess: false,
|
|
338
|
-
populationPromises
|
|
431
|
+
populationPromises,
|
|
339
432
|
req: context.req,
|
|
340
433
|
showHiddenFields: false,
|
|
341
434
|
siblingDoc: parent
|
|
342
435
|
});
|
|
436
|
+
await Promise.all(fieldPromises);
|
|
437
|
+
await Promise.all(populationPromises);
|
|
343
438
|
}
|
|
344
439
|
return parent[field.name];
|
|
345
440
|
}
|
|
@@ -347,7 +442,9 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
347
442
|
}),
|
|
348
443
|
row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
|
|
349
444
|
const addSubField = fieldToSchemaMap[subField.type];
|
|
350
|
-
if (addSubField)
|
|
445
|
+
if (addSubField) {
|
|
446
|
+
return addSubField(objectTypeConfigWithRowFields, subField);
|
|
447
|
+
}
|
|
351
448
|
return objectTypeConfigWithRowFields;
|
|
352
449
|
}, objectTypeConfig),
|
|
353
450
|
select: (objectTypeConfig, field)=>{
|
|
@@ -387,7 +484,13 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
387
484
|
return {
|
|
388
485
|
...tabSchema,
|
|
389
486
|
[tab.name]: {
|
|
390
|
-
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
|
+
}
|
|
391
494
|
}
|
|
392
495
|
};
|
|
393
496
|
}
|
|
@@ -395,7 +498,9 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
395
498
|
...tabSchema,
|
|
396
499
|
...tab.fields.reduce((subFieldSchema, subField)=>{
|
|
397
500
|
const addSubField = fieldToSchemaMap[subField.type];
|
|
398
|
-
if (addSubField)
|
|
501
|
+
if (addSubField) {
|
|
502
|
+
return addSubField(subFieldSchema, subField);
|
|
503
|
+
}
|
|
399
504
|
return subFieldSchema;
|
|
400
505
|
}, tabSchema)
|
|
401
506
|
};
|
|
@@ -414,61 +519,158 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
414
519
|
}),
|
|
415
520
|
upload: (objectTypeConfig, field)=>{
|
|
416
521
|
const { relationTo } = field;
|
|
417
|
-
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
|
+
}
|
|
418
558
|
// If the relationshipType is undefined at this point,
|
|
419
559
|
// it can be assumed that this blockType can have a relationship
|
|
420
560
|
// to itself. Therefore, we set the relationshipType equal to the blockType
|
|
421
561
|
// that is currently being created.
|
|
422
|
-
|
|
423
|
-
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
|
+
}
|
|
424
572
|
if (config.localization) {
|
|
425
|
-
|
|
573
|
+
relationshipArgs.locale = {
|
|
426
574
|
type: graphqlResult.types.localeInputType
|
|
427
575
|
};
|
|
428
|
-
|
|
576
|
+
relationshipArgs.fallbackLocale = {
|
|
429
577
|
type: graphqlResult.types.fallbackLocaleInputType
|
|
430
578
|
};
|
|
431
579
|
}
|
|
432
|
-
const
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
args: uploadArgs,
|
|
580
|
+
const relationship = {
|
|
581
|
+
type: withNullableType(field, hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type, forceNullable),
|
|
582
|
+
args: relationshipArgs,
|
|
436
583
|
extensions: {
|
|
437
|
-
complexity:
|
|
584
|
+
complexity: 10
|
|
438
585
|
},
|
|
439
586
|
async resolve (parent, args, context) {
|
|
440
587
|
const value = parent[field.name];
|
|
441
588
|
const locale = args.locale || context.req.locale;
|
|
442
589
|
const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
|
|
443
|
-
|
|
590
|
+
let relatedCollectionSlug = field.relationTo;
|
|
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
|
+
}
|
|
444
641
|
if (id) {
|
|
445
|
-
const relatedDocument = await context.req.payloadDataLoader.load(
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
locale,
|
|
642
|
+
const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
|
|
643
|
+
collectionSlug: relatedCollectionSlug,
|
|
644
|
+
currentDepth: 0,
|
|
645
|
+
depth: 0,
|
|
646
|
+
docID: id,
|
|
647
|
+
draft,
|
|
452
648
|
fallbackLocale,
|
|
453
|
-
|
|
454
|
-
false
|
|
455
|
-
|
|
456
|
-
|
|
649
|
+
locale,
|
|
650
|
+
overrideAccess: false,
|
|
651
|
+
showHiddenFields: false,
|
|
652
|
+
transactionID: context.req.transactionID
|
|
653
|
+
}));
|
|
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;
|
|
457
667
|
}
|
|
458
668
|
return null;
|
|
459
669
|
}
|
|
460
670
|
};
|
|
461
|
-
const whereFields = graphqlResult.collections[relationTo].config.fields;
|
|
462
|
-
upload.args.where = {
|
|
463
|
-
type: buildWhereInputType({
|
|
464
|
-
name: uploadName,
|
|
465
|
-
fields: whereFields,
|
|
466
|
-
parentName: uploadName
|
|
467
|
-
})
|
|
468
|
-
};
|
|
469
671
|
return {
|
|
470
672
|
...objectTypeConfig,
|
|
471
|
-
[field.name]:
|
|
673
|
+
[field.name]: relationship
|
|
472
674
|
};
|
|
473
675
|
}
|
|
474
676
|
};
|
|
@@ -488,6 +690,5 @@ function buildObjectType({ name, baseFields = {}, config, fields, forceNullable,
|
|
|
488
690
|
const newlyCreatedBlockType = new GraphQLObjectType(objectSchema);
|
|
489
691
|
return newlyCreatedBlockType;
|
|
490
692
|
}
|
|
491
|
-
export default buildObjectType;
|
|
492
693
|
|
|
493
694
|
//# sourceMappingURL=buildObjectType.js.map
|