Skip to content

Commit cc215cc

Browse files
author
dustin deus
committed
avoud unhandled promise rejection, support apollo logger interface
1 parent dc38308 commit cc215cc

File tree

3 files changed

+125
-9
lines changed

3 files changed

+125
-9
lines changed

package-lock.json

Lines changed: 109 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"apollo-datasource": "^0.9.0",
5454
"apollo-server-caching": "^0.7.0",
5555
"apollo-server-errors": "^2.5.0",
56+
"apollo-server-types": "^0.9.0",
5657
"graphql": "^15.5.1",
5758
"keyv": "^4.0.3",
5859
"secure-json-parse": "^2.4.0",

src/http-data-source.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { KeyValueCache } from 'apollo-server-caching'
99
import { ResponseData, RequestOptions as UndiciRequestOptions } from 'undici/types/dispatcher'
1010
import { ApolloError } from 'apollo-server-errors'
1111
import { EventEmitter, Readable } from 'stream'
12+
import { Logger } from 'apollo-server-types'
1213

1314
type AbortSignal = unknown
1415

@@ -31,9 +32,10 @@ export type RequestOptions = {
3132
signal?: AbortSignal | EventEmitter | null
3233
} & CacheTTLOptions
3334

34-
export type Request = UndiciRequestOptions & CacheTTLOptions & {
35-
headers: Dictionary<string>
36-
}
35+
export type Request = UndiciRequestOptions &
36+
CacheTTLOptions & {
37+
headers: Dictionary<string>
38+
}
3739

3840
export type Response<TResult> = {
3941
body: TResult
@@ -45,6 +47,7 @@ export interface LRUOptions {
4547
}
4648

4749
export interface HTTPDataSourceOptions {
50+
logger?: Logger
4851
pool?: Pool
4952
requestOptions?: RequestOptions
5053
clientOptions?: Pool.Options
@@ -86,6 +89,7 @@ export abstract class HTTPDataSource<TContext = any> extends DataSource {
8689
public context!: TContext
8790
private storageAdapter!: Keyv
8891
private pool: Pool
92+
private logger?: Logger
8993
private globalRequestOptions?: RequestOptions
9094
private readonly memoizedResults: QuickLRU<string, Response<any>>
9195

@@ -96,6 +100,7 @@ export abstract class HTTPDataSource<TContext = any> extends DataSource {
96100
})
97101
this.pool = options?.pool ?? new Pool(this.baseURL, options?.clientOptions)
98102
this.globalRequestOptions = options?.requestOptions
103+
this.logger = options?.logger
99104
}
100105

101106
/**
@@ -243,12 +248,13 @@ export abstract class HTTPDataSource<TContext = any> extends DataSource {
243248
this.onResponse<TResult>(options, response)
244249

245250
if (options.requestCache && this.isResponseCacheable<TResult>(options, response)) {
246-
this.storageAdapter.set(cacheKey, response, options.requestCache?.maxTtl)
247-
this.storageAdapter.set(
248-
`staleIfError:${cacheKey}`,
249-
response,
250-
options.requestCache?.maxTtlIfError,
251-
)
251+
// TODO log errors with external logger
252+
this.storageAdapter
253+
.set(cacheKey, response, options.requestCache?.maxTtl)
254+
.catch((err) => this.logger?.error(err))
255+
this.storageAdapter
256+
.set(`staleIfError:${cacheKey}`, response, options.requestCache?.maxTtlIfError)
257+
.catch((err) => this.logger?.error(err))
252258
}
253259

254260
return response

0 commit comments

Comments
 (0)