renovate 43.60.1 → 43.60.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/util/result.js.map +1 -1
- package/package.json +2 -6
- package/renovate-schema.json +2 -2
package/dist/util/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","names":[],"sources":["../../lib/util/result.ts"],"sourcesContent":["import type {\n SafeParseReturnType,\n input as ZodInput,\n output as ZodOutput,\n ZodType,\n} from 'zod/v3';\nimport { NEVER, ZodError, ZodIssueCode } from 'zod/v3';\nimport { logger } from '../logger/index.ts';\nimport type { Nullish } from '../types/index.ts';\n\ntype Val = NonNullable<unknown>;\n\ninterface Ok<T extends Val> {\n readonly ok: true;\n readonly val: T;\n readonly err?: never;\n}\n\ninterface Err<E extends Val> {\n readonly ok: false;\n readonly err: E;\n readonly val?: never;\n\n /**\n * Internal flag to indicate that the error was thrown during `.transform()`\n * and will be re-thrown on `.unwrap()`.\n */\n readonly _uncaught?: true;\n}\n\ntype Res<T extends Val, E extends Val> = Ok<T> | Err<E>;\n\nfunction isZodResult<Input, Output extends Val>(\n input: unknown,\n): input is SafeParseReturnType<Input, Output> {\n if (\n typeof input !== 'object' ||\n input === null ||\n Object.keys(input).length !== 2 ||\n !('success' in input) ||\n typeof input.success !== 'boolean'\n ) {\n return false;\n }\n\n if (input.success) {\n return (\n 'data' in input &&\n typeof input.data !== 'undefined' &&\n input.data !== null\n );\n } else {\n return 'error' in input && input.error instanceof ZodError;\n }\n}\n\nfunction fromZodResult<ZodInput, ZodOutput extends Val>(\n input: SafeParseReturnType<ZodInput, ZodOutput>,\n): Result<ZodOutput, ZodError<ZodInput>> {\n return input.success ? Result.ok(input.data) : Result.err(input.error);\n}\n\n/**\n * All non-nullable values that also are not Promises nor Zod results.\n * It's useful for restricting Zod results to not return `null` or `undefined`.\n */\ntype RawValue<T extends Val> = Exclude<\n T,\n SafeParseReturnType<unknown, T> | Promise<unknown>\n>;\n\nfunction fromNullable<\n T extends Val,\n ErrForNull extends Val,\n ErrForUndefined extends Val,\n>(\n input: Nullish<T>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n): Result<T, ErrForNull | ErrForUndefined> {\n if (input === null) {\n return Result.err(errForNull);\n }\n\n if (input === undefined) {\n return Result.err(errForUndefined);\n }\n\n return Result.ok(input);\n}\n\n/**\n * Class for representing a result that can fail.\n *\n * The mental model:\n * - `.wrap()` and `.wrapNullable()` are sinks\n * - `.transform()` are pipes which can be chained\n * - `.unwrap()` is the point of consumption\n */\nexport class Result<T extends Val, E extends Val = Error> {\n private readonly res: Res<T, E>;\n\n private constructor(res: Res<T, E>) {\n this.res = res;\n }\n\n static ok<T extends Val>(val: T): Result<T, never> {\n return new Result({ ok: true, val });\n }\n\n static err<E extends Val>(err: E): Result<never, E> {\n return new Result({ ok: false, err });\n }\n\n static _uncaught<E extends Val>(err: E): Result<never, E> {\n return new Result({ ok: false, err, _uncaught: true });\n }\n\n /**\n * Wrap a callback or promise in a Result in such a way that any thrown errors\n * are caught and wrapped with `Result.err()` (and hence never re-thrown).\n *\n * In case of a promise, the `AsyncResult` is returned.\n * Use `.unwrap()` to get the `Promise<Result<T, E>>` from `AsyncResult`.\n *\n * ```ts\n *\n * // SYNC\n * const parse = (json: string) => Result.wrap(() => JSON.parse(json));\n *\n * const { val, err } = parse('{\"foo\": \"bar\"}').unwrap();\n * expect(val).toEqual({ foo: 'bar' });\n * expect(err).toBeUndefined();\n *\n * const { val, err } = parse('!!!').unwrap();\n * expect(val).toBeUndefined();\n * expect(err).toBeInstanceOf(SyntaxError);\n *\n * // ASYNC\n * const request = (url: string) => Result.wrap(http.get(url));\n *\n * const { val, err } = await request('https://example.com').unwrap();\n * expect(val).toBeString();\n * expect(err).toBeUndefined();\n *\n * ```\n */\n static wrap<T extends Val, Input = unknown>(\n zodResult: SafeParseReturnType<Input, T>,\n ): Result<T, ZodError<Input>>;\n static wrap<T extends Val, E extends Val = Error>(\n callback: () => RawValue<T>,\n ): Result<T, E>;\n static wrap<T extends Val, E extends Val = Error>(\n callback: () => Promise<RawValue<T>>,\n ): AsyncResult<T, E>;\n static wrap<T extends Val, E extends Val = Error, EE extends Val = never>(\n promise: Promise<Result<T, EE>>,\n ): AsyncResult<T, E | EE>;\n static wrap<T extends Val, E extends Val = Error>(\n promise: Promise<RawValue<T>>,\n ): AsyncResult<T, E>;\n static wrap<\n T extends Val,\n E extends Val = Error,\n EE extends Val = never,\n Input = unknown,\n >(\n input:\n | SafeParseReturnType<Input, T>\n | (() => RawValue<T>)\n | (() => Promise<RawValue<T>>)\n | Promise<Result<T, EE>>\n | Promise<RawValue<T>>,\n ): Result<T, ZodError<Input>> | Result<T, E | EE> | AsyncResult<T, E | EE> {\n if (isZodResult<Input, T>(input)) {\n return fromZodResult(input);\n }\n\n if (input instanceof Promise) {\n return AsyncResult.wrap(input as never);\n }\n\n try {\n const result = input();\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result);\n }\n\n return Result.ok(result);\n } catch (error) {\n return Result.err(error);\n }\n }\n\n /**\n * Similar to `Result.wrap()`, but helps to undo the billion dollar mistake by\n * replacing `null` or `undefined` with an error of provided type.\n *\n * Errors thrown inside the callback or promise are caught and wrapped with `Result.err()`,\n * hence never re-thrown.\n *\n * Since functions and promises returning nullable can't be wrapped with `Result.wrap()`\n * because `val` is constrained by being `NonNullable`, `null` and `undefined`\n * must be converted to some sort of `err` value.\n *\n * This method does exactly this, i.g. it is the feature-rich shorthand for:\n *\n * ```ts\n * const { val, err } = Result.wrap(() => {\n * const result = callback();\n * return result === null || result === undefined\n * ? Result.err('oops')\n * : Result.ok(result);\n * }).unwrap();\n * ```\n *\n * In case of a promise, the `AsyncResult` is returned.\n *\n * ```ts\n *\n * // SYNC\n * const getHostname = (url: string) =>\n * Result.wrapNullable(\n * () => parseUrl(url)?.hostname,\n * 'invalid-url' as const\n * );\n * const { val, err } = getHostname('foobar').unwrap();\n * expect(val).toBeUndefined();\n * expect(err).toBe('invalid-url');\n *\n * // ASYNC\n * const { val, err } = await Result.wrapNullable(\n * readLocalFile('yarn.lock'),\n * 'file-read-error' as const\n * ).unwrap();\n *\n * ```\n */\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNullable extends Val = Error,\n >(\n callback: () => Nullish<T>,\n errForNullable: ErrForNullable,\n ): Result<T, E | ErrForNullable>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n callback: () => Nullish<T>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n ): Result<T, E | ErrForNull | ErrForUndefined>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNullable extends Val = Error,\n >(\n promise: Promise<Nullish<T>>,\n errForNullable: ErrForNullable,\n ): AsyncResult<T, E | ErrForNullable>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n promise: Promise<Nullish<T>>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n ): AsyncResult<T, E | ErrForNull | ErrForUndefined>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNullable extends Val = Error,\n >(\n value: Nullish<T>,\n errForNullable: ErrForNullable,\n ): Result<T, E | ErrForNullable>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n value: Nullish<T>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n ): Result<T, E | ErrForNull | ErrForUndefined>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n input: (() => Nullish<T>) | Promise<Nullish<T>> | Nullish<T>,\n arg2: ErrForNull,\n arg3?: ErrForUndefined,\n ):\n | Result<T, E | ErrForNull | ErrForUndefined>\n | AsyncResult<T, E | ErrForNull | ErrForUndefined> {\n const errForNull = arg2;\n const errForUndefined = arg3 ?? arg2;\n\n if (input instanceof Promise) {\n return AsyncResult.wrapNullable(input, errForNull, errForUndefined);\n }\n\n if (input instanceof Function) {\n try {\n const result = input();\n return fromNullable(result, errForNull, errForUndefined);\n } catch (error) {\n return Result.err(error);\n }\n }\n\n return fromNullable(input, errForNull, errForUndefined);\n }\n\n /**\n * Returns a discriminated union for type-safe consumption of the result.\n * When error was uncaught during transformation, it's being re-thrown here.\n *\n * ```ts\n *\n * const { val, err } = Result.ok('foo').unwrap();\n * expect(val).toBe('foo');\n * expect(err).toBeUndefined();\n *\n * ```\n */\n unwrap(): Res<T, E> {\n if (this.res.ok) {\n return this.res;\n }\n\n if (this.res._uncaught) {\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n return this.res;\n }\n\n /**\n * Returns a success value or a fallback value.\n * When error was uncaught during transformation, it's being re-thrown here.\n *\n * ```ts\n *\n * const value = Result.err('bar').unwrapOr('foo');\n * expect(val).toBe('foo');\n *\n * ```\n */\n unwrapOr(fallback: T): T {\n if (this.res.ok) {\n return this.res.val;\n }\n\n if (this.res._uncaught) {\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n return fallback;\n }\n\n /**\n * Returns the ok-value or throw the error.\n */\n unwrapOrThrow(): T {\n if (this.res.ok) {\n return this.res.val;\n }\n\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n /**\n * Returns the ok-value or `null`.\n * When error was uncaught during transformation, it's being re-thrown here.\n */\n unwrapOrNull(): T | null {\n if (this.res.ok) {\n return this.res.val;\n }\n\n if (this.res._uncaught) {\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n return null;\n }\n\n /**\n * Transforms the ok-value, sync or async way.\n *\n * Transform functions SHOULD NOT throw.\n * Uncaught errors are logged and wrapped to `Result._uncaught()`,\n * which leads to re-throwing them in `unwrap()`.\n *\n * Zod `.safeParse()` results are converted automatically.\n *\n * ```ts\n *\n * // SYNC\n * const { val, err } = Result.ok('foo')\n * .transform((x) => x.length)\n * .unwrap();\n * expect(val).toBe(3);\n *\n * // ASYNC\n * const { val, err } = await Result.wrap(\n * http.getJson('https://api.example.com/data.json')\n * )\n * .transform(({ body }) => body)\n * .unwrap();\n *\n * ```\n */\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Result<U, E | EE>,\n ): Result<U, E | EE>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => AsyncResult<U, E | EE>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => SafeParseReturnType<Input, NonNullable<U>>,\n ): Result<U, E | ZodError<Input>>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => Promise<SafeParseReturnType<Input, NonNullable<U>>>,\n ): AsyncResult<U, E | ZodError<Input>>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Promise<Result<U, E | EE>>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val>(\n fn: (value: T) => Promise<RawValue<U>>,\n ): AsyncResult<U, E>;\n transform<U extends Val>(fn: (value: T) => RawValue<U>): Result<U, E>;\n transform<U extends Val, EE extends Val, Input = unknown>(\n fn: (\n value: T,\n ) =>\n | Result<U, E | EE>\n | AsyncResult<U, E | EE>\n | SafeParseReturnType<Input, NonNullable<U>>\n | Promise<SafeParseReturnType<Input, NonNullable<U>>>\n | Promise<Result<U, E | EE>>\n | Promise<RawValue<U>>\n | RawValue<U>,\n ):\n | Result<U, E | EE | ZodError<Input>>\n | AsyncResult<U, E | EE | ZodError<Input>> {\n if (!this.res.ok) {\n return Result.err(this.res.err);\n }\n\n try {\n const result = fn(this.res.val);\n\n if (result instanceof Result) {\n return result;\n }\n\n if (result instanceof AsyncResult) {\n return result;\n }\n\n if (isZodResult<Input, U>(result)) {\n return fromZodResult(result);\n }\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result, (err) => {\n logger.warn({ err }, 'Result: unhandled async transform error');\n return Result._uncaught(err);\n });\n }\n\n return Result.ok(result);\n } catch (err) {\n logger.warn({ err }, 'Result: unhandled transform error');\n return Result._uncaught(err);\n }\n }\n\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => Result<U, EE>,\n ): Result<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => AsyncResult<U, EE>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => Promise<Result<U, EE>>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => Result<U, EE> | AsyncResult<U, EE> | Promise<Result<U, EE>>,\n ): Result<T | U, EE> | AsyncResult<T | U, EE> {\n if (this.res.ok) {\n return this as never;\n }\n\n if (this.res._uncaught) {\n return this as never;\n }\n\n try {\n const result = fn(this.res.err);\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result, (err) => {\n logger.warn(\n { err },\n 'Result: unexpected error in async catch handler',\n );\n return Result._uncaught(err);\n });\n }\n\n return result;\n } catch (err) {\n logger.warn({ err }, 'Result: unexpected error in catch handler');\n return Result._uncaught(err);\n }\n }\n\n /**\n * Given a `schema` and `input`, returns a `Result` with `val` being the parsed value.\n * Additionally, `null` and `undefined` values are converted into Zod error.\n */\n static parse<Schema extends ZodType<any, any, any>>(\n input: unknown,\n schema: Schema,\n ): Result<NonNullable<ZodOutput<Schema>>, ZodError<ZodInput<Schema>>> {\n const parseResult = schema\n .transform((result, ctx): NonNullable<ZodOutput<Schema>> => {\n if (result === undefined) {\n ctx.addIssue({\n code: ZodIssueCode.custom,\n message: `Result can't accept nullish values, but input was parsed by Zod schema to undefined`,\n });\n return NEVER;\n }\n\n if (result === null) {\n ctx.addIssue({\n code: ZodIssueCode.custom,\n message: `Result can't accept nullish values, but input was parsed by Zod schema to null`,\n });\n return NEVER;\n }\n\n return result;\n })\n .safeParse(input);\n\n return fromZodResult(parseResult);\n }\n\n /**\n * Given a `schema`, returns a `Result` with `val` being the parsed value.\n * Additionally, `null` and `undefined` values are converted into Zod error.\n */\n parse<Schema extends ZodType<any, any, any>>(\n schema: Schema,\n ): Result<NonNullable<ZodOutput<Schema>>, E | ZodError<ZodInput<Schema>>> {\n if (this.res.ok) {\n return Result.parse(this.res.val, schema);\n }\n\n const err = this.res.err;\n\n if (this.res._uncaught) {\n return Result._uncaught(err);\n }\n\n return Result.err(err);\n }\n\n /**\n * Call `fn` on the `val` if the result is ok.\n */\n onValue(fn: (value: T) => void): Result<T, E> {\n if (this.res.ok) {\n try {\n fn(this.res.val);\n } catch (err) {\n return Result._uncaught(err);\n }\n }\n\n return this;\n }\n\n /**\n * Call `fn` on the `err` if the result is err.\n */\n onError(fn: (err: E) => void): Result<T, E> {\n if (!this.res.ok) {\n try {\n fn(this.res.err);\n } catch (err) {\n return Result._uncaught(err);\n }\n }\n\n return this;\n }\n}\n\n/**\n * This class is being used when `Result` methods encounter async code.\n * It isn't meant to be used directly, but exported for usage in type annotations.\n *\n * All the methods resemble `Result` methods, but work asynchronously.\n */\nexport class AsyncResult<T extends Val, E extends Val> implements PromiseLike<\n Result<T, E>\n> {\n private asyncResult: Promise<Result<T, E>>;\n\n private constructor(asyncResult: Promise<Result<T, E>>) {\n this.asyncResult = asyncResult;\n }\n\n then<TResult1 = Result<T, E>>(\n onfulfilled?:\n | ((value: Result<T, E>) => TResult1 | PromiseLike<TResult1>)\n | null,\n ): PromiseLike<TResult1> {\n return this.asyncResult.then(onfulfilled);\n }\n\n static ok<T extends Val>(val: T): AsyncResult<T, never> {\n return new AsyncResult(Promise.resolve(Result.ok(val)));\n }\n\n static err<E extends Val>(err: NonNullable<E>): AsyncResult<never, E> {\n // eslint-disable-next-line promise/no-promise-in-callback\n return new AsyncResult(Promise.resolve(Result.err(err)));\n }\n\n static wrap<\n T extends Val,\n E extends Val = Error,\n EE extends Val = never,\n Input = unknown,\n >(\n promise:\n | Promise<SafeParseReturnType<Input, T>>\n | Promise<Result<T, EE>>\n | Promise<RawValue<T>>,\n onErr?: (err: NonNullable<E>) => Result<T, E>,\n ): AsyncResult<T, E | EE> {\n return new AsyncResult(\n promise\n .then((value) => {\n if (value instanceof Result) {\n return value;\n }\n\n if (isZodResult<Input, T>(value)) {\n return fromZodResult(value);\n }\n\n return Result.ok(value);\n })\n .catch((err) => {\n if (onErr) {\n return onErr(err);\n }\n return Result.err(err);\n }),\n );\n }\n\n static wrapNullable<\n T extends Val,\n E extends Val,\n ErrForNull extends Val,\n ErrForUndefined extends Val,\n >(\n promise: Promise<Nullish<T>>,\n errForNull: NonNullable<ErrForNull>,\n errForUndefined: NonNullable<ErrForUndefined>,\n ): AsyncResult<T, E | ErrForNull | ErrForUndefined> {\n return new AsyncResult(\n promise\n .then((value) => fromNullable(value, errForNull, errForUndefined))\n .catch((err) => Result.err(err)),\n );\n }\n\n /**\n * Returns a discriminated union for type-safe consumption of the result.\n *\n * ```ts\n *\n * const { val, err } = await Result.wrap(readFile('foo.txt')).unwrap();\n * expect(val).toBe('foo');\n * expect(err).toBeUndefined();\n *\n * ```\n */\n unwrap(): Promise<Res<T, E>> {\n return this.asyncResult.then<Res<T, E>>((res) => res.unwrap());\n }\n\n /**\n * Returns a success value or a fallback value.\n *\n * ```ts\n *\n * const val = await Result.wrap(readFile('foo.txt')).unwrapOr('bar');\n * expect(val).toBe('bar');\n * expect(err).toBeUndefined();\n *\n * ```\n */\n unwrapOr(fallback: T): Promise<T> {\n return this.asyncResult.then<T>((res) => res.unwrapOr(fallback));\n }\n\n /**\n * Returns the ok-value or throw the error.\n */\n async unwrapOrThrow(): Promise<T> {\n const result = await this.asyncResult;\n return result.unwrapOrThrow();\n }\n\n /**\n * Returns the ok-value or `null`.\n */\n unwrapOrNull(): Promise<T | null> {\n return this.asyncResult.then<T | null>((res) => res.unwrapOrNull());\n }\n\n /**\n * Transforms the ok-value, sync or async way.\n *\n * Transform functions SHOULD NOT throw.\n * Uncaught errors are logged and wrapped to `Result._uncaught()`,\n * which leads to re-throwing them in `unwrap()`.\n *\n * Zod `.safeParse()` results are converted automatically.\n *\n * ```ts\n *\n * const { val, err } = await Result.wrap(\n * http.getJson('https://api.example.com/data.json')\n * )\n * .transform(({ body }) => body)\n * .unwrap();\n *\n * ```\n */\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Result<U, E | EE>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => AsyncResult<U, E | EE>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => SafeParseReturnType<Input, NonNullable<U>>,\n ): AsyncResult<U, E | ZodError<Input>>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => Promise<SafeParseReturnType<Input, NonNullable<U>>>,\n ): AsyncResult<U, E | ZodError<Input>>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Promise<Result<U, E | EE>>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val>(\n fn: (value: T) => Promise<RawValue<U>>,\n ): AsyncResult<U, E>;\n transform<U extends Val>(fn: (value: T) => RawValue<U>): AsyncResult<U, E>;\n transform<U extends Val, EE extends Val, Input = unknown>(\n fn: (\n value: T,\n ) =>\n | Result<U, E | EE>\n | AsyncResult<U, E | EE>\n | SafeParseReturnType<Input, NonNullable<U>>\n | Promise<SafeParseReturnType<Input, NonNullable<U>>>\n | Promise<Result<U, E | EE>>\n | Promise<RawValue<U>>\n | RawValue<U>,\n ): AsyncResult<U, E | EE | ZodError<Input>> {\n return new AsyncResult(\n this.asyncResult\n .then((oldResult) => {\n const { ok, val: value, err: error } = oldResult.unwrap();\n if (!ok) {\n return Result.err(error);\n }\n\n try {\n const result = fn(value);\n\n if (result instanceof Result) {\n return result;\n }\n\n if (result instanceof AsyncResult) {\n return result;\n }\n\n if (isZodResult<Input, U>(result)) {\n return fromZodResult(result);\n }\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result, (err) => {\n logger.warn(\n { err },\n 'AsyncResult: unhandled async transform error',\n );\n return Result._uncaught(err);\n });\n }\n\n return Result.ok(result);\n } catch (err) {\n logger.warn({ err }, 'AsyncResult: unhandled transform error');\n return Result._uncaught(err);\n }\n })\n .catch((err) => {\n // Happens when `.unwrap()` of `oldResult` throws\n return Result._uncaught(err);\n }),\n );\n }\n\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: NonNullable<E>) => Result<U, EE>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: NonNullable<E>) => AsyncResult<U, EE>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: NonNullable<E>) => Promise<Result<U, EE>>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (\n err: NonNullable<E>,\n ) => Result<U, EE> | AsyncResult<U, EE> | Promise<Result<U, EE>>,\n ): AsyncResult<T | U, EE> {\n const caughtAsyncResult: Promise<Result<T, EE>> = this.asyncResult.then(\n (result) =>\n // eslint-disable-next-line promise/no-nesting\n result.catch(fn as never),\n );\n return AsyncResult.wrap(caughtAsyncResult);\n }\n\n /**\n * Given a `schema`, returns a `Result` with `val` being the parsed value.\n * Additionally, `null` and `undefined` values are converted into Zod error.\n */\n parse<Schema extends ZodType<any, any, any>>(\n schema: Schema,\n ): AsyncResult<\n NonNullable<ZodOutput<Schema>>,\n E | ZodError<ZodInput<Schema>>\n > {\n return new AsyncResult(\n this.asyncResult\n .then((oldResult) => oldResult.parse(schema))\n .catch(\n /* istanbul ignore next: should never happen */\n (err) => Result._uncaught(err),\n ),\n );\n }\n\n onValue(fn: (value: T) => void): AsyncResult<T, E> {\n return new AsyncResult(\n this.asyncResult\n .then((result) => result.onValue(fn))\n .catch(\n /* istanbul ignore next: should never happen */\n (err) => Result._uncaught(err),\n ),\n );\n }\n\n onError(fn: (err: E) => void): AsyncResult<T, E> {\n return new AsyncResult(\n this.asyncResult\n .then((result) => result.onError(fn))\n .catch(\n /* istanbul ignore next: should never happen */\n (err) => Result._uncaught(err),\n ),\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"result.js","names":[],"sources":["../../lib/util/result.ts"],"sourcesContent":["import type {\n SafeParseReturnType,\n input as ZodInput,\n output as ZodOutput,\n ZodType,\n} from 'zod/v3';\nimport { NEVER, ZodError, ZodIssueCode } from 'zod/v3';\nimport { logger } from '../logger/index.ts';\nimport type { Nullish } from '../types/index.ts';\n\ntype Val = NonNullable<unknown>;\n\ninterface Ok<T extends Val> {\n readonly ok: true;\n readonly val: T;\n readonly err?: never;\n}\n\ninterface Err<E extends Val> {\n readonly ok: false;\n readonly err: E;\n readonly val?: never;\n\n /**\n * Internal flag to indicate that the error was thrown during `.transform()`\n * and will be re-thrown on `.unwrap()`.\n */\n readonly _uncaught?: true;\n}\n\ntype Res<T extends Val, E extends Val> = Ok<T> | Err<E>;\n\nfunction isZodResult<Input, Output extends Val>(\n input: unknown,\n): input is SafeParseReturnType<Input, Output> {\n if (\n typeof input !== 'object' ||\n input === null ||\n Object.keys(input).length !== 2 ||\n !('success' in input) ||\n typeof input.success !== 'boolean'\n ) {\n return false;\n }\n\n if (input.success) {\n return (\n 'data' in input &&\n typeof input.data !== 'undefined' &&\n input.data !== null\n );\n } else {\n return 'error' in input && input.error instanceof ZodError;\n }\n}\n\nfunction fromZodResult<ZodInput, ZodOutput extends Val>(\n input: SafeParseReturnType<ZodInput, ZodOutput>,\n): Result<ZodOutput, ZodError<ZodInput>> {\n return input.success ? Result.ok(input.data) : Result.err(input.error);\n}\n\n/**\n * All non-nullable values that also are not Promises nor Zod results.\n * It's useful for restricting Zod results to not return `null` or `undefined`.\n */\ntype RawValue<T extends Val> = Exclude<\n T,\n SafeParseReturnType<unknown, T> | Promise<unknown>\n>;\n\nfunction fromNullable<\n T extends Val,\n ErrForNull extends Val,\n ErrForUndefined extends Val,\n>(\n input: Nullish<T>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n): Result<T, ErrForNull | ErrForUndefined> {\n if (input === null) {\n return Result.err(errForNull);\n }\n\n if (input === undefined) {\n return Result.err(errForUndefined);\n }\n\n return Result.ok(input);\n}\n\n/**\n * Class for representing a result that can fail.\n *\n * The mental model:\n * - `.wrap()` and `.wrapNullable()` are sinks\n * - `.transform()` are pipes which can be chained\n * - `.unwrap()` is the point of consumption\n */\nexport class Result<T extends Val, E extends Val = Error> {\n private readonly res: Res<T, E>;\n\n private constructor(res: Res<T, E>) {\n this.res = res;\n }\n\n static ok<T extends Val>(val: T): Result<T, never> {\n return new Result({ ok: true, val });\n }\n\n static err<E extends Val>(err: E): Result<never, E> {\n return new Result({ ok: false, err });\n }\n\n static _uncaught<E extends Val>(err: E): Result<never, E> {\n return new Result({ ok: false, err, _uncaught: true });\n }\n\n /**\n * Wrap a callback or promise in a Result in such a way that any thrown errors\n * are caught and wrapped with `Result.err()` (and hence never re-thrown).\n *\n * In case of a promise, the `AsyncResult` is returned.\n * Use `.unwrap()` to get the `Promise<Result<T, E>>` from `AsyncResult`.\n *\n * ```ts\n *\n * // SYNC\n * const parse = (json: string) => Result.wrap(() => JSON.parse(json));\n *\n * const { val, err } = parse('{\"foo\": \"bar\"}').unwrap();\n * expect(val).toEqual({ foo: 'bar' });\n * expect(err).toBeUndefined();\n *\n * const { val, err } = parse('!!!').unwrap();\n * expect(val).toBeUndefined();\n * expect(err).toBeInstanceOf(SyntaxError);\n *\n * // ASYNC\n * const request = (url: string) => Result.wrap(http.get(url));\n *\n * const { val, err } = await request('https://example.com').unwrap();\n * expect(val).toBeString();\n * expect(err).toBeUndefined();\n *\n * ```\n */\n static wrap<T extends Val, Input = unknown>(\n zodResult: SafeParseReturnType<Input, T>,\n ): Result<T, ZodError<Input>>;\n static wrap<T extends Val, E extends Val = Error>(\n callback: () => RawValue<T>,\n ): Result<T, E>;\n static wrap<T extends Val, E extends Val = Error>(\n callback: () => Promise<RawValue<T>>,\n ): AsyncResult<T, E>;\n static wrap<T extends Val, E extends Val = Error, EE extends Val = never>(\n promise: Promise<Result<T, EE>>,\n ): AsyncResult<T, E | EE>;\n static wrap<T extends Val, E extends Val = Error>(\n promise: Promise<RawValue<T>>,\n ): AsyncResult<T, E>;\n static wrap<\n T extends Val,\n E extends Val = Error,\n EE extends Val = never,\n Input = unknown,\n >(\n input:\n | SafeParseReturnType<Input, T>\n | (() => RawValue<T>)\n | (() => Promise<RawValue<T>>)\n | Promise<Result<T, EE>>\n | Promise<RawValue<T>>,\n ): Result<T, ZodError<Input>> | Result<T, E | EE> | AsyncResult<T, E | EE> {\n if (isZodResult<Input, T>(input)) {\n return fromZodResult(input);\n }\n\n if (input instanceof Promise) {\n return AsyncResult.wrap(input as never);\n }\n\n try {\n const result = input();\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result);\n }\n\n return Result.ok(result);\n } catch (error) {\n return Result.err(error);\n }\n }\n\n /**\n * Similar to `Result.wrap()`, but helps to undo the billion dollar mistake by\n * replacing `null` or `undefined` with an error of provided type.\n *\n * Errors thrown inside the callback or promise are caught and wrapped with `Result.err()`,\n * hence never re-thrown.\n *\n * Since functions and promises returning nullable can't be wrapped with `Result.wrap()`\n * because `val` is constrained by being `NonNullable`, `null` and `undefined`\n * must be converted to some sort of `err` value.\n *\n * This method does exactly this, i.g. it is the feature-rich shorthand for:\n *\n * ```ts\n * const { val, err } = Result.wrap(() => {\n * const result = callback();\n * return result === null || result === undefined\n * ? Result.err('oops')\n * : Result.ok(result);\n * }).unwrap();\n * ```\n *\n * In case of a promise, the `AsyncResult` is returned.\n *\n * ```ts\n *\n * // SYNC\n * const getHostname = (url: string) =>\n * Result.wrapNullable(\n * () => parseUrl(url)?.hostname,\n * 'invalid-url' as const\n * );\n * const { val, err } = getHostname('foobar').unwrap();\n * expect(val).toBeUndefined();\n * expect(err).toBe('invalid-url');\n *\n * // ASYNC\n * const { val, err } = await Result.wrapNullable(\n * readLocalFile('yarn.lock'),\n * 'file-read-error' as const\n * ).unwrap();\n *\n * ```\n */\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNullable extends Val = Error,\n >(\n callback: () => Nullish<T>,\n errForNullable: ErrForNullable,\n ): Result<T, E | ErrForNullable>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n callback: () => Nullish<T>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n ): Result<T, E | ErrForNull | ErrForUndefined>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNullable extends Val = Error,\n >(\n promise: Promise<Nullish<T>>,\n errForNullable: ErrForNullable,\n ): AsyncResult<T, E | ErrForNullable>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n promise: Promise<Nullish<T>>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n ): AsyncResult<T, E | ErrForNull | ErrForUndefined>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNullable extends Val = Error,\n >(\n value: Nullish<T>,\n errForNullable: ErrForNullable,\n ): Result<T, E | ErrForNullable>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n value: Nullish<T>,\n errForNull: ErrForNull,\n errForUndefined: ErrForUndefined,\n ): Result<T, E | ErrForNull | ErrForUndefined>;\n static wrapNullable<\n T extends Val,\n E extends Val = Error,\n ErrForNull extends Val = Error,\n ErrForUndefined extends Val = Error,\n >(\n input: (() => Nullish<T>) | Promise<Nullish<T>> | Nullish<T>,\n arg2: ErrForNull,\n arg3?: ErrForUndefined,\n ):\n | Result<T, E | ErrForNull | ErrForUndefined>\n | AsyncResult<T, E | ErrForNull | ErrForUndefined> {\n const errForNull = arg2;\n const errForUndefined = arg3 ?? arg2;\n\n if (input instanceof Promise) {\n return AsyncResult.wrapNullable(input, errForNull, errForUndefined);\n }\n\n if (input instanceof Function) {\n try {\n const result = input();\n return fromNullable(result, errForNull, errForUndefined);\n } catch (error) {\n return Result.err(error);\n }\n }\n\n return fromNullable(input, errForNull, errForUndefined);\n }\n\n /**\n * Returns a discriminated union for type-safe consumption of the result.\n * When error was uncaught during transformation, it's being re-thrown here.\n *\n * ```ts\n *\n * const { val, err } = Result.ok('foo').unwrap();\n * expect(val).toBe('foo');\n * expect(err).toBeUndefined();\n *\n * ```\n */\n unwrap(): Res<T, E> {\n if (this.res.ok) {\n return this.res;\n }\n\n if (this.res._uncaught) {\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n return this.res;\n }\n\n /**\n * Returns a success value or a fallback value.\n * When error was uncaught during transformation, it's being re-thrown here.\n *\n * ```ts\n *\n * const value = Result.err('bar').unwrapOr('foo');\n * expect(val).toBe('foo');\n *\n * ```\n */\n unwrapOr(fallback: T): T {\n if (this.res.ok) {\n return this.res.val;\n }\n\n if (this.res._uncaught) {\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n return fallback;\n }\n\n /**\n * Returns the ok-value or throw the error.\n */\n unwrapOrThrow(): T {\n if (this.res.ok) {\n return this.res.val;\n }\n\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n /**\n * Returns the ok-value or `null`.\n * When error was uncaught during transformation, it's being re-thrown here.\n */\n unwrapOrNull(): T | null {\n if (this.res.ok) {\n return this.res.val;\n }\n\n if (this.res._uncaught) {\n // TODO: fix, should only allow `Error` type\n // oxlint-disable-next-line typescript/only-throw-error\n throw this.res.err;\n }\n\n return null;\n }\n\n /**\n * Transforms the ok-value, sync or async way.\n *\n * Transform functions SHOULD NOT throw.\n * Uncaught errors are logged and wrapped to `Result._uncaught()`,\n * which leads to re-throwing them in `unwrap()`.\n *\n * Zod `.safeParse()` results are converted automatically.\n *\n * ```ts\n *\n * // SYNC\n * const { val, err } = Result.ok('foo')\n * .transform((x) => x.length)\n * .unwrap();\n * expect(val).toBe(3);\n *\n * // ASYNC\n * const { val, err } = await Result.wrap(\n * http.getJson('https://api.example.com/data.json')\n * )\n * .transform(({ body }) => body)\n * .unwrap();\n *\n * ```\n */\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Result<U, E | EE>,\n ): Result<U, E | EE>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => AsyncResult<U, E | EE>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => SafeParseReturnType<Input, NonNullable<U>>,\n ): Result<U, E | ZodError<Input>>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => Promise<SafeParseReturnType<Input, NonNullable<U>>>,\n ): AsyncResult<U, E | ZodError<Input>>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Promise<Result<U, E | EE>>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val>(\n fn: (value: T) => Promise<RawValue<U>>,\n ): AsyncResult<U, E>;\n transform<U extends Val>(fn: (value: T) => RawValue<U>): Result<U, E>;\n transform<U extends Val, EE extends Val, Input = unknown>(\n fn: (\n value: T,\n ) =>\n | Result<U, E | EE>\n | AsyncResult<U, E | EE>\n | SafeParseReturnType<Input, NonNullable<U>>\n | Promise<SafeParseReturnType<Input, NonNullable<U>>>\n | Promise<Result<U, E | EE>>\n | Promise<RawValue<U>>\n | RawValue<U>,\n ):\n | Result<U, E | EE | ZodError<Input>>\n | AsyncResult<U, E | EE | ZodError<Input>> {\n if (!this.res.ok) {\n return Result.err(this.res.err);\n }\n\n try {\n const result = fn(this.res.val);\n\n if (result instanceof Result) {\n return result;\n }\n\n if (result instanceof AsyncResult) {\n return result;\n }\n\n if (isZodResult<Input, U>(result)) {\n return fromZodResult(result);\n }\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result, (err) => {\n logger.warn({ err }, 'Result: unhandled async transform error');\n return Result._uncaught(err);\n });\n }\n\n return Result.ok(result);\n } catch (err) {\n logger.warn({ err }, 'Result: unhandled transform error');\n return Result._uncaught(err);\n }\n }\n\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => Result<U, EE>,\n ): Result<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => AsyncResult<U, EE>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => Promise<Result<U, EE>>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: E) => Result<U, EE> | AsyncResult<U, EE> | Promise<Result<U, EE>>,\n ): Result<T | U, EE> | AsyncResult<T | U, EE> {\n if (this.res.ok) {\n return this as never;\n }\n\n if (this.res._uncaught) {\n return this as never;\n }\n\n try {\n const result = fn(this.res.err);\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result, (err) => {\n logger.warn(\n { err },\n 'Result: unexpected error in async catch handler',\n );\n return Result._uncaught(err);\n });\n }\n\n return result;\n } catch (err) {\n logger.warn({ err }, 'Result: unexpected error in catch handler');\n return Result._uncaught(err);\n }\n }\n\n /**\n * Given a `schema` and `input`, returns a `Result` with `val` being the parsed value.\n * Additionally, `null` and `undefined` values are converted into Zod error.\n */\n static parse<Schema extends ZodType<any, any, any>>(\n input: unknown,\n schema: Schema,\n ): Result<NonNullable<ZodOutput<Schema>>, ZodError<ZodInput<Schema>>> {\n const parseResult = schema\n .transform((result, ctx): NonNullable<ZodOutput<Schema>> => {\n if (result === undefined) {\n ctx.addIssue({\n code: ZodIssueCode.custom,\n message: `Result can't accept nullish values, but input was parsed by Zod schema to undefined`,\n });\n return NEVER;\n }\n\n if (result === null) {\n ctx.addIssue({\n code: ZodIssueCode.custom,\n message: `Result can't accept nullish values, but input was parsed by Zod schema to null`,\n });\n return NEVER;\n }\n\n return result;\n })\n .safeParse(input);\n\n return fromZodResult(parseResult);\n }\n\n /**\n * Given a `schema`, returns a `Result` with `val` being the parsed value.\n * Additionally, `null` and `undefined` values are converted into Zod error.\n */\n parse<Schema extends ZodType<any, any, any>>(\n schema: Schema,\n ): Result<NonNullable<ZodOutput<Schema>>, E | ZodError<ZodInput<Schema>>> {\n if (this.res.ok) {\n return Result.parse(this.res.val, schema);\n }\n\n const err = this.res.err;\n\n if (this.res._uncaught) {\n return Result._uncaught(err);\n }\n\n return Result.err(err);\n }\n\n /**\n * Call `fn` on the `val` if the result is ok.\n */\n onValue(fn: (value: T) => void): Result<T, E> {\n if (this.res.ok) {\n try {\n fn(this.res.val);\n } catch (err) {\n return Result._uncaught(err);\n }\n }\n\n return this;\n }\n\n /**\n * Call `fn` on the `err` if the result is err.\n */\n onError(fn: (err: E) => void): Result<T, E> {\n if (!this.res.ok) {\n try {\n fn(this.res.err);\n } catch (err) {\n return Result._uncaught(err);\n }\n }\n\n return this;\n }\n}\n\n/**\n * This class is being used when `Result` methods encounter async code.\n * It isn't meant to be used directly, but exported for usage in type annotations.\n *\n * All the methods resemble `Result` methods, but work asynchronously.\n */\nexport class AsyncResult<T extends Val, E extends Val> implements PromiseLike<\n Result<T, E>\n> {\n private asyncResult: Promise<Result<T, E>>;\n\n private constructor(asyncResult: Promise<Result<T, E>>) {\n this.asyncResult = asyncResult;\n }\n\n then<TResult1 = Result<T, E>>(\n onfulfilled?:\n | ((value: Result<T, E>) => TResult1 | PromiseLike<TResult1>)\n | null,\n ): PromiseLike<TResult1> {\n return this.asyncResult.then(onfulfilled);\n }\n\n static ok<T extends Val>(val: T): AsyncResult<T, never> {\n return new AsyncResult(Promise.resolve(Result.ok(val)));\n }\n\n static err<E extends Val>(err: NonNullable<E>): AsyncResult<never, E> {\n return new AsyncResult(Promise.resolve(Result.err(err)));\n }\n\n static wrap<\n T extends Val,\n E extends Val = Error,\n EE extends Val = never,\n Input = unknown,\n >(\n promise:\n | Promise<SafeParseReturnType<Input, T>>\n | Promise<Result<T, EE>>\n | Promise<RawValue<T>>,\n onErr?: (err: NonNullable<E>) => Result<T, E>,\n ): AsyncResult<T, E | EE> {\n return new AsyncResult(\n promise\n .then((value) => {\n if (value instanceof Result) {\n return value;\n }\n\n if (isZodResult<Input, T>(value)) {\n return fromZodResult(value);\n }\n\n return Result.ok(value);\n })\n .catch((err) => {\n if (onErr) {\n return onErr(err);\n }\n return Result.err(err);\n }),\n );\n }\n\n static wrapNullable<\n T extends Val,\n E extends Val,\n ErrForNull extends Val,\n ErrForUndefined extends Val,\n >(\n promise: Promise<Nullish<T>>,\n errForNull: NonNullable<ErrForNull>,\n errForUndefined: NonNullable<ErrForUndefined>,\n ): AsyncResult<T, E | ErrForNull | ErrForUndefined> {\n return new AsyncResult(\n promise\n .then((value) => fromNullable(value, errForNull, errForUndefined))\n .catch((err) => Result.err(err)),\n );\n }\n\n /**\n * Returns a discriminated union for type-safe consumption of the result.\n *\n * ```ts\n *\n * const { val, err } = await Result.wrap(readFile('foo.txt')).unwrap();\n * expect(val).toBe('foo');\n * expect(err).toBeUndefined();\n *\n * ```\n */\n unwrap(): Promise<Res<T, E>> {\n return this.asyncResult.then<Res<T, E>>((res) => res.unwrap());\n }\n\n /**\n * Returns a success value or a fallback value.\n *\n * ```ts\n *\n * const val = await Result.wrap(readFile('foo.txt')).unwrapOr('bar');\n * expect(val).toBe('bar');\n * expect(err).toBeUndefined();\n *\n * ```\n */\n unwrapOr(fallback: T): Promise<T> {\n return this.asyncResult.then<T>((res) => res.unwrapOr(fallback));\n }\n\n /**\n * Returns the ok-value or throw the error.\n */\n async unwrapOrThrow(): Promise<T> {\n const result = await this.asyncResult;\n return result.unwrapOrThrow();\n }\n\n /**\n * Returns the ok-value or `null`.\n */\n unwrapOrNull(): Promise<T | null> {\n return this.asyncResult.then<T | null>((res) => res.unwrapOrNull());\n }\n\n /**\n * Transforms the ok-value, sync or async way.\n *\n * Transform functions SHOULD NOT throw.\n * Uncaught errors are logged and wrapped to `Result._uncaught()`,\n * which leads to re-throwing them in `unwrap()`.\n *\n * Zod `.safeParse()` results are converted automatically.\n *\n * ```ts\n *\n * const { val, err } = await Result.wrap(\n * http.getJson('https://api.example.com/data.json')\n * )\n * .transform(({ body }) => body)\n * .unwrap();\n *\n * ```\n */\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Result<U, E | EE>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => AsyncResult<U, E | EE>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => SafeParseReturnType<Input, NonNullable<U>>,\n ): AsyncResult<U, E | ZodError<Input>>;\n transform<U extends Val, Input = unknown>(\n fn: (value: T) => Promise<SafeParseReturnType<Input, NonNullable<U>>>,\n ): AsyncResult<U, E | ZodError<Input>>;\n transform<U extends Val, EE extends Val>(\n fn: (value: T) => Promise<Result<U, E | EE>>,\n ): AsyncResult<U, E | EE>;\n transform<U extends Val>(\n fn: (value: T) => Promise<RawValue<U>>,\n ): AsyncResult<U, E>;\n transform<U extends Val>(fn: (value: T) => RawValue<U>): AsyncResult<U, E>;\n transform<U extends Val, EE extends Val, Input = unknown>(\n fn: (\n value: T,\n ) =>\n | Result<U, E | EE>\n | AsyncResult<U, E | EE>\n | SafeParseReturnType<Input, NonNullable<U>>\n | Promise<SafeParseReturnType<Input, NonNullable<U>>>\n | Promise<Result<U, E | EE>>\n | Promise<RawValue<U>>\n | RawValue<U>,\n ): AsyncResult<U, E | EE | ZodError<Input>> {\n return new AsyncResult(\n this.asyncResult\n .then((oldResult) => {\n const { ok, val: value, err: error } = oldResult.unwrap();\n if (!ok) {\n return Result.err(error);\n }\n\n try {\n const result = fn(value);\n\n if (result instanceof Result) {\n return result;\n }\n\n if (result instanceof AsyncResult) {\n return result;\n }\n\n if (isZodResult<Input, U>(result)) {\n return fromZodResult(result);\n }\n\n if (result instanceof Promise) {\n return AsyncResult.wrap(result, (err) => {\n logger.warn(\n { err },\n 'AsyncResult: unhandled async transform error',\n );\n return Result._uncaught(err);\n });\n }\n\n return Result.ok(result);\n } catch (err) {\n logger.warn({ err }, 'AsyncResult: unhandled transform error');\n return Result._uncaught(err);\n }\n })\n .catch((err) => {\n // Happens when `.unwrap()` of `oldResult` throws\n return Result._uncaught(err);\n }),\n );\n }\n\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: NonNullable<E>) => Result<U, EE>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: NonNullable<E>) => AsyncResult<U, EE>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (err: NonNullable<E>) => Promise<Result<U, EE>>,\n ): AsyncResult<T | U, EE>;\n catch<U extends Val = T, EE extends Val = E>(\n fn: (\n err: NonNullable<E>,\n ) => Result<U, EE> | AsyncResult<U, EE> | Promise<Result<U, EE>>,\n ): AsyncResult<T | U, EE> {\n const caughtAsyncResult: Promise<Result<T, EE>> = this.asyncResult.then(\n (result) => result.catch(fn as never),\n );\n return AsyncResult.wrap(caughtAsyncResult);\n }\n\n /**\n * Given a `schema`, returns a `Result` with `val` being the parsed value.\n * Additionally, `null` and `undefined` values are converted into Zod error.\n */\n parse<Schema extends ZodType<any, any, any>>(\n schema: Schema,\n ): AsyncResult<\n NonNullable<ZodOutput<Schema>>,\n E | ZodError<ZodInput<Schema>>\n > {\n return new AsyncResult(\n this.asyncResult\n .then((oldResult) => oldResult.parse(schema))\n .catch(\n /* istanbul ignore next: should never happen */\n (err) => Result._uncaught(err),\n ),\n );\n }\n\n onValue(fn: (value: T) => void): AsyncResult<T, E> {\n return new AsyncResult(\n this.asyncResult\n .then((result) => result.onValue(fn))\n .catch(\n /* istanbul ignore next: should never happen */\n (err) => Result._uncaught(err),\n ),\n );\n }\n\n onError(fn: (err: E) => void): AsyncResult<T, E> {\n return new AsyncResult(\n this.asyncResult\n .then((result) => result.onError(fn))\n .catch(\n /* istanbul ignore next: should never happen */\n (err) => Result._uncaught(err),\n ),\n );\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "renovate",
|
|
3
3
|
"description": "Automated dependency updates. Flexible so you don't need to be.",
|
|
4
|
-
"version": "43.60.
|
|
4
|
+
"version": "43.60.2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"renovate": "dist/renovate.js",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"@redis/client": "5.11.0",
|
|
122
122
|
"@renovatebot/detect-tools": "1.2.8",
|
|
123
123
|
"@renovatebot/good-enough-parser": "1.2.0",
|
|
124
|
-
"@renovatebot/osv-offline": "2.
|
|
124
|
+
"@renovatebot/osv-offline": "2.2.0",
|
|
125
125
|
"@renovatebot/pep440": "4.2.2",
|
|
126
126
|
"@renovatebot/pgp": "1.3.2",
|
|
127
127
|
"@renovatebot/ruby-semver": "4.1.2",
|
|
@@ -218,7 +218,6 @@
|
|
|
218
218
|
"devDependencies": {
|
|
219
219
|
"@biomejs/biome": "2.4.5",
|
|
220
220
|
"@commander-js/extra-typings": "14.0.0",
|
|
221
|
-
"@containerbase/eslint-plugin": "1.1.35",
|
|
222
221
|
"@containerbase/istanbul-reports-html": "1.1.34",
|
|
223
222
|
"@containerbase/semantic-release-pnpm": "1.3.24",
|
|
224
223
|
"@eslint/js": "9.39.3",
|
|
@@ -274,10 +273,7 @@
|
|
|
274
273
|
"eslint": "9.39.3",
|
|
275
274
|
"eslint-config-prettier": "10.1.8",
|
|
276
275
|
"eslint-formatter-gha": "2.0.1",
|
|
277
|
-
"eslint-import-resolver-typescript": "4.4.4",
|
|
278
|
-
"eslint-plugin-import-x": "4.16.1",
|
|
279
276
|
"eslint-plugin-oxlint": "1.51.0",
|
|
280
|
-
"eslint-plugin-promise": "7.2.1",
|
|
281
277
|
"expect-more-jest": "5.5.0",
|
|
282
278
|
"globals": "17.4.0",
|
|
283
279
|
"graphql": "16.13.0",
|
package/renovate-schema.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"title": "JSON schema for Renovate 43.60.
|
|
2
|
+
"title": "JSON schema for Renovate 43.60.2 config files (https://renovatebot.com/)",
|
|
3
3
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
-
"x-renovate-version": "43.60.
|
|
4
|
+
"x-renovate-version": "43.60.2",
|
|
5
5
|
"allowComments": true,
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|