@fncts/observable 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/Observable/api.d.ts +1 -1
  2. package/ObservableRef/api.d.ts +63 -0
  3. package/ObservableRef/atomic.d.ts +32 -0
  4. package/ObservableRef/definition.d.ts +52 -0
  5. package/_cjs/Action.cjs +0 -7
  6. package/_cjs/Action.cjs.map +1 -1
  7. package/_cjs/AnimationFrameAction.cjs +0 -12
  8. package/_cjs/AnimationFrameAction.cjs.map +1 -1
  9. package/_cjs/AnimationFrameScheduler.cjs +0 -11
  10. package/_cjs/AnimationFrameScheduler.cjs.map +1 -1
  11. package/_cjs/AsyncAction.cjs +0 -25
  12. package/_cjs/AsyncAction.cjs.map +1 -1
  13. package/_cjs/AsyncScheduler.cjs +2 -16
  14. package/_cjs/AsyncScheduler.cjs.map +1 -1
  15. package/_cjs/BehaviorSubject.cjs +0 -12
  16. package/_cjs/BehaviorSubject.cjs.map +1 -1
  17. package/_cjs/Notification.cjs +0 -23
  18. package/_cjs/Notification.cjs.map +1 -1
  19. package/_cjs/Observable/api/connect.cjs +0 -7
  20. package/_cjs/Observable/api/connect.cjs.map +1 -1
  21. package/_cjs/Observable/api/connectable.cjs +0 -14
  22. package/_cjs/Observable/api/connectable.cjs.map +1 -1
  23. package/_cjs/Observable/api/fromCallback.cjs +0 -15
  24. package/_cjs/Observable/api/fromCallback.cjs.map +1 -1
  25. package/_cjs/Observable/api/fromEvent.cjs +0 -5
  26. package/_cjs/Observable/api/fromEvent.cjs.map +1 -1
  27. package/_cjs/Observable/api/index.cjs +0 -28
  28. package/_cjs/Observable/api/index.cjs.map +1 -1
  29. package/_cjs/Observable/api/race.cjs +0 -10
  30. package/_cjs/Observable/api/race.cjs.map +1 -1
  31. package/_cjs/Observable/api/raceWith.cjs +0 -5
  32. package/_cjs/Observable/api/raceWith.cjs.map +1 -1
  33. package/_cjs/Observable/api/repeatWhen.cjs +0 -11
  34. package/_cjs/Observable/api/repeatWhen.cjs.map +1 -1
  35. package/_cjs/Observable/api/retryWhen.cjs +0 -9
  36. package/_cjs/Observable/api/retryWhen.cjs.map +1 -1
  37. package/_cjs/Observable/api/share.cjs +0 -18
  38. package/_cjs/Observable/api/share.cjs.map +1 -1
  39. package/_cjs/Observable/api/window.cjs +0 -8
  40. package/_cjs/Observable/api/window.cjs.map +1 -1
  41. package/_cjs/Observable/api/windowCount.cjs +0 -10
  42. package/_cjs/Observable/api/windowCount.cjs.map +1 -1
  43. package/_cjs/Observable/api/windowTime.cjs +0 -15
  44. package/_cjs/Observable/api/windowTime.cjs.map +1 -1
  45. package/_cjs/Observable/api/windowToggle.cjs +0 -18
  46. package/_cjs/Observable/api/windowToggle.cjs.map +1 -1
  47. package/_cjs/Observable/api/windowWhen.cjs +0 -12
  48. package/_cjs/Observable/api/windowWhen.cjs.map +1 -1
  49. package/_cjs/Observable/api.cjs +14 -404
  50. package/_cjs/Observable/api.cjs.map +1 -1
  51. package/_cjs/Observable/definition.cjs +0 -29
  52. package/_cjs/Observable/definition.cjs.map +1 -1
  53. package/_cjs/Observable/dom/animationFrames.cjs +0 -12
  54. package/_cjs/Observable/dom/animationFrames.cjs.map +1 -1
  55. package/_cjs/Observable.cjs +0 -38
  56. package/_cjs/Observable.cjs.map +1 -1
  57. package/_cjs/ObservableRef/api.cjs +160 -0
  58. package/_cjs/ObservableRef/api.cjs.map +1 -0
  59. package/_cjs/ObservableRef/atomic.cjs +93 -0
  60. package/_cjs/ObservableRef/atomic.cjs.map +1 -0
  61. package/_cjs/ObservableRef/definition.cjs +24 -0
  62. package/_cjs/ObservableRef/definition.cjs.map +1 -0
  63. package/_cjs/Operator.cjs +0 -12
  64. package/_cjs/Operator.cjs.map +1 -1
  65. package/_cjs/Scheduler.cjs +0 -13
  66. package/_cjs/Scheduler.cjs.map +1 -1
  67. package/_cjs/Subject.cjs +0 -47
  68. package/_cjs/Subject.cjs.map +1 -1
  69. package/_cjs/Subscriber.cjs +0 -32
  70. package/_cjs/Subscriber.cjs.map +1 -1
  71. package/_cjs/Subscription.cjs +0 -37
  72. package/_cjs/Subscription.cjs.map +1 -1
  73. package/_cjs/index.cjs +0 -28
  74. package/_cjs/internal/animationFrameProvider.cjs +0 -9
  75. package/_cjs/internal/animationFrameProvider.cjs.map +1 -1
  76. package/_cjs/internal/args.cjs +0 -6
  77. package/_cjs/internal/args.cjs.map +1 -1
  78. package/_cjs/internal/intervalProvider.cjs +0 -2
  79. package/_cjs/internal/intervalProvider.cjs.map +1 -1
  80. package/_cjs/internal/performanceTimestampProvider.cjs +0 -1
  81. package/_cjs/internal/performanceTimestampProvider.cjs.map +1 -1
  82. package/_cjs/internal/timeoutProvider.cjs +0 -2
  83. package/_cjs/internal/timeoutProvider.cjs.map +1 -1
  84. package/_cjs/internal/timestampProvider.cjs +0 -1
  85. package/_cjs/internal/timestampProvider.cjs.map +1 -1
  86. package/_cjs/internal/util.cjs +2 -21
  87. package/_cjs/internal/util.cjs.map +1 -1
  88. package/_mjs/Action.mjs +0 -3
  89. package/_mjs/Action.mjs.map +1 -1
  90. package/_mjs/AnimationFrameAction.mjs +0 -6
  91. package/_mjs/AnimationFrameAction.mjs.map +1 -1
  92. package/_mjs/AnimationFrameScheduler.mjs +0 -5
  93. package/_mjs/AnimationFrameScheduler.mjs.map +1 -1
  94. package/_mjs/AsyncAction.mjs +0 -17
  95. package/_mjs/AsyncAction.mjs.map +1 -1
  96. package/_mjs/AsyncScheduler.mjs +2 -10
  97. package/_mjs/AsyncScheduler.mjs.map +1 -1
  98. package/_mjs/BehaviorSubject.mjs +0 -7
  99. package/_mjs/BehaviorSubject.mjs.map +1 -1
  100. package/_mjs/Notification.mjs +0 -12
  101. package/_mjs/Notification.mjs.map +1 -1
  102. package/_mjs/Observable/api/connect.mjs +0 -1
  103. package/_mjs/Observable/api/connect.mjs.map +1 -1
  104. package/_mjs/Observable/api/connectable.mjs +0 -5
  105. package/_mjs/Observable/api/connectable.mjs.map +1 -1
  106. package/_mjs/Observable/api/fromCallback.mjs +0 -10
  107. package/_mjs/Observable/api/fromCallback.mjs.map +1 -1
  108. package/_mjs/Observable/api/fromEvent.mjs +0 -2
  109. package/_mjs/Observable/api/fromEvent.mjs.map +1 -1
  110. package/_mjs/Observable/api/index.mjs.map +1 -1
  111. package/_mjs/Observable/api/race.mjs +0 -4
  112. package/_mjs/Observable/api/race.mjs.map +1 -1
  113. package/_mjs/Observable/api/raceWith.mjs +0 -1
  114. package/_mjs/Observable/api/raceWith.mjs.map +1 -1
  115. package/_mjs/Observable/api/repeatWhen.mjs +0 -7
  116. package/_mjs/Observable/api/repeatWhen.mjs.map +1 -1
  117. package/_mjs/Observable/api/retryWhen.mjs +0 -5
  118. package/_mjs/Observable/api/retryWhen.mjs.map +1 -1
  119. package/_mjs/Observable/api/share.mjs +0 -12
  120. package/_mjs/Observable/api/share.mjs.map +1 -1
  121. package/_mjs/Observable/api/window.mjs +0 -3
  122. package/_mjs/Observable/api/window.mjs.map +1 -1
  123. package/_mjs/Observable/api/windowCount.mjs +0 -6
  124. package/_mjs/Observable/api/windowCount.mjs.map +1 -1
  125. package/_mjs/Observable/api/windowTime.mjs +0 -6
  126. package/_mjs/Observable/api/windowTime.mjs.map +1 -1
  127. package/_mjs/Observable/api/windowToggle.mjs +0 -10
  128. package/_mjs/Observable/api/windowToggle.mjs.map +1 -1
  129. package/_mjs/Observable/api/windowWhen.mjs +0 -6
  130. package/_mjs/Observable/api/windowWhen.mjs.map +1 -1
  131. package/_mjs/Observable/api.mjs +14 -306
  132. package/_mjs/Observable/api.mjs.map +1 -1
  133. package/_mjs/Observable/definition.mjs +0 -16
  134. package/_mjs/Observable/definition.mjs.map +1 -1
  135. package/_mjs/Observable/dom/animationFrames.mjs +0 -5
  136. package/_mjs/Observable/dom/animationFrames.mjs.map +1 -1
  137. package/_mjs/Observable.mjs +4 -4
  138. package/_mjs/Observable.mjs.map +1 -1
  139. package/_mjs/ObservableRef/api.mjs +141 -0
  140. package/_mjs/ObservableRef/api.mjs.map +1 -0
  141. package/_mjs/ObservableRef/atomic.mjs +82 -0
  142. package/_mjs/ObservableRef/atomic.mjs.map +1 -0
  143. package/_mjs/ObservableRef/definition.mjs +16 -0
  144. package/_mjs/ObservableRef/definition.mjs.map +1 -0
  145. package/_mjs/Operator.mjs +0 -3
  146. package/_mjs/Operator.mjs.map +1 -1
  147. package/_mjs/Scheduler.mjs +0 -3
  148. package/_mjs/Scheduler.mjs.map +1 -1
  149. package/_mjs/Subject.mjs +0 -34
  150. package/_mjs/Subject.mjs.map +1 -1
  151. package/_mjs/Subscriber.mjs +0 -20
  152. package/_mjs/Subscriber.mjs.map +1 -1
  153. package/_mjs/Subscription.mjs +0 -26
  154. package/_mjs/Subscription.mjs.map +1 -1
  155. package/_mjs/index.mjs.map +1 -1
  156. package/_mjs/internal/animationFrameProvider.mjs +0 -5
  157. package/_mjs/internal/animationFrameProvider.mjs.map +1 -1
  158. package/_mjs/internal/args.mjs +0 -2
  159. package/_mjs/internal/args.mjs.map +1 -1
  160. package/_mjs/internal/intervalProvider.mjs +0 -2
  161. package/_mjs/internal/intervalProvider.mjs.map +1 -1
  162. package/_mjs/internal/performanceTimestampProvider.mjs +0 -1
  163. package/_mjs/internal/performanceTimestampProvider.mjs.map +1 -1
  164. package/_mjs/internal/timeoutProvider.mjs +0 -2
  165. package/_mjs/internal/timeoutProvider.mjs.map +1 -1
  166. package/_mjs/internal/timestampProvider.mjs +0 -1
  167. package/_mjs/internal/timestampProvider.mjs.map +1 -1
  168. package/_mjs/internal/util.mjs +2 -7
  169. package/_mjs/internal/util.mjs.map +1 -1
  170. package/_src/Observable/api.ts +12 -11
  171. package/_src/ObservableRef/api.ts +169 -0
  172. package/_src/ObservableRef/atomic.ts +85 -0
  173. package/_src/ObservableRef/definition.ts +57 -0
  174. package/_src/global.ts +5 -1
  175. package/global.d.ts +5 -1
  176. package/package.json +2 -2
