objection-graphql
objection-graphql copied to clipboard
Support `GraphQLInputObject` as argument
Seems like objection-graphql cannot handle objects as custom arguments...
{ Error: objection-graphql cannot handle argument value {"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"name","loc":{"start":28,"end":32}},"value":{"kind":"StringValue","value":"containerId","loc":{"start":33,"end":46}},"loc":{"start":28,"end":46}},{"kind":"ObjectField","name":{"kind":"Name","value":"value","loc":{"start":48,"end":53}},"value":{"kind":"StringValue","value":"asd","loc":{"start":54,"end":59}},"loc":{"start":48,"end":59}}],"loc":{"start":27,"end":60}}
at SchemaBuilder._argValue (xxx\node_modules\.github.com\Vincit\objection-graphql\69e09be0192a19ae52585847b4e032641eec0675\node_modules\objection-graphql\lib\SchemaBuilder.js:370:13)
at SchemaBuilder._filterForArgs (xxx\node_modules\.github.com\Vincit\objection-graphql\69e09be0192a19ae52585847b4e032641eec0675\node_modules\objection-graphql\lib\SchemaBuilder.js:346:26)
This is set in the custom argument builder:
args.fieldEq = {
type: ParamInput,
query: (query, value) => {
query.whereRaw("data->>'"+value.name+"' = '" + value.value + "'")
},
}
const ParamInput = new GraphQLInputObjectType({
name: 'ParamInput',
fields: {
name: {type: GraphQLString},
value: {type: GraphQLString},
},
})
Error source
_argValue(value, variables) {
if (value.kind === KIND_VARIABLE) {
return variables[value.name.value];
} else if ('value' in value) {
return value.value;
} else if (Array.isArray(value.values)) {
return value.values.map(value => this._argValue(value, variables));
} else {
throw new Error(`objection-graphql cannot handle argument value ${JSON.stringify(value)}`);
}
}
@denizunal3