@@ -21,13 +21,18 @@ import {
21
21
} from 'rxjs' ;
22
22
import { catchError , map , tap } from 'rxjs/operators' ;
23
23
24
- export type ProjectStateFn < T > = ( oldState : T ) => Partial < T > ;
25
- export type ProjectValueFn < T , K extends keyof T > = ( oldState : T ) => T [ K ] ;
24
+ export type ProjectStateFn < T > = ( oldState : Readonly < T > ) => Partial < T > ;
25
+ export type ProjectValueFn < T , K extends keyof T > = (
26
+ oldState : Readonly < T >
27
+ ) => T [ K ] ;
26
28
27
- export type ProjectStateReducer < T , V > = ( oldState : T , value : V ) => Partial < T > ;
29
+ export type ProjectStateReducer < T , V > = (
30
+ oldState : Readonly < T > ,
31
+ value : V
32
+ ) => Partial < T > ;
28
33
29
34
export type ProjectValueReducer < T , K extends keyof T , V > = (
30
- oldState : T ,
35
+ oldState : Readonly < T > ,
31
36
value : V
32
37
) => T [ K ] ;
33
38
@@ -105,9 +110,9 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
105
110
* doStuff();
106
111
* }
107
112
*
108
- * @return T
113
+ * @return Readonly<T>
109
114
*/
110
- get ( ) : T ;
115
+ get ( ) : Readonly < T > ;
111
116
112
117
/**
113
118
* @description
@@ -123,33 +128,36 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
123
128
*
124
129
* const foo = state.get('bar', 'foo');
125
130
*
126
- * @return T | T[K1] | T[K1][K2]
131
+ * @return Readonly<T> | Readonly< T[K1]> | Readonly< T[K1][K2]>
127
132
*/
128
133
129
- get < K1 extends keyof T > ( k1 : K1 ) : T [ K1 ] ;
134
+ get < K1 extends keyof T > ( k1 : K1 ) : Readonly < T [ K1 ] > ;
130
135
/** @internal **/
131
- get < K1 extends keyof T , K2 extends keyof T [ K1 ] > ( k1 : K1 , k2 : K2 ) : T [ K1 ] [ K2 ] ;
136
+ get < K1 extends keyof T , K2 extends keyof T [ K1 ] > (
137
+ k1 : K1 ,
138
+ k2 : K2
139
+ ) : Readonly < T [ K1 ] [ K2 ] > ;
132
140
/** @internal **/
133
141
get < K1 extends keyof T , K2 extends keyof T [ K1 ] , K3 extends keyof T [ K1 ] [ K2 ] > (
134
142
k1 : K1 ,
135
143
k2 : K2 ,
136
144
k3 : K3
137
- ) : T [ K1 ] [ K2 ] [ K3 ] ;
145
+ ) : Readonly < T [ K1 ] [ K2 ] [ K3 ] > ;
138
146
/** @internal **/
139
147
get <
140
148
K1 extends keyof T ,
141
149
K2 extends keyof T [ K1 ] ,
142
150
K3 extends keyof T [ K1 ] [ K2 ] ,
143
151
K4 extends keyof T [ K1 ] [ K2 ] [ K3 ]
144
- > ( k1 : K1 , k2 : K2 , k3 : K3 , k4 : K4 ) : T [ K1 ] [ K2 ] [ K3 ] [ K4 ] ;
152
+ > ( k1 : K1 , k2 : K2 , k3 : K3 , k4 : K4 ) : Readonly < T [ K1 ] [ K2 ] [ K3 ] [ K4 ] > ;
145
153
/** @internal **/
146
154
get <
147
155
K1 extends keyof T ,
148
156
K2 extends keyof T [ K1 ] ,
149
157
K3 extends keyof T [ K1 ] [ K2 ] ,
150
158
K4 extends keyof T [ K1 ] [ K2 ] [ K3 ] ,
151
159
K5 extends keyof T [ K1 ] [ K2 ] [ K3 ] [ K4 ]
152
- > ( k1 : K1 , k2 : K2 , k3 : K3 , k4 : K4 , k5 : K5 ) : T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] ;
160
+ > ( k1 : K1 , k2 : K2 , k3 : K3 , k4 : K4 , k5 : K5 ) : Readonly < T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] > ;
153
161
/** @internal **/
154
162
get <
155
163
K1 extends keyof T ,
@@ -158,7 +166,14 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
158
166
K4 extends keyof T [ K1 ] [ K2 ] [ K3 ] ,
159
167
K5 extends keyof T [ K1 ] [ K2 ] [ K3 ] [ K4 ] ,
160
168
K6 extends keyof T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ]
161
- > ( k1 : K1 , k2 : K2 , k3 : K3 , k4 : K4 , k5 : K5 , k6 : K6 ) : T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] [ K6 ] ;
169
+ > (
170
+ k1 : K1 ,
171
+ k2 : K2 ,
172
+ k3 : K3 ,
173
+ k4 : K4 ,
174
+ k5 : K5 ,
175
+ k6 : K6
176
+ ) : Readonly < T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] [ K6 ] > ;
162
177
/** @internal **/
163
178
get <
164
179
K1 extends keyof T ,
@@ -175,14 +190,15 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
175
190
| [ K1 , K2 , K3 , K4 ]
176
191
| [ K1 , K2 , K3 , K4 , K5 ]
177
192
| [ K1 , K2 , K3 , K4 , K5 , K6 ]
178
- ) :
193
+ ) : Readonly <
179
194
| T
180
195
| T [ K1 ]
181
196
| T [ K1 ] [ K2 ]
182
197
| T [ K1 ] [ K2 ] [ K3 ]
183
198
| T [ K1 ] [ K2 ] [ K3 ] [ K4 ]
184
199
| T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ]
185
- | T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] [ K6 ] {
200
+ | T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] [ K6 ]
201
+ > {
186
202
const hasStateAnyKeys = Object . keys ( this . accumulator . state ) . length > 0 ;
187
203
if ( ! ! keys && keys . length ) {
188
204
return safePluck ( this . accumulator . state , keys ) ;
@@ -230,7 +246,7 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
230
246
* @param {ProjectValueFn<T, K> } projectSlice
231
247
* @return void
232
248
*/
233
- set < K extends keyof T , O > ( key : K , projectSlice : ProjectValueFn < T , K > ) : void ;
249
+ set < K extends keyof T > ( key : K , projectSlice : ProjectValueFn < T , K > ) : void ;
234
250
/**
235
251
* @internal
236
252
*/
@@ -489,7 +505,7 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
489
505
*/
490
506
select < K extends keyof T , V > (
491
507
keys : K [ ] ,
492
- fn : ( slice : PickSlice < T , K > ) => V ,
508
+ fn : ( slice : Readonly < PickSlice < T , K > > ) => V ,
493
509
keyCompareMap ?: KeyCompareMap < Pick < T , K > >
494
510
) : Observable < V > ;
495
511
/**
@@ -503,7 +519,10 @@ export class RxState<T extends object> implements OnDestroy, Subscribable<T> {
503
519
*
504
520
* @return Observable<V>
505
521
*/
506
- select < K extends keyof T , V > ( k : K , fn : ( val : T [ K ] ) => V ) : Observable < V > ;
522
+ select < K extends keyof T , V > (
523
+ k : K ,
524
+ fn : ( val : Readonly < T [ K ] > ) => V
525
+ ) : Observable < V > ;
507
526
/**
508
527
* @description
509
528
* Access a single property of the state by providing keys.
0 commit comments