@equinor/fusion-observable
Version:
42 lines • 1.52 kB
JavaScript
import { isObservable } from 'rxjs';
// biome-ignore lint/suspicious/noExplicitAny: Should allow any input type
export function isObservableInput(input) {
// Check for null or undefined
if (input === null || input === undefined) {
return false;
}
// Check for primitive string values (not ObservableInput)
if (typeof input === 'string') {
return false;
}
// Check if input is an RxJS Observable
if (isObservable(input)) {
return true;
}
// Check for InteropObservable (has Symbol.observable)
if (typeof input[Symbol.observable] === 'function') {
return true; // InteropObservable<T>
}
// Check for AsyncIterable (has Symbol.asyncIterator)
if (typeof input[Symbol.asyncIterator] === 'function') {
return true; // AsyncIterable<T>
}
// Check for PromiseLike (has then function)
if (typeof input.then === 'function') {
return true; // PromiseLike<T>
}
// Check for ArrayLike (object with length property)
if (typeof input === 'object' && typeof input.length === 'number') {
return true; // ArrayLike<T>
}
// Check for Iterable (has Symbol.iterator)
if (typeof input[Symbol.iterator] === 'function') {
return true; // Iterable<T>
}
// Check for ReadableStreamLike (has getReader function)
if (typeof input.getReader === 'function') {
return true; // ReadableStreamLike<T>
}
return false;
}
//# sourceMappingURL=is-observable-input.js.map