Skip to content

Commit 9121ea4

Browse files
authored
optimistix (#257)
1 parent aef35c3 commit 9121ea4

18 files changed

Lines changed: 1212 additions & 1247 deletions

File tree

.changeset/deep-sheep-sink.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@effect-rx/rx": minor
3+
---
4+
5+
add timestamp to Result.Success

.changeset/happy-sites-feel.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@effect-rx/rx": patch
3+
---
4+
5+
add Rx.withOptimisticSet

docs/rx-react/Hooks.ts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ Added in v1.0.0
120120
```ts
121121
export declare const useRxSetPromise: <E, A, W>(
122122
rx: Rx.Writable<Result.Result<A, E>, W>
123-
) => (_: W) => Promise<Exit.Exit<A, E>>
123+
) => (_: W, options?: { readonly signal?: AbortSignal | undefined } | undefined) => Promise<Exit.Exit<A, E>>
124124
```
125125
126126
Added in v1.0.0

docs/rx-react/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
title: "@effect-rx/rx-react"
33
has_children: true
44
permalink: /docs/rx-react
5-
nav_order: 3
5+
nav_order: 4
66
---

docs/rx-vue/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
title: "@effect-rx/rx-vue"
33
has_children: true
44
permalink: /docs/rx-vue
5-
nav_order: 4
5+
nav_order: 5
66
---

docs/rx/Hydration.ts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Added in v1.0.0
3030
```ts
3131
export declare const dehydrate: (
3232
registry: Registry.Registry,
33-
options?: { readonly encodeInitialAs?: "ignore" | "promise" | "value-only" }
33+
options?: { readonly encodeInitialAs?: "ignore" | "promise" | "value-only" | undefined }
3434
) => Array<DehydratedRx>
3535
```
3636

docs/rx/Result.ts.md

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export type Encoded<A, E> =
9191
| {
9292
readonly _tag: "Success"
9393
readonly waiting: boolean
94+
readonly timestamp: number
9495
readonly value: A
9596
}
9697
| {
@@ -116,6 +117,7 @@ export type PartialEncoded<A, E> =
116117
| {
117118
readonly _tag: "Success"
118119
readonly waiting: boolean
120+
readonly timestamp: number
119121
readonly value: A
120122
}
121123
| {
@@ -314,7 +316,13 @@ Added in v1.0.0
314316
**Signature**
315317
316318
```ts
317-
export declare const fail: <E, A = never>(error: E, previousData?: Option.Option<A>, waiting?: boolean) => Failure<A, E>
319+
export declare const fail: <E, A = never>(
320+
error: E,
321+
options?: {
322+
readonly previousSuccess?: Option.Option<Success<A, E>> | undefined
323+
readonly waiting?: boolean | undefined
324+
}
325+
) => Failure<A, E>
318326
```
319327
320328
Added in v1.0.0
@@ -326,8 +334,7 @@ Added in v1.0.0
326334
```ts
327335
export declare const failWithPrevious: <A, E>(
328336
error: E,
329-
previous: Option.Option<Result<A, E>>,
330-
waiting?: boolean
337+
options: { readonly previous: Option.Option<Result<A, E>>; readonly waiting?: boolean | undefined }
331338
) => Failure<A, E>
332339
```
333340
@@ -340,8 +347,10 @@ Added in v1.0.0
340347
```ts
341348
export declare const failure: <E, A = never>(
342349
cause: Cause.Cause<E>,
343-
previousValue?: Option.Option<A>,
344-
waiting?: boolean
350+
options?: {
351+
readonly previousSuccess?: Option.Option<Success<A, E>> | undefined
352+
readonly waiting?: boolean | undefined
353+
}
345354
) => Failure<A, E>
346355
```
347356
@@ -354,8 +363,7 @@ Added in v1.0.0
354363
```ts
355364
export declare const failureWithPrevious: <A, E>(
356365
cause: Cause.Cause<E>,
357-
previous: Option.Option<Result<A, E>>,
358-
waiting?: boolean
366+
options: { readonly previous: Option.Option<Result<A, E>>; readonly waiting?: boolean | undefined }
359367
) => Failure<A, E>
360368
```
361369
@@ -412,7 +420,10 @@ Added in v1.0.0
412420
**Signature**
413421
414422
```ts
415-
export declare const success: <A, E = never>(value: A, waiting?: boolean) => Success<A, E>
423+
export declare const success: <A, E = never>(
424+
value: A,
425+
options?: { readonly waiting?: boolean | undefined; readonly timestamp?: number | undefined }
426+
) => Success<A, E>
416427
```
417428
418429
Added in v1.0.0
@@ -447,7 +458,7 @@ Added in v1.0.0
447458
export interface Failure<A, E = never> extends Result.Proto<A, E> {
448459
readonly _tag: "Failure"
449460
readonly cause: Cause.Cause<E>
450-
readonly previousValue: Option.Option<A>
461+
readonly previousSuccess: Option.Option<Success<A, E>>
451462
}
452463
```
453464

@@ -540,6 +551,7 @@ Added in v1.0.0
540551
export interface Success<A, E = never> extends Result.Proto<A, E> {
541552
readonly _tag: "Success"
542553
readonly value: A
554+
readonly timestamp: number
543555
}
544556
```
545557

docs/rx/Rx.ts.md

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Added in v1.0.0
2323
- [update](#update)
2424
- [Focus](#focus)
2525
- [makeRefreshOnSignal](#makerefreshonsignal)
26+
- [refreshOnWindowFocus](#refreshonwindowfocus)
2627
- [windowFocusSignal](#windowfocussignal)
2728
- [KeyValueStore](#keyvaluestore)
2829
- [kvs](#kvs)
@@ -41,13 +42,13 @@ Added in v1.0.0
4142
- [keepAlive](#keepalive)
4243
- [map](#map)
4344
- [mapResult](#mapresult)
44-
- [refreshOnWindowFocus](#refreshonwindowfocus)
4545
- [serializable](#serializable-1)
4646
- [setIdleTTL](#setidlettl)
4747
- [setLazy](#setlazy)
4848
- [transform](#transform)
4949
- [withFallback](#withfallback)
5050
- [withLabel](#withlabel)
51+
- [withOptimisticSet](#withoptimisticset)
5152
- [constructors](#constructors)
5253
- [context](#context)
5354
- [family](#family)
@@ -88,9 +89,6 @@ Added in v1.0.0
8889
- [TypeId (type alias)](#typeid-type-alias)
8990
- [WritableTypeId](#writabletypeid)
9091
- [WritableTypeId (type alias)](#writabletypeid-type-alias)
91-
- [utils](#utils)
92-
- [RxResultFn (namespace)](#rxresultfn-namespace)
93-
- [ArgToVoid (type alias)](#argtovoid-type-alias)
9492

9593
---
9694

@@ -199,6 +197,16 @@ export declare const makeRefreshOnSignal: <_>(
199197
200198
Added in v1.0.0
201199
200+
## refreshOnWindowFocus
201+
202+
**Signature**
203+
204+
```ts
205+
export declare const refreshOnWindowFocus: <A extends Rx<any>>(self: A) => Rx.WithoutSerializable<A>
206+
```
207+
208+
Added in v1.0.0
209+
202210
## windowFocusSignal
203211
204212
**Signature**
@@ -385,16 +393,6 @@ export declare const mapResult: {
385393
386394
Added in v1.0.0
387395
388-
## refreshOnWindowFocus
389-
390-
**Signature**
391-
392-
```ts
393-
export declare const refreshOnWindowFocus: <A extends Rx<any>>(self: A) => Rx.WithoutSerializable<A>
394-
```
395-
396-
Added in v1.0.0
397-
398396
## serializable
399397
400398
**Signature**
@@ -495,6 +493,33 @@ export declare const withLabel: {
495493
496494
Added in v1.0.0
497495
496+
## withOptimisticSet
497+
498+
**Signature**
499+
500+
```ts
501+
export declare const withOptimisticSet: {
502+
<A, XA, XE, W = A extends Result.Result<infer _A, infer _E> ? _A : A>(options: {
503+
readonly updateToValue: (
504+
value: W,
505+
current: NoInfer<A>
506+
) => A extends Result.Result<infer _A, infer _E> ? _A : NoInfer<A>
507+
readonly fn: RxResultFn<NoInfer<W>, XA, XE>
508+
readonly disableRefresh?: boolean | undefined
509+
}): (self: Rx<A>) => Writable<A, W>
510+
<A, XA, XE, W = A extends Result.Result<infer _A, infer _E> ? _A : A>(
511+
self: Rx<A>,
512+
options: {
513+
readonly updateToValue: (value: W, current: NoInfer<A>) => A extends Result.Result<infer _A, infer _E> ? _A : A
514+
readonly fn: RxResultFn<NoInfer<W>, XA, XE>
515+
readonly disableRefresh?: boolean | undefined
516+
}
517+
): Writable<A, W>
518+
}
519+
```
520+
521+
Added in v1.0.0
522+
498523
# constructors
499524
500525
## context
@@ -526,19 +551,19 @@ export declare const fn: {
526551
<Arg>(): <E, A>(
527552
fn: (arg: Arg, get: FnContext) => Effect.Effect<A, E, Scope.Scope | RxRegistry>,
528553
options?: { readonly initialValue?: A }
529-
) => RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E>
530-
<Arg, E, A>(
554+
) => RxResultFn<Arg, A, E>
555+
<E, A, Arg = void>(
531556
fn: (arg: Arg, get: FnContext) => Effect.Effect<A, E, Scope.Scope | RxRegistry>,
532557
options?: { readonly initialValue?: A }
533-
): RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E>
558+
): RxResultFn<Arg, A, E>
534559
<Arg>(): <E, A>(
535560
fn: (arg: Arg, get: FnContext) => Stream.Stream<A, E, RxRegistry>,
536561
options?: { readonly initialValue?: A }
537-
) => RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E | NoSuchElementException>
538-
<Arg, E, A>(
562+
) => RxResultFn<Arg, A, E | NoSuchElementException>
563+
<E, A, Arg = void>(
539564
fn: (arg: Arg, get: FnContext) => Stream.Stream<A, E, RxRegistry>,
540565
options?: { readonly initialValue?: A }
541-
): RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E | NoSuchElementException>
566+
): RxResultFn<Arg, A, E | NoSuchElementException>
542567
}
543568
```
544569
@@ -551,17 +576,11 @@ Added in v1.0.0
551576
```ts
552577
export declare const fnSync: {
553578
<Arg>(): {
554-
<A>(f: (arg: Arg, get: FnContext) => A): Writable<Option.Option<A>, RxResultFn.ArgToVoid<Arg>>
555-
<A>(
556-
f: (arg: Arg, get: FnContext) => A,
557-
options: { readonly initialValue: A }
558-
): Writable<A, RxResultFn.ArgToVoid<Arg>>
579+
<A>(f: (arg: Arg, get: FnContext) => A): Writable<Option.Option<A>, Arg>
580+
<A>(f: (arg: Arg, get: FnContext) => A, options: { readonly initialValue: A }): Writable<A, Arg>
559581
}
560-
<Arg, A>(f: (arg: Arg, get: FnContext) => A): Writable<Option.Option<A>, RxResultFn.ArgToVoid<Arg>>
561-
<Arg, A>(
562-
f: (arg: Arg, get: FnContext) => A,
563-
options: { readonly initialValue: A }
564-
): Writable<A, RxResultFn.ArgToVoid<Arg>>
582+
<A, Arg = void>(f: (arg: Arg, get: FnContext) => A): Writable<Option.Option<A>, Arg>
583+
<A, Arg = void>(f: (arg: Arg, get: FnContext) => A, options: { readonly initialValue: A }): Writable<A, Arg>
565584
}
566585
```
567586
@@ -927,26 +946,26 @@ export interface RxRuntime<R, ER> extends Rx<Result.Result<Runtime.Runtime<R>, E
927946
options?: {
928947
readonly initialValue?: A
929948
}
930-
): RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E | ER>
949+
): RxResultFn<Arg, A, E | ER>
931950
<E, A>(
932951
fn: (arg: Arg, get: FnContext) => Stream.Stream<A, E, RxRegistry | R>,
933952
options?: {
934953
readonly initialValue?: A
935954
}
936-
): RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E | ER | NoSuchElementException>
955+
): RxResultFn<Arg, A, E | ER | NoSuchElementException>
937956
}
938-
<Arg, E, A>(
957+
<E, A, Arg = void>(
939958
fn: (arg: Arg, get: FnContext) => Effect.Effect<A, E, Scope.Scope | RxRegistry | R>,
940959
options?: {
941960
readonly initialValue?: A
942961
}
943-
): RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E | ER>
944-
<Arg, E, A>(
962+
): RxResultFn<Arg, A, E | ER>
963+
<E, A, Arg = void>(
945964
fn: (arg: Arg, get: FnContext) => Stream.Stream<A, E, RxRegistry | R>,
946965
options?: {
947966
readonly initialValue?: A
948967
}
949-
): RxResultFn<RxResultFn.ArgToVoid<Arg>, A, E | ER | NoSuchElementException>
968+
): RxResultFn<Arg, A, E | ER | NoSuchElementException>
950969
}
951970

952971
readonly pull: <A, E>(
@@ -1061,19 +1080,3 @@ export type WritableTypeId = typeof WritableTypeId
10611080
```
10621081
10631082
Added in v1.0.0
1064-
1065-
# utils
1066-
1067-
## RxResultFn (namespace)
1068-
1069-
Added in v1.0.0
1070-
1071-
### ArgToVoid (type alias)
1072-
1073-
**Signature**
1074-
1075-
```ts
1076-
export type ArgToVoid<Arg> = Arg extends infer A ? (unknown extends A ? void : A extends undefined ? void : A) : never
1077-
```
1078-
1079-
Added in v1.0.0

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@
2727
"@effect/build-utils": "^0.8.9",
2828
"@effect/docgen": "^0.5.2",
2929
"@effect/eslint-plugin": "^0.3.2",
30-
"@effect/language-service": "^0.28.2",
30+
"@effect/language-service": "^0.31.2",
31+
"@effect/vitest": "^0.25.0",
3132
"@eslint/compat": "^1.3.1",
3233
"@eslint/eslintrc": "^3.3.1",
33-
"@eslint/js": "^9.31.0",
34+
"@eslint/js": "^9.32.0",
3435
"@typescript-eslint/eslint-plugin": "^8.38.0",
3536
"@typescript-eslint/parser": "^8.38.0",
3637
"@vitest/coverage-v8": "^3.2.4",
3738
"babel-plugin-annotate-pure-calls": "^0.5.0",
38-
"eslint": "^9.31.0",
39+
"eslint": "^9.32.0",
3940
"eslint-import-resolver-typescript": "^4.4.4",
4041
"eslint-plugin-codegen": "^0.33.0",
4142
"eslint-plugin-deprecation": "^3.0.0",

packages/rx-livestore/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"sideEffects": [],
2626
"devDependencies": {
2727
"@livestore/livestore": "^0.3.1",
28-
"effect": "^3.17.0"
28+
"effect": "^3.17.2"
2929
},
3030
"peerDependencies": {
3131
"@livestore/livestore": "*",

0 commit comments

Comments
 (0)