This commit is contained in:
@@ -8,7 +8,7 @@ export type QueryClientServiceTypeId = typeof QueryClientServiceTypeId
|
||||
|
||||
export interface QueryClientService extends Pipeable.Pipeable {
|
||||
readonly [QueryClientServiceTypeId]: QueryClientServiceTypeId
|
||||
readonly cache: Ref.Ref<HashMap.HashMap<Query.Query.AnyKey, Result.Final<unknown, unknown, unknown>>>
|
||||
readonly cache: Ref.Ref<HashMap.HashMap<QueryClientCacheKey, QueryClientCacheEntry>>
|
||||
readonly defaultTtl: Duration.DurationInput
|
||||
}
|
||||
|
||||
@@ -16,11 +16,13 @@ export class QueryClient extends Effect.Service<QueryClient>()("@effect-fc/Query
|
||||
scoped: Effect.suspend(() => service())
|
||||
}) {}
|
||||
|
||||
export class QueryClientServiceImpl extends Pipeable.Class() implements QueryClientService {
|
||||
export class QueryClientServiceImpl
|
||||
extends Pipeable.Class()
|
||||
implements QueryClientService {
|
||||
readonly [QueryClientServiceTypeId]: QueryClientServiceTypeId = QueryClientServiceTypeId
|
||||
|
||||
constructor(
|
||||
readonly cache: Ref.Ref<HashMap.HashMap<Query.Query.AnyKey, Result.Final<unknown, unknown, unknown>>>,
|
||||
readonly cache: Ref.Ref<HashMap.HashMap<QueryClientCacheKey, QueryClientCacheEntry>>,
|
||||
readonly defaultTtl: Duration.DurationInput,
|
||||
) {
|
||||
super()
|
||||
@@ -37,7 +39,7 @@ export declare namespace make {
|
||||
|
||||
export const make = Effect.fnUntraced(function* (options: make.Options = {}): Effect.fn.Return<QueryClientService> {
|
||||
return new QueryClientServiceImpl(
|
||||
yield* Ref.make(HashMap.empty<Query.Query.AnyKey, Result.Final<unknown, unknown, unknown>>()),
|
||||
yield* Ref.make(HashMap.empty<QueryClientCacheKey, QueryClientCacheEntry>()),
|
||||
options.defaultTtl ?? "5 minutes",
|
||||
)
|
||||
})
|
||||
@@ -57,9 +59,13 @@ export const service = (options?: service.Options): Effect.Effect<QueryClientSer
|
||||
export const QueryClientCacheKeyTypeId: unique symbol = Symbol.for("@effect-fc/QueryClient/QueryClientCacheKey")
|
||||
export type QueryClientCacheKeyTypeId = typeof QueryClientCacheKeyTypeId
|
||||
|
||||
export class QueryClientCacheKey implements Equal.Equal {
|
||||
export class QueryClientCacheKey
|
||||
extends Pipeable.Class()
|
||||
implements Pipeable.Pipeable, Equal.Equal {
|
||||
readonly [QueryClientCacheKeyTypeId]: QueryClientCacheKeyTypeId = QueryClientCacheKeyTypeId
|
||||
constructor(readonly key: Query.Query.AnyKey) {}
|
||||
constructor(readonly key: Query.Query.AnyKey) {
|
||||
super()
|
||||
}
|
||||
|
||||
[Equal.symbol](that: Equal.Equal) {
|
||||
return isQueryClientCacheKey(that) && Equivalence.array(Equal.equivalence())(this.key, that.key)
|
||||
@@ -75,14 +81,9 @@ export const isQueryClientCacheKey = (u: unknown): u is QueryClientCacheKey => P
|
||||
export const QueryClientCacheEntryTypeId: unique symbol = Symbol.for("@effect-fc/QueryClient/QueryClientCacheEntry")
|
||||
export type QueryClientCacheEntryTypeId = typeof QueryClientCacheEntryTypeId
|
||||
|
||||
export interface QueryClientCacheEntry extends Pipeable.Pipeable {
|
||||
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId
|
||||
readonly at: DateTime.DateTime
|
||||
readonly ttl: Duration.DurationInput
|
||||
readonly result: Result.Final<unknown, unknown, unknown>
|
||||
}
|
||||
|
||||
export class QueryClientCacheEntryImpl extends Pipeable.Class() implements QueryClientCacheEntry {
|
||||
export class QueryClientCacheEntry
|
||||
extends Pipeable.Class()
|
||||
implements Pipeable.Pipeable {
|
||||
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId = QueryClientCacheEntryTypeId
|
||||
|
||||
constructor(
|
||||
|
||||
Reference in New Issue
Block a user