From 6b0f2f33cbe28c0fed9d76261f2ed23e6912b33a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 2 Mar 2025 02:48:19 +0100 Subject: [PATCH] Query work --- packages/extension-query/src/Query.ts | 46 ++++++++++++--------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/packages/extension-query/src/Query.ts b/packages/extension-query/src/Query.ts index 8098466..0cf4bdf 100644 --- a/packages/extension-query/src/Query.ts +++ b/packages/extension-query/src/Query.ts @@ -1,4 +1,4 @@ -import { Effect, Fiber, Option, type Ref, type SubscriptionRef } from "effect" +import { Effect, Fiber, Option, SubscriptionRef, type Ref } from "effect" import * as AsyncData from "@typed/async-data" @@ -7,33 +7,29 @@ export interface QueryRunner { readonly fiberRef: SubscriptionRef.SubscriptionRef>> readonly interrupt: Effect.Effect - readonly fetch: Effect.Effect - readonly refetch: Effect.Effect + fetch(effect: Effect.Effect): Effect.Effect + // refetch(effect: Effect.Effect): Effect.Effect } +export const make = Effect.fnUntraced(function*(): Effect.Effect> { + const stateRef = yield* SubscriptionRef.make(AsyncData.noData()) + const fiberRef = yield* SubscriptionRef.make(Option.none>()) -export class Query { - constructor( - private readonly stateRef: SubscriptionRef.SubscriptionRef>, - private readonly fiberRef: SubscriptionRef.SubscriptionRef>>, - ) {} + const interrupt = fiberRef.pipe( + Effect.flatMap(Option.match({ + onSome: Fiber.interrupt, + onNone: () => Effect.void, + })) + ) - private run(effect: Effect.Effect) { + const fetch = Effect.fnUntraced(function*(effect: Effect.Effect) { - } - - // interrupt(): Effect.Effect { - // return this.fiberRef.pipe( - // Effect.flatMap(Option.match({ - // onSome: Fiber.interrupt, - // onNone: () => Effect.void, - // })) - // ) - // } - - - - fetch = Effect.gen(this, function*() { - yield* this.interrupt() }) -} + + return { + stateRef, + fiberRef, + interrupt, + fetch, + } +})