UNPKG

23.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"ngApolloLinkHttp.js","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 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 createHeadersWithClientAwereness(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 {extractFiles} from 'extract-files';\nimport {Options, Body, Request, Context, OperationPrinter} from './types';\nimport {\n createHeadersWithClientAwereness,\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 const includeQuery = pick('includeQuery', true);\n const includeExtensions = pick('includeExtensions', false);\n const method = pick('method', 'POST');\n const url = pick('uri', 'graphql');\n const withCredentials = pick('withCredentials');\n const useMultipart = pick('useMultipart');\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 = createHeadersWithClientAwereness(context);\n\n req.options.headers = mergeHeaders(req.options.headers, headers);\n\n const sub = fetch(req, this.httpClient, 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: 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 createHeadersWithClientAwereness,\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 createHeadersWithClientAwereness({\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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"}
\No newline at end of file