mutative
Ƭ Draft<T
>: T
extends Primitive
| AtomicObject
? T
: T
extends IfAvailable
<ReadonlyMap
<infer K, infer V>> ? DraftedMap
<K
, V
> : T
extends IfAvailable
<ReadonlySet
<infer V>> ? DraftedSet
<V
> : T
extends WeakReferences
? T
: T
extends object
? DraftedObject
<T
> : T
Name |
---|
T |
Ƭ Immutable<T
>: T
extends Primitive
| AtomicObject
? T
: T
extends IfAvailable
<ReadonlyMap
<infer K, infer V>> ? ImmutableMap
<K
, V
> : T
extends IfAvailable
<ReadonlySet
<infer V>> ? ImmutableSet
<V
> : T
extends WeakReferences
? T
: T
extends object
? ImmutableObject
<T
> : T
Name |
---|
T |
Ƭ Patch<P
>: P
extends { pathAsArray
: false
} ? IPatch
& { path
: string
} : P
extends true
| object
? IPatch
& { path
: (string
| number
)[] } : IPatch
& { path
: string
| (string
| number
)[] }
Name | Type |
---|---|
P |
extends PatchesOptions = any |
Ƭ Patches<P
>: Patch
<P
>[]
Name | Type |
---|---|
P |
extends PatchesOptions = any |
▸ apply<T
, F
>(state
, patches
, applyOptions?
): T
| F
extends true
? Immutable
<T
> : T
apply(state, patches)
to apply patches to state
import { create, apply } from '../index';
const baseState = { foo: { bar: 'str' }, arr: [] };
const [state, patches] = create(
baseState,
(draft) => {
draft.foo.bar = 'str2';
},
{ enablePatches: true }
);
expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });
expect(patches).toEqual([{ op: 'replace', path: ['foo', 'bar'], value: 'str2' }]);
expect(state).toEqual(apply(baseState, patches));
Name | Type |
---|---|
T |
extends object |
F |
extends boolean = false |
Name | Type |
---|---|
state |
T |
patches |
Patches <any > |
applyOptions? |
Pick <Options <boolean , F >, "mark" | "strict" | "enableAutoFreeze" > |
T
| F
extends true
? Immutable
<T
> : T
▸ castDraft<T
>(value
): Draft
<T
>
Cast a value to an Draft type value.
Name |
---|
T |
Name | Type |
---|---|
value |
T |
Draft
<T
>
▸ castImmutable<T
>(value
): Immutable
<T
>
Cast a value to an Immutable type value.
Name |
---|
T |
Name | Type |
---|---|
value |
T |
Immutable
<T
>
▸ create<T
, F
, O
, R
>(base
, mutate
, options?
): CreateResult
<T
, O
, F
, R
>
create(baseState, callback, options)
to create the next state
import { create } from '../index';
const baseState = { foo: { bar: 'str' }, arr: [] };
const state = create(
baseState,
(draft) => {
draft.foo.bar = 'str2';
},
);
expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });
expect(state).not.toBe(baseState);
expect(state.foo).not.toBe(baseState.foo);
expect(state.arr).toBe(baseState.arr);
Name | Type |
---|---|
T |
extends unknown |
F |
extends boolean = false |
O |
extends PatchesOptions = false |
R |
extends unknown = void |
Name | Type |
---|---|
base |
T |
mutate |
(draft : Draft <T >) => R |
options? |
Options <O , F > |
CreateResult
<T
, O
, F
, R
>
▸ create<T
, F
, O
, R
>(base
, mutate
, options?
): CreateResult
<T
, O
, F
, R
>
Name | Type |
---|---|
T |
extends unknown |
F |
extends boolean = false |
O |
extends PatchesOptions = false |
R |
extends void | Promise <void > = void |
Name | Type |
---|---|
base |
T |
mutate |
(draft : T ) => R |
options? |
Options <O , F > |
CreateResult
<T
, O
, F
, R
>
▸ create<T
, P
, F
, O
, R
>(mutate
, options?
): (base
: T
, ...args
: P
) => CreateResult
<T
, O
, F
, R
>
Name | Type |
---|---|
T |
extends unknown |
P |
extends any [] = [] |
F |
extends boolean = false |
O |
extends PatchesOptions = false |
R |
extends void | Promise <void > = void |
Name | Type |
---|---|
mutate |
(draft : Draft <T >, ...args : P ) => R |
options? |
Options <O , F > |
fn
▸ (base
, ...args
): CreateResult
<T
, O
, F
, R
>
Name | Type |
---|---|
base |
T |
...args |
P |
CreateResult
<T
, O
, F
, R
>
▸ create<T
, O
, F
>(base
, options?
): [T
, () => Result
<T
, O
, F
>]
Name | Type |
---|---|
T |
extends unknown |
O |
extends PatchesOptions = false |
F |
extends boolean = false |
Name | Type |
---|---|
base |
T |
options? |
Options <O , F > |
[T
, () => Result
<T
, O
, F
>]
▸ current<T
>(target
): T
current(draft)
to get current state in the draft mutation function.
import { create, current } from '../index';
const baseState = { foo: { bar: 'str' }, arr: [] };
const state = create(
baseState,
(draft) => {
draft.foo.bar = 'str2';
expect(current(draft.foo)).toEqual({ bar: 'str2' });
},
);
Name | Type |
---|---|
T |
extends object |
Name | Type |
---|---|
target |
T |
T
▸ isDraft(target
): boolean
Check if the value is a draft
Name | Type |
---|---|
target |
any |
boolean
▸ isDraftable(value
, options?
): boolean
Check if a value is draftable
Name | Type |
---|---|
value |
any |
options? |
Object |
options.mark? |
Mark <any , any > |
boolean
▸ original<T
>(target
): T
original(draft)
to get original state in the draft mutation function.
import { create, original } from '../index';
const baseState = { foo: { bar: 'str' }, arr: [] };
const state = create(
baseState,
(draft) => {
draft.foo.bar = 'str2';
expect(original(draft.foo)).toEqual({ bar: 'str' });
}
);
Name |
---|
T |
Name | Type |
---|---|
target |
T |
T
▸ safeReturn<T
>(value
): T
It is used as a safe return value to ensure that this value replaces the finalized value.
Name | Type |
---|---|
T |
extends undefined | object |
Name | Type |
---|---|
value |
T |
T
▸ unsafe<T
>(callback
): T
unsafe(callback)
to access mutable data directly in strict mode.
import { create, unsafe } from '../index';
class Foobar {
bar = 1;
}
const baseState = { foobar: new Foobar() };
const state = create(
baseState,
(draft) => {
unsafe(() => {
draft.foobar.bar = 2;
});
},
{
strict: true,
}
);
expect(state).toBe(baseState);
expect(state.foobar).toBe(baseState.foobar);
expect(state.foobar.bar).toBe(2);
Name |
---|
T |
Name | Type |
---|---|
callback |
() => T |
T