22 lines · 1.3 KB · TypeScript
RawDownload
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"];  }};