@@ -0,0 +1,169 @@
1
+ import type { Lens } from "@fncts/base/optics/Lens";
2
+ import type { URIO } from "@fncts/io/IO";
3
+ import type { Observable } from "@fncts/observable/Observable";
4
+ import type { Store } from "@fncts/observable/ObservableRef/atomic";
5
+
6
+ import { Atomic } from "@fncts/observable/ObservableRef/atomic";
7
+ import { ObservableRef, ObservableRefDescriptor } from "@fncts/observable/ObservableRef/definition";
8
+
9
+ /**
10
+ * @tsplus static fncts.observable.ObservableRefOps make
11
+ * @tsplus static fncts.observable.ObservableRefOps __call
12
+ */
13
+ export function make<A>(initial: A, /** @fncts id */ id?: string): ObservableRef<Store, A, A> {
14
+ if (id === undefined) {
15
+ throw new Error("ObservableRef.make: the `id` argument must be provided if not using typescript transformers");
16
+ }
17
+ return new Atomic(new ObservableRefDescriptor(Symbol.for(id!), initial));
18
+ }
19
+
20
+ /**
21
+ * @tsplus pipeable fncts.observable.ObservableRef update
22
+ */
23
+ export function update<R, A>(f: (a: A) => A) {
24
+ return (self: ObservableRef<R, A, A>): URIO<R, void> => self.modify((a) => [undefined, f(a)]);
25
+ }
26
+
27
+ /**
28
+ * @tsplus pipeable fncts.observable.ObservableRef getAndUpdate
29
+ */
30
+ export function getAndUpdate<R, A>(f: (a: A) => A) {
31
+ return (self: ObservableRef<R, A, A>): URIO<R, A> => {
32
+ return self.modify((a) => {
33
+ const value = f(a);
34
+ return [a, value];
35
+ });
36
+ };
37
+ }
38
+
39
+ /**
40
+ * @tsplus pipeable fncts.observable.ObservableRef updateAndGet
41
+ */
42
+ export function updateAndGet<R, A>(f: (a: A) => A) {
43
+ return (self: ObservableRef<R, A, A>): URIO<R, A> => {
44
+ return self.modify((a) => {
45
+ const value = f(a);
46
+ return [value, value];
47
+ });
48
+ };
49
+ }
50
+
51
+ /**
52
+ * @tsplus pipeable fncts.observable.ObservableRef modify
53
+ */
54
+ export function modify<R, A, B>(f: (a: A) => readonly [B, A]) {
55
+ return (self: ObservableRef<R, A, A>): URIO<R, B> => {
56
+ return self.get.flatMap((value) => {
57
+ const [b, a] = f(value);
58
+ return self.set(a) > IO.succeedNow(b);
59
+ });
60
+ };
61
+ }
62
+
63
+ class Map<R, A, B, C> extends ObservableRef<R, A, C> {
64
+ constructor(readonly source: ObservableRef<R, A, B>, readonly f: (b: B) => C) {
65
+ super(source.descriptor);
66
+ }
67
+
68
+ get: URIO<R, C> = this.source.get.map(this.f);
69
+
70
+ set(a: A): URIO<R, void> {
71
+ return this.source.set(a);
72
+ }
73
+
74
+ has: URIO<R, boolean> = this.source.has;
75
+
76
+ delete: URIO<R, boolean> = this.source.delete;
77
+
78
+ observable: Observable<R, never, C> = this.source.observable.map(this.f);
79
+ }
80
+
81
+ /**
82
+ * @tsplus pipeable fncts.observable.ObservableRef map
83
+ */
84
+ export function map<R, A, B, C>(f: (a: B) => C) {
85
+ return (self: ObservableRef<R, A, B>): ObservableRef<R, A, C> => {
86
+ return new Map(self, f);
87
+ };
88
+ }
89
+
90
+ class ContramapIn<R, A, B, C> extends ObservableRef<R, C, B> {
91
+ constructor(readonly source: ObservableRef<R, A, B>, readonly f: (c: C) => A) {
92
+ super(source.descriptor);
93
+ }
94
+
95
+ get: URIO<R, B> = this.source.get;
96
+
97
+ set(c: C): URIO<R, void> {
98
+ return this.source.set(this.f(c));
99
+ }
100
+
101
+ has: URIO<R, boolean> = this.source.has;
102
+
103
+ delete: URIO<R, boolean> = this.source.delete;
104
+
105
+ observable: Observable<R, never, B> = this.source.observable;
106
+ }
107
+
108
+ /**
109
+ * @tsplus pipeable fncts.observable.ObservableRef contramapIn
110
+ */
111
+ export function contramapIn<R, A, B, C>(f: (inp: C) => A) {
112
+ return (self: ObservableRef<R, A, B>): ObservableRef<R, C, B> => {
113
+ return new ContramapIn(self, f);
114
+ };
115
+ }
116
+
117
+ class Focus<R, A, B> extends ObservableRef<R, B, B> {
118
+ constructor(readonly source: ObservableRef<R, A, A>, readonly lens: Lens<A, B>) {
119
+ super(source.descriptor);
120
+ }
121
+
122
+ get: URIO<R, B> = this.source.get.map(this.lens.get);
123
+
124
+ set(b: B): URIO<R, void> {
125
+ return this.source.get.flatMap((a) => this.source.set(this.lens.set(b)(a)));
126
+ }
127
+
128
+ has: URIO<R, boolean> = this.source.has;
129
+
130
+ delete: URIO<R, boolean> = this.source.delete;
131
+
132
+ observable: Observable<R, never, B> = this.source.observable.map(this.lens.get);
133
+ }
134
+
135
+ /**
136
+ * @tsplus pipeable fncts.observable.ObservableRef focus
137
+ */
138
+ export function focus<R, A, B>(lens: Lens<A, B>) {
139
+ return (self: ObservableRef<R, A, A>): ObservableRef<R, B, B> => {
140
+ return new Focus(self, lens);
141
+ };
142
+ }
143
+
144
+ export class ZipWith<R, A, R1, B, C> implements ObservableRef.Readable<R | R1, C> {
145
+ declare _R: (_: never) => R | R1;
146
+ declare _Out: (_: never) => C;
147
+ constructor(
148
+ readonly sourceA: ObservableRef.Readable<R, A>,
149
+ readonly sourceB: ObservableRef.Readable<R1, B>,
150
+ readonly f: (a: A, b: B) => C,
151
+ ) {}
152
+
153
+ get: URIO<R | R1, C> = this.sourceA.get.zipWith(this.sourceB.get, this.f);
154
+
155
+ has: URIO<R | R1, boolean> = this.sourceA.has.zipWith(this.sourceB.has, (a, b) => a && b);
156
+
157
+ delete: URIO<R | R1, void> = this.sourceA.delete > this.sourceB.delete;
158
+
159
+ observable: Observable<R | R1, never, C> = this.sourceA.observable.zipWithLatest(this.sourceB.observable, this.f);
160
+ }
161
+
162
+ /**
163
+ * @tsplus pipeable fncts.observable.ObservableRef.Readable zipWith
164
+ */
165
+ export function zipWith<R, A, R1, B, C>(that: ObservableRef.Readable<R1, B>, f: (a: A, b: B) => C) {
166
+ return (self: ObservableRef.Readable<R, A>): ObservableRef.Readable<R | R1, C> => {
167
+ return new ZipWith(self, that, f);
168
+ };
169
+ }
@@ -0,0 +1,85 @@
1
+ import type { ObservableRefDescriptor } from "@fncts/observable/ObservableRef/definition";
2
+
3
+ import { BehaviorSubject } from "@fncts/observable/BehaviorSubject";
4
+
5
+ export class Atomic<A> extends ObservableRef<Store, A, A> {
6
+ get: URIO<Store, A> = IO.serviceWithIO((reactor) => reactor.get(this.descriptor), Store.Tag);
7
+
8
+ set(a: A): URIO<Store, void> {
9
+ return IO.serviceWithIO((reactor) => reactor.set(this.descriptor, a), Store.Tag);
10
+ }
11
+
12
+ has: URIO<Store, boolean> = IO.serviceWithIO((reactor) => reactor.has(this.descriptor), Store.Tag);
13
+
14
+ delete: URIO<Store, boolean> = IO.serviceWithIO((reactor) => reactor.delete(this.descriptor), Store.Tag);
15
+
16
+ observable: Observable<Store, never, A> = Observable.serviceWithObservable(
17
+ (reactor) =>
18
+ new Observable((subscriber) => {
19
+ return reactor.unsafeSubscribe(this.descriptor, subscriber);
20
+ }),
21
+ Store.Tag,
22
+ );
23
+ }
24
+
25
+ /**
26
+ * @tsplus type fncts.observable.Store
27
+ * @tsplus companion fncts.observable.StoreOps
28
+ */
29
+ export class Store {
30
+ subjectMap = new Map<symbol, BehaviorSubject<any>>();
31
+ get<A>(ref: ObservableRefDescriptor<A>): UIO<A> {
32
+ return IO(() => {
33
+ if (this.subjectMap.has(ref.id)) {
34
+ return this.subjectMap.get(ref.id)!.value;
35
+ } else {
36
+ this.subjectMap.set(ref.id, new BehaviorSubject(ref.initial));
37
+ return ref.initial;
38
+ }
39
+ });
40
+ }
41
+
42
+ set<A>(ref: ObservableRefDescriptor<A>, value: A): UIO<A> {
43
+ return IO(() => {
44
+ if (this.subjectMap.has(ref.id)) {
45
+ this.subjectMap.get(ref.id)!.next(value);
46
+ } else {
47
+ this.subjectMap.set(ref.id, new BehaviorSubject(value));
48
+ }
49
+ return value;
50
+ });
51
+ }
52
+
53
+ has<A>(ref: ObservableRefDescriptor<A>): UIO<boolean> {
54
+ return IO(() => this.subjectMap.has(ref.id));
55
+ }
56
+
57
+ delete<A>(ref: ObservableRefDescriptor<A>): UIO<boolean> {
58
+ return IO(() => {
59
+ if (this.subjectMap.has(ref.id)) {
60
+ this.subjectMap.delete(ref.id);
61
+ return true;
62
+ }
63
+ return false;
64
+ });
65
+ }
66
+
67
+ unsafeSubscribe<A>(ref: ObservableRefDescriptor<A>, subscriber: Subscriber<never, A>): Subscription {
68
+ if (this.subjectMap.has(ref.id)) {
69
+ const subject = this.subjectMap.get(ref.id)!;
70
+ const subscription = subject.subscribe(subscriber);
71
+ return subscription;
72
+ } else {
73
+ const subject = new BehaviorSubject<A>(ref.initial);
74
+ const subscription = subject.subscribe(subscriber);
75
+ this.subjectMap.set(ref.id, subject);
76
+ return subscription;
77
+ }
78
+ }
79
+ }
80
+
81
+ /**
82
+ * @tsplus static fncts.observable.StoreOps Tag
83
+ * @tsplus implicit
84
+ */
85
+ export const StoreTag = Tag<Store>("fncts.observable.ObservableRef.StoreTag");
@@ -0,0 +1,57 @@
1
+ import type { URIO } from "@fncts/io/IO";
2
+ import type { Observable } from "@fncts/observable/Observable";
3
+
4
+ type Readable_<R, A> = Readable<R, A>;
5
+ type Writable_<R, A> = Writable<R, A>;
6
+
7
+ export declare namespace ObservableRef {
8
+ type Readable<R, A> = Readable_<R, A>;
9
+ type Writable<R, A> = Writable_<R, A>;
10
+ }
11
+
12
+ export class ObservableRefDescriptor<A> {
13
+ constructor(readonly id: symbol, readonly initial: A) {}
14
+ }
15
+
16
+ export interface CommonObservableRef<out R> {
17
+ readonly _R: (_: never) => R;
18
+ readonly has: URIO<R, boolean>;
19
+ readonly delete: URIO<R, void>;
20
+ }
21
+
22
+ /**
23
+ * @tsplus type fncts.observable.ObservableRef.Readable
24
+ */
25
+ export interface Readable<out R, out A> extends CommonObservableRef<R> {
26
+ readonly _R: (_: never) => R;
27
+ readonly _Out: (_: never) => A;
28
+ readonly get: URIO<R, A>;
29
+ readonly observable: Observable<R, never, A>;
30
+ }
31
+
32
+ /**
33
+ * @tsplus type fncts.observable.ObservableRef.Writable
34
+ */
35
+ export interface Writable<out R, in A> extends CommonObservableRef<R> {
36
+ readonly _R: (_: never) => R;
37
+ readonly _In: (_: A) => void;
38
+ set(a: A): URIO<R, void>;
39
+ }
40
+
41
+ /**
42
+ * @tsplus type fncts.observable.ObservableRef
43
+ * @tsplus companion fncts.observable.ObservableRefOps
44
+ */
45
+ export abstract class ObservableRef<out R, in A, out B> implements Readable<R, B>, Writable<R, A> {
46
+ declare _R: (_: never) => R;
47
+ declare _In: (_: A) => void;
48
+ declare _Out: (_: never) => B;
49
+
50
+ constructor(readonly descriptor: ObservableRefDescriptor<any>) {}
51
+
52
+ abstract readonly get: URIO<R, B>;
53
+ abstract set(a: A): URIO<R, void>;
54
+ abstract readonly delete: URIO<R, boolean>;
55
+ abstract readonly has: URIO<R, boolean>;
56
+ abstract readonly observable: Observable<R, never, B>;
57
+ }
package/_src/global.ts CHANGED
@@ -18,7 +18,7 @@ import { isDate, isFunction, isIterable, isObject, isPlain } from "@fncts/base/u
18
18
  /**
19
19
  * @tsplus global
20
20
  */
