From 25d5defdca51b5b138a37a87aee4a4cdfff05bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 15 Nov 2025 05:04:34 +0100 Subject: [PATCH] Add Query module --- packages/effect-fc/src/Query.ts | 29 +++++++++++++++++++++++++++++ packages/effect-fc/src/index.ts | 1 + 2 files changed, 30 insertions(+) create mode 100644 packages/effect-fc/src/Query.ts diff --git a/packages/effect-fc/src/Query.ts b/packages/effect-fc/src/Query.ts new file mode 100644 index 0000000..8c549b8 --- /dev/null +++ b/packages/effect-fc/src/Query.ts @@ -0,0 +1,29 @@ +import { type Effect, Pipeable, Predicate, type Stream } from "effect" + + +export const QueryTypeId: unique symbol = Symbol.for("@effect-fc/Query/Query") +export type QueryTypeId = typeof QueryTypeId + +export interface Query +extends Pipeable.Pipeable { + readonly [QueryTypeId]: QueryTypeId + + readonly key: Stream.Stream + readonly query: (key: K) => Effect.Effect + readonly initialProgress: P +} + +class QueryImpl +extends Pipeable.Class() implements Query { + readonly [QueryTypeId]: QueryTypeId = QueryTypeId + + constructor( + readonly key: Stream.Stream, + readonly query: (key: K) => Effect.Effect, + readonly initialProgress: P, + ) { + super() + } +} + +export const isQuery = (u: unknown): u is Query => Predicate.hasProperty(u, QueryTypeId) diff --git a/packages/effect-fc/src/index.ts b/packages/effect-fc/src/index.ts index 08e0b73..18468a4 100644 --- a/packages/effect-fc/src/index.ts +++ b/packages/effect-fc/src/index.ts @@ -5,6 +5,7 @@ export * as Form from "./Form.js" export * as Memoized from "./Memoized.js" export * as PropertyPath from "./PropertyPath.js" export * as PubSub from "./PubSub.js" +export * as Query from "./Query.js" export * as ReactRuntime from "./ReactRuntime.js" export * as Result from "./Result.js" export * as SetStateAction from "./SetStateAction.js"