{"version":3,"file":"index.cjs","sources":["../../../../src/link/schema/index.ts"],"sourcesContent":["import type { GraphQLSchema } from \"graphql\";\nimport { execute, validate } from \"graphql\";\nimport { Observable } from \"rxjs\";\n\nimport { ApolloLink } from \"@apollo/client/link\";\n\nexport declare namespace SchemaLink {\n  export namespace SchemaLinkDocumentationTypes {\n    /**\n     * A function that returns the resolver context for a given operation.\n     *\n     * This function is called for each operation and allows you to create\n     * operation-specific context. This is useful when you need to include\n     * information from the operation (like headers, variables, etc.) in the\n     * resolver context.\n     *\n     * @param operation - The Apollo Link operation\n     * @returns The resolver context object or a promise that resolves to the context\n     *\n     * @example\n     *\n     * ```ts\n     * const link = new SchemaLink({\n     *   schema,\n     *   context: (operation) => {\n     *     return {\n     *       userId: operation.getContext().userId,\n     *       dataSources: {\n     *         userAPI: new UserAPI(),\n     *       },\n     *     };\n     *   },\n     * });\n     * ```\n     */\n    export function ResolverContextFunction(\n      operation: ApolloLink.Operation\n    ): SchemaLink.ResolverContext | PromiseLike<SchemaLink.ResolverContext>;\n  }\n  /**\n   * The resolver context object passed to GraphQL resolvers.\n   *\n   * This context object is passed as the third parameter to GraphQL resolvers\n   * and typically contains data-fetching connectors, authentication information,\n   * and other request-specific data.\n   */\n  export type ResolverContext = Record<string, any>;\n\n  /** {@inheritDoc @apollo/client/link/schema!SchemaLink.SchemaLinkDocumentationTypes.ResolverContextFunction:function(1)} */\n  export type ResolverContextFunction = (\n    operation: ApolloLink.Operation\n  ) => SchemaLink.ResolverContext | PromiseLike<SchemaLink.ResolverContext>;\n\n  /**\n   * Options for configuring the `SchemaLink`.\n   */\n  export interface Options {\n    /**\n     * An executable GraphQL schema to use for operation execution.\n     *\n     * @remarks\n     *\n     * This should be a complete, executable GraphQL schema created using\n     * tools like `makeExecutableSchema` from `@graphql-tools/schema` or\n     * `buildSchema` from `graphql`.\n     *\n     * @example\n     *\n     * ```ts\n     * import { makeExecutableSchema } from \"@graphql-tools/schema\";\n     *\n     * const schema = makeExecutableSchema({\n     *   typeDefs,\n     *   resolvers,\n     * });\n     *\n     * const link = new SchemaLink({ schema });\n     * ```\n     */\n    schema: GraphQLSchema;\n\n    /**\n     * The root value passed to root-level resolvers. It's typically not used in\n     * most schemas but can be useful for certain advanced patterns.\n     */\n    rootValue?: any;\n\n    /**\n     * Context object or function that returns the context object to provide to\n     * resolvers. The context is passed as the third parameter to all GraphQL\n     * resolvers.\n     *\n     * - If a static object is provided, the same context will be used for all\n     *   operations\n     * - If a function is provided, the function is called for each operation to\n     *   generate operation-specific context\n     */\n    context?: SchemaLink.ResolverContext | SchemaLink.ResolverContextFunction;\n\n    /**\n     * Whether to validate incoming queries against the schema before execution.\n     *\n     * When enabled, queries will be validated against the schema before execution,\n     * and validation errors will be returned in the result's `errors` array,\n     * just like a remote GraphQL server would.\n     *\n     * This is useful for testing and development to catch query errors early,\n     * but may add overhead in production environments.\n     *\n     * @defaultValue false\n     */\n    validate?: boolean;\n  }\n}\n\n/**\n * `SchemaLink` is a terminating link that executes GraphQL operations against\n * a local GraphQL schema instead of making network requests. This is commonly\n * used for server-side rendering (SSR) and mocking data.\n *\n * > [!NOTE]\n * > While `SchemaLink` can provide GraphQL results on the client, the GraphQL\n * > execution layer is [quite large](https://bundlephobia.com/result?p=graphql) for practical client-side use.\n * > For client-side state management, consider Apollo Client's [local state management](https://apollographql.com/docs/react/local-state/local-state-management/)\n * > functionality instead, which integrates with the Apollo Client cache.\n *\n * @example\n *\n * ```ts\n * import { SchemaLink } from \"@apollo/client/link/schema\";\n * import schema from \"./path/to/your/schema\";\n *\n * const link = new SchemaLink({ schema });\n * ```\n */\nexport class SchemaLink extends ApolloLink {\n  public schema: SchemaLink.Options[\"schema\"];\n  public rootValue: SchemaLink.Options[\"rootValue\"];\n  public context: SchemaLink.Options[\"context\"];\n  public validate: boolean;\n\n  constructor(options: SchemaLink.Options) {\n    super();\n    this.schema = options.schema;\n    this.rootValue = options.rootValue;\n    this.context = options.context;\n    this.validate = !!options.validate;\n  }\n\n  public request(\n    operation: ApolloLink.Operation\n  ): Observable<ApolloLink.Result> {\n    return new Observable<ApolloLink.Result>((observer) => {\n      new Promise<SchemaLink.ResolverContext>((resolve) =>\n        resolve(\n          typeof this.context === \"function\" ?\n            this.context(operation)\n          : this.context\n        )\n      )\n        .then((context) => {\n          if (this.validate) {\n            const validationErrors = validate(this.schema, operation.query);\n            if (validationErrors.length > 0) {\n              return { errors: validationErrors };\n            }\n          }\n\n          return execute({\n            schema: this.schema,\n            document: operation.query,\n            rootValue: this.rootValue,\n            contextValue: context,\n            variableValues: operation.variables,\n            operationName: operation.operationName,\n          });\n        })\n        .then((data) => {\n          if (!observer.closed) {\n            observer.next(data);\n            observer.complete();\n          }\n        })\n        .catch((error) => {\n          if (!observer.closed) {\n            observer.error(error);\n          }\n        });\n    });\n  }\n}\n"],"names":[],"mappings":"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"}