Repository URL to install this package:
|
Version:
0.0.6 ▾
|
import { CompatibleLogger } from './typings'
import { toMockLogger } from './loggerMock'
/**
* @see https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-caching/src/InMemoryLRUCache.ts
* @tutorial https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-caching
*
* @see (related) https://github.com/apollographql/apollo-server/blob/master/packages/apollo-datasource-rest/src/__tests__/RESTDataSource.test.ts
* @see (related) https://github.com/apollographql/apollo-server/blob/master/packages/apollo-datasource-rest/src/HTTPCache.ts
*/
export interface KeyValueCacheType {
delete(key: string, options: { ttl?: number }): Promise<void | undefined>
get(key: string): Promise<string | undefined>
set(key: string, value: string, options?: { ttl?: number }): Promise<void>
}
export class KeyValueCache implements KeyValueCacheType {
store: Map<string, string> = new Map()
logger: CompatibleLogger
constructor(logger: CompatibleLogger = toMockLogger()) {
this.logger = logger
}
async get(key: string): Promise<string | undefined> {
const value = this.store.get(key)
this.logger.info('[cache] get: ' + key)
// @todo could get size of this instead
this.logger.debug('[cache] get->value: ', value)
return Promise.resolve(value)
}
async set(
key: string,
value: string,
options: { ttl?: number } = {}
): Promise<void> {
this.logger.info('[cache] set: ' + key)
this.store.set(key, value)
return Promise.resolve()
}
async delete(key: string, options: { ttl?: number } = {}): Promise<void> {
this.logger.info('[cache] delete: ' + key)
this.store.delete(key)
return Promise.resolve()
}
async clear(): Promise<void> {
this.store.clear()
}
// apollo uses these, we do not
// async flush(): Promise<void> {
// this.store.clear()
// }
// async close(): Promise<void> {
// //
// }
}