Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
209 lines
8.5 KiB
Plaintext
209 lines
8.5 KiB
Plaintext
import { GraphQLBoolean, GraphQLInt, GraphQLNonNull, GraphQLString } from 'graphql';
|
|
import pluralize from 'pluralize';
|
|
const { singular } = pluralize;
|
|
import { buildVersionGlobalFields, toWords } from 'payload';
|
|
import { hasDraftsEnabled } from 'payload/shared';
|
|
import { docAccessResolver } from '../resolvers/globals/docAccess.js';
|
|
import { findOne } from '../resolvers/globals/findOne.js';
|
|
import { findVersionByID } from '../resolvers/globals/findVersionByID.js';
|
|
import { findVersions } from '../resolvers/globals/findVersions.js';
|
|
import { restoreVersion } from '../resolvers/globals/restoreVersion.js';
|
|
import { update } from '../resolvers/globals/update.js';
|
|
import { formatName } from '../utilities/formatName.js';
|
|
import { buildMutationInputType } from './buildMutationInputType.js';
|
|
import { buildObjectType } from './buildObjectType.js';
|
|
import { buildPaginatedListType } from './buildPaginatedListType.js';
|
|
import { buildPolicyType } from './buildPoliciesType.js';
|
|
import { buildWhereInputType } from './buildWhereInputType.js';
|
|
export function initGlobals({ config, graphqlResult }) {
|
|
Object.keys(graphqlResult.globals.config).forEach((slug)=>{
|
|
const global = graphqlResult.globals.config[slug];
|
|
const { fields, graphQL } = global;
|
|
if (graphQL === false) {
|
|
return;
|
|
}
|
|
const formattedName = graphQL?.name ? graphQL.name : singular(toWords(global.slug, true));
|
|
const forceNullableObjectType = hasDraftsEnabled(global);
|
|
if (!graphqlResult.globals.graphQL) {
|
|
graphqlResult.globals.graphQL = {};
|
|
}
|
|
const updateMutationInputType = buildMutationInputType({
|
|
name: formattedName,
|
|
config,
|
|
fields,
|
|
graphqlResult,
|
|
parentIsLocalized: false,
|
|
parentName: formattedName
|
|
});
|
|
graphqlResult.globals.graphQL[slug] = {
|
|
type: buildObjectType({
|
|
name: formattedName,
|
|
config,
|
|
fields,
|
|
forceNullable: forceNullableObjectType,
|
|
graphqlResult,
|
|
parentName: formattedName
|
|
}),
|
|
mutationInputType: updateMutationInputType ? new GraphQLNonNull(updateMutationInputType) : null
|
|
};
|
|
const queriesEnabled = typeof global.graphQL !== 'object' || !global.graphQL.disableQueries;
|
|
const mutationsEnabled = typeof global.graphQL !== 'object' || !global.graphQL.disableMutations;
|
|
if (queriesEnabled) {
|
|
graphqlResult.Query.fields[formattedName] = {
|
|
type: graphqlResult.globals.graphQL[slug].type,
|
|
args: {
|
|
draft: {
|
|
type: GraphQLBoolean
|
|
},
|
|
...config.localization ? {
|
|
fallbackLocale: {
|
|
type: graphqlResult.types.fallbackLocaleInputType
|
|
},
|
|
locale: {
|
|
type: graphqlResult.types.localeInputType
|
|
}
|
|
} : {},
|
|
select: {
|
|
type: GraphQLBoolean
|
|
}
|
|
},
|
|
resolve: findOne(global)
|
|
};
|
|
graphqlResult.Query.fields[`docAccess${formattedName}`] = {
|
|
type: buildPolicyType({
|
|
type: 'global',
|
|
entity: global,
|
|
scope: 'docAccess',
|
|
typeSuffix: 'DocAccess'
|
|
}),
|
|
resolve: docAccessResolver(global)
|
|
};
|
|
}
|
|
if (mutationsEnabled) {
|
|
graphqlResult.Mutation.fields[`update${formattedName}`] = {
|
|
type: graphqlResult.globals.graphQL[slug].type,
|
|
args: {
|
|
...updateMutationInputType ? {
|
|
data: {
|
|
type: graphqlResult.globals.graphQL[slug].mutationInputType
|
|
}
|
|
} : {},
|
|
draft: {
|
|
type: GraphQLBoolean
|
|
},
|
|
...config.localization ? {
|
|
locale: {
|
|
type: graphqlResult.types.localeInputType
|
|
}
|
|
} : {}
|
|
},
|
|
resolve: update(global)
|
|
};
|
|
}
|
|
if (global.versions) {
|
|
const idType = config.db.defaultIDType === 'number' ? GraphQLInt : GraphQLString;
|
|
const versionGlobalFields = [
|
|
...buildVersionGlobalFields(config, global),
|
|
{
|
|
name: 'id',
|
|
type: config.db.defaultIDType
|
|
},
|
|
{
|
|
name: 'createdAt',
|
|
type: 'date',
|
|
label: 'Created At'
|
|
},
|
|
{
|
|
name: 'updatedAt',
|
|
type: 'date',
|
|
label: 'Updated At'
|
|
}
|
|
];
|
|
graphqlResult.globals.graphQL[slug].versionType = buildObjectType({
|
|
name: `${formattedName}Version`,
|
|
config,
|
|
fields: versionGlobalFields,
|
|
forceNullable: forceNullableObjectType,
|
|
graphqlResult,
|
|
parentName: `${formattedName}Version`
|
|
});
|
|
if (queriesEnabled) {
|
|
graphqlResult.Query.fields[`version${formatName(formattedName)}`] = {
|
|
type: graphqlResult.globals.graphQL[slug].versionType,
|
|
args: {
|
|
id: {
|
|
type: idType
|
|
},
|
|
draft: {
|
|
type: GraphQLBoolean
|
|
},
|
|
...config.localization ? {
|
|
fallbackLocale: {
|
|
type: graphqlResult.types.fallbackLocaleInputType
|
|
},
|
|
locale: {
|
|
type: graphqlResult.types.localeInputType
|
|
}
|
|
} : {},
|
|
select: {
|
|
type: GraphQLBoolean
|
|
}
|
|
},
|
|
resolve: findVersionByID(global)
|
|
};
|
|
graphqlResult.Query.fields[`versions${formattedName}`] = {
|
|
type: buildPaginatedListType(`versions${formatName(formattedName)}`, graphqlResult.globals.graphQL[slug].versionType),
|
|
args: {
|
|
where: {
|
|
type: buildWhereInputType({
|
|
name: `versions${formattedName}`,
|
|
fields: versionGlobalFields,
|
|
parentName: `versions${formattedName}`
|
|
})
|
|
},
|
|
...config.localization ? {
|
|
fallbackLocale: {
|
|
type: graphqlResult.types.fallbackLocaleInputType
|
|
},
|
|
locale: {
|
|
type: graphqlResult.types.localeInputType
|
|
}
|
|
} : {},
|
|
limit: {
|
|
type: GraphQLInt
|
|
},
|
|
page: {
|
|
type: GraphQLInt
|
|
},
|
|
pagination: {
|
|
type: GraphQLBoolean
|
|
},
|
|
select: {
|
|
type: GraphQLBoolean
|
|
},
|
|
sort: {
|
|
type: GraphQLString
|
|
}
|
|
},
|
|
resolve: findVersions(global)
|
|
};
|
|
}
|
|
if (mutationsEnabled) {
|
|
graphqlResult.Mutation.fields[`restoreVersion${formatName(formattedName)}`] = {
|
|
type: graphqlResult.globals.graphQL[slug].type,
|
|
args: {
|
|
id: {
|
|
type: idType
|
|
},
|
|
draft: {
|
|
type: GraphQLBoolean
|
|
}
|
|
},
|
|
resolve: restoreVersion(global)
|
|
};
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
//# sourceMappingURL=initGlobals.js.map |