Open
Description
Hi team,
I wanted to request the ability to access resolver info within Modus functions, similar to how GraphQL resolvers get an info
parameter. Can someone confirm if this is something we could add to Modus?
Use Cases
- Query Optimization: Build database queries based on requested fields
- Authentication: Field-level authorization and access control
- Root-Level Query Building: Optimize joins and prevent N+1 queries
- Plugin Development: Enable Text-to-GraphQL and schema-aware tooling
- Operation Analysis: Access operation type and name for metrics/logging
Implementation Examples
Query Optimization
export function getMovies(info: ResolverInfo): Movie[] {
const requestedFields = info.fieldNodes[0].selectionSet.selections;
const query = `
MATCH (m:Movie)
RETURN m.${requestedFields.map(f => f.name.value).join(', m.')}
`;
return executeQuery(query);
}
Authentication Patterns
export function getMovies(info: ResolverInfo): Movie[] {
const operation = info.operation.name;
const sensitiveFields = findSensitiveFields(info.fieldNodes[0]);
requirePermissions(sensitiveFields);
const query = buildSecureQuery(requestedFields);
return executeQuery(query);
}
Text-to-GraphQL Plugins
export function textToQuery(question: string, info: ResolverInfo): QueryResult {
const schema = info.schema;
const generatedQuery = llmGenerateQuery(question, schema);
const operationType = info.operation.operation;
return executeQuery(generatedQuery, operationType);
}
Go Implementation
func FetchMovies(page int, search string, info *ResolverInfo) (string, error) {
requestedFields := info.FieldNodes[0].SelectionSet.Selections
query := fmt.Sprintf(`{
movies(func: has(type.Movie), first: 10, offset: %d) {
%s
}
}`, page * 10, buildFieldSelection(requestedFields))
return executeDgraphQuery(query)
}
Tools using Resolve info
There are plenty of tools out there that use the resolve info, here is a list for inspiration:
- https://github.com/neo4j/graphql
- https://www.graphql-debugger.com
- https://www.npmjs.com/package/@opentelemetry/instrumentation-graphql
- https://github.com/maticzav/graphql-shield
- https://the-guild.dev/graphql/mesh/v1/auth
- https://hasura.io/
- https://www.npmjs.com/package/graphql-depth-limit
- https://github.com/pa-bru/graphql-cost-analysis
- ...
Activity