From 107d1ba359db53a65cfca98beb2d9787f59a1e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 9 Jan 2025 11:51:14 +0100 Subject: [PATCH] Reffuse work --- bun.lockb | Bin 0 -> 4048 bytes packages/reffuse/package.json | 4 +++ packages/reffuse/src/Reffuse.ts | 50 ++++++++++++++++++++++++++++++++ packages/reffuse/src/index.ts | 1 + 4 files changed, 55 insertions(+) create mode 100755 bun.lockb create mode 100644 packages/reffuse/src/Reffuse.ts diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..407e203207f760871d19b874c21db119fac7397f GIT binary patch literal 4048 zcmdT{dr(wW7{AC?uppp36eU`Q!BJx``{1!EAP$ib6(%?cfNDZ zch3GcJS@u0&{0`BLlkAm6=j(XLiogbqbggi(^F!#kJrhaBT`ZaBYI{gW3>+u!x}) zLP=9f6$^Drt)@_=o$DvvZ0wdWXnTX7iecD169p~1t!)0yy>Hy&kS!6G$X8cUS=RQZ z=3wio;=y?UjtBgU;O*+%h#2D+ad^CbLBF#)2QhvR;A6S?(fqFNKVm}u z=tFa&^Fzij(HLGAI$LC@ME&^2puT6r)9c%dh@PbZpBrK4eWuhrUVIKHY{BgnfivWS zkiJ!u{BJd{dsr2d`e4PhcSHZGZn)5-s|heRj-2;dX6pgX^a&4Z()$WBC&*%&M08_! zS!>b6rJd3FJYN1e3et`RZdRQWjV>wITy454XnK25;pWncv~7y{q0-}L>4x7= z-`jP4x{rCy+>HI}^CyqiZZB)}KXbh>eD993`n{8HmYn(dnyF=z)^fR1{$a=8JYJkP zwtXnva%e()i--7B{-Fg2D>9BAxpCk-zvD@5S?m1k;)*M+k(GD7wj7k_)cPK*%ifXV zy=TUy@h9b<*4C_izrI@U-oWEU`G-xAle*!=z2L1uV=DF*ZS$I)k*nI6&@&}s>Zati zc|FTg&vo89e;+%QcbxjW8|riwtl|w{=QMZK@aXXre!I3yf~i`x8Q1*-v=j> zv%WICo*W!9xU|~CN{y&XXmP)*NewJ2Pw7mritn9N8f0~EpIF;{=c+b*+psYwTT6Z! zo8Fz;-0<*C9xwl12;>W_*7M8u4LVva`7^R9XU|YyvUJx7W27P^pleRMuz2IFQE}(n zVp6|t`>DL=o5aYz@T!pIDP5Pz!`1JVRk}|FURMpDD=uBdJr8~ZSf)MP0Rx_gRsIiR z*v-kEBU~wrXJ{3vGcc@DuP3qABInT*l_-))M2v1JWmHFsqD4x*PGc~tK@oxV_Sp^9 z(S7LP=sfJhgfQMLmn8z~33zn8=v_r`Aj)TSSJC@|-U0>3kv;$}ghxDx5Ak9y6k8GI z^MVGLFn)n7Hq)$t^~E~klRDRj^&i%6BHIIn6jT_Xk4tnFY# zPD*8@l)&l{t3Qm95LjPgeF!5lWE=@nsU1ZL^I(NI2(ih4kieP~YepD}C8eZd}UgkTQbU&8@q`v3~xMGgMA4MUzvOuoP`j>gTew&Y(#YNu67xaBdCSK7wUbw({8h zfSq))H2?{A)aTp0Bfjh9MYSx$P&9C6UJ(_{QO~>^2i|DcRw`mHx-IeP9gajCSkGX4 z3AqAiA${CY*c?nsRkl(?F;O%qa5F;Tz~hC!zz1 z6|p@_5J;_LSg}e=sj~Z-(dh&f&IZsxddLus$xKsXT4`9=4~xSGNE~&sEs>rQev)mw z>WXPi#iSKC< z=YH4$drY3sr)WlJG{DpJBs$yN1Nr&s;O4vOn77|>2^_D2`-h7EsXqD?bN3S8M`yIW RmkMv3?LVu<*?K-|{{X2`-(vs( literal 0 HcmV?d00001 diff --git a/packages/reffuse/package.json b/packages/reffuse/package.json index 291ffca..3284391 100644 --- a/packages/reffuse/package.json +++ b/packages/reffuse/package.json @@ -24,5 +24,9 @@ "clean:node": "rm -rf node_modules" }, "devDependencies": { + "@types/react": "^19.0.4", + "effect": "^3.12.1", + "react": "^19.0.0", + "typescript": "^5.7.3" } } diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts new file mode 100644 index 0000000..d54fe14 --- /dev/null +++ b/packages/reffuse/src/Reffuse.ts @@ -0,0 +1,50 @@ +import { Effect, Exit, ManagedRuntime } from "effect" +import { createContext, useContext, type Context, type ReactNode } from "react" + + +export class Reffuse { + + constructor( + private readonly runtime: ManagedRuntime.ManagedRuntime + ) { + this.Context = createContext(runtime) + } + + readonly Context: Context> + + Provider(props: { readonly children: ReactNode }) { + return this.Context.Provider({ + ...props, + value: this.runtime, + }) + } + + + useRuntime(): ManagedRuntime.ManagedRuntime { + return useContext(this.Context) + } + + + runSync(effect: Effect.Effect): A { + return this.useRuntime().runSync(effect) + } + + runSyncExit(effect: Effect.Effect): Exit.Exit { + return this.useRuntime().runSyncExit(effect) + } + + runPromise( + effect: Effect.Effect, + options?: { readonly signal?: AbortSignal }, + ): Promise { + return this.useRuntime().runPromise(effect, options) + } + + runPromiseExit( + effect: Effect.Effect, + options?: { readonly signal?: AbortSignal }, + ): Promise> { + return this.useRuntime().runPromiseExit(effect, options) + } + +} diff --git a/packages/reffuse/src/index.ts b/packages/reffuse/src/index.ts index e69de29..b5dfcef 100644 --- a/packages/reffuse/src/index.ts +++ b/packages/reffuse/src/index.ts @@ -0,0 +1 @@ +export * as Reffuse from "./Reffuse.js"