Comparing version 7.0.10 to 7.0.11
@@ -6,12 +6,20 @@ import { Nothing } from "../internal"; | ||
/** | ||
* If the lib "ES2105.collections" is not included in tsconfig.json, | ||
* types like ReadonlyArray, WeakMap etc. fall back to `any` (specified nowhere) | ||
* or `{}` (from the node types), in both cases entering an infite recursion in | ||
* pattern matching type mappings | ||
* This type can be used to cast these types to `void` in these cases. | ||
*/ | ||
export declare type IfAvailable<T, Fallback = void> = true | false extends (T extends never ? true : false) ? Fallback : keyof T extends never ? Fallback : T; | ||
/** | ||
* These should also never be mapped but must be tested after regular Map and | ||
* Set | ||
*/ | ||
declare type WeakReferences = WeakMap<any, any> | WeakSet<any>; | ||
declare type WeakReferences = IfAvailable<WeakMap<any, any>> | IfAvailable<WeakSet<any>>; | ||
export declare type WritableDraft<T> = { | ||
-readonly [K in keyof T]: Draft<T[K]>; | ||
}; | ||
export declare type Draft<T> = T extends AtomicObject ? T : T extends ReadonlyMap<infer K, infer V> ? Map<Draft<K>, Draft<V>> : T extends ReadonlySet<infer V> ? Set<Draft<V>> : T extends WeakReferences ? T : T extends object ? WritableDraft<T> : T; | ||
export declare type Draft<T> = T extends AtomicObject ? T : T extends IfAvailable<ReadonlyMap<infer K, infer V>> ? Map<Draft<K>, Draft<V>> : T extends IfAvailable<ReadonlySet<infer V>> ? Set<Draft<V>> : T extends WeakReferences ? T : T extends object ? WritableDraft<T> : T; | ||
/** Convert a mutable type into a readonly type */ | ||
export declare type Immutable<T> = T extends AtomicObject ? T : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<Immutable<K>, Immutable<V>> : T extends ReadonlySet<infer V> ? ReadonlySet<Immutable<V>> : T extends WeakReferences ? T : T extends object ? { | ||
export declare type Immutable<T> = T extends AtomicObject ? T : T extends IfAvailable<ReadonlyMap<infer K, infer V>> ? ReadonlyMap<Immutable<K>, Immutable<V>> : T extends IfAvailable<ReadonlySet<infer V>> ? ReadonlySet<Immutable<V>> : T extends WeakReferences ? T : T extends object ? { | ||
readonly [K in keyof T]: Immutable<T[K]>; | ||
@@ -18,0 +26,0 @@ } : T; |
{ | ||
"name": "immer", | ||
"version": "7.0.10", | ||
"version": "7.0.11", | ||
"description": "Create your next immutable state by mutating the current one", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -21,6 +21,23 @@ import {Nothing} from "../internal" | ||
/** | ||
* If the lib "ES2105.collections" is not included in tsconfig.json, | ||
* types like ReadonlyArray, WeakMap etc. fall back to `any` (specified nowhere) | ||
* or `{}` (from the node types), in both cases entering an infite recursion in | ||
* pattern matching type mappings | ||
* This type can be used to cast these types to `void` in these cases. | ||
*/ | ||
export type IfAvailable<T, Fallback = void> = | ||
// fallback if any | ||
true | false extends (T extends never | ||
? true | ||
: false) | ||
? Fallback // fallback if empty type | ||
: keyof T extends never | ||
? Fallback // original type | ||
: T | ||
/** | ||
* These should also never be mapped but must be tested after regular Map and | ||
* Set | ||
*/ | ||
type WeakReferences = WeakMap<any, any> | WeakSet<any> | ||
type WeakReferences = IfAvailable<WeakMap<any, any>> | IfAvailable<WeakSet<any>> | ||
@@ -31,5 +48,5 @@ export type WritableDraft<T> = {-readonly [K in keyof T]: Draft<T[K]>} | ||
? T | ||
: T extends ReadonlyMap<infer K, infer V> // Map extends ReadonlyMap | ||
: T extends IfAvailable<ReadonlyMap<infer K, infer V>> // Map extends ReadonlyMap | ||
? Map<Draft<K>, Draft<V>> | ||
: T extends ReadonlySet<infer V> // Set extends ReadonlySet | ||
: T extends IfAvailable<ReadonlySet<infer V>> // Set extends ReadonlySet | ||
? Set<Draft<V>> | ||
@@ -45,5 +62,5 @@ : T extends WeakReferences | ||
? T | ||
: T extends ReadonlyMap<infer K, infer V> // Map extends ReadonlyMap | ||
: T extends IfAvailable<ReadonlyMap<infer K, infer V>> // Map extends ReadonlyMap | ||
? ReadonlyMap<Immutable<K>, Immutable<V>> | ||
: T extends ReadonlySet<infer V> // Set extends ReadonlySet | ||
: T extends IfAvailable<ReadonlySet<infer V>> // Set extends ReadonlySet | ||
? ReadonlySet<Immutable<V>> | ||
@@ -50,0 +67,0 @@ : T extends WeakReferences |
Sorry, the diff of this file is not supported yet
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
821185
6432