0.2.2 #31
@@ -8,7 +8,7 @@ export type QueryClientServiceTypeId = typeof QueryClientServiceTypeId
|
|||||||
|
|
||||||
export interface QueryClientService extends Pipeable.Pipeable {
|
export interface QueryClientService extends Pipeable.Pipeable {
|
||||||
readonly [QueryClientServiceTypeId]: QueryClientServiceTypeId
|
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
|
readonly defaultTtl: Duration.DurationInput
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16,11 +16,13 @@ export class QueryClient extends Effect.Service<QueryClient>()("@effect-fc/Query
|
|||||||
scoped: Effect.suspend(() => service())
|
scoped: Effect.suspend(() => service())
|
||||||
}) {}
|
}) {}
|
||||||
|
|
||||||
export class QueryClientServiceImpl extends Pipeable.Class() implements QueryClientService {
|
export class QueryClientServiceImpl
|
||||||
|
extends Pipeable.Class()
|
||||||
|
implements QueryClientService {
|
||||||
readonly [QueryClientServiceTypeId]: QueryClientServiceTypeId = QueryClientServiceTypeId
|
readonly [QueryClientServiceTypeId]: QueryClientServiceTypeId = QueryClientServiceTypeId
|
||||||
|
|
||||||
constructor(
|
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,
|
readonly defaultTtl: Duration.DurationInput,
|
||||||
) {
|
) {
|
||||||
super()
|
super()
|
||||||
@@ -37,7 +39,7 @@ export declare namespace make {
|
|||||||
|
|
||||||
export const make = Effect.fnUntraced(function* (options: make.Options = {}): Effect.fn.Return<QueryClientService> {
|
export const make = Effect.fnUntraced(function* (options: make.Options = {}): Effect.fn.Return<QueryClientService> {
|
||||||
return new QueryClientServiceImpl(
|
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",
|
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 const QueryClientCacheKeyTypeId: unique symbol = Symbol.for("@effect-fc/QueryClient/QueryClientCacheKey")
|
||||||
export type QueryClientCacheKeyTypeId = typeof QueryClientCacheKeyTypeId
|
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
|
readonly [QueryClientCacheKeyTypeId]: QueryClientCacheKeyTypeId = QueryClientCacheKeyTypeId
|
||||||
constructor(readonly key: Query.Query.AnyKey) {}
|
constructor(readonly key: Query.Query.AnyKey) {
|
||||||
|
super()
|
||||||
|
}
|
||||||
|
|
||||||
[Equal.symbol](that: Equal.Equal) {
|
[Equal.symbol](that: Equal.Equal) {
|
||||||
return isQueryClientCacheKey(that) && Equivalence.array(Equal.equivalence())(this.key, that.key)
|
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 const QueryClientCacheEntryTypeId: unique symbol = Symbol.for("@effect-fc/QueryClient/QueryClientCacheEntry")
|
||||||
export type QueryClientCacheEntryTypeId = typeof QueryClientCacheEntryTypeId
|
export type QueryClientCacheEntryTypeId = typeof QueryClientCacheEntryTypeId
|
||||||
|
|
||||||
export interface QueryClientCacheEntry extends Pipeable.Pipeable {
|
export class QueryClientCacheEntry
|
||||||
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId
|
extends Pipeable.Class()
|
||||||
readonly at: DateTime.DateTime
|
implements Pipeable.Pipeable {
|
||||||
readonly ttl: Duration.DurationInput
|
|
||||||
readonly result: Result.Final<unknown, unknown, unknown>
|
|
||||||
}
|
|
||||||
|
|
||||||
export class QueryClientCacheEntryImpl extends Pipeable.Class() implements QueryClientCacheEntry {
|
|
||||||
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId = QueryClientCacheEntryTypeId
|
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId = QueryClientCacheEntryTypeId
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
Reference in New Issue
Block a user