Comparing version 1.10.2 to 1.10.3
@@ -59,8 +59,23 @@ /** Object types that should never be mapped */ | ||
/** The inferred return type of `produce` */ | ||
type Produced<Base, Return> = 1 extends HasVoidLike<Return> | ||
type Produced<T, Return> = 1 extends HasVoidLike<Return> | ||
? 1 extends IsVoidLike<Return> | ||
? Base | ||
: Base | FromNothing<Exclude<Return, void>> | ||
? Immutable<T> | ||
: Immutable<T> | FromNothing<Exclude<Return, void>> | ||
: FromNothing<Return> | ||
type ImmutableTuple<T extends ReadonlyArray<any>> = { | ||
readonly [P in keyof T]: Immutable<T[P]> | ||
} | ||
/** Convert a mutable type into a readonly type */ | ||
export type Immutable<T> = T extends object | ||
? T extends AtomicObject | ||
? T | ||
: T extends ReadonlyArray<any> | ||
? Array<T[number]> extends T | ||
? {[P in keyof T]: ReadonlyArray<Immutable<T[number]>>}[keyof T] | ||
: ImmutableTuple<T> | ||
: {readonly [P in keyof T]: Immutable<T[P]>} | ||
: T | ||
export interface IProduce { | ||
@@ -86,28 +101,18 @@ /** | ||
*/ | ||
<Base, Proxy = Draft<Base>, Return = void>( | ||
base: Base, | ||
recipe: (this: Proxy, draft: Proxy) => Return, | ||
<T = any, D = Draft<T>, Return = void>( | ||
base: T, | ||
recipe: (this: D, draft: D) => Return, | ||
listener?: PatchListener | ||
): Produced<Base, Return> | ||
): Produced<D, Return> | ||
/** Curried producer with a default value */ | ||
<Default = any, Base = Default, Rest extends any[] = [], Return = void>( | ||
recipe: ( | ||
this: Draft<Base>, | ||
draft: Draft<Base>, | ||
...rest: Rest | ||
) => Return, | ||
defaultBase: Default | ||
): <T>( | ||
base: (Draft<T> extends Draft<Base> ? T : Base) | undefined, | ||
...rest: Rest | ||
) => Produced<Base, Return> | ||
<T = any, D = Draft<T>, Rest extends any[] = [], Return = void>( | ||
recipe: (this: D, draft: D, ...rest: Rest) => Return, | ||
defaultBase: T | ||
): (base: Immutable<D> | undefined, ...rest: Rest) => Produced<D, Return> | ||
/** Curried producer with no default value */ | ||
<Base = any, Rest extends any[] = [], Return = void>( | ||
recipe: (this: Draft<Base>, draft: Draft<Base>, ...rest: Rest) => Return | ||
): <T>( | ||
base: Draft<T> extends Draft<Base> ? T : Base, | ||
...rest: Rest | ||
) => Produced<Base, Return> | ||
<T = any, Rest extends any[] = [], Return = void>( | ||
recipe: (this: Draft<T>, draft: Draft<T>, ...rest: Rest) => Return | ||
): (base: Immutable<T>, ...rest: Rest) => Produced<T, Return> | ||
} | ||
@@ -114,0 +119,0 @@ |
{ | ||
"name": "immer", | ||
"version": "1.10.2", | ||
"version": "1.10.3", | ||
"description": "Create your next immutable state by mutating the current one", | ||
@@ -5,0 +5,0 @@ "main": "dist/immer.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
247527
1756