@hazae41/option
Version:
Rust-like Option for TypeScript
1 lines • 12.5 kB
Source Map (JSON)
{"version":3,"file":"none.mjs","sources":["../../../../src/mods/option/none.ts"],"sourcesContent":["import { Err, Panic } from \"@hazae41/result\"\nimport { Awaitable } from \"libs/awaitable/index.js\"\nimport { Option } from \"./option.js\"\n\n\nexport class NoneError extends Error {\n\n constructor() {\n super(`Option is a None`)\n }\n\n}\n\nexport interface NoneInit {\n /* Nothing */\n}\n\nexport class None {\n\n /**\n * An empty value\n */\n constructor(\n readonly inner = undefined\n ) { }\n\n static create(): None {\n return new None()\n }\n\n static from(init: NoneInit) {\n return new None()\n }\n\n /**\n * Returns an iterator over the possibly contained value\n * @yields `this.inner` if `Some`\n */\n *[Symbol.iterator](): Iterator<never, void> {\n return\n }\n\n /**\n * Type guard for `Some`\n * @returns `true` if `Some`, `false` if `None`\n */\n isSome(): false {\n return false\n }\n\n /**\n * Returns `true` if the option is a `Some` and the value inside of it matches a predicate\n * @param somePredicate \n * @returns `true` if `Some` and `await somePredicate(this.inner)`, `None` otherwise\n */\n async isSomeAnd(somePredicate: unknown): Promise<false> {\n return false\n }\n\n /**\n * Returns `true` if the option is a `Some` and the value inside of it matches a predicate\n * @param somePredicate \n * @returns `true` if `Some` and `somePredicate(this.inner)`, `None` otherwise\n */\n isSomeAndSync(somePredicate: unknown): false {\n return false\n }\n\n /**\n * Type guard for `None`\n * @returns `true` if `None`, `false` if `Some`\n */\n isNone(): this is None {\n return true\n }\n\n /**\n * Compile-time safely get `this.inner`\n * @returns `this.inner`\n */\n get(this: never): never {\n throw new Panic()\n }\n\n /**\n * Get the inner value or throw an error\n * @returns \n */\n getOrThrow(): never {\n throw new NoneError()\n }\n\n /**\n * Get the inner value or `null`\n * @returns \n */\n getOrNull(): undefined {\n return\n }\n\n /**\n * Get the inner value or a default one\n * @param value \n * @returns `this.inner` if `Some`, `value` if `None`\n */\n getOr<U>(value: U): U {\n return value\n }\n\n /**\n * Returns the contained `Some` value or computes it from a closure\n * @param noneCallback \n * @returns `this.inner` if `Some`, `await noneCallback()` if `None`\n */\n async getOrElse<U>(noneCallback: () => Awaitable<U>): Promise<U> {\n return await noneCallback()\n }\n\n /**\n * Returns the contained `Some` value or computes it from a closure\n * @param noneCallback \n * @returns `this.inner` if `Some`, `noneCallback()` if `None`\n */\n getOrElseSync<U>(noneCallback: () => U): U {\n return noneCallback()\n }\n\n /**\n * Transform `Option<T>` into `Result<T, NoneError>`\n * @returns `Ok(this.inner)` if `Some`, `Err(NoneError)` if `None`\n */\n ok(): Err<NoneError> {\n return new Err(new NoneError())\n }\n\n /**\n * Transform `Option<T>` into `Result<T, E>`\n * @param error\n * @returns `Ok(this.inner)` if `Some`, `Err(error)` if `None`\n */\n okOr<E>(error: E): Err<E> {\n return new Err(error)\n }\n\n /**\n * Transforms the `Option<T>` into a `Result<T, E>`, mapping `Some(v)` to `Ok(v)` and `None` to `Err(err())`\n * @param noneCallback \n * @returns `Ok(this.inner)` if `Some`, `Err(await noneCallback())` is `None`\n */\n async okOrElse<U>(noneCallback: () => Awaitable<U>): Promise<Err<U>> {\n return new Err(await noneCallback())\n }\n\n /**\n * Transforms the `Option<T>` into a `Result<T, E>`, mapping `Some(v)` to `Ok(v)` and `None` to `Err(err())`\n * @param noneCallback \n * @returns `Ok(this.inner)` if `Some`, `Err(noneCallback())` is `None`\n */\n okOrElseSync<U>(noneCallback: () => U): Err<U> {\n return new Err(noneCallback())\n }\n\n /**\n * Returns `None` if the option is `None`, otherwise calls `somePredicate` with the wrapped value\n * @param somePredicate \n * @returns `Some` if `Some` and `await somePredicate(this.inner)`, `None` otherwise\n */\n async filter(somePredicate: unknown): Promise<this> {\n return this\n }\n\n /**\n * Returns `None` if the option is `None`, otherwise calls `somePredicate` with the wrapped value\n * @param somePredicate \n * @returns `Some` if `Some` and `somePredicate(this.inner)`, `None` otherwise\n */\n filterSync(somePredicate: unknown): this {\n return this\n }\n\n /**\n * Transform `Option<Promise<T>>` into `Promise<Option<T>>`\n * @returns `Promise<Option<T>>`\n */\n async await(): Promise<None> {\n return this\n }\n\n /**\n * Returns `true` if the option is a `Some` value containing the given value\n * @param value \n * @returns `true` if `Some` and `this.inner === value`, `None` otherwise\n */\n contains(value: unknown): false {\n return false\n }\n\n /**\n * Calls the given callback with the inner value if `Ok`\n * @param someCallback \n * @returns `this`\n */\n async inspect(someCallback: unknown): Promise<this> {\n return this\n }\n\n /**\n * Calls the given callback with the inner value if `Ok`\n * @param someCallback \n * @returns `this`\n */\n inspectSync(someCallback: unknown): this {\n return this\n }\n\n /**\n * Maps an `Option<T>` to `Option<U>` by applying a function to a contained value (if `Some`) or returns `None` (if `None`)\n * @param someMapper \n * @returns `Some(await someMapper(this.inner))` if `Some`, `this` if `None`\n */\n async map(someMapper: unknown): Promise<this> {\n return this\n }\n\n /**\n * Maps an `Option<T>` to `Option<U>` by applying a function to a contained value (if `Some`) or returns `None` (if `None`)\n * @param someMapper \n * @returns `Some(someMapper(this.inner))` if `Some`, `this` if `None`\n */\n mapSync(someMapper: unknown): this {\n return this\n }\n\n /**\n * Returns the provided default result (if none), or applies a function to the contained value (if any)\n * @param value \n * @param someMapper \n * @returns `value` if `None`, `await someMapper(this.inner)` if `Some`\n */\n async mapOr<U>(value: U, someMapper: unknown): Promise<U> {\n return value\n }\n\n /**\n * Returns the provided default result (if none), or applies a function to the contained value (if any)\n * @param value \n * @param someMapper \n * @returns `value` if `None`, `someMapper(this.inner)` if `Some`\n */\n mapOrSync<U>(value: U, someMapper: unknown): U {\n return value\n }\n\n /**\n * Computes a default function result (if none), or applies a different function to the contained value (if any)\n * @param noneCallback \n * @param someMapper \n * @returns `await someMapper(this.inner)` if `Some`, `await noneCallback()` if `None`\n */\n async mapOrElse<U>(noneCallback: () => Awaitable<U>, someMapper: unknown): Promise<U> {\n return await noneCallback()\n }\n\n /**\n * Computes a default function result (if none), or applies a different function to the contained value (if any)\n * @param noneCallback \n * @param someMapper \n * @returns `someMapper(this.inner)` if `Some`, `noneCallback()` if `None`\n */\n mapOrElseSync<U>(noneCallback: () => U, someMapper: unknown): U {\n return noneCallback()\n }\n\n /**\n * Returns `None` if the option is `None`, otherwise returns `value`\n * @param value \n * @returns `None` if `None`, `value` if `Some`\n */\n and(value: unknown): this {\n return this\n }\n\n /**\n * Returns `None` if the option is `None`, otherwise calls `someMapper` with the wrapped value and returns the result\n * @param someMapper \n * @returns `None` if `None`, `await someMapper(this.inner)` if `Some`\n */\n async andThen(someMapper: unknown): Promise<this> {\n return this\n }\n\n /**\n * Returns `None` if the option is `None`, otherwise calls `someMapper` with the wrapped value and returns the result\n * @param someMapper \n * @returns `None` if `None`, `someMapper(this.inner)` if `Some`\n */\n andThenSync(someMapper: unknown): this {\n return this\n }\n\n /**\n * Returns `this` if `Some`, otherwise returns `value`\n * @param value \n * @returns `this` if `Some`, `value` if `None`\n */\n or<U>(value: U): U {\n return value\n }\n\n /**\n * Returns `this` if `Some`, otherwise calls `noneCallback` and returns the result\n * @param noneCallback \n * @returns `this` if `Some`, `await noneCallback()` if `None`\n */\n async orElse<U>(noneCallback: () => Awaitable<U>): Promise<U> {\n return await noneCallback()\n }\n\n /**\n * Returns `this` if `Some`, otherwise calls `noneCallback` and returns the result\n * @param noneCallback \n * @returns `this` if `Some`, `noneCallback()` if `None`\n */\n orElseSync<U>(noneCallback: () => U): U {\n return noneCallback()\n }\n\n /**\n * Returns `Some` if exactly one of the options is `Some`, otherwise returns `None`\n * @param value \n * @returns `None` if both are `Some` or both are `None`, the only `Some` otherwise\n */\n xor<U>(value: Option<U>): Option<U> {\n return value\n }\n\n /**\n * Zips `this` with another `Option`\n * @param other \n * @returns `Some([this.inner, other.inner])` if both are `Some`, `None` if one of them is `None`\n */\n zip(other: unknown): None {\n return this\n }\n\n}"],"names":[],"mappings":"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"}