apollo-angular
Version:
Use your GraphQL data in your Angular app, with the Apollo Client
1 lines • 28.2 kB
Source Map (JSON)
{"version":3,"file":"apollo-angular-http.mjs","sources":["../../http/src/utils.ts","../../http/src/http-batch-link.ts","../../http/src/http-link.ts","../../http/src/index.ts","../../http/src/apollo-angular-http.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { HttpClient, HttpContext, HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { Body, ExtractedFiles, ExtractFiles, Request } from './types';\n\nexport const fetch = (\n req: Request,\n httpClient: HttpClient,\n extractFiles?: ExtractFiles,\n): Observable<HttpResponse<Object>> => {\n const shouldUseBody = ['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: ExtractedFiles;\n\n if (shouldUseMultipart) {\n if (isBatching) {\n return new Observable(observer =>\n observer.error(new Error('File upload is not available when combined with Batching')),\n );\n }\n\n if (!shouldUseBody) {\n return new Observable(observer =>\n observer.error(new Error('File upload is not available when GET is used')),\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 | undefined,\n destination: HttpHeaders,\n): HttpHeaders => {\n if (source && destination) {\n const merged = destination\n .keys()\n .reduce((headers, name) => headers.set(name, destination.getAll(name)!), source);\n\n return merged;\n }\n\n return destination || source;\n};\n\nexport const mergeHttpContext = (\n source: HttpContext | undefined,\n destination: HttpContext,\n): HttpContext => {\n if (source && destination) {\n return [...source.keys()].reduce(\n (context, name) => context.set(name, source.get(name)),\n destination,\n );\n }\n\n return destination || source;\n};\n\nexport function prioritize<T>(\n ...values: [NonNullable<T>, ...T[]] | [...T[], NonNullable<T>]\n): NonNullable<T> {\n return values.find(val => typeof val !== 'undefined') as NonNullable<T>;\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 { print } from 'graphql';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpContext, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ApolloLink } from '@apollo/client';\nimport { BatchLink } from '@apollo/client/link/batch';\nimport type { HttpLink } from './http-link';\nimport { Body, Context, OperationPrinter, Request } from './types';\nimport {\n createHeadersWithClientAwareness,\n fetch,\n mergeHeaders,\n mergeHttpContext,\n prioritize,\n} from './utils';\n\nexport declare namespace HttpBatchLink {\n export type Options = {\n batchMax?: number;\n batchInterval?: number;\n batchKey?: (operation: ApolloLink.Operation) => string;\n } & HttpLink.Options;\n}\n\nexport const defaults = {\n batchInterval: 10,\n batchMax: 10,\n uri: 'graphql',\n method: 'POST',\n withCredentials: false,\n includeQuery: true,\n includeExtensions: false,\n useMultipart: false,\n} as const;\n\n/**\n * Decides which value to pick from Context, Options or defaults\n */\nexport function pick<K extends keyof Omit<typeof defaults, 'batchInterval' | 'batchMax'>>(\n context: Context,\n options: HttpBatchLink.Options,\n key: K,\n): ReturnType<typeof prioritize<Context[K] | HttpBatchLink.Options[K] | (typeof defaults)[K]>> {\n return prioritize(context[key], options[key], defaults[key]);\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(\n private readonly httpClient: HttpClient,\n private readonly options: HttpBatchLink.Options,\n ) {\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: BatchLink.BatchHandler = (operations: ApolloLink.Operation[]) => {\n return new Observable((observer: any) => {\n const body = this.createBody(operations);\n const headers = this.createHeaders(operations);\n const context = this.createHttpContext(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 context,\n },\n };\n\n const sub = fetch(req, this.httpClient, () => {\n throw new Error('File upload is not available when combined with Batching');\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: ApolloLink.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(\n operations: ApolloLink.Operation[],\n ): Required<Pick<HttpBatchLink.Options, 'method' | 'uri' | 'withCredentials'>> {\n const context: Context = operations[0].getContext();\n\n return {\n method: pick(context, this.options, 'method'),\n uri: pick(context, this.options, 'uri'),\n withCredentials: pick(context, this.options, 'withCredentials'),\n };\n }\n\n private createBody(operations: ApolloLink.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: ApolloLink.Operation[]): HttpHeaders {\n return operations.reduce(\n (headers: HttpHeaders, operation: ApolloLink.Operation) => {\n const { headers: contextHeaders } = operation.getContext();\n return contextHeaders ? mergeHeaders(headers, contextHeaders) : headers;\n },\n createHeadersWithClientAwareness({\n headers: this.options.headers,\n clientAwareness: operations[0]?.getContext()?.clientAwareness,\n }),\n );\n }\n\n private createHttpContext(operations: ApolloLink.Operation[]): HttpContext {\n return operations.reduce(\n (context: HttpContext, operation: ApolloLink.Operation) => {\n const { httpContext } = operation.getContext();\n return httpContext ? mergeHttpContext(httpContext, context) : context;\n },\n mergeHttpContext(this.options.httpContext, new HttpContext()),\n );\n }\n\n private createBatchKey(operation: ApolloLink.Operation): string {\n const context: Context & { skipBatching?: boolean } = operation.getContext();\n\n if (context.skipBatching) {\n return Math.random().toString(36).substring(2, 11);\n }\n\n const headers =\n context.headers && 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(\n op: ApolloLink.Operation,\n forward: ApolloLink.ForwardFunction,\n ): Observable<ApolloLink.Result> {\n return this.batcher.request(op, forward);\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HttpBatchLink {\n constructor(private readonly httpClient: HttpClient) {}\n\n public create(options: HttpBatchLink.Options): HttpBatchLinkHandler {\n return new HttpBatchLinkHandler(this.httpClient, options);\n }\n}\n","import { print } from 'graphql';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ApolloLink } from '@apollo/client';\nimport { pick } from './http-batch-link';\nimport {\n Body,\n Context,\n ExtractFiles,\n FetchOptions,\n HttpRequestOptions,\n OperationPrinter,\n Request,\n} from './types';\nimport { createHeadersWithClientAwareness, fetch, mergeHeaders, mergeHttpContext } from './utils';\n\nexport declare namespace HttpLink {\n export interface Options extends FetchOptions, HttpRequestOptions {\n operationPrinter?: OperationPrinter;\n useGETForQueries?: boolean;\n extractFiles?: ExtractFiles;\n }\n}\n\n// XXX find a better name for it\nexport class HttpLinkHandler extends ApolloLink {\n public requester: (operation: ApolloLink.Operation) => Observable<ApolloLink.Result>;\n private print: OperationPrinter = print;\n\n constructor(\n private readonly httpClient: HttpClient,\n private readonly options: HttpLink.Options,\n ) {\n super();\n\n if (this.options.operationPrinter) {\n this.print = this.options.operationPrinter;\n }\n\n this.requester = (operation: ApolloLink.Operation) =>\n new Observable((observer: any) => {\n const context: Context = operation.getContext();\n\n let method = pick(context, this.options, 'method');\n const includeQuery = pick(context, this.options, 'includeQuery');\n const includeExtensions = pick(context, this.options, 'includeExtensions');\n const url = pick(context, this.options, 'uri');\n const withCredentials = pick(context, this.options, 'withCredentials');\n const useMultipart = pick(context, this.options, 'useMultipart');\n const useGETForQueries = this.options.useGETForQueries === true;\n const httpContext = mergeHttpContext(\n context.httpContext,\n mergeHttpContext(this.options.httpContext, new HttpContext()),\n );\n\n const isQuery = operation.query.definitions.some(\n def => 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 context: httpContext,\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(req, this.httpClient, this.options.extractFiles).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: ApolloLink.Operation): Observable<ApolloLink.Result> {\n return this.requester(op);\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HttpLink {\n constructor(private readonly httpClient: HttpClient) {}\n\n public create(options: HttpLink.Options): HttpLinkHandler {\n return new HttpLinkHandler(this.httpClient, options);\n }\n}\n","// http\nexport { HttpLink, HttpLinkHandler } from './http-link';\n// http-batch\nexport { HttpBatchLink, HttpBatchLinkHandler } from './http-batch-link';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}