GraphQL: Support required fields on output type (#6279)
* Handle required fields * Fix output fields
This commit is contained in:
committed by
Antonio Davi Macedo Coelho de Castro
parent
2fc328ed24
commit
a72ab50c70
250
package-lock.json
generated
250
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1886,6 +1886,32 @@ describe('ParseGraphQLServer', () => {
|
|||||||
expect(
|
expect(
|
||||||
__type.inputFields.find(o => o.name === 'doors').type.kind
|
__type.inputFields.find(o => o.name === 'doors').type.kind
|
||||||
).toEqual('NON_NULL');
|
).toEqual('NON_NULL');
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: { __type: __type2 },
|
||||||
|
} = await apolloClient.query({
|
||||||
|
query: gql`
|
||||||
|
query requiredFields {
|
||||||
|
__type(name: "SuperCar") {
|
||||||
|
fields {
|
||||||
|
name
|
||||||
|
type {
|
||||||
|
kind
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
expect(
|
||||||
|
__type2.fields.find(o => o.name === 'price').type.kind
|
||||||
|
).toEqual('SCALAR');
|
||||||
|
expect(
|
||||||
|
__type2.fields.find(o => o.name === 'engine').type.kind
|
||||||
|
).toEqual('NON_NULL');
|
||||||
|
expect(
|
||||||
|
__type2.fields.find(o => o.name === 'doors').type.kind
|
||||||
|
).toEqual('NON_NULL');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should only allow the supplied output fields for a class', async () => {
|
it('should only allow the supplied output fields for a class', async () => {
|
||||||
|
|||||||
@@ -406,7 +406,9 @@ const load = (
|
|||||||
[field]: {
|
[field]: {
|
||||||
description: `This is the object ${field}.`,
|
description: `This is the object ${field}.`,
|
||||||
args,
|
args,
|
||||||
type,
|
type: parseClass.fields[field].required
|
||||||
|
? new GraphQLNonNull(type)
|
||||||
|
: type,
|
||||||
async resolve(source, args, context, queryInfo) {
|
async resolve(source, args, context, queryInfo) {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
@@ -476,7 +478,9 @@ const load = (
|
|||||||
...fields,
|
...fields,
|
||||||
[field]: {
|
[field]: {
|
||||||
description: `This is the object ${field}.`,
|
description: `This is the object ${field}.`,
|
||||||
type,
|
type: parseClass.fields[field].required
|
||||||
|
? new GraphQLNonNull(type)
|
||||||
|
: type,
|
||||||
async resolve(source) {
|
async resolve(source) {
|
||||||
if (source[field] && source[field].coordinates) {
|
if (source[field] && source[field].coordinates) {
|
||||||
return source[field].coordinates.map(coordinate => ({
|
return source[field].coordinates.map(coordinate => ({
|
||||||
@@ -494,7 +498,9 @@ const load = (
|
|||||||
...fields,
|
...fields,
|
||||||
[field]: {
|
[field]: {
|
||||||
description: `Use Inline Fragment on Array to get results: https://graphql.org/learn/queries/#inline-fragments`,
|
description: `Use Inline Fragment on Array to get results: https://graphql.org/learn/queries/#inline-fragments`,
|
||||||
type,
|
type: parseClass.fields[field].required
|
||||||
|
? new GraphQLNonNull(type)
|
||||||
|
: type,
|
||||||
async resolve(source) {
|
async resolve(source) {
|
||||||
if (!source[field]) return null;
|
if (!source[field]) return null;
|
||||||
return source[field].map(async elem => {
|
return source[field].map(async elem => {
|
||||||
@@ -516,7 +522,9 @@ const load = (
|
|||||||
...fields,
|
...fields,
|
||||||
[field]: {
|
[field]: {
|
||||||
description: `This is the object ${field}.`,
|
description: `This is the object ${field}.`,
|
||||||
type,
|
type: parseClass.fields[field].required
|
||||||
|
? new GraphQLNonNull(type)
|
||||||
|
: type,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user