diff --git a/bun.lockb b/bun.lockb index 1f746d8..3a7a538 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/example/package.json b/packages/example/package.json index c814829..75b4953 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -14,6 +14,7 @@ "@types/react": "^19.0.4", "@types/react-dom": "^19.0.2", "@vitejs/plugin-react": "^4.3.4", + "effect": "^3.12.1", "eslint": "^9.17.0", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.16", diff --git a/packages/example/src/App.tsx b/packages/example/src/App.tsx index 3d7ded3..34163d6 100644 --- a/packages/example/src/App.tsx +++ b/packages/example/src/App.tsx @@ -1,13 +1,14 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' +import "./App.css" +import reactLogo from "./assets/react.svg" +import { Reffuse } from "./Reffuse" +import viteLogo from "/vite.svg" -function App() { - const [count, setCount] = useState(0) - return ( - <> +export function App() { + + const [count, setCount] = Reffuse.useRefState(Reffuse.useRef(0)) + + return <>
Vite logo @@ -28,8 +29,6 @@ function App() {

Click on the Vite and React logos to learn more

- - ) -} + -export default App +} diff --git a/packages/example/src/Reffuse.ts b/packages/example/src/Reffuse.ts new file mode 100644 index 0000000..9037b3a --- /dev/null +++ b/packages/example/src/Reffuse.ts @@ -0,0 +1,5 @@ +import { Reffuse as TReffuse } from "@thilawyn/reffuse" +import { Layer } from "effect" + + +export const Reffuse = TReffuse.make(Layer.empty) diff --git a/packages/example/src/main.tsx b/packages/example/src/main.tsx index bef5202..e263ba2 100644 --- a/packages/example/src/main.tsx +++ b/packages/example/src/main.tsx @@ -1,10 +1,14 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.tsx' +import { StrictMode } from "react" +import { createRoot } from "react-dom/client" +import { App } from "./App.tsx" +import "./index.css" +import { Reffuse } from "./Reffuse.ts" -createRoot(document.getElementById('root')!).render( - - - , + +createRoot(document.getElementById("root")!).render( + + + + + ) diff --git a/packages/example/tsconfig.app.json b/packages/example/tsconfig.app.json index 358ca9b..0592374 100644 --- a/packages/example/tsconfig.app.json +++ b/packages/example/tsconfig.app.json @@ -20,7 +20,11 @@ "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, + + "paths": { + "@/*": ["./src/*"] + } }, "include": ["src"] } diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index 971d359..566de63 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -1,4 +1,4 @@ -import { Effect, Exit, Fiber, ManagedRuntime, Ref, Runtime, Stream, SubscriptionRef } from "effect" +import { Effect, Exit, Fiber, Layer, ManagedRuntime, Ref, Runtime, Stream, SubscriptionRef } from "effect" import React from "react" @@ -9,7 +9,7 @@ export class Reffuse { ) { this.Context = React.createContext(runtime) - this.Provider = (props: { readonly children?: React.ReactNode }) => this.Context.Provider({ + this.Provider = (props: { readonly children?: React.ReactNode }) => this.Context({ ...props, value: this.runtime, }) @@ -90,3 +90,7 @@ export class Reffuse { } } + + +export const make = (layer: Layer.Layer): Reffuse => + new Reffuse(ManagedRuntime.make(layer))