From 58b2da373e9945c7b37aa5820c488ab7dba82378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 May 2025 21:04:01 +0200 Subject: [PATCH] Query refactoring --- packages/extension-query/src/QueryRunner.ts | 33 ++++++++++---------- packages/extension-query/src/QueryService.ts | 7 ----- packages/extension-query/src/index.ts | 1 - 3 files changed, 17 insertions(+), 24 deletions(-) delete mode 100644 packages/extension-query/src/QueryService.ts diff --git a/packages/extension-query/src/QueryRunner.ts b/packages/extension-query/src/QueryRunner.ts index d1b372b..c98eacd 100644 --- a/packages/extension-query/src/QueryRunner.ts +++ b/packages/extension-query/src/QueryRunner.ts @@ -7,6 +7,7 @@ import { QueryState } from "./internal/index.js" export interface QueryRunner { + readonly queryKey: Stream.Stream readonly latestKeyRef: SubscriptionRef.SubscriptionRef> readonly stateRef: SubscriptionRef.SubscriptionRef> readonly fiberRef: SubscriptionRef.SubscriptionRef { Cause.NoSuchElementException >>> - readonly forkInterrupt: Effect.Effect> + readonly interrupt: Effect.Effect + readonly forkInterrupt: Effect.Effect> readonly forkFetch: Effect.Effect | AsyncData.Failure, Cause.NoSuchElementException>, state: Stream.Stream>, @@ -23,11 +25,14 @@ export interface QueryRunner { fiber: Fiber.RuntimeFiber | AsyncData.Failure, Cause.NoSuchElementException>, state: Stream.Stream>, ]> - - readonly fetchOnKeyChange: Effect.Effect } +export const Tag = (id: Id) => < + Self, K extends readonly unknown[], A, E = never +>() => Effect.Tag(id)>() + + export interface MakeProps { readonly QueryClient: QueryClient.GenericTagClass readonly key: Stream.Stream @@ -158,26 +163,16 @@ export const make = )) ) - const fetchOnKeyChange = Effect.addFinalizer(() => interrupt).pipe( - Effect.andThen(Stream.runForEach(Stream.changes(key), latestKey => - Ref.set(latestKeyRef, Option.some(latestKey)).pipe( - Effect.andThen(forkFetch) - ) - )) - ) - return { - context, - + queryKey: key, latestKeyRef, stateRef, fiberRef, + interrupt, forkInterrupt, forkFetch, forkRefresh, - - fetchOnKeyChange, } }) @@ -193,5 +188,11 @@ export const run = ( if (typeof window !== "undefined" && (options?.refreshOnWindowFocus ?? true)) yield* Stream.runForEach(BrowserStream.fromEventListenerWindow("focus"), () => self.forkRefresh) - yield* self.fetchOnKeyChange + yield* Effect.addFinalizer(() => self.interrupt).pipe( + Effect.andThen(Stream.runForEach(Stream.changes(self.queryKey), latestKey => + Ref.set(self.latestKeyRef, Option.some(latestKey)).pipe( + Effect.andThen(self.forkFetch) + ) + )) + ) }) diff --git a/packages/extension-query/src/QueryService.ts b/packages/extension-query/src/QueryService.ts deleted file mode 100644 index 4864361..0000000 --- a/packages/extension-query/src/QueryService.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Effect } from "effect" -import * as QueryRunner from "./QueryRunner.js" - - -export const Tag = (id: Id) => < - Self, K extends readonly unknown[], A, E = never ->() => Effect.Tag(id)>() diff --git a/packages/extension-query/src/index.ts b/packages/extension-query/src/index.ts index 67d26d3..b86b17b 100644 --- a/packages/extension-query/src/index.ts +++ b/packages/extension-query/src/index.ts @@ -4,4 +4,3 @@ export * as QueryErrorHandler from "./QueryErrorHandler.js" export * from "./QueryExtension.js" export * as QueryProgress from "./QueryProgress.js" export * as QueryRunner from "./QueryRunner.js" -export * as QueryService from "./QueryService.js"