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 <>
@@ -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))