(
...opOrMapFn:
| OperatorFunction<T, unknown>[]
| string[]
| [k: string, fn: (val: unknown) => unknown]
| [
keys: string[],
fn?: (slice: unknown) => unknown,
keyCompareMap?: KeyCompareMap<T>,
]
)
| 203 | * @internal |
| 204 | */ |
| 205 | export function select<T extends Record<string, unknown>>( |
| 206 | ...opOrMapFn: |
| 207 | | OperatorFunction<T, unknown>[] |
| 208 | | string[] |
| 209 | | [k: string, fn: (val: unknown) => unknown] |
| 210 | | [ |
| 211 | keys: string[], |
| 212 | fn?: (slice: unknown) => unknown, |
| 213 | keyCompareMap?: KeyCompareMap<T>, |
| 214 | ] |
| 215 | ): OperatorFunction<T, unknown> { |
| 216 | return (state$: Observable<T>) => { |
| 217 | if (!opOrMapFn || opOrMapFn.length === 0) { |
| 218 | return state$.pipe(stateful()); |
| 219 | } else if (isStringAndFunctionTupleGuard(opOrMapFn)) { |
| 220 | return state$.pipe(stateful(map((s) => opOrMapFn[1](s[opOrMapFn[0]])))); |
| 221 | } else if (isStringArrayFunctionAndOptionalObjectTupleGuard(opOrMapFn)) { |
| 222 | const selectedState$: Observable<PickSlice<T & object, keyof T>> = |
| 223 | state$.pipe( |
| 224 | selectSlice<T & object, keyof T>( |
| 225 | opOrMapFn[0] as (keyof T)[], |
| 226 | opOrMapFn[2] as KeyCompareMap<{ [P in keyof T]: (T & object)[P] }>, |
| 227 | ), |
| 228 | ); |
| 229 | return typeof opOrMapFn[1] === 'undefined' |
| 230 | ? selectedState$ |
| 231 | : selectedState$.pipe(stateful(map(opOrMapFn[1]))); |
| 232 | } else if (isStringArrayGuard(opOrMapFn)) { |
| 233 | return state$.pipe( |
| 234 | stateful( |
| 235 | map((state) => opOrMapFn.reduce((acc, key) => acc?.[key], state)), |
| 236 | ), |
| 237 | ); |
| 238 | } else if (isOperateFnArrayGuard(opOrMapFn)) { |
| 239 | return state$.pipe(stateful(pipeFromArray(opOrMapFn))); |
| 240 | } else { |
| 241 | throw new Error('wrong params passed to select'); |
| 242 | } |
| 243 | }; |
| 244 | } |
no test coverage detected