import { parse } from "graphql";// Local validation for a caller-supplied `select` (see invoke / plugin.invokeTool).// graphql-js is already a runtime dependency of this plugin, so we reuse its// parser to reject a malformed selection before any network round trip, and to// catch any attempt to break out of the field's selection set (the spliced text// must parse as part of a single operation). Field- and argument-level validity// is left to the upstream server, which returns verbatim errors: building a local// GraphQLSchema would need a full introspection snapshot, but the stored snapshot// is a reduced shape (see introspect.ts) that buildClientSchema cannot consume./** Parse-check an assembled operation string. Returns a one-element error array * when the selection is not valid GraphQL, or an empty array when it parses. */export const validateOperationString = (operationString: string): readonly string[] => { // oxlint-disable-next-line executor/no-try-catch-or-throw -- boundary: graphql `parse` throws on a syntax error; the thrown value is reported generically (its message is not extracted, per the typed-error lint rules) try { parse(operationString); return []; } catch { return ["`select` is not a valid GraphQL selection set"]; }};
import { parse } from "graphql";
// Local validation for a caller-supplied `select` (see invoke / plugin.invokeTool).
// graphql-js is already a runtime dependency of this plugin, so we reuse its
// parser to reject a malformed selection before any network round trip, and to
// catch any attempt to break out of the field's selection set (the spliced text
// must parse as part of a single operation). Field- and argument-level validity
// is left to the upstream server, which returns verbatim errors: building a local
// GraphQLSchema would need a full introspection snapshot, but the stored snapshot
// is a reduced shape (see introspect.ts) that buildClientSchema cannot consume.
/** Parse-check an assembled operation string. Returns a one-element error array
* when the selection is not valid GraphQL, or an empty array when it parses. */
export const validateOperationString = (operationString: string): readonly string[] => {
// oxlint-disable-next-line executor/no-try-catch-or-throw -- boundary: graphql `parse` throws on a syntax error; the thrown value is reported generically (its message is not extracted, per the typed-error lint rules)
try {
parse(operationString);
return [];
} catch {
return ["`select` is not a valid GraphQL selection set"];
}
};