{"version":3,"file":"ngApolloLinkHttp.mjs","sources":["../../http/src/utils.ts","../../http/src/http-link.ts","../../http/src/http-batch-link.ts","../../http/src/index.ts","../../http/src/ngApolloLinkHttp.ts"],"sourcesContent":["import {HttpHeaders, HttpResponse, HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\n\nimport {Request, Body, ExtractFiles} from './types';\n\nexport const fetch = (\n  req: Request,\n  httpClient: HttpClient,\n  extractFiles?: ExtractFiles,\n): Observable<HttpResponse<Object>> => {\n  const shouldUseBody =\n    ['POST', 'PUT', 'PATCH'].indexOf(req.method.toUpperCase()) !== -1;\n  const shouldStringify = (param: string) =>\n    ['variables', 'extensions'].indexOf(param.toLowerCase()) !== -1;\n  const isBatching = (req.body as Body[]).length;\n  let shouldUseMultipart = req.options && req.options.useMultipart;\n  let multipartInfo: {\n    clone: Body;\n    files: Map<any, any>;\n  };\n\n  if (shouldUseMultipart) {\n    if (isBatching) {\n      return new Observable((observer) =>\n        observer.error(\n          new Error('File upload is not available when combined with Batching'),\n        ),\n      );\n    }\n\n    if (!shouldUseBody) {\n      return new Observable((observer) =>\n        observer.error(\n          new Error('File upload is not available when GET is used'),\n        ),\n      );\n    }\n\n    if (!extractFiles) {\n      return new Observable((observer) =>\n        observer.error(\n          new Error(\n            `To use File upload you need to pass \"extractFiles\" function from \"extract-files\" library to HttpLink's options`,\n          ),\n        ),\n      );\n    }\n\n    multipartInfo = extractFiles(req.body);\n\n    shouldUseMultipart = !!multipartInfo.files.size;\n  }\n\n  // `body` for some, `params` for others\n  let bodyOrParams = {};\n\n  if (isBatching) {\n    if (!shouldUseBody) {\n      return new Observable((observer) =>\n        observer.error(new Error('Batching is not available for GET requests')),\n      );\n    }\n\n    bodyOrParams = {\n      body: req.body,\n    };\n  } else {\n    const body = shouldUseMultipart ? multipartInfo!.clone : req.body;\n\n    if (shouldUseBody) {\n      bodyOrParams = {\n        body,\n      };\n    } else {\n      const params = Object.keys(req.body).reduce((obj: any, param) => {\n        const value = (req.body as any)[param];\n        obj[param] = shouldStringify(param) ? JSON.stringify(value) : value;\n        return obj;\n      }, {});\n\n      bodyOrParams = {params: params};\n    }\n  }\n\n  if (shouldUseMultipart && shouldUseBody) {\n    const form = new FormData();\n\n    form.append('operations', JSON.stringify((bodyOrParams as any).body));\n\n    const map: Record<string, any> = {};\n    const files = multipartInfo!.files;\n\n    let i = 0;\n    files.forEach((paths) => {\n      map[++i] = paths;\n    });\n\n    form.append('map', JSON.stringify(map));\n\n    i = 0;\n    files.forEach((_, file) => {\n      form.append(++i + '', file, file.name);\n    });\n\n    (bodyOrParams as any).body = form;\n  }\n\n  // create a request\n  return httpClient.request<Object>(req.method, req.url, {\n    observe: 'response',\n    responseType: 'json',\n    reportProgress: false,\n    ...bodyOrParams,\n    ...req.options,\n  });\n};\n\nexport const mergeHeaders = (\n  source: HttpHeaders,\n  destination: HttpHeaders,\n): HttpHeaders => {\n  if (source && destination) {\n    const merged = destination\n      .keys()\n      .reduce(\n        (headers, name) => headers.set(name, destination.getAll(name)),\n        source,\n      );\n\n    return merged;\n  }\n\n  return destination || source;\n};\n\nexport function prioritize<T>(...values: T[]): T {\n  const picked = values.find((val) => typeof val !== 'undefined');\n\n  if (typeof picked === 'undefined') {\n    return values[values.length - 1];\n  }\n\n  return picked;\n}\n\nexport function createHeadersWithClientAwareness(context: Record<string, any>) {\n  // `apollographql-client-*` headers are automatically set if a\n  // `clientAwareness` object is found in the context. These headers are\n  // set first, followed by the rest of the headers pulled from\n  // `context.headers`.\n  let headers =\n    context.headers && context.headers instanceof HttpHeaders\n      ? context.headers\n      : new HttpHeaders(context.headers);\n\n  if (context.clientAwareness) {\n    const {name, version} = context.clientAwareness;\n\n    // If desired, `apollographql-client-*` headers set by\n    // the `clientAwareness` object can be overridden by\n    // `apollographql-client-*` headers set in `context.headers`.\n\n    if (name && !headers.has('apollographql-client-name')) {\n      headers = headers.set('apollographql-client-name', name);\n    }\n\n    if (version && !headers.has('apollographql-client-version')) {\n      headers = headers.set('apollographql-client-version', version);\n    }\n  }\n\n  return headers;\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {\n  ApolloLink,\n  Observable as LinkObservable,\n  Operation,\n  FetchResult,\n} from '@apollo/client/core';\nimport {print} from 'graphql';\nimport {Options, Body, Request, Context, OperationPrinter} from './types';\nimport {\n  createHeadersWithClientAwareness,\n  fetch,\n  mergeHeaders,\n  prioritize,\n} from './utils';\n\n// XXX find a better name for it\nexport class HttpLinkHandler extends ApolloLink {\n  public requester: (\n    operation: Operation,\n  ) => LinkObservable<FetchResult> | null;\n  private print: OperationPrinter = print;\n\n  constructor(private httpClient: HttpClient, private options: Options) {\n    super();\n\n    if (this.options.operationPrinter) {\n      this.print = this.options.operationPrinter;\n    }\n\n    this.requester = (operation: Operation) =>\n      new LinkObservable((observer: any) => {\n        const context: Context = operation.getContext();\n\n        // decides which value to pick, Context, Options or to just use the default\n        const pick = <K extends keyof Context>(\n          key: K,\n          init?: Context[K] | Options[K],\n        ): Context[K] | Options[K] => {\n          return prioritize(context[key], this.options[key], init);\n        };\n\n        let method = pick('method', 'POST');\n        const includeQuery = pick('includeQuery', true);\n        const includeExtensions = pick('includeExtensions', false);\n        const url = pick('uri', 'graphql');\n        const withCredentials = pick('withCredentials');\n        const useMultipart = pick('useMultipart');\n        const useGETForQueries = this.options.useGETForQueries === true;\n\n        const isQuery = operation.query.definitions.some(\n          (def) =>\n            def.kind === 'OperationDefinition' && def.operation === 'query',\n        );\n\n        if (useGETForQueries && isQuery) {\n          method = 'GET';\n        }\n\n        const req: Request = {\n          method,\n          url: typeof url === 'function' ? url(operation) : url,\n          body: {\n            operationName: operation.operationName,\n            variables: operation.variables,\n          },\n          options: {\n            withCredentials,\n            useMultipart,\n            headers: this.options.headers,\n          },\n        };\n\n        if (includeExtensions) {\n          (req.body as Body).extensions = operation.extensions;\n        }\n\n        if (includeQuery) {\n          (req.body as Body).query = this.print(operation.query);\n        }\n\n        const headers = createHeadersWithClientAwareness(context);\n\n        req.options.headers = mergeHeaders(req.options.headers, headers);\n\n        const sub = fetch(\n          req,\n          this.httpClient,\n          this.options.extractFiles,\n        ).subscribe({\n          next: (response) => {\n            operation.setContext({response});\n            observer.next(response.body);\n          },\n          error: (err) => observer.error(err),\n          complete: () => observer.complete(),\n        });\n\n        return () => {\n          if (!sub.closed) {\n            sub.unsubscribe();\n          }\n        };\n      });\n  }\n\n  public request(op: Operation): LinkObservable<FetchResult> | null {\n    return this.requester(op);\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HttpLink {\n  constructor(private httpClient: HttpClient) {}\n\n  public create(options: Options): HttpLinkHandler {\n    return new HttpLinkHandler(this.httpClient, options);\n  }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {\n  ApolloLink,\n  Observable as LinkObservable,\n  Operation,\n  FetchResult,\n} from '@apollo/client/core';\nimport {BatchLink, BatchHandler} from '@apollo/client/link/batch';\nimport {print} from 'graphql';\nimport {Body, Context, Request, Options, OperationPrinter} from './types';\nimport {\n  createHeadersWithClientAwareness,\n  fetch,\n  mergeHeaders,\n  prioritize,\n} from './utils';\n\nimport {BatchOptions} from './types';\n\nconst defaults = {\n  batchInterval: 10,\n  batchMax: 10,\n  uri: 'graphql',\n  method: 'POST',\n};\n\nexport class HttpBatchLinkHandler extends ApolloLink {\n  public batcher: ApolloLink;\n  private batchInterval: number;\n  private batchMax: number;\n  private print: OperationPrinter = print;\n\n  constructor(private httpClient: HttpClient, private options: BatchOptions) {\n    super();\n\n    this.batchInterval = options.batchInterval || defaults.batchInterval;\n    this.batchMax = options.batchMax || defaults.batchMax;\n\n    if (this.options.operationPrinter) {\n      this.print = this.options.operationPrinter;\n    }\n\n    const batchHandler: BatchHandler = (operations: Operation[]) => {\n      return new LinkObservable((observer: any) => {\n        const body = this.createBody(operations);\n        const headers = this.createHeaders(operations);\n        const {method, uri, withCredentials} = this.createOptions(operations);\n\n        if (typeof uri === 'function') {\n          throw new Error(`Option 'uri' is a function, should be a string`);\n        }\n\n        const req: Request = {\n          method,\n          url: uri,\n          body: body,\n          options: {\n            withCredentials,\n            headers,\n          },\n        };\n\n        const sub = fetch(req, this.httpClient, () => {\n          throw new Error(\n            'File upload is not available when combined with Batching',\n          );\n        }).subscribe({\n          next: (result) => observer.next(result.body),\n          error: (err) => observer.error(err),\n          complete: () => observer.complete(),\n        });\n\n        return () => {\n          if (!sub.closed) {\n            sub.unsubscribe();\n          }\n        };\n      });\n    };\n\n    const batchKey =\n      options.batchKey ||\n      ((operation: Operation) => {\n        return this.createBatchKey(operation);\n      });\n\n    this.batcher = new BatchLink({\n      batchInterval: this.batchInterval,\n      batchMax: this.batchMax,\n      batchKey,\n      batchHandler,\n    });\n  }\n\n  private createOptions(operations: Operation[]): Options {\n    const context: Context = operations[0].getContext();\n\n    return {\n      method: prioritize(context.method, this.options.method, defaults.method),\n      uri: prioritize(context.uri, this.options.uri, defaults.uri),\n      withCredentials: prioritize(\n        context.withCredentials,\n        this.options.withCredentials,\n      ),\n    };\n  }\n\n  private createBody(operations: Operation[]): Body[] {\n    return operations.map((operation) => {\n      const includeExtensions = prioritize(\n        operation.getContext().includeExtensions,\n        this.options.includeExtensions,\n        false,\n      );\n      const includeQuery = prioritize(\n        operation.getContext().includeQuery,\n        this.options.includeQuery,\n        true,\n      );\n\n      const body: Body = {\n        operationName: operation.operationName,\n        variables: operation.variables,\n      };\n\n      if (includeExtensions) {\n        body.extensions = operation.extensions;\n      }\n\n      if (includeQuery) {\n        body.query = this.print(operation.query);\n      }\n\n      return body;\n    });\n  }\n\n  private createHeaders(operations: Operation[]): HttpHeaders {\n    return operations.reduce(\n      (headers: HttpHeaders, operation: Operation) => {\n        return mergeHeaders(headers, operation.getContext().headers);\n      },\n      createHeadersWithClientAwareness({\n        headers: this.options.headers,\n        clientAwareness: operations[0]?.getContext()?.clientAwareness,\n      }),\n    );\n  }\n\n  private createBatchKey(operation: Operation): string {\n    const context: Context & {skipBatching?: boolean} = operation.getContext();\n\n    if (context.skipBatching) {\n      return Math.random().toString(36).substr(2, 9);\n    }\n\n    const headers =\n      context.headers &&\n      context.headers.keys().map((k: string) => context.headers.get(k));\n\n    const opts = JSON.stringify({\n      includeQuery: context.includeQuery,\n      includeExtensions: context.includeExtensions,\n      headers,\n    });\n\n    return prioritize(context.uri, this.options.uri) + opts;\n  }\n\n  public request(op: Operation): LinkObservable<FetchResult> | null {\n    return this.batcher.request(op);\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HttpBatchLink {\n  constructor(private httpClient: HttpClient) {}\n\n  public create(options: BatchOptions): HttpBatchLinkHandler {\n    return new HttpBatchLinkHandler(this.httpClient, options);\n  }\n}\n","// http\nexport {HttpLink, HttpLinkHandler} from './http-link';\n// http-batch\nexport {HttpBatchLink, HttpBatchLinkHandler} from './http-batch-link';\n// common\nexport {BatchOptions, Options} from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["LinkObservable"],"mappings":"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"}