From 100169952c7b6eb96d1fc11ac6179582a6c739b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 10 Jan 2025 22:00:14 +0100 Subject: [PATCH] Example tests --- bun.lockb | Bin 90664 -> 90696 bytes packages/example/package.json | 1 + packages/example/src/App.tsx | 23 +++++++++++------------ packages/example/src/Reffuse.ts | 5 +++++ packages/example/src/main.tsx | 20 ++++++++++++-------- packages/example/tsconfig.app.json | 6 +++++- packages/reffuse/src/Reffuse.ts | 8 ++++++-- 7 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 packages/example/src/Reffuse.ts diff --git a/bun.lockb b/bun.lockb index 1f746d8a0b5c7e352219469e1d85dd87b073a803..3a7a538d3a29a24196e9f1365227be783685dda6 100755 GIT binary patch delta 7154 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 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))