0.2.0 (#5)
Publish / publish (push) Successful in 15s
Lint / lint (push) Successful in 11s

Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
2026-05-30 06:10:53 +02:00
parent 4c45f49092
commit 3fa879a66d
12 changed files with 969 additions and 223 deletions
+4 -3
View File
@@ -10,12 +10,13 @@
"clean:modules": "rm -rf node_modules"
},
"dependencies": {
"@effect/platform": "^0.96.0",
"@effect/platform": "^0.96.1",
"@effect/platform-browser": "^0.76.0",
"effect": "^3.21.0",
"@effect/platform-bun": "^0.89.0",
"effect": "^3.21.2",
"effect-lens": "workspace:*"
},
"overrides": {
"effect": "^3.21.0"
"effect": "^3.21.2"
}
}
+36 -31
View File
@@ -1,36 +1,41 @@
import { KeyValueStore } from "@effect/platform"
import { BrowserKeyValueStore, BrowserStream } from "@effect/platform-browser"
import { Effect, Option, Stream } from "effect"
import { Lens } from "effect-lens"
// import { KeyValueStore } from "@effect/platform"
// import { BrowserKeyValueStore, BrowserStream } from "@effect/platform-browser"
// import { Effect, Option, Stream } from "effect"
// import { Lens } from "effect-lens"
Effect.gen(function*() {
// \/ Lens<Option.Option<string>, PlatformError, PlatformError, never, never>
Effect.all([
KeyValueStore.KeyValueStore,
Effect.succeed("someKey"),
]).pipe(
Effect.map(([kv, key]) => Lens.make({
get: kv.get(key),
// Effect.gen(function*() {
// // \/ Lens<Option.Option<string>, PlatformError, PlatformError, never, never>
// const lens = Effect.all([
// KeyValueStore.KeyValueStore,
// Effect.succeed("someKey"),
// Effect.makeSemaphore(1),
// ]).pipe(
// Effect.map(([kv, key, semaphore]) => Lens.make({
// get: kv.get(key),
changes: kv.get(key).pipe(
Effect.map(Stream.make),
Effect.map(a => Stream.concat(
a,
BrowserStream.fromEventListenerWindow("storage").pipe(
Stream.filter(event => event.key === key),
Stream.map(event => Option.fromNullable(event.newValue)),
),
)),
Stream.unwrap,
),
// changes: kv.get(key).pipe(
// Effect.map(Stream.make),
// Effect.map(a => Stream.concat(
// a,
// BrowserStream.fromEventListenerWindow("storage").pipe(
// Stream.filter(event => event.key === key),
// Stream.map(event => Option.fromNullable(event.newValue)),
// ),
// )),
// Stream.unwrap,
// ),
set: a => Option.isSome(a)
? kv.set(key, a.value)
: kv.remove(key),
})),
// commit: a => Option.isSome(a)
// ? kv.set(key, a.value)
// : kv.remove(key),
Effect.provide(BrowserKeyValueStore.layerLocalStorage),
Lens.unwrap,
)
})
// lock: Effect.succeed(semaphore.withPermits(1)),
// })),
// Effect.provide(BrowserKeyValueStore.layerLocalStorage),
// Lens.unwrap,
// )
// console.log(yield* Lens.get(lens))
// })
+1 -1
View File
@@ -6,7 +6,6 @@
"module": "NodeNext",
"moduleDetection": "force",
"jsx": "react-jsx",
// "allowJs": true,
// Bundler mode
"moduleResolution": "NodeNext",
@@ -25,6 +24,7 @@
"noPropertyAccessFromIndexSignature": false,
// Build
"rootDir": "./src",
"outDir": "./dist",
"declaration": true,
"sourceMap": true,