{"version":3,"sources":["../src/async_option.ts","../src/async_result.ts","../src/fn.ts","../src/error.ts","../src/symbols.ts","../src/result.ts","../src/option.ts","../src/try.ts","../src/util.ts"],"names":["Result","Option"],"mappings":"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","sourcesContent":["import {AsyncResult} from \".\";\nimport type {Option, OptionMatch, OptionMatchAsync} from \"./option\";\n\n/**\n * A promise that resolves to an `Option`.\n *\n * This class is useful for chaining multiple asynchronous operations that return an `Option`.\n */\nexport class AsyncOption<T> implements PromiseLike<Option<T>> {\n\tconstructor(readonly promise: Promise<Option<T>> | PromiseLike<Option<T>> | AsyncOption<T>) {}\n\n\tthen<A, B>(\n\t\tsuccessCallback?: (res: Option<T>) => A | PromiseLike<A>,\n\t\tfailureCallback?: (reason: unknown) => B | PromiseLike<B>,\n\t): PromiseLike<A | B> {\n\t\treturn this.promise.then(successCallback, failureCallback);\n\t}\n\n\tcatch<B>(rejectionCallback?: (reason: unknown) => B | PromiseLike<B>): PromiseLike<B> {\n\t\treturn this.promise.then(undefined, rejectionCallback);\n\t}\n\n\tfinally(callback: () => void): PromiseLike<Option<T>> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tcallback();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tcallback();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Option#match`.\n\t */\n\tasync match<A, B>(matcher: OptionMatch<T, A, B>): Promise<A | B> {\n\t\treturn (await this).match(matcher);\n\t}\n\n\tasync matchAsync<A, B>(matcher: OptionMatchAsync<T, A, B>): Promise<A | B> {\n\t\treturn (await this).matchAsync(matcher);\n\t}\n\n\t/**\n\t * Async version of `Option#value`.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tasync value(): Promise<T | undefined> {\n\t\treturn (await this).value();\n\t}\n\n\t/**\n\t * Async version of `Option#okOr`.\n\t */\n\tokOr<E>(err: E): AsyncResult<T, E> {\n\t\treturn new AsyncResult(this.then((option) => option.okOr(err)));\n\t}\n\n\t/**\n\t * Async version of `Option#okOrElse`.\n\t */\n\tokOrElse<E>(err: () => E): AsyncResult<T, E> {\n\t\treturn new AsyncResult(this.then((option) => option.okOrElse(err)));\n\t}\n\n\t/**\n\t * Async version of `Option#and`.\n\t */\n\tand<U>(other: AsyncOption<U>): AsyncOption<U> {\n\t\treturn new AsyncOption(\n\t\t\tthis.then((option) => other.then((otherOption) => option.and(otherOption))),\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Option#andThen`.\n\t */\n\tandThen<U>(f: (value: T) => Option<U>): AsyncOption<U> {\n\t\treturn new AsyncOption(this.then((option) => option.andThen((value) => f(value))));\n\t}\n\n\t/**\n\t * Async version of `Option#inspect`.\n\t */\n\tinspect(f: (value: T) => void): AsyncOption<T> {\n\t\treturn new AsyncOption(this.then((option) => option.inspect(f)));\n\t}\n\n\t/**\n\t * Async version of `Option#expect`.\n\t */\n\tasync expect(message: string): Promise<T> {\n\t\treturn (await this).expect(message);\n\t}\n\n\t/**\n\t * Async version of `Option#filter`.\n\t */\n\tfilter(f: (value: T) => boolean): AsyncOption<T> {\n\t\treturn new AsyncOption(this.then((option) => option.filter(f)));\n\t}\n\n\t/**\n\t * Async version of `Option#flatten`.\n\t */\n\tflatten<U>(this: AsyncOption<Option<U>>): AsyncOption<U> {\n\t\treturn new AsyncOption(this.then((option) => option.flatten()));\n\t}\n\n\t/**\n\t * Async version of `Option#map`.\n\t */\n\tmap<U>(f: (value: T) => U): AsyncOption<U> {\n\t\treturn new AsyncOption(this.then((option) => option.map(f)));\n\t}\n\n\t/**\n\t * Async version of `Option#mapOr`.\n\t */\n\tasync mapOr<A, B>(defaultValue: A, f: (value: T) => B): Promise<A | B> {\n\t\treturn (await this).mapOr(defaultValue, f);\n\t}\n\n\t/**\n\t * Async version of `Option#mapOrElse`.\n\t */\n\tasync mapOrElse<A, B>(defaultValue: () => A, f: (value: T) => B): Promise<A | B> {\n\t\treturn (await this).mapOrElse(defaultValue, f);\n\t}\n\n\t/**\n\t * Async version of `Option#or`.\n\t */\n\tor<U>(other: AsyncOption<U>): AsyncOption<T | U> {\n\t\treturn new AsyncOption(\n\t\t\tthis.then((thisOption) => other.then((otherOption) => thisOption.or(otherOption))),\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Option#orElse`.\n\t */\n\torElse<U>(f: () => Option<U>): AsyncOption<T | U> {\n\t\treturn new AsyncOption(this.then((thisOption) => thisOption.orElse(() => f())));\n\t}\n\n\t/**\n\t * Async version of `Option#unwrap`.\n\t */\n\tasync unwrap(): Promise<T | undefined> {\n\t\treturn (await this).unwrap();\n\t}\n\n\t/**\n\t * Async version of `Option#unwrapOr`.\n\t */\n\tasync unwrapOr<U>(defaultValue: U): Promise<T | U> {\n\t\treturn (await this).unwrapOr(defaultValue);\n\t}\n\n\t/**\n\t * Async version of `Option#unwrapOrElse`.\n\t */\n\tasync unwrapOrElse<U>(f: () => U): Promise<T | U> {\n\t\treturn (await this).unwrapOrElse(f);\n\t}\n\n\t/**\n\t * Async version of `Option#xor`.\n\t */\n\txor<U>(other: AsyncOption<U>): AsyncOption<T | U> {\n\t\treturn new AsyncOption(\n\t\t\tthis.then((thisOption) => other.then((otherOption) => thisOption.xor(otherOption))),\n\t\t);\n\t}\n}\n","import {AsyncOption} from \"./async_option\";\nimport type {Err, Result, ResultImpl, ResultMatch, ResultMatchAsync} from \"./result\";\n\n/**\n * A promise that resolves to a `Result`.\n *\n * This class is useful for chaining multiple asynchronous operations that return a `Result`.\n */\nexport class AsyncResult<T, E> implements PromiseLike<Result<T, E>> {\n\tconstructor(\n\t\treadonly promise: Promise<Result<T, E>> | PromiseLike<Result<T, E>> | AsyncResult<T, E>,\n\t) {}\n\n\tasync *try(): AsyncGenerator<Err<E, never>, T> {\n\t\treturn yield* await this.promise.then((res) => res.try());\n\t}\n\n\tthen<A, B>(\n\t\tsuccessCallback?: (res: Result<T, E>) => A | PromiseLike<A>,\n\t\tfailureCallback?: (reason: unknown) => B | PromiseLike<B>,\n\t): PromiseLike<A | B> {\n\t\treturn this.promise.then(successCallback, failureCallback);\n\t}\n\n\tcatch<B>(rejectionCallback?: (reason: unknown) => B | PromiseLike<B>): PromiseLike<B> {\n\t\treturn this.promise.then(undefined, rejectionCallback);\n\t}\n\n\tfinally(callback: () => void): PromiseLike<Result<T, E>> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tcallback();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tcallback();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Result#match`.\n\t */\n\tasync match<A, B>(matcher: ResultMatch<T, E, A, B>): Promise<A | B> {\n\t\treturn (await this).match(matcher);\n\t}\n\n\tasync matchAsync<A, B>(matcher: ResultMatchAsync<T, E, A, B>): Promise<A | B> {\n\t\treturn (await this).matchAsync(matcher);\n\t}\n\n\t/**\n\t * @deprecated - Use `unwrap()` instead.\n\t */\n\tasync value(): Promise<T | undefined> {\n\t\treturn (await this).value();\n\t}\n\n\t/**\n\t * @deprecated - Use `unwrapErr()` instead.\n\t */\n\tasync error(): Promise<E | undefined> {\n\t\treturn (await this).error();\n\t}\n\n\t/**\n\t * Async version of `Result#ok`.\n\t */\n\tok(): AsyncOption<T> {\n\t\treturn new AsyncOption(this.then((result) => result.ok()));\n\t}\n\n\t/**\n\t * Async version of `Result#err`.\n\t */\n\terr(): AsyncOption<E> {\n\t\treturn new AsyncOption(this.then((result) => result.err()));\n\t}\n\n\t/**\n\t * Async version of `Result#and`.\n\t */\n\tand<U, F>(other: AsyncResult<U, F>): AsyncResult<U, E | F> {\n\t\treturn new AsyncResult(\n\t\t\tthis.then((result) => other.then((otherResult) => result.and(otherResult))),\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Result#andThen`.\n\t */\n\tandThen<U, F>(f: (value: T) => Result<U, F>): AsyncResult<U, E | F> {\n\t\treturn new AsyncResult(this.then((result) => result.andThen((value) => f(value))));\n\t}\n\n\t/**\n\t * Async version of `Result#andThenAsync`.\n\t */\n\tandThenAsync<U, F>(f: (value: T) => Promise<Result<U, F>>): AsyncResult<U, E | F> {\n\t\treturn new AsyncResult(this.then((result) => result.andThenAsync((value) => f(value))));\n\t}\n\n\t/**\n\t * Async version of `Result#expect`.\n\t */\n\tasync expect(message: string): Promise<T> {\n\t\treturn (await this).expect(message);\n\t}\n\n\t/**\n\t * Async version of `Result#expectErr`.\n\t */\n\tasync expectErr(message: string): Promise<E> {\n\t\treturn (await this).expectErr(message);\n\t}\n\n\t/**\n\t * Async version of `Result#flatten`.\n\t */\n\tflatten<U, F>(this: AsyncResult<ResultImpl<U, F>, E>): AsyncResult<U, E | F> {\n\t\treturn new AsyncResult(this.then((result) => result.flatten()));\n\t}\n\n\t/**\n\t * Async version of `Result#inspect`.\n\t */\n\tinspect(f: (value: T) => void): AsyncResult<T, E> {\n\t\treturn new AsyncResult(this.then((result) => result.inspect(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#inspectAsync`.\n\t */\n\tinspectAsync(f: (value: T) => Promise<void>): AsyncResult<T, E> {\n\t\treturn new AsyncResult(this.then((result) => result.inspectAsync(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#inspectErr`.\n\t */\n\tinspectErr(f: (error: E) => void): AsyncResult<T, E> {\n\t\treturn new AsyncResult(this.then((result) => result.inspectErr(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#inspectErrAsync`.\n\t */\n\tinspectErrAsync(f: (error: E) => Promise<void>): AsyncResult<T, E> {\n\t\treturn new AsyncResult(this.then((result) => result.inspectErrAsync(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#map`.\n\t */\n\tmap<U>(f: (value: T) => U): AsyncResult<U, E> {\n\t\treturn new AsyncResult(this.then((result) => result.map(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#mapAsync`.\n\t */\n\tmapAsync<U>(f: (value: T) => Promise<U>): AsyncResult<U, E> {\n\t\treturn new AsyncResult(this.then((result) => result.mapAsync(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#mapErr`.\n\t */\n\tmapErr<F>(f: (error: E) => F): AsyncResult<T, F> {\n\t\treturn new AsyncResult(this.then((result) => result.mapErr(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#mapErrAsync`.\n\t */\n\tmapErrAsync<F>(f: (error: E) => Promise<F>): AsyncResult<T, F> {\n\t\treturn new AsyncResult(this.then((result) => result.mapErrAsync(f)));\n\t}\n\n\t/**\n\t * Async version of `Result#mapOr`.\n\t */\n\tasync mapOr<A, B>(defaultValue: A, f: (value: T) => B): Promise<A | B> {\n\t\treturn (await this).mapOr(defaultValue, f);\n\t}\n\n\t/**\n\t * Async version of `Result#mapOrElse`.\n\t */\n\tasync mapOrElse<A, B>(defaultValue: (error: E) => A, f: (value: T) => B): Promise<A | B> {\n\t\treturn (await this).mapOrElse(defaultValue, f);\n\t}\n\n\t/**\n\t * Async version of `Result#or`.\n\t */\n\tor<U, F>(other: AsyncResult<U, F>): AsyncResult<T | U, F> {\n\t\treturn new AsyncResult(\n\t\t\tthis.then((thisResult) => other.then((otherResult) => thisResult.or(otherResult))),\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Result#orElse`.\n\t */\n\torElse<U, F>(f: (error: E) => Result<U, F>): AsyncResult<T | U, F> {\n\t\treturn new AsyncResult(this.then((thisResult) => thisResult.orElse((error) => f(error))));\n\t}\n\n\t/**\n\t * Async version of `Result#orElseAsync`.\n\t */\n\torElseAsync<U, F>(f: (error: E) => Promise<Result<U, F>>): AsyncResult<T | U, F> {\n\t\treturn new AsyncResult(\n\t\t\tthis.then((thisResult) => thisResult.orElseAsync((error) => f(error))),\n\t\t);\n\t}\n\n\t/**\n\t * Async version of `Result#unwrap`.\n\t */\n\tasync unwrap(): Promise<T | undefined> {\n\t\treturn (await this).unwrap();\n\t}\n\n\t/**\n\t * Async version of `Result#unwrapErr`.\n\t */\n\tasync unwrapErr(): Promise<E | undefined> {\n\t\treturn (await this).unwrapErr();\n\t}\n\n\t/**\n\t * Async version of `Result#unwrapOr`.\n\t */\n\tasync unwrapOr<U>(defaultValue: U): Promise<T | U> {\n\t\treturn (await this).unwrapOr(defaultValue);\n\t}\n\n\t/**\n\t * Async version of `Result#unwrapOrElse`.\n\t */\n\tasync unwrapOrElse<U>(defaultValue: (error: E) => U): Promise<T | U> {\n\t\treturn (await this).unwrapOrElse(defaultValue);\n\t}\n}\n","import {type Result} from \"./result\";\nimport {AsyncResult} from \"./async_result\";\nimport type {InferErr, InferOk} from \"./util\";\n\n/**\n * Wraps a function that returns any shape of `Result<any, any>` and infers its return type as `Result<T, E>`.\n *\n * **Examples**\n *\n * ```\n * // (a: number, b: number) => Err<string> | Ok<number>\n * const divide = (a: number, b: number) => b === 0 ? Err(\"division by zero\") : Ok(a / b)\n *\n * // (a: number, b: number) => Result<number, string>\n * const wrapped = fn(divide)\n * ```\n */\nexport function fn<A extends any[], R extends Result<any, any>>(\n\tf: (...args: A) => R,\n): (...args: A) => Result<InferOk<R>, InferErr<R>> {\n\treturn f;\n}\n\n/**\n * Wraps a function that returns any shape of `Promise<Result<any, any>>` and wraps the return value in an `AsyncResult`.\n *\n * **Examples**\n *\n * ```\n * // (a: number, b: number) => Promise<Err<string> | Ok<number>>\n * const divide = async (a: number, b: number) => b === 0 ? Err(\"division by zero\") : Ok(a / b)\n *\n * // (a: number, b: number) => AsyncResult<number, string>\n * const wrapped = asyncFn(divide)\n * // now you can do this:\n * const result = await wrapped(1, 2) // => Result<number, string>\n * ```\n */\nexport function asyncFn<A extends any[], R extends AsyncResult<any, any>>(\n\tf: (...args: A) => R,\n): (...args: A) => AsyncResult<InferOk<Awaited<R>>, InferErr<Awaited<R>>>;\nexport function asyncFn<A extends any[], R extends Promise<Result<any, any>>>(\n\tf: (...args: A) => R,\n): (...args: A) => AsyncResult<InferOk<Awaited<R>>, InferErr<Awaited<R>>>;\nexport function asyncFn(f: any): any {\n\treturn function (...args: any[]) {\n\t\treturn new AsyncResult(f(...args));\n\t};\n}\n","/**\n * A special error to indicate an unrecoverable error.\n *\n * This error is not caught by any function of the library, and is meant to be used to indicate a critical error that should not be caught.\n *\n * Use this error when you want to indicate that the program should stop executing.\n */\nexport class Panic extends Error {\n\toverride readonly name = \"Panic\";\n\toverride readonly cause?: unknown;\n\n\tconstructor(message?: string, options?: {cause?: unknown}) {\n\t\tsuper(message, options);\n\t\tthis.cause = options?.cause;\n\t}\n}\n\n/**\n * An abstract class with a `tag` discriminant.\n *\n * Adding a discriminant field can be beneficial for distinguishing between different types of errors during error handling. It also prevents TypeScript from unifying types, ensuring that each error is treated uniquely based on its discriminant value.\n */\nexport abstract class ErrorWithTag extends Error {\n\tabstract readonly tag: string;\n}\n\n/**\n * An abstract class with a typed `cause` field.\n *\n * This class is useful for errors that have a cause, which is another error that caused the current error to occur.\n */\nexport abstract class ErrorWithCause<Cause> extends ErrorWithTag {\n\toverride readonly cause: Cause;\n\n\tconstructor(message: string, options: {cause: Cause}) {\n\t\tsuper(message);\n\t\tthis.cause = options.cause;\n\t}\n}\n\n/**\n * Parses an error into an `Error` instance.\n *\n * If the error is already an instance of `Error`, it is returned as is. Otherwise, a new `TypeError` instance is created with the error as the cause.\n */\nexport function parseError(error: unknown): Error {\n\tif (error instanceof Error) {\n\t\treturn error;\n\t}\n\treturn new TypeError(`Invalid error type: '${String(error)}'`, {cause: error});\n}\n","export const inspect = Symbol.for(\"nodejs.util.inspect.custom\");\nexport const tag = Symbol(\"tag\");\n","import {Panic, parseError} from \"./error\";\nimport {type Option, Some, None} from \"./option\";\nimport {AsyncResult} from \"./async_result\";\nimport * as symbols from \"./symbols\";\n\nexport type ResultMatch<T, E, A, B> = {\n\tOk: (value: T) => A;\n\tErr: (error: E) => B;\n};\n\nexport type ResultMatchAsync<T, E, A, B> = {\n\tOk: (value: T) => Promise<A>;\n\tErr: (error: E) => Promise<B>;\n};\n\nexport class ResultImpl<T, E> {\n\tprivate readonly kind?: true;\n\tprivate readonly wrapped: T | E;\n\n\t[Symbol.toStringTag] = \"Result\";\n\n\tconstructor(k: boolean, v: T | E) {\n\t\tif (k) {\n\t\t\tthis.kind = true;\n\t\t}\n\t\tthis.wrapped = v;\n\t}\n\n\tpublic try(): Generator<Err<E, never>, T> {\n\t\tconst wrapped = this.wrapped;\n\t\tif (this.kind) {\n\t\t\treturn (function* () {\n\t\t\t\treturn wrapped as T;\n\t\t\t})();\n\t\t}\n\t\treturn (function* () {\n\t\t\tyield Err(wrapped as E);\n\t\t\tthrow new Panic(\"Do not use this generator outside of a try block\");\n\t\t})();\n\t}\n\n\tprivate unwrapFailed(message: string): never {\n\t\tthrow new Panic(message, {cause: this.wrapped});\n\t}\n\n\t/**\n\t * Matches the result with two functions.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<number, string> = Ok(2)\n\t * assert.strictEqual(x.match({\n\t * \tOk: (v) => v * 2,\n\t * \tErr: (e) => e.length,\n\t * }), 4)\n\t *\n\t * const y: Result<number, string> = Err(\"error\")\n\t * assert.strictEqual(y.match({\n\t * \tOk: (v) => v * 2,\n\t * \tErr: (e) => e.length,\n\t * }), 5)\n\t * ```\n\t */\n\tmatch<A, B>(pattern: ResultMatch<T, E, A, B>): A | B {\n\t\treturn this.kind ? pattern.Ok(this.wrapped as T) : pattern.Err(this.wrapped as E);\n\t}\n\n\tmatchAsync<A, B>(pattern: ResultMatchAsync<T, E, A, B>): Promise<A | B> {\n\t\treturn this.kind ? pattern.Ok(this.wrapped as T) : pattern.Err(this.wrapped as E);\n\t}\n\n\t/**\n\t * Returns the contained value, if it exists.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tvalue(): T | undefined {\n\t\treturn this.kind ? (this.wrapped as T) : undefined;\n\t}\n\n\t/**\n\t * Returns the contained error, if it exists.\n\t *\n\t * @deprecated Use `unwrapErr()` instead.\n\t */\n\terror(): E | undefined {\n\t\treturn this.kind ? undefined : (this.wrapped as E);\n\t}\n\n\t/**\n\t * Returns `true` if the result is `Ok`.\n\t */\n\tisOk(): this is Ok<T, E> {\n\t\treturn this.kind === true;\n\t}\n\n\t/**\n\t * Returns `true` if the result is `Ok` and the value satisfies the predicate.\n\t *\n\t * Maybe not as useful as using `result.isOk() && f(result.value)`, because it doesn't narrow the type, but it's here for completeness.\n\t */\n\tisOkAnd(f: (value: T) => boolean): this is Ok<T, E> {\n\t\treturn this.kind === true && f(this.wrapped as T);\n\t}\n\n\t/**\n\t * Returns `true` if the result is `Err`.\n\t */\n\tisErr(): this is Err<E, T> {\n\t\treturn this.kind === undefined;\n\t}\n\n\t/**\n\t * Returns `true` if the result is `Err` and the error satisfies the predicate.\n\t *\n\t * Maybe not as useful as using `result.isErr() && f(result.error)`, because it doesn't narrow the type, but it's here for completeness.\n\t */\n\tisErrAnd(f: (error: E) => boolean): this is Err<E, T> {\n\t\treturn this.kind === undefined && f(this.wrapped as E);\n\t}\n\n\t/**\n\t * Converts from `Result<T, E>` to `Option<T>`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<number, string> = Ok(2)\n\t * assert.strictDeepEqual(x.ok(), Some(2))\n\t *\n\t * const y: Result<number, string> = Err(\"Nothing here\")\n\t * assert.strictDeepEqual(y.ok(), None)\n\t * ```\n\t */\n\tok(): Option<T> {\n\t\treturn this.kind ? Some(this.wrapped as T) : None;\n\t}\n\n\t/**\n\t * Converts from `Result<T, E>` to `Option<E>`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<number, string> = Ok(2)\n\t * assert.strictDeepEqual(x.err(), None)\n\t *\n\t * const y: Result<number, string> = Err(\"Nothing here\")\n\t * assert.strictDeepEqual(y.err(), Some(\"Nothing here\"))\n\t * ```\n\t */\n\terr(): Option<E> {\n\t\treturn this.kind ? None : Some(this.wrapped as E);\n\t}\n\n\t/**\n\t * Maps a `Result<T, E>` to `Result<U, E>` by applying a function to a contained `Ok` value, leaving an `Err` value untouched.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Ok(10)\n\t * const mapped = x.map((n) => `number ${n}`)\n\t * assert.strictEqual(mapped.unwrap(), \"number 10\")\n\t * ```\n\t */\n\tmap<U>(f: (value: T) => U): Result<U, E> {\n\t\treturn this.kind ? Ok(f(this.wrapped as T)) : Err(this.wrapped as E);\n\t}\n\n\t/**\n\t * Maps a `Result<T, E>` to `AsyncResult<U, E>` by applying an async function to a contained `Ok` value, leaving an `Err` value untouched.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Ok(10)\n\t * const mapped = x.mapAsync((n) => Promise.resolve(`number ${n}`))\n\t * assert.strictEqual(await mapped.unwrap(), \"number 10\")\n\t * ```\n\t */\n\tmapAsync<U>(f: (value: T) => Promise<U>): AsyncResult<U, E> {\n\t\treturn new AsyncResult(\n\t\t\tthis.kind\n\t\t\t\t? f(this.wrapped as T).then((v) => Ok(v))\n\t\t\t\t: Promise.resolve(Err(this.wrapped as E)),\n\t\t);\n\t}\n\n\t/**\n\t * Returns the provided default (if `Err`), or applies a function to the contained value (if `Ok`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<string, string> = Ok(\"foo\");\n\t * assert.strictEqual(x.mapOr(42, (v) => v.length), 3);\n\t *\n\t * const y: Result<string, string> = Err(\"bar\");\n\t * assert.strictEqual(y.mapOr(42, (v) => v.length), 42);\n\t * ```\n\t */\n\tmapOr<A, B>(defaultValue: A, f: (value: T) => B): A | B {\n\t\treturn this.kind ? f(this.wrapped as T) : defaultValue;\n\t}\n\n\tmapOrAsync<A, B>(defaultValue: A, f: (value: T) => Promise<B>): Promise<A | B> {\n\t\treturn this.kind ? f(this.wrapped as T) : Promise.resolve(defaultValue);\n\t}\n\n\t/**\n\t * Maps a `Result<T, E>` to `A | B` by applying fallback function `defaultValue` to a contained `Err` value, or function `f` to a contained `Ok` value.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const k = 21\n\t *\n\t * let x: Result<string, string> = Ok(\"foo\")\n\t * assert.strictEqual(x.mapOrElse(() => k * 2, (v) => v.length), 3)\n\t *\n\t * x = Err(\"bar\")\n\t * assert.strictEqual(x.mapOrElse(() => k * 2, (v) => v.length), 42)\n\t * ```\n\t */\n\tmapOrElse<A, B>(defaultValue: (error: E) => A, f: (value: T) => B): A | B {\n\t\treturn this.kind ? f(this.wrapped as T) : defaultValue(this.wrapped as E);\n\t}\n\n\tmapOrElseAsync<A, B>(\n\t\tdefaultValue: (error: E) => Promise<A>,\n\t\tf: (value: T) => Promise<B>,\n\t): Promise<A | B> {\n\t\treturn this.kind ? f(this.wrapped as T) : defaultValue(this.wrapped as E);\n\t}\n\n\t/**\n\t * Maps a `Result<T, E>` to `Result<T, F>` by applying a function to a contained `Err` value, leaving an `Ok` value untouched.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Err(\"error\")\n\t * const mapped = x.mapErr((s) => s.length)\n\t * assert.strictEqual(mapped.unwrapErr(), 5)\n\t * ```\n\t */\n\tmapErr<F>(f: (error: E) => F): Result<T, F> {\n\t\treturn this.kind ? Ok(this.wrapped as T) : Err(f(this.wrapped as E));\n\t}\n\n\t/**\n\t * Maps a `Result<T, E>` to `AsyncResult<T, F>` by applying an async function to a contained `Err` value, leaving an `Ok` value untouched.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Err(\"error\")\n\t * const mapped = x.mapErrAsync((s) => Promise.resolve(s.length))\n\t * assert.strictEqual(await mapped.unwrapErr(), 5)\n\t * ```\n\t */\n\tmapErrAsync<F>(f: (error: E) => Promise<F>): AsyncResult<T, F> {\n\t\treturn new AsyncResult(\n\t\t\tthis.kind\n\t\t\t\t? Promise.resolve(Ok(this.wrapped as T))\n\t\t\t\t: f(this.wrapped as E).then((v) => Err(v)),\n\t\t);\n\t}\n\n\t/**\n\t * Calls the provided function with the contained value (if `Ok`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Ok(2)\n\t * x.inspect((v) => console.log(v))\n\t * ```\n\t */\n\tinspect(f: (value: T) => void): this {\n\t\tif (this.kind) {\n\t\t\tf(this.wrapped as T);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls the provided async function with the contained value (if `Ok`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Ok(2)\n\t * x.inspectAsync((v) => Promise.resolve(console.log(v)))\n\t * ```\n\t */\n\tinspectAsync(f: (value: T) => Promise<void>): AsyncResult<T, E> {\n\t\treturn new AsyncResult(\n\t\t\tthis.matchAsync({\n\t\t\t\tOk: (t) => f(t).then(() => Ok(t)),\n\t\t\t\tErr: (e) => Promise.resolve(Err(e)),\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Calls the provided function with the contained error (if `Err`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Err(\"error\")\n\t * x.inspectErr((e) => console.error(e))\n\t * ```\n\t */\n\tinspectErr(f: (error: E) => void): this {\n\t\tif (!this.kind) {\n\t\t\tf(this.wrapped as E);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls the provided async function with the contained error (if `Err`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Err(\"error\")\n\t * x.inspectErrAsync((e) => Promise.resolve(console.error(e)))\n\t * ```\n\t */\n\tinspectErrAsync(f: (error: E) => Promise<void>): AsyncResult<T, E> {\n\t\treturn new AsyncResult(\n\t\t\tthis.kind\n\t\t\t\t? Promise.resolve(Ok(this.wrapped as T))\n\t\t\t\t: f(this.wrapped as E).then(() => Err(this.wrapped as E)),\n\t\t);\n\t}\n\n\t/**\n\t * Returns the contained `Ok` value.\n\t *\n\t * Throws `Panic` if the value is an `Err`, with a message containing `message` and content of the `Err` as `cause`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Err(\"emergency failure\")\n\t * x.expect(\"Testing expect\") // throws Panic: Testing expect\n\t * ```\n\t */\n\texpect(message: string): T {\n\t\treturn this.kind ? (this.wrapped as T) : this.unwrapFailed(message);\n\t}\n\n\t/**\n\t * Returns the contained `Ok` value or `undefined`.\n\t */\n\tunwrap(): T | undefined {\n\t\treturn this.kind ? (this.wrapped as T) : undefined;\n\t}\n\n\t/**\n\t * Returns the contained `Err` value.\n\t *\n\t * Throws `Panic` if the value is an `Ok`, with a message containing `message` and content of the `Ok` as `cause`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x = Ok(2)\n\t * x.expectErr(\"Testing expectErr\") // throws Panic: Testing expectErr\n\t * ```\n\t */\n\texpectErr(message: string): E {\n\t\treturn this.kind ? this.unwrapFailed(message) : (this.wrapped as E);\n\t}\n\n\t/**\n\t * Returns the contained `Err` value or `undefined`\n\t */\n\tunwrapErr(): E | undefined {\n\t\treturn this.kind ? undefined : (this.wrapped as E);\n\t}\n\n\t/**\n\t * Returns `other` if the result is `Ok`, otherwise returns `this` (as `Err`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * let x: Result<number, string> = Ok(2)\n\t * let y: Result<string, string> = Err(\"late error\")\n\t * assert.deepStrictEqual(x.and(y), Err(\"late error\"))\n\t *\n\t * x = Err(\"early error\")\n\t * y = Ok(\"foo\")\n\t * assert.deepStrictEqual(x.and(y), Err(\"early error\"))\n\t *\n\t * x = Err(\"not a 2\")\n\t * y = Err(\"late error\")\n\t * assert.deepStrictEqual(x.and(y), Err(\"not a 2\"))\n\t *\n\t * x = Ok(2)\n\t * y = Ok(\"different result type\")\n\t * assert.deepStrictEqual(x.and(y), Ok(\"different result type\"))\n\t * ```\n\t */\n\tand<U, F>(other: Result<U, F>): Result<U, E | F> {\n\t\treturn (this.kind ? other : this) as Result<U, E | F>;\n\t}\n\n\t/**\n\t * Calls `f` if the result is `Ok`, otherwise returns `this` (as `Err`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * let x: Result<number, string> = Ok(2)\n\t * assert.deepStrictEqual(x.andThen((n) => Ok(n * 2)), Ok(4))\n\t *\n\t * let y: Result<string, string> = Err(\"late error\")\n\t * assert.deepStrictEqual(y.andThen((n) => Ok(n * 2)), Err(\"late error\"))\n\t * ```\n\t */\n\tandThen<U, F>(f: (value: T) => Result<U, F>): Result<U, E | F> {\n\t\treturn (this.kind ? f(this.wrapped as T) : this) as Result<U, E | F>;\n\t}\n\n\t/**\n\t * Calls `f` if the result is `Ok`, otherwise returns `this` (as `Err`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * let x: Result<number, string> = Ok(2)\n\t * assert.deepStrictEqual(x.andThenAsync((n) => Promise.resolve(Ok(n * 2))), Ok(4))\n\t *\n\t * let y: Result<string, string> = Err(\"late error\")\n\t * assert.deepStrictEqual(y.andThenAsync((n) => Promise.resolve(Ok(n * 2))), Err(\"late error\"))\n\t * ```\n\t */\n\tandThenAsync<U, F>(\n\t\tf: (value: T) => AsyncResult<U, F> | Promise<Result<U, F>>,\n\t): AsyncResult<U, E | F> {\n\t\treturn new AsyncResult(\n\t\t\t(this.kind\n\t\t\t\t? f(this.wrapped as T)\n\t\t\t\t: Promise.resolve(this as unknown as Err<E, T>)) as Promise<Result<U, E | F>>,\n\t\t);\n\t}\n\n\t/**\n\t * Returns `other` if the result is `Err`, otherwise returns `this` (as `Ok`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * let x: Result<number, string> = Ok(2)\n\t * let y: Result<number, string> = Err(\"late error\")\n\t * assert.deepStrictEqual(x.or(y), Ok(2))\n\t * assert.deepStrictEqual(y.or(x), Ok(2))\n\t * ```\n\t */\n\tor<U, F>(other: Result<U, F>): Result<T | U, F> {\n\t\treturn (this.kind ? this : other) as Result<T | U, F>;\n\t}\n\n\t/**\n\t * Calls `f` if the result is `Err`, otherwise returns `this` (as `Ok`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * let x: Result<number, string> = Ok(2)\n\t * assert.deepStrictEqual(x.orElse((e) => Err(e + \"bar\")), Ok(2))\n\t *\n\t * let y: Result<number, string> = Err(\"foo\")\n\t * assert.deepStrictEqual(y.orElse((e) => Err(e + \"bar\")), Err(\"foobar\"))\n\t * ```\n\t */\n\torElse<U, F>(f: (error: E) => Result<U, F>): Result<T | U, F> {\n\t\treturn (this.kind ? this : f(this.wrapped as E)) as Result<T | U, F>;\n\t}\n\n\t/**\n\t * Calls `f` if the result is `Err`, otherwise returns `this` (as `Ok`).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * let x: Result<number, string> = Ok(2)\n\t * assert.deepStrictEqual(x.orElseAsync((e) => Promise.resolve(Err(e + \"bar\"))), Ok(2))\n\t *\n\t * let y: Result<number, string> = Err(\"foo\")\n\t * assert.deepStrictEqual(y.orElseAsync((e) => Promise.resolve(Err(e + \"bar\"))), Err(\"foobar\"))\n\t * ```\n\t */\n\torElseAsync<U, F>(\n\t\tf: (error: E) => AsyncResult<U, F> | Promise<Result<U, F>>,\n\t): AsyncResult<T | U, F> {\n\t\treturn new AsyncResult(\n\t\t\t(this.kind\n\t\t\t\t? Promise.resolve(this as unknown as Ok<T, E>)\n\t\t\t\t: f(this.wrapped as E)) as Promise<Result<T | U, F>>,\n\t\t);\n\t}\n\n\t/**\n\t * Returns the contained `Ok` value or a provided default.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<number, string> = Ok(2)\n\t * assert.strictEqual(x.unwrapOr(0), 2)\n\t *\n\t * const y: Result<number, string> = Err(\"error\")\n\t * assert.strictEqual(y.unwrapOr(0), 0)\n\t * ```\n\t */\n\tunwrapOr<U>(defaultValue: U): T | U {\n\t\treturn this.kind ? (this.wrapped as T) : defaultValue;\n\t}\n\n\t/**\n\t * Returns the contained `Ok` value or computes it from `defaultValue`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<number, string> = Ok(2)\n\t * assert.strictEqual(x.unwrapOrElse(() => 0), 2)\n\t *\n\t * const y: Result<number, string> = Err(\"error\")\n\t * assert.strictEqual(y.unwrapOrElse(() => 0), 0)\n\t * ```\n\t */\n\tunwrapOrElse<U>(defaultValue: (error: E) => U): T | U {\n\t\treturn this.kind ? (this.wrapped as T) : defaultValue(this.wrapped as E);\n\t}\n\n\tunwrapOrElseAsync<U>(defaultValue: (error: E) => Promise<U>): Promise<T | U> {\n\t\treturn this.kind ? Promise.resolve(this.wrapped as T) : defaultValue(this.wrapped as E);\n\t}\n\n\t/**\n\t * Converts from `Result<Result<U, F>, E>` to `Result<U, E | F>`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const x: Result<Result<number, string>, string> = Ok(Ok(2))\n\t * assert.deepStrictEqual(x.flatten(), Ok(2))\n\t *\n\t * const y: Result<Result<number, string>, string> = Ok(Err(\"late error\"))\n\t * assert.deepStrictEqual(y.flatten(), Err(\"late error\"))\n\t *\n\t * const z: Result<Result<number, string>, string> = Err(\"early error\")\n\t * assert.deepStrictEqual(z.flatten(), Err(\"early error\"))\n\t * ```\n\t */\n\tflatten<U, F>(this: Result<ResultImpl<U, F>, E>): Result<U, E | F> {\n\t\treturn this.kind ? (this.wrapped as Result<U, F>) : Err(this.wrapped as E);\n\t}\n\n\ttoObject(): {isOk: true; value: T} | {isOk: false; error: E} {\n\t\treturn this.kind\n\t\t\t? {isOk: true, value: this.wrapped as T}\n\t\t\t: {isOk: false, error: this.wrapped as E};\n\t}\n\n\ttoString(): `Ok(${string})` | `Err(${string})` {\n\t\tconst str = String(this.wrapped);\n\t\treturn this.kind ? `Ok(${str})` : `Err(${str})`;\n\t}\n\n\t[symbols.inspect](): ReturnType<ResultImpl<T, E>[\"toString\"]> {\n\t\treturn this.toString();\n\t}\n}\n\nexport interface Ok<T = undefined, E = never> extends ResultImpl<T, E> {\n\t[symbols.tag]: \"Ok\";\n\t/**\n\t * Returns the contained value, if it exists.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tvalue(): T;\n\t/**\n\t * Returns the contained error, if it exists.\n\t *\n\t * @deprecated Use `unwrapErr()` instead.\n\t */\n\terror(): undefined;\n\tunwrap(): T;\n\tunwrapErr(): undefined;\n\texpect(message: string): T;\n\texpectErr(message: string): never;\n}\n\n/**\n * Contains the success value.\n */\nexport function Ok(): Ok;\nexport function Ok<T>(value: T): Ok<T>;\nexport function Ok<T>(value?: T): Ok<T> {\n\treturn new ResultImpl<T, never>(true, value as T) as Ok<T>;\n}\n\nexport interface Err<E = undefined, T = never> extends ResultImpl<T, E> {\n\t[symbols.tag]: \"Err\";\n\t/**\n\t * Returns the contained value, if it exists.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tvalue(): undefined;\n\t/**\n\t * Returns the contained value, if it exists.\n\t *\n\t * @deprecated Use `unwrapErr()` instead.\n\t */\n\terror(): E;\n\tunwrap(): undefined;\n\tunwrapErr(): E;\n\texpect(message: string): never;\n\texpectErr(message: string): E;\n}\n\n/**\n * Contains the error value.\n */\nexport function Err(): Err;\nexport function Err<E>(error: E): Err<E>;\nexport function Err<E>(error?: E): Err<E> {\n\treturn new ResultImpl<never, E>(false, error as E) as Err<E>;\n}\n\nfunction handlePanic(error: unknown) {\n\tif (error instanceof Panic) {\n\t\tthrow error;\n\t}\n\treturn error;\n}\n\nfunction handleCaughtError(error: unknown) {\n\treturn parseError(handlePanic(error));\n}\n\n/**\n * `Result` is a type that represents either success (`Ok`) or failure (`Err`).\n *\n * `Result<T, E>` is the type used for returning errors. It is a discriminated union with the variants, `Ok<T>`, representing success and containing a value, and `Err<E>`, representing error and containing an error value.\n *\n * Functions return `Result` whenever errors are expected and recoverable.\n */\nexport type Result<T, E> = Ok<T, E> | Err<E, T>;\n\nexport namespace Result {\n\t/**\n\t * Tries to execute a function and returns the result as a `Result`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * // const result: Result<number, Error>\n\t * const result = Result.fromThrowable(() => {\n\t *   if (Math.random() > 0.5) {\n\t *\t\treturn 42\n\t *\t  } else {\n\t *\t\tthrow new Error(\"random error\")\n\t *\t  }\n\t * })\n\t * ```\n\t */\n\texport function fromThrowable<T>(f: () => T): Result<T, Error> {\n\t\ttry {\n\t\t\treturn Ok(f());\n\t\t} catch (error) {\n\t\t\treturn Err(handleCaughtError(error));\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated Use `Result.fromThrowable()` instead.\n\t */\n\texport const from = fromThrowable;\n\n\t/**\n\t * Tries to resolve a promise and returns the result as a `AsyncResult`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * // const result: AsyncResult<number, Error>\n\t * const result = Result.fromPromise(Promise.resolve(42))\n\t * ```\n\t */\n\texport function fromPromise<T>(promise: Promise<T>): AsyncResult<T, Error> {\n\t\treturn new AsyncResult(\n\t\t\tpromise.then(\n\t\t\t\t(value) => Ok(value),\n\t\t\t\t(error) => Err(handleCaughtError(error)),\n\t\t\t),\n\t\t);\n\t}\n}\n","import {AsyncOption} from \"./async_option\";\nimport {AsyncResult} from \"./async_result\";\nimport {Panic} from \"./error\";\nimport {Err, Ok, type Result} from \"./result\";\nimport * as symbols from \"./symbols\";\n\nexport type OptionMatch<T, A, B> = {\n\tSome: (value: T) => A;\n\tNone: () => B;\n};\n\nexport type OptionMatchAsync<T, A, B> = {\n\tSome: (value: T) => Promise<A>;\n\tNone: () => Promise<B>;\n};\n\nexport class OptionImpl<T> {\n\tprivate readonly kind?: true;\n\tprivate readonly wrapped?: T;\n\n\t[Symbol.toStringTag] = \"Option\";\n\n\tconstructor(kind: boolean, x?: T) {\n\t\tif (kind) {\n\t\t\tthis.kind = true;\n\t\t\tthis.wrapped = x!;\n\t\t}\n\t}\n\n\tprivate unwrapFailed(message: string): never {\n\t\tthrow new Panic(message, {cause: this.wrapped});\n\t}\n\n\t/**\n\t * Matches the option to its content.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).match({\n\t * \tSome: (value) => value + 1,\n\t * \tNone: () => 0\n\t * }) // => 43\n\t * ```\n\t */\n\tmatch<A, B>(pattern: OptionMatch<T, A, B>): A | B {\n\t\treturn this.kind ? pattern.Some(this.wrapped as T) : pattern.None();\n\t}\n\n\tmatchAsync<A, B>(pattern: OptionMatchAsync<T, A, B>): Promise<A | B> {\n\t\treturn this.kind ? pattern.Some(this.wrapped as T) : pattern.None();\n\t}\n\n\t/**\n\t * Returns the contained `Some` value, if it exists.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tvalue(): T | undefined {\n\t\treturn this.wrapped;\n\t}\n\n\t/**\n\t * Returns `true` if the option is a `Some` value.\n\t */\n\tisSome(): this is Some<T> {\n\t\treturn this.kind === true;\n\t}\n\n\t/**\n\t * Returns `true` if the option is a `Some` value and the contained value is equal to `value`.\n\t *\n\t * Maybe not as useful as using `option.isSome() && f(option.value)`, because it doesn't narrow the type, but it's here for completeness.\n\t */\n\tisSomeAnd(predicate: (value: T) => boolean): this is Some<T> {\n\t\treturn this.kind === true && predicate(this.wrapped as T);\n\t}\n\n\t/**\n\t * Returns `true` if the option is a `None` value.\n\t */\n\tisNone(): this is None<T> {\n\t\treturn this.kind !== true;\n\t}\n\n\t/**\n\t * Returns the contained `Some` value, if exists.\n\t *\n\t * Throws `Panic` with the provided message if the value is `None`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).expect(\"The world is ending\") // => 42\n\t * None.expect(\"The world is ending\") // => Panic: The world is ending\n\t * ```\n\t */\n\texpect(message: string): T {\n\t\treturn this.kind ? (this.wrapped as T) : this.unwrapFailed(message);\n\t}\n\n\t/**\n\t * Returns the contained `Some` value, if exists, otherwise returns `undefined`.\n\t */\n\tunwrap(): T | undefined {\n\t\treturn this.kind ? (this.wrapped as T) : undefined;\n\t}\n\n\t/**\n\t * Returns the contained `Some` value, if exists.\n\t *\n\t * Otherwise, returns the provided default value.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).unwrapOr(0) // => 42\n\t * None.unwrapOr(0) // => 0\n\t * ```\n\t */\n\tunwrapOr<U>(defaultValue: U): T | U {\n\t\treturn this.kind ? (this.wrapped as T) : defaultValue;\n\t}\n\n\t/**\n\t * Returns the contained `Some` value, if exists.\n\t *\n\t * Otherwise, computes the provided default value.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).unwrapOrElse(() => 0) // => 42\n\t * None.unwrapOrElse(() => 0) // => 0\n\t * ```\n\t */\n\tunwrapOrElse<U>(defaultValue: () => U): T | U {\n\t\treturn this.kind ? (this.wrapped as T) : defaultValue();\n\t}\n\n\tunwrapOrElseAsync<U>(defaultValue: () => Promise<U>): Promise<T | U> {\n\t\treturn this.kind ? Promise.resolve(this.wrapped as T) : defaultValue();\n\t}\n\n\t/**\n\t * Maps an `Option<T>` to `Option<U>` by applying a function to a contained value.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).map(x => x + 1) // => Some(43)\n\t * None.map(x => x + 1) // => None\n\t * ```\n\t */\n\tmap<U>(f: (value: T) => U): Option<U> {\n\t\treturn this.kind ? Some(f(this.wrapped as T)) : None;\n\t}\n\n\tmapAsync<U>(f: (value: T) => Promise<U>): AsyncOption<U> {\n\t\treturn new AsyncOption(this.kind ? f(this.wrapped as T).then(Some) : Promise.resolve(None));\n\t}\n\n\t/**\n\t * Calls `f` if the `Option` is `Some`, otherwise returns `None`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Ok(42).inspect(console.log) // => 42\n\t * ```\n\t */\n\tinspect(f: (value: T) => void): this {\n\t\tif (this.kind) {\n\t\t\tf(this.wrapped as T);\n\t\t}\n\t\treturn this;\n\t}\n\n\tinspectAsync(f: (value: T) => Promise<void>): AsyncOption<T> {\n\t\treturn new AsyncOption(\n\t\t\tthis.kind\n\t\t\t\t? f(this.wrapped as T).then(() => this as unknown as Some<T>)\n\t\t\t\t: Promise.resolve(None),\n\t\t);\n\t}\n\n\t/**\n\t * Returns the provided default result (if none), or applies a function to the contained value (if any).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).mapOr(0, x => x + 1) // => 43\n\t * None.mapOr(0, x => x + 1) // => 0\n\t * ```\n\t */\n\tmapOr<A, B>(defaultValue: A, f: (value: T) => B): A | B {\n\t\treturn this.kind ? f(this.wrapped as T) : defaultValue;\n\t}\n\n\tmapOrAsync<A, B>(defaultValue: A, f: (value: T) => Promise<B>): Promise<A | B> {\n\t\treturn this.kind ? f(this.wrapped as T) : Promise.resolve(defaultValue);\n\t}\n\n\t/**\n\t * Returns the provided default result (if none), or computes a default value by applying a function to the contained value (if any).\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * const k = 21\n\t * Some(\"foo\").mapOrElse(() => k * 2, (v) => v.length) // => 3\n\t * None.mapOrElse(() => k * 2, (v) => v.length) // => 42\n\t * ```\n\t */\n\tmapOrElse<A, B>(defaultValue: () => A, f: (value: T) => B): A | B {\n\t\treturn this.kind ? f(this.wrapped as T) : defaultValue();\n\t}\n\n\tmapOrElseAsync<A, B>(\n\t\tdefaultValue: () => Promise<A>,\n\t\tf: (value: T) => Promise<B>,\n\t): Promise<A | B> {\n\t\treturn this.kind ? f(this.wrapped as T) : defaultValue();\n\t}\n\n\t/**\n\t * Transforms the `Option<T>` into a `Result<T, E>`, mapping `Some(v)` to `Ok(v)` and `None` to `Err(err)`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).okOr(\"failed\") // => Ok(42)\n\t * None.okOr(\"failed\") // => Err(\"failed\")\n\t * ```\n\t */\n\tokOr<E>(err: E): Result<T, E> {\n\t\treturn this.kind ? Ok(this.wrapped as T) : Err(err);\n\t}\n\n\t/**\n\t * Transforms the `Option<T>` into a `Result<T, E>`, mapping `Some(v)` to `Ok(v)` and `None` to `Err(err())`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).okOrElse(() => \"failed\") // => Ok(42)\n\t * None.okOrElse(() => \"failed\") // => Err(\"failed\")\n\t * ```\n\t */\n\tokOrElse<E>(err: () => E): Result<T, E> {\n\t\treturn this.kind ? Ok(this.wrapped as T) : Err(err());\n\t}\n\n\tokOrElseAsync<E>(err: () => Promise<E>): AsyncResult<T, E> {\n\t\treturn new AsyncResult<T, E>(\n\t\t\tthis.kind\n\t\t\t\t? Promise.resolve(Ok(this.wrapped as T))\n\t\t\t\t: (err().then(Err) as Promise<Result<T, E>>),\n\t\t);\n\t}\n\n\t/**\n\t * Returns `None` if the option is `None`, otherwise returns `other`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).and(Some(54)) // => Some(54)\n\t * Some(42).and(None) // => None\n\t * None.and(Some(54)) // => None\n\t * None.and(None) // => None\n\t * ```\n\t */\n\tand<U>(other: Option<U>): Option<U> {\n\t\treturn this.kind ? other : None;\n\t}\n\n\t/**\n\t * Returns `None` if the option is `None`, otherwise calls `f` with the wrapped value and returns the result.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).andThen(x => Some(x + 1)) // => Some(43)\n\t * Some(42).andThen(x => None) // => None\n\t * None.andThen(x => Some(x + 1)) // => None\n\t * ```\n\t */\n\tandThen<U>(f: (value: T) => Option<U>): Option<U> {\n\t\treturn this.kind ? f(this.wrapped as T) : None;\n\t}\n\n\tandThenAsync<U>(f: (value: T) => Promise<Option<U>> | AsyncOption<U>): AsyncOption<U> {\n\t\treturn new AsyncOption(this.kind ? f(this.wrapped as T) : Promise.resolve(None));\n\t}\n\n\t/**\n\t * Returns `None` if the option is `None`, otherwise calls `predicate` with the wrapped value and returns:\n\t * - `Some<T>` if predicate returns true, and\n\t * - `None` if predicate returns false.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).filter(x => x > 40) // => Some(42)\n\t * Some(42).filter(x => x > 50) // => None\n\t * None.filter(x => x > 40) // => None\n\t * ```\n\t */\n\tfilter(predicate: (value: T) => boolean): Option<T> {\n\t\treturn (this.kind && predicate(this.wrapped as T) ? this : None) as Option<T>;\n\t}\n\n\t/**\n\t * Returns the option if it contains a value, otherwise returns `other`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).or(Some(54)) // => Some(42)\n\t * Some(42).or(None) // => Some(42)\n\t * None.or(Some(54)) // => Some(54)\n\t * None.or(None) // => None\n\t * ```\n\t */\n\tor<U>(other: Option<U>): Option<T | U> {\n\t\treturn (this.kind ? this : other) as Option<T | U>;\n\t}\n\n\t/**\n\t * Returns the option if it contains a value, otherwise calls `f` and returns the result.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).orElse(() => Some(54)) // => Some(42)\n\t * Some(42).orElse(() => None) // => Some(42)\n\t * None.orElse(() => Some(54)) // => Some(54)\n\t * None.orElse(() => None) // => None\n\t * ```\n\t */\n\torElse<U>(f: () => Option<U>): Option<T | U> {\n\t\treturn (this.kind ? this : f()) as Option<T | U>;\n\t}\n\n\torElseAsync<U>(f: () => Promise<Option<U>> | AsyncOption<U>): AsyncOption<T | U> {\n\t\treturn new AsyncOption(\n\t\t\t(this.kind ? Promise.resolve(this as unknown as Some<T>) : f()) as Promise<\n\t\t\t\tOption<T | U>\n\t\t\t>,\n\t\t);\n\t}\n\n\t/**\n\t * Returns `Some` if exactly one of `this` and `other` is `Some`, otherwise returns `None`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(42).xor(Some(54)) // => None\n\t * Some(42).xor(None) // => Some(42)\n\t * None.xor(Some(54)) // => Some(54)\n\t * None.xor(None) // => None\n\t * ```\n\t */\n\txor<U>(other: Option<U>): Option<T | U> {\n\t\treturn (this.kind ? (other.kind ? None : this) : other) as Option<T | U>;\n\t}\n\n\t/**\n\t * Converts from `Option<Option<U>>` to `Option<U>`.\n\t *\n\t * **Examples**\n\t *\n\t * ```\n\t * Some(Some(42)).flatten() // => Some(42)\n\t * Some(None).flatten() // => None\n\t * ```\n\t */\n\tflatten<U>(this: Option<Option<U>>): Option<U> {\n\t\treturn this.kind ? (this.wrapped as Option<U>) : None;\n\t}\n\n\ttoObject(): {isSome: true; value: T} | {isSome: false; value: null} {\n\t\treturn this.kind ? {isSome: true, value: this.wrapped as T} : {isSome: false, value: null};\n\t}\n\n\ttoString(): `Some(${string})` | \"None\" {\n\t\treturn this.kind ? `Some(${String(this.wrapped)})` : \"None\";\n\t}\n\n\t[symbols.inspect](): ReturnType<OptionImpl<T>[\"toString\"]> {\n\t\treturn this.toString();\n\t}\n}\n\nexport interface Some<T> extends OptionImpl<T> {\n\t[symbols.tag]: \"Some\";\n\t/**\n\t * Returns the contained `Some` value, if it exists.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tvalue(): T;\n\tunwrap(): T;\n\texpect(message: string): T;\n}\n\n/**\n * Some value of type `T`.\n */\nexport function Some<T>(value: T): Some<T> {\n\treturn new OptionImpl(true, value) as Some<T>;\n}\n\nexport interface None<T = never> extends OptionImpl<T> {\n\t[symbols.tag]: \"None\";\n\t/**\n\t * Returns the contained `Some` value, if it exists.\n\t *\n\t * @deprecated Use `unwrap()` instead.\n\t */\n\tvalue(): undefined;\n\tunwrap(): undefined;\n\texpect(message: string): never;\n}\n\n/**\n * No value.\n */\nexport const None = new OptionImpl(false) as None;\n\n/**\n * `Option` represents an optional value: every `Option` is either `Some` and contains a value, or `None`, and does not.\n */\nexport type Option<T> = Some<T> | None<T>;\n\nexport namespace Option {\n\t/**\n\t * Creates an `Option` from a nullish value.\n\t */\n\texport function fromNullish<T>(value: T | undefined | null): Option<T> {\n\t\treturn value == null ? None : Some(value);\n\t}\n\n\t/**\n\t * @deprecated Use `Option.fromNullish()` instead.\n\t */\n\texport const from = fromNullish;\n}\n","import {AsyncResult} from \"./async_result\";\nimport {Panic} from \"./error\";\nimport {type Result, type Err} from \"./result\";\nimport {InferErr, InferOk} from \"./util\";\n\n/**\n * Creates a scope where you can use `yield*` and `try()` together to unwrap or propagate errors from a `Result`.\n *\n * This is trying to emulate Rust's `try_blocks` and `?` operator.\n *\n * **Note:** Only works with synchronous blocks, if you need to use asynchronous operations, use `tryBlockAsync` instead.\n *\n * **Example:**\n *\n * ```ts\n * const block = tryBlock(function* () {\n * \tconst x = yield* Ok(1).try();\n * \tconst y = yield* Ok(1).try();\n * \treturn Ok(x + y);\n * });\n *\n * assert.equal(block.unwrap(), 2);\n * ```\n */\nexport function tryBlock<Y extends Err<any, never>, R extends Result<any, any>>(\n\tscope: () => Generator<Y, R>,\n): Result<InferOk<R>, InferErr<Y> | InferErr<R>> {\n\treturn scope().next().value;\n}\n\n/**\n * Creates an async scope where you can use `yield*` and `try()` together to unwrap or propagate errors from a `Result` or `AsyncResult`.\n *\n * This is trying to emulate Rust's `try_blocks` and `?` operator.\n *\n * Any thrown `Error` will be wrapped in a `Panic`.\n *\n * **Example:**\n *\n * ```ts\n * const asyncNumber = new AsyncResult(Promise.resolve(Ok(1)));\n *\n * const block = await tryBlockAsync(async function* () {\n * \tconst x = yield* Ok(1).try();\n * \tconst y = yield* asyncNumber.try();\n * \treturn Ok(x + y);\n * });\n *\n * assert.equal(block.unwrap(), 2);\n * ```\n */\nexport function tryBlockAsync<Y extends Err<any, never>, R extends Result<any, any>>(\n\tscope: () => AsyncGenerator<Y, R>,\n): AsyncResult<InferOk<R>, InferErr<Y> | InferErr<R>> {\n\tconst next = scope().next();\n\treturn new AsyncResult(\n\t\tnext\n\t\t\t.then((result) => result.value)\n\t\t\t.catch((error) => {\n\t\t\t\tif (error instanceof Panic) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tthrow new Panic(\n\t\t\t\t\t\"Unexpected rejected promise in `tryBlockAsync`: resolve the promise safely instead of throwing\",\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}),\n\t);\n}\n","import {ResultImpl, type Ok, type Err, type Result} from \"./result\";\nimport {OptionImpl, type Option} from \"./option\";\nimport {AsyncResult} from \"./async_result\";\nimport {AsyncOption} from \"./async_option\";\n\nexport type InferOk<T> = T extends Ok<infer O, any> ? O : never;\n\nexport type InferErr<T> = T extends Err<infer E, any> ? E : never;\n\nexport type ExtractOk<T> = T extends Ok<infer O, any>\n\t? O\n\t: T extends Result<infer O, infer _>\n\t? O\n\t: never;\n\nexport type ExtractErr<T> = T extends Err<infer E, any>\n\t? E\n\t: T extends Result<infer _, infer E>\n\t? E\n\t: never;\n\nexport function isResult<T, E>(value: unknown): value is Result<T, E> {\n\treturn value instanceof ResultImpl;\n}\n\nexport function isAsyncResult<T, E>(value: unknown): value is AsyncResult<T, E> {\n\treturn value instanceof AsyncResult;\n}\n\nexport function isOption<T>(value: unknown): value is Option<T> {\n\treturn value instanceof OptionImpl;\n}\n\nexport function isAsyncOption<T>(value: unknown): value is AsyncOption<T> {\n\treturn value instanceof AsyncOption;\n}\n"]}