From 7e9a8a5fee4f426bb87c15b5dd7c0d6883b9cd4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 May 2025 17:38:44 +0200 Subject: [PATCH] QueryRunner work --- .../src/internal/QueryRunner.ts | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/extension-query/src/internal/QueryRunner.ts b/packages/extension-query/src/internal/QueryRunner.ts index 5b8bab7..ec7e663 100644 --- a/packages/extension-query/src/internal/QueryRunner.ts +++ b/packages/extension-query/src/internal/QueryRunner.ts @@ -1,4 +1,3 @@ -import { BrowserStream } from "@effect/platform-browser" import * as AsyncData from "@typed/async-data" import { type Cause, type Context, Effect, Fiber, identity, Option, Queue, Ref, type Scope, Stream, SubscriptionRef } from "effect" import type * as QueryClient from "../QueryClient.js" @@ -27,7 +26,6 @@ export interface QueryRunner { ]> readonly fetchOnKeyChange: Effect.Effect - readonly refreshOnWindowFocus: Effect.Effect } @@ -169,11 +167,6 @@ export const make = )) ) - const refreshOnWindowFocus = Stream.runForEach( - BrowserStream.fromEventListenerWindow("focus"), - () => forkRefresh, - ) - return { context, @@ -186,6 +179,27 @@ export const make = forkRefresh, fetchOnKeyChange, - refreshOnWindowFocus, } }) + + +export interface RunOptions { + readonly refreshOnWindowFocus?: boolean +} + +export const run = ( + self: QueryRunner, + options?: RunOptions, +): Effect.Effect => Effect.gen(function*() { + if (options?.refreshOnWindowFocus ?? false) + yield* Effect.tryPromise({ + try: () => import("@effect/platform-browser/BrowserStream"), + catch: () => new Error("Could not import @effect/platform-browser, make sure it is installed as it is a requirement for 'refreshOnWindowFocus'."), + }).pipe( + Effect.flatMap(BrowserStream => Effect.forkScoped( + Stream.runForEach(BrowserStream.fromEventListenerWindow("focus"), () => self.forkRefresh) + )) + ) + + yield* self.fetchOnKeyChange +})