UNPKG

nochoices

Version:

Full featured implementation of options into typescript.

110 lines (84 loc) 2.02 kB
import { OptionalValue } from "./optional-value.js" import { Option } from "./option.js" import { Some } from "./some.js" import { AreEqual, FlattenOption } from "./types.js"; export class None<T> extends OptionalValue<T> { isPresent(): boolean { return false } isAbsent(): boolean { return true } unwrap(): T { throw new Error('unwrap over None.') } map<M>(_fn: (a: T) => M): Option<M> { return Option.None() } filter(_fn: (a: T) => boolean): Option<T> { return Option.None() } expect(err: Error): T { throw err } unwrapOr<U>(defaultValue: U): T | U { return defaultValue } unwrapOrElse(defaultFn: () => T): T { return defaultFn() } flatten(): Option<FlattenOption<T>> { return Option.None() } zip<U>(_another: OptionalValue<U>): Option<[T, U]> { return Option.None() } zipWithSome<U>(_some: Some<U>): Option<[U, T]> { return Option.None() } and<V>(_another: Option<V>): Option<V> { return Option.None() } or(_self: Option<T>, another: Option<T>): Option<T> { return another } xor(another: OptionalValue<T>): Option<T> { return another.xorWithNone() } xorWithNone(): Option<T> { return Option.None() } xorWithSome(some: Some<T>): Option<T> { return Option.Some(some.unwrap()) } andThen<U>(_fn: (t: T) => Option<U>): Option<U> { return Option.None() } orElse(fn: () => Option<T>): Option<T> { return fn() } getOrInsert(value: T): OptionalValue<T> { return new Some(value); } getOrInsertWith(fn: () => T): OptionalValue<T> { return new Some(fn()); } takeValue(): Option<T> { return Option.None(); } isSomeAnd(_andFn: (t: T) => boolean): boolean { return false; } ifSome(_param: (t: T) => void): void { /* no-op */ } ifNone(fn: () => void): void { fn() } toArray(): T[] { return []; } equalsWith(another: OptionalValue<T>, _equality: AreEqual<T>): boolean { return another.isAbsent() } }