21
- import { FiberContext } from "@fncts/io/Fiber";
21
+ import { FiberRuntime } from "@fncts/io/Fiber";
22
22
  /**
23
23
  * @tsplus global
24
24
  */
@@ -76,6 +76,10 @@ import { Notification } from "@fncts/observable/Notification";
76
76
  * @tsplus global
77
77
  */
78
78
  import { Observable, ObservableInput, Subscribable } from "@fncts/observable/Observable";
79
+ /**
80
+ * @tsplus global
81
+ */
82
+ import { ObservableRef } from "@fncts/observable/ObservableRef/definition";
79
83
  /**
80
84
  * @tsplus global
81
85
  */
package/global.d.ts CHANGED
@@ -17,7 +17,7 @@ import { isDate, isFunction, isIterable, isObject, isPlain } from "@fncts/base/u
17
17
  /**
18
18
  * @tsplus global
19
19
  */
20
- import { FiberContext } from "@fncts/io/Fiber";
20
+ import { FiberRuntime } from "@fncts/io/Fiber";
21
21
  /**
22
22
  * @tsplus global
23
23
  */
@@ -66,6 +66,10 @@ import { Notification } from "@fncts/observable/Notification";
66
66
  * @tsplus global
67
67
  */
68
68
  import { Observable, ObservableInput, Subscribable } from "@fncts/observable/Observable";
69
+ /**
70
+ * @tsplus global
71
+ */
72
+ import { ObservableRef } from "@fncts/observable/ObservableRef/definition";
69
73
  /**
70
74
  * @tsplus global
71
75
  */
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@fncts/observable",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "dependencies": {
5
- "@fncts/base": "0.0.21"
5
+ "@fncts/base": "0.0.23"
6
6
  },
7
7
  "exports": {
8
8
  "./*": {