mirror of
https://github.com/bitwarden/browser
synced 2026-01-09 03:53:53 +00:00
* [PM-14416] Add initial SecurityTask models and enums * [PM-14416] Add support for PATCH request method and 204 No Content response * [PM-14416] Add initial task service abstraction * [PM-14416] Add SecurityTask state/key definitions * [PM-14416] Add DefaultTaskService implementation * [PM-14416] Add DefaultTaskService tests * [PM-14416] Add better null checking to new models * [PM-14416] Improve null value filtering for task service
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { filter, Observable, OperatorFunction, shareReplay } from "rxjs";
|
|
|
|
import { UserId } from "@bitwarden/common/types/guid";
|
|
|
|
/**
|
|
* Builds an observable once per userId and caches it for future requests.
|
|
* The built observables are shared among subscribers with a replay buffer size of 1.
|
|
* @param create - A function that creates an observable for a given userId.
|
|
*/
|
|
export function perUserCache$<TValue>(
|
|
create: (userId: UserId) => Observable<TValue>,
|
|
): (userId: UserId) => Observable<TValue> {
|
|
const cache = new Map<UserId, Observable<TValue>>();
|
|
return (userId: UserId) => {
|
|
let observable = cache.get(userId);
|
|
if (!observable) {
|
|
observable = create(userId).pipe(shareReplay({ bufferSize: 1, refCount: false }));
|
|
cache.set(userId, observable);
|
|
}
|
|
return observable;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Strongly typed observable operator that filters out null/undefined values and adjusts the return type to
|
|
* be non-nullable.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* const source$ = of(1, null, 2, undefined, 3);
|
|
* source$.pipe(filterOutNullish()).subscribe(console.log);
|
|
* // Output: 1, 2, 3
|
|
* ```
|
|
*/
|
|
export function filterOutNullish<T>(): OperatorFunction<T | undefined | null, T> {
|
|
return filter((v): v is T => v != null);
|
|
}
|