Compare commits
2 Commits
b2c9c2c451
...
9f1c5fa464
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f1c5fa464 | |||
|
|
66694c7d7e |
4
bun.lock
4
bun.lock
@@ -6,7 +6,7 @@
|
|||||||
"name": "@effect-fc/monorepo",
|
"name": "@effect-fc/monorepo",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.3.8",
|
"@biomejs/biome": "^2.3.8",
|
||||||
"@effect/language-service": "^0.60.0",
|
"@effect/language-service": "^0.63.0",
|
||||||
"@types/bun": "^1.3.3",
|
"@types/bun": "^1.3.3",
|
||||||
"npm-check-updates": "^19.1.2",
|
"npm-check-updates": "^19.1.2",
|
||||||
"npm-sort": "^0.0.4",
|
"npm-sort": "^0.0.4",
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
|
|
||||||
"@effect-fc/example": ["@effect-fc/example@workspace:packages/example"],
|
"@effect-fc/example": ["@effect-fc/example@workspace:packages/example"],
|
||||||
|
|
||||||
"@effect/language-service": ["@effect/language-service@0.60.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-elJDWHG5Naq3OkilPt9ZRn56JfSA3MhXUIlDx9RWJeScHm96kZ+HkZ3eFBxqROzXwD6Q2DTtFctFwOM0+QLZEA=="],
|
"@effect/language-service": ["@effect/language-service@0.63.2", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-/y33gKaZiG+kWKbs2kogmUAItFta5VVzBChdNCqzQ0E9SFfBf7TapwtN5OgTMNJMcyv41R4zaTGVM4Iqtv7hZQ=="],
|
||||||
|
|
||||||
"@effect/platform": ["@effect/platform@0.93.6", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.19.8" } }, "sha512-I5lBGQWzWXP4zlIdPs7z7WHmEFVBQhn+74emr/h16GZX96EEJ6I1rjGaKyZF7mtukbMuo9wEckDPssM8vskZ/w=="],
|
"@effect/platform": ["@effect/platform@0.93.6", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.19.8" } }, "sha512-I5lBGQWzWXP4zlIdPs7z7WHmEFVBQhn+74emr/h16GZX96EEJ6I1rjGaKyZF7mtukbMuo9wEckDPssM8vskZ/w=="],
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.3.8",
|
"@biomejs/biome": "^2.3.8",
|
||||||
"@effect/language-service": "^0.60.0",
|
"@effect/language-service": "^0.63.0",
|
||||||
"@types/bun": "^1.3.3",
|
"@types/bun": "^1.3.3",
|
||||||
"npm-check-updates": "^19.1.2",
|
"npm-check-updates": "^19.1.2",
|
||||||
"npm-sort": "^0.0.4",
|
"npm-sort": "^0.0.4",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { type Cause, type Context, type Duration, Effect, Fiber, identity, Option, Pipeable, Predicate, type Scope, Stream, type Subscribable, SubscriptionRef } from "effect"
|
import { type Cause, type Context, DateTime, type Duration, Effect, Fiber, HashMap, identity, Option, Pipeable, Predicate, type Scope, Stream, type Subscribable, SubscriptionRef } from "effect"
|
||||||
import * as QueryClient from "./QueryClient.js"
|
import * as QueryClient from "./QueryClient.js"
|
||||||
import * as Result from "./Result.js"
|
import * as Result from "./Result.js"
|
||||||
|
|
||||||
@@ -143,6 +143,31 @@ extends Pipeable.Class() implements Query<K, A, E, R, P> {
|
|||||||
),
|
),
|
||||||
) as Effect.Effect<Result.Final<A, E, P>>
|
) as Effect.Effect<Result.Final<A, E, P>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCacheEntry(
|
||||||
|
key: K
|
||||||
|
): Effect.Effect<Option.Option<QueryClient.QueryClientCacheEntry>, never, QueryClient.QueryClient> {
|
||||||
|
return QueryClient.QueryClient.pipe(
|
||||||
|
Effect.andThen(client => client.cache),
|
||||||
|
Effect.map(HashMap.get(new QueryClient.QueryClientCacheKey(key, this.f as (key: Query.AnyKey) => Effect.Effect<unknown, unknown, unknown>))),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
updateCacheEntry(
|
||||||
|
key: K,
|
||||||
|
result: Result.Success<A>,
|
||||||
|
): Effect.Effect<QueryClient.QueryClientCacheEntry, never, QueryClient.QueryClient> {
|
||||||
|
return Effect.Do.pipe(
|
||||||
|
Effect.bind("client", () => QueryClient.QueryClient),
|
||||||
|
Effect.bind("now", () => DateTime.now),
|
||||||
|
Effect.let("entry", ({ now }) => new QueryClient.QueryClientCacheEntry(result, now)),
|
||||||
|
Effect.tap(({ client, entry }) => SubscriptionRef.update(
|
||||||
|
client.cache,
|
||||||
|
HashMap.set(new QueryClient.QueryClientCacheKey(key, this.f as (key: Query.AnyKey) => Effect.Effect<unknown, unknown, unknown>), entry),
|
||||||
|
)),
|
||||||
|
Effect.map(({ entry }) => entry),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isQuery = (u: unknown): u is Query<readonly unknown[], unknown, unknown, unknown, unknown> => Predicate.hasProperty(u, QueryTypeId)
|
export const isQuery = (u: unknown): u is Query<readonly unknown[], unknown, unknown, unknown, unknown> => Predicate.hasProperty(u, QueryTypeId)
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ implements Pipeable.Pipeable {
|
|||||||
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId = QueryClientCacheEntryTypeId
|
readonly [QueryClientCacheEntryTypeId]: QueryClientCacheEntryTypeId = QueryClientCacheEntryTypeId
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly result: Result.Final<unknown, unknown, unknown>,
|
readonly result: Result.Success<unknown>,
|
||||||
readonly createdAt: DateTime.DateTime,
|
readonly createdAt: DateTime.DateTime,
|
||||||
) {
|
) {
|
||||||
super()
|
super()
|
||||||
|
|||||||
@@ -4,19 +4,20 @@ import { Cause, Context, Data, Effect, Equal, Exit, type Fiber, Hash, Layer, Mat
|
|||||||
export const ResultTypeId: unique symbol = Symbol.for("@effect-fc/Result/Result")
|
export const ResultTypeId: unique symbol = Symbol.for("@effect-fc/Result/Result")
|
||||||
export type ResultTypeId = typeof ResultTypeId
|
export type ResultTypeId = typeof ResultTypeId
|
||||||
|
|
||||||
export type Result<A, E = never, P = never> = ResultState<A, E, P> & (ResultState<A, E, P> | Optimistic)
|
export type Result<A, E = never, P = never> = (
|
||||||
type ResultState<A, E = never, P = never> = (
|
|
||||||
| Initial
|
| Initial
|
||||||
| Running<P>
|
| Running<P>
|
||||||
| Final<A, E, P>
|
| Final<A, E, P>
|
||||||
)
|
// biome-ignore lint/complexity/noBannedTypes: relevant here
|
||||||
|
) & ({} | Optimistic)
|
||||||
|
|
||||||
export type Final<A, E = never, P = never> = (
|
export type Final<A, E = never, P = never> = (
|
||||||
& FinalState<A, E>
|
& (Success<A> | Failure<A, E>)
|
||||||
& (FinalState<A, E> | Refreshing<P>)
|
// biome-ignore lint/complexity/noBannedTypes: relevant here
|
||||||
& (FinalState<A, E> | Optimistic)
|
& ({} | Refreshing<P>)
|
||||||
|
// biome-ignore lint/complexity/noBannedTypes: relevant here
|
||||||
|
& ({} | Optimistic)
|
||||||
)
|
)
|
||||||
type FinalState<A, E = never> = Success<A> | Failure<A, E>
|
|
||||||
|
|
||||||
export namespace Result {
|
export namespace Result {
|
||||||
export interface Prototype extends Pipeable.Pipeable, Equal.Equal {
|
export interface Prototype extends Pipeable.Pipeable, Equal.Equal {
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
"vite": "^7.2.6"
|
"vite": "^7.2.6"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@effect/platform": "^0.93.6",
|
"@effect/platform": "^0.94.0",
|
||||||
"@effect/platform-browser": "^0.73.0",
|
"@effect/platform-browser": "^0.74.0",
|
||||||
"@radix-ui/themes": "^3.2.1",
|
"@radix-ui/themes": "^3.2.1",
|
||||||
"@typed/id": "^0.17.2",
|
"@typed/id": "^0.17.2",
|
||||||
"effect": "^3.19.8",
|
"effect": "^3.19.8",
|
||||||
|
|||||||
Reference in New Issue
Block a user