From ad2b769b515305512f384448abbf039acb0690f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 Apr 2024 20:05:37 +0000 Subject: [PATCH] Deploy to GitHub pages --- .nojekyll | 0 404.html | 26 ++++++++ api/index.html | 26 ++++++++ assets/css/styles.d8d8e956.css | 1 + ...immer-4002b3fd2cfd3aa66c62ecc525663c0d.png | Bin 0 -> 52109 bytes ...mance-c7f59d06ec36f4a05b6403daada96542.png | Bin 0 -> 54331 bytes assets/js/042e7587.e0563d17.js | 1 + assets/js/0480b142.1f3b3884.js | 1 + assets/js/0af7b35c.fb50d244.js | 1 + assets/js/17896441.9ee3f929.js | 1 + assets/js/1be78505.e26aa023.js | 1 + assets/js/2b810e00.dd4c0b92.js | 1 + assets/js/5fbc5cf1.01b5063b.js | 1 + assets/js/62d444b9.96d43566.js | 1 + assets/js/74860b1a.14c24b29.js | 1 + assets/js/78f86360.36d82662.js | 1 + assets/js/7956b02b.15560020.js | 1 + assets/js/813ea2aa.8f6c63bf.js | 1 + assets/js/849404ec.f79a223b.js | 1 + assets/js/935f2afb.3ff6f6ed.js | 1 + assets/js/972.6014fcc7.js | 1 + assets/js/a09c2993.02efd803.js | 1 + assets/js/aa829a7d.b3cc16e2.js | 1 + assets/js/adb5656e.5784bc22.js | 1 + assets/js/b1381a87.428452f4.js | 1 + assets/js/bbcc1203.f9f2c60d.js | 1 + assets/js/c31773f8.d9e3bf2a.js | 1 + assets/js/c73e0d38.f84bc059.js | 1 + assets/js/d92a3c43.9b4e1742.js | 1 + assets/js/d9e16301.e2204e7e.js | 1 + assets/js/e0b41884.5fb204d3.js | 1 + assets/js/f6624ac6.7f4f4a6c.js | 1 + assets/js/fa4d91bf.058e7ee8.js | 1 + assets/js/fc38421c.c200546a.js | 1 + assets/js/main.9862ba66.js | 2 + assets/js/main.9862ba66.js.LICENSE.txt | 63 ++++++++++++++++++ assets/js/runtime~main.eb1e7b35.js | 1 + async/index.html | 26 ++++++++ built-with/index.html | 26 ++++++++ complex-objects/index.html | 26 ++++++++ current/index.html | 26 ++++++++ curried-produce/index.html | 26 ++++++++ docs/404.html/index.html | 11 +++ docs/api/index.html | 11 +++ docs/async/index.html | 11 +++ docs/built-with/index.html | 11 +++ docs/complex-objects/index.html | 11 +++ docs/current/index.html | 11 +++ docs/curried-produce/index.html | 11 +++ docs/example-setstate/index.html | 11 +++ docs/faq/index.html | 11 +++ docs/freezing/index.html | 11 +++ docs/index.html | 11 +++ docs/installation/index.html | 11 +++ docs/map-set/index.html | 11 +++ docs/original/index.html | 11 +++ docs/other-lang/index.html | 11 +++ docs/patches/index.html | 11 +++ docs/performance/index.html | 11 +++ docs/pitfalls/index.html | 11 +++ docs/produce/index.html | 11 +++ docs/resources/index.html | 11 +++ docs/return/index.html | 11 +++ docs/support/index.html | 11 +++ docs/typescript/index.html | 11 +++ docs/update-patterns/index.html | 11 +++ example-setstate/index.html | 26 ++++++++ faq/index.html | 26 ++++++++ freezing/index.html | 26 ++++++++ img/favicon.ico | Bin 0 -> 4542 bytes img/immer-logo.png | Bin 0 -> 6053 bytes img/immer-logo.svg | 8 +++ img/immer.png | Bin 0 -> 52109 bytes img/performance.png | Bin 0 -> 54331 bytes img/proxy.png | Bin 0 -> 91131 bytes img/tree.png | Bin 0 -> 77004 bytes index.html | 26 ++++++++ installation/index.html | 26 ++++++++ map-set/index.html | 26 ++++++++ original/index.html | 26 ++++++++ other-lang/index.html | 26 ++++++++ patches/index.html | 26 ++++++++ performance/index.html | 26 ++++++++ pitfalls/index.html | 26 ++++++++ produce/index.html | 26 ++++++++ resources/index.html | 26 ++++++++ return/index.html | 26 ++++++++ support/index.html | 26 ++++++++ typescript/index.html | 26 ++++++++ update-patterns/index.html | 26 ++++++++ zh-CN/.nojekyll | 0 zh-CN/404.html | 26 ++++++++ zh-CN/api/index.html | 26 ++++++++ zh-CN/assets/css/styles.d8d8e956.css | 1 + ...immer-4002b3fd2cfd3aa66c62ecc525663c0d.png | Bin 0 -> 52109 bytes ...mance-c7f59d06ec36f4a05b6403daada96542.png | Bin 0 -> 54331 bytes zh-CN/assets/js/04a45149.2f5db85e.js | 1 + zh-CN/assets/js/17896441.9ee3f929.js | 1 + zh-CN/assets/js/1be78505.e26aa023.js | 1 + zh-CN/assets/js/283536cd.3445ba73.js | 1 + zh-CN/assets/js/2a403987.1f5bea41.js | 1 + zh-CN/assets/js/31e1f126.560507e5.js | 1 + zh-CN/assets/js/3ff44509.6b0adc7b.js | 1 + zh-CN/assets/js/4e83d2d9.f9732b47.js | 1 + zh-CN/assets/js/565f0463.530e51cf.js | 1 + zh-CN/assets/js/6188dc95.ddac33b0.js | 1 + zh-CN/assets/js/69584822.b99d3b26.js | 1 + zh-CN/assets/js/6f8a07f4.5bb78a81.js | 1 + zh-CN/assets/js/83e2c290.2fe154f3.js | 1 + zh-CN/assets/js/85d5e4c3.1b810bbc.js | 1 + zh-CN/assets/js/935f2afb.cc3274fd.js | 1 + zh-CN/assets/js/972.6014fcc7.js | 1 + zh-CN/assets/js/97ddec0c.449092da.js | 1 + zh-CN/assets/js/9f5844f2.4d249e24.js | 1 + zh-CN/assets/js/a11e3352.20fb3d2d.js | 1 + zh-CN/assets/js/a719c767.75141fc2.js | 1 + zh-CN/assets/js/b0a6a947.0bea9c7f.js | 1 + zh-CN/assets/js/bce219d6.24d3fee5.js | 1 + zh-CN/assets/js/c04ff0a2.a14e5012.js | 1 + zh-CN/assets/js/c4b16e3e.a6805222.js | 1 + zh-CN/assets/js/c8c8a043.25506f6b.js | 1 + zh-CN/assets/js/e92a9c00.2ee6ce03.js | 1 + zh-CN/assets/js/f2520ed1.63da9c40.js | 1 + zh-CN/assets/js/f6624ac6.7f4f4a6c.js | 1 + zh-CN/assets/js/main.5ff8aaa3.js | 2 + zh-CN/assets/js/main.5ff8aaa3.js.LICENSE.txt | 63 ++++++++++++++++++ zh-CN/assets/js/runtime~main.add40971.js | 1 + zh-CN/async/index.html | 26 ++++++++ zh-CN/built-with/index.html | 26 ++++++++ zh-CN/complex-objects/index.html | 26 ++++++++ zh-CN/current/index.html | 28 ++++++++ zh-CN/curried-produce/index.html | 26 ++++++++ zh-CN/docs/404.html/index.html | 11 +++ zh-CN/docs/api/index.html | 11 +++ zh-CN/docs/async/index.html | 11 +++ zh-CN/docs/built-with/index.html | 11 +++ zh-CN/docs/complex-objects/index.html | 11 +++ zh-CN/docs/current/index.html | 11 +++ zh-CN/docs/curried-produce/index.html | 11 +++ zh-CN/docs/example-setstate/index.html | 11 +++ zh-CN/docs/faq/index.html | 11 +++ zh-CN/docs/freezing/index.html | 11 +++ zh-CN/docs/index.html | 11 +++ zh-CN/docs/installation/index.html | 11 +++ zh-CN/docs/map-set/index.html | 11 +++ zh-CN/docs/original/index.html | 11 +++ zh-CN/docs/other-lang/index.html | 11 +++ zh-CN/docs/patches/index.html | 11 +++ zh-CN/docs/performance/index.html | 11 +++ zh-CN/docs/pitfalls/index.html | 11 +++ zh-CN/docs/produce/index.html | 11 +++ zh-CN/docs/resources/index.html | 11 +++ zh-CN/docs/return/index.html | 11 +++ zh-CN/docs/support/index.html | 11 +++ zh-CN/docs/typescript/index.html | 11 +++ zh-CN/docs/update-patterns/index.html | 11 +++ zh-CN/example-setstate/index.html | 26 ++++++++ zh-CN/faq/index.html | 26 ++++++++ zh-CN/freezing/index.html | 26 ++++++++ zh-CN/img/favicon.ico | Bin 0 -> 4542 bytes zh-CN/img/immer-logo.png | Bin 0 -> 6053 bytes zh-CN/img/immer-logo.svg | 8 +++ zh-CN/img/immer.png | Bin 0 -> 52109 bytes zh-CN/img/performance.png | Bin 0 -> 54331 bytes zh-CN/img/proxy.png | Bin 0 -> 91131 bytes zh-CN/img/tree.png | Bin 0 -> 77004 bytes zh-CN/index.html | 26 ++++++++ zh-CN/installation/index.html | 26 ++++++++ zh-CN/map-set/index.html | 26 ++++++++ zh-CN/original/index.html | 27 ++++++++ zh-CN/other-lang/index.html | 26 ++++++++ zh-CN/patches/index.html | 26 ++++++++ zh-CN/performance/index.html | 26 ++++++++ zh-CN/pitfalls/index.html | 26 ++++++++ zh-CN/produce/index.html | 26 ++++++++ zh-CN/resources/index.html | 26 ++++++++ zh-CN/return/index.html | 26 ++++++++ zh-CN/support/index.html | 26 ++++++++ zh-CN/typescript/index.html | 26 ++++++++ zh-CN/update-patterns/index.html | 26 ++++++++ 180 files changed, 1985 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 api/index.html create mode 100644 assets/css/styles.d8d8e956.css create mode 100644 assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png create mode 100644 assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png create mode 100644 assets/js/042e7587.e0563d17.js create mode 100644 assets/js/0480b142.1f3b3884.js create mode 100644 assets/js/0af7b35c.fb50d244.js create mode 100644 assets/js/17896441.9ee3f929.js create mode 100644 assets/js/1be78505.e26aa023.js create mode 100644 assets/js/2b810e00.dd4c0b92.js create mode 100644 assets/js/5fbc5cf1.01b5063b.js create mode 100644 assets/js/62d444b9.96d43566.js create mode 100644 assets/js/74860b1a.14c24b29.js create mode 100644 assets/js/78f86360.36d82662.js create mode 100644 assets/js/7956b02b.15560020.js create mode 100644 assets/js/813ea2aa.8f6c63bf.js create mode 100644 assets/js/849404ec.f79a223b.js create mode 100644 assets/js/935f2afb.3ff6f6ed.js create mode 100644 assets/js/972.6014fcc7.js create mode 100644 assets/js/a09c2993.02efd803.js create mode 100644 assets/js/aa829a7d.b3cc16e2.js create mode 100644 assets/js/adb5656e.5784bc22.js create mode 100644 assets/js/b1381a87.428452f4.js create mode 100644 assets/js/bbcc1203.f9f2c60d.js create mode 100644 assets/js/c31773f8.d9e3bf2a.js create mode 100644 assets/js/c73e0d38.f84bc059.js create mode 100644 assets/js/d92a3c43.9b4e1742.js create mode 100644 assets/js/d9e16301.e2204e7e.js create mode 100644 assets/js/e0b41884.5fb204d3.js create mode 100644 assets/js/f6624ac6.7f4f4a6c.js create mode 100644 assets/js/fa4d91bf.058e7ee8.js create mode 100644 assets/js/fc38421c.c200546a.js create mode 100644 assets/js/main.9862ba66.js create mode 100644 assets/js/main.9862ba66.js.LICENSE.txt create mode 100644 assets/js/runtime~main.eb1e7b35.js create mode 100644 async/index.html create mode 100644 built-with/index.html create mode 100644 complex-objects/index.html create mode 100644 current/index.html create mode 100644 curried-produce/index.html create mode 100644 docs/404.html/index.html create mode 100644 docs/api/index.html create mode 100644 docs/async/index.html create mode 100644 docs/built-with/index.html create mode 100644 docs/complex-objects/index.html create mode 100644 docs/current/index.html create mode 100644 docs/curried-produce/index.html create mode 100644 docs/example-setstate/index.html create mode 100644 docs/faq/index.html create mode 100644 docs/freezing/index.html create mode 100644 docs/index.html create mode 100644 docs/installation/index.html create mode 100644 docs/map-set/index.html create mode 100644 docs/original/index.html create mode 100644 docs/other-lang/index.html create mode 100644 docs/patches/index.html create mode 100644 docs/performance/index.html create mode 100644 docs/pitfalls/index.html create mode 100644 docs/produce/index.html create mode 100644 docs/resources/index.html create mode 100644 docs/return/index.html create mode 100644 docs/support/index.html create mode 100644 docs/typescript/index.html create mode 100644 docs/update-patterns/index.html create mode 100644 example-setstate/index.html create mode 100644 faq/index.html create mode 100644 freezing/index.html create mode 100644 img/favicon.ico create mode 100644 img/immer-logo.png create mode 100644 img/immer-logo.svg create mode 100644 img/immer.png create mode 100644 img/performance.png create mode 100644 img/proxy.png create mode 100644 img/tree.png create mode 100644 index.html create mode 100644 installation/index.html create mode 100644 map-set/index.html create mode 100644 original/index.html create mode 100644 other-lang/index.html create mode 100644 patches/index.html create mode 100644 performance/index.html create mode 100644 pitfalls/index.html create mode 100644 produce/index.html create mode 100644 resources/index.html create mode 100644 return/index.html create mode 100644 support/index.html create mode 100644 typescript/index.html create mode 100644 update-patterns/index.html create mode 100644 zh-CN/.nojekyll create mode 100644 zh-CN/404.html create mode 100644 zh-CN/api/index.html create mode 100644 zh-CN/assets/css/styles.d8d8e956.css create mode 100644 zh-CN/assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png create mode 100644 zh-CN/assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png create mode 100644 zh-CN/assets/js/04a45149.2f5db85e.js create mode 100644 zh-CN/assets/js/17896441.9ee3f929.js create mode 100644 zh-CN/assets/js/1be78505.e26aa023.js create mode 100644 zh-CN/assets/js/283536cd.3445ba73.js create mode 100644 zh-CN/assets/js/2a403987.1f5bea41.js create mode 100644 zh-CN/assets/js/31e1f126.560507e5.js create mode 100644 zh-CN/assets/js/3ff44509.6b0adc7b.js create mode 100644 zh-CN/assets/js/4e83d2d9.f9732b47.js create mode 100644 zh-CN/assets/js/565f0463.530e51cf.js create mode 100644 zh-CN/assets/js/6188dc95.ddac33b0.js create mode 100644 zh-CN/assets/js/69584822.b99d3b26.js create mode 100644 zh-CN/assets/js/6f8a07f4.5bb78a81.js create mode 100644 zh-CN/assets/js/83e2c290.2fe154f3.js create mode 100644 zh-CN/assets/js/85d5e4c3.1b810bbc.js create mode 100644 zh-CN/assets/js/935f2afb.cc3274fd.js create mode 100644 zh-CN/assets/js/972.6014fcc7.js create mode 100644 zh-CN/assets/js/97ddec0c.449092da.js create mode 100644 zh-CN/assets/js/9f5844f2.4d249e24.js create mode 100644 zh-CN/assets/js/a11e3352.20fb3d2d.js create mode 100644 zh-CN/assets/js/a719c767.75141fc2.js create mode 100644 zh-CN/assets/js/b0a6a947.0bea9c7f.js create mode 100644 zh-CN/assets/js/bce219d6.24d3fee5.js create mode 100644 zh-CN/assets/js/c04ff0a2.a14e5012.js create mode 100644 zh-CN/assets/js/c4b16e3e.a6805222.js create mode 100644 zh-CN/assets/js/c8c8a043.25506f6b.js create mode 100644 zh-CN/assets/js/e92a9c00.2ee6ce03.js create mode 100644 zh-CN/assets/js/f2520ed1.63da9c40.js create mode 100644 zh-CN/assets/js/f6624ac6.7f4f4a6c.js create mode 100644 zh-CN/assets/js/main.5ff8aaa3.js create mode 100644 zh-CN/assets/js/main.5ff8aaa3.js.LICENSE.txt create mode 100644 zh-CN/assets/js/runtime~main.add40971.js create mode 100644 zh-CN/async/index.html create mode 100644 zh-CN/built-with/index.html create mode 100644 zh-CN/complex-objects/index.html create mode 100644 zh-CN/current/index.html create mode 100644 zh-CN/curried-produce/index.html create mode 100644 zh-CN/docs/404.html/index.html create mode 100644 zh-CN/docs/api/index.html create mode 100644 zh-CN/docs/async/index.html create mode 100644 zh-CN/docs/built-with/index.html create mode 100644 zh-CN/docs/complex-objects/index.html create mode 100644 zh-CN/docs/current/index.html create mode 100644 zh-CN/docs/curried-produce/index.html create mode 100644 zh-CN/docs/example-setstate/index.html create mode 100644 zh-CN/docs/faq/index.html create mode 100644 zh-CN/docs/freezing/index.html create mode 100644 zh-CN/docs/index.html create mode 100644 zh-CN/docs/installation/index.html create mode 100644 zh-CN/docs/map-set/index.html create mode 100644 zh-CN/docs/original/index.html create mode 100644 zh-CN/docs/other-lang/index.html create mode 100644 zh-CN/docs/patches/index.html create mode 100644 zh-CN/docs/performance/index.html create mode 100644 zh-CN/docs/pitfalls/index.html create mode 100644 zh-CN/docs/produce/index.html create mode 100644 zh-CN/docs/resources/index.html create mode 100644 zh-CN/docs/return/index.html create mode 100644 zh-CN/docs/support/index.html create mode 100644 zh-CN/docs/typescript/index.html create mode 100644 zh-CN/docs/update-patterns/index.html create mode 100644 zh-CN/example-setstate/index.html create mode 100644 zh-CN/faq/index.html create mode 100644 zh-CN/freezing/index.html create mode 100644 zh-CN/img/favicon.ico create mode 100644 zh-CN/img/immer-logo.png create mode 100644 zh-CN/img/immer-logo.svg create mode 100644 zh-CN/img/immer.png create mode 100644 zh-CN/img/performance.png create mode 100644 zh-CN/img/proxy.png create mode 100644 zh-CN/img/tree.png create mode 100644 zh-CN/index.html create mode 100644 zh-CN/installation/index.html create mode 100644 zh-CN/map-set/index.html create mode 100644 zh-CN/original/index.html create mode 100644 zh-CN/other-lang/index.html create mode 100644 zh-CN/patches/index.html create mode 100644 zh-CN/performance/index.html create mode 100644 zh-CN/pitfalls/index.html create mode 100644 zh-CN/produce/index.html create mode 100644 zh-CN/resources/index.html create mode 100644 zh-CN/return/index.html create mode 100644 zh-CN/support/index.html create mode 100644 zh-CN/typescript/index.html create mode 100644 zh-CN/update-patterns/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..67e9b093 --- /dev/null +++ b/404.html @@ -0,0 +1,26 @@ + + + + + +Page Not Found | Immer + + + + + + + + + + + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..8649fa23 --- /dev/null +++ b/api/index.html @@ -0,0 +1,26 @@ + + + + + +API overview | Immer + + + + + + + + + + + + + + +
+
Skip to main content

API overview

Exported nameDescriptionSection
produceThe core API of Immer: import {produce} from "immer"Produce
applyPatchesGiven a base state or draft, and a set of patches, applies the patchesPatches
castDraftConverts any immutable type to its mutable counterpart. This is just a cast and doesn't actually do anything.TypeScript
castImmutableConverts any mutable type to its immutable counterpart. This is just a cast and doesn't actually do anything.TypeScript
createDraftGiven a base state, creates a mutable draft for which any modifications will be recordedAsync
currentGiven a draft object (doesn't have to be a tree root), takes a snapshot of the current state of the draftCurrent
Draft<T>Exposed TypeScript type to convert an immutable type to a mutable typeTypeScript
enableMapSet()Enables support for Map and Set collections.Installation
enablePatches()Enables support for JSON patches.Installation
finishDraftGiven an draft created using createDraft, seals the draft and produces and returns the next immutable state that captures all the changesAsync
freeze(obj, deep?)Freezes draftable objects. Returns the original object. By default freezes shallowly, but if the second argument is true it will freeze recursively.
Immerconstructor that can be used to create a second "immer" instance (exposing all APIs listed in this instance), that doesn't share its settings with global instance.
immerableSymbol that can be added to a constructor or prototype, to indicate that Immer should treat the class as something that can be safely draftedClasses
Immutable<T>Exposed TypeScript type to convert mutable types to immutable types
isDraftReturns true if the given object is a draft object
isDraftableReturns true if Immer is capable of turning this object into a draft. Which is true for: arrays, objects without prototype, objects with Object as their prototype, objects that have the immerable symbol on their constructor or prototype
nothingValue that can be returned from a recipe, to indicate that the value undefined should be producedReturn
originalGiven a draft object (doesn't have to be a tree root), returns the original object at the same path in the original state tree, if presentOriginal
PatchExposed TypeScript type, describes the shape of an (inverse) patch objectPatches
produceWithPatchesWorks the same as produce, but instead of just returning the produced object, it returns a tuple, consisting of [result, patches, inversePatches].Patches
setAutoFreezeEnables / disables automatic freezing of the trees produces. By default enabled.Freezing
setUseStrictShallowCopyCan be used to enable strict shallow copy. If enable, immer copies non-enumerable properties as much as possible.Classes

Importing immer

In most cases, the only thing you need to import from Immer is produce:

import {produce} from "immer"

Note that in older versions, produce was also available as default export (e.g. import produce from "immer" was also valid, but that is no longer the case to improve eco system compatibility.

+ + + + \ No newline at end of file diff --git a/assets/css/styles.d8d8e956.css b/assets/css/styles.d8d8e956.css new file mode 100644 index 00000000..f859c0e0 --- /dev/null +++ b/assets/css/styles.d8d8e956.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration);color:#c200c2}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{-moz-column-gap:var(--ifm-avatar-intro-margin);column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,a:hover{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{-moz-column-gap:var(--ifm-pagination-page-spacing);column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.tocCollapsibleContent_vkbj a,details a{display:block}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-link-color:#c200c2;--docusaurus-announcement-bar-height:auto!important;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.navbar--dark{--ifm-navbar-background-color:#000;--ifm-menu-color:#fff;--ifm-menu-color-background-hover:hsla(0,0%,100%,.1)}.navbar--fixed-top{color:#fff;font-weight:700}.navbar--fixed-top a{color:#fff}details{background:#e2e2e2;margin-bottom:20px}details[open]{border-bottom:2px solid #c200c2}details iframe{padding:0 20px}details a{color:#666;font-size:.8em;text-align:right}.egghead-summary{background:#c200c2;border-radius:2px;color:#fff;cursor:pointer;margin:0;padding:5px}.egghead-link{font-style:italic;margin:5px;padding:5px}iframe{border:none}.dropdown__link{color:#000!important}div[class^=announcementBarContent]{font-size:20px;font-weight:700;line-height:40px;padding:8px 30px}div[class^=announcementBarContent] a{color:var(--ifm-color-primary-lightest)!important;display:inline-block;text-decoration:underline}div[class^=announcementBarContent] a:hover{color:var(--brand)!important}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none}.hash-link:before{content:"#"}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{-moz-column-gap:.2rem;column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_b6E3,.sidebarLogo_isFc{display:none}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:768px){.announcement{font-size:18px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media only screen and (max-width:500px){.announcement{font-size:15px;line-height:22px;padding:6px 30px}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png b/assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png new file mode 100644 index 0000000000000000000000000000000000000000..c83185f8a2910090335ec3f0a8f69985f8bffa0a GIT binary patch literal 52109 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≈X2J=ivxbmN$LgxLmTx(7iSA6_xpwvJQ}S< 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≪|^?uN$Hs$~22i=&!7;gw9nA>w>9 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 B>`?#! literal 0 HcmV?d00001 diff --git a/assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png b/assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd5c8be5365ed566a9b11643a7ee4069b621d55 GIT binary patch literal 54331 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±mna%W- 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 literal 0 HcmV?d00001 diff --git a/assets/js/042e7587.e0563d17.js b/assets/js/042e7587.e0563d17.js new file mode 100644 index 00000000..641ce1f0 --- /dev/null +++ b/assets/js/042e7587.e0563d17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[518],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=c(r),g=a,f=u["".concat(p,".").concat(g)]||u[g]||s[g]||o;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>l,metadata:()=>c,toc:()=>u});var n=r(3117),a=r(102),o=(r(7294),r(3905)),i=["components"],l={id:"other-lang",title:"Porting to other languages"},p=void 0,c={unversionedId:"other-lang",id:"other-lang",title:"Porting to other languages",description:"Immer has been ported to other programming languages.",source:"@site/docs/other-lang.md",sourceDirName:".",slug:"/other-lang",permalink:"/immer/other-lang",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/other-lang.md",tags:[],version:"current",frontMatter:{id:"other-lang",title:"Porting to other languages"},sidebar:"Immer",previous:{title:"Supporting immer",permalink:"/immer/support"}},m={},u=[],s={toc:u};function g(e){var t=e.components,r=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Immer has been ported to other programming languages."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Link"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Java"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://babyfish-ct.github.io/jimmer-doc/"},"Jimmer"))))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0480b142.1f3b3884.js b/assets/js/0480b142.1f3b3884.js new file mode 100644 index 00000000..e8047341 --- /dev/null +++ b/assets/js/0480b142.1f3b3884.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[836],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var m=n.createContext({}),l=function(e){var t=n.useContext(m),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=l(e.components);return n.createElement(m.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,m=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=l(r),p=a,f=u["".concat(m,".").concat(p)]||u[p]||d[p]||s;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=p;var o={};for(var m in t)hasOwnProperty.call(t,m)&&(o[m]=t[m]);o.originalType=e,o[u]="string"==typeof e?e:a,i[1]=o;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>m,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(3117),a=r(102),s=(r(7294),r(3905)),i=["components"],o={id:"faq",title:"Frequently Asked Questions",sidebar_label:"FAQ"},m=void 0,l={unversionedId:"faq",id:"faq",title:"Frequently Asked Questions",description:"Q: How does Immer work?",source:"@site/docs/faq.md",sourceDirName:".",slug:"/faq",permalink:"/immer/faq",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/faq.md",tags:[],version:"current",frontMatter:{id:"faq",title:"Frequently Asked Questions",sidebar_label:"FAQ"},sidebar:"Immer",previous:{title:"External resources",permalink:"/immer/resources"},next:{title:"Pitfalls",permalink:"/immer/pitfalls"}},c={},u=[{value:"Q: How does Immer work?",id:"q-how-does-immer-work",level:2},{value:"Q: Does Immer use structural sharing? So that my selectors can be memoized and such?",id:"q-does-immer-use-structural-sharing-so-that-my-selectors-can-be-memoized-and-such",level:2},{value:"Q: Does Immer support deep updates?",id:"q-does-immer-support-deep-updates",level:2},{value:"Q: I can't rely on Proxies being present on my target environments. Can I use Immer?",id:"q-i-cant-rely-on-proxies-being-present-on-my-target-environments-can-i-use-immer",level:2},{value:"Q: Can I typecheck my data structures when using Immer?",id:"q-can-i-typecheck-my-data-structures-when-using-immer",level:2},{value:"Q: Can I store Date objects, functions etc in my state tree when using Immer?",id:"q-can-i-store-date-objects-functions-etc-in-my-state-tree-when-using-immer",level:2},{value:"Q: Can I use Maps and Sets?",id:"q-can-i-use-maps-and-sets",level:2},{value:"Q: Is it fast?",id:"q-is-it-fast",level:2},{value:"Q: Idea! Can Immer freeze the state for me?",id:"q-idea-can-immer-freeze-the-state-for-me",level:2}],d={toc:u};function p(e){var t=e.components,r=(0,a.Z)(e,i);return(0,s.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("center",null,(0,s.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,s.kt)("h2",{id:"q-how-does-immer-work"},"Q: How does Immer work?"),(0,s.kt)("p",null,"Read the (second part of the) ",(0,s.kt)("a",{parentName:"p",href:"https://medium.com/@mweststrate/introducing-immer-immutability-the-easy-way-9d73d8f71cb3"},"introduction blog"),"."),(0,s.kt)("h2",{id:"q-does-immer-use-structural-sharing-so-that-my-selectors-can-be-memoized-and-such"},"Q: Does Immer use structural sharing? So that my selectors can be memoized and such?"),(0,s.kt)("p",null,"A: Yes"),(0,s.kt)("h2",{id:"q-does-immer-support-deep-updates"},"Q: Does Immer support deep updates?"),(0,s.kt)("p",null,"A: Yes"),(0,s.kt)("h2",{id:"q-i-cant-rely-on-proxies-being-present-on-my-target-environments-can-i-use-immer"},"Q: I can't rely on Proxies being present on my target environments. Can I use Immer?"),(0,s.kt)("p",null,"A: Yes - ",(0,s.kt)("a",{parentName:"p",href:"/immer/installation#immer-on-older-javascript-environments"},"view details")),(0,s.kt)("h2",{id:"q-can-i-typecheck-my-data-structures-when-using-immer"},"Q: Can I typecheck my data structures when using Immer?"),(0,s.kt)("p",null,"A: Yes"),(0,s.kt)("h2",{id:"q-can-i-store-date-objects-functions-etc-in-my-state-tree-when-using-immer"},"Q: Can I store ",(0,s.kt)("inlineCode",{parentName:"h2"},"Date")," objects, functions etc in my state tree when using Immer?"),(0,s.kt)("p",null,"A: Yes"),(0,s.kt)("h2",{id:"q-can-i-use-maps-and-sets"},"Q: Can I use Maps and Sets?"),(0,s.kt)("p",null,"A: Yes"),(0,s.kt)("h2",{id:"q-is-it-fast"},"Q: Is it fast?"),(0,s.kt)("p",null,"A: Yes"),(0,s.kt)("h2",{id:"q-idea-can-immer-freeze-the-state-for-me"},"Q: Idea! Can Immer freeze the state for me?"),(0,s.kt)("p",null,"A: Yes"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0af7b35c.fb50d244.js b/assets/js/0af7b35c.fb50d244.js new file mode 100644 index 00000000..ff0b53a6 --- /dev/null +++ b/assets/js/0af7b35c.fb50d244.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[732],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),m=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},l=function(e){var t=m(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,l=d(e,["components","mdxType","originalType","parentName"]),c=m(n),p=r,f=c["".concat(s,".").concat(p)]||c[p]||u[p]||o;return n?a.createElement(f,i(i({ref:t},l),{},{components:n})):a.createElement(f,i({ref:t},l))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=p;var d={};for(var s in t)hasOwnProperty.call(t,s)&&(d[s]=t[s]);d.originalType=e,d[c]="string"==typeof e?e:r,i[1]=d;for(var m=2;m{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>d,metadata:()=>m,toc:()=>c});var a=n(3117),r=n(102),o=(n(7294),n(3905)),i=["components"],d={id:"example-setstate",title:"React & Immer"},s=void 0,m={unversionedId:"example-setstate",id:"example-setstate",title:"React & Immer",description:" {\n const [todos, setTodos] = useState([\n {\n id: "React",\n title: "Learn React",\n done: true\n },\n {\n id: "Immer",\n title: "Try Immer",\n done: false\n }\n ]);\n\n const handleToggle = useCallback((id) => {\n setTodos(\n produce((draft) => {\n const todo = draft.find((todo) => todo.id === id);\n todo.done = !todo.done;\n })\n );\n }, []);\n\n const handleAdd = useCallback(() => {\n setTodos(\n produce((draft) => {\n draft.push({\n id: "todo_" + Math.random(),\n title: "A new todo",\n done: false\n });\n })\n );\n }, []);\n\n return (
{*/ See CodeSandbox */}
)\n}\n')),(0,o.kt)("h2",{id:"useimmer"},"useImmer"),(0,o.kt)("p",null,"Since all state updaters follow the same pattern where the update function is wrapped in ",(0,o.kt)("inlineCode",{parentName:"p"},"produce"),", it is also possible to simplify the above by leveraging the ",(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/use-immer"},"use-immer")," package that will wrap updater functions in ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," automatically:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import React, { useCallback } from "react";\nimport { useImmer } from "use-immer";\n\nconst TodoList = () => {\n const [todos, setTodos] = useImmer([\n {\n id: "React",\n title: "Learn React",\n done: true\n },\n {\n id: "Immer",\n title: "Try Immer",\n done: false\n }\n ]);\n\n const handleToggle = useCallback((id) => {\n setTodos((draft) => {\n const todo = draft.find((todo) => todo.id === id);\n todo.done = !todo.done;\n });\n }, []);\n\n const handleAdd = useCallback(() => {\n setTodos((draft) => {\n draft.push({\n id: "todo_" + Math.random(),\n title: "A new todo",\n done: false\n });\n });\n }, []);\n\n // etc\n')),(0,o.kt)("p",null,"For the full demo see ",(0,o.kt)("a",{parentName:"p",href:"https://codesandbox.io/s/use-immer-bvd5v?file=/src/index.js"},"CodeSandbox"),"."),(0,o.kt)("h2",{id:"usereducer--immer"},"useReducer + Immer"),(0,o.kt)("p",null,"Similarly to ",(0,o.kt)("inlineCode",{parentName:"p"},"useState"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"useReducer")," combines neatly with Immer as well, as demonstrated in this ",(0,o.kt)("a",{parentName:"p",href:"https://codesandbox.io/s/immer-usereducer-bqpzn?file=/src/index.js:0-1018"},"CodeSandbox"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import React, {useCallback, useReducer} from "react"\nimport {produce} from "immer"\n\nconst TodoList = () => {\n const [todos, dispatch] = useReducer(\n produce((draft, action) => {\n switch (action.type) {\n case "toggle":\n const todo = draft.find(todo => todo.id === action.id)\n todo.done = !todo.done\n break\n case "add":\n draft.push({\n id: action.id,\n title: "A new todo",\n done: false\n })\n break\n default:\n break\n }\n }),\n [\n /* initial todos */\n ]\n )\n\n const handleToggle = useCallback(id => {\n dispatch({\n type: "toggle",\n id\n })\n }, [])\n\n const handleAdd = useCallback(() => {\n dispatch({\n type: "add",\n id: "todo_" + Math.random()\n })\n }, [])\n\n // etc\n}\n')),(0,o.kt)("h2",{id:"useimmerreducer"},"useImmerReducer"),(0,o.kt)("p",null,"...which again, can be slightly shorted by ",(0,o.kt)("inlineCode",{parentName:"p"},"useImmerReducer")," from the ",(0,o.kt)("inlineCode",{parentName:"p"},"use-immer")," package (",(0,o.kt)("a",{parentName:"p",href:"https://codesandbox.io/s/useimmerreducer-sycpb?file=/src/index.js"},"demo"),"):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import React, { useCallback } from "react";\nimport { useImmerReducer } from "use-immer";\n\nconst TodoList = () => {\n const [todos, dispatch] = useImmerReducer(\n (draft, action) => {\n switch (action.type) {\n case "toggle":\n const todo = draft.find((todo) => todo.id === action.id);\n todo.done = !todo.done;\n break;\n case "add":\n draft.push({\n id: action.id,\n title: "A new todo",\n done: false\n });\n break;\n default:\n break;\n }\n },\n [ /* initial todos */ ]\n );\n\n //etc\n\n')),(0,o.kt)("h2",{id:"redux--immer"},"Redux + Immer"),(0,o.kt)("p",null,"Redux + Immer is extensively covered in the documentation of ",(0,o.kt)("a",{parentName:"p",href:"https://redux-toolkit.js.org/usage/immer-reducers"},"Redux Toolkit"),". For Redux without Redux Toolkit, the same trick as applied to ",(0,o.kt)("inlineCode",{parentName:"p"},"useReducer")," above can be applied: wrap the reducer function with ",(0,o.kt)("inlineCode",{parentName:"p"},"produce"),", and you can safely mutate the draft!"),(0,o.kt)("p",null,"For example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\n// Reducer with initial state\nconst INITIAL_STATE = [\n /* bunch of todos */\n]\n\nconst todosReducer = produce((draft, action) => {\n switch (action.type) {\n case "toggle":\n const todo = draft.find(todo => todo.id === action.id)\n todo.done = !todo.done\n break\n case "add":\n draft.push({\n id: action.id,\n title: "A new todo",\n done: false\n })\n break\n default:\n break\n }\n})\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/17896441.9ee3f929.js b/assets/js/17896441.9ee3f929.js new file mode 100644 index 00000000..0bf6aa2b --- /dev/null +++ b/assets/js/17896441.9ee3f929.js @@ -0,0 +1 @@ +(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[918],{3905:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>v});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=s(n),p=r,v=d["".concat(c,".").concat(p)]||d[p]||m[p]||l;return n?a.createElement(v,o(o({ref:t},u),{},{components:n})):a.createElement(v,o({ref:t},u))}));function v(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var s=2;s{"use strict";n.r(t),n.d(t,{default:()=>$t});var a=n(7294),r=n(1944),l=n(4700),o=a.createContext(null);function i(e){var t=e.children,n=function(e){return(0,a.useMemo)((function(){return{metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}}),[e])}(e.content);return a.createElement(o.Provider,{value:n},t)}function c(){var e=(0,a.useContext)(o);if(null===e)throw new l.i6("DocProvider");return e}function s(){var e,t=c(),n=t.metadata,l=t.frontMatter,o=t.assets;return a.createElement(r.d,{title:n.title,description:n.description,keywords:l.keywords,image:null!=(e=o.image)?e:l.image})}var u=n(6010),d=n(7524),m=n(3117),p=n(5999),v=n(9960);function f(e){var t=e.permalink,n=e.title,r=e.subLabel,l=e.isNext;return a.createElement(v.Z,{className:(0,u.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},r&&a.createElement("div",{className:"pagination-nav__sublabel"},r),a.createElement("div",{className:"pagination-nav__label"},n))}function h(e){var t=e.previous,n=e.next;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,p.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&a.createElement(f,(0,m.Z)({},t,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(f,(0,m.Z)({},n,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function g(){var e=c().metadata;return a.createElement(h,{previous:e.previous,next:e.next})}var b=n(2263),E=n(143),y=n(5281),k=n(373),N=n(4477);var L={unreleased:function(e){var t=e.siteTitle,n=e.versionMetadata;return a.createElement(p.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){var t=e.siteTitle,n=e.versionMetadata;return a.createElement(p.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function C(e){var t=L[e.versionMetadata.banner];return a.createElement(t,e)}function Z(e){var t=e.versionLabel,n=e.to,r=e.onClick;return a.createElement(p.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(v.Z,{to:n,onClick:r},a.createElement(p.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function T(e){var t,n=e.className,r=e.versionMetadata,l=(0,b.Z)().siteConfig.title,o=(0,E.gA)({failfast:!0}).pluginId,i=(0,k.J)(o).savePreferredVersionName,c=(0,E.Jo)(o),s=c.latestDocSuggestion,d=c.latestVersionSuggestion,m=null!=s?s:(t=d).docs.find((function(e){return e.id===t.mainDocId}));return a.createElement("div",{className:(0,u.Z)(n,y.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(C,{siteTitle:l,versionMetadata:r})),a.createElement("div",{className:"margin-top--md"},a.createElement(Z,{versionLabel:d.label,to:m.path,onClick:function(){return i(d.name)}})))}function _(e){var t=e.className,n=(0,N.E)();return n.banner?a.createElement(T,{className:t,versionMetadata:n}):null}function w(e){var t=e.className,n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,u.Z)(t,y.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(p.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function x(e){var t=e.lastUpdatedAt,n=e.formattedLastUpdatedAt;return a.createElement(p.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function B(e){var t=e.lastUpdatedBy;return a.createElement(p.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function O(e){var t=e.lastUpdatedAt,n=e.formattedLastUpdatedAt,r=e.lastUpdatedBy;return a.createElement("span",{className:y.k.common.lastUpdated},a.createElement(p.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(x,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:r?a.createElement(B,{lastUpdatedBy:r}):""}},"Last updated{atDate}{byUser}"),!1)}var j=n(102);const A="iconEdit_Z9Sw";var H=["className"];function M(e){var t=e.className,n=(0,j.Z)(e,H);return a.createElement("svg",(0,m.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(A,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function S(e){var t=e.editUrl;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:y.k.common.editThisPage},a.createElement(M,null),a.createElement(p.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}const I="tag_zVej",P="tagRegular_sFm0",U="tagWithCount_h2kH";function z(e){var t=e.permalink,n=e.label,r=e.count;return a.createElement(v.Z,{href:t,className:(0,u.Z)(I,r?U:P)},n,r&&a.createElement("span",null,r))}const V="tags_jXut",D="tag_QGVx";function R(e){var t=e.tags;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(p.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,u.Z)(V,"padding--none","margin-left--sm")},t.map((function(e){var t=e.label,n=e.permalink;return a.createElement("li",{key:n,className:D},a.createElement(z,{label:t,permalink:n}))}))))}const W="lastUpdated_vwxv";function F(e){return a.createElement("div",{className:(0,u.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(R,e)))}function q(e){var t=e.editUrl,n=e.lastUpdatedAt,r=e.lastUpdatedBy,l=e.formattedLastUpdatedAt;return a.createElement("div",{className:(0,u.Z)(y.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(S,{editUrl:t})),a.createElement("div",{className:(0,u.Z)("col",W)},(n||r)&&a.createElement(O,{lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:r})))}function G(){var e=c().metadata,t=e.editUrl,n=e.lastUpdatedAt,r=e.formattedLastUpdatedAt,l=e.lastUpdatedBy,o=e.tags,i=o.length>0,s=!!(t||n||l);return i||s?a.createElement("footer",{className:(0,u.Z)(y.k.docs.docFooter,"docusaurus-mt-lg")},i&&a.createElement(F,{tags:o}),s&&a.createElement(q,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r})):null}var Y=n(6043),$=n(6668),J=["parentIndex"];function Q(e){var t=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),n=Array(7).fill(-1);t.forEach((function(e,t){var a=n.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),n[e.level]=t}));var a=[];return t.forEach((function(e){var n=e.parentIndex,r=(0,j.Z)(e,J);n>=0?t[n].children.push(r):a.push(r)})),a}function X(e){var t=e.toc,n=e.minHeadingLevel,a=e.maxHeadingLevel;return t.flatMap((function(e){var t=X({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[Object.assign({},e,{children:t})]:t}))}function K(e){var t=e.getBoundingClientRect();return t.top===t.bottom?K(e.parentNode):t}function ee(e,t){var n,a,r=t.anchorTopOffset,l=e.find((function(e){return K(e).top>=r}));return l?function(e){return e.top>0&&e.bottom0})).map((function(e){return[e-1,[i]]}));return{lineClassNames:Object.fromEntries(c),code:n}}if(void 0===a)return{lineClassNames:{},code:n};for(var s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Ie(["js","jsBlock"],t);case"jsx":case"tsx":return Ie(["js","jsBlock","jsx"],t);case"html":return Ie(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Ie(["bash"],t);case"markdown":case"md":return Ie(["html","jsx","bash"],t);default:return Ie(Object.keys(Se),t)}}(a,r),u=n.split("\n"),d=Object.fromEntries(r.map((function(e){return[e.className,{start:0,range:""}]}))),m=Object.fromEntries(r.filter((function(e){return e.line})).map((function(e){var t=e.className;return[e.line,t]}))),p=Object.fromEntries(r.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.start,t]}))),v=Object.fromEntries(r.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.end,t]}))),f=0;f0&&e[n-1]===t?e:e.concat(t)},Ke=function(e,t){var n=e.plain,a=Object.create(null),r=e.styles.reduce((function(e,n){var a=n.languages,r=n.style;return a&&!a.includes(t)||n.types.forEach((function(t){var n=$e({},e[t],r);e[t]=n})),e}),a);return r.root=n,r.plain=$e({},n,{backgroundColor:null}),r};function et(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}const tt=function(e){function t(){for(var t=this,n=[],a=arguments.length;a--;)n[a]=arguments[a];e.apply(this,n),Ye(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?Ke(e.theme,e.language):void 0;return t.themeDict=n})),Ye(this,"getLineProps",(function(e){var n=e.key,a=e.className,r=e.style,l=$e({},et(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),o=t.getThemeDict(t.props);return void 0!==o&&(l.style=o.plain),void 0!==r&&(l.style=void 0!==l.style?$e({},l.style,r):r),void 0!==n&&(l.key=n),a&&(l.className+=" "+a),l})),Ye(this,"getStyleForToken",(function(e){var n=e.types,a=e.empty,r=n.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===r&&"plain"===n[0])return a?{display:"inline-block"}:void 0;if(1===r&&!a)return l[n[0]];var o=a?{display:"inline-block"}:{},i=n.map((function(e){return l[e]}));return Object.assign.apply(Object,[o].concat(i))}})),Ye(this,"getTokenProps",(function(e){var n=e.key,a=e.className,r=e.style,l=e.token,o=$e({},et(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==r&&(o.style=void 0!==o.style?$e({},o.style,r):r),void 0!==n&&(o.key=n),a&&(o.className+=" "+a),o})),Ye(this,"tokenize",(function(e,t,n,a){var r={code:t,grammar:n,language:a,tokens:[]};e.hooks.run("before-tokenize",r);var l=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,a=e.code,r=e.children,l=this.getThemeDict(this.props),o=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],a=[0],r=[e.length],l=0,o=0,i=[],c=[i];o>-1;){for(;(l=a[o]++)0?u:["plain"],s=d):(u=Xe(u,d.type),d.alias&&(u=Xe(u,d.alias)),s=d.content),"string"==typeof s){var m=s.split(Je),p=m.length;i.push({types:u,content:m[0]});for(var v=1;v0&&(i=o.getRangeAt(0)),a.append(r),r.select(),r.selectionStart=0,r.selectionEnd=e.length;var c=!1;try{c=document.execCommand("copy")}catch(s){}r.remove(),i&&(o.removeAllRanges(),o.addRange(i)),l&&l.focus()}(t),o(!0),i.current=window.setTimeout((function(){o(!1)}),1e3)}),[t]);return(0,a.useEffect)((function(){return function(){return window.clearTimeout(i.current)}}),[]),a.createElement("button",{type:"button","aria-label":l?(0,p.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,p.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,p.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",n,ot.copyButton,l&&ot.copyButtonCopied),onClick:c},a.createElement("span",{className:ot.copyButtonIcons,"aria-hidden":"true"},a.createElement("svg",{className:ot.copyButtonIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})),a.createElement("svg",{className:ot.copyButtonSuccessIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}const ct="wordWrapButtonIcon_Bwma",st="wordWrapButtonEnabled_EoeP";function ut(e){var t=e.className,n=e.onClick,r=e.isEnabled,l=(0,p.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return a.createElement("button",{type:"button",onClick:n,className:(0,u.Z)("clean-btn",t,r&&st),"aria-label":l,title:l},a.createElement("svg",{className:ct,viewBox:"0 0 24 24","aria-hidden":"true"},a.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function dt(e){var t,n,r,l,o,i,c,s,d,p,v,f=e.children,h=e.className,g=void 0===h?"":h,b=e.metastring,E=e.title,y=e.showLineNumbers,k=e.language,N=(0,$.L)().prism,L=N.defaultLanguage,C=N.magicComments,Z=null!=(t=null!=k?k:null==(n=g.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:n.replace(/language-/,""))?t:L,T=Be(),_=(r=(0,a.useState)(!1),l=r[0],o=r[1],i=(0,a.useState)(!1),c=i[0],s=i[1],d=(0,a.useRef)(null),p=(0,a.useCallback)((function(){var e=d.current.querySelector("code");l?e.removeAttribute("style"):(e.style.whiteSpace="pre-wrap",e.style.overflowWrap="anywhere"),o((function(e){return!e}))}),[d,l]),v=(0,a.useCallback)((function(){var e=d.current,t=e.scrollWidth>e.clientWidth||d.current.querySelector("code").hasAttribute("style");s(t)}),[d]),Fe(d,v),(0,a.useEffect)((function(){v()}),[l,v]),(0,a.useEffect)((function(){return window.addEventListener("resize",v,{passive:!0}),function(){window.removeEventListener("resize",v)}}),[v]),{codeBlockRef:d,isEnabled:l,isCodeScrollable:c,toggle:p}),w=function(e){var t,n;return null!=(t=null==e||null==(n=e.match(He))?void 0:n.groups.title)?t:""}(b)||E,x=Pe(f,{metastring:b,language:Z,magicComments:C}),B=x.lineClassNames,O=x.code,j=null!=y?y:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(b);return a.createElement(Ve,{as:"div",className:(0,u.Z)(g,Z&&!g.includes("language-"+Z)&&"language-"+Z)},w&&a.createElement("div",{className:De.codeBlockTitle},w),a.createElement("div",{className:De.codeBlockContent},a.createElement(tt,(0,m.Z)({},Ge,{theme:T,code:O,language:null!=Z?Z:"text"}),(function(e){var t=e.className,n=e.tokens,r=e.getLineProps,l=e.getTokenProps;return a.createElement("pre",{tabIndex:0,ref:_.codeBlockRef,className:(0,u.Z)(t,De.codeBlock,"thin-scrollbar")},a.createElement("code",{className:(0,u.Z)(De.codeBlockLines,j&&De.codeBlockLinesWithNumbering)},n.map((function(e,t){return a.createElement(lt,{key:t,line:e,getLineProps:r,getTokenProps:l,classNames:B[t],showLineNumbers:j})}))))})),a.createElement("div",{className:De.buttonGroup},(_.isEnabled||_.isCodeScrollable)&&a.createElement(ut,{className:De.codeButton,onClick:function(){return _.toggle()},isEnabled:_.isEnabled}),a.createElement(it,{className:De.codeButton,code:O}))))}var mt=["children"];function pt(e){var t=e.children,n=(0,j.Z)(e,mt),r=(0,we.Z)(),l=function(e){return a.Children.toArray(e).some((function(e){return(0,a.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(t),o="string"==typeof l?dt:Re;return a.createElement(o,(0,m.Z)({key:String(r)},n),l)}const vt="details_lb9f",ft="isBrowser_bmU9",ht="collapsibleContent_i85q";var gt=["summary","children"];function bt(e){return!!e&&("SUMMARY"===e.tagName||bt(e.parentElement))}function Et(e,t){return!!e&&(e===t||Et(e.parentElement,t))}function yt(e){var t=e.summary,n=e.children,r=(0,j.Z)(e,gt),l=(0,we.Z)(),o=(0,a.useRef)(null),i=(0,Y.u)({initialState:!r.open}),c=i.collapsed,s=i.setCollapsed,d=(0,a.useState)(r.open),p=d[0],v=d[1],f=a.isValidElement(t)?t:a.createElement("summary",null,null!=t?t:"Details");return a.createElement("details",(0,m.Z)({},r,{ref:o,open:p,"data-collapsed":c,className:(0,u.Z)(vt,l&&ft,r.className),onMouseDown:function(e){bt(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var t=e.target;bt(t)&&Et(t,o.current)&&(e.preventDefault(),c?(s(!1),v(!0)):s(!0))}}),f,a.createElement(Y.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){s(e),v(!e)}},a.createElement("div",{className:ht},n)))}const kt="details_b_Ee";function Nt(e){var t=Object.assign({},(function(e){if(null==e)throw new TypeError("Cannot destructure "+e)}(e),e));return a.createElement(yt,(0,m.Z)({},t,{className:(0,u.Z)("alert alert--info",kt,t.className)}))}function Lt(e){return a.createElement(Ce,e)}const Ct="containsTaskList_mC6p";const Zt="img_ev3q";const Tt="admonition_LlT9",_t="admonitionHeading_tbUL",wt="admonitionIcon_kALy",xt="admonitionContent_S0QG";var Bt={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(p.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(p.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(p.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},Ot={secondary:"note",important:"info",success:"tip",warning:"danger"};function jt(e){var t,n=function(e){var t=a.Children.toArray(e),n=t.find((function(e){var t;return a.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return{mdxAdmonitionTitle:n,rest:r}}(e.children),r=n.mdxAdmonitionTitle,l=n.rest;return Object.assign({},e,{title:null!=(t=e.title)?t:r,children:l})}const At={head:function(e){var t=a.Children.map(e.children,(function(e){return a.isValidElement(e)?function(e){var t;if(null!=(t=e.props)&&t.mdxType&&e.props.originalType){var n=e.props,r=(n.mdxType,n.originalType,(0,j.Z)(n,_e));return a.createElement(e.props.originalType,r)}return e}(e):e}));return a.createElement(Te.Z,e,t)},code:function(e){var t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((function(e){var n;return"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(null==(n=e.props)?void 0:n.mdxType)}))?a.createElement("code",e):a.createElement(pt,e)},a:function(e){return a.createElement(v.Z,e)},pre:function(e){var t;return a.createElement(pt,(0,a.isValidElement)(e.children)&&"code"===(null==(t=e.children.props)?void 0:t.originalType)?e.children.props:Object.assign({},e))},details:function(e){var t=a.Children.toArray(e.children),n=t.find((function(e){var t;return a.isValidElement(e)&&"summary"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return a.createElement(Nt,(0,m.Z)({},e,{summary:n}),r)},ul:function(e){return a.createElement("ul",(0,m.Z)({},e,{className:(t=e.className,(0,u.Z)(t,(null==t?void 0:t.includes("contains-task-list"))&&Ct))}));var t},img:function(e){return a.createElement("img",(0,m.Z)({loading:"lazy"},e,{className:(t=e.className,(0,u.Z)(t,Zt))}));var t},h1:function(e){return a.createElement(Lt,(0,m.Z)({as:"h1"},e))},h2:function(e){return a.createElement(Lt,(0,m.Z)({as:"h2"},e))},h3:function(e){return a.createElement(Lt,(0,m.Z)({as:"h3"},e))},h4:function(e){return a.createElement(Lt,(0,m.Z)({as:"h4"},e))},h5:function(e){return a.createElement(Lt,(0,m.Z)({as:"h5"},e))},h6:function(e){return a.createElement(Lt,(0,m.Z)({as:"h6"},e))},admonition:function(e){var t=jt(e),n=t.children,r=t.type,l=t.title,o=t.icon,i=function(e){var t,n=null!=(t=Ot[e])?t:e,a=Bt[n];return a||(console.warn('No admonition config found for admonition type "'+n+'". Using Info as fallback.'),Bt.info)}(r),c=null!=l?l:i.label,s=i.iconComponent,d=null!=o?o:a.createElement(s,null);return a.createElement("div",{className:(0,u.Z)(y.k.common.admonition,y.k.common.admonitionType(e.type),"alert","alert--"+i.infimaClassName,Tt)},a.createElement("div",{className:_t},a.createElement("span",{className:wt},d),c),a.createElement("div",{className:xt},n))},mermaid:n(1875).Z};function Ht(e){var t=e.children;return a.createElement(Ze.Zo,{components:At},t)}function Mt(e){var t,n,r,l,o=e.children,i=(t=c(),n=t.metadata,r=t.frontMatter,l=t.contentTitle,r.hide_title||void 0!==l?null:n.title);return a.createElement("div",{className:(0,u.Z)(y.k.docs.docMarkdown,"markdown")},i&&a.createElement("header",null,a.createElement(Ce,{as:"h1"},i)),a.createElement(Ht,null,o))}var St=n(3651),It=n(8596),Pt=n(4996);function Ut(e){return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const zt="breadcrumbHomeIcon_YNFT";function Vt(){var e=(0,Pt.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(v.Z,{"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(Ut,{className:zt})))}const Dt="breadcrumbsContainer_Z_bl";function Rt(e){var t=e.children,n=e.href,r="breadcrumbs__link";return e.isLast?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(v.Z,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function Wt(e){var t=e.children,n=e.active,r=e.index,l=e.addMicrodata;return a.createElement("li",(0,m.Z)({},l&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,u.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(r+1)}))}function Ft(){var e=(0,St.s1)(),t=(0,It.Ns)();return e?a.createElement("nav",{className:(0,u.Z)(y.k.docs.docBreadcrumbs,Dt),"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(Vt,null),e.map((function(t,n){var r=n===e.length-1;return a.createElement(Wt,{key:n,active:r,index:n,addMicrodata:!!t.href},a.createElement(Rt,{href:t.href,isLast:r},t.label))})))):null}const qt="docItemContainer_Djhp",Gt="docItemCol_VOVn";function Yt(e){var t,n,r,l,o,i,s=e.children,m=(t=c(),n=t.frontMatter,r=t.toc,l=(0,d.i)(),o=n.hide_table_of_contents,i=!o&&r.length>0,{hidden:o,mobile:i?a.createElement(he,null):void 0,desktop:!i||"desktop"!==l&&"ssr"!==l?void 0:a.createElement(ye,null)});return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,u.Z)("col",!m.hidden&&Gt)},a.createElement(_,null),a.createElement("div",{className:qt},a.createElement("article",null,a.createElement(Ft,null),a.createElement(w,null),m.mobile,a.createElement(Mt,null,s),a.createElement(G,null)),a.createElement(g,null))),m.desktop&&a.createElement("div",{className:"col col--3"},m.desktop))}function $t(e){var t="docs-doc-id-"+e.content.metadata.unversionedId,n=e.content;return a.createElement(i,{content:e.content},a.createElement(r.FG,{className:t},a.createElement(s,null),a.createElement(Yt,null,a.createElement(n,null))))}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>i,q:()=>o});var a=n(7294),r=n(4700),l=a.createContext(null);function o(e){var t=e.children,n=e.version;return a.createElement(l.Provider,{value:n},t)}function i(){var e=(0,a.useContext)(l);if(null===e)throw new r.i6("DocsVersionProvider");return e}},7594:(e,t)=>{function n(e){let t,n=[];for(let a of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(a))n.push(parseInt(a,10));else if(t=a.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,a,r,l]=t;if(a&&l){a=parseInt(a),l=parseInt(l);const e=a{n.r(t),n.d(t,{default:()=>xe});var a=n(7294),r=n(6010),l=n(1944),i=n(5281),o=n(3320),c=n(3651),s=n(4477),d=n(1116),m=n(7961),u=n(5999),b=n(2466),p=n(5936);const v="backToTopButton_sjWU",h="backToTopButtonShow_xfvO";function E(){var e=function(e){var t=e.threshold,n=(0,a.useState)(!1),r=n[0],l=n[1],i=(0,a.useRef)(!1),o=(0,b.Ct)(),c=o.startScroll,s=o.cancelScroll;return(0,b.RF)((function(e,n){var a=e.scrollY,r=null==n?void 0:n.scrollY;r&&(i.current?i.current=!1:a>=r?(s(),l(!1)):a{n.r(t),n.d(t,{default:()=>o});var a=n(7294),r=n(5999),l=n(1944),i=n(7961);function o(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,r.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(i.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(r.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(r.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(r.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},4477:(e,t,n)=>{n.d(t,{E:()=>o,q:()=>i});var a=n(7294),r=n(4700),l=a.createContext(null);function i(e){var t=e.children,n=e.version;return a.createElement(l.Provider,{value:n},t)}function o(){var e=(0,a.useContext)(l);if(null===e)throw new r.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/assets/js/2b810e00.dd4c0b92.js b/assets/js/2b810e00.dd4c0b92.js new file mode 100644 index 00000000..732b7de9 --- /dev/null +++ b/assets/js/2b810e00.dd4c0b92.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[222],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):d(d({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=p(n),m=a,f=l["".concat(s,".").concat(m)]||l[m]||c[m]||o;return n?r.createElement(f,d(d({ref:t},u),{},{components:n})):r.createElement(f,d({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,d=new Array(o);d[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[l]="string"==typeof e?e:a,d[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>l});var r=n(3117),a=n(102),o=(n(7294),n(3905)),d=["components"],i={id:"update-patterns",title:"Update patterns"},s=void 0,p={unversionedId:"update-patterns",id:"update-patterns",title:"Update patterns",description:"Working with immutable data, before Immer, used to mean learning all the immutable update patterns.",source:"@site/docs/update-patterns.md",sourceDirName:".",slug:"/update-patterns",permalink:"/immer/update-patterns",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/update-patterns.md",tags:[],version:"current",frontMatter:{id:"update-patterns",title:"Update patterns"},sidebar:"Immer",previous:{title:"React & Immer",permalink:"/immer/example-setstate"},next:{title:"API overview",permalink:"/immer/api"}},u={},l=[{value:"Object mutations",id:"object-mutations",level:3},{value:"Array mutations",id:"array-mutations",level:3},{value:"Nested data structures",id:"nested-data-structures",level:3}],c={toc:l};function m(e){var t=e.components,n=(0,a.Z)(e,d);return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("center",null,(0,o.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,o.kt)("p",null,"Working with immutable data, before Immer, used to mean learning all the immutable update patterns."),(0,o.kt)("p",null,"To help 'unlearning' those patterns here is an overview how you can leverage the built-in JavaScript APIs to update objects and collections:"),(0,o.kt)("h3",{id:"object-mutations"},"Object mutations"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\nconst todosObj = {\n id1: {done: false, body: "Take out the trash"},\n id2: {done: false, body: "Check Email"}\n}\n\n// add\nconst addedTodosObj = produce(todosObj, draft => {\n draft["id3"] = {done: false, body: "Buy bananas"}\n})\n\n// delete\nconst deletedTodosObj = produce(todosObj, draft => {\n delete draft["id1"]\n})\n\n// update\nconst updatedTodosObj = produce(todosObj, draft => {\n draft["id1"].done = true\n})\n')),(0,o.kt)("h3",{id:"array-mutations"},"Array mutations"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\nconst todosArray = [\n {id: "id1", done: false, body: "Take out the trash"},\n {id: "id2", done: false, body: "Check Email"}\n]\n\n// add\nconst addedTodosArray = produce(todosArray, draft => {\n draft.push({id: "id3", done: false, body: "Buy bananas"})\n})\n\n// delete by index\nconst deletedTodosArray = produce(todosArray, draft => {\n draft.splice(3 /*the index */, 1)\n})\n\n// update by index\nconst updatedTodosArray = produce(todosArray, draft => {\n draft[3].done = true\n})\n\n// insert at index\nconst updatedTodosArray = produce(todosArray, draft => {\n draft.splice(3, 0, {id: "id3", done: false, body: "Buy bananas"})\n})\n\n// remove last item\nconst updatedTodosArray = produce(todosArray, draft => {\n draft.pop()\n})\n\n// remove first item\nconst updatedTodosArray = produce(todosArray, draft => {\n draft.shift()\n})\n\n// add item at the beginning of the array\nconst addedTodosArray = produce(todosArray, draft => {\n draft.unshift({id: "id3", done: false, body: "Buy bananas"})\n})\n\n// delete by id\nconst deletedTodosArray = produce(todosArray, draft => {\n const index = draft.findIndex(todo => todo.id === "id1")\n if (index !== -1) draft.splice(index, 1)\n})\n\n// update by id\nconst updatedTodosArray = produce(todosArray, draft => {\n const index = draft.findIndex(todo => todo.id === "id1")\n if (index !== -1) draft[index].done = true\n})\n\n// filtering items\nconst updatedTodosArray = produce(todosArray, draft => {\n // creating a new state is simpler in this example\n // (note that we don\'t need produce in this case,\n // but as shown below, if the filter is not on the top\n // level produce is still pretty useful)\n return draft.filter(todo => todo.done)\n})\n')),(0,o.kt)("h3",{id:"nested-data-structures"},"Nested data structures"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\n// example complex data structure\nconst store = {\n users: new Map([\n [\n "17",\n {\n name: "Michel",\n todos: [\n {\n title: "Get coffee",\n done: false\n }\n ]\n }\n ]\n ])\n}\n\n// updating something deeply in-an-object-in-an-array-in-a-map-in-an-object:\nconst nextStore = produce(store, draft => {\n draft.users.get("17").todos[0].done = true\n})\n\n// filtering out all unfinished todo\'s\nconst nextStore = produce(store, draft => {\n const user = draft.users.get("17")\n // when filtering, creating a fresh collection is simpler than\n // removing irrelevant items\n user.todos = user.todos.filter(todo => todo.done)\n})\n')),(0,o.kt)("p",null,"Note that many array operations can be used to insert multiple items at once by passing multiple arguments or using the spread operation: ",(0,o.kt)("inlineCode",{parentName:"p"},"todos.unshift(...items)"),"."),(0,o.kt)("p",null,"Note that when working with arrays that contain objects that are typically identified by some id, we recommend to use ",(0,o.kt)("inlineCode",{parentName:"p"},"Map")," or index based objects (as shown above) instead of performing frequent find operations, lookup tables perform much better in general."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5fbc5cf1.01b5063b.js b/assets/js/5fbc5cf1.01b5063b.js new file mode 100644 index 00000000..75120e58 --- /dev/null +++ b/assets/js/5fbc5cf1.01b5063b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[207],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>k});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=n.createContext({}),m=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},d=function(t){var e=m(t.components);return n.createElement(o.Provider,{value:e},t.children)},s="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,d=p(t,["components","mdxType","originalType","parentName"]),s=m(a),c=r,k=s["".concat(o,".").concat(c)]||s[c]||u[c]||l;return a?n.createElement(k,i(i({ref:e},d),{},{components:a})):n.createElement(k,i({ref:e},d))}));function k(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=c;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=t,p[s]="string"==typeof t?t:r,i[1]=p;for(var m=2;m{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>c,frontMatter:()=>p,metadata:()=>m,toc:()=>s});var n=a(3117),r=a(102),l=(a(7294),a(3905)),i=["components"],p={id:"api",title:"API overview"},o=void 0,m={unversionedId:"api",id:"api",title:"API overview",description:"| Exported name | Description | Section |",source:"@site/docs/api.md",sourceDirName:".",slug:"/api",permalink:"/immer/api",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/api.md",tags:[],version:"current",frontMatter:{id:"api",title:"API overview"},sidebar:"Immer",previous:{title:"Update patterns",permalink:"/immer/update-patterns"},next:{title:"Map and Set",permalink:"/immer/map-set"}},d={},s=[{value:"Importing immer",id:"importing-immer",level:2}],u={toc:s};function c(t){var e=t.components,a=(0,r.Z)(t,i);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("center",null,(0,l.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Exported name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Section"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"produce")),(0,l.kt)("td",{parentName:"tr",align:null},"The core API of Immer: ",(0,l.kt)("inlineCode",{parentName:"td"},'import {produce} from "immer"')),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/produce"},"Produce"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"applyPatches")),(0,l.kt)("td",{parentName:"tr",align:null},"Given a base state or draft, and a set of patches, applies the patches"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/patches"},"Patches"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"castDraft")),(0,l.kt)("td",{parentName:"tr",align:null},"Converts any immutable type to its mutable counterpart. This is just a cast and doesn't actually do anything."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/typescript"},"TypeScript"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"castImmutable")),(0,l.kt)("td",{parentName:"tr",align:null},"Converts any mutable type to its immutable counterpart. This is just a cast and doesn't actually do anything."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/typescript"},"TypeScript"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"createDraft")),(0,l.kt)("td",{parentName:"tr",align:null},"Given a base state, creates a mutable draft for which any modifications will be recorded"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/async"},"Async"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"current")),(0,l.kt)("td",{parentName:"tr",align:null},"Given a draft object (doesn't have to be a tree root), takes a snapshot of the current state of the draft"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/current"},"Current"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Draft")),(0,l.kt)("td",{parentName:"tr",align:null},"Exposed TypeScript type to convert an immutable type to a mutable type"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/typescript"},"TypeScript"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enableMapSet()")),(0,l.kt)("td",{parentName:"tr",align:null},"Enables support for ",(0,l.kt)("inlineCode",{parentName:"td"},"Map")," and ",(0,l.kt)("inlineCode",{parentName:"td"},"Set")," collections."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/installation#pick-your-immer-version"},"Installation"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enablePatches()")),(0,l.kt)("td",{parentName:"tr",align:null},"Enables support for JSON patches."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"./installation#pick-your-immer-version"},"Installation"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"finishDraft")),(0,l.kt)("td",{parentName:"tr",align:null},"Given an draft created using ",(0,l.kt)("inlineCode",{parentName:"td"},"createDraft"),", seals the draft and produces and returns the next immutable state that captures all the changes"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/async"},"Async"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"freeze(obj, deep?)")),(0,l.kt)("td",{parentName:"tr",align:null},"Freezes draftable objects. Returns the original object. By default freezes shallowly, but if the second argument is ",(0,l.kt)("inlineCode",{parentName:"td"},"true")," it will freeze recursively."),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Immer")),(0,l.kt)("td",{parentName:"tr",align:null},'constructor that can be used to create a second "immer" instance (exposing all APIs listed in this instance), that doesn\'t share its settings with global instance.'),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"immerable")),(0,l.kt)("td",{parentName:"tr",align:null},"Symbol that can be added to a constructor or prototype, to indicate that Immer should treat the class as something that can be safely drafted"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/complex-objects"},"Classes"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Immutable")),(0,l.kt)("td",{parentName:"tr",align:null},"Exposed TypeScript type to convert mutable types to immutable types"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"isDraft")),(0,l.kt)("td",{parentName:"tr",align:null},"Returns true if the given object is a draft object"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"isDraftable")),(0,l.kt)("td",{parentName:"tr",align:null},"Returns true if Immer is capable of turning this object into a draft. Which is true for: arrays, objects without prototype, objects with ",(0,l.kt)("inlineCode",{parentName:"td"},"Object")," as their prototype, objects that have the ",(0,l.kt)("inlineCode",{parentName:"td"},"immerable")," symbol on their constructor or prototype"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"nothing")),(0,l.kt)("td",{parentName:"tr",align:null},"Value that can be returned from a recipe, to indicate that the value ",(0,l.kt)("inlineCode",{parentName:"td"},"undefined")," should be produced"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/return"},"Return"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"original")),(0,l.kt)("td",{parentName:"tr",align:null},"Given a draft object (doesn't have to be a tree root), returns the original object at the same path in the original state tree, if present"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/original"},"Original"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Patch")),(0,l.kt)("td",{parentName:"tr",align:null},"Exposed TypeScript type, describes the shape of an (inverse) patch object"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/patches"},"Patches"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"produceWithPatches")),(0,l.kt)("td",{parentName:"tr",align:null},"Works the same as ",(0,l.kt)("inlineCode",{parentName:"td"},"produce"),", but instead of just returning the produced object, it returns a tuple, consisting of ",(0,l.kt)("inlineCode",{parentName:"td"},"[result, patches, inversePatches]"),"."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/patches"},"Patches"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"setAutoFreeze")),(0,l.kt)("td",{parentName:"tr",align:null},"Enables / disables automatic freezing of the trees produces. By default enabled."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/freezing"},"Freezing"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"setUseStrictShallowCopy")),(0,l.kt)("td",{parentName:"tr",align:null},"Can be used to enable strict shallow copy. If enable, immer copies non-enumerable properties as much as possible."),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/immer/complex-objects"},"Classes"))))),(0,l.kt)("h2",{id:"importing-immer"},"Importing immer"),(0,l.kt)("p",null,"In most cases, the only thing you need to import from Immer is ",(0,l.kt)("inlineCode",{parentName:"p"},"produce"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n')),(0,l.kt)("p",null,"Note that in older versions, ",(0,l.kt)("inlineCode",{parentName:"p"},"produce")," was also available as default export (e.g. ",(0,l.kt)("inlineCode",{parentName:"p"},'import produce from "immer"')," was also valid, but that is no longer the case to improve eco system compatibility."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/62d444b9.96d43566.js b/assets/js/62d444b9.96d43566.js new file mode 100644 index 00000000..8656f5f4 --- /dev/null +++ b/assets/js/62d444b9.96d43566.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[285],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),p=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(r),u=n,f=c["".concat(l,".").concat(u)]||c[u]||d[u]||o;return r?a.createElement(f,i(i({ref:t},m),{},{components:r})):a.createElement(f,i({ref:t},m))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var a=r(3117),n=r(102),o=(r(7294),r(3905)),i=["components"],s={id:"performance",title:"Immer performance"},l=void 0,p={unversionedId:"performance",id:"performance",title:"Immer performance",description:" d.push(x))")," is exponentially slower than ",(0,o.kt)("inlineCode",{parentName:"p"},"produce(base, d => { for (let x of y) d.push(x)})")))}u.isMDXComponent=!0},9943:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png"}}]); \ No newline at end of file diff --git a/assets/js/74860b1a.14c24b29.js b/assets/js/74860b1a.14c24b29.js new file mode 100644 index 00000000..69993100 --- /dev/null +++ b/assets/js/74860b1a.14c24b29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[133],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),d=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=d(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var d=2;d{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>d,toc:()=>u});var n=r(3117),a=r(102),o=(r(7294),r(3905)),i=["components"],s={id:"pitfalls",title:"Pitfalls"},l=void 0,d={unversionedId:"pitfalls",id:"pitfalls",title:"Pitfalls",description:"Performance tips",source:"@site/docs/pitfalls.md",sourceDirName:".",slug:"/pitfalls",permalink:"/immer/pitfalls",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/pitfalls.md",tags:[],version:"current",frontMatter:{id:"pitfalls",title:"Pitfalls"},sidebar:"Immer",previous:{title:"FAQ",permalink:"/immer/faq"},next:{title:"Built with Immer",permalink:"/immer/built-with"}},p={},u=[{value:"Performance tips",id:"performance-tips",level:3},{value:"Don't reassign the recipe argument",id:"dont-reassign-the-recipe-argument",level:3},{value:"Immer only supports unidirectional trees",id:"immer-only-supports-unidirectional-trees",level:3},{value:"Never explicitly return undefined from a producer",id:"never-explicitly-return-undefined-from-a-producer",level:3},{value:"Don't mutate exotic objects",id:"dont-mutate-exotic-objects",level:3},{value:"Classes should be made draftable or not mutated",id:"classes-should-be-made-draftable-or-not-mutated",level:3},{value:"Only valid indices and length can be mutated on Arrays",id:"only-valid-indices-and-length-can-be-mutated-on-arrays",level:3},{value:"Data not originating from the state will never be drafted",id:"data-not-originating-from-the-state-will-never-be-drafted",level:3},{value:"Immer patches are not necessarily optimal",id:"immer-patches-are-not-necessarily-optimal",level:3},{value:"Always use the result of nested producers",id:"always-use-the-result-of-nested-producers",level:3},{value:"Drafts aren't referentially equal",id:"drafts-arent-referentially-equal",level:3}],c={toc:u};function m(e){var t=e.components,r=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("center",null,(0,o.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,o.kt)("h3",{id:"performance-tips"},"Performance tips"),(0,o.kt)("p",null,"For performance tips, see ",(0,o.kt)("a",{parentName:"p",href:"/immer/performance#performance-tips"},"Performance Tips"),"."),(0,o.kt)("h3",{id:"dont-reassign-the-recipe-argument"},"Don't reassign the recipe argument"),(0,o.kt)("p",null,"Never reassign the ",(0,o.kt)("inlineCode",{parentName:"p"},"draft")," argument (example: ",(0,o.kt)("inlineCode",{parentName:"p"},"draft = myCoolNewState"),"). Instead, either modify the ",(0,o.kt)("inlineCode",{parentName:"p"},"draft")," or return a new state. See ",(0,o.kt)("a",{parentName:"p",href:"/immer/return"},"Returning data from producers"),"."),(0,o.kt)("h3",{id:"immer-only-supports-unidirectional-trees"},"Immer only supports unidirectional trees"),(0,o.kt)("p",null,"Immer assumes your state to be a unidirectional tree. That is, no object should appear twice in the tree, there should be no circular references. There should be exactly one path from the root to any node of the tree."),(0,o.kt)("h3",{id:"never-explicitly-return-undefined-from-a-producer"},"Never explicitly return ",(0,o.kt)("inlineCode",{parentName:"h3"},"undefined")," from a producer"),(0,o.kt)("p",null,"It is possible to return values from producers, except, it is not possible to return ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined")," that way, as it is indistinguishable from not updating the draft at all! If you want to replace the draft with ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined"),", just return ",(0,o.kt)("inlineCode",{parentName:"p"},"nothing")," from the producer."),(0,o.kt)("h3",{id:"dont-mutate-exotic-objects"},"Don't mutate exotic objects"),(0,o.kt)("p",null,"Immer ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/immerjs/immer/issues/504"},"does not support exotic objects")," such as window.location."),(0,o.kt)("h3",{id:"classes-should-be-made-draftable-or-not-mutated"},"Classes should be made draftable or not mutated"),(0,o.kt)("p",null,"You will need to enable your own classes to work properly with Immer. For docs on the topic, check out the section on ",(0,o.kt)("a",{parentName:"p",href:"/immer/complex-objects"},"working with complex objects"),"."),(0,o.kt)("h3",{id:"only-valid-indices-and-length-can-be-mutated-on-arrays"},"Only valid indices and length can be mutated on Arrays"),(0,o.kt)("p",null,"For arrays, only numeric properties and the ",(0,o.kt)("inlineCode",{parentName:"p"},"length")," property can be mutated. Custom properties are not preserved on arrays."),(0,o.kt)("h3",{id:"data-not-originating-from-the-state-will-never-be-drafted"},"Data not originating from the state will never be drafted"),(0,o.kt)("p",null,"Note that data that comes from the closure, and not from the base state, will never be drafted, even when the data has become part of the new draft."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"function onReceiveTodo(todo) {\n const nextTodos = produce(todos, draft => {\n draft.todos[todo.id] = todo\n // Note, because 'todo' is coming from external, and not from the 'draft',\n // it isn't draft so the following modification affects the original todo!\n draft.todos[todo.id].done = true\n\n // The reason for this, is that it means that the behavior of the 2 lines above\n // is equivalent to code, making this whole process more consistent\n todo.done = true\n draft.todos[todo.id] = todo\n })\n}\n")),(0,o.kt)("h3",{id:"immer-patches-are-not-necessarily-optimal"},"Immer patches are not necessarily optimal"),(0,o.kt)("p",null,"The set of patches generated by Immer should be correct, that is, applying them to an equal base object should result in the same end state. However Immer does not guarantee the generated set of patches will be optimal, that is, the minimum set of patches possible."),(0,o.kt)("h3",{id:"always-use-the-result-of-nested-producers"},"Always use the result of nested producers"),(0,o.kt)("p",null,"Nested ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," calls are supported, but note that ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," will ",(0,o.kt)("em",{parentName:"p"},"always")," produce a new state. So even when passing a draft to a nested produce, the changes made by the inner produce won't be visible in the draft of the outer produce; those changes will only be visible in the output that the inner ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," returns. In other words, when using nested produce, you get a draft of a draft and the result of the inner produce should be merged back into the original draft (or returned). For example ",(0,o.kt)("inlineCode",{parentName:"p"},'produce(state, draft => { produce(draft.user, userDraft => { userDraft.name += "!" })})')," won't work as the output of the inner produce isn't used. The correct way to use nested producers is:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'produce(state, draft => {\n draft.user = produce(draft.user, userDraft => {\n userDraft.name += "!"\n })\n})\n')),(0,o.kt)("h3",{id:"drafts-arent-referentially-equal"},"Drafts aren't referentially equal"),(0,o.kt)("p",null,"Draft objects in Immer are wrapped in ",(0,o.kt)("inlineCode",{parentName:"p"},"Proxy"),", so you cannot use ",(0,o.kt)("inlineCode",{parentName:"p"},"==")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"===")," to test equality between an original object and its equivalent draft (eg. when matching a specific element in an array). Instead, you can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"original")," helper:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"const remove = produce((list, element) => {\n const index = list.indexOf(element) // this won't work!\n const index = original(list).indexOf(element) // do this instead\n if (index > -1) list.splice(index, 1)\n})\n\nconst values = [a, b, c]\nremove(values, a)\n")),(0,o.kt)("p",null,"If possible, it's recommended to perform the comparison outside the ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," function, or to use a unique identifier property like ",(0,o.kt)("inlineCode",{parentName:"p"},".id")," instead, to avoid needing to use ",(0,o.kt)("inlineCode",{parentName:"p"},"original"),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/78f86360.36d82662.js b/assets/js/78f86360.36d82662.js new file mode 100644 index 00000000..0fc1e0ba --- /dev/null +++ b/assets/js/78f86360.36d82662.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[973],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var a=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function m(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):m(m({},t),e)),r},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},s="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),s=p(r),d=i,h=s["".concat(l,".").concat(d)]||s[d]||c[d]||n;return r?a.createElement(h,m(m({ref:t},u),{},{components:r})):a.createElement(h,m({ref:t},u))}));function h(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,m=new Array(n);m[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[s]="string"==typeof e?e:i,m[1]=o;for(var p=2;p{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var a=r(3117),i=r(102),n=(r(7294),r(3905)),m=["components"],o={id:"built-with",title:"Built with Immer"},l=void 0,p={unversionedId:"built-with",id:"built-with",title:"Built with Immer",description:"- react-copy-write Immutable state with a mutable API",source:"@site/docs/built-with.md",sourceDirName:".",slug:"/built-with",permalink:"/immer/built-with",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/built-with.md",tags:[],version:"current",frontMatter:{id:"built-with",title:"Built with Immer"},sidebar:"Immer",previous:{title:"Pitfalls",permalink:"/immer/pitfalls"},next:{title:"Supporting immer",permalink:"/immer/support"}},u={},s=[],c={toc:s};function d(e){var t=e.components,r=(0,i.Z)(e,m);return(0,n.kt)("wrapper",(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("center",null,(0,n.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/aweary/react-copy-write"},"react-copy-write")," ",(0,n.kt)("em",{parentName:"li"},"Immutable state with a mutable API")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/reduxjs/redux-toolkit"},"redux-toolkit")," ",(0,n.kt)("em",{parentName:"li"},"The official, opinionated, batteries-included toolset for efficient Redux development")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gist.github.com/kitze/fb65f527803a93fb2803ce79a792fff8"},"immer based handleActions")," ",(0,n.kt)("em",{parentName:"li"},"Boilerplate free actions for Redux")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/anish000kumar/redux-box"},"redux-box")," ",(0,n.kt)("em",{parentName:"li"},"Modular and easy-to-grasp redux based state management, with least boilerplate")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/jeffreyyoung/quick-redux"},"quick-redux")," ",(0,n.kt)("em",{parentName:"li"},"tools to make redux development quicker and easier")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/jamiebuilds/bey"},"bey")," ",(0,n.kt)("em",{parentName:"li"},"Simple immutable state for React using Immer")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/Maxvien/cool-store"},"cool-store")," ",(0,n.kt)("em",{parentName:"li"},"CoolStore is an immutable state store built on top of ImmerJS and RxJS")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/drcmda/immer-wieder#readme"},"immer-wieder")," ",(0,n.kt)("em",{parentName:"li"},"State management lib that combines React 16 Context and immer for Redux semantics")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/neurosnap/robodux"},"robodux")," ",(0,n.kt)("em",{parentName:"li"},"flexible way to reduce redux boilerplate")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/epeli/immer-reducer"},"immer-reducer")," ",(0,n.kt)("em",{parentName:"li"},"Type-safe and terse React (useReducer()) and Redux reducers with Typescript")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/knpwrs/redux-ts-utils"},"redux-ts-utils")," ",(0,n.kt)("em",{parentName:"li"},"Everything you need to create type-safe applications with Redux with a strong emphasis on simplicity")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/suchipi/react-state-tree"},"react-state-tree")," ",(0,n.kt)("em",{parentName:"li"},"Drop-in replacement for useState that persists your state into a redux-like state tree")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/salvoravida/redux-immer"},"redux-immer")," ",(0,n.kt)("em",{parentName:"li"},"is used to create an equivalent function of Redux combineReducers that works with ",(0,n.kt)("inlineCode",{parentName:"em"},"immer")," state. Like ",(0,n.kt)("inlineCode",{parentName:"em"},"redux-immutable")," but for ",(0,n.kt)("inlineCode",{parentName:"em"},"immer"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/nilsmehlhorn/ngrx-wieder"},"ngrx-wieder")," ",(0,n.kt)("em",{parentName:"li"},"Lightweight yet configurable solution for implementing undo-redo in Angular apps on top of NgRx and Immer")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/sep2/immer-yjs"},"immer-yjs")," ",(0,n.kt)("em",{parentName:"li"},"Combine ",(0,n.kt)("inlineCode",{parentName:"em"},"immer")," with CRDT library ",(0,n.kt)("inlineCode",{parentName:"em"},"y.js")," for easy json data manipulation")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/webstudio-is/immerhin"},"immerhin")," Sync state with undo/redo"),(0,n.kt)("li",{parentName:"ul"},"... and ",(0,n.kt)("a",{parentName:"li",href:"https://www.npmjs.com/browse/depended/immer"},"many more"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7956b02b.15560020.js b/assets/js/7956b02b.15560020.js new file mode 100644 index 00000000..a0a20d25 --- /dev/null +++ b/assets/js/7956b02b.15560020.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[91],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>u});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(r),f=a,u=p["".concat(c,".").concat(f)]||p[f]||m[f]||i;return r?n.createElement(u,o(o({ref:t},d),{},{components:r})):n.createElement(u,o({ref:t},d))}));function u(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>f,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var n=r(3117),a=r(102),i=(r(7294),r(3905)),o=["components"],s={id:"async",title:"createDraft / finishDraft",sidebar_label:"createDraft / finishDraft"},c=void 0,l={unversionedId:"async",id:"async",title:"createDraft / finishDraft",description:"createDraft and finishDraft",id:"createdraft-and-finishdraft",level:2}],m={toc:p};function f(e){var t=e.components,r=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("center",null,(0,i.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"}))," ",(0,i.kt)("details",null,(0,i.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 11: Creating ",(0,i.kt)("b",null,"async")," producers (and why you shouldn\u2019t)"),(0,i.kt)("br",null),(0,i.kt)("div",null,(0,i.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-write-asynchronous-producers-in-immer-and-why-you-shouldn-t/embed"})),(0,i.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-write-asynchronous-producers-in-immer-and-why-you-shouldn-t"},"Hosted on egghead.io")),(0,i.kt)("h2",{id:"createdraft-and-finishdraft"},(0,i.kt)("inlineCode",{parentName:"h2"},"createDraft")," and ",(0,i.kt)("inlineCode",{parentName:"h2"},"finishDraft")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"createDraft")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"finishDraft")," are two low-level functions that are mostly useful for libraries that build abstractions on top of immer. It avoids the need to always create a function in order to work with drafts. Instead, one can create a draft, modify it, and at some time in the future finish the draft, in which case the next immutable state will be produced."),(0,i.kt)("p",null,"Beyond that, ",(0,i.kt)("inlineCode",{parentName:"p"},"createDraft")," / ",(0,i.kt)("inlineCode",{parentName:"p"},"finishDraft")," could be used to express async updates to drafts:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-javascript"},'import {createDraft, finishDraft} from "immer"\n\nconst user = {\n name: "michel",\n todos: []\n}\n\nconst draft = createDraft(user)\ndraft.todos = await (await window.fetch("http://host/" + draft.name)).json()\nconst loadedUser = finishDraft(draft)\n')),(0,i.kt)("p",null,"Note: The above is an anti-pattern! First fetch data instead, then draft the ",(0,i.kt)("inlineCode",{parentName:"p"},"user"),'. Otherwise updates to user that happen during the async process, would be "missed" by the draft.'),(0,i.kt)("p",null,"Note: ",(0,i.kt)("inlineCode",{parentName:"p"},"finishDraft")," takes a ",(0,i.kt)("inlineCode",{parentName:"p"},"patchListener")," as second argument, which can be used to record the patches, similarly to ",(0,i.kt)("inlineCode",{parentName:"p"},"produce"),"."),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"Warning: in general, we recommend to use ",(0,i.kt)("inlineCode",{parentName:"em"},"produce")," instead of the ",(0,i.kt)("inlineCode",{parentName:"em"},"createDraft")," / ",(0,i.kt)("inlineCode",{parentName:"em"},"finishDraft")," combo, ",(0,i.kt)("inlineCode",{parentName:"em"},"produce")," is less error prone in usage, and more clearly separates the concepts of mutability and immutability in your code base.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/813ea2aa.8f6c63bf.js b/assets/js/813ea2aa.8f6c63bf.js new file mode 100644 index 00000000..e4c78f9d --- /dev/null +++ b/assets/js/813ea2aa.8f6c63bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[484],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),f=a,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||o;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>f,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var n=r(3117),a=r(102),o=(r(7294),r(3905)),i=["components"],l={id:"current",title:"Extracting the current state from a draft",sidebar_label:"Current"},c=void 0,s={unversionedId:"current",id:"current",title:"Extracting the current state from a draft",description:"Immer exposes a named export current that creates a copy of the current state of the draft. This can be very useful for debugging purposes (as those objects won't be Proxy objects and not be logged as such). Also, references to current can be safely leaked from a produce function. Put differently, current provides a snapshot of the current state of a draft.",source:"@site/docs/current.md",sourceDirName:".",slug:"/current",permalink:"/immer/current",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/current.md",tags:[],version:"current",frontMatter:{id:"current",title:"Extracting the current state from a draft",sidebar_label:"Current"},sidebar:"Immer",previous:{title:"Classes",permalink:"/immer/complex-objects"},next:{title:"Original",permalink:"/immer/original"}},p={},u=[{value:"Example",id:"example",level:3}],d={toc:u};function f(e){var t=e.components,r=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("center",null,(0,o.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,o.kt)("p",null,"Immer exposes a named export ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," that creates a copy of the current state of the draft. This can be very useful for debugging purposes (as those objects won't be Proxy objects and not be logged as such). Also, references to ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," can be safely leaked from a produce function. Put differently, ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," provides a snapshot of the current state of a draft."),(0,o.kt)("p",null,"Objects generated by ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," work similar to the objects created by produce itself."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Unmodified objects will be structurally shared with the original objects."),(0,o.kt)("li",{parentName:"ol"},"If no changes are made to a draft, generally it holds that ",(0,o.kt)("inlineCode",{parentName:"li"},"original(draft) === current(draft)"),", but this is not guaranteed."),(0,o.kt)("li",{parentName:"ol"},"Future changes to the draft won't be reflected in the object produced by ",(0,o.kt)("inlineCode",{parentName:"li"},"current")," (except for references to undraftable objects)"),(0,o.kt)("li",{parentName:"ol"},"Unlike ",(0,o.kt)("inlineCode",{parentName:"li"},"produce")," objects created by ",(0,o.kt)("inlineCode",{parentName:"li"},"current")," will ",(0,o.kt)("em",{parentName:"li"},"not")," be frozen.")),(0,o.kt)("p",null,"Use ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," sparingly, it can be a potentially expensive operation, especially when using ES5."),(0,o.kt)("p",null,"Note that ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," cannot be invoked on objects that aren't drafts."),(0,o.kt)("h3",{id:"example"},"Example"),(0,o.kt)("p",null,"The following example shows the effect of ",(0,o.kt)("inlineCode",{parentName:"p"},"current")," (and ",(0,o.kt)("inlineCode",{parentName:"p"},"original"),"):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"const base = {\n x: 0\n}\n\nconst next = produce(base, draft => {\n draft.x++\n const orig = original(draft)\n const copy = current(draft)\n console.log(orig.x)\n console.log(copy.x)\n\n setTimeout(() => {\n // this will execute after the produce has finished!\n console.log(orig.x)\n console.log(copy.x)\n }, 100)\n\n draft.x++\n console.log(draft.x)\n})\nconsole.log(next.x)\n\n// This will print\n// 0 (orig.x)\n// 1 (copy.x)\n// 2 (draft.x)\n// 2 (next.x)\n// 0 (after timeout, orig.x)\n// 1 (after timeout, copy.x)\n")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/849404ec.f79a223b.js b/assets/js/849404ec.f79a223b.js new file mode 100644 index 00000000..d330911b --- /dev/null +++ b/assets/js/849404ec.f79a223b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[226],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=a,f=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var n=r(3117),a=r(102),i=(r(7294),r(3905)),o=["components"],s={id:"original",title:"Extracting the original state from a draft",sidebar_label:"Original"},l=void 0,c={unversionedId:"original",id:"original",title:"Extracting the original state from a draft",description:"Immer exposes a named export original that will get the original object from the proxied instance inside produce (or return undefined for unproxied values). A good example of when this can be useful is when searching for nodes in a tree-like state using strict equality.",source:"@site/docs/original.md",sourceDirName:".",slug:"/original",permalink:"/immer/original",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/original.md",tags:[],version:"current",frontMatter:{id:"original",title:"Extracting the original state from a draft",sidebar_label:"Original"},sidebar:"Immer",previous:{title:"Current",permalink:"/immer/current"},next:{title:"Patches",permalink:"/immer/patches"}},p={},u=[],m={toc:u};function d(e){var t=e.components,r=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("center",null,(0,i.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,i.kt)("p",null,"Immer exposes a named export ",(0,i.kt)("inlineCode",{parentName:"p"},"original")," that will get the original object from the proxied instance inside ",(0,i.kt)("inlineCode",{parentName:"p"},"produce")," (or return ",(0,i.kt)("inlineCode",{parentName:"p"},"undefined")," for unproxied values). A good example of when this can be useful is when searching for nodes in a tree-like state using strict equality."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'import {original, produce} from "immer"\n\nconst baseState = {users: [{name: "Richie"}]}\nconst nextState = produce(baseState, draftState => {\n original(draftState.users) // is === baseState.users\n})\n')),(0,i.kt)("p",null,"Just want to know if a value is a proxied instance? Use the ",(0,i.kt)("inlineCode",{parentName:"p"},"isDraft")," function! Note that ",(0,i.kt)("inlineCode",{parentName:"p"},"original")," cannot be invoked on objects that aren't drafts."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'import {isDraft, produce} from "immer"\n\nconst baseState = {users: [{name: "Bobby"}]}\nconst nextState = produce(baseState, draft => {\n isDraft(draft) // => true\n isDraft(draft.users) // => true\n isDraft(draft.users[0]) // => true\n})\nisDraft(nextState) // => false\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.3ff6f6ed.js b/assets/js/935f2afb.3ff6f6ed.js new file mode 100644 index 00000000..d0d24a7b --- /dev/null +++ b/assets/js/935f2afb.3ff6f6ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"Immer":[{"type":"category","label":"Basics","items":[{"type":"link","label":"Introduction","href":"/immer/","docId":"introduction"},{"type":"link","label":"Installation","href":"/immer/installation","docId":"installation"},{"type":"link","label":"Using produce","href":"/immer/produce","docId":"produce"},{"type":"link","label":"Curried producers","href":"/immer/curried-produce","docId":"curried-produce"},{"type":"link","label":"React & Immer","href":"/immer/example-setstate","docId":"example-setstate"},{"type":"link","label":"Update patterns","href":"/immer/update-patterns","docId":"update-patterns"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Advanced Features","items":[{"type":"link","label":"API overview","href":"/immer/api","docId":"api"},{"type":"link","label":"Map and Set","href":"/immer/map-set","docId":"map-set"},{"type":"link","label":"Classes","href":"/immer/complex-objects","docId":"complex-objects"},{"type":"link","label":"Current","href":"/immer/current","docId":"current"},{"type":"link","label":"Original","href":"/immer/original","docId":"original"},{"type":"link","label":"Patches","href":"/immer/patches","docId":"patches"},{"type":"link","label":"Auto freezing","href":"/immer/freezing","docId":"freezing"},{"type":"link","label":"Returning new data from producers","href":"/immer/return","docId":"return"},{"type":"link","label":"createDraft / finishDraft","href":"/immer/async","docId":"async"},{"type":"link","label":"TypeScript / Flow","href":"/immer/typescript","docId":"typescript"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Resources","items":[{"type":"link","label":"Immer performance","href":"/immer/performance","docId":"performance"},{"type":"link","label":"External resources","href":"/immer/resources","docId":"resources"},{"type":"link","label":"FAQ","href":"/immer/faq","docId":"faq"},{"type":"link","label":"Pitfalls","href":"/immer/pitfalls","docId":"pitfalls"},{"type":"link","label":"Built with Immer","href":"/immer/built-with","docId":"built-with"},{"type":"link","label":"Supporting immer","href":"/immer/support","docId":"support"},{"type":"link","label":"Porting to other languages","href":"/immer/other-lang","docId":"other-lang"}],"collapsed":true,"collapsible":true}]},"docs":{"api":{"id":"api","title":"API overview","description":"| Exported name | Description | Section |","sidebar":"Immer"},"async":{"id":"async","title":"createDraft / finishDraft","description":"{n.r(t),n.d(t,{default:()=>i});var a=n(7294),l=n(5999),o=n(1944),r=n(7961);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/a09c2993.02efd803.js b/assets/js/a09c2993.02efd803.js new file mode 100644 index 00000000..5380a31d --- /dev/null +++ b/assets/js/a09c2993.02efd803.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[128],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),m=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=m(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=m(a),p=n,h=u["".concat(s,".").concat(p)]||u[p]||d[p]||i;return a?r.createElement(h,o(o({ref:t},c),{},{components:a})):r.createElement(h,o({ref:t},c))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:n,o[1]=l;for(var m=2;m{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>l,metadata:()=>m,toc:()=>u});var r=a(3117),n=a(102),i=(a(7294),a(3905)),o=["components"],l={id:"introduction",title:"Introduction to Immer",sidebar_label:"Introduction",slug:"/"},s=void 0,m={unversionedId:"introduction",id:"introduction",title:"Introduction to Immer",description:"Immer (German for: always) is a tiny package that allows you to work with immutable state in a more convenient way.",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/",permalink:"/immer/",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction",title:"Introduction to Immer",sidebar_label:"Introduction",slug:"/"},sidebar:"Immer",next:{title:"Installation",permalink:"/immer/installation"}},c={},u=[{value:"Immer simplifies handling immutable data structures",id:"immer-simplifies-handling-immutable-data-structures",level:3},{value:"A quick example for comparison",id:"a-quick-example-for-comparison",level:3},{value:"Without Immer",id:"without-immer",level:4},{value:"With Immer",id:"with-immer",level:4},{value:"How Immer works",id:"how-immer-works",level:3},{value:"Benefits",id:"benefits",level:2}],d={toc:u};function p(e){var t=e.components,l=(0,n.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},d,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("center",null,(0,i.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,i.kt)("img",{src:"/immer/img/immer-logo.svg",style:{maxHeight:200},align:"right"}),(0,i.kt)("h1",{id:"immer"},"Immer"),(0,i.kt)("p",null,"Immer (German for: always) is a tiny package that allows you to work with immutable state in a more convenient way."),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Immer is life-changing as a JS dev, and I'm not even exaggerating :) Like, it's right up there with Prettier in terms of \"wow this package is amazing, how did I ever live without it?\" --Mark Erikson, (the) Redux Maintainer, @replayio")),(0,i.kt)("p",null,'Winner of the "Breakthrough of the year" ',(0,i.kt)("a",{parentName:"p",href:"https://osawards.com/react/"},"React open source award"),' and "Most impactful contribution" ',(0,i.kt)("a",{parentName:"p",href:"https://osawards.com/javascript/"},"JavaScript open source award")," in 2019."),(0,i.kt)("hr",null),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Introduction blogpost: ",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/@mweststrate/introducing-immer-immutability-the-easy-way-9d73d8f71cb3"},"Immer: Immutability the easy way")),(0,i.kt)("li",{parentName:"ul"},"Short Egghead.io lesson covering the Immer essentials: ",(0,i.kt)("a",{parentName:"li",href:"https://egghead.io/lessons/redux-simplify-creating-immutable-data-trees-with-immer"},"Simplify creating immutable data trees with Immer (7m)")),(0,i.kt)("li",{parentName:"ul"},"Free in-depth Egghead.io course: ",(0,i.kt)("a",{parentName:"li",href:"https://egghead.io/courses/immutable-javascript-data-structures-with-immer"},"Immutable JavaScript Data Structures with Immer (58m)"))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"immer-simplifies-handling-immutable-data-structures"},"Immer simplifies handling immutable data structures"),(0,i.kt)("p",null,"Immer can be used in any context in which immutable data structures need to be used. For example in combination with React state, React or Redux reducers, or configuration management. Immutable data structures allow for (efficient) change detection: if the reference to an object didn't change, the object itself did not change. In addition, it makes cloning relatively cheap: Unchanged parts of a data tree don't need to be copied and are shared in memory with older versions of the same state."),(0,i.kt)("p",null,"Generally speaking, these benefits can be achieved by making sure you never change any property of an object, array or map, but by always creating an altered copy instead. In practice this can result in code that is quite cumbersome to write, and it is easy to accidentally violate those constraints. Immer will help you to follow the immutable data paradigm by addressing these pain points:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Immer will detect accidental mutations and throw an error."),(0,i.kt)("li",{parentName:"ol"},"Immer will remove the need for the typical boilerplate code that is needed when creating deep updates to immutable objects: Without Immer, object copies need to be made by hand at every level. Typically by using a lot of ",(0,i.kt)("inlineCode",{parentName:"li"},"...")," spread operations. When using Immer, changes are made to a ",(0,i.kt)("inlineCode",{parentName:"li"},"draft")," object, that records the changes and takes care of creating the necessary copies, without ever affecting the original object."),(0,i.kt)("li",{parentName:"ol"},"When using Immer, you don't need to learn dedicated APIs or data structures to benefit from the paradigm. With Immer you'll use plain JavaScript data structures, and use the well-known mutable JavaScript APIs, but safely.")),(0,i.kt)("h3",{id:"a-quick-example-for-comparison"},"A quick example for comparison"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-javascript"},'const baseState = [\n {\n title: "Learn TypeScript",\n done: true\n },\n {\n title: "Try Immer",\n done: false\n }\n]\n')),(0,i.kt)("p",null,"Imagine we have the above base state, and we'll need to update the second todo, and add a third one. However, we don't want to mutate the original ",(0,i.kt)("inlineCode",{parentName:"p"},"baseState"),", and we want to avoid deep cloning as well (to preserve the first todo)."),(0,i.kt)("h4",{id:"without-immer"},"Without Immer"),(0,i.kt)("p",null,"Without Immer, we'll have to carefully shallow copy every level of the state structure that is affected by our change:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-javascript"},'const nextState = baseState.slice() // shallow clone the array\nnextState[1] = {\n // replace element 1...\n ...nextState[1], // with a shallow clone of element 1\n done: true // ...combined with the desired update\n}\n// since nextState was freshly cloned, using push is safe here,\n// but doing the same thing at any arbitrary time in the future would\n// violate the immutability principles and introduce a bug!\nnextState.push({title: "Tweet about it"})\n')),(0,i.kt)("h4",{id:"with-immer"},"With Immer"),(0,i.kt)("p",null,"With Immer, this process is more straightforward. We can leverage the ",(0,i.kt)("inlineCode",{parentName:"p"},"produce")," function, which takes as first argument the state we want to start from, and as second argument we pass a function, called the ",(0,i.kt)("em",{parentName:"p"},"recipe"),", that is passed a ",(0,i.kt)("inlineCode",{parentName:"p"},"draft")," to which we can apply straightforward mutations. Those mutations are recorded and used to produce the next state once the recipe is done. ",(0,i.kt)("inlineCode",{parentName:"p"},"produce")," will take care of all the necessary copying, and protect against future accidental modifications as well by freezing the data."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\nconst nextState = produce(baseState, draft => {\n draft[1].done = true\n draft.push({title: "Tweet about it"})\n})\n')),(0,i.kt)("p",null,"Looking for Immer in combination with React? Feel free to skip ahead to the ",(0,i.kt)("a",{parentName:"p",href:"example-setstate"},"React + Immer")," page."),(0,i.kt)("h3",{id:"how-immer-works"},"How Immer works"),(0,i.kt)("p",null,"The basic idea is that with Immer you will apply all your changes to a temporary ",(0,i.kt)("em",{parentName:"p"},"draft"),", which is a proxy of the ",(0,i.kt)("em",{parentName:"p"},"currentState"),". Once all your mutations are completed, Immer will produce the ",(0,i.kt)("em",{parentName:"p"},"nextState")," based on the mutations to the draft state. This means that you can interact with your data by simply modifying it while keeping all the benefits of immutable data."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"immer-hd.png",src:a(9795).Z,width:"1400",height:"544"})),(0,i.kt)("p",null,"Using Immer is like having a personal assistant. The assistant takes a letter (the current state) and gives you a copy (draft) to jot changes onto. Once you are done, the assistant will take your draft and produce the real immutable, final letter for you (the next state)."),(0,i.kt)("p",null,"Head to the ",(0,i.kt)("a",{parentName:"p",href:"/immer/produce"},"next section")," to further dive into ",(0,i.kt)("inlineCode",{parentName:"p"},"produce"),"."),(0,i.kt)("h2",{id:"benefits"},"Benefits"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Follow the immutable data paradigm, while using normal JavaScript objects, arrays, Sets and Maps. No new APIs or "mutation patterns" to learn!'),(0,i.kt)("li",{parentName:"ul"},"Strongly typed, no string based paths selectors etc."),(0,i.kt)("li",{parentName:"ul"},"Structural sharing out of the box"),(0,i.kt)("li",{parentName:"ul"},"Object freezing out of the box"),(0,i.kt)("li",{parentName:"ul"},"Deep updates are a breeze"),(0,i.kt)("li",{parentName:"ul"},"Boilerplate reduction. Less noise, more concise code."),(0,i.kt)("li",{parentName:"ul"},"First class support for JSON patches"),(0,i.kt)("li",{parentName:"ul"},"Small: 3KB gzipped")))}p.isMDXComponent=!0},9795:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png"}}]); \ No newline at end of file diff --git a/assets/js/aa829a7d.b3cc16e2.js b/assets/js/aa829a7d.b3cc16e2.js new file mode 100644 index 00000000..eff343ca --- /dev/null +++ b/assets/js/aa829a7d.b3cc16e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[617],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=a,d=u["".concat(l,".").concat(f)]||u[f]||p[f]||i;return r?n.createElement(d,o(o({ref:t},m),{},{components:r})):n.createElement(d,o({ref:t},m))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>f,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var n=r(3117),a=r(102),i=(r(7294),r(3905)),o=["components"],s={id:"freezing",title:"Auto freezing"},l=void 0,c={unversionedId:"freezing",id:"freezing",title:"Auto freezing",description:"{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),d=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=d(e.components);return n.createElement(c.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),l=d(r),m=o,f=l["".concat(c,".").concat(m)]||l[m]||u[m]||a;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[l]="string"==typeof e?e:o,i[1]=p;for(var d=2;d{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>p,metadata:()=>d,toc:()=>l});var n=r(3117),o=r(102),a=(r(7294),r(3905)),i=["components"],p={id:"curried-produce",title:"Curried producers"},c=void 0,d={unversionedId:"curried-produce",id:"curried-produce",title:"Curried producers",description:" {\n const todo = draft.find(todo => todo.id === id)\n todo.done = !todo.done\n })\n}\n\nconst baseState = [\n {\n id: "JavaScript",\n title: "Learn TypeScript",\n done: true\n },\n {\n id: "Immer",\n title: "Try Immer",\n done: false\n }\n]\n\nconst nextState = toggleTodo(baseState, "Immer")\n')),(0,a.kt)("p",null,"The above pattern of ",(0,a.kt)("inlineCode",{parentName:"p"},"toggleTodo")," is quite typical; pass an existing state to ",(0,a.kt)("inlineCode",{parentName:"p"},"produce"),", modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"draft"),", and then return the result. Since ",(0,a.kt)("inlineCode",{parentName:"p"},"state")," isn't used for anything else than passing it on to ",(0,a.kt)("inlineCode",{parentName:"p"},"produce"),", the above example can be simplified by using the ",(0,a.kt)("em",{parentName:"p"},"curried")," form of ",(0,a.kt)("inlineCode",{parentName:"p"},"produce"),", where you pass ",(0,a.kt)("inlineCode",{parentName:"p"},"produce")," only the recipe function, and ",(0,a.kt)("inlineCode",{parentName:"p"},"produce")," will return a new function that will apply recipe to the base state. This allows us to shorten the above ",(0,a.kt)("inlineCode",{parentName:"p"},"toggleTodo")," definition."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\n// curried producer:\nconst toggleTodo = produce((draft, id) => {\n const todo = draft.find(todo => todo.id === id)\n todo.done = !todo.done\n})\n\nconst baseState = [\n /* as is */\n]\n\nconst nextState = toggleTodo(baseState, "Immer")\n')),(0,a.kt)("p",null,"Note that the ",(0,a.kt)("inlineCode",{parentName:"p"},"id")," param has now become part of the recipe function! This pattern of having curried producers combines really neatly with for example the ",(0,a.kt)("inlineCode",{parentName:"p"},"useState")," hook from React, as we will see on the next page."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b1381a87.428452f4.js b/assets/js/b1381a87.428452f4.js new file mode 100644 index 00000000..40a96b30 --- /dev/null +++ b/assets/js/b1381a87.428452f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[847],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>y});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),m=c(n),u=a,y=m["".concat(p,".").concat(u)]||m[u]||d[u]||i;return n?r.createElement(y,o(o({ref:t},l),{},{components:n})):r.createElement(y,o({ref:t},l))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[m]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>m});var r=n(3117),a=n(102),i=(n(7294),n(3905)),o=["components"],s={id:"map-set",title:"Map and Set"},p=void 0,c={unversionedId:"map-set",id:"map-set",title:"Map and Set",description:"\u26a0 Since version 6 support for Maps and Sets has to be enabled explicitly by calling enableMapSet() once when starting your application.",source:"@site/docs/map-set.md",sourceDirName:".",slug:"/map-set",permalink:"/immer/map-set",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/map-set.md",tags:[],version:"current",frontMatter:{id:"map-set",title:"Map and Set"},sidebar:"Immer",previous:{title:"API overview",permalink:"/immer/api"},next:{title:"Classes",permalink:"/immer/complex-objects"}},l={},m=[],d={toc:m};function u(e){var t=e.components,n=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("center",null,(0,i.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"\u26a0 Since version 6 support for ",(0,i.kt)("inlineCode",{parentName:"em"},"Map"),"s and ",(0,i.kt)("inlineCode",{parentName:"em"},"Set"),"s has to be enabled explicitly by calling ",(0,i.kt)("a",{parentName:"em",href:"/immer/installation#pick-your-immer-version"},(0,i.kt)("inlineCode",{parentName:"a"},"enableMapSet()"))," once when starting your application.")),(0,i.kt)("p",null,"Plain objects, arrays, ",(0,i.kt)("inlineCode",{parentName:"p"},"Map"),"s and ",(0,i.kt)("inlineCode",{parentName:"p"},"Set"),"s are always drafted by Immer. An example of using Maps with immer:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-javascript"},'test("Producers can update Maps", () => {\n const usersById_v1 = new Map()\n\n const usersById_v2 = produce(usersById_v1, draft => {\n // Modifying a map results in a new map\n draft.set("michel", {name: "Michel Weststrate", country: "NL"})\n })\n\n const usersById_v3 = produce(usersById_v2, draft => {\n // Making a change deep inside a map, results in a new map as well!\n draft.get("michel").country = "UK"\n })\n\n // We got a new map each time!\n expect(usersById_v2).not.toBe(usersById_v1)\n expect(usersById_v3).not.toBe(usersById_v2)\n // With different content obviously\n expect(usersById_v1).toMatchInlineSnapshot(`Map {}`)\n expect(usersById_v2).toMatchInlineSnapshot(`\n Map {\n "michel" => Object {\n "country": "NL",\n "name": "Michel Weststrate",\n },\n }\n `)\n expect(usersById_v3).toMatchInlineSnapshot(`\n Map {\n "michel" => Object {\n "country": "UK",\n "name": "Michel Weststrate",\n },\n }\n `)\n // The old one was never modified\n expect(usersById_v1.size).toBe(0)\n // And trying to change a Map outside a producers is going to: NO!\n expect(() => usersById_v3.clear()).toThrowErrorMatchingInlineSnapshot(\n `"This object has been frozen and should not be mutated"`\n )\n})\n')),(0,i.kt)("p",null,"Maps and Sets that are produced by Immer will be made artificially immutable. This means that they will throw an exception when trying mutative methods like ",(0,i.kt)("inlineCode",{parentName:"p"},"set"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"clear")," etc. outside a producer."),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"Note: The ",(0,i.kt)("strong",{parentName:"em"},"keys")," of a map are never drafted! This is done to avoid confusing semantics and keep keys always referentially equal")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bbcc1203.f9f2c60d.js b/assets/js/bbcc1203.f9f2c60d.js new file mode 100644 index 00000000..567c3001 --- /dev/null +++ b/assets/js/bbcc1203.f9f2c60d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[121],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var c=n.createContext({}),l=function(e){var t=n.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},h="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,c=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),h=l(a),m=r,u=h["".concat(c,".").concat(m)]||h[m]||d[m]||s;return a?n.createElement(u,i(i({ref:t},p),{},{components:a})):n.createElement(u,i({ref:t},p))}));function u(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=m;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[h]="string"==typeof e?e:r,i[1]=o;for(var l=2;l{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var n=a(3117),r=a(102),s=(a(7294),a(3905)),i=["components"],o={id:"patches",title:"Patches"},c=void 0,l={unversionedId:"patches",id:"patches",title:"Patches",description:"produceWithPatches",id:"producewithpatches",level:3}],d={toc:h};function m(e){var t=e.components,a=(0,r.Z)(e,i);return(0,s.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("center",null,(0,s.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"}))," ",(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 14: Capture patches using _produceWithPatches_"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-capture-patches-to-distribute-changes-in-app-state-with-immer-producewithpatches/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-capture-patches-to-distribute-changes-in-app-state-with-immer-producewithpatches"},"Hosted on egghead.io"))," ",(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 16: Apply Patches using _applyPatches_"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-apply-patches-using-immer-applypatches-to-synchronize-state-across-clients/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-apply-patches-using-immer-applypatches-to-synchronize-state-across-clients"},"Hosted on egghead.io")),(0,s.kt)("p",null,(0,s.kt)("em",{parentName:"p"},"\u26a0 Since version 6 support for Patches has to be enabled explicitly by calling ",(0,s.kt)("a",{parentName:"em",href:"/immer/installation#pick-your-immer-version"},(0,s.kt)("inlineCode",{parentName:"a"},"enablePatches()"))," once when starting your application.")),(0,s.kt)("p",null,"During the run of a producer, Immer can record all the patches that would replay the changes made by the reducer. This is a very powerful tool if you want to fork your state temporarily and replay the changes to the original."),(0,s.kt)("p",null,"Patches are useful in few scenarios:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"To exchange incremental updates with other parties, for example over websockets"),(0,s.kt)("li",{parentName:"ul"},"For debugging / traces, to see precisely how state is changed over time"),(0,s.kt)("li",{parentName:"ul"},"As basis for undo/redo or as an approach to replay changes on a slightly different state tree")),(0,s.kt)("p",null,"To help with replaying patches, ",(0,s.kt)("inlineCode",{parentName:"p"},"applyPatches")," comes in handy. Here is an example how patches could be used to record the incremental updates and (inverse) apply them:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce, applyPatches} from "immer"\n\n// version 6\nimport {enablePatches} from "immer"\nenablePatches()\n\nlet state = {\n name: "Micheal",\n age: 32\n}\n\n// Let\'s assume the user is in a wizard, and we don\'t know whether\n// his changes should end up in the base state ultimately or not...\nlet fork = state\n// all the changes the user made in the wizard\nlet changes = []\n// the inverse of all the changes made in the wizard\nlet inverseChanges = []\n\nfork = produce(\n fork,\n draft => {\n draft.age = 33\n },\n // The third argument to produce is a callback to which the patches will be fed\n (patches, inversePatches) => {\n changes.push(...patches)\n inverseChanges.push(...inversePatches)\n }\n)\n\n// In the meantime, our original state is replaced, as, for example,\n// some changes were received from the server\nstate = produce(state, draft => {\n draft.name = "Michel"\n})\n\n// When the wizard finishes (successfully) we can replay the changes that were in the fork onto the *new* state!\nstate = applyPatches(state, changes)\n\n// state now contains the changes from both code paths!\nexpect(state).toEqual({\n name: "Michel", // changed by the server\n age: 33 // changed by the wizard\n})\n\n// Finally, even after finishing the wizard, the user might change his mind and undo his changes...\nstate = applyPatches(state, inverseChanges)\nexpect(state).toEqual({\n name: "Michel", // Not reverted\n age: 32 // Reverted\n})\n')),(0,s.kt)("p",null,"The generated patches are similar (but not the same) to the ",(0,s.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc6902/#section-4.1"},"RFC-6902 JSON patch standard"),", except that the ",(0,s.kt)("inlineCode",{parentName:"p"},"path")," property is an array, rather than a string. This makes processing patches easier. If you want to normalize to the official specification, ",(0,s.kt)("inlineCode",{parentName:"p"},'patch.path = patch.path.join("/")')," should do the trick. Anyway, this is what a bunch of patches and their inverse could look like:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json"},'[\n {\n "op": "replace",\n "path": ["profile"],\n "value": {"name": "Veria", "age": 5}\n },\n {"op": "remove", "path": ["tags", 3]}\n]\n')),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json"},'[\n {"op": "replace", "path": ["profile"], "value": {"name": "Noa", "age": 6}},\n {"op": "add", "path": ["tags", 3], "value": "kiddo"}\n]\n')),(0,s.kt)("p",null,"\u26a0 Note: The set of patches generated by Immer should be correct, that is, applying them to an equal base object should result in the same end state. However Immer does not guarantee the generated set of patches will be optimal, that is, the minimum set of patches possible. It depends often on the use case what is considered 'optimal', and generating the optimal set of patches is potentially computationally very expensive. So in cases you might want to post process the generated patches, or compress them as explained below."),(0,s.kt)("h3",{id:"producewithpatches"},(0,s.kt)("inlineCode",{parentName:"h3"},"produceWithPatches")),(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 19: Using inverse patches to build undo functionality"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-use-immer-inversepatches-to-build-undo-functionality/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-use-immer-inversepatches-to-build-undo-functionality"},"Hosted on egghead.io"))," ",(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 20: Use patches to build redo functionality"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-use-immer-patches-to-build-redo-functionality/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-use-immer-patches-to-build-redo-functionality"},"Hosted on egghead.io")),(0,s.kt)("p",null,"Instead of setting up a patch listener, an easier way to obtain the patches is to use ",(0,s.kt)("inlineCode",{parentName:"p"},"produceWithPatches"),", which has the same signature as ",(0,s.kt)("inlineCode",{parentName:"p"},"produce"),", except that it doesn't return just the next state, but a tuple consisting of ",(0,s.kt)("inlineCode",{parentName:"p"},"[nextState, patches, inversePatches]"),". Like ",(0,s.kt)("inlineCode",{parentName:"p"},"produce"),", ",(0,s.kt)("inlineCode",{parentName:"p"},"produceWithPatches")," supports currying as well."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produceWithPatches} from "immer"\n\nconst [nextState, patches, inversePatches] = produceWithPatches(\n {\n age: 33\n },\n draft => {\n draft.age++\n }\n)\n')),(0,s.kt)("p",null,"Which produces:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-javascript"},'[\n {\n age: 34\n },\n [\n {\n op: "replace",\n path: ["age"],\n value: 34\n }\n ],\n [\n {\n op: "replace",\n path: ["age"],\n value: 33\n }\n ]\n]\n')),(0,s.kt)("p",null,"For a more in-depth study, see ",(0,s.kt)("a",{parentName:"p",href:"https://medium.com/@mweststrate/distributing-state-changes-using-snapshots-patches-and-actions-part-2-2f50d8363988"},"Distributing patches and rebasing actions using Immer")),(0,s.kt)("p",null,"Tip: Check this trick to ",(0,s.kt)("a",{parentName:"p",href:"https://medium.com/@david.b.edelstein/using-immer-to-compress-immer-patches-f382835b6c69"},"compress patches")," produced over time."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c31773f8.d9e3bf2a.js b/assets/js/c31773f8.d9e3bf2a.js new file mode 100644 index 00000000..668bd959 --- /dev/null +++ b/assets/js/c31773f8.d9e3bf2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[83],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>y});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=s(n),u=a,y=c["".concat(p,".").concat(u)]||c[u]||m[u]||o;return n?r.createElement(y,i(i({ref:t},d),{},{components:n})):r.createElement(y,i({ref:t},d))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=n(3117),a=n(102),o=(n(7294),n(3905)),i=["components"],l={id:"typescript",title:"Using TypeScript or Flow",sidebar_label:"TypeScript / Flow"},p=void 0,s={unversionedId:"typescript",id:"typescript",title:"Using TypeScript or Flow",description:" {\n // `x` can be modified here\n draft.x++\n})\n\n// `newState.x` cannot be modified here\n')),(0,o.kt)("p",null,"This ensures that the only place you can modify your state is in your produce callbacks. It even works recursively and with ",(0,o.kt)("inlineCode",{parentName:"p"},"ReadonlyArray"),"."),(0,o.kt)("h2",{id:"best-practices"},"Best practices"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Always define your states as ",(0,o.kt)("inlineCode",{parentName:"li"},"readonly")," as much as possible. This best reflects the mental model and reality, since Immer will freeze all its returned values."),(0,o.kt)("li",{parentName:"ol"},"You can use the utility type ",(0,o.kt)("inlineCode",{parentName:"li"},"Immutable")," to recursively make an entire type tree read-only, e.g.: ",(0,o.kt)("inlineCode",{parentName:"li"},"type ReadonlyState = Immutable"),"."),(0,o.kt)("li",{parentName:"ol"},"Immer won't automatically wrap all returned types in ",(0,o.kt)("inlineCode",{parentName:"li"},"Immutable")," if the original type of the input state wasn't immutable. This is to make sure it doesn't break code bases that don't use immutable types.")),(0,o.kt)("h2",{id:"tips-for-curried-producers"},"Tips for curried producers"),(0,o.kt)("p",null,"We try to inference as much as possible. So if a curried producer is created and directly passed to another function, we can infer the type from there. This works well with for example React:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},'import {Immutable, produce} from "immer"\n\ntype Todo = Immutable<{\n title: string\n done: boolean\n}>\n\n// later...\n\nconst [todo, setTodo] = useState({\n title: "test",\n done: true\n})\n\n// later...\n\nsetTodo(\n produce(draft => {\n // draft will be strongly typed and mutable!\n draft.done = !draft.done\n })\n)\n')),(0,o.kt)("p",null,"When a curried producer isn't passed directly somewhere else, Immer can infer the state type from the draft argument. For example when doing the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},"// See below for a better solution!\n\nconst toggler = produce((draft: Draft) => {\n draft.done = !draft.done\n})\n\n// typeof toggler = (state: Immutable) => Writable\n")),(0,o.kt)("p",null,"Note that we did wrap the ",(0,o.kt)("inlineCode",{parentName:"p"},"Todo")," type of the ",(0,o.kt)("inlineCode",{parentName:"p"},"draft")," argument with ",(0,o.kt)("inlineCode",{parentName:"p"},"Draft"),", because ",(0,o.kt)("inlineCode",{parentName:"p"},"Todo")," is a readonly type. For non-readonly types this isn't needed."),(0,o.kt)("p",null,"For the returned curried function, ",(0,o.kt)("inlineCode",{parentName:"p"},"toggler"),", We will ",(0,o.kt)("em",{parentName:"p"},"narrow")," the ",(0,o.kt)("em",{parentName:"p"},"input")," type to ",(0,o.kt)("inlineCode",{parentName:"p"},"Immutable"),", so that even though ",(0,o.kt)("inlineCode",{parentName:"p"},"Todo")," is a mutable type, we will still accept an immutable todo as input argument to ",(0,o.kt)("inlineCode",{parentName:"p"},"toggler"),"."),(0,o.kt)("p",null,"In contrast, Immer will ",(0,o.kt)("em",{parentName:"p"},"widen")," the ",(0,o.kt)("em",{parentName:"p"},"output")," type of the curried function to ",(0,o.kt)("inlineCode",{parentName:"p"},"Writable"),", to make sure it's output state is also assignable to variables that are not explictly typed to be immutable."),(0,o.kt)("p",null,"This type narrowing / widening behavior might be unwelcome, maybe even for the simple reason that it results in quite noisy types. So we recommend to specify the generic state type for curried producers instead, in cases where it cannot be inferred directly, like ",(0,o.kt)("inlineCode",{parentName:"p"},"toggler")," above. By doing so the automatic output widening / input narrowing will be skipped. However, the ",(0,o.kt)("inlineCode",{parentName:"p"},"draft")," argument itself will still be inferred to be a writable ",(0,o.kt)("inlineCode",{parentName:"p"},"Draft"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},"const toggler = produce(draft => {\n draft.done = !draft.done\n})\n\n// typeof toggler = (state: Todo) => Todo\n")),(0,o.kt)("p",null,"However, in case the curried producer is defined with an initial state, Immer can infer the state type from the initial state, so in that case the generic doesn't need to be specified either:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},'const state0: Todo = {\n title: "test",\n done: false\n}\n\n// No type annotations needed, since we can infer from state0.\nconst toggler = produce(draft => {\n draft.done = !draft.done\n}, state0)\n\n// typeof toggler = (state: Todo) => Todo\n')),(0,o.kt)("p",null,"In case the toggler has no initial state, and it has curried arguments, and you set the state generic explicitly, then type of any additional arguments should be defined explicitly as a tuple type as well:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},"const toggler = produce((draft, newState) => {\n draft.done = newState\n})\n\n// typeof toggler = (state: Todo, newState: boolean) => Todo\n")),(0,o.kt)("h2",{id:"cast-utilities"},"Cast utilities"),(0,o.kt)("p",null,"The types inside and outside a ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," can be conceptually the same, but from a practical perspective different. For example, the ",(0,o.kt)("inlineCode",{parentName:"p"},"State")," in the examples above should be considered immutable outside ",(0,o.kt)("inlineCode",{parentName:"p"},"produce"),", but mutable inside ",(0,o.kt)("inlineCode",{parentName:"p"},"produce"),"."),(0,o.kt)("p",null,"Sometimes this leads to practical conflicts. Take the following example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},"type Todo = {readonly done: boolean}\n\ntype State = {\n readonly finishedTodos: readonly Todo[]\n readonly unfinishedTodos: readonly Todo[]\n}\n\nfunction markAllFinished(state: State) {\n produce(state, draft => {\n draft.finishedTodos = state.unfinishedTodos\n })\n}\n")),(0,o.kt)("p",null,"This will generate the error:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"The type 'readonly Todo[]' is 'readonly' and cannot be assigned to the mutable type '{ done: boolean; }[]'\n")),(0,o.kt)("p",null,"The reason for this error is that we assign our read only, immutable array to our draft, which expects a mutable type, with methods like ",(0,o.kt)("inlineCode",{parentName:"p"},".push")," etc etc. As far as TS is concerned, those are not exposed from our original ",(0,o.kt)("inlineCode",{parentName:"p"},"State"),". To hint TypeScript that we want to upcast the collection here to a mutable array for draft purposes, we can use the utility ",(0,o.kt)("inlineCode",{parentName:"p"},"castDraft"),":"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"draft.finishedTodos = castDraft(state.unfinishedTodos)")," will make the error disappear."),(0,o.kt)("p",null,"There is also the utility ",(0,o.kt)("inlineCode",{parentName:"p"},"castImmutable"),", in case you ever need to achieve the opposite. Note that these utilities are for all practical purposes no-ops, they will just return their original value."),(0,o.kt)("p",null,"Tip: You can combine ",(0,o.kt)("inlineCode",{parentName:"p"},"castImmutable")," with ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," to type the return type of ",(0,o.kt)("inlineCode",{parentName:"p"},"produce")," as something immutable, even when the original state was mutable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},"// a mutable data structure\nconst baseState = {\n todos: [{\n done: false\n }]\n}\n\nconst nextState = castImmutable(produce(baseState, _draft => {}))\n\n// inferred type of nextState is now:\n{\n readonly todos: ReadonlyArray<{\n readonly done: boolean\n }>\n})\n")),(0,o.kt)("h2",{id:"compatibility"},"Compatibility"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note:")," Immer v5.3+ supports TypeScript v3.7+ only."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note:")," Immer v3.0+ supports TypeScript v3.4+ only."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note:")," Immer v1.9+ supports TypeScript v3.1+ only."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note:")," Flow support might be removed in future versions and we recommend TypeScript"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c73e0d38.f84bc059.js b/assets/js/c73e0d38.f84bc059.js new file mode 100644 index 00000000..76e7a360 --- /dev/null +++ b/assets/js/c73e0d38.f84bc059.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[247],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=c(r),d=o,b=p["".concat(l,".").concat(d)]||p[d]||u[d]||a;return r?n.createElement(b,i(i({ref:t},m),{},{components:r})):n.createElement(b,i({ref:t},m))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var n=r(3117),o=r(102),a=(r(7294),r(3905)),i=["components"],s={id:"complex-objects",title:"Classes"},l=void 0,c={unversionedId:"complex-objects",id:"complex-objects",title:"Classes",description:"Plain objects (objects without a prototype), arrays, Maps and Sets are always drafted by Immer. Every other object must use the immerable symbol to mark itself as compatible with Immer. When one of these objects is mutated within a producer, its prototype is preserved between copies.",source:"@site/docs/complex-objects.md",sourceDirName:".",slug:"/complex-objects",permalink:"/immer/complex-objects",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/complex-objects.md",tags:[],version:"current",frontMatter:{id:"complex-objects",title:"Classes"},sidebar:"Immer",previous:{title:"Map and Set",permalink:"/immer/map-set"},next:{title:"Current",permalink:"/immer/current"}},m={},p=[{value:"Example",id:"example",level:3},{value:"Semantics in detail",id:"semantics-in-detail",level:3}],u={toc:p};function d(e){var t=e.components,r=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("center",null,(0,a.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,a.kt)("p",null,"Plain objects (objects without a prototype), arrays, ",(0,a.kt)("inlineCode",{parentName:"p"},"Map"),"s and ",(0,a.kt)("inlineCode",{parentName:"p"},"Set"),"s are always drafted by Immer. Every other object must use the ",(0,a.kt)("inlineCode",{parentName:"p"},"immerable")," symbol to mark itself as compatible with Immer. When one of these objects is mutated within a producer, its prototype is preserved between copies."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},'import {immerable} from "immer"\n\nclass Foo {\n [immerable] = true // Option 1\n\n constructor() {\n this[immerable] = true // Option 2\n }\n}\n\nFoo[immerable] = true // Option 3\n')),(0,a.kt)("h3",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},'import {immerable, produce} from "immer"\n\nclass Clock {\n [immerable] = true\n\n constructor(hour, minute) {\n this.hour = hour\n this.minute = minute\n }\n\n get time() {\n return `${this.hour}:${this.minute}`\n }\n\n tick() {\n return produce(this, draft => {\n draft.minute++\n })\n }\n}\n\nconst clock1 = new Clock(12, 10)\nconst clock2 = clock1.tick()\nconsole.log(clock1.time) // 12:10\nconsole.log(clock2.time) // 12:11\nconsole.log(clock2 instanceof Clock) // true\n')),(0,a.kt)("h3",{id:"semantics-in-detail"},"Semantics in detail"),(0,a.kt)("p",null,"The semantics on how classes are drafted are as follows:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"A draft of a class is a fresh object but with the same prototype as the original object."),(0,a.kt)("li",{parentName:"ol"},"When creating a draft, Immer will copy all ",(0,a.kt)("em",{parentName:"li"},"own")," properties from the base to the draft.This includes (in strict mode) non-enumerable and symbolic properties."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("em",{parentName:"li"},"Own")," getters will be invoked during the copy process, just like ",(0,a.kt)("inlineCode",{parentName:"li"},"Object.assign")," would."),(0,a.kt)("li",{parentName:"ol"},"Inherited getters and methods will remain as is and be inherited by the draft, as they are stored on the prototype which is untouched."),(0,a.kt)("li",{parentName:"ol"},"Immer will not invoke constructor functions."),(0,a.kt)("li",{parentName:"ol"},"The final instance will be constructed with the same mechanism as the draft was created."),(0,a.kt)("li",{parentName:"ol"},"Only getters that have a setter as well will be writable in the draft, as otherwise the value can't be copied back.")),(0,a.kt)("p",null,"Because Immer will dereference own getters of objects into normal properties, it is possible to use objects that use getter/setter traps on their fields, like MobX and Vue do."),(0,a.kt)("p",null,"Note that, by default, Immer does not strictly handle object's non-enumerable properties such as getters/setters for performance reason. If you want this behavior to be strict, you can opt-in with ",(0,a.kt)("inlineCode",{parentName:"p"},"useStrictShallowCopy(config)"),". Use ",(0,a.kt)("inlineCode",{parentName:"p"},"true")," to always copy strict, or ",(0,a.kt)("inlineCode",{parentName:"p"},'"class_only"')," to only copy class instances strictly but use the faster loose copying for plain objects. The default is ",(0,a.kt)("inlineCode",{parentName:"p"},"false"),". (Remember, regardless of strict mode, own getters / setters are always copied ",(0,a.kt)("em",{parentName:"p"},"by value"),". There is currently no config to copy descriptors as-is. Feature request / PR welcome)."),(0,a.kt)("p",null,"Immer does not support exotic / engine native objects such as DOM Nodes or Buffers, nor is subclassing Map, Set or arrays supported and the ",(0,a.kt)("inlineCode",{parentName:"p"},"immerable")," symbol can't be used on them."),(0,a.kt)("p",null,"So when working for example with ",(0,a.kt)("inlineCode",{parentName:"p"},"Date")," objects, you should always create a new ",(0,a.kt)("inlineCode",{parentName:"p"},"Date")," instance instead of mutating an existing ",(0,a.kt)("inlineCode",{parentName:"p"},"Date")," object."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d92a3c43.9b4e1742.js b/assets/js/d92a3c43.9b4e1742.js new file mode 100644 index 00000000..d9a7aec5 --- /dev/null +++ b/assets/js/d92a3c43.9b4e1742.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[798],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),l=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=m(e,["components","mdxType","originalType","parentName"]),u=l(r),d=n,h=u["".concat(s,".").concat(d)]||u[d]||p[d]||i;return r?a.createElement(h,o(o({ref:t},c),{},{components:r})):a.createElement(h,o({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=d;var m={};for(var s in t)hasOwnProperty.call(t,s)&&(m[s]=t[s]);m.originalType=e,m[u]="string"==typeof e?e:n,o[1]=m;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>m,metadata:()=>l,toc:()=>u});var a=r(3117),n=r(102),i=(r(7294),r(3905)),o=["components"],m={id:"resources",title:"External resources"},s=void 0,l={unversionedId:"resources",id:"resources",title:"External resources",description:"- Blog: The Rise of Immer in React",source:"@site/docs/resources.md",sourceDirName:".",slug:"/resources",permalink:"/immer/resources",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/resources.md",tags:[],version:"current",frontMatter:{id:"resources",title:"External resources"},sidebar:"Immer",previous:{title:"Immer performance",permalink:"/immer/performance"},next:{title:"FAQ",permalink:"/immer/faq"}},c={},u=[],p={toc:u};function d(e){var t=e.components,r=(0,n.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("center",null,(0,i.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Blog: ",(0,i.kt)("a",{parentName:"li",href:"https://www.netlify.com/blog/2018/09/12/the-rise-of-immer-in-react/"},"The Rise of Immer in React")),(0,i.kt)("li",{parentName:"ul"},"Blog: by Workday Prism on why they picked Immer to manage immutable state ",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/workday-engineering/workday-prism-analytics-the-search-for-a-strongly-typed-immutable-state-a09f6768b2b5"},"The Search for a Strongly-Typed, Immutable State")),(0,i.kt)("li",{parentName:"ul"},"Blog: ",(0,i.kt)("a",{parentName:"li",href:"https://daveceddia.com/react-redux-immutability-guide/"},"Immutability in React and Redux: The Complete Guide")),(0,i.kt)("li",{parentName:"ul"},"Video tutorial: ",(0,i.kt)("a",{parentName:"li",href:"https://codedaily.io/screencasts/86/Immutable-Data-with-Immer-and-React-setState"},"Using Immer with React.setState")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=-gJbS7YjcSo"},"Talk")," + ",(0,i.kt)("a",{parentName:"li",href:"http://immer.surge.sh/"},"slides")," on Immer at React Finland 2018 by Michel Weststrate"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=bFuRvcAEiHg&feature=youtu.be"},"ForwardJS 2019: Immutability is Changing - From Immutable.js to Immer")," by ",(0,i.kt)("a",{parentName:"li",href:"https://twitter.com/swyx/"},"shawn swyx wang")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=4Nb9Gwp2L24"},"Talk: Immer, Immutability and the Wonderful World of Proxies")," + ",(0,i.kt)("a",{parentName:"li",href:"https://jsnation-proxies.surge.sh/"},"slides"),", JSNation 2019, Michel Weststrate"),(0,i.kt)("li",{parentName:"ul"},"Blog: ",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/@mweststrate/distributing-state-changes-using-snapshots-patches-and-actions-part-1-2811a2fcd65f"},"Distributing state changes using snapshots, patches and actions")),(0,i.kt)("li",{parentName:"ul"},"Blog: ",(0,i.kt)("a",{parentName:"li",href:"https://techinscribed.com/implementing-undo-redo-functionality-in-redux-using-immer/"},"Implementing Undo-Redo Functionality in Redux"),", Sep 2019"),(0,i.kt)("li",{parentName:"ul"},"Blog: ",(0,i.kt)("a",{parentName:"li",href:"https://dev.to/oleg008/synchronized-immutable-state-with-time-travel-2c6o"},"Synchronized immutable state with time travel"),", Apr 2022, by ",(0,i.kt)("a",{parentName:"li",href:"https://twitter.com/oleg008"},"Oleg Isonen"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d9e16301.e2204e7e.js b/assets/js/d9e16301.e2204e7e.js new file mode 100644 index 00000000..f3cda7cb --- /dev/null +++ b/assets/js/d9e16301.e2204e7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[217],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),c=s(r),d=o,f=c["".concat(l,".").concat(d)]||c[d]||u[d]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[c]="string"==typeof e?e:o,i[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>d,frontMatter:()=>p,metadata:()=>s,toc:()=>c});var n=r(3117),o=r(102),a=(r(7294),r(3905)),i=["components"],p={id:"support",title:"Supporting immer"},l=void 0,s={unversionedId:"support",id:"support",title:"Supporting immer",description:"Immer currently has 350.000 dependents on GitHub, and has almost 10.000.000 downloads per month. However, only the first 2 days of development has been sponsored (by Mendix), and all the development and maintenance after that has been a labor of love.",source:"@site/docs/support.md",sourceDirName:".",slug:"/support",permalink:"/immer/support",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/support.md",tags:[],version:"current",frontMatter:{id:"support",title:"Supporting immer"},sidebar:"Immer",previous:{title:"Built with Immer",permalink:"/immer/built-with"},next:{title:"Porting to other languages",permalink:"/immer/other-lang"}},m={},c=[],u={toc:c};function d(e){var t=e.components,r=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("center",null,(0,a.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"})),(0,a.kt)("p",null,"Immer currently has 350.000 dependents on GitHub, and has almost 10.000.000 downloads per month. However, only the first 2 days of development has been sponsored (by Mendix), and all the development and maintenance after that has been a labor of love."),(0,a.kt)("p",null,"If you are enjoying Immer, and you are grateful for the package, or want to ensure its longevity, consider sponsoring the open collective on ",(0,a.kt)("a",{parentName:"p",href:"https://opencollective.com/immer"},"https://opencollective.com/immer")," or make a one time donation using ",(0,a.kt)("a",{parentName:"p",href:"https://www.paypal.me/michelweststrate"},"PayPal"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e0b41884.5fb204d3.js b/assets/js/e0b41884.5fb204d3.js new file mode 100644 index 00000000..2dcd80b3 --- /dev/null +++ b/assets/js/e0b41884.5fb204d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[105],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var d=r.createContext({}),u=function(e){var t=r.useContext(d),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},l=function(e){var t=u(e.components);return r.createElement(d.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,d=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),c=u(n),m=a,f=c["".concat(d,".").concat(m)]||c[m]||p[m]||o;return n?r.createElement(f,i(i({ref:t},l),{},{components:n})):r.createElement(f,i({ref:t},l))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[c]="string"==typeof e?e:a,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>u,toc:()=>c});var r=n(3117),a=n(102),o=(n(7294),n(3905)),i=["components"],s={id:"return",title:"Returning new data from producers"},d=void 0,u={unversionedId:"return",id:"return",title:"Returning new data from producers",description:"undefined using nothing",id:"producing-undefined-using-nothing",level:2},{value:"Inline shortcuts using void",id:"inline-shortcuts-using-void",level:2}],p={toc:c};function m(e){var t=e.components,n=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("center",null,(0,o.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"}))," ",(0,o.kt)("details",null,(0,o.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 9: Returning completely new state"),(0,o.kt)("br",null),(0,o.kt)("div",null,(0,o.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-return-completely-new-state-from-an-immer-producer/embed"})),(0,o.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-return-completely-new-state-from-an-immer-producer"},"Hosted on egghead.io")),(0,o.kt)("p",null,"It is not needed to return anything from a producer, as Immer will return the (finalized) version of the ",(0,o.kt)("inlineCode",{parentName:"p"},"draft")," anyway. However, it is allowed to just ",(0,o.kt)("inlineCode",{parentName:"p"},"return draft"),"."),(0,o.kt)("p",null,"It is also allowed to return arbitrarily other data from the producer function. But ",(0,o.kt)("em",{parentName:"p"},"only")," if you didn't modify the draft. This can be useful to produce an entirely new state. Some examples:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'const userReducer = produce((draft, action) => {\n switch (action.type) {\n case "renameUser":\n // OK: we modify the current state\n draft.users[action.payload.id].name = action.payload.name\n return draft // same as just \'return\'\n case "loadUsers":\n // OK: we return an entirely new state\n return action.payload\n case "adduser-1":\n // NOT OK: This doesn\'t do change the draft nor return a new state!\n // It doesn\'t modify the draft (it just redeclares it)\n // In fact, this just doesn\'t do anything at all\n draft = {users: [...draft.users, action.payload]}\n return\n case "adduser-2":\n // NOT OK: modifying draft *and* returning a new state\n draft.userCount += 1\n return {users: [...draft.users, action.payload]}\n case "adduser-3":\n // OK: returning a new state. But, unnecessary complex and expensive\n return {\n userCount: draft.userCount + 1,\n users: [...draft.users, action.payload]\n }\n case "adduser-4":\n // OK: the immer way\n draft.userCount += 1\n draft.users.push(action.payload)\n return\n }\n})\n')),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: It is not possible to return ",(0,o.kt)("inlineCode",{parentName:"em"},"undefined")," this way, as it is indistinguishable from ",(0,o.kt)("em",{parentName:"em"},"not")," updating the draft! Read on...")),(0,o.kt)("h2",{id:"producing-undefined-using-nothing"},"Producing ",(0,o.kt)("inlineCode",{parentName:"h2"},"undefined")," using ",(0,o.kt)("inlineCode",{parentName:"h2"},"nothing")),(0,o.kt)("p",null,"So, in general, one can replace the current state by just ",(0,o.kt)("inlineCode",{parentName:"p"},"return"),"ing a new value from the producer, rather than modifying the draft. There is a subtle edge case however: if you try to write a producer that wants to replace the current state with ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"produce({}, draft => {\n // don't do anything\n})\n")),(0,o.kt)("p",null,"Versus:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"produce({}, draft => {\n // Try to return undefined from the producer\n return undefined\n})\n")),(0,o.kt)("p",null,"The problem is that in JavaScript a function that doesn't return anything also returns ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined"),"! So immer cannot differentiate between those different cases. So, by default, Immer will assume that any producer that returns ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined")," just tried to modify the draft."),(0,o.kt)("p",null,"However, to make it clear to Immer that you intentionally want to produce the value ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined"),", you can return the built-in token ",(0,o.kt)("inlineCode",{parentName:"p"},"nothing"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce, nothing} from "immer"\n\nconst state = {\n hello: "world"\n}\n\nproduce(state, draft => {})\nproduce(state, draft => undefined)\n// Both return the original state: { hello: "world"}\n\nproduce(state, draft => nothing)\n// Produces a new state, \'undefined\'\n')),(0,o.kt)("p",null,"N.B. Note that this problem is specific for the ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined")," value, any other value, including ",(0,o.kt)("inlineCode",{parentName:"p"},"null"),", doesn't suffer from this issue."),(0,o.kt)("p",null,"Tip: to be able to return ",(0,o.kt)("inlineCode",{parentName:"p"},"nothing")," from a recipe when using TypeScript, the ",(0,o.kt)("inlineCode",{parentName:"p"},"state"),"'s type must accept ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined")," as value."),(0,o.kt)("h2",{id:"inline-shortcuts-using-void"},"Inline shortcuts using ",(0,o.kt)("inlineCode",{parentName:"h2"},"void")),(0,o.kt)("details",null,(0,o.kt)("summary",{className:"egghead-summary"},"egghead.io lesson 10: Avoid accidental returns by using _void_"),(0,o.kt)("br",null),(0,o.kt)("div",null,(0,o.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-avoid-accidental-returns-of-new-state-by-using-the-void-keyword/embed"})),(0,o.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-avoid-accidental-returns-of-new-state-by-using-the-void-keyword"},"Hosted on egghead.io")),(0,o.kt)("p",null,"Draft mutations in Immer usually warrant a code block, since a return denotes an overwrite. Sometimes that can stretch code a little more than you might be comfortable with."),(0,o.kt)("p",null,"In such cases, you can use javascripts ",(0,o.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void"},(0,o.kt)("inlineCode",{parentName:"a"},"void"))," operator, which evaluates expressions and returns ",(0,o.kt)("inlineCode",{parentName:"p"},"undefined"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"// Single mutation\nproduce(draft => void (draft.user.age += 1))\n\n// Multiple mutations\nproduce(draft => void ((draft.user.age += 1), (draft.user.height = 186)))\n")),(0,o.kt)("p",null,"Code style is highly personal, but for code bases that are to be understood by many, we recommend to stick to the classic ",(0,o.kt)("inlineCode",{parentName:"p"},"draft => { draft.user.age += 1}")," to avoid cognitive overhead."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f6624ac6.7f4f4a6c.js b/assets/js/f6624ac6.7f4f4a6c.js new file mode 100644 index 00000000..c4de980b --- /dev/null +++ b/assets/js/f6624ac6.7f4f4a6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[140],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/fa4d91bf.058e7ee8.js b/assets/js/fa4d91bf.058e7ee8.js new file mode 100644 index 00000000..01ee90b4 --- /dev/null +++ b/assets/js/fa4d91bf.058e7ee8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[930],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=m(n),d=a,k=c["".concat(p,".").concat(d)]||c[d]||u[d]||i;return n?r.createElement(k,o(o({ref:t},s),{},{components:n})):r.createElement(k,o({ref:t},s))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var m=2;m{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>d,frontMatter:()=>l,metadata:()=>m,toc:()=>c});var r=n(3117),a=n(102),i=(n(7294),n(3905)),o=["components"],l={id:"installation",title:"Installation"},p=void 0,m={unversionedId:"installation",id:"installation",title:"Installation",description:"<\/script>')),(0,i.kt)("li",{parentName:"ul"},"JSDelivr: ",(0,i.kt)("inlineCode",{parentName:"li"},' + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/built-with/index.html b/built-with/index.html new file mode 100644 index 00000000..b198d686 --- /dev/null +++ b/built-with/index.html @@ -0,0 +1,26 @@ + + + + + +Built with Immer | Immer + + + + + + + + + + + + + + +
+

Built with Immer

  • react-copy-write Immutable state with a mutable API
  • redux-toolkit The official, opinionated, batteries-included toolset for efficient Redux development
  • immer based handleActions Boilerplate free actions for Redux
  • redux-box Modular and easy-to-grasp redux based state management, with least boilerplate
  • quick-redux tools to make redux development quicker and easier
  • bey Simple immutable state for React using Immer
  • cool-store CoolStore is an immutable state store built on top of ImmerJS and RxJS
  • immer-wieder State management lib that combines React 16 Context and immer for Redux semantics
  • robodux flexible way to reduce redux boilerplate
  • immer-reducer Type-safe and terse React (useReducer()) and Redux reducers with Typescript
  • redux-ts-utils Everything you need to create type-safe applications with Redux with a strong emphasis on simplicity
  • react-state-tree Drop-in replacement for useState that persists your state into a redux-like state tree
  • redux-immer is used to create an equivalent function of Redux combineReducers that works with immer state. Like redux-immutable but for immer
  • ngrx-wieder Lightweight yet configurable solution for implementing undo-redo in Angular apps on top of NgRx and Immer
  • immer-yjs Combine immer with CRDT library y.js for easy json data manipulation
  • immerhin Sync state with undo/redo
  • ... and many more
+ + + + \ No newline at end of file diff --git a/complex-objects/index.html b/complex-objects/index.html new file mode 100644 index 00000000..e0d45d18 --- /dev/null +++ b/complex-objects/index.html @@ -0,0 +1,26 @@ + + + + + +Classes | Immer + + + + + + + + + + + + + + +
+

Classes

Plain objects (objects without a prototype), arrays, Maps and Sets are always drafted by Immer. Every other object must use the immerable symbol to mark itself as compatible with Immer. When one of these objects is mutated within a producer, its prototype is preserved between copies.

import {immerable} from "immer"

class Foo {
[immerable] = true // Option 1

constructor() {
this[immerable] = true // Option 2
}
}

Foo[immerable] = true // Option 3

Example

import {immerable, produce} from "immer"

class Clock {
[immerable] = true

constructor(hour, minute) {
this.hour = hour
this.minute = minute
}

get time() {
return `${this.hour}:${this.minute}`
}

tick() {
return produce(this, draft => {
draft.minute++
})
}
}

const clock1 = new Clock(12, 10)
const clock2 = clock1.tick()
console.log(clock1.time) // 12:10
console.log(clock2.time) // 12:11
console.log(clock2 instanceof Clock) // true

Semantics in detail

The semantics on how classes are drafted are as follows:

  1. A draft of a class is a fresh object but with the same prototype as the original object.
  2. When creating a draft, Immer will copy all own properties from the base to the draft.This includes (in strict mode) non-enumerable and symbolic properties.
  3. Own getters will be invoked during the copy process, just like Object.assign would.
  4. Inherited getters and methods will remain as is and be inherited by the draft, as they are stored on the prototype which is untouched.
  5. Immer will not invoke constructor functions.
  6. The final instance will be constructed with the same mechanism as the draft was created.
  7. Only getters that have a setter as well will be writable in the draft, as otherwise the value can't be copied back.

Because Immer will dereference own getters of objects into normal properties, it is possible to use objects that use getter/setter traps on their fields, like MobX and Vue do.

Note that, by default, Immer does not strictly handle object's non-enumerable properties such as getters/setters for performance reason. If you want this behavior to be strict, you can opt-in with useStrictShallowCopy(config). Use true to always copy strict, or "class_only" to only copy class instances strictly but use the faster loose copying for plain objects. The default is false. (Remember, regardless of strict mode, own getters / setters are always copied by value. There is currently no config to copy descriptors as-is. Feature request / PR welcome).

Immer does not support exotic / engine native objects such as DOM Nodes or Buffers, nor is subclassing Map, Set or arrays supported and the immerable symbol can't be used on them.

So when working for example with Date objects, you should always create a new Date instance instead of mutating an existing Date object.

+ + + + \ No newline at end of file diff --git a/current/index.html b/current/index.html new file mode 100644 index 00000000..f4b1b25d --- /dev/null +++ b/current/index.html @@ -0,0 +1,26 @@ + + + + + +Extracting the current state from a draft | Immer + + + + + + + + + + + + + + +
+

Extracting the current state from a draft

Immer exposes a named export current that creates a copy of the current state of the draft. This can be very useful for debugging purposes (as those objects won't be Proxy objects and not be logged as such). Also, references to current can be safely leaked from a produce function. Put differently, current provides a snapshot of the current state of a draft.

Objects generated by current work similar to the objects created by produce itself.

  1. Unmodified objects will be structurally shared with the original objects.
  2. If no changes are made to a draft, generally it holds that original(draft) === current(draft), but this is not guaranteed.
  3. Future changes to the draft won't be reflected in the object produced by current (except for references to undraftable objects)
  4. Unlike produce objects created by current will not be frozen.

Use current sparingly, it can be a potentially expensive operation, especially when using ES5.

Note that current cannot be invoked on objects that aren't drafts.

Example

The following example shows the effect of current (and original):

const base = {
x: 0
}

const next = produce(base, draft => {
draft.x++
const orig = original(draft)
const copy = current(draft)
console.log(orig.x)
console.log(copy.x)

setTimeout(() => {
// this will execute after the produce has finished!
console.log(orig.x)
console.log(copy.x)
}, 100)

draft.x++
console.log(draft.x)
})
console.log(next.x)

// This will print
// 0 (orig.x)
// 1 (copy.x)
// 2 (draft.x)
// 2 (next.x)
// 0 (after timeout, orig.x)
// 1 (after timeout, copy.x)
+ + + + \ No newline at end of file diff --git a/curried-produce/index.html b/curried-produce/index.html new file mode 100644 index 00000000..a2d55111 --- /dev/null +++ b/curried-produce/index.html @@ -0,0 +1,26 @@ + + + + + +Curried producers | Immer + + + + + + + + + + + + + + +
+

Curried producers

egghead.io lesson 6: Simplify code by using curried _reduce_

Passing a function as the first argument to produce creates a function that doesn't apply produce yet to a specific state, but rather creates a function that will apply produce to any state that is passed to it in the future. This generally is called currying. Take for example the following example:

import {produce} from "immer"

function toggleTodo(state, id) {
return produce(state, draft => {
const todo = draft.find(todo => todo.id === id)
todo.done = !todo.done
})
}

const baseState = [
{
id: "JavaScript",
title: "Learn TypeScript",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]

const nextState = toggleTodo(baseState, "Immer")

The above pattern of toggleTodo is quite typical; pass an existing state to produce, modify the draft, and then return the result. Since state isn't used for anything else than passing it on to produce, the above example can be simplified by using the curried form of produce, where you pass produce only the recipe function, and produce will return a new function that will apply recipe to the base state. This allows us to shorten the above toggleTodo definition.

import {produce} from "immer"

// curried producer:
const toggleTodo = produce((draft, id) => {
const todo = draft.find(todo => todo.id === id)
todo.done = !todo.done
})

const baseState = [
/* as is */
]

const nextState = toggleTodo(baseState, "Immer")

Note that the id param has now become part of the recipe function! This pattern of having curried producers combines really neatly with for example the useState hook from React, as we will see on the next page.

+ + + + \ No newline at end of file diff --git a/docs/404.html/index.html b/docs/404.html/index.html new file mode 100644 index 00000000..f362b1ab --- /dev/null +++ b/docs/404.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/index.html b/docs/api/index.html new file mode 100644 index 00000000..18708c84 --- /dev/null +++ b/docs/api/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/async/index.html b/docs/async/index.html new file mode 100644 index 00000000..67c7f09d --- /dev/null +++ b/docs/async/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/built-with/index.html b/docs/built-with/index.html new file mode 100644 index 00000000..abb58237 --- /dev/null +++ b/docs/built-with/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/complex-objects/index.html b/docs/complex-objects/index.html new file mode 100644 index 00000000..4d698538 --- /dev/null +++ b/docs/complex-objects/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/current/index.html b/docs/current/index.html new file mode 100644 index 00000000..29a4a2a3 --- /dev/null +++ b/docs/current/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/curried-produce/index.html b/docs/curried-produce/index.html new file mode 100644 index 00000000..b5a2a3cc --- /dev/null +++ b/docs/curried-produce/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/example-setstate/index.html b/docs/example-setstate/index.html new file mode 100644 index 00000000..d0c9981b --- /dev/null +++ b/docs/example-setstate/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/faq/index.html b/docs/faq/index.html new file mode 100644 index 00000000..9e4ba396 --- /dev/null +++ b/docs/faq/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/freezing/index.html b/docs/freezing/index.html new file mode 100644 index 00000000..da30e5ab --- /dev/null +++ b/docs/freezing/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..cc0e0c6c --- /dev/null +++ b/docs/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/installation/index.html b/docs/installation/index.html new file mode 100644 index 00000000..d9569fda --- /dev/null +++ b/docs/installation/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/map-set/index.html b/docs/map-set/index.html new file mode 100644 index 00000000..8aa1912f --- /dev/null +++ b/docs/map-set/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/original/index.html b/docs/original/index.html new file mode 100644 index 00000000..69370697 --- /dev/null +++ b/docs/original/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/other-lang/index.html b/docs/other-lang/index.html new file mode 100644 index 00000000..812da8fe --- /dev/null +++ b/docs/other-lang/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/patches/index.html b/docs/patches/index.html new file mode 100644 index 00000000..1be66f9e --- /dev/null +++ b/docs/patches/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/performance/index.html b/docs/performance/index.html new file mode 100644 index 00000000..7d646020 --- /dev/null +++ b/docs/performance/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/pitfalls/index.html b/docs/pitfalls/index.html new file mode 100644 index 00000000..1d88e92f --- /dev/null +++ b/docs/pitfalls/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/produce/index.html b/docs/produce/index.html new file mode 100644 index 00000000..da1153a0 --- /dev/null +++ b/docs/produce/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/resources/index.html b/docs/resources/index.html new file mode 100644 index 00000000..8848913e --- /dev/null +++ b/docs/resources/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/return/index.html b/docs/return/index.html new file mode 100644 index 00000000..95992d79 --- /dev/null +++ b/docs/return/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/support/index.html b/docs/support/index.html new file mode 100644 index 00000000..af80b153 --- /dev/null +++ b/docs/support/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/typescript/index.html b/docs/typescript/index.html new file mode 100644 index 00000000..247f2bde --- /dev/null +++ b/docs/typescript/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/update-patterns/index.html b/docs/update-patterns/index.html new file mode 100644 index 00000000..3f1af238 --- /dev/null +++ b/docs/update-patterns/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/example-setstate/index.html b/example-setstate/index.html new file mode 100644 index 00000000..a93f362e --- /dev/null +++ b/example-setstate/index.html @@ -0,0 +1,26 @@ + + + + + +React & Immer | Immer + + + + + + + + + + + + + + +
+

React & Immer

egghead.io lesson 8: Using Immer with _useState_. Or: _useImmer_

useState + Immer

The useState hook assumes any state that is stored inside it is treated as immutable. Deep updates in the state of React components can be greatly simplified as by using Immer. The following example shows how to use produce in combination with useState, and can be tried on CodeSandbox.

import React, { useCallback, useState } from "react";
import {produce} from "immer";

const TodoList = () => {
const [todos, setTodos] = useState([
{
id: "React",
title: "Learn React",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]);

const handleToggle = useCallback((id) => {
setTodos(
produce((draft) => {
const todo = draft.find((todo) => todo.id === id);
todo.done = !todo.done;
})
);
}, []);

const handleAdd = useCallback(() => {
setTodos(
produce((draft) => {
draft.push({
id: "todo_" + Math.random(),
title: "A new todo",
done: false
});
})
);
}, []);

return (<div>{*/ See CodeSandbox */}</div>)
}

useImmer

Since all state updaters follow the same pattern where the update function is wrapped in produce, it is also possible to simplify the above by leveraging the use-immer package that will wrap updater functions in produce automatically:

import React, { useCallback } from "react";
import { useImmer } from "use-immer";

const TodoList = () => {
const [todos, setTodos] = useImmer([
{
id: "React",
title: "Learn React",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]);

const handleToggle = useCallback((id) => {
setTodos((draft) => {
const todo = draft.find((todo) => todo.id === id);
todo.done = !todo.done;
});
}, []);

const handleAdd = useCallback(() => {
setTodos((draft) => {
draft.push({
id: "todo_" + Math.random(),
title: "A new todo",
done: false
});
});
}, []);

// etc

For the full demo see CodeSandbox.

useReducer + Immer

Similarly to useState, useReducer combines neatly with Immer as well, as demonstrated in this CodeSandbox:

import React, {useCallback, useReducer} from "react"
import {produce} from "immer"

const TodoList = () => {
const [todos, dispatch] = useReducer(
produce((draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find(todo => todo.id === action.id)
todo.done = !todo.done
break
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
})
break
default:
break
}
}),
[
/* initial todos */
]
)

const handleToggle = useCallback(id => {
dispatch({
type: "toggle",
id
})
}, [])

const handleAdd = useCallback(() => {
dispatch({
type: "add",
id: "todo_" + Math.random()
})
}, [])

// etc
}

useImmerReducer

...which again, can be slightly shorted by useImmerReducer from the use-immer package (demo):

import React, { useCallback } from "react";
import { useImmerReducer } from "use-immer";

const TodoList = () => {
const [todos, dispatch] = useImmerReducer(
(draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find((todo) => todo.id === action.id);
todo.done = !todo.done;
break;
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
});
break;
default:
break;
}
},
[ /* initial todos */ ]
);

//etc

Redux + Immer

Redux + Immer is extensively covered in the documentation of Redux Toolkit. For Redux without Redux Toolkit, the same trick as applied to useReducer above can be applied: wrap the reducer function with produce, and you can safely mutate the draft!

For example:

import {produce} from "immer"

// Reducer with initial state
const INITIAL_STATE = [
/* bunch of todos */
]

const todosReducer = produce((draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find(todo => todo.id === action.id)
todo.done = !todo.done
break
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
})
break
default:
break
}
})
+ + + + \ No newline at end of file diff --git a/faq/index.html b/faq/index.html new file mode 100644 index 00000000..913e2016 --- /dev/null +++ b/faq/index.html @@ -0,0 +1,26 @@ + + + + + +Frequently Asked Questions | Immer + + + + + + + + + + + + + + +
+

Frequently Asked Questions

Q: How does Immer work?

Read the (second part of the) introduction blog.

Q: Does Immer use structural sharing? So that my selectors can be memoized and such?

A: Yes

Q: Does Immer support deep updates?

A: Yes

Q: I can't rely on Proxies being present on my target environments. Can I use Immer?

A: Yes - view details

Q: Can I typecheck my data structures when using Immer?

A: Yes

Q: Can I store Date objects, functions etc in my state tree when using Immer?

A: Yes

Q: Can I use Maps and Sets?

A: Yes

Q: Is it fast?

A: Yes

Q: Idea! Can Immer freeze the state for me?

A: Yes

+ + + + \ No newline at end of file diff --git a/freezing/index.html b/freezing/index.html new file mode 100644 index 00000000..3821b63f --- /dev/null +++ b/freezing/index.html @@ -0,0 +1,26 @@ + + + + + +Auto freezing | Immer + + + + + + + + + + + + + + +
+

Auto freezing

egghead.io lesson 7: Immer automatically freezes data

Immer automatically freezes any state trees that are modified using produce. This protects against accidental modifications of the state tree outside of a producer. In most cases this provides the most optimal behavior, but setAutoFreeze(true / false) can be used to explicitly turn this feature on or off.

Immer will never freeze (the contents of) non-enumerable, non-own or symbolic properties, unless their content was drafted.

⚠️ Immer freezes everything recursively, for large data objects that won't be changed in the future this might be over-kill, in that case it can be more efficient to shallowly pre-freeze data using the freeze utility.⚠️

⚠️ If auto freezing is enabled, recipes are not entirely side-effect free: Any plain object or array that ends up in the produced result, will be frozen, even when these objects were not frozen before the start of the producer! ⚠️

+ + + + \ No newline at end of file diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..272e0837710dec0d8f800cb38251f5744d50876b GIT binary patch literal 4542 zcmc&$2~3nn6#kbD?vhqF7GkZ|uvqHR)T`D~V?AQkdSHvDY8#Ab6o{f!Tdi$k6l!Q} zNNeI%tG&`%Y7-?*YMR(Kb?qMPvdfCFD2TwSke&b93xQol{>~d19DZF4C8H}n2? zeDmI$H^Xrn{Fh?n@P8wBdN{|8;5cpq9w~Ut!vpxSekn#H_c#aOdYt~jcYhc(GqSn( ziAx5BapY(tu>rPX?KKt#(B&2uaomRU#0IQm*@(pl9q_H+Y9}<7Tr3PAKg>9d=nviD zB6wgO%MQy2-yq9n9On{udpK@&30bo;?7Tk=G!|fo;J`K?l^f6j8HgX~Q2eY<^}Ig} zAgd^f_V(Ss6EM{fd)PL__hB&s9*sT7Hn$xa<>2F{H-`65L+xK`)xPOE7KSVSU27ct z>wlK<)1x-@f>OrM2s(vDKh_2JO`v;Yage?D#2(9}IfPjkEWROKW*?`(C_@ulE5ua? zo7+x3MSWAM#vn(3*H=op=cullT2bnqDmgEQ>Eg@2i^k~7nw9^7K)r|NxRUJ>|*^B$jT zCjE}Z(0bRD;NTZ{)p`zozTF=!O#oSXc4$9wiOUPr@;IN(fWd}_o7CTcM|&;UV*SJX zX6p|rHZ)OY^~%soBCg>vtZZ+O#WAs=(f_dWbnXc(80Qog|4i4E0&h%V{R6(iz8Lvl z>lEH}QCUho{`_}Y|8x#@1h&eBS*28#QY%VUn%fJLt_F6GFGG_h%7;1ds0}r}EN%Ig z%CZ!ntJ7*(cJ1+RNwcD-J6Ii;xa=_G0_vtARG3&HzOfz#%>B^|34mQas^#~$u{L1t z;Ai4>z-!)t2%d$u}- zrKJx3wZ@jV(oy6M0q+Pr+~V?gENH|%7K0Uy4L5~Pj&lhae*ho%F!6fmKq{-p&T-!< zzAR<$stX*-xf=Lz8S#xV&@)^qWf!yd@jcbz5*BZ-lvZR_h-=PRd?WkxI(#oEHU5v* zLcFg9_omv=izLoA^jstEp``y%+d!-3o%_tbAw4!U%C+EUOMnkQDkpXP^@N>&wVuV% z-@HoBFNS)90rl_k@5H@6f%veZXWQ{TdBiPcrsF$qlS_CDpS}D2xBPzBr{)T6YNYOfkS5-b)qY!cXq+wfo*y+bS29SKYdOVrVQ3z^@GyOmgtE zYt_22#&;;byL0m)#}8n@Jka;ZALQB4^C7i9)T~R)D3K$U-a8ZI)p4NMMMGQ;eoh6h)q@S8FH%4TY6;>`2h;@csQ%5{#}h9}nR(^Hf^VF{%2T+W_cnx% zOs3yi8Vds}^RPL&OYs|qp1ViATOVeF@&<*WCm*C1dh$T+4ut+!4B!J|PiunB!$ACl z>|iiJKA;ZZ9nap;|0f2r2mF?XS{SHbR(>#X06UO_!Q_GL1A|~OJ&rlV0l)i{f&tL3 zxt()CK4J(OfO>Ua9Z-|jq$RYlfY3rOR|so!P;(KeHlj6kQ(X@=m@u2u29tYf0bcL- n8oWR+nshgSnz;Q$-=yib@6~#V{h%&L{6-9sWRM%^KB)Y^m?yup literal 0 HcmV?d00001 diff --git a/img/immer-logo.png b/img/immer-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7221e216f9eccc3b5b8a1dcadcf0aef9976be6 GIT binary patch literal 6053 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 YEZNrq)kb6xmw!TCO(TsOHM_|F0CER6Z2$lO literal 0 HcmV?d00001 diff --git a/img/immer-logo.svg b/img/immer-logo.svg new file mode 100644 index 00000000..da42bc8d --- /dev/null +++ b/img/immer-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/img/immer.png b/img/immer.png new file mode 100644 index 0000000000000000000000000000000000000000..c83185f8a2910090335ec3f0a8f69985f8bffa0a GIT binary patch literal 52109 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≈X2J=ivxbmN$LgxLmTx(7iSA6_xpwvJQ}S< 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≪|^?uN$Hs$~22i=&!7;gw9nA>w>9 z%bVX5@Kh<)>|5rSx?6JnQGM8x*=EDA{hj{Cfu9%2xVNTBKU4D=JFR85v!b=JMzhTa zElh}xj2+V5Y@sF@lRlmq0b5G6=B=l;I`U!i$xcaAGf{D{(;w|?A4|@FD@($l8}7JY z%s8lq?t8Y)taD^*Zm+*IrEL4*%P;(ktk`Vho%eTE)Kqv9Pr6!37i2}@;OeZ&i8Z^% ztE#LqleE9-ys(YK!ILF8>wHaE%d?T;8`-`BbQEaohf+~Zyrqti&nH&C7RpfNbC=|>de62H zQ^IE55bE@0mIs!dNV>%UZP^V5R;-<>4%x?nkTpt!_=Rd~BvMiuJY+Vp)at&P-xhiE!_+O;|NU@c9Yudk_)^9G%~0IZaX{Nr$HtC5S$+KabeyAu(NSbI zH!5P<*&aBz5Ym1N=CS0Cm@Iy=ZwHB8u0h8#+#UQX85aZcjn}GfNf>QU*o6o!aXeoR z(YFQ?!C$EPC!STB$?q{8wpy2=V+5)e31RpN`;=I{XZTY5e*i> z8H6l2II?b)seN9isM7B|%l&~jc>11W(CatW*#P63FTS_v zSB96$N?ZVyy7$Qp+Mo$i*eqOFXv1E#Aluuj8#By&=WXBn?P&=k5riw3pj^{hNMnLbZ|9iCSN8J9?1#WbZ9p13%^B9?_*GH(2WlwEn!Yzi~v~6IIrb6 zuI+5UUI8Fj7Ra$0$V^~M3$2y#H%J$|ENFH?^oIYYgZh8&AwFxuf`xI=em$(Af9&k; z?fz&RUP^!tmI<6L){ZyQ=Z(=Vz(LomG=11p3{!vgoa%w@)#mnw z+JG6`e_R(%9eMk8iK-)kz}QsZ@4tI~mjn;~N_&G!&YXiSL4_ z^W9f5ic9rvmq|AX zN1R(LoXG>X{!V|HMR5sRt0zGJ(jEe`-8=qyTI}S1XV(#P_>R^?^FO|9nk6F67v173 zY=rHGwM0Zjsy8)ziCLAIk!aK~hpU#$Wt?Hg-dPBHv74H>aBAzobZCT$YxBzisbFia zoew0G0Qts1rMe_3mP~)| zRk3_3z$KW#eu~b`L=Cmk>2sVFf19%+?I)-00iNE3(A67nzN&l-B69)m=0hBCkGQ$LjQEl*jF3^@$49x}0)4!Js;J7JRaF3yk+@N~Xh%&E2x!Y$*P}{C_zGA8^X!uSu-`^jmni4B(V~2U3-H|MKNKz?T$S z%J=_1tdkKq?7WVE?GM-UAEgno0-pKFl&6=azZU!n>q@>AF8KYtj9c5v`$v zZLMr|mYVQ+rL#&dcjGSNFqzLvm0n}aDjycx@N}ngB9KF*F^VbF5Dm!9G#!sA4Gto1 z5tVw4N^p2=#jNSb^{?LpL2!wx% z2rosz;;T=bS6_sLNbQZxC)zq3w8-0uy?iC?h=z%MMIk`G3>l~JlnTT@^Y&l}-1(-0 zHE9oSUZ}BEefjAH#QayXu7);?;+JCCh==FNP^dur(l_>3vvC8VfGp96-lrZ}>ZF#I zv+ao(x-V*gQ9q095Hxt>rygjb>`+mDR}b>Y@&{WlDMUw1WiA-dkfP~DHs&Qp?I_u= z-BLCq?99g4j>#KGeL@Ss$js%>%dN(q6ZCps)}RG+Yh2zE&6apHx>Gf5hK~-N+=DSL zeu3qCK;j#+HJn~rU#}-~xdG~8S94?|0Qj9e4e`|vNsIGUCV>CC65VHw?5RFf#mEQX z1y-4eCyZ>*V5O?eQPAx>MP@}p4$(pW?Pf9(B?D+osl;dzRM&Ur;bHrUJ2 zU*;Xti-+`wo-^$8mBQs-RlGa|*XFF(n3Dv$Wo*d#lkJzFzOf8IR_V_!J>Yfalw>jn zshJ9U?-YM^6$p@sk1avKs>w8dU&CrFA6Y<7Qx;CUhj6L)PRNym85LSnbF?RtJT z%mQf8#}D#IhOGpZ%x8Gx_Iaen18teTd{|!A$?2>2N)D%6BaT2{A}7I{|1N{%YxPV~ zzU-7C_X_i-{s5!WO04ah?;UpE(}i^ho}u6XT9p8jhl2L~Ld{%=qZ6$nTfw)0{BLCi zjKN1;YIl5ne8gOr(wh9>>;=!YN8bXgenK2XikCuM*VyQ1Zc-ySH^biu4}}J)`4zlIc&d{e!Oc+FYRBo#$mMo)}&brk_1+SA!(G5xg@DH)*ak(Y{B6S1+~xz zX9mzk4$^`=EVbL_KbUc;;LmPq+B*T;*+mEhLg#g!x4}oIoE=9v5u?9+g++(#a)p_e z6ngU=tEO^jVq3FT>dDw-XJZCa&ex7qNzXkpP0ujC*CT&nE4HFI&XE0QQvS8i7(9CJ zmA1FbR_l#Ul4~BldJePV?wCuNyOsKmLsR}>O~WxePvu;$c^%r(zRp84Ymj6BJyKN* zBZH^WtB{U|eO|OV-j~bz9K%E^8tEC;_*DM#l-zy3>=e*cZaawO<(pY#3 zhNGk2cxs?ckc?^TIpddd?4*YGhSydel4kkzT3{zJfYwxY1~w7QYYHaRJMfoew>{H}kU78275O zUj2C&#SV~h4@HEB+v3@pi#tJA5S^W{n)5vIdFroNJ1DxOtqqT@1-+Js|3eQZYTYLI`-s8xHq0>^w-N^#(-9!AlNpYmM z@C+Zh-{g8zEv1K_dWiMqWkbk-F_ij{uJ4vp>e`NH@CPF7ddew45QS_>1H^C&?#HB<8sUh1QwHT|E3fYRk^W8QJbA^264lVmMus z;|%xA?5v&NP{CJkV7N*3Okf&+2H%vE2Ry7<4!mclwHZL_Q*xDoAi4A(RQ;Obuj+FH z^qbOI1%0mE@aSTn*y{i&uTV?==-DdpxqZ}4nG$o4DS`t3;a+68N)qu4R$!+SXE;+F z0U0Qah!Og)oODhAcm^Z-{lmY~d08Oax$3kw_*edO4LEZFu9!^m&!k1ZGYZGefinUS z>PXH^OlZGx^63J?wiXcI%Utcx|H6q#!aIW{J#&_47LACd6B~?YCcNhP1gN95uJ>v+ zoqe9HZ`=low7TU;GP-F%jE^KCvG>>+|K_+*=djAEQA%v{A{>*E7+IJRP5EcgjMX*= z=w-8BCMZkd`{#E}#gR)Nh1>JBzC@RRNpSIRNX9MDm(^l;R>ZBxy>wQrCeKFdonX{t z926060HeupPZenzpsz13K76R{FPd~WRTeP;&d|ADtX@5`vpPg|p3;kWK;T`^JOiITWS!3t-;^8U+w z5u}2@$g-00|BzJwVM6Eo03!bh%>bvRhj-y@SkbWQr&sS*o$VQy7svQaKNdpw+F96& zm{}{b^9qH$6~;FYXf9Jie{xU)?iBo0@%qbefSmu>Y0(JL12$j^$N_wc)1Sf+*gRJ$vCpajpyvd`3lT~u%tF%T*-ks z@9sUIM*hc=kY_fGkcw}8wciL^>0&o#txwUV`~2bl2OPYg_-9T7ae$EjO(q_h6rl5; z-kHd|r4H(ux9+;NEP@yQ z4npZPmYtcG&w+W<|7-~`F9VL5T5g}d`_EO?-wJGmVJ1ABzZ2hGU?*oDoEP~1)4cLq z1e21#LU>R4GI7KIt(=i$4iU&J8hUw+^br-k^4k|r6diJ+iAw9O# zhUTx#1Q>kv(kG%*c_Xg-V(Bh&Y^c&F&)Ma}_SHF#7k4U2Tz|l9Jk9*n-j&Hud?pr; z1A)oEy|-;|>$iLNKh(tddqMnmIeo$Ort(6Sy$Vo0OU0p8~C8fSwLPrbk18m?uYez1mi)WPImk+4lWm9BgOYZJL zLD!oQ`fB!=5 zvS^*55c_AEBQ4*{3K*=BJFSin+0$e2MOHN44PK8GBUElaoJH1P^>jKC1DgTvolFJ> z+FNA4)&M_)eL{8wHSWh%Z)4Tf)eT~*H4c{pKi|p6zC3T!n*6QVJcTKfu|71XEGyB8 zQ?;p3T;oq_k+oXWLm0-TD`);0%cH21kN>PXPMg38JorVG5HYJkD?KwHk9>XUS99lw zMq8DDC+}QXxRLMgnfC96I5QhW1HR@Q~?on@(PS z%Rl9+?I_1u7-3tKVNzgEY*F$xlTDDunopc5+nycC_16n+{OlrUIP>v2>HuzF6qBMo z8DKoQ%gBs8^Oh9qM1Q*DE_HY_cy)O{7}|JeC3vJ}z+$#CwY9yd+m;!vDfAT`yKyR) z1Tc_nlBRtrRdTQ9ngh)=?ZVt7)YE$S5QdQX1Nz^879p`_xK!)ve3B3z@q>E_&?>Yo zb22z$O@&r#7Z>5zHgV8?eXyWcroW$5WhT^wVBAB9pDgWK3-wR>`E>A=E#ERXVq|*{ z8HLtM=H#%(U%ZkIQ97MmehkHerLy~WrLym1RR*wqlCMu__hWUNcpYQ}9MmV@%Ur^m zjedmkSYbJL>8*31`;Tz8*p_7op-J0BEhjhOVlK+-cxH;}g+bkH+1F<+`L%tPu%1K( zgnG>(swVV%j}iN+4B-`fPP%H~_KqzVQi% z*S)x~FgtW^P;fw$<{u)F>SQ-*4X~5MAGiQwN6l;!kOnd02~il2Q#DofDU!T(aX~lV z1uMX8KQ5x$1H(BN?J`}2S;NutwAVL!a2DKFW~{^!?8dkLhtPB^rMxn zq}lu*`!!g(fbM*H7{Z6vGHikl0%jY-PI}F6`vtnPD_>Bz@!nFFd5h908c>-KsN7X( zjPw69Ho5`~7dj63HI+B0_{R$&{LQAA&P-1Z0ekxlVBb^+uYVC9eG5YheQGOovXnKb zMDDJA76{d~lOdc2uE=^e9Ty8=_7k^7*?;~P0Ny>~jVJx@dHfJH8#v?~8eC!hOHoS#mvcMyhG%L@e9bn+qVF~I9fx=O?)S>)PD@+td$hJf!hj7=f`{P2MMLp&MT z`lv(_hd;?t%I*Hs7WAg(1rrF}J0M)<*S~%zj6Wsvj->soC6AMrb!=Oo-*)`|DR2(V z_Vuj-sAgM&<|YFx%$L-R1=-3s{YAKU@nF$nQ08ThFec$nxLXo5Z){gwsMy;E4zdlu z3io3oky2^c7g%ki`H-96U9jRu-7c#}_-V>kFyLKJm@hzWVqF-Ejt(piYBs{MmJ(Mu z1NM%)z79c7@1D<9Tf0ePZ%+MEGwrNeJ%{r(iXJRHDD0N}n~wUMP5PUC{5z=r6Wag( zxBP$2Bw7XGx|^YUk$*f#kr<9_(Xd{(B{eh1<}iZ%QKJh#83dAiKsxrC7|21ZXn{89 zS!2?YTm~xx2TUmRroZ`gdu%LI5YQ4N+`*OU2S)Ao0^A%J`iumSJSnA@zN$m-#99}B z7-M=kAdL0aeY3E(-Jx)>7qCV*he`TTz9}VjXHm*_^HRAo*EO2lo8~3mDnE~V?Io7+ z>USaL&+0)^0=1_BjRk^Yuo1Cxb97)gpa~x{sudYXcV+Bq4`t+K#}AHrNdo7k=0-NNDhI`Hw6lrO0&g8A zRnz4C;K}5L#LC%czP%h*Y64#x<258Ul5Qw=jV^z|b^*3qaZ zJMNk*c1ZgC^C6{k@y7M~*4E2Y6Ju)r8LlbpI}}^}#_j&E=lKDrvLd1fe|oU45i6(L zcij$ULtIm!O<~UxZ)1jk^N?UumIypi=W%i89Rtpv%F`#mPBTV<(?bWXqc@j*29i;G+dwBolS3fMhwu|Ihfr@3^>wJ}-MJ zRh5H5>3q46L9qI{=pr!2h%PDjlf}~#e5G#}&U;;vC^xZJbaDJ)*FI4LbS8N^c|Ev( z{~ywShDwO5qnXK~wUq6|z^3CUnDmT6(p2+=BbT5CP6dUrzFTjt8HLe#T;J@#?(8Tb(B!6Mz}rF?)n9Ia_q z+1op$=?F{`B$$h$UtJl-V@ey5%2(@+1#+RG7Yhg2g0YZRU`iCJmZscSJ`{yyyWj9) z)@0K{20hjLH(-Ax@|*l7Tpf#X6Jri9z--n3!Ea)>GymOjzc9R(xgmtig}+TsN**OMuSV5 zO?M=T+U?q$%WASn+vggou&kSGUM9AWAbZ@pv#+;RvZKhw<^onen z(`*iHWBvTj54yazf&@ALi7WuP{$TQ%nch6?L8+2k}53hm8dLnn85A`DqDl|wRy1of*xntrXdEZ{Ac6{!Gpa= zv|F@PJI6Pc)fn!vo3RwB`df9{E-w4Zz(~|iFslj%ar!AsGcGm6?vdP7QGTVbEHxY2 zui*?%H|%?rn`oKigWFstHF5@;DTB4~F}BGXSPb}RUoFAd_QPPkmp2;do6ruRatx|4 zhk-WGp)%VU#Z-Ga0KM>*sn3Hv>GSL4siDb|UhrTQ#I@1`n96t$YXz<>Fv%PoaTGsd zX;2B9omF#nJM>p*xDY3#S2A-VgaQKtm!F1RXNQ2Wt<@kOk1^I=mmQy2&HAn@_};9o z^?$MV)=^P*{rjjOAfbq$AR-}(fCwnvAP7izry?MYz%cZHsE7zicSv`44F=L30}Le% z1B2uUILz7O^FGh>{jGJ*I{%z?Vx9LN7v5{`+V|d{ysm2_%!B7_=f3~k(17^_Vzh3z zrh$CKhwh_rVrt_lZw#91n5&0)k1o+fWm{_lQdw8$tm^BFH1=;DD;JA7CQYkb_BJk* zAg$NP?6mA`W1Ti(^_Ki7Axky;&VVEfipkRwnFOGP>f6)Pp153jk``e>A#?B8srmh1 zr6=Fmr38PlOCNu>uU328**s?yA6bn}U4w4FFH4_mF;ZYDBXRX@9-aY_rG$m-{K=EcYZf|eC#LkqNK9=Sd4d_{(o-;Q%kaeo# z2Zg0YLT+wEgn-Gxx$*nHYvW)>55HMz-RQDVZQkE|TkTkW4(jD!6Ydw?V&EyAU4Lge zsa0i#=2O5O8EF*FMuznAv!?D?wR9Zn>{S{W|9(Wo4Q#0kAg&c?%bdO1>vi+oK8Z>W zgP3A(Q=hap`53{573MaOpAsA#kiXpDzqORjBqwORa(Jy#sP}SBL#Gn_x5HCv{9|an zb@9Pvarqx#jy@87vr+9_4mu#rPPYe1{q@jeeF&wl{BDNlGDz=R`*%4lG>te=zB83k zpVw%~FbWjbMsrlV?2Ye|YY;u`BM$xK?nG2S*;)K?Ph-A#uc@8VZQyKbmrZ%ToKWPa z#n5jhL%$rF{oA9HiPFl6eHW9qVvv(8h<+SsO)1B=*=)^t*0*2th!Y@n!9Hq*6>uRyAtob z5e%$iG0_q50+impS*2d3AF#E)#=UiPAUWO5d>i*S%~XuQy?4!~E9SCxZuWGU<@kb* z{kS)@uDqvP-p#O5WUqfuT-B>FQeX)8;krA~(ba;&4Qao@kI)G)b9!cHAa{v(n!TXg z(51t;JW9~+o8Khv@W|eG`L<#NaKH9o6Jg@MTVLObq&_2yN*v~aP9ZRC9 zI*SvGiD)t2V68U&?pGTshvTR2yE3%XVdmk<8KPVk#y4p;6{nu!ZI<7n{Zp^;8NA@@ zN_oEY{Vv;DqkN4UWa6umB+opray90@aBNu=5$(F1pcuepRJGhG$&|=jk`%#9*WkZW zwv+Y-`N|v-iKn3DcN5n;tq%oYhz`pJ-@fHi6jSf?hCm>g?PH(nOa~bs(i}M%Y4aM# zDM@|@d;5%0=$qeT@6Xm0BmJv+sJ=s@q>>J^-=F+HN4xxgDnkj>RyV$4is&x|fE)Q$ z#k|@G`Vs^!AhZa0ZcWZVuRs@;@nHqy`c+_RkE(kh2Rb9tfRwwbt;txF8Jp6(f~E)P z3)`xHIG+24AoS&yVOxLSL@1`%_XjHbt_hwJqJPKZtGN zC1{K|N;qq*F88vVN>@>lZ#lHAK#f0{ubQ#DelYD&?tjZ)u-7Jhy?nzNdg8!`G#IG7 ze7AZzwh0(=UwG|IgWbD?9s-veH{OaJ@UYMgmme_&m;S+ZW5?s;Ip8-(Y}n(NQxcV~ zeiSNGde&IX?Y>FUvKMNtS$lmefg`AuTF;o=L^trvIF>Cu=l~&5cMl@V@`$jI;pg41 z^sImT29H@l$%F8D)xR}O(9a-n@jF`nA6S+kP|qd(*iHC%ffvtRCu#Z9rT9Aul_3Iw z?QNO66n~e6@tut8Kfl{*4E+6*bD#hLiq+?m{!}3T`rRUpW&5Az$v^4s|Ah}!du2JQ z;J$u|;U~b$x@nh$ne%mltR~qiB(o>o`bZLVAA|4}D$&O^`N%K#|7!j!ouhETaNWD@ zdE(8W1aluH$)icDD7s&Ok*Wh$Thtn=|3SuJv58CTIK$QMy;x42v0EWGsg=x?`d^E; zq{la-%9>f3w>Gy9&z%m4?;OOwmdDq0S$eUDxr_|YfU6Ml#_7N}i|r=Up9X<$w0QjI zvb*r52=QkLkyaJOTv(uFRA6B4&31HxG(Cq$)=V`)ify^4I{;8aKIK;9t>whlY8t z!mXTIU0MNU;CJ_oc@SVD@J@V@#2$=RuHZI{%fH9h5B!Q!WC|68A^C0F9keJK%N(@q zILLvl#$75~SbwqC;5A-HShMhrx?5B!?Rjb`d`VEpICahM7rnUc?{~hufA5m~qjN!X zM2lPHF&8fGl)m`navBm9@;3bf{T&_4_CSJ4+TVb#@tzw;MsxQYxSz;?yLQPnUVe9y z7N!ELNXdz6+U-SrGsfxd@>`iN#8opECX`9^Ca6Pqw@v?3_4nK`zB-eI)*XKrN8*yw zQayanog0ToxjYIc>4?XDpyz+qD^5nAkB(miIIRoa^>^xZ!{Gj>o{&LFOaZ{U+s72V zkj93OjA}@mZA5(0O=<@KF>UB?{ktE3PaYV+oPHhCp>;1izek7NV`lKrIr%oZRCG@O zTYIl=($l!wCcJ#jhRJ9BR;}}FQ&$gc{ZmL$@MS5Hs^31n9GmsJTg^Ldo02=;8ZPqp z8o5=le30`baJr#rMPh~$nl5d{T1x3m!eNW^uT*9D4iH2F(fRKJF0`cQ7}glFs9>WN zZ`_xn;sjKi|5PUeVPMUiT~Z?WXBD+S14n3uDdq8G#lLz9KY2kL4}OdD---sH@&x{e z%JcUcIRkCH6X83=|133vFmS|pM&# zKraV1|MBX-eT@5{QRDD(NmJn8YvaJe#xg_`{`(>w;0U+#&G&!m7k_TBU=c`A4wKXV z*NRjaf+HQ_a>M^#`!{H)9lAUr|9e32e53~p|KTJ3Ge|+kIHer+H~)dH<>kx9Bkm;h z76K|z`<}M8gb9H74cA@73L5X^tWHc!saZvO#&hc#L zr~ADB>>R6@z8p8WhDS=>9*El-VF3`Uwrd;Z!zt|CivAxSOoq3OGkGl#9ImFgC}h0+ z;`SUgoh^&?OO*{rbMqU30+v_SJ)QYwo{X_Ybrs!DI{Jnu4t|%CYtD>05046G5G8`NsEyqq<6Cg^i_M6b(=&wrM8aT%^-QmPXYR3v?f$f%4MQY z9G-Fw!6@Wkna#KP`&N)e-ykFaO~Ol5F*!vvlK{n0gnan6^~^1`+TnmoumV!%E^~1z zhK;b2;!Yu)_Sx`XrviPGV6~59RHT}~Y}2jcVSg-KN_woWlTSnRs3ngYP<2J4?1GK# zNv~AxJvGW*Ue4zuti7LOpJ7ljbj>>tkF!69?b%N5tox}ZLd%wVjxKk>%hik*nb5O&36K*SlbLQGqY)8>MQp{H z0yNfKWAiaAynH2k!h#}q9sY*(b7_Y6YSL#m1?6jGseoRGAEae;n7#2mxaaotqrHXS z@%Ee9%qOd&iT2AyNLxS)-YlseC~~%)asZ-7l{euubiJgbS^)I*a;}s@y0Y6}tI__| zYpgjFR0Lu2X*#vYWw2P^CGkFN_f6wKJ;czz+P5;rK*cR0ISD$>G`~>1oqyyqpKE@I z=JGCy@l#BBK;JSDFJaQ>vo@n8Zl1Vw@xjxkmL4q}mmzQW$bH7P9bLWr9nU0@m;D>% zFS`xWU9?Xfo~mttm+3&@9X;**2z31q^BRdfjd=1whG;+%V>%9p;fhAyqr{B$p8BJ| zIdn?|0{nsjzwN-m>xy?W#{e1NSAX%j_=O*QRIMr#gCoJS0TIc2TQ}FHZo7C~aI(`m z`8rv@Y_S%I$SJ$f-1xExSG1p&#z!ipL-M)z(9%Hr6iUBvmJ*TAI~Kjl1huhll_#k- zu?`eB>`VecuMF%tRkyN!oiT;f>a z2B9P=e;?P-C~86iGSDKI`FJNdut-Od;SB)4D;`!|G!zDbw0XcHt8H;QUCJ`0OBm=r zIF*JEkkfQt^b|)h9-2sIcvXw*4q9tsVTYzilIDYl2Y$i(iRr!PnjQ_d#xQB-TUVe; z!KWi)mBC$l9rc*1LJ#zp>gq18D5thl(24S<$VwkyS%Wm*=F$)=kWQ|cTczG6 z-i+@to3q>d_2t&y^>5|9vyon)EDJw}6+RQnB$}dLpr8ALFNg~C)7rk!B(_IfZ-G~k zn$+F?co#!;yoi*j9=J(Bv_+GNn?~G?<(LI!AT{Wzc5^I6qCrCKw)SB1nisTtsbx>T zPI8Vg%8jHbM23}k9Ukf^M4qNe;Qg4>EG7fvlc&Opt?eE;J%4JihFzk$z^i4e5)!b| zNV1mHwur1sJF{0&d2K;?;$UaRa9W;$`59lvY2pZ65qz1l+)0sn%Y47zzoe{a7xis{Ak zw?LQj0Kp=tL;<+Yb&gZfp`Xhpe2!NV#(`&Mym+(lF>8BZeV8Z()U#D_j2UM*v2)7{ z`jno)0l?<)nwpO?O)NX!qnSguC{^~qxDQGutZwF(IbZbBLFBCHJ%LdJiHM-*q(c@l z!|F!7xqinyD5A0Xzr3eC6UeHhyuR|23*1}f z=a`Php+iyumR%z~wO~)%kf;TKK*|9XWb&5lv|av`*2j0s0Eh75of~Tk3kY02IVqW? zOw}@^%r4y!;2noLkXXJMJO8bu+4!R0rXSGMSwg2_{K_lR!svs+f|8e>(#Ndd|&^z5* zQ-m=AXtcCls7c0_v8E4E6{ifY-=n$%*6f#~=QQtG0Q?`Zd&&`GhR zlRB<8pPPdWAV>jh=P{T3OBBkRQzo_lST>tK;VvUb0PS0U0cb@Raf8^ z3q=Chg_?l^+YR4hcR*6!+rD&w7%2tp2PdmhAP6xJND>X>VgUNHw7HUCp}w7vtr&hI zS6yr)$KJbSnwJ|f?53&n(DJAL*dXy(3T5vRMNVOM-eJ}hLhCVXTZKasIXY%RVZs)U zMGOYk4~0N{iAQF5DaHZxR`WH4=o!_*VD`gI5R(v)4Z+U8xp(VqWNAnG zJ}B@C$6D4#lRa^;`R(sF0dRjE{s(T~4puXw_%k12JgMt&P0lS25<)$2awx$(r~1CkREkUYE=<;c&ouw~!dAhWSK3d7r>pa$ZG zuMAL%k8mF#Eb-LhX@_OP5}QJh8SdBT>+bc!4kzWUPIBE;L*Pp{M+Acci|gZW zED!MFhJZ7F-K~yGg(p6)wliV}n_0#9j`3Y!Gw!S?J3yPoE|>GliA%C^OjC{?c(Nwr zy1YDv{!~$&+Pb=;`ei*u)gRtnm48)oVHcR#~4(k3ym1@a*ENgr@hgob?&r z@o=I^27u~3uweGudN1>hP-2AYp~%!NOQHtD8)U1bcK`%5r9~+F+Y}z>wtbX;^pMQ8 z@&j4ABS30{$#srZiG>QJUvuw1cT)!0L7Qv$f&*I5UL^+{UU#utFnrW51%Sc+PO_m? z9E!k%h$?@3#3B>qJK#Efxx@gg%+_sLAA9i!={H{B&f%9h2nfgVW=SF3pXw*4=4Mv6 zC4&8a^KGgi5VPQGIV_eSu_OqNz6rvctL6gqTk%|q5=4u1nYi!sB(dj$l!1fO&yqJK zBBXslr$*9D@D=>@3Rp*f3OIz+3z97akD@OUj+3v4n_2s!fcnO=7^!NXi9H*$jz=V6|#s8iB$=HCD_5ZfZ zWYF@A8~_0*y%Zs*dsVq7nN3Y%`1!U;W2r$z#c>Zf^B!3i!b&8%!;beK78?qhWhtn^E}pB5csGCn!EBud;opeZy2mI`;Bx4q+@uK z{V5Lm9~A7TT#YXqR~M|J^UYkEw}l3cMZ#cb`x)o4-x$<6m97z-f`s;{{t8=PdOHYw z=r%14!oYR4@Wq^|uesmbz^C&0b&z41m6-0cS;$d!>oSoxw+u`Tvaj9vn*6aK)%bab zyF~Y{Shkyl>dU-DB9Z5nL!SdVK}Qe@O@7IV1jX0apsFD3x5OlR6Hs*|zmS47T^!uj zvyLLSO2_hGeK_i>kIWTY=9C32F)f4hh-FiVKuwLNT zqLnT17A6Z*PAEN8ME!a0?^3nc@oqUvQUNt;ITjVd6FTyh+Tb8~ysCM2E+8UQJytS1 z51xU6>P|O6Ce;u+9aBP9X@p-VZzNEP=&3OWxE6SS6d|;uF|2&{X1c}Oonzc*IZAO1 zYzHxJWSe$P`Q%QrIRTU16Bnd5Kltvh`dz_h;h25{{d8(b-Ww{Eg70Alqb> zb(qgyH+%m*ccLC}QxjU6C@PtDAp#5O^Lmf0Y0Hk?i7P|j%hVAA7R&LIbH*knx4T1B zM{a|;A?c)~2Br*AkWhkn%dLt(bU3O)V6dJvc3%XeefQ^XW#`?}u2?$2P|P|J{V|-a z*r~6`r=ACX^Sq8BSAk`p5H9{(?h`|*v}4tXi=*YAhr^?ehvu^YcW4ZRg@)!q@7~BH z0L1x%CIGiQCjYQ5tXT?_!2+<~b&4RTCP5QVUu>IiE)MIAFC;g~jIuo>s$zLy_5EUP z0M_Ra1II}Y0lG&}SpfGGfO=QAKVdwN_xTSvx`BbJA;d}S{d~cHM;KIHbu7VrR>oP$ zw$p;)tH@>JxbV;SmEi#2SMDjB*1vPW1gx^@5$f3g!PdMAj2hTVh2x*ofYb_@7Jo^t z{Ktw>y$7$aX{dDdp9mb>j-;iohG^yAN*Jj;Foql@ci#Uqn}9mY`TwZ1{C(^-$dH7u z>QnzKwNe32E9d5ZB>HbsAbaJ>Y#_8R@u7)a6ss1Jh^e|%CN|#!O5Y`I zN+5~}5TCiZr7Q{9v7(JkY<(D{yqeuB>Vm?;q&tkY+yw_u*v-L>TF#!XslzUrh@>8@ zl=H&k9__sOk)vMplHv(6z+#});zRSzWxU1tw|@EGzy6O$;}NOIqdT%U{)|>GF<$IG zpRrT49Wwg}2X7S*s?RFJNuNmqEoI(QR@N|1QuM3)$)WFMrAKCrYYM)-QR~?@sKYpn z@~M=T=n6d7d8yQUlCNb?o~Xh`&U&|t^~Dwk@(l%4bPadLG+?@#>WdDDH!>ex65^jf z9)PyZuVEITtM03Plcu2QU_A}<&DY2X7+vm;fg@bWoRC?2xH9Uu8^109FmU92-N+PB z!K3=wCNmB5Xtgl2e|L^BfM!TZ-vf{+VcjM5>gQZC1nfpeh0NHW!}@2+XxiQRM}N2Q z1P||e{T8ilR(9foPG{9=#0~2i&wrvBc2@T(TN68bD0arjDE(c0sZ*`ZrS2?7-K-6vz>!xG2eaHbH*SC#Ow*Vi#*&9xv_^7Y3;-d}QQ=5XC5Z`IMO>(4Qf zk0hsRxAmIKtM_|(;eOR=!d7Bg^xnqNY~Ei=m*At(Xp?!k2rw@(PLi z<`kr!x0$xJ`Fa;6_CxvGv&wn9Q`=e>#oUf?|wB%$F5IpUdre1YR6ltT)d9dF2!Ce5vBfC?YQ2GwfAQ z%VRq-MrhKWzXJP6B=S%4xvX2ecA>qgR_q+}RJ=1tfZv^=N3 z2bYCZ)Cc&PU~qGvw%ud(m$v37O|AQM=HSKs8mI=H18CgDQqt-A^P^;4hJf-V(~|83 zaVO0)T2XuW-G08vK|I{|qXU7umpivIn5aXUf$9xy(bK=!#ODDjnMwY-3LkVxX`Dig zzFCdEDT=GC;aS>j8BKWxvT+2Z?zkOVb*Ajpl(%#=c!Y!9BeXM!X3v?%Y4rH!ZT{3r zdC@yu$*Vcd=Gj`v2_bxu-Ir104RL5kk4eqD9_h92Xf=fs z5SQKp)9*~pg`;ZE98$^(_s@)~(lT7RBgb~7p5h#nrv-FYpkqFJiG`=I?QS%!ZHA+} zd?@^*vb4@=#BiksqQ$?i#r`X^2ep5Go#J8r$ZC`k-yZfGjfRJ&aW!L#ReULB4t}*a z(k{FfMr6f;SnCq``W@GVYAtqsZUv7-?6!ShlpeN5Z#bdFqE3df3J$1VXmpQg~ zkzLIirq!D=K2T$F+atBwi76Mpuw3h&W*9ItpqFs$iB`S0=4Cr2X>dk{hBTM>tLT+W zC2gP~@~^kIuhpG}&wbBZQaFT0ZJwGWgbSXQ%;LUK@XlDRd1@PHNAwFKEpFiOu5Z~O za~St)1v3;2CBrb)5Fc%p&9t{p7-M<83ic z$?8Ans@&zBLZ%vhwap^j%A4agT)FePH@#9usE^7gpS;}jJl~(cF*)_2YRl%WjY^H3 znEI^zJJzmVaPEhgD_+edG^g{$XF~I?&FJK0H^-4aJ=!o}DrL-xMSk>i@xB4tsk8)Z z#Rto!1W8DU+jvKwna@V9IDfsJr1uw8>elpjPlm+CX!rhH-)}J`WO`D(ae0`oP(>?` zk#vKYo^(-lr}ravn1)?IUBJ&nLN{1B5r=~y5q49BN zF1AzPGm6Tx?|Saip2E;d>kj90n}e7;%g9z1=2qsZL^c(#GuD zb>_k%cK0w(noHbV^iI6Er%kxqJ}m_(>^th{chV+WbH(8MnJjCBsXtd!V+pUwWQr1s zDV=7D9w#TUZ-*Ehd7e*enTi>!DJWOJdpaGXl-4JT84xmR*<;r@y4sjl8Z!kKYLrtT zkfiW)%7OH-2@$bGK>oofQol4_#4(HmQ5MRG`FyuqonZz1>~) z`;$VpDG_>kaB5q#(^<~2ZcqQY7VmIk-e}tM7bt7$<;K+P4FIb8iycN2Vclg|5oOC> z$k|z!EZX@LPncO&4y2hgRnn#;Bo*My?0h=)A}3r(YV^q}w909eY_VFoTvK2#a^UFw zd-AnATe|FO?BA_CzCa4in8iIE-^8RRTR5!I*Rwu}h5yTfkbzUq_JA%)GA3{YhsW!!GdR*Y0vfhOcH!O99H z)C0y})|=_;{_{_!|g{XbQ;uUlE^w+sgmaX8aG+d?i>u~?+!8zO0AG+R0uaW5`@dc@ub4OB{tDMwI zrSpA0=o1~$h-u+kM|yNNd}}oJzG)qnRUE42!oij?o>PU{NA(!-Nu<=)?Jog2zg@U+ zTFP)G)I1^->l%kGO7|F6#PG6b4|(GHIQ7g;R}k_cPE2be#vh9N-t~L{z|(p^psm{N z`zfwQ9~qBIv_)MA%IA{BM$Zna547E@ex$f!H*y~WcdMHD-ZKr;J;QUpUbM;t<0|d_ zqqguRoEkG3cCY+`tEXQ=t>14ByeN1qPlnu?u0`Ej@zr6s)(}13;--2Z$TJaYs*b)E z@bfb$V)nnts9eEpjIN#S4~V;DxZk%ei;?pslv0Oq4!_)SAJL=prEW7mL@wq`HL8>I zj+3D%#GaZh<%nCa-`SV$!6nByuho@`9cN@pguH;mU%(A!kS0}*E|Hqwe%+is+KpxX zakSjzJQBK2Z!BsOFu3v9BVhI|EssE_s?hndfpPBp$y@(TI>5*KZ@Ts0G5AxJ{r}KE zfhH`A=Aa$SORk#aCKs}~i8*Db&Qlb)G3%&$e3HcPGP}~zq|N@Hat&!ldn~7gR7+9O zrc|w;Zry|;Yt&)2jhdtYQfTDgVhPoYVwsXs;tFZP#;b`BeiT(xhjx{JP`U`|DJ_~_ zzMt$h!=s8$HXr)pFPUOS3)6DNw0!4EoSggRS@#D~No17ysZz)48H82KZDeZ-+BQ6Mq><>_ zA0GPn_XYIt6V_c~|0t1>wC{ji`&uRNoJ+$AvbvN}`Yaj8fA@@LHn*7b7}j4_d_=Ep z#%NKL=~DV|*d36+P)RmBs^7E7R8zhB-+4)#X)6%VrAeNm1L*C5o&i|(L~@y`{l8ki zZx80T75LZY-0|7{Ko2cFbl5-WIDmQ#r(c-~--=M6VIN5K#%wxnKl|OACyR%sQK=Jz zhvt4C`B%VsXQEHQ_im|*Dv`S93;8b??c#qZf>m}jXQlsi)L1L(eE3?eJ z%)~mfuNd&reagjWTP5s91QW(5!0m6{EhqxDD*N%hF8U-3Rn*N@1~FLojhREO zuLbw;t6GMD*h3MmYt|Vt0oj@)WQvyqWxqh8)ON$b$sWUX67sipe0uvE*R)-)0c*|U1@5V z9WFCFJ^=C({%Nxl@&4OqQ+b>^ZR53hHW;HOxg%2V&4|fw&a<;ELexqnC%-xsC8a&L z3}?4zehR!?to2t>UJPk)@3PM=xtCf4ls=oF*4E3n@11@$#p%;huwhkns!o>y})r}z#N6gj~+~`LMpn3q0&e0|#C(ZA4za2F; zjV=~CK98Tq&z(w3w z8Oxhdag7qzJuWIVp$Jr4Y+2z$%nOU~Hy83=2C8tJnd>XHk?rjq=E#i#25gO~1EVOOFaH9xg z(6$%n+zd519Go#XLE7ovuUpgn-mOYMapgtQIq1*2zOWh5tD5bHK9@Y~KAT;GH(I~} zHw66@PeXS)$=gTt;4WdLcD)u=j5R2J-XlG3-L&WLNGs2~dvd!JHG_%&3ieX_c@xke1;0wvs0gr)NBU_R4NFpt6?7-TqN9DxtWT zX5J$oF`-bV>FZN`Ntmnk`5+TA9=rW=Z+z^IwlxEBoz-pI{-!1A0U`17vNCM&rt9ys zngf3wyVh~Vup?e%%~btR|9dgh>)(~5Y# z$~{N6Bn8PC> zOR?Oy-A6>bA`b@6`3C$@EoP0H_WuB*ynz3L=Yq}?MoHTVoQwrQM&V69`w;*Qbn+E5 zCl0CPYV8keY%;GArcg`u8dnd895IS?r$CPkoHK?K8W4l2-iUHOuHu)lgQM-!^j_6@ z+{(|=FbHKk>oX9a;FeuTL4C z$vWwrI`>@+Y>F`3HZH55jP~!0#97Sl>Si~8vParp)nyx`gA6%D}gW z(*d>La{|izvJavWvoUwg{Lvrib#SXW39-7{BaBTtX^`<1n&}<6fu^+LnKj)rK6WSE zLsh}0jN4xTs0>VjD?_{zHX8p)E5N~Yzzz5E?(yhVL1c-w##9CSWtpxzjap?ZAMxp4L5EsWJ z?KE9JKbsMWdfXW%N?3Z0r5$N3dej>v^Xx^uta*3z>QYWubXC=Wt$K=Q7-1H7TJoF$ zlr7E3#H6*|tcvIUHHnBz{Vl!|-PtaRJL4=8Q$`4~Z->grvgW)QD1&GUYPHF5Hot0c z+?{xBoUMuWpmfXZM#Ct&W#k+zylRZt>u@nJCDm-}>po#@@f8QqF{(W|24$qswtjpeEytM z@=Fuc;U=D@O6pBQO>&RshROHLw{mJd(g#uU#9qa^8CIQ3NG2Hxz>xG+P6opf7##do7gm2aAzP#Pq&a~niuYkGWBK#?p)Hzn;E)Q zUGm{@Ug+vf?J;Xqv?E>hZT=ohfN8`>JnooTxM@b(En_;>{x(VPr;{bSdR9NLVtd%5 z&k_V1QY6NnhA{4V#9J{v%Mi_AOS|*uEF!nNmax{Wm#FK$jO#pOb5z-i)Mev_W8Gf3arC54E|StN?IK1U*ijI9yV%XV%(xc3*~b!1A0In@iR5sTNenuX}mPp zm@~|MzG3&f4%A9=$<`ZHk3JvS@rGB^ALxw19UiFlrZi>+Iso+=Yr}eKz!4Di>=0(C2Q>>8y{iI?vGL)p6BA5gb*2?l#;MH zpU;b?@ft>dMT8=RJ{Nb^?^_5tr%0X(bEQf&CL%N5qT#*;)9cm`(01iak_T@$E7T!V zMa&&{1P}}hloDUM(vqzI8f|j6Ov?>_&}r%K^$Ds?cS&(|PUO`3d7vkGvcT0}s`#m# zPDRC+XLKL6t!9elN4;Ri&_#Bp531TSf_eqJOrS6{K6Xr&KvMNgUsB?X0zE50n#LdS z8*&>&h)c}qgYWT>-MoaHJL;Zm!{_*P2Ja;=t5Zz7Niccq5$yT&-{TBD%6Pa`R(mM) z@vr0{@B-0YwWdu!$!F{NNqWO6HD-f5y))B$5J_f?iRm3+TolJwbZrD%LmIv_U5WRSQBQ?21o;UjA!g=s>sZ>*bR zMyg1@V-7y#h47(r6a^#-VuJ3%TeQ+W`ym4oB&ff>VU4Z~??+C9AxII^+Wzx+f4HRk zYMLFdNN;rhlu``4h3{+Zh=_m4la&%9=mf=maqo$8;qAX&0qIo}8H9tLPuup(riiqa zvam8(%C%0;vBNC$y3$VO@s`4uh-)+9j*%TbKB(`-HHyjw=*v?H?#;-rAmCqC$n0j( zbf%Q!Bz;ad6sFNuDD2zzDRUWn!R^j8YSHCQKtPq*y#AT$qdwTt`tZxA`RZx+5ashe z9uSCMB1z=%wC75Y|7Ltq*6<`Jh(on@C?`N1ruu!5e_NdnC8Dv>@tnrvX_DWMF#jZF zdQKEMk6b;jUsyvWrS5VSWfC0H`yKYIE{Q)D zl*@;f?~J>o7CuFa$E8*c+~PV;QNfkG15bo zm&G)lv#{Sn5iMoB!o0~3tu~cY%EH#FY8`~bhZZpccf&qST>HXHXJ4#tAT~r5IYe?@EgAMG3iSUQ7r}b8|({kk+WmMACR=!f@uf^1Ty6Z(4NZPxI^Uh0|gLH66y`t1#Vt9{}J{P8C-*rc#@j59AE zKS|WLsa>yavD0{s)BFpQE|dE!O%^zZ2%X|twpb6u0dJH zoX3tD)w_p33_kQC^$%@<^&uKNq?U%_JQJY-4gg{Z``iixiU*wO#mpgwwZV%XP(pu{0D%xQdSp8j7BOullA%5DK-YhNT zFu~}JrQQKx_X!mwn(5`7ceYhgZ={p|CQ{xL`H-JB?4}FqT6l6X|NgqlLWXT#EhKHX zy!6%9AJ~;fd)qr*VFk$e<6v#_K6- zRAL@{F2IH2P?6;#Vbqg5WpE3W&p~st!P`&$PaSU)m}eX`kqq)($|-*lkfl+iDhN0g zax%di(Q~c7FvI<#4{D&`Bojq+-6D)=@adJVPv@2#C?9f?2PqJFNQ#LtMe^##S1D9g z0*Ic({mh5^@lyULe#ozSIrgPjfiX~Sklm>RTer!Jtq#dDCoF;b%>XeiW*Z4L98k%X z0iB3AaKYlqNit9je9-1oX;7eJNhDx?q+>Nfl=n!0D2R%Jqsuq@Rg3WJM3#?gkt9`m z1P-xnoZAI=ugqLBgpZ^SkzZ89rciR9yQJ98MfjoIe1mK=NJbqzvHO=Nw}9(?r;wd* zJ1+|=O25=(;Fe4C)$?Md^oMNi$cuM?vgiL=L#NUwnBDCxhkczst`T=7{OwC=nsArl zaiDM_R=N0p6dV7AdjS+3A(5BdP`AL9zk>6>qQ8HC`-&5Ua{oOYAG`mLQTy}X|MQ`v zqOhrcp~pkKxZ7aV>{&Vm_L`rnwv7b)%ynDu%5!tkh9vzqcqR0q5bn+0txHdsvFnOzN=iyvD6Oqvq~YsJ>mhcVqxq4dfKIzN_dG2@ zve+uT`!q;I<`Hp&S!L$TnJ7S-_V!Wmwonxveo4HOYY?)82ZGe3@54uWHX6OEx|U%pD57NJhf0RX+ZAzKG%5Td-q(f z1CqH8ToVO2YKcGrm1NUk^y%-5bjAHdUSVuIyGvz;m0y+w`&@;`k*@dCkvlg{3+G6kQq)l_ox56yW&hu}NHHKJV7 ziqY>RwBM}uVOJU(+bt>*aQB3|$ge(XHzqurac29+P=|^cQv$-4{y1`@wy4{R$s;2p zA8UPJ?oQ2vB1<1M>(Uhd)Wnw!0(S*dmmDHTC|3>6OQ+9YP6$zv&ind#^#WGGyWy=a zAal3e9jbKz0Dx|G-%?}Z;z<9gX#fqT@RZ}vb%2Wa@_McR*0ZlJoFB6nG`CbM(d z@-x)}n}gJP=d)I#?;|Zh8o&lroWm(s`Ps<-na!I-EGvB&Xu7Ah11-1trhimJk zBH)`vJPug!sVI={)H|^w)?YR6_anJ`Q*EFjow&t zNVnvqB_O+sVskjkKRNR8=uZ~>v>pN)&?!H@hNJ*S{hO@TaKRC&FtEK}hfQxhcepi0 zUmbp7KK=SOX>V_@r9L#FWF@VE;{r>&$_Pey)VAxurCc=ew>+0*g^i& zrg*K*|CDf_&y{#O8lE~1gI5X02_yvi-)izFNJ+c!w94NZCg~`B{!KdRPg>)a2c5U8 z^scY9-+V(+*Y3e~>Cd(vKR=#ZDh?6LZr9tO?!~2v5j#_d;FBrZmec|0C&7L9HiZ$u|E=Yy3}NBJ-1o^e0KVhTWC_{SfB$V^ALb@9F=m^Zm;g z|G$0cSZJd?NBZ>1w~+ONjx!Czy1KfFKn7Jm{);oImttm3&6vmLSoZ;X78#q60Csa6 z1G~@2vbF!ZQG}+Hx1zU@8}1jN4$30knrR%xQyX>l^^>Qkr?bX_f>}Ru1wFa*tf!|( z6@#8t8%&qPTk5j+d8r?PvAT48fyHEhX}7_9BR8QB>`|EE#BWDRq?`%7h7EwfUn~jQ z)VmQJC`^3aqIHUQ?4C4O=EpB{b&0;PR#hJHTd#G z%*gNCRN;FWU;PgCS)b;~e<;*E7H1{nzirX^$&{$&e*3S@mAOyO$5$==`tzNatohG` z&|mdk$bZgXbUC7^z4sx|Uy7Fol*Sk6TT0_7)&tnnJfgkPjcckvMq0+?Ni|ggujP5( zqw2v}=AiMI+w}#{PXU4K1sHibI11LiLV0$@xGlH!* zff~eH)u>3ZO^%F-bbH@Nf#=HUd_K!TUd*?(iUM)iexO{@U!+$oq03+NN+y7ag!1MK zl1n#YGrn*Naz3zBSY(WOfZcxI7Hi&Muf6=W`%)RseeEIJ>Nj+7f0a{tiqW)7DpyMN zbp&=oxHR?V@h3Hrr}|l#xdv}p=)JV9=LIQ>s<}N4yFY_g>Gl;BH~rlOU2PWMKc4BU zJ3jP3UMjw;$fIvIFtnGUYaZF;MtQ$QNB@~rlcVhOaJ7*^i*l9g?!^(qXqkAdian|~ zirRgpXE#cizrGO>nG_|GC-#&{Yg!Z9R9)g`K4K~P@;K+o#5~wN@YXY%Ug#IH$h$rF zph+RRaum@)o!n?{nKSG$D zLAGOU?!9tt?$T16`X?rD8i3Un1Y3Cu`kx;4BOh{z+$5aAZ3hR;HN3P^lypR%wKQ^! z0tclgFaM?x>~qw!E6M@D0Tt(8fJ&Qc0*{%Skz-iTh{oVwfmWF3-pf^53(LIeqOjq6 z#2UDg<7dS8dat>*YNm_?XI`l`L5kfQYx3kayr6*$XllR_Hs5*zOAy{w_Z< zm$yb4(G)5u(w2K@t2b~X&Nr2b`(@*5t~!%b`H)Zkvd_1ctYhg|TRGOO6Sh9O8goov zrBv@QXh4oZ7bZH&Y!5?P-5*YNxeQ5 zZLBfCH(en|3y&GUYLI?8woVI`OMb?*t$Z2Fy5z7fO?Ylu6NDNeiK6%3?COk ze~8Z^!6pde>w1zE3H$Ej1ZN6pJgI!r2vSd*XU;kWv*X7$g0C>CBe$M5G2s> z<5z?UN0f$`1K9a|cByift*_nRUT@SjkC>LNSTyrn^B~)u?ms)(be=M!N8Uxr9y62I zr9T~w`8@m1sLno1)SUf^v04g`-dug`hG9w(%XWfb^JgCM(I|cz+YX0*KU=dPBu;1H zD1X4m{;XzIc%A3Rd>&!l>=M~N`cmlQP6pPfx8{||@zrtfrGCC+X9e#PAJxF!aVthy z2xzW7IJ+xN^a0LvT5p-r>i}yT02?NNa&!eSQg59m|Lg&#c`@kSRLXXQfk~WROrQIC zvvNBf7I(Y&1?Q@Xr~+^ONQ;7$SYdkCQkAZ%%qQDwMz5N?Q-@!Bt9P)SZxQq zg3?430UJe{H0dY;Hkvf)C`!j5El4j%#iJBOlpX}>y@e7=5CsH6ksi88Pv|7naCd^o z^PP3pUF-h5KR(woi$LAd-gN4pK*~X3~t16$2hn5HP)SOj;#H}vyn#y>(;zS z3OtzYo>NRh<&IB6t7sj`cyWZ<&_q?wN-PhT;!FLOJD3k35X6=Q1I)ZLCn|9c+F?O_=Vy`bqL2}rkAd1{n`xL zy$T%NAlz2GoYEp-J*KqwBh&b$XS*CZISmBRTmuBKs3}0+TBEoi!}SYc{>kiQS@0ge z=c)D+7nO9weGD;Joz{UaM zmIge8D|?K(Rs{W7Odg(0*~Q(u39Ci=PMR(^bR;n*#;W2+#xx-tSozc?ZZp8 zDj@hjE$=A_oTC&-26Ss9pZ@e*@p*QVG|)z{#O~;URd9)ziU<6dqCqu2gt*=uqj+Ic zL<}gvJ=dfYP{uP{CfpzY2htPga1=DHb8F^(@dsB(-`Pl8u-HDO!CS9@KV4>Eza+N( zyf30Rqg@~faNOz{8`~ouk2nCH=(k6flRWy2({FzeIYBD^r(?YuxKc(p`}E4WNk?uS z0aAm#X6Ack4$;P-SB$z~jz3GGb$X4l6RD&%d&p`DoGAT<*6?4rF~7h-`FL(kO@=N1 zEk1k%9FYnie>~C5;CW7Qx}hyzrUQ_+$y3W;pe650L35nVlf&AONk^BR_wNDd^n}X7 zf9p{&^6STr9bFi9;6CY;&CjqKPnA#5s_;A{0XTgVnogqVJxFkd8Z>t?!enlZ_ymnigEi(y^?gShZ zH;I>Qz)nqpD??>*OX>CA1z%9pUR^0U*7=TvWlI7?5kv91BZ||~Z!}0BR1GT#bk_L5 z+(1LMI5r`}n5oteTsygL7xo#}v4av%HCslI#HHINMzJ4K`sV>eA`ZHAd73L? z-CV)x*!e!=<=Q~T3(M$o!p_T+09UL4Oa0#1*y{q~lBx-i^e9JRzqrO3Kljy+EN5qD z;d%?&23ohF7oKeo!ST}1bjt;KV(qocf9^%N+1qC=4P8BS04XiM1v|G7-XT?FBlI#( z{`Bd~fHLWj7DdoDL?NWS_OJli9{>FkC<-=e+bQvxe|LoZ=cYu*671CcSnmD{ydpVh z0BBj#fhkv$(fyCMljPt3^^#l*1fK)F2DtdZB!yCiCq!-PJSd2Ti`iIxiP=|wVABJ_ zCj(x-ah?83RihEW96*m6<69dW1R)zujZt zXMXkd4k@64EBUp7?n6%}ohWg#@06($7+NWPU4%Q4-$9Dkde2=Fy- z--FqkH%&l#l3j(eag4&#fjhp`wu8Im!B_f{N3HB6BmS}C#T}vERmsjTBqRYWQUdg0 z(zf_8UFF*XlIe#aRmLyBEkMArI&5Z8Zi>zZD5HB}Txb<^^Bn8E75!_KbH~NOF2Ke$ zknv8cFDBAX5|ag68b$h<_>CD2RTh@Qu+qIJ7H6GrHIEH(TJDVmSY#K_t!QHaTVdlILyPRQ?3LB2Rx|*k=sm84>+w+f9QvNAn_97zsWQrVT75>O zV_v;boYDE>2pkB_uM_&LnxYJb6)~^sp%v6GDua-)kkPIo%-&!D4&V%kkwU5Sr9VGk zF7bub#PZeOv-M?ESN2Y010HzkaAW@u!d1jc@)#^lcn?*J)^4Vd_!;*jGoO@@I!Ri~ z0aj7$?!z|H4rkcgJ5AD}cse?1`G%rlfd%eOoKBeU;Q<~%#dM#gQ}j6BilCdd+ad;S zV|`|Xd2E07IUzhD(QdVU%;`}i`(uDMjT4k79hY}v*byWRn6kM))0{sc8ZFGh#EHL#r@LoyaLrZ6HZXUaz+kMCYghGwzkTvWf17xyq_d#tSw5vT%n zoEnJO$J6XfsGOlCeZ7^mG(Bd=D{eyVuP9NjyIt9iHDosg`hCAfF`)F=S@jqYF8kCb z=@)uH5KwJ-TxlP!&4P|fC6ED4;hv%$4_1usa7UXmPRsbiYKTsHG2(N?g6Z%wfV_T6 zm~1phvoEzCB{CO^Qj`aPf}TiIkmZjz?Wlfd*lbHB$2b6B(x;#uFj%PSM{(1q;+}F- zVH>b77`bc!V4AG(PV0>@*m4C4v$b0K?{s$sm9)9D$gm8#vL?EIx zUFkJd{I)rtN3_e8eq9$f=jCR~3$I_GBdr3{Xqhod@5=b7FT+g`@2n4;pxdl~kkHx_ zpUgjf|A}Tfg5oUJY1={qwXB+#k@w*)X zdt20|$(04O(=S(KjNWdEW}KiL-7Wv~EUAzdQeBUQ`4gDi{L>7`rYp=mo{=hy;uAW+ zd}NPX?V^vJ`$~37e^>x9lVWr7yDJbgJ2}83Oa{dH6F`tNkt+)lJHSJTfjOorv9xC+ zzvH4>b@^Di*lhe#*E#d}ul{e$Uch8gFmXoGew?{E3aFn#{oPBXF9hyWyLx>bl(BG} zW=u%Rm`sJX-a1ORSguBY7-lB_ORQnc+*qjXRucWE;+f$ zvXUYPAQ?KU69K>TEXit+BKD~ZZkbeo6X!9AH6DQOw(QxS-2*Ok?hAeBBb=AN49K!T zgxRjR+N5Ooy??Cmn5N9#5=Ol7#mUf$(3}T{#j&3X`LR^w z9b~0pCw9KWul@^@vcfxDM%NY_n8^asG;(0OX#|4AfE^L2Q~;n?YjZ59d0)ONaDq~l zZa`Fw{nEY2+?M5u1~jO^nttY>OB=!9a(`~+=&IMoEsL#k0b~H8$?@g}vt7K(`bb&& zE&_g@A*&WkujkgHfidLqIm<)YXsJX))+Ydzs05Zjfp;X0_Qh0KD~O)2yWP0(cMp@UnN+t3U5np0c<{^su#+@N6Bp zp{9HC^VL@(%%+>Sx)xNZnfafqV0)hdjGl67&H6HNyZTU;5_yX1Ne(Juc!(AY2qRXt z)S>-vF}#sJlskjA*HFirr=C6f6tT75vc|WQP#pV0kH>$#EB#^Xw2O3-;R_QU{~q0s zkCnrqAlCtHt!@q@PkZ25pi7`-0qY51$1l}WrxRhLSE+(J>DHIVl(#;YbxOuOm*z)3 zdlVw+WS6SaJ0mKdcK-YY{4UWppuFgcrv{1xB4zvfPOS@?BRcJ^8kkC9L1kKU)ihlo zFdYi_2l??Nf|EGFB6J@96$zHWsLq@pvCMRFq%}-qENVZ59Okrz&b@r=5Y5nL|N4Q3d#Lcz9+iyT5&Pge9NwJ%4A}e(9N115Ck2JlB zIad?FC9wgV_dS3QxLTv)FS-Imh3BldX^@N47+uppJ4UqpE-SFgZwuIAt1gI zbJed0<|YgVpRXnW_8{OrsOLKo5HHR5iz>tU7|7VNE8@wV6wA+00IE5PLAGA%JgZGx zmiGCW^|bnS+$+N*j=}!-t^*tgmk^@^Yrw}3_Gii7hl47`B9rRi8C7`T5NLRqugd_1 z#2rdZlZo3Yu7NPT6wXjHJVD!~Tq+nFLYiS_b>Pj!@N&+ib9z9vKovN<|qjH`-)z`5#2Gbw^5QjTwA0I9nddECOen4hB(rWqS%)yBao=67Zmn(HX9U;eG zV|0=;*P>AQ(5k3E$rs$b4uo^@v>M2BgS+{H)NKEU5%o0kJB(l?4t)5rslg!WkQ|Ut zBajal;r=gwo=1|;Nhxx}JZ8Grfo>l;V`#d-u}$)&K)k#VqLuO|*>Y=-ft*b3oS@*} zBp?S)jI7e&YuN)<3Xcc#9-@A%K3#z;Z6rjhP{P_`V1`PavI%z56|wwwe;0hqp> zM!hB(^>lT015!2g_}+xhfovux=!0zEpP#7Vc(aWBozDRCJvlv^fg_Iy&35D5aU0N% z+6JTs)3dX)E0Ju9mS9i8DP|QYyFHt#DcMrvp|-><7^s3GEy&d&L*J`GSL#@>?I}+S zO~E;8L;4CV;kzXvb6}HdU*(B2DcyFlIvC|C%0?rNU{d!$FfEJ>1CCWQ@PJV#fbUM+ z;U2wfZk|}3gy`={l!r+J7Hq!Gg$ZJc1Kp;1V8NT+(U7Ov`=6gN_;C%R&%JD#v;nD8 z8vq~2#@{3RES2PBu=k^$nzkZeU5Tx*-^FdFeZ$#BCd#ir-~1cCr>E!P;|HLKl)3pO z5OabUO%C&p<{Tij5ANkJo37j6gN|dahmggxdlrOr@Y~N(HW4Rj1ZQpmWy5!Xvc&S`UZhqJKV^SZX>%N92bSk^TY)<$$+0E}bY~EXJLXuz5Y#`B63KyzD7(mP(E1#D3Y4+fcTO#0u=0o7ge6NW*`wsJB2c9PNR06}ai#`}MzuqE-?xO669L@(v0xtL z;(aBSda|N8m3%AaMr)AJ`8z=OQE8`amHWP;GSFNKtZT z83zYt)~uob(CdRZjpPrK?SO^8Qtt@*-z*RTpa$poGd>4k+ds{pBvLg{jAtt8ee`cy z|9^g_R1-|=uL{e5**6#ge;m-AlrFblD*emw{$qg7kRk-GeUv=qPd6@OF%rT_pxDcZP|OO&IBPFy0p%%9h-)~3<5 z-ltUEPC75$u&DF*b1QyJ3r1mA1jNoBRdndUc>rkIHR$b)FGp}a$SHYm--sxA!iE=P z7O5F&VBi>)_xkL8zLPQ`(i_-s)?vYY8Ktz81tjNrOIwHO*E7*oqY^ceY_)K^A5o=i zK6~ww@cAcBRv6WT5WJdK$I#HGU3TV_^~}|n2SqWmpw+V`K=y(=Pho)0aI=E7j2p|E zO-9PWFY4Jgw@@YMQLnJrDk9t3W?#8)e`kJ?=k&I!wv=@h)3W(U7I~rr1E^YBThWy> zNsibxM-E|=hrsp^?dvNUbc2vHmQ*(Y_M1ETi~1)hsdmqUCC744&H0zY^H4x=DdKCr zOkp>O)XB1v2Q>OY)rU#h)z_zFFGHvFNOxhTqU7#k{=?!Ev{4Z zocwD6{=Fn!W#&O~{rBttbPfm7A&X9F77uCxmkgx{Tgln_0EmxcANa5>Gvco03QXAo zWIWeeZcos$ngC>%gkS1I0R2;lj#Nw|AF~rBQIWPV;PCSHC%v<8nwk9W8f1eK+%URj zXyvg}(!4rUltfK-%0yMZNLosw@C;=%-!YfN>ws3EU>k-n7J3O9YAk;YB%bci#>i|I z&g)km4!XfIG>GL5LdVN60U{$m-ZwYg*LBJ=0lX%us&Z&<@$K8U5=Ui!Mt(&%YXLfC z{$zl-QWnXwLS)%NvR9n{D{to?C;*n%eq87>jc;zW0k=p;@%b4`T(iDd$4s!Nf z@*4VLl#nQutS$q}D2u}VgWl8Hjb>eun#cqe8LIM(ro9(K{NztVq!n)B`qm1d#^peO zLDI?v3G#H7f?Ia0|5V{wg2;PfuVfY%uevH$-GA5awqtihxOL~MEYQNz>pUOZmNZhk zWY(9~>p}HOE#__FHxeb(Z`J(oPydz1|5+Kvb%R1R7Ss-+-Cv7YG^+aP+5^zqV*c*k zyWh`qN5BktO)qH1mDU|GuVL|}G3diVItCRwrx_4H2t29~We_RlDwiFALR!4Fg^q^by!xwm)I z@!%2Y5>aij57)AB@}x^?j4j&*B!IoNw^Bbg{y5eTgRnC#o-h1@I63G7OORst756WbyMatvy4> z-^^i92u+->Nt_oP@CXmCTZHFxQGYp_lb2_nX=N_ImzaWUP23GbmyOwDmX1zw=I>=o z2HbAKq-^Qzoz7L>!FE55)6^;S$}@*)Wxr_IfkNu1j&Q^h$g%zjsUUFVbM1K0EyZwc3BZD~j@C1y9A^&Z7dX(}!m!qSp5 zcL{dNGsac>z1yaOh=}juy~BM0Mc-RW{j1;ORz{5i@I4Cm`$0i5@hl!UL|_s2zZHOU zj*}4RaIGA0{eGeB{_~djnD+zCf3^(fTXX+B)or7>u@Pa=K6R@c_GZW%+CL_6YvE&M zqUY?|mNU+$gV@`*S2w>C+Oliru%uXwlXK|FG}&0|y|tf3oaZ+Gaq6mv_qC?IPssLm zMB7uxZOJisQ(uojiFxjCPvOr20008_C*rSpiZoEUTK}qaf~j4dx=>m$(j#*k|I8k5 zoXsRS?(q`hD8oNOBg>V@?YmsRxc!vqgj+ituRG;ydbQrP828Cq+i3e!58@Fx?0ot% zpir{TbsiWwh=k5E| z*s{Xqe%9I%<7h|AEBJ)z)C61$^pGFC)3@Y%y4_fGcEjE+WZSpYEy=yo{a5)LHo_Qd zQH$!$qtVgBMonH;Zkmo3VzWl4z4-8zHMtnrz0 z7jJ=cpxGiz8IN4^K0%NL19AfUEDqMIZj%pny{{kL@A5XcGKPP>0O!DB;j;ZRKV1Ao z`l`NjIBwCM-Vt@(39qH_>VMoV&h*_WJUk%ZygX`kIAc3ZJOAOXrRk338F&+-PayT> z0dok+Y-%~c-m`Y;+R49yzCkM1TpzQb9NR=^>CSYk8Rx3_l~dFUScabG3xn0>@hro= z{*!p@;93yA=xWui5%D2y%A(wQa~}m~YMHbG9p=FpmSvLx~$rdzp#|L)_Llf4s7kful0l zJ?E}-{oH&0hz*nkYuUpuPj0)wxf4?)uVYUw2U zJOZWVx3pr!?ju1XN~F_8;UQ#XKv{tB&c2Ygxl3Q45&T(|=%LGm!mGMdMSk;lBu;`a z+^JIa3BpWMB`kS(x=#ys;2WM~&pdG$n_=x)O73`&DjMR3M@t*I^zT)M=Cnbxb|24& zJkfILU(E2>kxd#GQT4d#KR2OO(pov&Z5F`orkl~`Sxh2HBYUPz^W?=DFMlZA#sO*r zHqOO#0~8ZnT2&BJ%ihE!O9PdK+w|^(@|WWiScj3u5#pQSQMx-??zC+Q?u22QCD!W} zX{A3$V&xVEm=u;(;H@G^rx1C#x#89aJ0IGMHGugvquq6Sw@c%Ua~(M7xbN}ZBSDs) zJ|EU6F_VR~67@(^&P^VJnJ-A6a0o5iI7C6gz;pBZRs9ej`-qn=P-uHGWc)+xhSJ4? z7KN)3UiTJr<=x7|l>3f%7BSu=NwFjt0*JEXNoda*}Mi0W6z zY6e#^l0HpPO-=MnA}+f_l*{KZ9J9vgM+3H&u_uo#%5x68Mep1CaWBqyerzB#g>jXm zYcw~^(mi(i=WnJb8r0<^K=j9a9^y+&l4SewYX%ur5A%lP+q=`v@L75;rpggpnNfN& z2eb@8s)2BT#BEm+GUb2CSW+;VXYnp|A3{)XwX#CGB-q$Uu*O0~$n+{bRk%J+=jmZT z!yTo!!Ugi0luhAPsl|&K1i9(=PW9%<2#E6-3~x}&aX~Ag0%hEhK;k>|PK%bCqo>Ij zsag0WzXqydhLSDKm+!UKxge$-@{`?+s1rx(M_#a+-JyZ?N^^B8sy1!szE>_7&%?b? zq{k4|DZj;G}zK7 z-20b%R*8aa%Mv(P+uUej98xkBjtu>^-~^1WRc`%wjyyaVnNitawu^kd@iQBeB)x3R zL1*|wyBI_yEw=EC9Y$Lu#4VtE1nvR5C_lGYi7yILwlzr(oX=^$l|N1IZ-EuL-Bf+= zYFmBwSbTPYpYBi!I0fK$J0h*3JyCS1I2bu8@g3fBub?~|WjSq*E@3My6|HWSOM^V~ zpfr87T^XEk^yK^Tre>{-BIy?1uwXP#1d9|>J>bJ^K@<_|9u6tNKjHP< zy1aoth3x!(6DOb>Sd$N*BE~39I&ukWG?iT4XObO?R>p-tj!$Y;@(8z{`9BGVKG{#` zYe|{;M@_I3B!A&%}?j=@@x4v zoKo{CyB@Hm`Fm34RqmAnlQH%=f*pIDCdo?MFq7vtx%^(p>w~p1+a;7^7V~uh*;t|{ zOn9uoYIEQ5Qm50}qxf~>5=zsHc22Dhg?n-q`j&zfb=ST0n|u{-S5{)XAFjx5Doj^v z8Dlib31*Um8owP>`ik8W5qOX>A~`H$DpoOhQ_4}^_6yXteL`0VktL&TTazt>^A`&s z5Aoq`>Xv_`AqDn7Db!$<OJlW7vr*sSw*3~=)?FNzZd){ITg|9 zoI-h_D+=0v)3r#v`}r~Z@<;Kkx!8=!UTQ0Y(N_*LrX-)^cL7`CfU_2P8x>9nbaT3h zRy5-A4DMs{{H{-IXm>?aZo3B#JJ$`^o)qo2KH1)kzbw6DN8kIE1{($AcO(|i*9e)$ zYNkCZ4M_J|ZZ5@SA@()YoCHH2;aX9lBTjZCS^7I8Xk^ znXV_twGw|7Hv)rj912(X)r?*4E9%oNp=NV}IpmB6_kUg1=dAPPRs4R`+O*gtUJRDBB|l zidDeCIe;^|I@kx!7A0q?WE*jMFlgj zpv#iF)j0Ryn8jL&9vUa*4C}ti!Kxg~b_4mxU8~}8LmVUMw%pLw;ar?YhhiUoU&d*m zu!BrHEnR@=(;I49Sb8Bise8Jg=6<3;zRHL_eb4!&VgsvPRd2HfpLX@$weA*Z2)@0v zvbx&05Gy@IwNpX+)KHGg;KQI?J6n6zG+?p3VMNrb3PF@(-uPZ9SPjtI8i{ZjAoV)H zb1HhfhvmHf`J{C0_>|(^IZ+QB#-lXcbgI2O;gRuxMr4nlJ#U1Y!3UZph!F}yvnA@% zVo0Q2f4Wobw-WE?{%l@9WiM)9$#pQJa$8}#SW9r>_V%S=+`UiJ0X??(l-H7mzcKR; zh92{CUbX4^$p{y@ad^LK{c14adC`M#V^#9A{%L4zk!m^{DDS^|Y%s z2+)`n&0aOkK1#@JvvjC5hEZmZhLkRy(F;-%?$bmJBU#T8V}ql8oU?-;TC=w8)Uc04 zhul^awN8Z|6PXKR>zdCtr>V5_BHRLdqc>xnYPIYb8?92#Wi$62Z1E2bQM>+m2h)Q;!v|^_XFy-GsUp=7N688qpR9nC_lqTX^PxDWqWBoN=y!LT)Psf zcNVPX4!Dk6E`A~5RypNp+4e$e-O=r#T%2-Ws=WUKRep5ekDHW3Y8ZPvhb9@;1cjoa zYe`-|ULFNCUb`<=kHA*5xR)Ha?)Q2i@BzIy%h${{>_wC#Dzl@U;qx1zHV8OYsw;k* zAl*0uaC#Dm|5t$d-=F@93;!#U|F3HC(|COU(2ZkX(CF(=)hWQgn`&Cu^RHP2{|_}O B>`?#! literal 0 HcmV?d00001 diff --git a/img/performance.png b/img/performance.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd5c8be5365ed566a9b11643a7ee4069b621d55 GIT binary patch literal 54331 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±mna%W- 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 literal 0 HcmV?d00001 diff --git a/img/proxy.png b/img/proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4312e8f026ef451b0b82e681533d56d70f3ea4 GIT binary patch literal 91131 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 Uf|AvyI{ARGw{iTf(b_BV9}h?`r~m)} literal 0 HcmV?d00001 diff --git a/img/tree.png b/img/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..eefa2234e2d19e726c921bac7eaeb459a0cc5e2f GIT binary patch literal 77004 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ÄlL;Dq}(C#5~6B) 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
+

Introduction to Immer

Immer

Immer (German for: always) is a tiny package that allows you to work with immutable state in a more convenient way.

Immer is life-changing as a JS dev, and I'm not even exaggerating :) Like, it's right up there with Prettier in terms of "wow this package is amazing, how did I ever live without it?" --Mark Erikson, (the) Redux Maintainer, @replayio

Winner of the "Breakthrough of the year" React open source award and "Most impactful contribution" JavaScript open source award in 2019.



Immer simplifies handling immutable data structures

Immer can be used in any context in which immutable data structures need to be used. For example in combination with React state, React or Redux reducers, or configuration management. Immutable data structures allow for (efficient) change detection: if the reference to an object didn't change, the object itself did not change. In addition, it makes cloning relatively cheap: Unchanged parts of a data tree don't need to be copied and are shared in memory with older versions of the same state.

Generally speaking, these benefits can be achieved by making sure you never change any property of an object, array or map, but by always creating an altered copy instead. In practice this can result in code that is quite cumbersome to write, and it is easy to accidentally violate those constraints. Immer will help you to follow the immutable data paradigm by addressing these pain points:

  1. Immer will detect accidental mutations and throw an error.
  2. Immer will remove the need for the typical boilerplate code that is needed when creating deep updates to immutable objects: Without Immer, object copies need to be made by hand at every level. Typically by using a lot of ... spread operations. When using Immer, changes are made to a draft object, that records the changes and takes care of creating the necessary copies, without ever affecting the original object.
  3. When using Immer, you don't need to learn dedicated APIs or data structures to benefit from the paradigm. With Immer you'll use plain JavaScript data structures, and use the well-known mutable JavaScript APIs, but safely.

A quick example for comparison

const baseState = [
{
title: "Learn TypeScript",
done: true
},
{
title: "Try Immer",
done: false
}
]

Imagine we have the above base state, and we'll need to update the second todo, and add a third one. However, we don't want to mutate the original baseState, and we want to avoid deep cloning as well (to preserve the first todo).

Without Immer

Without Immer, we'll have to carefully shallow copy every level of the state structure that is affected by our change:

const nextState = baseState.slice() // shallow clone the array
nextState[1] = {
// replace element 1...
...nextState[1], // with a shallow clone of element 1
done: true // ...combined with the desired update
}
// since nextState was freshly cloned, using push is safe here,
// but doing the same thing at any arbitrary time in the future would
// violate the immutability principles and introduce a bug!
nextState.push({title: "Tweet about it"})

With Immer

With Immer, this process is more straightforward. We can leverage the produce function, which takes as first argument the state we want to start from, and as second argument we pass a function, called the recipe, that is passed a draft to which we can apply straightforward mutations. Those mutations are recorded and used to produce the next state once the recipe is done. produce will take care of all the necessary copying, and protect against future accidental modifications as well by freezing the data.

import {produce} from "immer"

const nextState = produce(baseState, draft => {
draft[1].done = true
draft.push({title: "Tweet about it"})
})

Looking for Immer in combination with React? Feel free to skip ahead to the React + Immer page.

How Immer works

The basic idea is that with Immer you will apply all your changes to a temporary draft, which is a proxy of the currentState. Once all your mutations are completed, Immer will produce the nextState based on the mutations to the draft state. This means that you can interact with your data by simply modifying it while keeping all the benefits of immutable data.

immer-hd.png

Using Immer is like having a personal assistant. The assistant takes a letter (the current state) and gives you a copy (draft) to jot changes onto. Once you are done, the assistant will take your draft and produce the real immutable, final letter for you (the next state).

Head to the next section to further dive into produce.

Benefits

  • Follow the immutable data paradigm, while using normal JavaScript objects, arrays, Sets and Maps. No new APIs or "mutation patterns" to learn!
  • Strongly typed, no string based paths selectors etc.
  • Structural sharing out of the box
  • Object freezing out of the box
  • Deep updates are a breeze
  • Boilerplate reduction. Less noise, more concise code.
  • First class support for JSON patches
  • Small: 3KB gzipped
+ + + + \ No newline at end of file diff --git a/installation/index.html b/installation/index.html new file mode 100644 index 00000000..85084c2d --- /dev/null +++ b/installation/index.html @@ -0,0 +1,26 @@ + + + + + +Installation | Immer + + + + + + + + + + + + + + +
+

Installation

Immer can be installed as a direct dependency, and will work in any ES5 environment:

  • Yarn: yarn add immer
  • NPM: npm install immer
  • CDN: Exposed global is immer
    • Unpkg: <script src="https://unpkg.com/immer"></script>
    • JSDelivr: <script src="https://cdn.jsdelivr.net/npm/immer"></script>
    • ⚠️ When using a CDN, it is best to check the url in your browser and see what version it resolves to, so that your users aren't accidentally served a newer version in the future when updates are release. So use a url like: https://unpkg.com/immer@6.0.3/dist/immer.umd.production.min.js instead. Substitute production.min with development in the URL for a development build.

Pick your Immer version

This section only applies to version 6 and later

To make sure Immer is as small as possible, features that are not required by every project has been made opt-in, and have to be enabled explicitly. This ensures that when bundling your application for production, unused features don't take any space.

The following features can be opt-in to:

FeatureDescriptionMethod to call
ES2015 Map and Set supportTo enable Immer to operate on the native Map and Set collections, enable this featureenableMapSet()
JSON Patch supportImmer can keep track of all the changes you make to draft objects. This can be useful for communicating changes using JSON patchesenablePatches()

For example, if you want to use produce on a Map, you need to enable this feature once during the start of your application:

// In your application's entrypoint
import {enableMapSet} from "immer"

enableMapSet()

// ...later
import {produce} from "immer"

const usersById_v1 = new Map([
["michel", {name: "Michel Weststrate", country: "NL"}]
])

const usersById_v2 = produce(usersById_v1, draft => {
draft.get("michel").country = "UK"
})

expect(usersById_v1.get("michel").country).toBe("NL")
expect(usersById_v2.get("michel").country).toBe("UK")

Vanilla Immer kicks in at ~3KB gzipped. Every plugin that is enabled adds < 1 KB to that. The breakdown is as follows:

Import size report for immer:
┌───────────────────────┬───────────┬────────────┬───────────┐
│ (index) │ just this │ cumulative │ increment │
├───────────────────────┼───────────┼────────────┼───────────┤
│ import * from 'immer' │ 5033 │ 0 │ 0 │
│ produce │ 3324 │ 3324 │ 0 │
│ enableMapSet │ 4030 │ 4039 │ 715 │
│ enablePatches │ 4112 │ 4826 │ 787 │
└───────────────────────┴───────────┴────────────┴───────────┘
(this report was generated by npmjs.com/package/import-size)

Immer on older JavaScript environments?

By default produce tries to use proxies for optimal performance. However, on older JavaScript engines Proxy is not available. For example, when running Microsoft Internet Explorer or React Native (if < v0.59 or when using the Hermes engine on React Native < 0.64) on Android. In such cases, Immer will fallback to an ES5 compatible implementation which works identically, but is a bit slower.

  • Since version 6, support for the fallback implementation has to be explicitly enabled by calling enableES5().
  • Version 10 drops the fallback implementation fully, and cannot be used in browsers / engines that don't support Proxy.
+ + + + \ No newline at end of file diff --git a/map-set/index.html b/map-set/index.html new file mode 100644 index 00000000..6a0238dc --- /dev/null +++ b/map-set/index.html @@ -0,0 +1,26 @@ + + + + + +Map and Set | Immer + + + + + + + + + + + + + + +
+

Map and Set

⚠ Since version 6 support for Maps and Sets has to be enabled explicitly by calling enableMapSet() once when starting your application.

Plain objects, arrays, Maps and Sets are always drafted by Immer. An example of using Maps with immer:

test("Producers can update Maps", () => {
const usersById_v1 = new Map()

const usersById_v2 = produce(usersById_v1, draft => {
// Modifying a map results in a new map
draft.set("michel", {name: "Michel Weststrate", country: "NL"})
})

const usersById_v3 = produce(usersById_v2, draft => {
// Making a change deep inside a map, results in a new map as well!
draft.get("michel").country = "UK"
})

// We got a new map each time!
expect(usersById_v2).not.toBe(usersById_v1)
expect(usersById_v3).not.toBe(usersById_v2)
// With different content obviously
expect(usersById_v1).toMatchInlineSnapshot(`Map {}`)
expect(usersById_v2).toMatchInlineSnapshot(`
Map {
"michel" => Object {
"country": "NL",
"name": "Michel Weststrate",
},
}
`)
expect(usersById_v3).toMatchInlineSnapshot(`
Map {
"michel" => Object {
"country": "UK",
"name": "Michel Weststrate",
},
}
`)
// The old one was never modified
expect(usersById_v1.size).toBe(0)
// And trying to change a Map outside a producers is going to: NO!
expect(() => usersById_v3.clear()).toThrowErrorMatchingInlineSnapshot(
`"This object has been frozen and should not be mutated"`
)
})

Maps and Sets that are produced by Immer will be made artificially immutable. This means that they will throw an exception when trying mutative methods like set, clear etc. outside a producer.

Note: The keys of a map are never drafted! This is done to avoid confusing semantics and keep keys always referentially equal

+ + + + \ No newline at end of file diff --git a/original/index.html b/original/index.html new file mode 100644 index 00000000..28bc51c8 --- /dev/null +++ b/original/index.html @@ -0,0 +1,26 @@ + + + + + +Extracting the original state from a draft | Immer + + + + + + + + + + + + + + +
+

Extracting the original state from a draft

Immer exposes a named export original that will get the original object from the proxied instance inside produce (or return undefined for unproxied values). A good example of when this can be useful is when searching for nodes in a tree-like state using strict equality.

import {original, produce} from "immer"

const baseState = {users: [{name: "Richie"}]}
const nextState = produce(baseState, draftState => {
original(draftState.users) // is === baseState.users
})

Just want to know if a value is a proxied instance? Use the isDraft function! Note that original cannot be invoked on objects that aren't drafts.

import {isDraft, produce} from "immer"

const baseState = {users: [{name: "Bobby"}]}
const nextState = produce(baseState, draft => {
isDraft(draft) // => true
isDraft(draft.users) // => true
isDraft(draft.users[0]) // => true
})
isDraft(nextState) // => false
+ + + + \ No newline at end of file diff --git a/other-lang/index.html b/other-lang/index.html new file mode 100644 index 00000000..cfb6bd0d --- /dev/null +++ b/other-lang/index.html @@ -0,0 +1,26 @@ + + + + + +Porting to other languages | Immer + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/patches/index.html b/patches/index.html new file mode 100644 index 00000000..66ab83a2 --- /dev/null +++ b/patches/index.html @@ -0,0 +1,26 @@ + + + + + +Patches | Immer + + + + + + + + + + + + + + +
+

Patches

egghead.io lesson 14: Capture patches using _produceWithPatches_
egghead.io lesson 16: Apply Patches using _applyPatches_

⚠ Since version 6 support for Patches has to be enabled explicitly by calling enablePatches() once when starting your application.

During the run of a producer, Immer can record all the patches that would replay the changes made by the reducer. This is a very powerful tool if you want to fork your state temporarily and replay the changes to the original.

Patches are useful in few scenarios:

  • To exchange incremental updates with other parties, for example over websockets
  • For debugging / traces, to see precisely how state is changed over time
  • As basis for undo/redo or as an approach to replay changes on a slightly different state tree

To help with replaying patches, applyPatches comes in handy. Here is an example how patches could be used to record the incremental updates and (inverse) apply them:

import {produce, applyPatches} from "immer"

// version 6
import {enablePatches} from "immer"
enablePatches()

let state = {
name: "Micheal",
age: 32
}

// Let's assume the user is in a wizard, and we don't know whether
// his changes should end up in the base state ultimately or not...
let fork = state
// all the changes the user made in the wizard
let changes = []
// the inverse of all the changes made in the wizard
let inverseChanges = []

fork = produce(
fork,
draft => {
draft.age = 33
},
// The third argument to produce is a callback to which the patches will be fed
(patches, inversePatches) => {
changes.push(...patches)
inverseChanges.push(...inversePatches)
}
)

// In the meantime, our original state is replaced, as, for example,
// some changes were received from the server
state = produce(state, draft => {
draft.name = "Michel"
})

// When the wizard finishes (successfully) we can replay the changes that were in the fork onto the *new* state!
state = applyPatches(state, changes)

// state now contains the changes from both code paths!
expect(state).toEqual({
name: "Michel", // changed by the server
age: 33 // changed by the wizard
})

// Finally, even after finishing the wizard, the user might change his mind and undo his changes...
state = applyPatches(state, inverseChanges)
expect(state).toEqual({
name: "Michel", // Not reverted
age: 32 // Reverted
})

The generated patches are similar (but not the same) to the RFC-6902 JSON patch standard, except that the path property is an array, rather than a string. This makes processing patches easier. If you want to normalize to the official specification, patch.path = patch.path.join("/") should do the trick. Anyway, this is what a bunch of patches and their inverse could look like:

[
{
"op": "replace",
"path": ["profile"],
"value": {"name": "Veria", "age": 5}
},
{"op": "remove", "path": ["tags", 3]}
]
[
{"op": "replace", "path": ["profile"], "value": {"name": "Noa", "age": 6}},
{"op": "add", "path": ["tags", 3], "value": "kiddo"}
]

⚠ Note: The set of patches generated by Immer should be correct, that is, applying them to an equal base object should result in the same end state. However Immer does not guarantee the generated set of patches will be optimal, that is, the minimum set of patches possible. It depends often on the use case what is considered 'optimal', and generating the optimal set of patches is potentially computationally very expensive. So in cases you might want to post process the generated patches, or compress them as explained below.

produceWithPatches

egghead.io lesson 19: Using inverse patches to build undo functionality
egghead.io lesson 20: Use patches to build redo functionality

Instead of setting up a patch listener, an easier way to obtain the patches is to use produceWithPatches, which has the same signature as produce, except that it doesn't return just the next state, but a tuple consisting of [nextState, patches, inversePatches]. Like produce, produceWithPatches supports currying as well.

import {produceWithPatches} from "immer"

const [nextState, patches, inversePatches] = produceWithPatches(
{
age: 33
},
draft => {
draft.age++
}
)

Which produces:

[
{
age: 34
},
[
{
op: "replace",
path: ["age"],
value: 34
}
],
[
{
op: "replace",
path: ["age"],
value: 33
}
]
]

For a more in-depth study, see Distributing patches and rebasing actions using Immer

Tip: Check this trick to compress patches produced over time.

+ + + + \ No newline at end of file diff --git a/performance/index.html b/performance/index.html new file mode 100644 index 00000000..d1d3f061 --- /dev/null +++ b/performance/index.html @@ -0,0 +1,26 @@ + + + + + +Immer performance | Immer + + + + + + + + + + + + + + +
+

Immer performance

egghead.io lesson 5: Leveraging Immer's structural sharing in React
egghead.io lesson 7: Immer will try to re-cycle data if there was no semantic change

Here is a simple benchmark on the performance of Immer. This test takes 50,000 todo items and updates 5,000 of them. Freeze indicates that the state tree has been frozen after producing it. This is a development best practice, as it prevents developers from accidentally modifying the state tree.

Something that isn't reflected in the numbers above, but in reality, Immer is sometimes significantly faster than a hand written reducer. The reason for that is that Immer will detect "no-op" state changes, and return the original state if nothing actually changed, which can avoid a lot of re-renderings for example. Cases are known where simply applying immer solved critical performance issues.

These tests were executed on Node 10.16.3. Use yarn test:perf to reproduce them locally.

performance.png

Most important observation:

  • Immer with proxies is roughly speaking twice to three times slower as a handwritten reducer (the above test case is worst case, see yarn test:perf for more tests). This is in practice negligible.
  • Immer is roughly as fast as ImmutableJS. However, the immutableJS + toJS makes clear the cost that often needs to be paid later; converting the immutableJS objects back to plain objects, to be able to pass them to components, over the network etc... (And there is also the upfront cost of converting data received from e.g. the server to immutable JS)
  • Generating patches doesn't significantly slow down immer
  • The ES5 fallback implementation is roughly twice as slow as the proxy implementation, in some cases worse.

Performance tips

Pre-freeze data

When adding a large data set to the state tree in an Immer producer (for example data received from a JSON endpoint), it is worth to call freeze(json) on the root of the data that is being added first. To shallowly freeze it. This will allow Immer to add the new data to the tree faster, as it will avoid the need to recursively scan and freeze the new data.

You can always opt-out

Realize that immer is opt-in everywhere, so it is perfectly fine to manually write super performance critical reducers, and use immer for all the normal ones. Even from within a producer you opt-out from Immer for certain parts of your logic by using utilies original or current and perform some of your operations on plain JavaScript objects.

For expensive search operations, read from the original state, not the draft

Immer will convert anything you read in a draft recursively into a draft as well. If you have expensive side effect free operations on a draft that involves a lot of reading, for example finding an index using find(Index) in a very large array, you can speed this up by first doing the search, and only call the produce function once you know the index. Thereby preventing Immer to turn everything that was searched for in a draft. Or, alternatively, perform the search on the original value of a draft, by using original(someDraft), which boils to the same thing.

Pull produce as far up as possible

Always try to pull produce 'up', for example for (let x of y) produce(base, d => d.push(x)) is exponentially slower than produce(base, d => { for (let x of y) d.push(x)})

+ + + + \ No newline at end of file diff --git a/pitfalls/index.html b/pitfalls/index.html new file mode 100644 index 00000000..e35b6425 --- /dev/null +++ b/pitfalls/index.html @@ -0,0 +1,26 @@ + + + + + +Pitfalls | Immer + + + + + + + + + + + + + + +
+

Pitfalls

Performance tips

For performance tips, see Performance Tips.

Don't reassign the recipe argument

Never reassign the draft argument (example: draft = myCoolNewState). Instead, either modify the draft or return a new state. See Returning data from producers.

Immer only supports unidirectional trees

Immer assumes your state to be a unidirectional tree. That is, no object should appear twice in the tree, there should be no circular references. There should be exactly one path from the root to any node of the tree.

Never explicitly return undefined from a producer

It is possible to return values from producers, except, it is not possible to return undefined that way, as it is indistinguishable from not updating the draft at all! If you want to replace the draft with undefined, just return nothing from the producer.

Don't mutate exotic objects

Immer does not support exotic objects such as window.location.

Classes should be made draftable or not mutated

You will need to enable your own classes to work properly with Immer. For docs on the topic, check out the section on working with complex objects.

Only valid indices and length can be mutated on Arrays

For arrays, only numeric properties and the length property can be mutated. Custom properties are not preserved on arrays.

Data not originating from the state will never be drafted

Note that data that comes from the closure, and not from the base state, will never be drafted, even when the data has become part of the new draft.

function onReceiveTodo(todo) {
const nextTodos = produce(todos, draft => {
draft.todos[todo.id] = todo
// Note, because 'todo' is coming from external, and not from the 'draft',
// it isn't draft so the following modification affects the original todo!
draft.todos[todo.id].done = true

// The reason for this, is that it means that the behavior of the 2 lines above
// is equivalent to code, making this whole process more consistent
todo.done = true
draft.todos[todo.id] = todo
})
}

Immer patches are not necessarily optimal

The set of patches generated by Immer should be correct, that is, applying them to an equal base object should result in the same end state. However Immer does not guarantee the generated set of patches will be optimal, that is, the minimum set of patches possible.

Always use the result of nested producers

Nested produce calls are supported, but note that produce will always produce a new state. So even when passing a draft to a nested produce, the changes made by the inner produce won't be visible in the draft of the outer produce; those changes will only be visible in the output that the inner produce returns. In other words, when using nested produce, you get a draft of a draft and the result of the inner produce should be merged back into the original draft (or returned). For example produce(state, draft => { produce(draft.user, userDraft => { userDraft.name += "!" })}) won't work as the output of the inner produce isn't used. The correct way to use nested producers is:

produce(state, draft => {
draft.user = produce(draft.user, userDraft => {
userDraft.name += "!"
})
})

Drafts aren't referentially equal

Draft objects in Immer are wrapped in Proxy, so you cannot use == or === to test equality between an original object and its equivalent draft (eg. when matching a specific element in an array). Instead, you can use the original helper:

const remove = produce((list, element) => {
const index = list.indexOf(element) // this won't work!
const index = original(list).indexOf(element) // do this instead
if (index > -1) list.splice(index, 1)
})

const values = [a, b, c]
remove(values, a)

If possible, it's recommended to perform the comparison outside the produce function, or to use a unique identifier property like .id instead, to avoid needing to use original.

+ + + + \ No newline at end of file diff --git a/produce/index.html b/produce/index.html new file mode 100644 index 00000000..58df1375 --- /dev/null +++ b/produce/index.html @@ -0,0 +1,26 @@ + + + + + +Using produce | Immer + + + + + + + + + + + + + + +
+

Using produce

egghead.io lesson 3: Simplifying deep updates with _produce_

The Immer package exposes a produce function that does all the work.

produce(baseState, recipe: (draftState) => void): nextState

produce takes a base state, and a recipe that can be used to perform all the desired mutations on the draft that is passed in. The interesting thing about Immer is that the baseState will be untouched, but the nextState will reflect all changes made to draftState.

Inside the recipe, all standard JavaScript APIs can be used on the draft object, including field assignments, delete operations, and mutating array, Map and Set operations like push, pop, splice, set, sort, remove, etc.

Any of those mutations don't have to happen at the root, but it is allowed to modify anything anywhere deep inside the draft: draft.todos[0].tags["urgent"].author.age = 56

Note that the recipe function itself normally doesn't return anything. However, it is possible to return in case you want to replace the draft object in its entirety with another object, for more details see returning new data.

Example

import {produce} from "immer"

const baseState = [
{
title: "Learn TypeScript",
done: true
},
{
title: "Try Immer",
done: false
}
]

const nextState = produce(baseState, draftState => {
draftState.push({title: "Tweet about it"})
draftState[1].done = true
})
// the new item is only added to the next state,
// base state is unmodified
expect(baseState.length).toBe(2)
expect(nextState.length).toBe(3)

// same for the changed 'done' prop
expect(baseState[1].done).toBe(false)
expect(nextState[1].done).toBe(true)

// unchanged data is structurally shared
expect(nextState[0]).toBe(baseState[0])
// ...but changed data isn't.
expect(nextState[1]).not.toBe(baseState[1])

Terminology

  • (base)state, the immutable state passed to produce
  • recipe: the second argument of produce, that captures how the base state should be "mutated".
  • draft: the first argument of any recipe, which is a proxy to the original base state that can be safely mutated.
  • producer. A function that uses produce and is generally of the form (baseState, ...arguments) => resultState

Note that it isn't strictly necessary to name the first argument of the recipe draft. You can name it anything you want, for example users. Using draft as a name is just a convention to signal: "mutation is OK here".

+ + + + \ No newline at end of file diff --git a/resources/index.html b/resources/index.html new file mode 100644 index 00000000..b361e771 --- /dev/null +++ b/resources/index.html @@ -0,0 +1,26 @@ + + + + + +External resources | Immer + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/return/index.html b/return/index.html new file mode 100644 index 00000000..f53f6c84 --- /dev/null +++ b/return/index.html @@ -0,0 +1,26 @@ + + + + + +Returning new data from producers | Immer + + + + + + + + + + + + + + +
+

Returning new data from producers

egghead.io lesson 9: Returning completely new state

It is not needed to return anything from a producer, as Immer will return the (finalized) version of the draft anyway. However, it is allowed to just return draft.

It is also allowed to return arbitrarily other data from the producer function. But only if you didn't modify the draft. This can be useful to produce an entirely new state. Some examples:

const userReducer = produce((draft, action) => {
switch (action.type) {
case "renameUser":
// OK: we modify the current state
draft.users[action.payload.id].name = action.payload.name
return draft // same as just 'return'
case "loadUsers":
// OK: we return an entirely new state
return action.payload
case "adduser-1":
// NOT OK: This doesn't do change the draft nor return a new state!
// It doesn't modify the draft (it just redeclares it)
// In fact, this just doesn't do anything at all
draft = {users: [...draft.users, action.payload]}
return
case "adduser-2":
// NOT OK: modifying draft *and* returning a new state
draft.userCount += 1
return {users: [...draft.users, action.payload]}
case "adduser-3":
// OK: returning a new state. But, unnecessary complex and expensive
return {
userCount: draft.userCount + 1,
users: [...draft.users, action.payload]
}
case "adduser-4":
// OK: the immer way
draft.userCount += 1
draft.users.push(action.payload)
return
}
})

Note: It is not possible to return undefined this way, as it is indistinguishable from not updating the draft! Read on...

Producing undefined using nothing

So, in general, one can replace the current state by just returning a new value from the producer, rather than modifying the draft. There is a subtle edge case however: if you try to write a producer that wants to replace the current state with undefined:

produce({}, draft => {
// don't do anything
})

Versus:

produce({}, draft => {
// Try to return undefined from the producer
return undefined
})

The problem is that in JavaScript a function that doesn't return anything also returns undefined! So immer cannot differentiate between those different cases. So, by default, Immer will assume that any producer that returns undefined just tried to modify the draft.

However, to make it clear to Immer that you intentionally want to produce the value undefined, you can return the built-in token nothing:

import {produce, nothing} from "immer"

const state = {
hello: "world"
}

produce(state, draft => {})
produce(state, draft => undefined)
// Both return the original state: { hello: "world"}

produce(state, draft => nothing)
// Produces a new state, 'undefined'

N.B. Note that this problem is specific for the undefined value, any other value, including null, doesn't suffer from this issue.

Tip: to be able to return nothing from a recipe when using TypeScript, the state's type must accept undefined as value.

Inline shortcuts using void

egghead.io lesson 10: Avoid accidental returns by using _void_

Draft mutations in Immer usually warrant a code block, since a return denotes an overwrite. Sometimes that can stretch code a little more than you might be comfortable with.

In such cases, you can use javascripts void operator, which evaluates expressions and returns undefined.

// Single mutation
produce(draft => void (draft.user.age += 1))

// Multiple mutations
produce(draft => void ((draft.user.age += 1), (draft.user.height = 186)))

Code style is highly personal, but for code bases that are to be understood by many, we recommend to stick to the classic draft => { draft.user.age += 1} to avoid cognitive overhead.

+ + + + \ No newline at end of file diff --git a/support/index.html b/support/index.html new file mode 100644 index 00000000..8cbbce74 --- /dev/null +++ b/support/index.html @@ -0,0 +1,26 @@ + + + + + +Supporting immer | Immer + + + + + + + + + + + + + + +
+

Supporting immer

Immer currently has 350.000 dependents on GitHub, and has almost 10.000.000 downloads per month. However, only the first 2 days of development has been sponsored (by Mendix), and all the development and maintenance after that has been a labor of love.

If you are enjoying Immer, and you are grateful for the package, or want to ensure its longevity, consider sponsoring the open collective on https://opencollective.com/immer or make a one time donation using PayPal.

+ + + + \ No newline at end of file diff --git a/typescript/index.html b/typescript/index.html new file mode 100644 index 00000000..2b310f73 --- /dev/null +++ b/typescript/index.html @@ -0,0 +1,26 @@ + + + + + +Using TypeScript or Flow | Immer + + + + + + + + + + + + + + +
+

Using TypeScript or Flow

egghead.io lesson 12: Immer + TypeScript

The Immer package ships with type definitions inside the package, which should be picked up by TypeScript and Flow out of the box and without further configuration.

The TypeScript typings automatically remove readonly modifiers from your draft types and return a value that matches your original type. See this practical example:

import {produce} from "immer"

interface State {
readonly x: number
}

// `x` cannot be modified here
const state: State = {
x: 0
}

const newState = produce(state, draft => {
// `x` can be modified here
draft.x++
})

// `newState.x` cannot be modified here

This ensures that the only place you can modify your state is in your produce callbacks. It even works recursively and with ReadonlyArray.

Best practices

  1. Always define your states as readonly as much as possible. This best reflects the mental model and reality, since Immer will freeze all its returned values.
  2. You can use the utility type Immutable to recursively make an entire type tree read-only, e.g.: type ReadonlyState = Immutable<State>.
  3. Immer won't automatically wrap all returned types in Immutable if the original type of the input state wasn't immutable. This is to make sure it doesn't break code bases that don't use immutable types.

Tips for curried producers

We try to inference as much as possible. So if a curried producer is created and directly passed to another function, we can infer the type from there. This works well with for example React:

import {Immutable, produce} from "immer"

type Todo = Immutable<{
title: string
done: boolean
}>

// later...

const [todo, setTodo] = useState<Todo>({
title: "test",
done: true
})

// later...

setTodo(
produce(draft => {
// draft will be strongly typed and mutable!
draft.done = !draft.done
})
)

When a curried producer isn't passed directly somewhere else, Immer can infer the state type from the draft argument. For example when doing the following:

// See below for a better solution!

const toggler = produce((draft: Draft<Todo>) => {
draft.done = !draft.done
})

// typeof toggler = (state: Immutable<Todo>) => Writable<Todo>

Note that we did wrap the Todo type of the draft argument with Draft, because Todo is a readonly type. For non-readonly types this isn't needed.

For the returned curried function, toggler, We will narrow the input type to Immutable<Todo>, so that even though Todo is a mutable type, we will still accept an immutable todo as input argument to toggler.

In contrast, Immer will widen the output type of the curried function to Writable<Todo>, to make sure it's output state is also assignable to variables that are not explictly typed to be immutable.

This type narrowing / widening behavior might be unwelcome, maybe even for the simple reason that it results in quite noisy types. So we recommend to specify the generic state type for curried producers instead, in cases where it cannot be inferred directly, like toggler above. By doing so the automatic output widening / input narrowing will be skipped. However, the draft argument itself will still be inferred to be a writable Draft<Todo>:

const toggler = produce<Todo>(draft => {
draft.done = !draft.done
})

// typeof toggler = (state: Todo) => Todo

However, in case the curried producer is defined with an initial state, Immer can infer the state type from the initial state, so in that case the generic doesn't need to be specified either:

const state0: Todo = {
title: "test",
done: false
}

// No type annotations needed, since we can infer from state0.
const toggler = produce(draft => {
draft.done = !draft.done
}, state0)

// typeof toggler = (state: Todo) => Todo

In case the toggler has no initial state, and it has curried arguments, and you set the state generic explicitly, then type of any additional arguments should be defined explicitly as a tuple type as well:

const toggler = produce<Todo, [boolean]>((draft, newState) => {
draft.done = newState
})

// typeof toggler = (state: Todo, newState: boolean) => Todo

Cast utilities

The types inside and outside a produce can be conceptually the same, but from a practical perspective different. For example, the State in the examples above should be considered immutable outside produce, but mutable inside produce.

Sometimes this leads to practical conflicts. Take the following example:

type Todo = {readonly done: boolean}

type State = {
readonly finishedTodos: readonly Todo[]
readonly unfinishedTodos: readonly Todo[]
}

function markAllFinished(state: State) {
produce(state, draft => {
draft.finishedTodos = state.unfinishedTodos
})
}

This will generate the error:

The type 'readonly Todo[]' is 'readonly' and cannot be assigned to the mutable type '{ done: boolean; }[]'

The reason for this error is that we assign our read only, immutable array to our draft, which expects a mutable type, with methods like .push etc etc. As far as TS is concerned, those are not exposed from our original State. To hint TypeScript that we want to upcast the collection here to a mutable array for draft purposes, we can use the utility castDraft:

draft.finishedTodos = castDraft(state.unfinishedTodos) will make the error disappear.

There is also the utility castImmutable, in case you ever need to achieve the opposite. Note that these utilities are for all practical purposes no-ops, they will just return their original value.

Tip: You can combine castImmutable with produce to type the return type of produce as something immutable, even when the original state was mutable:

// a mutable data structure
const baseState = {
todos: [{
done: false
}]
}

const nextState = castImmutable(produce(baseState, _draft => {}))

// inferred type of nextState is now:
{
readonly todos: ReadonlyArray<{
readonly done: boolean
}>
})

Compatibility

Note: Immer v5.3+ supports TypeScript v3.7+ only.

Note: Immer v3.0+ supports TypeScript v3.4+ only.

Note: Immer v1.9+ supports TypeScript v3.1+ only.

Note: Flow support might be removed in future versions and we recommend TypeScript

+ + + + \ No newline at end of file diff --git a/update-patterns/index.html b/update-patterns/index.html new file mode 100644 index 00000000..9513b5e0 --- /dev/null +++ b/update-patterns/index.html @@ -0,0 +1,26 @@ + + + + + +Update patterns | Immer + + + + + + + + + + + + + + +
+

Update patterns

Working with immutable data, before Immer, used to mean learning all the immutable update patterns.

To help 'unlearning' those patterns here is an overview how you can leverage the built-in JavaScript APIs to update objects and collections:

Object mutations

import {produce} from "immer"

const todosObj = {
id1: {done: false, body: "Take out the trash"},
id2: {done: false, body: "Check Email"}
}

// add
const addedTodosObj = produce(todosObj, draft => {
draft["id3"] = {done: false, body: "Buy bananas"}
})

// delete
const deletedTodosObj = produce(todosObj, draft => {
delete draft["id1"]
})

// update
const updatedTodosObj = produce(todosObj, draft => {
draft["id1"].done = true
})

Array mutations

import {produce} from "immer"

const todosArray = [
{id: "id1", done: false, body: "Take out the trash"},
{id: "id2", done: false, body: "Check Email"}
]

// add
const addedTodosArray = produce(todosArray, draft => {
draft.push({id: "id3", done: false, body: "Buy bananas"})
})

// delete by index
const deletedTodosArray = produce(todosArray, draft => {
draft.splice(3 /*the index */, 1)
})

// update by index
const updatedTodosArray = produce(todosArray, draft => {
draft[3].done = true
})

// insert at index
const updatedTodosArray = produce(todosArray, draft => {
draft.splice(3, 0, {id: "id3", done: false, body: "Buy bananas"})
})

// remove last item
const updatedTodosArray = produce(todosArray, draft => {
draft.pop()
})

// remove first item
const updatedTodosArray = produce(todosArray, draft => {
draft.shift()
})

// add item at the beginning of the array
const addedTodosArray = produce(todosArray, draft => {
draft.unshift({id: "id3", done: false, body: "Buy bananas"})
})

// delete by id
const deletedTodosArray = produce(todosArray, draft => {
const index = draft.findIndex(todo => todo.id === "id1")
if (index !== -1) draft.splice(index, 1)
})

// update by id
const updatedTodosArray = produce(todosArray, draft => {
const index = draft.findIndex(todo => todo.id === "id1")
if (index !== -1) draft[index].done = true
})

// filtering items
const updatedTodosArray = produce(todosArray, draft => {
// creating a new state is simpler in this example
// (note that we don't need produce in this case,
// but as shown below, if the filter is not on the top
// level produce is still pretty useful)
return draft.filter(todo => todo.done)
})

Nested data structures

import {produce} from "immer"

// example complex data structure
const store = {
users: new Map([
[
"17",
{
name: "Michel",
todos: [
{
title: "Get coffee",
done: false
}
]
}
]
])
}

// updating something deeply in-an-object-in-an-array-in-a-map-in-an-object:
const nextStore = produce(store, draft => {
draft.users.get("17").todos[0].done = true
})

// filtering out all unfinished todo's
const nextStore = produce(store, draft => {
const user = draft.users.get("17")
// when filtering, creating a fresh collection is simpler than
// removing irrelevant items
user.todos = user.todos.filter(todo => todo.done)
})

Note that many array operations can be used to insert multiple items at once by passing multiple arguments or using the spread operation: todos.unshift(...items).

Note that when working with arrays that contain objects that are typically identified by some id, we recommend to use Map or index based objects (as shown above) instead of performing frequent find operations, lookup tables perform much better in general.

+ + + + \ No newline at end of file diff --git a/zh-CN/.nojekyll b/zh-CN/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/zh-CN/404.html b/zh-CN/404.html new file mode 100644 index 00000000..fb6f3800 --- /dev/null +++ b/zh-CN/404.html @@ -0,0 +1,26 @@ + + + + + +找不到页面 | Immer + + + + + + + + + + + + + + +
+

找不到页面

我们找不到您要找的页面。

请联系原始链接来源网站的所有者,并告知他们链接已损坏。

+ + + + \ No newline at end of file diff --git a/zh-CN/api/index.html b/zh-CN/api/index.html new file mode 100644 index 00000000..16d0c285 --- /dev/null +++ b/zh-CN/api/index.html @@ -0,0 +1,26 @@ + + + + + +API 概览 | Immer + + + + + + + + + + + + + + +
+

API 概览

导出名称描述章节
(default)Immer 核心 API,通常命名为 produce: import {produce} from "immer"Produce
applyPatches给定一个基本 state 或 draft,以及一组 patches ,应用 patchesPatches
castDraft将任何不可变类型转换为其可变对应物。这只是一个转换,实际上并没有做任何事情。TypeScript
castImmutable将任何可变类型转换为其不可变对应物。这只是一个转换,实际上并没有做任何事情。TypeScript
createDraft给定一个基本 state,创建一个可变 draft,任何修改都将被记录下来Async
current给定一个 draft 对象(不必是对象的根结点),对 draft 的当前状态进行快照Current
Draft<T>暴露的 TypeScript 类型以将不可变类型转换为可变类型TypeScript
enableMapSet()启用对 MapSet 集合的支持。Installation
enablePatches()启用对 JSON patches 的支持Installation
finishDraft给定使用 createDraft 创建的 draft,冻结 draft 并生成并返回下一个不可变状态,该状态捕获所有更改Async
freeze(obj, deep?)冻结可 draft 对象。返回原始对象。默认情况下浅冻结,但如果第二个参数为真,它将递归冻结。
Immer可用于创建第二个“immer”实例(暴露此实例中列出的所有 API)的构造函数,它不与全局实例共享其设置
immerable可以添加到构造函数或原型的符号,表示 Immer 应该将类视为可以安全 draft 的东西Classes
Immutable<T>暴露的 TypeScript 类型以将可变类型转换为不可变类型
isDraft如果给定对象是 draft 对象,则返回 true
isDraftable如果 Immer 能够将此对象变成 draft,则返回 true。这适用于:数组、没有原型的对象、以 Object 为原型的对象、在其构造函数或原型上具有 immerable 符号的对象
nothing可以从 recipe 返回的值,以指示应生成 undefinedReturn
original给定一个 draft 对象(不必是对象的根结点),返回原始状态树中相同路径的原始对象(如果存在)Original
Patch暴露的 TypeScript 类型,描述(反向)patches 对象的形状Patches
produceImmer 的核心 API,也暴露为 default 导出Produce
produceWithPatchesproduce 相同,但它不仅返回生成的对象,还返回一个由 [result, patch, inversePatches] 组成的元组Patches
setAutoFreeze启用/禁用递归的自动冻结。默认启用Freezing
setUseStrictShallowCopyCan be used to enable strict shallow copy. If enable, immer copies non-enumerable properties as much as possible.Classes

导入 immer

produce 作为默认导出,但也可以选择将其用作名称导入,因为这有利于一些较旧的项目设置。所以下面的导入都是正确的,这里推荐第一个:

import {produce} from "immer"
import {produce} from "immer"

const {produce} = require("immer")
const produce = require("immer").produce
const produce = require("immer").default

import unleashTheMagic from "immer"
import {produce as unleashTheMagic} from "immer"
+ + + + \ No newline at end of file diff --git a/zh-CN/assets/css/styles.d8d8e956.css b/zh-CN/assets/css/styles.d8d8e956.css new file mode 100644 index 00000000..f859c0e0 --- /dev/null +++ b/zh-CN/assets/css/styles.d8d8e956.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration);color:#c200c2}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{-moz-column-gap:var(--ifm-avatar-intro-margin);column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,a:hover{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{-moz-column-gap:var(--ifm-pagination-page-spacing);column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.tocCollapsibleContent_vkbj a,details a{display:block}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-link-color:#c200c2;--docusaurus-announcement-bar-height:auto!important;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.navbar--dark{--ifm-navbar-background-color:#000;--ifm-menu-color:#fff;--ifm-menu-color-background-hover:hsla(0,0%,100%,.1)}.navbar--fixed-top{color:#fff;font-weight:700}.navbar--fixed-top a{color:#fff}details{background:#e2e2e2;margin-bottom:20px}details[open]{border-bottom:2px solid #c200c2}details iframe{padding:0 20px}details a{color:#666;font-size:.8em;text-align:right}.egghead-summary{background:#c200c2;border-radius:2px;color:#fff;cursor:pointer;margin:0;padding:5px}.egghead-link{font-style:italic;margin:5px;padding:5px}iframe{border:none}.dropdown__link{color:#000!important}div[class^=announcementBarContent]{font-size:20px;font-weight:700;line-height:40px;padding:8px 30px}div[class^=announcementBarContent] a{color:var(--ifm-color-primary-lightest)!important;display:inline-block;text-decoration:underline}div[class^=announcementBarContent] a:hover{color:var(--brand)!important}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none}.hash-link:before{content:"#"}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{-moz-column-gap:.2rem;column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_b6E3,.sidebarLogo_isFc{display:none}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:768px){.announcement{font-size:18px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media only screen and (max-width:500px){.announcement{font-size:15px;line-height:22px;padding:6px 30px}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/zh-CN/assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png b/zh-CN/assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png new file mode 100644 index 0000000000000000000000000000000000000000..c83185f8a2910090335ec3f0a8f69985f8bffa0a GIT binary patch literal 52109 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≈X2J=ivxbmN$LgxLmTx(7iSA6_xpwvJQ}S< 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≪|^?uN$Hs$~22i=&!7;gw9nA>w>9 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 B>`?#! literal 0 HcmV?d00001 diff --git a/zh-CN/assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png b/zh-CN/assets/images/performance-c7f59d06ec36f4a05b6403daada96542.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd5c8be5365ed566a9b11643a7ee4069b621d55 GIT binary patch literal 54331 zcmce;byU=A*fk6z2!aSoi6~%^5|Yv&C5?20q;xYh37VDguU)*`!d+%#s^HxbgiU98h9tH*mf%Fq`Weki9*ccd)Yq%G| zCkge&s~8xV5*A`&O44FtG)j(kW){|_7#Q@S#)gL1q#w{XK6_?p*x1IzfaeHRe)HzN zvY~Hl-4B|Ex`yPR$q~`Ix)axlCN8Lc#YlZxUuJdrJIL50trn{kn>u^~~l+2vOCAMluEnA6{eP1)~hHK}wP3 zd$@7xg-DPPp#YUuVG6W(x)@J&E8*HpubLWU7MZF@9WJ^2U`U8n(ToNG~Z_jIoQfe zFer+MjLcjwUtWr#xc<_F$cXW3-9)a5;Ugve5Y2F0D8>{|NT$&oPvql;yss_CpLFUMzWXT$Q$ z#Lmc+#m&YZ3^)dcfEyq9Pa9L`XEbg$*0xT3Zi08tuHXazjsBSR4$avm&Q^kVH070O z#OxeRX}DN8S=jCf;nC302soOU@hOW-{=OajpWvP6&d&CHtgKKdlm*JcV&`bi`jD5G zmz9m3m7Sd#T*2(*ZtMKajoH@e?tc$Ce~!4Rld+?Py|aa#Ee-m)&y4I`oCWXPLBHtF zKmWDU)Xn1Wn{1tacMEio75xqCLl!pH|G(RuEzJH8x1qoJ@3ymk{r5Tn^uzd+EZj`3 zwZtuKOl_S&(}cJ<*aXgA^S{3N+t7dR)ckuV4-dz`cmDIuKX;;A!l&qHVG0HbJrqI@ z1z7*rXTPr(U`3D9KjZe_q?~;UW<>~3fc4J|3*o`wp<5UjA{f%*qN;9~%VRiRq-x_o zH|QdW9kjMxlG4Zr4diiYU zkZXb4Hy+D+&)wV&;vsq|vO4|osQs{FG|RjlrJxTzfht^*hJJj4OXG(D`TZxv9Q*N> zbz9b>^AFHpX=3_APKby^Ffg(H`_niD!NPVwBJ^9l`}bB6r8?xF=YWshb^VfQf=@A( zyno+?z8@EFpYrc>L}-HXiAbh5gfX&%|G8BZ)AzzZjhc4A^!FDy!4cWH`uA2E`U$%~ z?GeF%39yJLg*2REWD5P$axCm4f`2>LfQ^f{xlfJJC-wJMzhuAK^M0WpzgdnUDoS;F zA^G5+CJ>RV^Zf0pp9mE>4SnO3FNP}hKevKGy7>QWkVGC~Rj3&Dz~y7PtRi<;$8uU& zs^kc6a5g58rmO#L`P>7d_2h{?r0;-+fp@y&O!GpdjxFyTB&>b`Tj*$A%w=tSOmO{I z0Chi8e)VKt(LbH^s}*@t8Fs{DvbQ<-#kenBmYmC?TfFw$ z&#`L0zTm5uF9&HQU*HgyN^sOVLYD`hN(7QTUFc5lE49&K)~oETae()QS$uRx%|uzX z$Maf_Rh9_0-#px_J=I$p$k#A3`sA^<`uQ~hlhoI^F5lPW*=amdAQd%`i@xT@ne5|w_n&+wm}@IahCx-_5uEf2~FO@8#nvU zcOFca&hUT)i~R!y$Ior8Cs3-(V=dcjNTe;tNLz+#mNG?ue$^@;bj&wN%av;1S|}?k zYxN<*i=})50@aCNRO_CaoLsK#3I91}8+6>^domUIcig=} zGG=X)#)f4mmFCzn9m{_6%ptewCUab+_0Xo&Yn9dNEd^+;ubyRJcEqZH^@y?W(T3FC zbp!p`k!iIu+c9UPJN(LQwOLzi#ehB4{8(koQrwicyRPR-$%2K2#p)Nt$_cXlg4;oF zmdcn@D}uP@edt;u3gPYEnkYEZ=8M{#S#>b0_0^KAAiTvlO||5-Hx@;_<>Jq>H<*@| zww;rY7-mlOMf^0IYfo7HV(x()Bi8&AnH;nHAbR;d*x0kT2hxrY_cD;KBQ~qw;(H!) zdw+XP;F@&$Z6xz)>N59f^2EVXK9u@S+l!2~+r3`3rzeLCv!WXl^)D7qkLH9|gtqKg zWoIi9I16-%Zg-CBU>CUa=Mp{JsjR3(2&sjv3HN*-9UpCVtbCzeQ@L-z%jZ0Am~R)P zQ{&;{kuDQqJ>DL7X|FfRz-Nd#jw3vC4B@t6bZBU|=^#m1ICAvDKh6%pJ0_q@&F|XU zWjZ4yl?qCubOJ3;kJ6V> zlvenHXs5j5sppjF?zV@GL96)?_I7CX{hMk10o2U6EeAKPUD)K*)L8ON?dfs8XKrm3 zD+U|ko&qsLoD`U-QR4(29@h~Ga=qz`7_@=6ZXjQD)&OZ1PxGPj?q+UQy z1B|AusFb`3Qx$p=E>H7}+P@gv>s3)4S~(G|M|dBy-?XCQlovXw{TO#aJy-MB?3!nE z65BKXF*C@8Ex#pMv)VOs3j-}L!VHBiI^;87)Jjgv+Zhf!##W)QTGp5V&7zf+GUTpJ zA(Hm`dj30BdN$ar{3|DP@r?9rqVJm;ss(u;#vDX@&uX|BurJLPnYG`$Fkbt65NnB$^0w$kltkNXj?hRPjM?ZS?^3HN6!XKg;RqDJNY=90$U z=Mus;Yu3NwuW%bEP4fFpet+v)<&OVMS$(yNl@Re~zl}16q^1(ibR;3&PYyXyiUp8p7&)V~1xtHkR#9LVgwTSotg_!ozlcuPEp~#OPjrb>HT^DI%o(UMZZD3a|A7;31 zOgj36MsEH5TGr$f=Yy#w9U2-+afQeGB9-Uz!?>~qRzpc#cAFh}_5sInLSM;d7h@?5rb0en0Q)oJc8q*oTjWr52FM*t;OCf zV>&thjq$!*tseaz_o+$!D(}PHUF}(+7{q;e@T-b4L{}L5(%w_J9L1hjk-ZV3U59EU zss56J!VUity((ANJ7on0Y;g@kqkEUh&9TqV)$R z&@ME2E7)uC>E2e;gM`5it|H^Y!ZzXkp-PvWBkITmTHY8l(;)t+>7_KiQtP3x!iR)i zh+>-&SMyI5_+B}fhunng@UYG12&NS-ISRQ3^9-#HEd!^vMXp`lIRZJjI|;LP?^q)7 z-dN2e{PPo4B;*p7noqwyN2^8*e)l1Zb-UJa-mNFF>|tzqXbxa|RSfxotMltz^oW zJJocX%8c~L)j3p#6Ym{6n;Hq9!21BNdXc1drCgQ4}U|+r;WY4-8FkmDq2Fe_(=Jg!DWco!viJ zvNLhxcoyrDV8dvDs21$wL=6{PgfXh;&YPLe+Od7>ilu#KHrO9uzGnOEZ+!EYqwySG z!qQ4FRK95*PUX2zZs2u$YeTU^__R8K!*FkP>?E$J`e-pHzj7|xb!&FOK1_}u8rG_V zVSev+mG!vh{%Ne;!L?|I6JgXean-5y>Bfw(&ygGdo*yf)Soz2dyHO-3F-2ur#@}Be@I?=qrhES30^Bo_Y@-16YuZ={-bi6%0 zS&SzR7IZjvM#aUza@2CnsG~FFVvGoR2t&*yO*z;r5~xp70GZF1c)AIzL5UA&e~_IjWMNG|V&{nEpr9pvg|6-y{34)To{vrcI- zhen)Mo_Fnh+zT(%0m2(~FgG`17JE77D4zGKNvsSCLSU|`QnNSi>B?<_M4y}94O<`1 zasRYBjEJM(()RP{P;U!o#=|zKk+E^akeIpp=61qbYdaH%bvA`zE3 zHhF!E>+UAjofsh!_=_)D<_feb7pIK)oX8(&vgy2=lv^}=fv?h#nVDJJ%Fn-cXrTWl z;m{dP?CUMk6TU{a_yh*>lsCo{0(b3!tu`|8bAxdSkHx~uX09- z{(-;bG!8k?ptMkdA@$-`c@1PQOqWGsN{%U~HX|7$K zdHlD{b$0=9Tg9Xn#7PB%`&(2J; zzav$sVK~yBs?}^iH=fo*1*nh*vu=5(P=m{SXFZkgbmP^}T1Apg(oGqHNNC-vVATq5 z0zVWDZ+`u%SbE3@?VI&2W4w1yJWAgq>-h3@Hkxk)@f_x*Mn*=?1A5S*l`803|MF0g zjS`!A`%NzEK_&2M!q`BDB6V8=zeWO|OLGVg)89oj7f|>8EpcDD!<3xwG?(zbQ-Ey) zgM&3@nj`wE-JN3Q8i~W)dpfh#a)^1B0Gm+G^L@A)M0ZrKCP*%q7C z@$jL;{Jc%N#^crQfp6X@wL~(jr9HX&S-(b`Nh7Z{B;O)kIbDWyWvocUX}0|-pe-yF z)7O6d{Au=xrAi~HR<>zX*XdDhW8;$&+cCbLfyaltD=M$>NJp=!XRAt^#YxYOP>)tW zV-vk_>CdE391*h-4uID79In;oZ*Om3CVe6=-3P$<&PF(J^%_WV@N;fq%6&?x+BqF=hWmihjd>l~Y=M!}>ZY$#On*wf~KCP7R z8C2lUJ5~jEW42MS4y&O;Q})jq`aUSr7_$wST*an*y#ef&pa-W|f#LWKKr{wblvPyJ zl0`80oQpa}RsTkmIut`^suZE%;c`(dpG)?N`C`tGkLj}84b;B#KgbPKQy#yvCQjiQ zcl#!E7-O(?tfH+Qo9H%q2^xky%g-+MQ`}OFP!62+tCg63QGFvg z%v0dBTfJ`*)^;{+MUZPOjetaHTk z<^A~27>5@2#&>TerUt#)&O4sAc>Y7&@^+wPL09tzgtuKy0W{Br&ge5dIMwbf=;HKyB8 ztohL5We;lTUJvH*J*OaE1axiOb?oSgO|yuSA#dRvwbRz|h;0nz{F1jVqU{BOH3r9r z!?7#tqlK86(7iuF5H>-|M%V*it7{CsJN7t|RYM=3{?z09$RjrE*p27_Hx3MWvncDe*KI{8;@v>_KQ#XcbCctVg8<9sswydfb0_?e)w)NP=hED-&Y)%rc zZTsph&JB|Uudv=qnw};(G~R|Hy)!Q0T(f>h+@sp~-deR(PHUvN@upoYiOqPm7QgGV z(uUEG62p4PNcDnsvkQD~`t7XPNlhccCZKU90r$C{n6^Z!ferULiXyN1z4_r+{04sC z=qb4omVaA%f5M7tmC2>Tk$e#LT+UoStd(_5uhKbm!SJY!2RYcq008pLiS`=*np~~C z&)yg`$@}N>Kz`DpYaJFIe4(o|MQqGmu17UX{O#loe%IW#ac3oN>af-)(PrUtJw`Ji zN`D!VlZ^s9wvz>CF^MRH&h=;BAgoe3WX5XPEJo-8;z@h0TL2+-sV_auM}EpzKJpLe zs%BhY9?9AMHp)S*H}{J_J4dBuIYz2k0FRo_x$z?Q(2U*qljwS@Bj0Fl_qZ!RXf=6z zKwB7i!M{CoeannFtVseJ@H!2xQ#&UP1s5^Lo@M6~7c+|UVADtdq3gJ3zgxmixN7#j zX<06#xucq^QHI^=<}{)3I0*yOTteFycW(Meln>hf;)6yX7#Vp)XQ0ca_RQc6-_hV^ za`?L?vZj;A(;GLpthZ7Ge2`iH%Aa{6iIm=rpLzeV7xacR1Q=sq?2lYQ^#5LijqZB% zKV)H=>sY(_I8ALmMPzZ1v+N^>PO!mO1vZM0}MX#86^{1=iQh6+sDSIux~m%rV9sBuC{_J8$k3M z06@W|Pfequfs9_MPS5OiDu6(eg#CZdSI4&^8kM7C{N z-oK24vw(N&!;9^oN)P@9lx1>Fz@>!%7ivos)B)$naG70FBK3ZC>n=F{7r^0DYInUg z0%(g)AFeu{PzJE9-| zXsi4%0!r@rw{(g2iin&;J=cmSp?5rHW6VjeUHjCPDwShc@4q-wmOr-FEz4^0>+7q^ z&1NPp?*r$Z`7SXB2M6sk*93ja&Didqp1u+*4bSEG6darY6^wyk0V4GvLom<4rCo6) zqGjlt&A*s0K0+i*IlUJM$9toN}iT7P&ufA{9ft8JW$nGrm^^j`l zK7&d~N+xc)AuH;SdF}8DFMYKByQKW3>Nqhs zxvuhkQ9T*SM;utjz(v-ow}J#)w|U&w>v2}zJcj4jRjna%e2x!>XeH2`s^I|;uzmIx zdK!Gd= zq_@Hg7I|L1ew9!fl=2j%Hrt(}=y?;zM82*ld7`j|r3WoEaJ-ABC~Xp!kdivgFZ=@_ zZj#$;Q^dDXLVOWUf=FT3$P0Is5PdG})XMFb+{j3Bbt}5tFAmgr?uA+MJ4}j`vgq!o ztyuq!4p{oT%gY}DEY)`L0__tv6`9lZZ-iJEGpbaU z(K#!Hy9IngPhUvpcJa;e=VV#VT;HiFs?63145e5wU1$krbof@8YnB>4Xqi1QXG;3H zi>77H5dty4(|L5vfahcuG$w#@Qd_it$KvDi-fU+%c^%Sad9qtJT;-TjWEY=3-l>9Z zoMWZGrqgjxCrFg01K({IJ^^s0>dJ7*4oEyS59nrsup}cdUsBXKgW|_T50HHjR8)4-qQ080PnQZ~SM2)tvqxSVrPbFlZBRJs4 z**uATb}y)&{ui5Yg3G701r%1IE$V( zKXkR&iFBWHt|Q4V;|)CQi{eW=5KbqSvHNXX4=5q0ImaipJeS|n(mV<(Q2b(Rd=F=&)2&rX>-~3l$!@sn4y(0MIkhJE^%H^9_cEVjbf?X_(`d#$G7{3 z;GYsdQIzf~gr1~V?g@QnN9HNV_UJaIiN&3GRjDOAlIk5zN)11 zsgYV|*#Q+8rL+Y_^sJ^kl^mrvDDXuQfO)mVRP^`fvg&_+w7)T2X!>roVveee^U|eD zHw4@YZt&RV%0w_$jA)&0q(?lkNr}ycCQqyEP3*4W@|}W2FXM`9gz1BFISpjWwN!m- zxk@kl?RaxD+7RCw_7dFGIF5{u>GZ*oe}nIOt>nAJ3Mq!S0n5)G_GRaY)((W{KWDg~ ztCRAhV>~BZEI_f<-vz5sFWImpHn3)aO0V-%D!0$!+g3^}jsvB4S9@IC8pxQJ2jo*i zukKb_vy8|%6L%7i^D{n+?A@J`MP=&m#R|# zG3Zf7oN&u8$`gm(R2~cD*NWjgS-t?h?>}o)fJCV%hO}qzKERI{}2ygU_f<1 zAyvCnMTehKAJ2Rzp!j&Y9$YK9r>IuDx4#}_w%_mu@+u-Se3>e#*fT)yN{fL=JIT(f z>wkJnJ0W@>yd|a^e%tafER5^fS1b+M?il#!HV+$d+p3rnu6X1LB__P#&gARnNC1adZ#Yv^t!VGA9)7X9=oleix^qY_NXxRfm` zWATmyud6>nDgmK;n^BWy)Rj9ZNA0`1Q^RU%jQXDHH({#r8~JQ>M7Yq|WNB$RXR~k{ z%MRhnt$oTDava8Y(O^oX6YmJ+^wjU&b6UnFfCXnelJYh5-6a6)>{;x~DFG@MhC$3S z;7G7)2BlQX+hb5CHA*76Blm!h2|O2z$X32w4<6MLgRj+puxVZpF$!!Qd8Kk6Z1J|k z#KNii!`Hr}g65Ti)w|y=MC6-Dt1USO_YAq^-@37>iYmB;MldvP*aGeK)|iiAI&{in8=v6zv&<71_nTDKDea!f$30 zJ9Mbv`+`s?SYzW8s@TeIw(YeSU83c_RFUuTn}HIaUdr}q(;qI@gm&KEW?ty!JeTTc z-WG6K0f21M#ew>^R(oq&t}S_MS0RY98Tu6SB6%XKC~PBQFS+CRn&&>vqq_`O&~mH4 zHh@9NE=$}8$9u?~PBB7;+qXpxyf$8)pgMfBbt@d-3z78t-XXd27Yml5Ax$_F6gKXA z>V1pXQT$mun=6_qgvHeC^y^fNMIZbH>oi2Yki;DZHaq~OI}4tD3l9&UzWkQ_SF7DO zEFRJ00nuOQxDZ%mUixK-!ea8#;=(|s%aXNHXXewpV?Ku~mO!mctb>32s|(^{o%I-K zO7Il107e!T1=iZ5!h`Jv<3lom^|}k}9Jj*$J{c?mb1VT*l>(p)j(E)jUy7@h$B=1M zmRP_Q_EaJu@m2mlZqC8m8v1gO!nm+9R3z09bj!)A%wo7&#wbxTc-o_ zLohs%lT$_Ko^QlxeE@PsCZHEXHULwonwX^72$}Fv{g39EO?$N6kO@FHZ zAT$`R{LHPry`Dc<0|D`%h*@2rdrT#-8H(=f2;&3t+i@E260TSkQk@Sh<_?7I3F zf*5bLJov?OATNPdJ~j<7%0{fqf0Qw>aOsuV9uvCcQ)WzSLP<}i}tmG@<;eJ;>n z)*D#mXdq$!PPEK&1z+_3gqD*1_WV;)2IcSE)pel~m=1({>D7NRfD~e7U&W8a;1Mu!0n!eICv3nK8`6`Wf>y)9H1E<8{b5o?E|H zrpr?Q4L;{gAp55RSvgxFfe($b)IgFnf_ec{(e~%c3O(#}e&cZ4Ay@IW;1NS%M5|E?d8g2v<~2w? zJs1l^MmxxhJiV&QD;F+awvYM`PoW#wE(N1QYCc0=@!CwHE#3cCJDN5fUVK^2;)cfK zsD7sGjDWo6f&@}5e+ili5WO^S-ns?irRBosvhn8P@mYe$KnZ3aYmofY-DvEKds!JD z+T&mYLi#yN`IRDL`8k==!gd3BHBvTTa#Y`U)#;aT4J~M}O${W}>ykD{2B6cBqs~3@ zuJc_GY`jcB+hddg_7?70u@*lYMDWL7E7>~hh>?gCPM6?k*tO|>VDrOA{&2#v#OkSJ zDk4y$$>`~gUDf!=&+?u4-`r%0TKCxVqnOc+=9!QsWm4Z}-u#mZjNgNdxKee68fUTJ zdZY1KR;eM9oc^A8Y>iu4>%7?Ai`?B;=01obMP*4S9K1Rk!lyY+t#zHpIh0_!G{Egf zLw^0~**S`y;E8ZZzHgzzo@>^pwebo$>86E)#ekIqL7}HmUFsYN>f4HWcU9ZimXvpq z7PS|mUe6p8W=I6mQm?B-D1J}pL^bKY?N8Sj#gu5=`}b(8cCK&yxEMot3AQC#SJc$< z^F2i>+OISB;*#l~0V#YiK}}?WGEoqr3BU#s%8>7dVgjF9jmOTlTko9q^PJp&&j~Ib z%sYq7YN5qDy!@F>WD7B|j@k~Dx0Zwzck5Q%r3P*7DZEwig?0noJ^Don3xhoF!6GZ?7{ zk;M`8P{)K-_)H#@u+NoU7vic46ccjSL@#Y%5L_JM*cy6w_wHT6Dr_^(G~oCtAJ8c< zgq7NkWp@@R-QstZ14$UwcVx^UUu7E1pkH0?`QVSjDB_BT=HaJHNlT~`_b>5fXfkEl zn|XUnT1MuhJ5jz~RVjyw#v43w@`Bn$q_ zQL$y3?9HF41k21(1T>O{msiXCV7m)od26n=<)2}+^5DU~Ai?ICyx0vkymc77g|&86 z-}m(7c-M0~y35rQaBEdyiMq)^Nq)}V!1&iOVFHx``19#Ds*P34JL3UM+}U2Rj1>iWDT)!^P4-8gmFXM`tV_A+dqa zErMCCG0&?ooz2A22mg`0chOz!DP)>&%oUp>Jz9+Q^v*Y4+2cE+>AWwJmbKQ4J`xA< zIB*~0tL5b2v)JVuS3w8A9dB(U_?99`8C642A)AS4G=!2kL6cSUByThR?L3f8yes*> z;FgEeWbhiWj)g8b>z3O;+sgwWTstKtr4sFBDrGlqZp0$YkO5md92EjK5GOp zJXNd6EY_{P;t4JFHOSDN383Slcw*X4PhIJKYWf=pU78q?qdk{!KbAPO+NWovJ>QE@ z8ugAspen9S4$QAd%DYmYp3Zg`*k6I9%-P#UDsT}_06`~mLDn!9pMZj0yd{b?3S~O( z{AiaQ$S3kk{hw7p7J@^U`;w5~F#JlQ=EOiTJY(JUkCw9n~5z@T~!kwiVXRSq<0x3y{0q zKuj2OLe5q3L^hJ8tEfZB>KP@sbtb?(i5%<{e@=LFMy1*8T82Bmn4hV3ze;EH zuI^NS++FJ$M-BD#uBG7@-0nbY9PcT4+FjYXYpdg$>g1e0#pB|(CLosbs@Q9O!3E3= zEM>C0yL(8kUJYGv_#1#B_m!3sPlk6!tkdJ!hAiD+&m(O5C1sIbd`eNYNP!3F6L+O# zpji%!8@j5?Z?*2!A(#QQ?cujy0e~Y@C7dubGv4z3bDY=7!afni(fht-KPXvarqkQ~ zT6M_4#VZ|Gd$OPAZ7njPi{99Hq>Ls3)L^(jCr}%QjTY?_weL)^3MIhaHatGqxgq3LZq^=e zaRH;pYd%6lzYC-^ z9d^a&0%VQ`^tr%wMY}E9!K=KQ(zaZ5K-cL5|Mnbjc#_JWT#xQ;!`Ign2D2UEE^kkr zqXF9%NyY+Q1K`1!|9Tv)7|6zJbR-H!2>bfzIs72?m=2YCE<}>aFNZisDPS4JOM=GN zh2I^uAk-*+{xkx}R3Hsja(t=vfftDRcjzCreK6wrZ@JCI)h+Ie6CBuo=(m+?b?nMf z3woNwpOYi`1EM7qMGPSD5<29Au+|L}?1;!nIGCYqU?D*JT?wuf>RY$}2DLCl^6Q+F z%Mgf4e#t35{Wvud`Ep;H7w$A3h-(mzr!klCSZcPFfy_ONC%|})1vALl2zTc`w(lG{ zRdCPU2^m0l7ofV&XrZSuic7U{ugC#};OE zqGQD`UK%xcrf{4?YD_W^8Q;8l6Jo(Wo#eFyF#Q&?^*q2%-+`&i%jO)qkSb<(^;T4I zO}-<@1`yM>w$z^`_j;-U*-Bp{E6;O-$D7g(MIb^#=+FR5@`eX6Mq4}G=7@6uaUF5I zs}pmj(X=`Ik}g5hd0x&@mF6T^j2+XDRpRBV`Ti?25wWp(zp-Y{B%x*Va>AmQ3$Gf2 zMw_svd=UBwiAys91Cde`WCUz_QqXjH4RM%fBLj@Zbb7wWJ5;J+vcI>#h{B~@WH|lS zMta_Wx~ipirBGbK)3FnMEe3{#%C#X0#Mn8=Bw9aPOsWmNA_iJ}aLH4{Ve7Tyz&3E+T;f5MZsTbx7f5^1X3?D zd|XVc5T6NxpLuDV4Um(>AZE1P=CAX5OB19Db^Qy|Hzyh&ijE2Jh?+apR$4D*L$m$#XsHI02Pq#chlPe=8~J8{cKIx7y6G?Op%1fGlvE&a6fubx%kZ}j_y2cf!zRgLNd zP`$)vggZF<+qq2&Sgxqb)3Z+o-8scFj5!WE-@rZ;8?Qaxxm7G4dbPnfUrt&51Asjo646XrAofA%xPJrw3bAGTTt^gpGhn164H|dI zZPm*Yw^KhyIf_=7X$l~igm{U*C#ar&ntS)AiyQ1g_?XW1L+z}#FEKIYnLVr7bFU_Q zFk+5RqLGogx^!)c^HO8RQ0+<|6Ls!Mi^1OGyLVM*c5&41}leQ4LkW?qYSP&RFyHk}m%dT~4{uA5Tb1>g2@ z!@M97S6q_7x1GK?Tu+@<%hmabFRu)Gdy#E+-~Yt9-{mn}ef-8p$6MqU3+v~X-%V=x z&Aj1J1gzInnS>M4-^}|DS6PMzt&Um-w`dfm#Uj|%ad`6k@_rPNjBIe|=hsWR`9+zU8tej8qUO*-_Hd zb9nkz^W<@8Yb=ZuXLik4W@TYC^Y)%F07>-LBB&I#Q$mTwJg^ zJhlTRL+_?rFx}go#Xe7M9LFyn9sct0XmaOJ+VFp_li&R#HGH{M+|rDeYoP&E~z{&MVPRmg5!oufehqKueysnAsdAM z1$0cZM}4QRIQxYSMT!avXw#Hn1sS<02CRs@k(?r1#x%9WX78z*Bg8-S0&C&jm#tcb z9jGf^NS!DRIhg&}aEkxdyVIyxG9> z9Y`T%Y7giiw7ggFzI2{0sMEroey&sivI&9*^QnCH6Lnf72`T{F;=_)fKHFu_57N%@ ztu2$$JEU5>K6(;Z7+YZ&HOq|5z_I)M>5?6n$}4tM#K+h~3#qAsqo>?S$cuYjn^DvQ zie)9mOQs{b`D0E#-MbY%YNsjWy=F&_q`6A+7ERL5oTZPC{`2UGOkg_}D~hH{e%Nl? zw^J>*|5Y~-4l-eNT9=}QumTbkf8cM9Y=xBf8N%x}a73+^HT600?dR-3p3!GIag%P5{K4rkjW#qRr2VZb%}O`V>%ynHMcKEgNbp` zt;oMlBMLnpL%7wb1-|r0w*mu%N1j0SG_+CySw_O9zI`lpioHruUIuTDYR;!a>Sk5E zgC=cWV?ugJE+`m$BKww+)vtHFeQ0jSU~%f>={3}!&^sNoN1}oV^jYx@*lka8Y4#dC zKj4R$CbYIv+6SQh@w`sGpLKX#7JH>rrGnK#wb)L+@3Aau^OoJ~kQ%kSJXl1HEU;S& zI8zFQt?D4RFzn05D^^PEGsw8b8|G|1z#?CR`0^E>R9WWnjQzNez?TS1%U8upikMZ$YBtX zlVy*KI|jF#_L$ErqRV}{;^ef($wdD+>iw6i)E*VIy7GpGC4=zsyc zjP6w+DJvX!8g!TX^LiqMO9!96kz-RTG?50S9AQl@?4wuI&!P99-c%dRG2CH)40J%% zK1(&zSOWQ2PHCsv)-QL7xon1e5f9f9i@JZU31ArBi`2dF&qtgzx2s$G`=i}0Yrdyd zdchw)r~&_K?V=WaJXf?KQ(qt2t{*;{-u zJ7Nj@@(m0Kh4z!tWufR|h| zo;=z(0P!abSi2O5+W~n0X91(%J^^wGouJ?`Hbos+(<(vQXyv&$h3jAK1iefXFS&JR zfZS9+yB(e!+L5eNQCwU+CH7I>@QE_{tA7{vuj0ZY4?B!k4+d>wilc8&z=g&@&j@m z;K=D{uNyd227q>uh4eXWQ_$VrXrMONX5;=_N_-a0!EzEl-VQ@YbUp8#zST5Su&m2Q z?C*Ca&S=f4F22MD7rPZ31fcjT<<2rrZ~Ffe9;a0HlJ#f%qQobk!tS3!i z_uIJH+nPHHtbqU|v3@I=YmG?-p6$iTrM#k%!|jFC3a7bjl?(-nAmcw(fPi|A-kTVT zgS;^FNjXJlL48m6eA%7Ist;GIv}=88G7{lK$}%#6-h;kdZ9H7QCtf2jn@Eg+N1ft; zJDk-(ACxrg7JKPl{vF!TYyHgZ!)-I11`0;dyB?j`u{nkGyl=GLVh3jY-u6${kQab9 zTY&(00P4N1ul_dWmpyv;@S%~(y{NOKJ&net@2WX@Em8_C>kJMHq@_WxvIo>hoxVBG z%nxOw>M$huPCZ4@!NBos65t96mWL$K?s%2ZHCrUvD5wQzCytA8Jp`J>#`mGtPXcc1 zhI?ocsSoYQ*0HVlp#V3dRo}W#{OIMY1dmcv;`!*%F!0+AAr*BXKhBN}{qcDyLXnI$ zj*hT{WofyYPRGu_C!pFT{9!Sez{N~CEu10VCp_v3dlu3rYYXn2p=0g{b;|Jc}%tb|c)1*h}7(AQe3(DY2 z73+a+y))|6u>@S~1@h3=7nK@KSTu1wHtJ#T;s#}7frmkm%?=BX>;e5&@|rBjqJH3!hime&eyboCOSZ5e$0TJY&vb3028TDUTDIBqby)zBgXgu5`}2LM@aFYUi^6m;<#Y z1*unr;!ms-~(Bm-mt^*Ny$ePfV(X5xT;YF5bw} z*E+u*t6472k0-41p#zwREy?<_Jj|Waa27|i*0v^F^|KLklE)$gaN0Mk41g5QVAm^9 zBw+di!g0{`foJ@A3ox|feAcT{XRT)I%rkKAlE~I6%gdOVGCB)Hx>LNb23yY({O6^FJ5LcjlE_X*{VYT@ozObLoU-)Fd3e) z`&$!sD%zDR21?0Zxq59H)h}afw-Q`g6LMx)1tUEf<>kTtgQ?(7FC<@Il-+h-W)WHIGAyuQT@Czu*9N+m40{!lLfYTfnKXN=?q#WP{YaoV#4!zkl~ z#a4>5`E-M$hA@)F-(GW_@95VkbESRgsemrZurMD#D>)>34(r=^>tQx8V>9A@uO*66 zhp{%XqBhb}HK^qRmM%2aIZ@m#vjgP!0mYlj zP&%+)>_65GUBsfjOZ+5yOP&wpP2#N}mz;!tcL4Ys9?)lk%5*A_QcF)u%LExS_N6!; zyMB-zVd|+p1MP0N?YZr6k6LE6j5_?;v6D02|X1tdl z{`7Wz__qidG!+MX|E& zZl9^Dj~{bosZ4+Ww!J82Rbn`V2rE70e);m%!pGaj#ZZ*jXZJ&izWs(UMwg8U#MtUy zp~j&Fa?<_3l>jDUx)_uRC?GNOz|Yn2vaCPfTg)caQM!Ff`NHR9^O!FrdNMLc`xV5J zN<*${?|#JyyH4iux)Y;%)t9i2ji>@(Zp)p1S+kn*D!Z=_JF0Bp%NYNt&F`XRqRWuP zi)XSw2&b8Xp1UTQhatDcNN(Lq03{8ee}3c;HKre#E2il#)0)|y6*2g(O9f5(=w#{8ez6}{Bia6t@ejpdRBwyl1EZpkk1z%QeFv09N8h$j)S zw7?T-(MaqN6DZ*9$#v^dbS@A*%qx-Bx&2d5B}g88lDM$icR&9_+jjYIO`=BkiQq85 zuR8qjw7;6p z*OAJ5Vm4jv{Ai&Q*LSD0ms?N?LvM3Vk;28(5eOMUS5-$oX8r^`_M61ucmyI~*JAMg z(|Z>#qsJWsB6=6#4u4SnF%mT~Y?ZHuwpC!fzsai%AOJ<_m$Ut^Jdwzvwp?^*3{?+9 z?RS^i@u&nG2A#(GuC=KpTq5t;LG5K+!OKQ&y(EB49uS10_LZ0HBA+)S7f1T=*H$xn zr|;RE92g^QfB*IaE+d*>1d=jkn|CC}s0*>Pv;THnK<=;Sm#IHD989X6C-f{0CB{fw z05+8&S;0uZ2rZlNYsQY-#wqfPr%l>Wb33j&z`M#=Qlqs& zEEF0R>Ur}w;>HR?vvW`*$_NTF&~=aiKF3&$-Mz!UHW9T@f0k-26s;4O&)~Jg1gY?q zeGbpXQ>szBRZVHL6aT%2yuDi=QDshE9>YoBqTm^^@4LejJ-j$mW%O2+pS!*6_hF;o z+8PQ3y9lffB3vv1dbeM%$W@a?FaaHv1y)d3xLV>PhfjFqEb$9MXINbyciYX<=XHzM zwo7#@U5-V+;4O~$Yo`lrzHfyhSuRG=(bBr-JAR8uNlyru<1j;l2C))yf(Uwvts2kyvlD_+YGp(Q}>LG?E z2f#$ifs&`8d1S8HbsW^3^p?0S6LJA%V_9*#nfX69M%12L^5BFnAaa0o?|*1fAfNk( z78R!VzhD=*PHqTL*=_(T#gFCQL~|rqA`nVfQwaO4s*X3a{^!Ms5QpdS(%O&#==L0B z6`CL2tOfh`gAkFqJ$J~`OQik_3In&UGLHvBR_Ueg*h!!SbsH8wY2s0ml^ua76-~~j zAU){)-@q0FAV)g^Qf99kBd;~6H4@uQ0?r>&2nO}P)i7vY-R6s(04qD%D9xQ&ka-w* z>D(A*k%RQV(HAITrDSH7pLG8?wDD|CLgaGqWdX=S2?$CY+s>rrF3F1+tQCKWI@18)+PTBqqHsHmveo2w7^0dV>A-%|m6Gx&5+BT|kVH?QW$#YmQ; zdEedXRq<21Nm4p%0D%je?H!V4@Equ`%94E!T)q2oEZ>?Dpx@IRt>0%%$%H~ z|H;RLzU21$ibf%T6ZjScj$4Bi!UsTD z<`#lgAjBW~k@N1qvVEaV4b}Dle*l5%Rk!}h7`TKpl zffv`cp^v~m3m*iN06x{M(2ftHwA>N=o9X`@kq)SoX8eRu2IvACk$_U&mBWr8g~P~U zQYlEa+R&dfLgx;}e}SjBo6&|u93T`3as(5Han~hfWH3KAE88%20$YWd2kPv9jJ7DH zD1^`6!6aKJ_{mNFMDrZDW)%YOuh2aBGf}($;a7l&==Ot`{jDx5@=EDkQsCw_0nKBU?4x=EE z;7Q8J*shP{Gicg?Ejki4R<&l4I1@M9jq)Efvu6eA-4ZSjM9KZc$=T0SsRhw@E2>D6 zO=|tv8K8%{z9mc(l7prF(QSkJu~Fx*s;kVZ)<3%GL;r3H2jv}kIF^LiM7Io$gL3j? zX@uY{To4^=gROYmXaq=%{4e*reSo*zvt}1_NK!fdoYdv-!@-4sDZzhmH9(SvgKBk1 z6-fWRtO=OOc~l|Q3G?!5fwWQ`aMXbTfSzX69Ljb0|Iz$FH%f62uz2$T(HSyiaB->C zs|Qq%sg)2EYxIqR_kVYozuQbV6#q8?_2)K5SEXK~7BDPJPD`^2XS4_0695J+|Nl{O zuo(=zY~N7Wo3_lg20XfQwZbq8?`53XS3S>({)uIJ`jO1#S0~9QHPsWJNFB{)z@kr? z4Ko`kJmlEjq)C4V_?s)`)N6cFV z+;s?EM^u*h#A2$CX56p)=Y1I7!|?r>ude=`=el(J_f$a?;JQ|mKFlcuG|!_A1;Teu zov3E<#>=8jgdo+ZHteNSOXtS-Z&sfA`rw@0Eji%^}!>@ zdkN}eCX-|?b*otIE%_A7gM zD^iZaU~6#@&8CUF6xxeQ@u%80U;DEdV@5?_P7d0$Od%NWwwcPiHryvZzOX)oBY+(i zZU>ds9{sIpnqG7RpTpSz6c9@A&mOo^{5^G><>AeS?%Xe|9`jTgXmem1nIebiYl<<0 zdaM`|#CoC%csJL? zSV)j?3`iN*`$p@=_lz7_N_5>Dr=))KX?<^O*Lqjus=2ukD3?#Q^Aw`u1IHIe18Vt` zDT04`85?YL3&xR+9o#{gAdmx7#7x2ygXrDiS;RX;Ggr<`S`+R_yuRw+< zM5v~Y&w;}3>zVLyf zq1NlAw&TY$kskV?X9_1dYK9iC8l-^OtWdBacXa>y?zd;0G#^?AQ0=c7S!v?BVPMxt zyVvK?e)UIDjscKq!1*)n4@w*Aicy|*B-Oh0@{n~SCi#;h2;@xFcZm>}h;8Tg24Ey$ z68%nT{vSH7_z?P6eQgb(f?V$w)cd{H<+Xk498z^^{1HvFy3!pE+mj_bnY^|~WRS9}Zug%KFTND`xNX~)q44;^| z3}D=wfSBr$vI1-vo36+r2{{604qQP96471_X~KTKAt*N-##GB7y7|;s->y?8*KH?i zj5)Of!ypve@7kxA#8_I(r~xy+lWA{*FVpO4s0npaTw0bjRrT-d!`|8K{ES-)kF>?Q z1;Cz`4WQC44i3)mk^Gn6iv*tmKN#2K$qJo9aHRAL`N_!0e41_5J_Y1LP$%>U8d>*0 zE~I=8piWe0r~2M=cmMeZKDRcpl4e|{Qxs}+LamoFcdQSSoaGhdC#nR#Xi#(5dmj1#T9Q>AWk^UT2)A?7jsO(ejQha3Q$156R&o<`Mt9vs>i8o^ z*w@ZA8yGJtp8%|rDU-o8% zLdN4d{`gV=`QPBDM*;~kPy_DRZ1N4wz+>86S??NsYZaU{8-RrQ1K1Zq6{s5tet4~M9QCu z)zqHh;p2S&^$M*ZO?d?qnUOg%huRBx$jYjVg)BGOWdsJI`(~$ShZ;<6Y-f0Xvz$uL zNzW-aa(~{s=ewJ(9rCJ(wrr~E9ru=JXi~YZ#_GHfW21!Xw-4UoqG}5U&(@gA;|Vnb zBYz7?@vskRJo9HRKg3&^Qe@7h=FflFO)$?e#>+?Mmi|N`44I4WWGk)j|wa}}vp!3^neb;Udge%XG1ey4@}^7~m}f$SQaRyT@YjZniSM{G#@ zl2@_6r?9m3{DH!3%UPfizjelqva@d0{;2xq>C;-r?{{9B#?RZTk?3_Y2puIpX;2k9 zN~Xq+5&e-IQg@zXUVC{7)+>FXN~P{aD-3pd4XQvqcm;dPQisPg^?_-N)<5LdofPl( z4$b5SBy}v3&wBRQR=3kbh5dZ&1tq64snM;(oKH@uTUVy`vVZdT9B()e$rtjKa8zM< z!CsPZQR~czPm2o;Ln>`-f?6Dj!nOh5i!j(3&!6MG)_@gM;km6(iFv(hO!Ud2EzNR~ zKV5j+ehq(l65XNVhm6(u(|5Sl1(f=h!=*%eK-guE*=YS;8U%8S0g^Y&NRdI*d8mv? zZ8FgJycATa>6Ray4OeA-`D=0w{0`d)RnmZ|2Wx0i{){-spRpwn_^dYXQ!Mk3yU3N5 z-`*smRL3vWt+__E2?sqZ3hOe>VvUz?u71A2@+Hh^5I8N(#3H95p5^_oi{fRf!!6U) zv`858!v%q~j4X@t3=4LMv~>;pWZDA<}t91 z;8#taTT6-FzQQya<1a(G=HGIS`W*GzlcOqx!-Wk?lk%6jSvk^&OjTli68;Qv$?3GU zTdlmvowH=%H=eO5ZBw|KM>aq9)sV1hIkiKbAqQ960{}!)NN(V@4tz85F!u*25z}3* ziQJs2qzn5tIG^|kd0Ywn{Z_<>)bD)`^>v#5{HpceeWa+dNhbujVx#X24r!vTt&2x&rqK7z?I$Gapr zb+k{&1atP!6c)4Gpd zlRS~SK>p_1@Uqz6@alKnXNk<)KkG#GD!~KZ)&{%|bL)6X7|Yk!kR#mKOORPUJxP12 z2E8~@oYx{S4@i3}gsh_8vc#q3Tuw8atf6ME-@i3Q!Tck zen;~nN{V88Yshqo=8h*H)mK~bJHwBgZy(Y*G{{n34CwL|fienWL+E_4ijQC*dSn~~ zETu)N5GFhSS%2+Bl36k#ZPOim0=n`hSFgt}qPZ1oVEuGBN``3S({l zzGX%a4d3$qvktt(jmJx>X$2Wr%zES^=$4aK8|6aP-6diO$KQO-CQdk5qMx3u^66oE zoS~&&ObNsB&j%aR{;MDcdBieVSC>D85$OO+Ky8B(w$OinA1QiCx!3(i%KOf2MOUwy z2I|~H1)W-fSoJuA!l;XeYt7pS-2vDrQyOrPZvkNsQm7R`wwftZ8P&wStTg_aVk)qP zZG%Kh_toLu;AcmQCgS*E(Jo@RwNJY}WjY=eoBq zmq^CgXd)(Vh6kh3O`eXSKaNkD+629pC6vCohbfa<4(xfS$)#Vwa|O$yUfNSf968`n zWL^yFr}H`Hlo@BGr7=PtwpoA(H3p31HBlq6ErpYBXKDjwP$^{#9YZME#=RLVRoDI107y9uKzZ1L`-C(=F_LER*LvWc1O!s;0l==W)rRg2+4O&gj295;sk zg+XG6tAi_mj>E+X^STQN{Z?a13CWCfQf!aag7j6&pz8-!jmrGMI_y2J5qI~2Fm$dtM?q^3=vr2$Okl z9UGZSFs8xn;GRlS3WTU*N2ueW_E34FhNww#qB=%=q8SH67*i^zz>>k=K_ z0MK17IG@mSyf+;V972+P75~0NaP(jy#S5c&qa0gNB{Z>AKc_B@Vn!MLtT+4)+|#u* zWx2eVkIzTNv_}hhs8K|m;<9@G9;K84*ss@_dgcl75gt%y@g%5Y%l0c+NA76~7u}BP z02Q_-Gz)(P-Ut(NGfDuHC)|)IYbcW1he-QECy&o1|5@Hou{$(G&quR5u4j0nNX}K2 zDf~RFU<7lOk^@Q2z&!#VA}kG5s~6b;{WDOwCCwSy%{8f2 zwH(M7W3NybsQlfGIbiCE-_0CX|HO&y_RlaC%Wv^fgtp)u6}W^xYku$O-`h77&tRmJ zbD=y-fWMM~ct7-{-LOfD!rQrQdAW`BoHn79QpOZbTx{$)^vd~AB{i8)rJaHCSVBCG zO>*zRKmsst>;;t)3nA3b+}k(=dY3h^qBaq=-bo=x0|s}Wq2)9cMt`u=9}2278z0h- zD}T4_2s#5ObFlXmnbyaO z-#}Y(7$!M0@cB#tW?lUQ>5q#+j;Icl^Io6zyUU?552D^9M50UVU+qLv=?tEUZQqJx zFfw3jG;{{${XXuM^j|UcJuVs(vT@@QzQm?DbU*8T&LlgPiee;3d$ud-7yKaNfvjA@ ztEhG+B`T2uj=!U*2D>)AS12TEgB$e_c;T^U3VGN1f#b(zF@m8F2={2IsMJxllLU)O zZ=)Ac97YdV9#&}M(Mv{@;kFv}l&U$LYo0R0<{~o-lqm6z%v}FZayFW5Om}D2A9%|2 zh!)`$2u=OIJ@EWtLWg(=bokNUW)>Fm02yOOt_k$tK)v0j_$iT!)%(`G10A~>gu2mO zjCZi~R-znumbVPu%_g32n(tY=XZx>q{CXvxr16wzSt6KA`Az}b237Y_=0pP03X{IspZ`eP|0_HFNCjaK??Nh75s3}#;B}0W|PAn)g)c1bf zTrnLIPR6}>Ntz!1h0+Bn9+`fGU*snxr^y{^mBucirAcHk{&}c)cad@`{c`;dB82w8 z;<^9;ydSbQLy9U@$z_L3Ed0Qaq~#bf5svt7pGp-Li4`m>-!4rw!wtg&4?$;?7i@P`g8v>;ix^OV_3aIz0^p^YLx%)5u7=Z$b!jgk zZ52T!`tIY1+h>jx^`lgMLg)BG9`B<&;9!t9U#8%dzuvA z`bqRO&WF3DmG1&;L2ZPfS0heCH#sC^u{0MtNT#4@5Wxp~{0-KR3_izzyvAeUe~xt` z2}-&$#T*=SGyDOKxV1OoPLxzg{<8Ak4LlU$vBxa8&n|fvaagMjAm(UTe+L6vR&PWj zXiH-NPPGiXE=jSl*nM0rK(U?jo=-flrVCG!)I+!(+~g@X^iBe=HjNHWmttjJ!9hud zFFBf~t?ceUFWQ78IB9t-A%|G^8~Z#k9q&>rh52;@b+FAkvQLonuyO=GBP;9pA|@*swjeH{io>qi zde0{xEO~(URvkN#Fh52cyrQp?cL8}-8~`9|jrfGvGK&fiQp#DngHO+Cwb~}nKlF;9(ugL!!#Dh`8juKUdJKB`_&b@If z+Hs^aTjrM!zOcFZC2CVpi1&)(JG9e-8{xJJ(k1_Akb-uxQLEJ89_;GU)F-V4 z*O_s|R8@Jey72LMhHhWl9v{fzPJIJDc>cYB5Yo48ChTsFxYFd2ZB8tDpW8`K0-eWs zY1zqaM*dgH1HeW3Yo!~m(J)zTJ z0y+(*>TOd&IBo<~`7HJ`AL5}Sh#}Vxz-;VEfR;!%;WWO_h;;DHGjrwV@T8oUhv+$( zk%aQ^XUB1>(~le*Dzc9oV6~5nEr#ogCu+)NA3lgXr~5^X{aW=cD^;gpzK~cl(l0~O z8BQ>WdzfG%{sf$86~J~_E{uJeAoI}wnW6UzKCwtZiz48m0tjmD=j-ECJVY$)Q-@v; z;^R{jfm$&E>+zzNC~uz#zjim7{6O!+*u#~;MnmQm624Tl!P)+k!m1QDk*n&FwNVZ* zQ>62nl93|v@Lv0%UHbJ}{eohCG*quurYX>dhudLJTU}kRqu~j;%#sx}o)6pYtO+#i;rt_5K3@VaQ;1XLDi04C5IIpxT&CI zo3;i#q?3G(|DY>B{U-aV7!{8s7+twK^CG+Woo8>Pk*C}VW@srE&y$PVxx+2(<2pN| zTGev$(xZHR)gw7YO3`l@@RT_0XR@rP(Tu_>Jp=EOz_%uKOnisF)e-vEJf~^k^|K5F zFLA)$ibNE$y?ZNZ=!npkeSce9kt!~pIBx#A{|27aec7uS^W_!|n}=hkwU7VwcKhqe zHAvLG8>!9a7P<@2R+xSd~3a+Er39wYf zl6(QzRU$0NGLun7_&5n-=6CHP$`Q*e;&k~o&e~<7f z>x;dZJ$JO|pU5SY?d=;cp14;k7foT=w|X^=n;Fe}VwGiN{a{&MCJVt01UQZ{)~Af7AJ4n=rpG;!}az~PY`a*6oe6Pm5` zI3RH&0#YfpI}n73d>3;7r52Q8q0B{2UTepKoiY5(Y;*Wmf5@lml%xBb=>8=MN1 zpK{_OW$KxZJde@yQ8D<7Q&>H?uy0vZ zZk3NdN11P*H_B;A02D)`MT&kEU3xZ5wt=!;5}*uzf*1Uj8XlqU^!XlxEMW7PgQQ2C zfZBdk0m(PbhD)Dh?vV6)u9~m2r^!sZL{v@pew~P-Dk3V4BDblow zW>RD8p)TL&?qXRre~IMyYxZZ8OmQ7RYp9 zG0D-4g>zr1j;b`|sDYpQMF%mXwB=B2XWa$?HPJy2g-~#iqwAH$?2NpgJOO{&1DKdc z`S|_Mdn|JU>1`(};sGBXGVoWTTLN*ATqZ9GFfg_#aLTip#9etUb`zK6g1<89X_R90 zD~DCtypr)UAxHi84nnBl=*5(e9sf|N73Ue_zRiW;r8F_h-}0THC(R0g&QbuORUVYy ziUCy^)OYQva7TeTEQ>~oVmyeu`hd*~>oegA0&_SN8FpYC{mb8 zO}sl5G!}kfTyPhfXAL;7%hiL#oj`fI4?0i*lGRl!+xWX?-k(o>C0WQ z;aiYZf)ZPdNp??{={1~bWJ{v$)3Xl}(5;!n3P?2efFVmiFj->+rO?>7*pC{1{CGwT z^fqc3c?8yPFp=~E(-hy7 zywIr4AF7|L+8H`MVTN8OVenfYG=R&eTzm-@70n4ax9)r#bYcu_5NfTz(-Q+1sVt8f z>#}i>B-{E}HFJtt7S`0zYSo`2I3H z+Za^~y=J=#xt&Q;5u(bJEW;Z@rC8>S{*1%4>$mBLAgtgw$nX-=Lim39X@C+ZBal2K z0~kRb6qL;8nw&#EWAAQ*733rl55Kr;<32=2i%-InDy0&Y;3#8c{dDF}jwR+1{_wo* zY(c@Czdw3&;OS`2RmpW6_}WwC;GUe2w=?e!Foe|ixkjI$csq?jSp)Vggf0$%E)GDY z%GyogTj2*zIv2oYgK`I|>FH^xYsNR;J`|##`Ch0YD!%V`Ck2{ww+v6-T|V75pXRqr zsW>|lQLo>w=`3YTS$m!}t4crjLp{dY5Xe96J!_7{0-u374l<33tSBLooFr}P;hMJ; zPPOmp%)))pks_2eSImYRdfsBHs8rn^4`SGR17s32qkxIu3&Kwh=+p(0j9%b0P0PR_ z1EeQ9acy1OmOCG-nz_rK(|cZKHdyrR-6dFUWA8~6c^asqi$P3ht&}0Znlh-~x)f1s z-s_2SX7l5z27BczjHi`VEf;4##JeyWTPSWnm7o+1QIE??`z?Td4>OcemHF8{N@O*0 zt+%ys@9v|&5%eBv@Cg2+ND(yqb>Qrl2-!P8b{b5eKLNNcX{hG};HN|^a?A$)j$va# zldi~pzRMe193Izu7poH-9X+5cQe4i>xmNA>lb*$Ujrc75mPc=y?!|CA7+J)$a5ucn z@|7o-TMmMN(#-n0zsP@8;uxRASeOwZn*)4>8Tmd*=d=5<$&N&MoQvR%r8gGk6sfFLKVBofyVcAmp+hRk8q!jsgE=sj<<#±mna%W- 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 literal 0 HcmV?d00001 diff --git a/zh-CN/assets/js/04a45149.2f5db85e.js b/zh-CN/assets/js/04a45149.2f5db85e.js new file mode 100644 index 00000000..fcbc07be --- /dev/null +++ b/zh-CN/assets/js/04a45149.2f5db85e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[844],{3905:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var c=n.createContext({}),o=function(e){var t=n.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},l=function(e){var t=o(e.components);return n.createElement(c.Provider,{value:t},e.children)},h="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,c=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),h=o(a),u=r,d=h["".concat(c,".").concat(u)]||h[u]||m[u]||s;return a?n.createElement(d,i(i({ref:t},l),{},{components:a})):n.createElement(d,i({ref:t},l))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[h]="string"==typeof e?e:r,i[1]=p;for(var o=2;o{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>p,metadata:()=>o,toc:()=>h});var n=a(3117),r=a(102),s=(a(7294),a(3905)),i=["components"],p={id:"patches",title:"Patches"},c=void 0,o={unversionedId:"patches",id:"patches",title:"Patches",description:"produceWithPatches",id:"producewithpatches",level:3}],m={toc:h};function u(e){var t=e.components,a=(0,r.Z)(e,i);return(0,s.kt)("wrapper",(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("center",null,(0,s.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",className:"horizontal bordered"}))," ",(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io \u7b2c14\u8bfe: \u4f7f\u7528 produceWithPatches \u6355\u83b7 Patches"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-capture-patches-to-distribute-changes-in-app-state-with-immer-producewithpatches/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-capture-patches-to-distribute-changes-in-app-state-with-immer-producewithpatches"},"Hosted on egghead.io"))," ",(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io \u7b2c16\u8bfe: \u4f7f\u7528 applyPatches \u5e94\u7528 Patches"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-apply-patches-using-immer-applypatches-to-synchronize-state-across-clients/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-apply-patches-using-immer-applypatches-to-synchronize-state-across-clients"},"Hosted on egghead.io")),(0,s.kt)("p",null,(0,s.kt)("em",{parentName:"p"},"\u26a0 \u5728\u7248\u672c 6 \u4e4b\u540e\uff0c\u5fc5\u987b\u5728\u542f\u52a8\u5e94\u7528\u7a0b\u5e8f\u8c03\u7528\u4e00\u6b21 ",(0,s.kt)("a",{parentName:"em",href:"/immer/zh-CN/installation#pick-your-immer-version"},(0,s.kt)("inlineCode",{parentName:"a"},"enablePatches()"))," \u6765\u542f\u7528\u5bf9 Patches \u7684\u652f\u6301\u3002")),(0,s.kt)("p",null,"\u5728 producer \u8fd0\u884c\u671f\u95f4\uff0cImmer \u53ef\u4ee5\u8bb0\u5f55\u6240\u6709\u7684\u8865\u4e01\u6765\u56de\u6eaf reducer \u9020\u6210\u7684\u66f4\u6539 \u3002\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u5de5\u5177\uff0c\u5982\u679c\u60a8\u60f3\u6682\u65f6 fork \u60a8\u7684\u72b6\u6001\u5e76\u56de\u6eaf\u5bf9\u539f\u59cb\u72b6\u6001\u7684\u66f4\u6539\u3002"),(0,s.kt)("p",null,"Patches \u5728\u4e0b\u9762\u573a\u666f\u5f88\u6709\u7528:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u4e0e\u5176\u4ed6\u65b9\u4ea4\u6362\u589e\u91cf\u66f4\u65b0\uff0c\u4f8b\u5982\u901a\u8fc7"),(0,s.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u8c03\u8bd5/\u8ddf\u8e2a\uff0c\u51c6\u786e\u67e5\u770b\u72b6\u6001\u5982\u4f55\u968f\u65f6\u95f4\u53d8\u5316"),(0,s.kt)("li",{parentName:"ul"},"\u4f5c\u4e3a\u64a4\u6d88/\u91cd\u505a\u7684\u57fa\u7840\u6216\u4f5c\u4e3a\u5728\u7a0d\u5fae\u4e0d\u540c\u7684\u72b6\u6001\u6811\u4e0a\u56de\u6eaf\u66f4\u6539\u7684\u65b9\u6cd5\u3002")),(0,s.kt)("p",null,"\u4e3a\u4e86\u5e2e\u52a9\u56de\u6eaf\u8865\u4e01\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},"applyPatches")," \u6d3e\u4e0a\u7528\u573a\u4e86\u3002\u8fd9\u662f\u4e00\u4e2a\u5982\u4f55\u4f7f\u7528 Patches \u6765\u8bb0\u5f55\u589e\u91cf\u66f4\u65b0\u5e76\uff08\u53cd\u5411\uff09\u5e94\u7528\u5b83\u4eec\u7684\u793a\u4f8b\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce, applyPatches} from "immer"\n\n// \u7248\u672c 6\nimport {enablePatches} from "immer"\nenablePatches()\n\nlet state = {\n name: "Micheal",\n age: 32\n}\n\n// \u5047\u8bbe\u7528\u6237\u5728\u5411\u5bfc\u4e2d\n// \u4ed6\u7684\u66f4\u6539 \u5e94\u8be5\u4ee5\u6700\u7ec8\u662f\u5426\u4e3a\u57fa\u672c\u72b6\u6001\u7ed3\u675f...\n\nhis changes should end up in the base state ultimately or not...\nlet fork = state\n// \u7528\u6237\u5728\u5411\u5bfc\u4e2d\u6240\u4f5c\u7684\u6240\u6709\u66f4\u6539\nlet changes = []\n// \u4e0e\u5411\u5bfc\u4e2d\u6240\u505a\u7684\u6240\u6709\u66f4\u6539\u76f8\u53cd\nlet inverseChanges = []\n\nfork = produce(\n fork,\n draft => {\n draft.age = 33\n },\n // \u4ea7\u751f\u7684\u7b2c\u4e09\u4e2a\u53c2\u6570\u662f\u4e00\u4e2a\u56de\u8c03\uff0cpatches \u5c06\u4ece\u8fd9\u91cc\u4ea7\u751f\n (patches, inversePatches) => {\n changes.push(...patches)\n inverseChanges.push(...inversePatches)\n }\n)\n\n// \u540c\u65f6\uff0c\u6211\u4eec\u7684\u539f\u59cb\u72b6\u6001\u88ab\u66ff\u6362\uff0c\u4f8b\u5982\n// \u4ece\u670d\u52a1\u5668\u6536\u5230\u4e86\u4e00\u4e9b\u66f4\u6539\nstate = produce(state, draft => {\n draft.name = "Michel"\n})\n\n// \u5f53\u5411\u5bfc\u5b8c\u6210\uff08\u6210\u529f\uff09\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 fork \u4e2d\u7684\u66f4\u6539\u91cd\u64ad\u5230\u65b0\u7684\u72b6\u6001\uff01\nstate = applyPatches(state, changes)\n\n// state \u73b0\u5728\u5305\u542b\u6765\u81ea\u4e24\u4e2a\u4ee3\u7801\u8def\u5f84\u7684\u66f4\u6539\uff01\nexpect(state).toEqual({\n name: "Michel", // \u670d\u52a1\u5668\u66f4\u6539\n age: 33 // \u5411\u5bfc\u66f4\u6539\n})\n\n// \u6700\u540e\uff0c\u5373\u4f7f\u5728\u5b8c\u6210\u5411\u5bfc\u4e4b\u540e\uff0c\u7528\u6237\u4e5f\u53ef\u80fd\u4f1a\u6539\u53d8\u4e3b\u610f\u5e76\u64a4\u6d88\u4ed6\u7684\u66f4\u6539......\nstate = applyPatches(state, inverseChanges)\nexpect(state).toEqual({\n name: "Michel", // \u6ca1\u6709\u8fd8\u539f\n age: 32 // \u8fd8\u539f\u4e86\n})\n')),(0,s.kt)("p",null,"\u751f\u6210\u7684 patches \u4e0e ",(0,s.kt)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc6902/#section-4.1"},"RFC-6902 JSON patch standard")," \u7c7b\u4f3c\uff08\u4f46\u5e76\u4e0d\u76f8\u540c\uff09\uff0c\u9664\u4e86 path \u5c5e\u6027\u662f\u4e00\u4e2a\u6570\u7ec4\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\u3002\u8fd9\u4f7f\u5f97\u5904\u7406 patches \u66f4\u52a0\u5bb9\u6613\u3002\u5982\u679c\u4f60\u60f3\u89c4\u8303\u5316\u5230\u5b98\u65b9\u683c\u5f0f\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},'patch.path = patch.path.join("/")'),"\u5e94\u8be5\u53ef\u4ee5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u65e0\u8bba\u5982\u4f55\uff0c\u4e0b\u9762\u5c31\u662f\u4e00\u5806 patches \u548c\u5b83\u4eec\u56de\u6eaf\u7684\u6837\u5b50\u3002"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json"},'[\n {\n "op": "replace",\n "path": ["profile"],\n "value": {"name": "Veria", "age": 5}\n },\n {"op": "remove", "path": ["tags", 3]}\n]\n')),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json"},'[\n {"op": "replace", "path": ["profile"], "value": {"name": "Noa", "age": 6}},\n {"op": "add", "path": ["tags", 3], "value": "kiddo"}\n]\n')),(0,s.kt)("p",null,"\u26a0 \u6ce8\u610f: Immer \u751f\u6210\u7684\u8865\u4e01\u96c6\u5e94\u8be5\u662f\u6b63\u786e\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5c06\u5b83\u4eec\u5e94\u7528\u4e8e\u76f8\u540c\u7684\u57fa\u7840\u5bf9\u8c61\u5e94\u8be5\u4f1a\u5bfc\u81f4\u76f8\u540c\u7684\u6700\u7ec8\u72b6\u6001\u3002\u7136\u800c\uff0cImmer \u4e0d\u4fdd\u8bc1\u751f\u6210\u7684\u8865\u4e01\u96c6\u662f\u6700\u4f18\u7684\uff0c\u5373\u53ef\u80fd\u7684\u6700\u5c0f\u8865\u4e01\u96c6\u3002\u5b83\u901a\u5e38\u53d6\u51b3\u4e8e\u88ab\u8ba4\u4e3a\u662f\u201c\u6700\u4f73\u201d\u7684\u7528\u4f8b\uff0c\u5e76\u4e14\u751f\u6210\u6700\u4f73\u8865\u4e01\u96c6\u5728\u8ba1\u7b97\u4e0a\u53ef\u80fd\u975e\u5e38\u6602\u8d35\u3002\u56e0\u6b64\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u80fd\u60f3\u8981\u5bf9\u751f\u6210\u7684\u8865\u4e01\u8fdb\u884c\u540e\u5904\u7406\uff0c\u6216\u8005\u6309\u7167\u4e0b\u9762\u7684\u8bf4\u660e\u538b\u7f29\u5b83\u4eec\u3002"),(0,s.kt)("h3",{id:"producewithpatches"},(0,s.kt)("inlineCode",{parentName:"h3"},"produceWithPatches")),(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io \u7b2c19\u8bfe: \u4f7f\u7528\u56de\u6eaf patches \u6784\u5efa\u64a4\u9500\u529f\u80fd"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-use-immer-inversepatches-to-build-undo-functionality/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-use-immer-inversepatches-to-build-undo-functionality"},"Hosted on egghead.io"))," ",(0,s.kt)("details",null,(0,s.kt)("summary",{className:"egghead-summary"},"egghead.io \u7b2c20\u8bfe: \u4f7f\u7528 patches \u6784\u5efa\u91cd\u505a\u529f\u80fd"),(0,s.kt)("br",null),(0,s.kt)("div",null,(0,s.kt)("iframe",{width:"760",height:"427",scrolling:"no",src:"https://egghead.io/lessons/react-use-immer-patches-to-build-redo-functionality/embed"})),(0,s.kt)("a",{className:"egghead-link",href:"https://egghead.io/lessons/react-use-immer-patches-to-build-redo-functionality"},"Hosted on egghead.io")),(0,s.kt)("p",null,"\u9664\u4e86\u8bbe\u7f6e patch \u76d1\u542c\u5668\u4e4b\u5916\uff0c\u83b7\u53d6 patches \u7684\u66f4\u7b80\u5355\u65b9\u6cd5\u662f\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"produceWithPatches"),"\uff0c\u5b83\u4e0e ",(0,s.kt)("inlineCode",{parentName:"p"},"produce")," \u5177\u6709\u76f8\u540c\u7684\u7b7e\u540d\uff0c\u4e0d\u8fc7\u5b83\u4e0d\u6b62\u8fd4\u56de next state\uff0c\u800c\u662f\u4e00\u4e2a\u5305\u542b ",(0,s.kt)("inlineCode",{parentName:"p"},"[nextState, patches, inversePatches]")," \u7684\u5143\u7ec4\uff0c\u548c ",(0,s.kt)("inlineCode",{parentName:"p"},"produce")," \u4e00\u6837\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},"produceWithPatches")," \u4e5f\u652f\u6301\u67ef\u91cc\u5316\u3002"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produceWithPatches} from "immer"\n\nconst [nextState, patches, inversePatches] = produceWithPatches(\n {\n age: 33\n },\n draft => {\n draft.age++\n }\n)\n')),(0,s.kt)("p",null,"\u5c06\u8fd4\u56de:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-javascript"},';[\n {\n age: 34\n },\n [\n {\n op: "replace",\n path: ["age"],\n value: 34\n }\n ],\n [\n {\n op: "replace",\n path: ["age"],\n value: 33\n }\n ]\n]\n')),(0,s.kt)("p",null,"\u6709\u5173\u66f4\u6df1\u5165\u7684\u7814\u7a76\uff0c\u8bf7\u53c2\u9605\u4f7f\u7528 ",(0,s.kt)("a",{parentName:"p",href:"https://medium.com/@mweststrate/distributing-state-changes-using-snapshots-patches-and-actions-part-2-2f50d8363988"},"Distributing patches and rebasing actions using Immer")),(0,s.kt)("p",null,"\u63d0\u793a\uff1a\u4f7f\u7528\u6b64\u6280\u5de7\u53ef\u4ee5 ",(0,s.kt)("a",{parentName:"p",href:"https://medium.com/@david.b.edelstein/using-immer-to-compress-immer-patches-f382835b6c69"},"compress patches")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh-CN/assets/js/17896441.9ee3f929.js b/zh-CN/assets/js/17896441.9ee3f929.js new file mode 100644 index 00000000..0bf6aa2b --- /dev/null +++ b/zh-CN/assets/js/17896441.9ee3f929.js @@ -0,0 +1 @@ +(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[918],{3905:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>v});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=s(n),p=r,v=d["".concat(c,".").concat(p)]||d[p]||m[p]||l;return n?a.createElement(v,o(o({ref:t},u),{},{components:n})):a.createElement(v,o({ref:t},u))}));function v(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var s=2;s{"use strict";n.r(t),n.d(t,{default:()=>$t});var a=n(7294),r=n(1944),l=n(4700),o=a.createContext(null);function i(e){var t=e.children,n=function(e){return(0,a.useMemo)((function(){return{metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}}),[e])}(e.content);return a.createElement(o.Provider,{value:n},t)}function c(){var e=(0,a.useContext)(o);if(null===e)throw new l.i6("DocProvider");return e}function s(){var e,t=c(),n=t.metadata,l=t.frontMatter,o=t.assets;return a.createElement(r.d,{title:n.title,description:n.description,keywords:l.keywords,image:null!=(e=o.image)?e:l.image})}var u=n(6010),d=n(7524),m=n(3117),p=n(5999),v=n(9960);function f(e){var t=e.permalink,n=e.title,r=e.subLabel,l=e.isNext;return a.createElement(v.Z,{className:(0,u.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},r&&a.createElement("div",{className:"pagination-nav__sublabel"},r),a.createElement("div",{className:"pagination-nav__label"},n))}function h(e){var t=e.previous,n=e.next;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,p.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&a.createElement(f,(0,m.Z)({},t,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(f,(0,m.Z)({},n,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function g(){var e=c().metadata;return a.createElement(h,{previous:e.previous,next:e.next})}var b=n(2263),E=n(143),y=n(5281),k=n(373),N=n(4477);var L={unreleased:function(e){var t=e.siteTitle,n=e.versionMetadata;return a.createElement(p.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){var t=e.siteTitle,n=e.versionMetadata;return a.createElement(p.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function C(e){var t=L[e.versionMetadata.banner];return a.createElement(t,e)}function Z(e){var t=e.versionLabel,n=e.to,r=e.onClick;return a.createElement(p.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(v.Z,{to:n,onClick:r},a.createElement(p.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function T(e){var t,n=e.className,r=e.versionMetadata,l=(0,b.Z)().siteConfig.title,o=(0,E.gA)({failfast:!0}).pluginId,i=(0,k.J)(o).savePreferredVersionName,c=(0,E.Jo)(o),s=c.latestDocSuggestion,d=c.latestVersionSuggestion,m=null!=s?s:(t=d).docs.find((function(e){return e.id===t.mainDocId}));return a.createElement("div",{className:(0,u.Z)(n,y.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(C,{siteTitle:l,versionMetadata:r})),a.createElement("div",{className:"margin-top--md"},a.createElement(Z,{versionLabel:d.label,to:m.path,onClick:function(){return i(d.name)}})))}function _(e){var t=e.className,n=(0,N.E)();return n.banner?a.createElement(T,{className:t,versionMetadata:n}):null}function w(e){var t=e.className,n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,u.Z)(t,y.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(p.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function x(e){var t=e.lastUpdatedAt,n=e.formattedLastUpdatedAt;return a.createElement(p.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function B(e){var t=e.lastUpdatedBy;return a.createElement(p.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function O(e){var t=e.lastUpdatedAt,n=e.formattedLastUpdatedAt,r=e.lastUpdatedBy;return a.createElement("span",{className:y.k.common.lastUpdated},a.createElement(p.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(x,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:r?a.createElement(B,{lastUpdatedBy:r}):""}},"Last updated{atDate}{byUser}"),!1)}var j=n(102);const A="iconEdit_Z9Sw";var H=["className"];function M(e){var t=e.className,n=(0,j.Z)(e,H);return a.createElement("svg",(0,m.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(A,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function S(e){var t=e.editUrl;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:y.k.common.editThisPage},a.createElement(M,null),a.createElement(p.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}const I="tag_zVej",P="tagRegular_sFm0",U="tagWithCount_h2kH";function z(e){var t=e.permalink,n=e.label,r=e.count;return a.createElement(v.Z,{href:t,className:(0,u.Z)(I,r?U:P)},n,r&&a.createElement("span",null,r))}const V="tags_jXut",D="tag_QGVx";function R(e){var t=e.tags;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(p.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,u.Z)(V,"padding--none","margin-left--sm")},t.map((function(e){var t=e.label,n=e.permalink;return a.createElement("li",{key:n,className:D},a.createElement(z,{label:t,permalink:n}))}))))}const W="lastUpdated_vwxv";function F(e){return a.createElement("div",{className:(0,u.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(R,e)))}function q(e){var t=e.editUrl,n=e.lastUpdatedAt,r=e.lastUpdatedBy,l=e.formattedLastUpdatedAt;return a.createElement("div",{className:(0,u.Z)(y.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(S,{editUrl:t})),a.createElement("div",{className:(0,u.Z)("col",W)},(n||r)&&a.createElement(O,{lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:r})))}function G(){var e=c().metadata,t=e.editUrl,n=e.lastUpdatedAt,r=e.formattedLastUpdatedAt,l=e.lastUpdatedBy,o=e.tags,i=o.length>0,s=!!(t||n||l);return i||s?a.createElement("footer",{className:(0,u.Z)(y.k.docs.docFooter,"docusaurus-mt-lg")},i&&a.createElement(F,{tags:o}),s&&a.createElement(q,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r})):null}var Y=n(6043),$=n(6668),J=["parentIndex"];function Q(e){var t=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),n=Array(7).fill(-1);t.forEach((function(e,t){var a=n.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),n[e.level]=t}));var a=[];return t.forEach((function(e){var n=e.parentIndex,r=(0,j.Z)(e,J);n>=0?t[n].children.push(r):a.push(r)})),a}function X(e){var t=e.toc,n=e.minHeadingLevel,a=e.maxHeadingLevel;return t.flatMap((function(e){var t=X({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[Object.assign({},e,{children:t})]:t}))}function K(e){var t=e.getBoundingClientRect();return t.top===t.bottom?K(e.parentNode):t}function ee(e,t){var n,a,r=t.anchorTopOffset,l=e.find((function(e){return K(e).top>=r}));return l?function(e){return e.top>0&&e.bottom0})).map((function(e){return[e-1,[i]]}));return{lineClassNames:Object.fromEntries(c),code:n}}if(void 0===a)return{lineClassNames:{},code:n};for(var s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Ie(["js","jsBlock"],t);case"jsx":case"tsx":return Ie(["js","jsBlock","jsx"],t);case"html":return Ie(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Ie(["bash"],t);case"markdown":case"md":return Ie(["html","jsx","bash"],t);default:return Ie(Object.keys(Se),t)}}(a,r),u=n.split("\n"),d=Object.fromEntries(r.map((function(e){return[e.className,{start:0,range:""}]}))),m=Object.fromEntries(r.filter((function(e){return e.line})).map((function(e){var t=e.className;return[e.line,t]}))),p=Object.fromEntries(r.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.start,t]}))),v=Object.fromEntries(r.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.end,t]}))),f=0;f0&&e[n-1]===t?e:e.concat(t)},Ke=function(e,t){var n=e.plain,a=Object.create(null),r=e.styles.reduce((function(e,n){var a=n.languages,r=n.style;return a&&!a.includes(t)||n.types.forEach((function(t){var n=$e({},e[t],r);e[t]=n})),e}),a);return r.root=n,r.plain=$e({},n,{backgroundColor:null}),r};function et(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}const tt=function(e){function t(){for(var t=this,n=[],a=arguments.length;a--;)n[a]=arguments[a];e.apply(this,n),Ye(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?Ke(e.theme,e.language):void 0;return t.themeDict=n})),Ye(this,"getLineProps",(function(e){var n=e.key,a=e.className,r=e.style,l=$e({},et(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),o=t.getThemeDict(t.props);return void 0!==o&&(l.style=o.plain),void 0!==r&&(l.style=void 0!==l.style?$e({},l.style,r):r),void 0!==n&&(l.key=n),a&&(l.className+=" "+a),l})),Ye(this,"getStyleForToken",(function(e){var n=e.types,a=e.empty,r=n.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===r&&"plain"===n[0])return a?{display:"inline-block"}:void 0;if(1===r&&!a)return l[n[0]];var o=a?{display:"inline-block"}:{},i=n.map((function(e){return l[e]}));return Object.assign.apply(Object,[o].concat(i))}})),Ye(this,"getTokenProps",(function(e){var n=e.key,a=e.className,r=e.style,l=e.token,o=$e({},et(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==r&&(o.style=void 0!==o.style?$e({},o.style,r):r),void 0!==n&&(o.key=n),a&&(o.className+=" "+a),o})),Ye(this,"tokenize",(function(e,t,n,a){var r={code:t,grammar:n,language:a,tokens:[]};e.hooks.run("before-tokenize",r);var l=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,a=e.code,r=e.children,l=this.getThemeDict(this.props),o=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],a=[0],r=[e.length],l=0,o=0,i=[],c=[i];o>-1;){for(;(l=a[o]++)0?u:["plain"],s=d):(u=Xe(u,d.type),d.alias&&(u=Xe(u,d.alias)),s=d.content),"string"==typeof s){var m=s.split(Je),p=m.length;i.push({types:u,content:m[0]});for(var v=1;v0&&(i=o.getRangeAt(0)),a.append(r),r.select(),r.selectionStart=0,r.selectionEnd=e.length;var c=!1;try{c=document.execCommand("copy")}catch(s){}r.remove(),i&&(o.removeAllRanges(),o.addRange(i)),l&&l.focus()}(t),o(!0),i.current=window.setTimeout((function(){o(!1)}),1e3)}),[t]);return(0,a.useEffect)((function(){return function(){return window.clearTimeout(i.current)}}),[]),a.createElement("button",{type:"button","aria-label":l?(0,p.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,p.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,p.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",n,ot.copyButton,l&&ot.copyButtonCopied),onClick:c},a.createElement("span",{className:ot.copyButtonIcons,"aria-hidden":"true"},a.createElement("svg",{className:ot.copyButtonIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})),a.createElement("svg",{className:ot.copyButtonSuccessIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}const ct="wordWrapButtonIcon_Bwma",st="wordWrapButtonEnabled_EoeP";function ut(e){var t=e.className,n=e.onClick,r=e.isEnabled,l=(0,p.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return a.createElement("button",{type:"button",onClick:n,className:(0,u.Z)("clean-btn",t,r&&st),"aria-label":l,title:l},a.createElement("svg",{className:ct,viewBox:"0 0 24 24","aria-hidden":"true"},a.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function dt(e){var t,n,r,l,o,i,c,s,d,p,v,f=e.children,h=e.className,g=void 0===h?"":h,b=e.metastring,E=e.title,y=e.showLineNumbers,k=e.language,N=(0,$.L)().prism,L=N.defaultLanguage,C=N.magicComments,Z=null!=(t=null!=k?k:null==(n=g.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:n.replace(/language-/,""))?t:L,T=Be(),_=(r=(0,a.useState)(!1),l=r[0],o=r[1],i=(0,a.useState)(!1),c=i[0],s=i[1],d=(0,a.useRef)(null),p=(0,a.useCallback)((function(){var e=d.current.querySelector("code");l?e.removeAttribute("style"):(e.style.whiteSpace="pre-wrap",e.style.overflowWrap="anywhere"),o((function(e){return!e}))}),[d,l]),v=(0,a.useCallback)((function(){var e=d.current,t=e.scrollWidth>e.clientWidth||d.current.querySelector("code").hasAttribute("style");s(t)}),[d]),Fe(d,v),(0,a.useEffect)((function(){v()}),[l,v]),(0,a.useEffect)((function(){return window.addEventListener("resize",v,{passive:!0}),function(){window.removeEventListener("resize",v)}}),[v]),{codeBlockRef:d,isEnabled:l,isCodeScrollable:c,toggle:p}),w=function(e){var t,n;return null!=(t=null==e||null==(n=e.match(He))?void 0:n.groups.title)?t:""}(b)||E,x=Pe(f,{metastring:b,language:Z,magicComments:C}),B=x.lineClassNames,O=x.code,j=null!=y?y:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(b);return a.createElement(Ve,{as:"div",className:(0,u.Z)(g,Z&&!g.includes("language-"+Z)&&"language-"+Z)},w&&a.createElement("div",{className:De.codeBlockTitle},w),a.createElement("div",{className:De.codeBlockContent},a.createElement(tt,(0,m.Z)({},Ge,{theme:T,code:O,language:null!=Z?Z:"text"}),(function(e){var t=e.className,n=e.tokens,r=e.getLineProps,l=e.getTokenProps;return a.createElement("pre",{tabIndex:0,ref:_.codeBlockRef,className:(0,u.Z)(t,De.codeBlock,"thin-scrollbar")},a.createElement("code",{className:(0,u.Z)(De.codeBlockLines,j&&De.codeBlockLinesWithNumbering)},n.map((function(e,t){return a.createElement(lt,{key:t,line:e,getLineProps:r,getTokenProps:l,classNames:B[t],showLineNumbers:j})}))))})),a.createElement("div",{className:De.buttonGroup},(_.isEnabled||_.isCodeScrollable)&&a.createElement(ut,{className:De.codeButton,onClick:function(){return _.toggle()},isEnabled:_.isEnabled}),a.createElement(it,{className:De.codeButton,code:O}))))}var mt=["children"];function pt(e){var t=e.children,n=(0,j.Z)(e,mt),r=(0,we.Z)(),l=function(e){return a.Children.toArray(e).some((function(e){return(0,a.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(t),o="string"==typeof l?dt:Re;return a.createElement(o,(0,m.Z)({key:String(r)},n),l)}const vt="details_lb9f",ft="isBrowser_bmU9",ht="collapsibleContent_i85q";var gt=["summary","children"];function bt(e){return!!e&&("SUMMARY"===e.tagName||bt(e.parentElement))}function Et(e,t){return!!e&&(e===t||Et(e.parentElement,t))}function yt(e){var t=e.summary,n=e.children,r=(0,j.Z)(e,gt),l=(0,we.Z)(),o=(0,a.useRef)(null),i=(0,Y.u)({initialState:!r.open}),c=i.collapsed,s=i.setCollapsed,d=(0,a.useState)(r.open),p=d[0],v=d[1],f=a.isValidElement(t)?t:a.createElement("summary",null,null!=t?t:"Details");return a.createElement("details",(0,m.Z)({},r,{ref:o,open:p,"data-collapsed":c,className:(0,u.Z)(vt,l&&ft,r.className),onMouseDown:function(e){bt(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var t=e.target;bt(t)&&Et(t,o.current)&&(e.preventDefault(),c?(s(!1),v(!0)):s(!0))}}),f,a.createElement(Y.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){s(e),v(!e)}},a.createElement("div",{className:ht},n)))}const kt="details_b_Ee";function Nt(e){var t=Object.assign({},(function(e){if(null==e)throw new TypeError("Cannot destructure "+e)}(e),e));return a.createElement(yt,(0,m.Z)({},t,{className:(0,u.Z)("alert alert--info",kt,t.className)}))}function Lt(e){return a.createElement(Ce,e)}const Ct="containsTaskList_mC6p";const Zt="img_ev3q";const Tt="admonition_LlT9",_t="admonitionHeading_tbUL",wt="admonitionIcon_kALy",xt="admonitionContent_S0QG";var Bt={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(p.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(p.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(p.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},Ot={secondary:"note",important:"info",success:"tip",warning:"danger"};function jt(e){var t,n=function(e){var t=a.Children.toArray(e),n=t.find((function(e){var t;return a.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return{mdxAdmonitionTitle:n,rest:r}}(e.children),r=n.mdxAdmonitionTitle,l=n.rest;return Object.assign({},e,{title:null!=(t=e.title)?t:r,children:l})}const At={head:function(e){var t=a.Children.map(e.children,(function(e){return a.isValidElement(e)?function(e){var t;if(null!=(t=e.props)&&t.mdxType&&e.props.originalType){var n=e.props,r=(n.mdxType,n.originalType,(0,j.Z)(n,_e));return a.createElement(e.props.originalType,r)}return e}(e):e}));return a.createElement(Te.Z,e,t)},code:function(e){var t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((function(e){var n;return"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(null==(n=e.props)?void 0:n.mdxType)}))?a.createElement("code",e):a.createElement(pt,e)},a:function(e){return a.createElement(v.Z,e)},pre:function(e){var t;return a.createElement(pt,(0,a.isValidElement)(e.children)&&"code"===(null==(t=e.children.props)?void 0:t.originalType)?e.children.props:Object.assign({},e))},details:function(e){var t=a.Children.toArray(e.children),n=t.find((function(e){var t;return a.isValidElement(e)&&"summary"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return a.createElement(Nt,(0,m.Z)({},e,{summary:n}),r)},ul:function(e){return a.createElement("ul",(0,m.Z)({},e,{className:(t=e.className,(0,u.Z)(t,(null==t?void 0:t.includes("contains-task-list"))&&Ct))}));var t},img:function(e){return a.createElement("img",(0,m.Z)({loading:"lazy"},e,{className:(t=e.className,(0,u.Z)(t,Zt))}));var t},h1:function(e){return a.createElement(Lt,(0,m.Z)({as:"h1"},e))},h2:function(e){return a.createElement(Lt,(0,m.Z)({as:"h2"},e))},h3:function(e){return a.createElement(Lt,(0,m.Z)({as:"h3"},e))},h4:function(e){return a.createElement(Lt,(0,m.Z)({as:"h4"},e))},h5:function(e){return a.createElement(Lt,(0,m.Z)({as:"h5"},e))},h6:function(e){return a.createElement(Lt,(0,m.Z)({as:"h6"},e))},admonition:function(e){var t=jt(e),n=t.children,r=t.type,l=t.title,o=t.icon,i=function(e){var t,n=null!=(t=Ot[e])?t:e,a=Bt[n];return a||(console.warn('No admonition config found for admonition type "'+n+'". Using Info as fallback.'),Bt.info)}(r),c=null!=l?l:i.label,s=i.iconComponent,d=null!=o?o:a.createElement(s,null);return a.createElement("div",{className:(0,u.Z)(y.k.common.admonition,y.k.common.admonitionType(e.type),"alert","alert--"+i.infimaClassName,Tt)},a.createElement("div",{className:_t},a.createElement("span",{className:wt},d),c),a.createElement("div",{className:xt},n))},mermaid:n(1875).Z};function Ht(e){var t=e.children;return a.createElement(Ze.Zo,{components:At},t)}function Mt(e){var t,n,r,l,o=e.children,i=(t=c(),n=t.metadata,r=t.frontMatter,l=t.contentTitle,r.hide_title||void 0!==l?null:n.title);return a.createElement("div",{className:(0,u.Z)(y.k.docs.docMarkdown,"markdown")},i&&a.createElement("header",null,a.createElement(Ce,{as:"h1"},i)),a.createElement(Ht,null,o))}var St=n(3651),It=n(8596),Pt=n(4996);function Ut(e){return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const zt="breadcrumbHomeIcon_YNFT";function Vt(){var e=(0,Pt.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(v.Z,{"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(Ut,{className:zt})))}const Dt="breadcrumbsContainer_Z_bl";function Rt(e){var t=e.children,n=e.href,r="breadcrumbs__link";return e.isLast?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(v.Z,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function Wt(e){var t=e.children,n=e.active,r=e.index,l=e.addMicrodata;return a.createElement("li",(0,m.Z)({},l&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,u.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(r+1)}))}function Ft(){var e=(0,St.s1)(),t=(0,It.Ns)();return e?a.createElement("nav",{className:(0,u.Z)(y.k.docs.docBreadcrumbs,Dt),"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(Vt,null),e.map((function(t,n){var r=n===e.length-1;return a.createElement(Wt,{key:n,active:r,index:n,addMicrodata:!!t.href},a.createElement(Rt,{href:t.href,isLast:r},t.label))})))):null}const qt="docItemContainer_Djhp",Gt="docItemCol_VOVn";function Yt(e){var t,n,r,l,o,i,s=e.children,m=(t=c(),n=t.frontMatter,r=t.toc,l=(0,d.i)(),o=n.hide_table_of_contents,i=!o&&r.length>0,{hidden:o,mobile:i?a.createElement(he,null):void 0,desktop:!i||"desktop"!==l&&"ssr"!==l?void 0:a.createElement(ye,null)});return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,u.Z)("col",!m.hidden&&Gt)},a.createElement(_,null),a.createElement("div",{className:qt},a.createElement("article",null,a.createElement(Ft,null),a.createElement(w,null),m.mobile,a.createElement(Mt,null,s),a.createElement(G,null)),a.createElement(g,null))),m.desktop&&a.createElement("div",{className:"col col--3"},m.desktop))}function $t(e){var t="docs-doc-id-"+e.content.metadata.unversionedId,n=e.content;return a.createElement(i,{content:e.content},a.createElement(r.FG,{className:t},a.createElement(s,null),a.createElement(Yt,null,a.createElement(n,null))))}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>i,q:()=>o});var a=n(7294),r=n(4700),l=a.createContext(null);function o(e){var t=e.children,n=e.version;return a.createElement(l.Provider,{value:n},t)}function i(){var e=(0,a.useContext)(l);if(null===e)throw new r.i6("DocsVersionProvider");return e}},7594:(e,t)=>{function n(e){let t,n=[];for(let a of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(a))n.push(parseInt(a,10));else if(t=a.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,a,r,l]=t;if(a&&l){a=parseInt(a),l=parseInt(l);const e=a{n.r(t),n.d(t,{default:()=>xe});var a=n(7294),r=n(6010),l=n(1944),i=n(5281),o=n(3320),c=n(3651),s=n(4477),d=n(1116),m=n(7961),u=n(5999),b=n(2466),p=n(5936);const v="backToTopButton_sjWU",h="backToTopButtonShow_xfvO";function E(){var e=function(e){var t=e.threshold,n=(0,a.useState)(!1),r=n[0],l=n[1],i=(0,a.useRef)(!1),o=(0,b.Ct)(),c=o.startScroll,s=o.cancelScroll;return(0,b.RF)((function(e,n){var a=e.scrollY,r=null==n?void 0:n.scrollY;r&&(i.current?i.current=!1:a>=r?(s(),l(!1)):a{n.r(t),n.d(t,{default:()=>o});var a=n(7294),r=n(5999),l=n(1944),i=n(7961);function o(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,r.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(i.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(r.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(r.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(r.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},4477:(e,t,n)=>{n.d(t,{E:()=>o,q:()=>i});var a=n(7294),r=n(4700),l=a.createContext(null);function i(e){var t=e.children,n=e.version;return a.createElement(l.Provider,{value:n},t)}function o(){var e=(0,a.useContext)(l);if(null===e)throw new r.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/zh-CN/assets/js/283536cd.3445ba73.js b/zh-CN/assets/js/283536cd.3445ba73.js new file mode 100644 index 00000000..ad432ccf --- /dev/null +++ b/zh-CN/assets/js/283536cd.3445ba73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[391],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),o=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=o(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,m=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=o(r),d=n,k=c["".concat(p,".").concat(d)]||c[d]||s[d]||m;return r?a.createElement(k,i(i({ref:t},u),{},{components:r})):a.createElement(k,i({ref:t},u))}));function k(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var m=r.length,i=new Array(m);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:n,i[1]=l;for(var o=2;o{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>d,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var a=r(3117),n=r(102),m=(r(7294),r(3905)),i=["components"],l={id:"introduction",title:"Immer \u5165\u95e8",sidebar_label:"\u5165\u95e8",slug:"/"},p=void 0,o={unversionedId:"introduction",id:"introduction",title:"Immer \u5165\u95e8",description:"2019 \u5e74 \u201c\u5e74\u5ea6\u7a81\u7834\u201dReact \u5f00\u6e90\u5956\u548c\u201c\u6700\u6709\u5f71\u54cd\u7684\u8d21\u732e\u201dJavaScript \u5f00\u6e90\u5956\u7684\u83b7\u5f97\u8005",source:"@site/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction.md",sourceDirName:".",slug:"/",permalink:"/immer/zh-CN/",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction",title:"Immer \u5165\u95e8",sidebar_label:"\u5165\u95e8",slug:"/"},sidebar:"Immer",next:{title:"\u5b89\u88c5",permalink:"/immer/zh-CN/installation"}},u={},c=[{value:"Immer \u7b80\u5316\u4e86\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\u7684\u5904\u7406",id:"immer-\u7b80\u5316\u4e86\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\u7684\u5904\u7406",level:3},{value:"\u4e00\u4e2a\u7b80\u5355\u7684\u6bd4\u8f83\u793a\u4f8b",id:"\u4e00\u4e2a\u7b80\u5355\u7684\u6bd4\u8f83\u793a\u4f8b",level:3},{value:"\u4e0d\u4f7f\u7528 Immer",id:"\u4e0d\u4f7f\u7528-immer",level:4},{value:"\u4f7f\u7528 Immer",id:"\u4f7f\u7528-immer",level:4},{value:"Immer \u5982\u4f55\u5de5\u4f5c",id:"immer-\u5982\u4f55\u5de5\u4f5c",level:3},{value:"\u597d\u5904",id:"\u597d\u5904",level:2}],s={toc:c};function d(e){var t=e.components,l=(0,n.Z)(e,i);return(0,m.kt)("wrapper",(0,a.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,m.kt)("center",null,(0,m.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",class:"horizontal bordered"})),(0,m.kt)("img",{src:"/immer/img/immer-logo.svg",height:"200px",align:"right"}),(0,m.kt)("h1",{id:"immer"},"Immer"),(0,m.kt)("p",null,"2019 \u5e74 \u201c\u5e74\u5ea6\u7a81\u7834\u201d",(0,m.kt)("a",{parentName:"p",href:"https://osawards.com/react/"},"React \u5f00\u6e90\u5956"),"\u548c\u201c\u6700\u6709\u5f71\u54cd\u7684\u8d21\u732e\u201d",(0,m.kt)("a",{parentName:"p",href:"https://osawards.com/javascript/"},"JavaScript \u5f00\u6e90\u5956"),"\u7684\u83b7\u5f97\u8005"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"\u4ecb\u7ecd\u535a\u5ba2: ",(0,m.kt)("a",{parentName:"li",href:"https://medium.com/@mweststrate/introducing-immer-immutability-the-easy-way-9d73d8f71cb3"},"Immer: Immutability the easy way")),(0,m.kt)("li",{parentName:"ul"},"Egghead.io \u7b80\u77ed\u8bfe\u7a0b\uff0c\u6db5\u76d6 Immer \u7684\u57fa\u672c\u77e5\u8bc6: ",(0,m.kt)("a",{parentName:"li",href:"https://egghead.io/lessons/redux-simplify-creating-immutable-data-trees-with-immer"},"Simplify creating immutable data trees with Immer (7 \u5206\u949f)")),(0,m.kt)("li",{parentName:"ul"},"Egghead.io \u514d\u8d39\u6df1\u5165\u8bfe\u7a0b: ",(0,m.kt)("a",{parentName:"li",href:"https://egghead.io/courses/immutable-javascript-data-structures-with-immer"},"Immutable JavaScript Data Structures with Immer (58 \u5206\u949f)"))),(0,m.kt)("hr",null),(0,m.kt)("p",null,"Immer\uff08\u5fb7\u8bed\u4e3a\uff1aalways\uff09\u662f\u4e00\u4e2a\u5c0f\u578b\u5305\uff0c\u53ef\u8ba9\u60a8\u4ee5\u66f4\u65b9\u4fbf\u7684\u65b9\u5f0f\u4f7f\u7528\u4e0d\u53ef\u53d8\u72b6\u6001\u3002"),(0,m.kt)("h3",{id:"immer-\u7b80\u5316\u4e86\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\u7684\u5904\u7406"},"Immer \u7b80\u5316\u4e86\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\u7684\u5904\u7406"),(0,m.kt)("p",null,"Immer \u53ef\u4ee5\u5728\u9700\u8981\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\u7684\u4efb\u4f55\u4e0a\u4e0b\u6587\u4e2d\u4f7f\u7528\u3002\u4f8b\u5982\u4e0e React state\u3001React \u6216 Redux reducers \u6216\u8005 configuration management \u7ed3\u5408\u4f7f\u7528\u3002\u4e0d\u53ef\u53d8\u7684\u6570\u636e\u7ed3\u6784\u5141\u8bb8\uff08\u9ad8\u6548\uff09\u7684\u53d8\u5316\u68c0\u6d4b\uff1a\u5982\u679c\u5bf9\u5bf9\u8c61\u7684\u5f15\u7528\u6ca1\u6709\u6539\u53d8\uff0c\u90a3\u4e48\u5bf9\u8c61\u672c\u8eab\u4e5f\u6ca1\u6709\u6539\u53d8\u3002\u6b64\u5916\uff0c\u5b83\u4f7f\u514b\u9686\u5bf9\u8c61\u76f8\u5bf9\u4fbf\u5b9c\uff1a\u6570\u636e\u6811\u7684\u672a\u66f4\u6539\u90e8\u5206\u4e0d\u9700\u8981\u590d\u5236\uff0c\u5e76\u4e14\u5728\u5185\u5b58\u4e2d\u4e0e\u76f8\u540c\u72b6\u6001\u7684\u65e7\u7248\u672c\u5171\u4eab"),(0,m.kt)("p",null,"\u4e00\u822c\u6765\u8bf4\uff0c\u8fd9\u4e9b\u597d\u5904\u53ef\u4ee5\u901a\u8fc7\u786e\u4fdd\u60a8\u6c38\u8fdc\u4e0d\u4f1a\u66f4\u6539\u5bf9\u8c61\u3001\u6570\u7ec4\u6216\u6620\u5c04\u7684\u4efb\u4f55\u5c5e\u6027\u6765\u5b9e\u73b0\uff0c\u800c\u662f\u59cb\u7ec8\u521b\u5efa\u4e00\u4e2a\u66f4\u6539\u540e\u7684\u526f\u672c\u3002\u5728\u5b9e\u8df5\u4e2d\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5bfc\u81f4\u4ee3\u7801\u7f16\u5199\u8d77\u6765\u975e\u5e38\u9ebb\u70e6\uff0c\u5e76\u4e14\u5f88\u5bb9\u6613\u610f\u5916\u8fdd\u53cd\u8fd9\u4e9b\u7ea6\u675f\u3002 Immer \u5c06\u901a\u8fc7\u89e3\u51b3\u4ee5\u4e0b\u75db\u70b9\u6765\u5e2e\u52a9\u60a8\u9075\u5faa\u4e0d\u53ef\u53d8\u6570\u636e\u8303\u5f0f\uff1a"),(0,m.kt)("ol",null,(0,m.kt)("li",{parentName:"ol"},"Immer \u5c06\u68c0\u6d4b\u5230\u610f\u5916 mutations \u5e76\u629b\u51fa\u9519\u8bef\u3002"),(0,m.kt)("li",{parentName:"ol"},"Immer \u5c06\u4e0d\u518d\u9700\u8981\u521b\u5efa\u5bf9\u4e0d\u53ef\u53d8\u5bf9\u8c61\u8fdb\u884c\u6df1\u5ea6\u66f4\u65b0\u65f6\u6240\u9700\u7684\u5178\u578b\u6837\u677f\u4ee3\u7801\uff1a\u5982\u679c\u6ca1\u6709 Immer\uff0c\u5219\u9700\u8981\u5728\u6bcf\u4e2a\u7ea7\u522b\u624b\u52a8\u5236\u4f5c\u5bf9\u8c61\u526f\u672c\u3002\u901a\u5e38\u901a\u8fc7\u4f7f\u7528\u5927\u91cf ",(0,m.kt)("inlineCode",{parentName:"li"},"...")," \u5c55\u5f00\u64cd\u4f5c\u3002\u4f7f\u7528 Immer \u65f6\uff0c\u4f1a\u5bf9 ",(0,m.kt)("inlineCode",{parentName:"li"},"draft")," \u5bf9\u8c61\u8fdb\u884c\u66f4\u6539\uff0c\u8be5\u5bf9\u8c61\u4f1a\u8bb0\u5f55\u66f4\u6539\u5e76\u8d1f\u8d23\u521b\u5efa\u5fc5\u8981\u7684\u526f\u672c\uff0c\u800c\u4e0d\u4f1a\u5f71\u54cd\u539f\u59cb\u5bf9\u8c61\u3002"),(0,m.kt)("li",{parentName:"ol"},"\u4f7f\u7528 Immer \u65f6\uff0c\u60a8\u65e0\u9700\u5b66\u4e60\u4e13\u7528 API \u6216\u6570\u636e\u7ed3\u6784\u5373\u53ef\u4ece\u8303\u4f8b\u4e2d\u53d7\u76ca\u3002\u4f7f\u7528 Immer\uff0c\u60a8\u5c06\u4f7f\u7528\u7eaf JavaScript \u6570\u636e\u7ed3\u6784\uff0c\u5e76\u4f7f\u7528\u4f17\u6240\u5468\u77e5\u7684\u5b89\u5168\u5730\u53ef\u53d8 JavaScript API\u3002")),(0,m.kt)("h3",{id:"\u4e00\u4e2a\u7b80\u5355\u7684\u6bd4\u8f83\u793a\u4f8b"},"\u4e00\u4e2a\u7b80\u5355\u7684\u6bd4\u8f83\u793a\u4f8b"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-javascript"},'const baseState = [\n {\n title: "Learn TypeScript",\n done: true\n },\n {\n title: "Try Immer",\n done: false\n }\n]\n')),(0,m.kt)("p",null,"\u5047\u8bbe\u6211\u4eec\u6709\u4e0a\u8ff0\u57fa\u672c\u72b6\u6001\uff0c\u6211\u4eec\u9700\u8981\u66f4\u65b0\u7b2c\u4e8c\u4e2a todo\uff0c\u5e76\u6dfb\u52a0\u7b2c\u4e09\u4e2a\u3002\u4f46\u662f\uff0c\u6211\u4eec\u4e0d\u60f3\u6539\u53d8\u539f\u59cb\u7684 baseState\uff0c\u6211\u4eec\u4e5f\u60f3\u907f\u514d\u6df1\u5ea6\u514b\u9686\uff08\u4ee5\u4fdd\u7559\u7b2c\u4e00\u4e2a todo\uff09"),(0,m.kt)("h4",{id:"\u4e0d\u4f7f\u7528-immer"},"\u4e0d\u4f7f\u7528 Immer"),(0,m.kt)("p",null,"\u5982\u679c\u6ca1\u6709 Immer\uff0c\u6211\u4eec\u5c06\u4e0d\u5f97\u4e0d\u5c0f\u5fc3\u5730\u6d45\u62f7\u8d1d\u6bcf\u5c42\u53d7\u6211\u4eec\u66f4\u6539\u5f71\u54cd\u7684 state \u7ed3\u6784"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-javascript"},'const nextState = baseState.slice() // \u6d45\u62f7\u8d1d\u6570\u7ec4\nnextState[1] = {\n // \u66ff\u6362\u7b2c\u4e00\u5c42\u5143\u7d20\n ...nextState[1], // \u6d45\u62f7\u8d1d\u7b2c\u4e00\u5c42\u5143\u7d20\n done: true // \u671f\u671b\u7684\u66f4\u65b0\n}\n// \u56e0\u4e3a nextState \u662f\u65b0\u62f7\u8d1d\u7684, \u6240\u4ee5\u4f7f\u7528 push \u65b9\u6cd5\u662f\u5b89\u5168\u7684,\n// \u4f46\u662f\u5728\u672a\u6765\u7684\u4efb\u610f\u65f6\u95f4\u505a\u76f8\u540c\u7684\u4e8b\u60c5\u4f1a\u8fdd\u53cd\u4e0d\u53d8\u6027\u539f\u5219\u5e76\u4e14\u5bfc\u81f4 bug\uff01\nnextState.push({title: "Tweet about it"})\n')),(0,m.kt)("h4",{id:"\u4f7f\u7528-immer"},"\u4f7f\u7528 Immer"),(0,m.kt)("p",null,"\u4f7f\u7528 Immer\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u66f4\u52a0\u7b80\u5355\u3002\u6211\u4eec\u53ef\u4ee5\u5229\u7528 ",(0,m.kt)("inlineCode",{parentName:"p"},"produce")," \u51fd\u6570\uff0c\u5b83\u5c06\u6211\u4eec\u8981\u66f4\u6539\u7684 state \u4f5c\u4e3a\u7b2c\u4e00\u4e2a\u53c2\u6570\uff0c\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u53c2\u6570\uff0c\u6211\u4eec\u4f20\u9012\u4e00\u4e2a\u540d\u4e3a recipe \u7684\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u4f20\u9012\u4e00\u4e2a ",(0,m.kt)("inlineCode",{parentName:"p"},"draft")," \u53c2\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u5bf9\u5176\u5e94\u7528\u76f4\u63a5\u7684 ",(0,m.kt)("inlineCode",{parentName:"p"},"mutations"),"\u3002\u4e00\u65e6 ",(0,m.kt)("inlineCode",{parentName:"p"},"recipe")," \u6267\u884c\u5b8c\u6210\uff0c\u8fd9\u4e9b ",(0,m.kt)("inlineCode",{parentName:"p"},"mutations")," \u88ab\u8bb0\u5f55\u5e76\u7528\u4e8e\u4ea7\u751f\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002 ",(0,m.kt)("inlineCode",{parentName:"p"},"produce")," \u5c06\u8d1f\u8d23\u6240\u6709\u5fc5\u8981\u7684\u590d\u5236\uff0c\u5e76\u901a\u8fc7\u51bb\u7ed3\u6570\u636e\u6765\u9632\u6b62\u672a\u6765\u7684\u610f\u5916\u4fee\u6539\u3002"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\nconst nextState = produce(baseState, draft => {\n draft[1].done = true\n draft.push({title: "Tweet about it"})\n})\n')),(0,m.kt)("p",null,"\u6b63\u5728\u5bfb\u627e\u7ed3\u5408 React \u7684 Immer\uff1f\u8df3\u5230 ",(0,m.kt)("a",{parentName:"p",href:"example-setstate"},"React + Immer")," \u9875\u9762"),(0,m.kt)("h3",{id:"immer-\u5982\u4f55\u5de5\u4f5c"},"Immer \u5982\u4f55\u5de5\u4f5c"),(0,m.kt)("p",null,"\u57fa\u672c\u601d\u60f3\u662f\uff0c\u4f7f\u7528 Immer\uff0c\u60a8\u4f1a\u5c06\u6240\u6709\u66f4\u6539\u5e94\u7528\u5230\u4e34\u65f6 ",(0,m.kt)("em",{parentName:"p"},"draft"),"\uff0c\u5b83\u662f ",(0,m.kt)("em",{parentName:"p"},"currentState")," \u7684\u4ee3\u7406\u3002\u4e00\u65e6\u4f60\u5b8c\u6210\u4e86\u6240\u6709\u7684 ",(0,m.kt)("em",{parentName:"p"},"mutations"),"\uff0cImmer \u5c06\u6839\u636e\u5bf9 ",(0,m.kt)("em",{parentName:"p"},"draft state")," \u7684 ",(0,m.kt)("em",{parentName:"p"},"mutations")," \u751f\u6210 nextState\u3002\u8fd9\u610f\u5473\u7740\u60a8\u53ef\u4ee5\u901a\u8fc7\u7b80\u5355\u5730\u4fee\u6539\u6570\u636e\u6765\u4e0e\u6570\u636e\u4ea4\u4e92\uff0c\u540c\u65f6\u4fdd\u7559\u4e0d\u53ef\u53d8\u6570\u636e\u7684\u6240\u6709\u597d\u5904\u3002"),(0,m.kt)("p",null,(0,m.kt)("img",{alt:"immer-hd.png",src:r(9795).Z,width:"1400",height:"544"})),(0,m.kt)("p",null,"\u4f7f\u7528 Immer \u5c31\u50cf\u62e5\u6709\u4e00\u4e2a\u79c1\u4eba\u52a9\u7406\u3002\u52a9\u624b\u62ff\u4e00\u5c01\u4fe1\uff08\u5f53\u524d\u72b6\u6001\uff09\u5e76\u7ed9\u60a8\u4e00\u4efd\u526f\u672c\uff08\u8349\u7a3f\uff09\u4ee5\u8bb0\u5f55\u66f4\u6539\u3002\u5b8c\u6210\u540e\uff0c\u52a9\u624b\u5c06\u63a5\u53d7\u60a8\u7684\u8349\u7a3f\u5e76\u4e3a\u60a8\u751f\u6210\u771f\u6b63\u4e0d\u53d8\u7684\u6700\u7ec8\u5b57\u6bcd\uff08\u4e0b\u4e00\u4e2a\u72b6\u6001\uff09\u3002"),(0,m.kt)("p",null,"\u524d\u5f80 ",(0,m.kt)("a",{parentName:"p",href:"/immer/zh-CN/produce"},"\u4e0b\u4e00\u7ae0\u8282")," \u4ee5\u8fdb\u4e00\u6b65\u6df1\u5165\u4e86\u89e3 ",(0,m.kt)("inlineCode",{parentName:"p"},"produce")),(0,m.kt)("h2",{id:"\u597d\u5904"},"\u597d\u5904"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},'\u9075\u5faa\u4e0d\u53ef\u53d8\u6570\u636e\u8303\u5f0f\uff0c\u540c\u65f6\u4f7f\u7528\u666e\u901a\u7684 JavaScript \u5bf9\u8c61\u3001\u6570\u7ec4\u3001Sets \u548c Maps\u3002\u65e0\u9700\u5b66\u4e60\u65b0\u7684 API \u6216 "mutations patterns"\uff01'),(0,m.kt)("li",{parentName:"ul"},"\u5f3a\u7c7b\u578b\uff0c\u65e0\u57fa\u4e8e\u5b57\u7b26\u4e32\u7684\u8def\u5f84\u9009\u62e9\u5668\u7b49"),(0,m.kt)("li",{parentName:"ul"},"\u5f00\u7bb1\u5373\u7528\u7684\u7ed3\u6784\u5171\u4eab"),(0,m.kt)("li",{parentName:"ul"},"\u5f00\u7bb1\u5373\u7528\u7684\u5bf9\u8c61\u51bb\u7ed3"),(0,m.kt)("li",{parentName:"ul"},"\u6df1\u5ea6\u66f4\u65b0\u8f7b\u800c\u6613\u4e3e"),(0,m.kt)("li",{parentName:"ul"},"\u6837\u677f\u4ee3\u7801\u51cf\u5c11\u3002\u66f4\u5c11\u7684\u566a\u97f3\uff0c\u66f4\u7b80\u6d01\u7684\u4ee3\u7801"),(0,m.kt)("li",{parentName:"ul"},"\u5bf9 JSON \u8865\u4e01\u7684\u4e00\u6d41\u652f\u6301"),(0,m.kt)("li",{parentName:"ul"},"\u5c0f\uff1a3KB gzip")))}d.isMDXComponent=!0},9795:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/immer-4002b3fd2cfd3aa66c62ecc525663c0d.png"}}]); \ No newline at end of file diff --git a/zh-CN/assets/js/2a403987.1f5bea41.js b/zh-CN/assets/js/2a403987.1f5bea41.js new file mode 100644 index 00000000..5f29bdf6 --- /dev/null +++ b/zh-CN/assets/js/2a403987.1f5bea41.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[463],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),m=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=m(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=m(r),f=o,d=u["".concat(c,".").concat(f)]||u[f]||s[f]||i;return r?n.createElement(d,a(a({ref:t},l),{},{components:r})):n.createElement(d,a({ref:t},l))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[u]="string"==typeof e?e:o,a[1]=p;for(var m=2;m{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>p,metadata:()=>m,toc:()=>u});var n=r(3117),o=r(102),i=(r(7294),r(3905)),a=["components"],p={id:"support",title:"\u8d5e\u52a9 immer"},c=void 0,m={unversionedId:"support",id:"support",title:"\u8d5e\u52a9 immer",description:"Immer \u76ee\u524d\u5728 GitHub \u4e0a\u6709 350000 \u4e2a\u9879\u76ee\u4f9d\u8d56\u4e8e\u5b83\uff0c\u6bcf\u6708\u7684\u4e0b\u8f7d\u91cf\u63a5\u8fd1 10000000 \u6b21\u3002\u7136\u800c\uff0c\u53ea\u6709\u4e00\u5f00\u59cb\u4e24\u5929\u7684\u5f00\u53d1\u5f97\u5230\u4e86\u8d5e\u52a9\uff08\u7531 Mendix\uff09\uff0c\u4e4b\u540e\u7684\u6240\u6709\u5f00\u53d1\u548c\u7ef4\u62a4\u90fd\u662f\u7528\u7231\u53d1\u7535\u3002",source:"@site/i18n/zh-CN/docusaurus-plugin-content-docs/current/support.md",sourceDirName:".",slug:"/support",permalink:"/immer/zh-CN/support",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/support.md",tags:[],version:"current",frontMatter:{id:"support",title:"\u8d5e\u52a9 immer"},sidebar:"Immer",previous:{title:"\u57fa\u4e8e Immer",permalink:"/immer/zh-CN/built-with"},next:{title:"\u79fb\u690d\u5230\u5176\u5b83\u8bed\u8a00",permalink:"/immer/zh-CN/other-lang"}},l={},u=[],s={toc:u};function f(e){var t=e.components,r=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("center",null,(0,i.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",class:"horizontal bordered"})),(0,i.kt)("p",null,"Immer \u76ee\u524d\u5728 GitHub \u4e0a\u6709 350000 \u4e2a\u9879\u76ee\u4f9d\u8d56\u4e8e\u5b83\uff0c\u6bcf\u6708\u7684\u4e0b\u8f7d\u91cf\u63a5\u8fd1 10000000 \u6b21\u3002\u7136\u800c\uff0c\u53ea\u6709\u4e00\u5f00\u59cb\u4e24\u5929\u7684\u5f00\u53d1\u5f97\u5230\u4e86\u8d5e\u52a9\uff08\u7531 Mendix\uff09\uff0c\u4e4b\u540e\u7684\u6240\u6709\u5f00\u53d1\u548c\u7ef4\u62a4\u90fd\u662f\u7528\u7231\u53d1\u7535\u3002"),(0,i.kt)("p",null,"\u5982\u679c\u60a8\u559c\u6b22 Immer\uff0c\u5e76\u4e14\u5bf9\u8fd9\u4e2a\u5305\u5fc3\u5b58\u611f\u6fc0\uff0c\u6216\u8005\u60f3\u786e\u4fdd\u5b83\u7684\u4f7f\u7528\u5bff\u547d\uff0c\u8bf7\u8003\u8651\u5728 ",(0,i.kt)("a",{parentName:"p",href:"https://opencollective.com/immer"},"https://opencollective.com/immer")," \u4e0a\u8d5e\u52a9\u6216\u4f7f\u7528 ",(0,i.kt)("a",{parentName:"p",href:"https://www.paypal.me/michelweststrate"},"PayPal")," \u8fdb\u884c\u4e00\u6b21\u6027\u6350\u8d60\u3002"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh-CN/assets/js/31e1f126.560507e5.js b/zh-CN/assets/js/31e1f126.560507e5.js new file mode 100644 index 00000000..fba16251 --- /dev/null +++ b/zh-CN/assets/js/31e1f126.560507e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[803],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,d=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),f=o,m=u["".concat(i,".").concat(f)]||u[f]||l[f]||d;return n?r.createElement(m,a(a({ref:t},c),{},{components:n})):r.createElement(m,a({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var d=n.length,a=new Array(d);a[0]=f;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>f,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var r=n(3117),o=n(102),d=(n(7294),n(3905)),a=["components"],s={id:"update-patterns",title:"\u66f4\u65b0\u6a21\u5f0f"},i=void 0,p={unversionedId:"update-patterns",id:"update-patterns",title:"\u66f4\u65b0\u6a21\u5f0f",description:"\u5728 Immer \u4e4b\u524d\uff0c\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u610f\u5473\u7740\u5b66\u4e60\u6240\u6709\u4e0d\u53ef\u53d8\u7684\u66f4\u65b0\u6a21\u5f0f\u3002",source:"@site/i18n/zh-CN/docusaurus-plugin-content-docs/current/update-patterns.md",sourceDirName:".",slug:"/update-patterns",permalink:"/immer/zh-CN/update-patterns",draft:!1,editUrl:"https://github.com/immerjs/immer/edit/main/website/docs/update-patterns.md",tags:[],version:"current",frontMatter:{id:"update-patterns",title:"\u66f4\u65b0\u6a21\u5f0f"},sidebar:"Immer",previous:{title:"React & Immer",permalink:"/immer/zh-CN/example-setstate"},next:{title:"API \u6982\u89c8",permalink:"/immer/zh-CN/api"}},c={},u=[{value:"\u66f4\u65b0\u5bf9\u8c61",id:"\u66f4\u65b0\u5bf9\u8c61",level:3},{value:"\u66f4\u65b0\u6570\u7ec4",id:"\u66f4\u65b0\u6570\u7ec4",level:3},{value:"\u5d4c\u5957\u6570\u636e\u7ed3\u6784",id:"\u5d4c\u5957\u6570\u636e\u7ed3\u6784",level:3}],l={toc:u};function f(e){var t=e.components,n=(0,o.Z)(e,a);return(0,d.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,d.kt)("center",null,(0,d.kt)("div",{"data-ea-publisher":"immerjs","data-ea-type":"image",class:"horizontal bordered"})),(0,d.kt)("p",null,"\u5728 Immer \u4e4b\u524d\uff0c\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u610f\u5473\u7740\u5b66\u4e60\u6240\u6709\u4e0d\u53ef\u53d8\u7684\u66f4\u65b0\u6a21\u5f0f\u3002"),(0,d.kt)("p",null,"\u4e3a\u4e86\u5e2e\u52a9\u201c\u5fd8\u8bb0\u201d\u8fd9\u4e9b\u6a21\u5f0f\uff0c\u8fd9\u91cc\u6982\u8ff0\u4e86\u5982\u4f55\u5229\u7528\u5185\u7f6e JavaScript API \u6765\u66f4\u65b0\u5bf9\u8c61\u548c\u96c6\u5408"),(0,d.kt)("h3",{id:"\u66f4\u65b0\u5bf9\u8c61"},"\u66f4\u65b0\u5bf9\u8c61"),(0,d.kt)("pre",null,(0,d.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\nconst todosObj = {\n id1: {done: false, body: "Take out the trash"},\n id2: {done: false, body: "Check Email"}\n}\n\n// \u6dfb\u52a0\nconst addedTodosObj = produce(todosObj, draft => {\n draft["id3"] = {done: false, body: "Buy bananas"}\n})\n\n// \u5220\u9664\nconst deletedTodosObj = produce(todosObj, draft => {\n delete draft["id1"]\n})\n\n// \u66f4\u65b0\nconst updatedTodosObj = produce(todosObj, draft => {\n draft["id1"].done = true\n})\n')),(0,d.kt)("h3",{id:"\u66f4\u65b0\u6570\u7ec4"},"\u66f4\u65b0\u6570\u7ec4"),(0,d.kt)("pre",null,(0,d.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\nconst todosArray = [\n {id: "id1", done: false, body: "Take out the trash"},\n {id: "id2", done: false, body: "Check Email"}\n]\n\n// \u6dfb\u52a0\nconst addedTodosArray = produce(todosArray, draft => {\n draft.push({id: "id3", done: false, body: "Buy bananas"})\n})\n\n// \u7d22\u5f15\u5220\u9664\nconst deletedTodosArray = produce(todosArray, draft => {\n draft.splice(3 /*\u7d22\u5f15 */, 1)\n})\n\n// \u7d22\u5f15\u66f4\u65b0\nconst updatedTodosArray = produce(todosArray, draft => {\n draft[3].done = true\n})\n\n// \u7d22\u5f15\u63d2\u5165\nconst updatedTodosArray = produce(todosArray, draft => {\n draft.splice(3, 0, {id: "id3", done: false, body: "Buy bananas"})\n})\n\n// \u5220\u9664\u6700\u540e\u4e00\u4e2a\u5143\u7d20\nconst updatedTodosArray = produce(todosArray, draft => {\n draft.pop()\n})\n\n// \u5220\u9664\u7b2c\u4e00\u4e2a\u5143\u7d20\nconst updatedTodosArray = produce(todosArray, draft => {\n draft.shift()\n})\n\n// \u6570\u7ec4\u5f00\u5934\u6dfb\u52a0\u5143\u7d20\nconst addedTodosArray = produce(todosArray, draft => {\n draft.unshift({id: "id3", done: false, body: "Buy bananas"})\n})\n\n// \u6839\u636e id \u5220\u9664\nconst deletedTodosArray = produce(todosArray, draft => {\n const index = draft.findIndex(todo => todo.id === "id1")\n if (index !== -1) draft.splice(index, 1)\n})\n\n// \u6839\u636e id \u66f4\u65b0\nconst updatedTodosArray = produce(todosArray, draft => {\n const index = draft.findIndex(todo => todo.id === "id1")\n if (index !== -1) draft[index].done = true\n})\n\n// \u8fc7\u6ee4\nconst updatedTodosArray = produce(todosArray, draft => {\n // \u8fc7\u6ee4\u5668\u5b9e\u9645\u4e0a\u4f1a\u8fd4\u56de\u4e00\u4e2a\u4e0d\u53ef\u53d8\u7684\u72b6\u6001\uff0c\u4f46\u662f\u5982\u679c\u8fc7\u6ee4\u5668\u4e0d\u662f\u5904\u4e8e\u5bf9\u8c61\u7684\u9876\u5c42\uff0c\u8fd9\u4e2a\u4f9d\u7136\u5f88\u6709\u7528\n return draft.filter(todo => todo.done)\n})\n')),(0,d.kt)("h3",{id:"\u5d4c\u5957\u6570\u636e\u7ed3\u6784"},"\u5d4c\u5957\u6570\u636e\u7ed3\u6784"),(0,d.kt)("pre",null,(0,d.kt)("code",{parentName:"pre",className:"language-javascript"},'import {produce} from "immer"\n\n// \u590d\u6742\u6570\u636e\u7ed3\u6784\u4f8b\u5b50\nconst store = {\n users: new Map([\n [\n "17",\n {\n name: "Michel",\n todos: [\n {\n title: "Get coffee",\n done: false\n }\n ]\n }\n ]\n ])\n}\n\n// \u6df1\u5ea6\u66f4\u65b0\nconst nextStore = produce(store, draft => {\n draft.users.get("17").todos[0].done = true\n})\n\n// \u8fc7\u6ee4\nconst nextStore = produce(store, draft => {\n const user = draft.users.get("17")\n\n user.todos = user.todos.filter(todo => todo.done)\n})\n')),(0,d.kt)("p",null,"\u8bf7\u6ce8\u610f\uff0c\u8bb8\u591a\u6570\u7ec4\u64cd\u4f5c\u53ef\u7528\u4e8e\u901a\u8fc7\u4f20\u9012\u591a\u4e2a\u53c2\u6570\u6216\u4f7f\u7528\u5c55\u5f00\u64cd\u4f5c\u6765\u4e00\u6b21\u63d2\u5165\u591a\u4e2a\u5143\u7d20\uff1a",(0,d.kt)("inlineCode",{parentName:"p"},"todos.unshift(...items)"),"\u3002"),(0,d.kt)("p",null,"\u8bf7\u6ce8\u610f\uff0c\u5f53\u5904\u7406\u5305\u542b\u901a\u5e38\u7531\u67d0\u4e2a id \u6807\u8bc6\u7684\u5bf9\u8c61\u7684\u6570\u7ec4\u65f6\uff0c\u6211\u4eec\u5efa\u8bae\u4f7f\u7528\u57fa\u4e8e ",(0,d.kt)("inlineCode",{parentName:"p"},"Map")," \u6216\u7d22\u5f15\u7684\u5bf9\u8c61\uff08\u5982\u4e0a\u6240\u793a\uff09\u800c\u4e0d\u662f\u6267\u884c\u9891\u7e41\u7684\u67e5\u627e\u64cd\u4f5c\uff0c\u67e5\u627e\u8868\u901a\u5e38\u6267\u884c\u6548\u7387\u66f4\u9ad8\u3002"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh-CN/assets/js/3ff44509.6b0adc7b.js b/zh-CN/assets/js/3ff44509.6b0adc7b.js new file mode 100644 index 00000000..fd59c102 --- /dev/null +++ b/zh-CN/assets/js/3ff44509.6b0adc7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkimmer_website=self.webpackChunkimmer_website||[]).push([[366],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),o=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=o(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,c=m(e,["components","mdxType","originalType","parentName"]),u=o(n),d=a,k=u["".concat(p,".").concat(d)]||u[d]||s[d]||i;return n?r.createElement(k,l(l({ref:t},c),{},{components:n})):r.createElement(k,l({ref:t},c))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,l=new Array(i);l[0]=d;var m={};for(var p in t)hasOwnProperty.call(t,p)&&(m[p]=t[p]);m.originalType=e,m[u]="string"==typeof e?e:a,l[1]=m;for(var o=2;o{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>d,frontMatter:()=>m,metadata:()=>o,toc:()=>u});var r=n(3117),a=n(102),i=(n(7294),n(3905)),l=["components"],m={id:"installation",title:"\u5b89\u88c5"},p=void 0,o={unversionedId:"installation",id:"installation",title:"\u5b89\u88c5",description:"<\/script>')),(0,i.kt)("li",{parentName:"ul"},"JSDelivr: ",(0,i.kt)("inlineCode",{parentName:"li"},' + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/built-with/index.html b/zh-CN/built-with/index.html new file mode 100644 index 00000000..5989cbbe --- /dev/null +++ b/zh-CN/built-with/index.html @@ -0,0 +1,26 @@ + + + + + +基于 Immer | Immer + + + + + + + + + + + + + + +
+

基于 Immer

  • react-copy-write 具有可变 API 的不可变状态
  • redux-toolkit 官方的,opinionated,自带全套工具的效率 Redux 开发
  • immer based handleActions Redux 自由动作脚手架
  • redux-box 模块化且易于掌握的基于 redux 的状态管理,样板代码最少
  • quick-redux 使 redux 开发更快更容易的工具
  • bey 使用 Immer 实现 React 的简单不可变状态
  • cool-store CoolStore 是建立在 ImmerJS 和 RxJS 之上的不可变状态存储
  • immer-wieder 结合 React 16 Context 和 immer 用于 Redux 语义的状态管理库
  • robodux 减少 redux 样板的灵活脚手架
  • immer-reducer 用于 React Hooks 和 Redux 的 Typescript 类型安全和简洁的 reducer
  • redux-ts-utils 使用 Redux 创建类型安全的应用程序所需的一切,强调简单性
  • react-state-tree 将您的状态持久化到类似 redux 的状态树,useState 的替代品
  • redux-immer 用于创建与 immer 状态一起使用的 Redux combineReducers 的等效函数。像 redux-immutable 但是 immer的
  • ngrx-wieder 轻量级但可配置的解决方案,用于在 NgRx 和 Immer 之上的 Angular 应用程序中实现撤消重做
  • ... 还有 很多
+ + + + \ No newline at end of file diff --git a/zh-CN/complex-objects/index.html b/zh-CN/complex-objects/index.html new file mode 100644 index 00000000..d365664a --- /dev/null +++ b/zh-CN/complex-objects/index.html @@ -0,0 +1,26 @@ + + + + + +类 | Immer + + + + + + + + + + + + + + +
+

普通对象(没有原型的对象)、数组、MapSet 总是可以用 Immer 更新。所有其他对象都必须使用 immerable 符号将自己标记为与 Immer 兼容。当这些对象之一在 produce 中进行更改时,它的原型将保留在副本之间

import {immerable} from "immer"

class Foo {
[immerable] = true // 方式一

constructor() {
this[immerable] = true // 方式二
}
}

Foo[immerable] = true // 方式三

例子

import {immerable, produce} from "immer"

class Clock {
[immerable] = true

constructor(hour, minute) {
this.hour = hour
this.minute = minute
}

get time() {
return `${this.hour}:${this.minute}`
}

tick() {
return produce(this, draft => {
draft.minute++
})
}
}

const clock1 = new Clock(12, 10)
const clock2 = clock1.tick()
console.log(clock1.time) // 12:10
console.log(clock2.time) // 12:11
console.log(clock2 instanceof Clock) // true

语义细节

关于类的 draft 对象语义如下:

  1. 类的 draft 是一个新对象,但与原始对象具有相同的原型。
  2. 创建 draft 时,Immer 会将所有拥有的的属性从源对象复制到 draft。这包括不可枚举和符号属性。
  3. 源对象拥有的 getter 将在复制过程中被调用,就像 Object.assign 方法一样
  4. 继承的 getter 和方法将保持原样并被 draft 继承
  5. Immer 不会调用构造函数
  6. 最终实例将使用与创建 draft 相同的机制构建。
  7. 只有具有 setter 的 getter 才能在 draft 中写入,否则无法将值复制回来。

因为 Immer 会将对象拥有的 getter 解引用到普通属性中,所以可以使用在其字段上使用 getter/setter 获得的对象,就像MobX 和 Vue。

Immer 不支持外来/引擎原生对象,例如 DOM 节点或 Buffers,也不支持继承的 Map、Set 或数组,并且不能在它们上使用 immerable 符号。

因此,例如在使用 Date 对象时,您应该始终创建一个新的 Date 实例,而不是改变现有的 Date 对象。

+ + + + \ No newline at end of file diff --git a/zh-CN/current/index.html b/zh-CN/current/index.html new file mode 100644 index 00000000..5d199410 --- /dev/null +++ b/zh-CN/current/index.html @@ -0,0 +1,28 @@ + + + + + +从 draft 中提取当前 state | Immer + + + + + + + + + + + + + + +
+

从 draft 中提取当前 state

Immer 暴露了一个命名导出的 current函数,可以创建 draft 对象当前状态的一个副本。 +这对于调试非常有用(因为这些对象不会是代理对象,也不会被记录下来)。 +此外,对 current 的引用可以安全地从 produce 函数中释放。换句话说,current 提供 draft 当前状态的快照。

current 工作生成的对象类似于 produced 本身创建的对象。

  1. 未修改的对象将在结构上与原始对象共享。
  2. 如果未对 draft 进行任何更改,通常它会保留 original(draft) === current(draft),但这并不能保证。
  3. 未来对 draft 的更改不会反映在 current 生成的对象中(不可被 draft 对象的引用除外)
  4. produce 创建的对象不同,current 创建的对象不会被冻结。

谨慎使用 current,这可能是一项潜在的昂贵操作,尤其是在使用 ES5 时。

请注意,不能在不是 draft 的对象上调用 current

例子

以下示例显示了 current(和 original )的效果:

const base = {
x: 0
}

const next = produce(base, draft => {
draft.x++
const orig = original(draft)
const copy = current(draft)
console.log(orig.x)
console.log(copy.x)

setTimeout(() => {
// 将在 produce 完成后执行
console.log(orig.x)
console.log(copy.x)
}, 100)

draft.x++
console.log(draft.x)
})
console.log(next.x)

// 将会打印
// 0 (orig.x)
// 1 (copy.x)
// 2 (draft.x)
// 2 (next.x)
// 0 (after timeout, orig.x)
// 1 (after timeout, copy.x)
+ + + + \ No newline at end of file diff --git a/zh-CN/curried-produce/index.html b/zh-CN/curried-produce/index.html new file mode 100644 index 00000000..a4a38341 --- /dev/null +++ b/zh-CN/curried-produce/index.html @@ -0,0 +1,26 @@ + + + + + +柯里化 producers | Immer + + + + + + + + + + + + + + +
+

柯里化 producers

egghead.io 第六课: 使用柯里化简化代码

将函数作为第一个参数传递给 produce 会创建一个函数,该函数尚未将 produce 应用于特定 state,而是创建一个函数,该函数将应用于将来传递给它的任何 state。这通常称为柯里化。举个例子:

import {produce} from "immer"

function toggleTodo(state, id) {
return produce(state, draft => {
const todo = draft.find(todo => todo.id === id)
todo.done = !todo.done
})
}

const baseState = [
{
id: "JavaScript",
title: "Learn TypeScript",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]

const nextState = toggleTodo(baseState, "Immer")

上面的 toggleTodo 模式非常典型;传递一个现有的 state 来 produce,修改 draft,然后返回结果。由于 state 除了将其传递给 produce 之外没有其他任何用途,因此可以通过使用 produce 的柯里化形式来简化上面的示例,其中您只传递 produce recipe 函数,并且 produce 将返回一个应用 recipe 到基础状态的新函数。这允许我们缩短上述 toggleTodo 定义。

import {produce} from "immer"

// curried producer:
const toggleTodo = produce((draft, id) => {
const todo = draft.find(todo => todo.id === id)
todo.done = !todo.done
})

const baseState = [
/* as is */
]

const nextState = toggleTodo(baseState, "Immer")

请注意,id 参数现在已成为 recipe 函数的一部分!这种拥有 curried producers 的模式与 React 中的 useState Hook 非常巧妙地结合在一起,我们将在下一页看到。

+ + + + \ No newline at end of file diff --git a/zh-CN/docs/404.html/index.html b/zh-CN/docs/404.html/index.html new file mode 100644 index 00000000..dc9bca10 --- /dev/null +++ b/zh-CN/docs/404.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/api/index.html b/zh-CN/docs/api/index.html new file mode 100644 index 00000000..4c5dd6cb --- /dev/null +++ b/zh-CN/docs/api/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/async/index.html b/zh-CN/docs/async/index.html new file mode 100644 index 00000000..17233bb5 --- /dev/null +++ b/zh-CN/docs/async/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/built-with/index.html b/zh-CN/docs/built-with/index.html new file mode 100644 index 00000000..e591fb7d --- /dev/null +++ b/zh-CN/docs/built-with/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/complex-objects/index.html b/zh-CN/docs/complex-objects/index.html new file mode 100644 index 00000000..4632060d --- /dev/null +++ b/zh-CN/docs/complex-objects/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/current/index.html b/zh-CN/docs/current/index.html new file mode 100644 index 00000000..5d236008 --- /dev/null +++ b/zh-CN/docs/current/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/curried-produce/index.html b/zh-CN/docs/curried-produce/index.html new file mode 100644 index 00000000..7f0dc43d --- /dev/null +++ b/zh-CN/docs/curried-produce/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/example-setstate/index.html b/zh-CN/docs/example-setstate/index.html new file mode 100644 index 00000000..71e2bfed --- /dev/null +++ b/zh-CN/docs/example-setstate/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/faq/index.html b/zh-CN/docs/faq/index.html new file mode 100644 index 00000000..efaa6a1d --- /dev/null +++ b/zh-CN/docs/faq/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/freezing/index.html b/zh-CN/docs/freezing/index.html new file mode 100644 index 00000000..a3840bcb --- /dev/null +++ b/zh-CN/docs/freezing/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/index.html b/zh-CN/docs/index.html new file mode 100644 index 00000000..8f94224e --- /dev/null +++ b/zh-CN/docs/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/installation/index.html b/zh-CN/docs/installation/index.html new file mode 100644 index 00000000..f16a885a --- /dev/null +++ b/zh-CN/docs/installation/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/map-set/index.html b/zh-CN/docs/map-set/index.html new file mode 100644 index 00000000..8566da0e --- /dev/null +++ b/zh-CN/docs/map-set/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/original/index.html b/zh-CN/docs/original/index.html new file mode 100644 index 00000000..582bd959 --- /dev/null +++ b/zh-CN/docs/original/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/other-lang/index.html b/zh-CN/docs/other-lang/index.html new file mode 100644 index 00000000..9e80f7ad --- /dev/null +++ b/zh-CN/docs/other-lang/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/patches/index.html b/zh-CN/docs/patches/index.html new file mode 100644 index 00000000..0df1366c --- /dev/null +++ b/zh-CN/docs/patches/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/performance/index.html b/zh-CN/docs/performance/index.html new file mode 100644 index 00000000..ec9a4598 --- /dev/null +++ b/zh-CN/docs/performance/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/pitfalls/index.html b/zh-CN/docs/pitfalls/index.html new file mode 100644 index 00000000..07b3a9fc --- /dev/null +++ b/zh-CN/docs/pitfalls/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/produce/index.html b/zh-CN/docs/produce/index.html new file mode 100644 index 00000000..21aecc5d --- /dev/null +++ b/zh-CN/docs/produce/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/resources/index.html b/zh-CN/docs/resources/index.html new file mode 100644 index 00000000..50e17626 --- /dev/null +++ b/zh-CN/docs/resources/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/return/index.html b/zh-CN/docs/return/index.html new file mode 100644 index 00000000..3777d6e4 --- /dev/null +++ b/zh-CN/docs/return/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/support/index.html b/zh-CN/docs/support/index.html new file mode 100644 index 00000000..f70aaa03 --- /dev/null +++ b/zh-CN/docs/support/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/typescript/index.html b/zh-CN/docs/typescript/index.html new file mode 100644 index 00000000..5c99b598 --- /dev/null +++ b/zh-CN/docs/typescript/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/docs/update-patterns/index.html b/zh-CN/docs/update-patterns/index.html new file mode 100644 index 00000000..573f3f4e --- /dev/null +++ b/zh-CN/docs/update-patterns/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/example-setstate/index.html b/zh-CN/example-setstate/index.html new file mode 100644 index 00000000..52ed6b11 --- /dev/null +++ b/zh-CN/example-setstate/index.html @@ -0,0 +1,26 @@ + + + + + +React & Immer | Immer + + + + + + + + + + + + + + +
+

React & Immer

egghead.io 第八课: 使用 Immer 和 useState,或者 useImmer。

useState + Immer

useState hook 假定存储在其中的任何 state 都被视为不可变的。使用 Immer 可以大大简化 React 组件状态的深度更新。下面的例子展示了如何使用 produceuseState ,可以在 CodeSandbox 试试。

import React, { useCallback, useState } from "react";
import {produce} from "immer";

const TodoList = () => {
const [todos, setTodos] = useState([
{
id: "React",
title: "Learn React",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]);

const handleToggle = useCallback((id) => {
setTodos(
produce((draft) => {
const todo = draft.find((todo) => todo.id === id);
todo.done = !todo.done;
})
);
}, []);

const handleAdd = useCallback(() => {
setTodos(
produce((draft) => {
draft.push({
id: "todo_" + Math.random(),
title: "A new todo",
done: false
});
})
);
}, []);

return (<div>{*/ See CodeSandbox */}</div>)
}

useImmer

由于所有 state 的更新都使用 produce 包装的更新模式,所以我们可以通过将更新模式包装在 use-immer 包中来简化上述操作

import React, { useCallback } from "react";
import { useImmer } from "use-immer";

const TodoList = () => {
const [todos, setTodos] = useImmer([
{
id: "React",
title: "Learn React",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]);

const handleToggle = useCallback((id) => {
setTodos((draft) => {
const todo = draft.find((todo) => todo.id === id);
todo.done = !todo.done;
});
}, []);

const handleAdd = useCallback(() => {
setTodos((draft) => {
draft.push({
id: "todo_" + Math.random(),
title: "A new todo",
done: false
});
});
}, []);

// etc

完整的 demo 请参阅 CodeSandbox

useReducer + Immer

useState 类似,useReducer 也与 Immer 巧妙结合,如 CodeSandbox 所示:

import React, {useCallback, useReducer} from "react"
import {produce} from "immer"

const TodoList = () => {
const [todos, dispatch] = useReducer(
produce((draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find(todo => todo.id === action.id)
todo.done = !todo.done
break
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
})
break
default:
break
}
}),
[
/* initial todos */
]
)

const handleToggle = useCallback(id => {
dispatch({
type: "toggle",
id
})
}, [])

const handleAdd = useCallback(() => {
dispatch({
type: "add",
id: "todo_" + Math.random()
})
}, [])

// etc
}

useImmerReducer

同上,可以通过 use-immer 包中的 useImmerReducer 简化 (demo)

import React, { useCallback } from "react";
import { useImmerReducer } from "use-immer";

const TodoList = () => {
const [todos, dispatch] = useImmerReducer(
(draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find((todo) => todo.id === action.id);
todo.done = !todo.done;
break;
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
});
break;
default:
break;
}
},
[ /* initial todos */ ]
);

//etc

Redux + Immer

Redux + Immer 在 Redux Toolkit 的文档中被广泛介绍。对于没有 Redux Toolkit 的 Redux,可以应用与上面应用于 useReducer 相同的技巧:使用 produce 包装 reducer 函数,您可以安全地修改 draft!

例子:

import {produce} from "immer"

// 初始 state
const INITIAL_STATE = [
/* 一系列 todos */
]

const todosReducer = produce((draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find(todo => todo.id === action.id)
todo.done = !todo.done
break
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
})
break
default:
break
}
})
+ + + + \ No newline at end of file diff --git a/zh-CN/faq/index.html b/zh-CN/faq/index.html new file mode 100644 index 00000000..2d52f2c3 --- /dev/null +++ b/zh-CN/faq/index.html @@ -0,0 +1,26 @@ + + + + + +常见问题 | Immer + + + + + + + + + + + + + + +
+

常见问题

Q: Immer 如何工作

阅读介绍博客的(第二部分)

Q: Immer 是否使用结构共享?这样我的选择器就可以被记住了吗?

A: 是的

Q: Immer 是否支持深度更新?

A: 是的

Q: 我的目标环境中没有代理。我可以使用 Immer 吗?

A: 可以 - 查看细节

Q: 使用 Immer 时可以对我的数据结构进行类型检查吗?

A: 可以

Q: 使用 Immer 时,我可以在状态树中存储 Date 对象、函数等吗?

A: 可以

Q: 我可以使用 Map 和 Sets 吗?

A: 可以

Q: 快吗?

A: 快

Q: 灵感! Immer 可以为我冻结状态吗?

A: 可以

+ + + + \ No newline at end of file diff --git a/zh-CN/freezing/index.html b/zh-CN/freezing/index.html new file mode 100644 index 00000000..684982a4 --- /dev/null +++ b/zh-CN/freezing/index.html @@ -0,0 +1,26 @@ + + + + + +自动冻结 | Immer + + + + + + + + + + + + + + +
+

自动冻结

egghead.io 第7课: Immer 自动冻结数据

Immer 自动冻结所有使用 produce 修改的任何 state。这可以防止在 producer 之外意外修改 state。在大多数情况下,这是最佳实践,但你可以通过 setAutoFreeze(true / false) 显式打开或关闭此功能。

Immer 永远不会冻结不可枚举、非自己或符号属性的(内容),除非它们的内容是可以被 draft 的。

⚠️ Immer 以递归方式冻结所有内容,对于将来不会更改的大型数据对象,这可能会矫枉过正,在这种情况下,使用 freeze 函数 浅层冻结数据会更有效。⚠️

⚠️ 如果启用了自动冻结,recipe 函数并非完全没有副作用:任何最终出现在 produce 结果中的普通对象或数组都将被冻结,即使这些对象在 producer 开始之前没有被冻结!⚠️

+ + + + \ No newline at end of file diff --git a/zh-CN/img/favicon.ico b/zh-CN/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..272e0837710dec0d8f800cb38251f5744d50876b GIT binary patch literal 4542 zcmc&$2~3nn6#kbD?vhqF7GkZ|uvqHR)T`D~V?AQkdSHvDY8#Ab6o{f!Tdi$k6l!Q} zNNeI%tG&`%Y7-?*YMR(Kb?qMPvdfCFD2TwSke&b93xQol{>~d19DZF4C8H}n2? zeDmI$H^Xrn{Fh?n@P8wBdN{|8;5cpq9w~Ut!vpxSekn#H_c#aOdYt~jcYhc(GqSn( ziAx5BapY(tu>rPX?KKt#(B&2uaomRU#0IQm*@(pl9q_H+Y9}<7Tr3PAKg>9d=nviD zB6wgO%MQy2-yq9n9On{udpK@&30bo;?7Tk=G!|fo;J`K?l^f6j8HgX~Q2eY<^}Ig} zAgd^f_V(Ss6EM{fd)PL__hB&s9*sT7Hn$xa<>2F{H-`65L+xK`)xPOE7KSVSU27ct z>wlK<)1x-@f>OrM2s(vDKh_2JO`v;Yage?D#2(9}IfPjkEWROKW*?`(C_@ulE5ua? zo7+x3MSWAM#vn(3*H=op=cullT2bnqDmgEQ>Eg@2i^k~7nw9^7K)r|NxRUJ>|*^B$jT zCjE}Z(0bRD;NTZ{)p`zozTF=!O#oSXc4$9wiOUPr@;IN(fWd}_o7CTcM|&;UV*SJX zX6p|rHZ)OY^~%soBCg>vtZZ+O#WAs=(f_dWbnXc(80Qog|4i4E0&h%V{R6(iz8Lvl z>lEH}QCUho{`_}Y|8x#@1h&eBS*28#QY%VUn%fJLt_F6GFGG_h%7;1ds0}r}EN%Ig z%CZ!ntJ7*(cJ1+RNwcD-J6Ii;xa=_G0_vtARG3&HzOfz#%>B^|34mQas^#~$u{L1t z;Ai4>z-!)t2%d$u}- zrKJx3wZ@jV(oy6M0q+Pr+~V?gENH|%7K0Uy4L5~Pj&lhae*ho%F!6fmKq{-p&T-!< zzAR<$stX*-xf=Lz8S#xV&@)^qWf!yd@jcbz5*BZ-lvZR_h-=PRd?WkxI(#oEHU5v* zLcFg9_omv=izLoA^jstEp``y%+d!-3o%_tbAw4!U%C+EUOMnkQDkpXP^@N>&wVuV% z-@HoBFNS)90rl_k@5H@6f%veZXWQ{TdBiPcrsF$qlS_CDpS}D2xBPzBr{)T6YNYOfkS5-b)qY!cXq+wfo*y+bS29SKYdOVrVQ3z^@GyOmgtE zYt_22#&;;byL0m)#}8n@Jka;ZALQB4^C7i9)T~R)D3K$U-a8ZI)p4NMMMGQ;eoh6h)q@S8FH%4TY6;>`2h;@csQ%5{#}h9}nR(^Hf^VF{%2T+W_cnx% zOs3yi8Vds}^RPL&OYs|qp1ViATOVeF@&<*WCm*C1dh$T+4ut+!4B!J|PiunB!$ACl z>|iiJKA;ZZ9nap;|0f2r2mF?XS{SHbR(>#X06UO_!Q_GL1A|~OJ&rlV0l)i{f&tL3 zxt()CK4J(OfO>Ua9Z-|jq$RYlfY3rOR|so!P;(KeHlj6kQ(X@=m@u2u29tYf0bcL- n8oWR+nshgSnz;Q$-=yib@6~#V{h%&L{6-9sWRM%^KB)Y^m?yup literal 0 HcmV?d00001 diff --git a/zh-CN/img/immer-logo.png b/zh-CN/img/immer-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7221e216f9eccc3b5b8a1dcadcf0aef9976be6 GIT binary patch literal 6053 zcmb7Ibx;*fw5GeHxo}BokdW?f5N^@kAgCZMAxJk|Li!R4_i~Z$5Gm>MB8{LZAt)go z&);*#`OS-Y^Umy^{mys3J-f5Bf9!0$v5_`834jC(3yWM=M+1a~g^l^$6^L+uGYFxj z)Zc-su>nN$cleKe>-#hQSO16q?f8%zjLvQ9uc*k&K ziraXVwh-<&eI{Kg*L)x70_X6($8i-$hvu;fb7P3*&K%6(GYjh3k1zEq0Wdzc6V{Pn zPlsR)<5+@)7JkAkatX75H~kWU@@^I@VAw?Fiz3J9T!9V|#2eEJgHEpFJR~I2NE`(8@igWI<043WXF=c^-~?aR=UaJyLs~Jf!);~j`^;ae zBp%FP+zq~~y-sJ1Nzt11?H%ur2Cexc9KmItopHAt$O-7P7so)U37ccV0wYq3R9gXV4?-*Q8tgaxx2BK zO)E98&quOl>uZI{OKac3HeroZqn zq}P!T2t|wXjm+riSIL&-@Va?3$=Wh&E?Ru{+5Gk?9($qf%<~|qXUt2XavN`zNYo6@)E_-zaH5J;l-c{p#IL~o% zYa#&WU${d^>^EV1rp!;*)TQ|_pPq*W%hGsE)4nM)Y0!L%~|85IKVpvsleGz=E3d{H08KPtuuS?U;v zaa%iX%@dE-lgW$GyWhAm2Ru& zj}oJ8!%z72pu~e)$I>g>=@dRdkHis3(&o$0H80jn6|c3vN~GzoB6m)WsmUwz&6o0q z*-J@#R(gU-CaoJ#71EVQRqU&XiBgH|>}g(41`ex}Gkm~9uzKShe2!p8sfvAKN>tQ8 zQ;1YgyVbbmb!1>&=x*W zIJhf(EXeA&$1(#^WMA!$+vA|lllmw~n{m>=Ja+$?tVV&meLbnjxuJ$fPp%R6SlBbi zM|X7Tc}RtwL^WO%dEJ~zT>@>NIse!X&m?#!6QNuLXljOnlR!-}wRs#R8H0ChaKu+= zU$7H7_6@smS{C2lQvNJ7keTZ^0aSENPF|__v~{eG9(9G{Z-18|tO5RdSpL}JlkL)5 zXUStJ9a24dH9wZ4p$CmmC>S6Ocvrhitz$F5WF_OUPn6nkp8e(|&)@!ybf}cB-3W94FK~CxV z!PmXYmeGA+S#q$%&Jx~@8Yo0onQ$UB6QS1>ZvdBj?#lw)CXeq|PBV6w~=z5{xt@DiG`$TP5zrSbOlo78iHS(0m!N8AQCs3l^$ z>vY}8QlGBVgj#@mWtccyJ!4U10o1%mrM3ZYOXrBD1~SE%Vn1-7n*AE`eWMLY4&<|- zsBwAlJn~}T?$FxfyVFr!R}rpD?|d2gWlZZL5R8LixRF1Y0GF*{d3mhYO4y7cje1ee zYi0_PMirYy2{cY+1_g_c?TGl^zmpSPz!!YfC=0u)!umVFM#?<=X7`KO0(P z%LwpHme`}4Vj5}Q@_LpKX%*~36%9xk$I5X!K|y3jUXhI%uy^e3z)z-PVtn9U$erbhaQXJ_uz-Nw zO)!2s4XG4Uv^65)VMq-W`dnsxmsR zzTYy{JZC`QSgN$I+T39)$FU*%865%a3IktSzvc$vhY!ncYUT1f4a}<3@k2b96TFL7 z1alnl5L_?yJm!X}h>DAL_UOp2)c5EqcK6&EEFZSfwvz%KiKYDuPI6Zz`Va>ENw~?+YV7ad-hHTty9)zULv9*Q!2OVjie25D?b5gocBIFlm zwdz)0Y(Kc7(8;)~yEfmJ57R`*q2n+AYBi;AAI`j`%s+=N4#6q^`MadK{Mk@#v|Vgn$e@_F~88Q zZ<>>xz}LqCkr+PT$1SCA#DSRct(Nmj7j?SRv;B2dmzp4;OLsJ3yR2>yx0WA-xTcGm za%2@+rgap`y58FwK(fVzkUcj3?DYtjIyc!v4Ox91GX17Tj_O&HQ;Ca}bseQdJY~PQ zgGAkR4zrpmQN&Lo=V@lR3-f zBm_fE$#Pz>KYvs0R+e7izbH%f*gwh@6{B7<0R6~%Mo)P0&_!K^5`&6iI{Qu>>VL>? zOrhhFriy%Aj0|p^{)#ju<(xhTBUt+t)SHm&s{OJi&IDq+dTOJTm2nx}K9~}$MXO(1 zDr2luBHI+=Cl=@(_Q+h{a@z|o6(zGz`GlGWpgNCWRTOHU!`X0aqDy6>9SJF%Pg|U| z&QtGA3jC_{!P&P0xk!Po368|Me3mK~Lo%9XD*2G_%s&-?>k*Y7O{(Dd#JFlv9fbl& zK>|6_^HmL*-XkX%jP23!5^Nsd`6Xoo1C5?$n;K5-AdjLw_yelcq4%l)TgEiNMq$Wy z9v`wjS`a1IWNGb(u+i&LvF5C4k3tU6?*#XYaw>?--Gw?zbbvPTp*?wykC9<$8cYG# z6*1V#FY&fPpjo6!Zhtn)?zyrr9c_GLw@l< zh<%7;6-~RvJ0X=GdsU?`sX{2L#C@l}7-X@UZ6=uQ(@IjS%8e*UCjmHnk4L4N`5L!No=a|EYZ}zGhIbpMLlh*TI zBPsbOgu;%tf1rl`d-9UgK}0zW)Y=bhozv5;h;6V`@M$E zpu(=FTs>84u%$W5qhc>^%Cv&FP22d;^KS{D{^1G*5*t-c$IiRJ8FFoC`5BGs4&&b!#dy+PovF^425AcgJBX;v&a zQbd~p-5pg2icxt8Y*s>rQhAI}i7GZTnNlMGC)s9CP%E@yIF{GATHD!V>*p@4s4i(L zYG)zDfL27qo6u=AMJq-U567(V`4bqA)GP1WLo;AR9e9vBMrc50uixT`m*8P?%DbKj zC`wz@XO~JfS5iI|BhI)sV`h<_)$=Hky$p7r2(Q)x*HI&3ETjQ5;OIxh;oqcUp3#*( zHu6)4RMQfm^pTxE_IUJFT$ zQj`?D?|AK$SkhlD#ZL8ZN39L;4UePcE-Q*lR6wspJvrBGk<&~J1txk?+iqGtr(*uZ zS8F&e#QBa^Az5dcaHM!caD)mGN{rEV4pH+Zd)d*CP%F#eWe9WcE)JR^7ej}qX0{jc zq>jRnyQM%8*3&z$$0W>~wYW&HrdM6`&ypJ3gkSW$-Gi%}d*dpSq&U?-IgxU7TZBgH zYipoFE7(LqKKd(;lDK7D&W$hNAGj@vvQQY_R!(rEoaqI2e1@e5D~e8(2c)%>#{K5R z4CVKGt8%alY-a8jxB~1n0VDUKDg2BXmQO`wkKwzHNX)P_VnsnkFMiKx8xTeX?$8>= znklNYzkqH=eK#5w_DsbHGy3wE3BM=kH%;#lGWqmbxE;d^4^y!m7S>M1FecT(r^OE^ z{R4x_X%u_82l6lkd{B2>kG|qE6QtAcZ7Ry+|1_dlp>vdc{`+ zjA@?lKg06xP0E>^;od97R5|(K=vmh13BVWVopb z4l5i!sC>VPqHEwmfWhem0mU@U^3AOdstV-D64r}cuULHFE+J3?vHaK*eCY#A2CZZ# z)?47mwm@f|`)!9ch|B(15KNw4N;Jpk4J*J1%P6kmC@xuQNGBV(+}`M1fnc}wzS4r@ zxF(E4#qK+nw(YfehuE_!(P?KLJu@XHFn);3jw7Dm?l7PKJ&@2V}m%h@RWlLL;R*XhSv zgDZy!WhfU26NN&46dm=Nyg}FVeF+wHUKor?-46sy5<0UQw<7c23N@i;cV7aGc#0r~ z_ONhUOddqC@AZ-nc{8O#l|_U&rH(ap+zvJ$jyvg5>Gf$8c!o8iz#agVj96G7yS@OC zbLFfmn7WEGUmIW+UN%8%P1WK0;d5`vh2Zympmg-(FOft>3HxF{-Fg-yK#n_=9%P9J z3oCm%e5I|29?cR2&a71ONVy8AwMt7ooo4r;C&hB41m$ChWTfVjtH(2i${VMxg_q+m zV3Lo)lCcBjABi8FR0iw)=#;k=woeZ;#n94MAdvh1=nE>zPLzOZ9-)&rlD;;rYjXZ} z&(S&ON6K3fG=OA<;73jLKCxE(6tuRLx_vVQI*r|+k7$e3t{{3favlyk0^UpuA>aDGO-+!WiqW`o^ YEZNrq)kb6xmw!TCO(TsOHM_|F0CER6Z2$lO literal 0 HcmV?d00001 diff --git a/zh-CN/img/immer-logo.svg b/zh-CN/img/immer-logo.svg new file mode 100644 index 00000000..da42bc8d --- /dev/null +++ b/zh-CN/img/immer-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/zh-CN/img/immer.png b/zh-CN/img/immer.png new file mode 100644 index 0000000000000000000000000000000000000000..c83185f8a2910090335ec3f0a8f69985f8bffa0a GIT binary patch literal 52109 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≈X2J=ivxbmN$LgxLmTx(7iSA6_xpwvJQ}S< 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≪|^?uN$Hs$~22i=&!7;gw9nA>w>9 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 B>`?#! literal 0 HcmV?d00001 diff --git a/zh-CN/img/performance.png b/zh-CN/img/performance.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd5c8be5365ed566a9b11643a7ee4069b621d55 GIT binary patch literal 54331 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±mna%W- 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 literal 0 HcmV?d00001 diff --git a/zh-CN/img/proxy.png b/zh-CN/img/proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4312e8f026ef451b0b82e681533d56d70f3ea4 GIT binary patch literal 91131 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 Uf|AvyI{ARGw{iTf(b_BV9}h?`r~m)} literal 0 HcmV?d00001 diff --git a/zh-CN/img/tree.png b/zh-CN/img/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..eefa2234e2d19e726c921bac7eaeb459a0cc5e2f GIT binary patch literal 77004 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ÄlL;Dq}(C#5~6B) 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
+

Immer 入门

Immer

2019 年 “年度突破”React 开源奖和“最有影响的贡献”JavaScript 开源奖的获得者


Immer(德语为:always)是一个小型包,可让您以更方便的方式使用不可变状态。

Immer 简化了不可变数据结构的处理

Immer 可以在需要使用不可变数据结构的任何上下文中使用。例如与 React state、React 或 Redux reducers 或者 configuration management 结合使用。不可变的数据结构允许(高效)的变化检测:如果对对象的引用没有改变,那么对象本身也没有改变。此外,它使克隆对象相对便宜:数据树的未更改部分不需要复制,并且在内存中与相同状态的旧版本共享

一般来说,这些好处可以通过确保您永远不会更改对象、数组或映射的任何属性来实现,而是始终创建一个更改后的副本。在实践中,这可能会导致代码编写起来非常麻烦,并且很容易意外违反这些约束。 Immer 将通过解决以下痛点来帮助您遵循不可变数据范式:

  1. Immer 将检测到意外 mutations 并抛出错误。
  2. Immer 将不再需要创建对不可变对象进行深度更新时所需的典型样板代码:如果没有 Immer,则需要在每个级别手动制作对象副本。通常通过使用大量 ... 展开操作。使用 Immer 时,会对 draft 对象进行更改,该对象会记录更改并负责创建必要的副本,而不会影响原始对象。
  3. 使用 Immer 时,您无需学习专用 API 或数据结构即可从范例中受益。使用 Immer,您将使用纯 JavaScript 数据结构,并使用众所周知的安全地可变 JavaScript API。

一个简单的比较示例

const baseState = [
{
title: "Learn TypeScript",
done: true
},
{
title: "Try Immer",
done: false
}
]

假设我们有上述基本状态,我们需要更新第二个 todo,并添加第三个。但是,我们不想改变原始的 baseState,我们也想避免深度克隆(以保留第一个 todo)

不使用 Immer

如果没有 Immer,我们将不得不小心地浅拷贝每层受我们更改影响的 state 结构

const nextState = baseState.slice() // 浅拷贝数组
nextState[1] = {
// 替换第一层元素
...nextState[1], // 浅拷贝第一层元素
done: true // 期望的更新
}
// 因为 nextState 是新拷贝的, 所以使用 push 方法是安全的,
// 但是在未来的任意时间做相同的事情会违反不变性原则并且导致 bug!
nextState.push({title: "Tweet about it"})

使用 Immer

使用 Immer,这个过程更加简单。我们可以利用 produce 函数,它将我们要更改的 state 作为第一个参数,对于第二个参数,我们传递一个名为 recipe 的函数,该函数传递一个 draft 参数,我们可以对其应用直接的 mutations。一旦 recipe 执行完成,这些 mutations 被记录并用于产生下一个状态。 produce 将负责所有必要的复制,并通过冻结数据来防止未来的意外修改。

import {produce} from "immer"

const nextState = produce(baseState, draft => {
draft[1].done = true
draft.push({title: "Tweet about it"})
})

正在寻找结合 React 的 Immer?跳到 React + Immer 页面

Immer 如何工作

基本思想是,使用 Immer,您会将所有更改应用到临时 draft,它是 currentState 的代理。一旦你完成了所有的 mutations,Immer 将根据对 draft statemutations 生成 nextState。这意味着您可以通过简单地修改数据来与数据交互,同时保留不可变数据的所有好处。

immer-hd.png

使用 Immer 就像拥有一个私人助理。助手拿一封信(当前状态)并给您一份副本(草稿)以记录更改。完成后,助手将接受您的草稿并为您生成真正不变的最终字母(下一个状态)。

前往 下一章节 以进一步深入了解 produce

好处

  • 遵循不可变数据范式,同时使用普通的 JavaScript 对象、数组、Sets 和 Maps。无需学习新的 API 或 "mutations patterns"!
  • 强类型,无基于字符串的路径选择器等
  • 开箱即用的结构共享
  • 开箱即用的对象冻结
  • 深度更新轻而易举
  • 样板代码减少。更少的噪音,更简洁的代码
  • 对 JSON 补丁的一流支持
  • 小:3KB gzip
+ + + + \ No newline at end of file diff --git a/zh-CN/installation/index.html b/zh-CN/installation/index.html new file mode 100644 index 00000000..8e0d01b2 --- /dev/null +++ b/zh-CN/installation/index.html @@ -0,0 +1,26 @@ + + + + + +安装 | Immer + + + + + + + + + + + + + + +
+

安装

Immer 可以作为直接依赖项安装,并且可以在任何 ES5 环境中工作:

  • Yarn: yarn add immer
  • NPM: npm install immer
  • CDN: 暴露的全局变量是 immer
    • Unpkg: <script src="https://unpkg.com/immer"></script>
    • JSDelivr: <script src="https://cdn.jsdelivr.net/npm/immer"></script>
    • ⚠️ 使用 CDN 时,最好检查浏览器中的 url 并查看它解析为哪个版本,这样当更新发布时,您的用户不会意外地获得更新的版本。因此,请改用如下网址:https://unpkg.com/immer@6.0.3/dist/immer.umd.production.min.js 。在 URL 中将 production.min 替换为 development 以进行开发构建。

选择您的 Immer 版本

本节仅适用于版本 6 及更高版本

为确保 Immer 尽可能小,并非每个项目都需要的功能已选择加入,并且必须明确启用。这可确保在将您的应用程序捆绑用于生产时,未使用的功能不会占用任何空间。

可以选择加入以下功能:

功能描述调用方法
ES 5 支持如果您的应用程序需要能够在较旧的 JavaScript 环境(例如 Internet Explorer 或 React Native)上运行,请启用此功能。enableES5()
ES2015 Map and Set 支持要使 Immer 能够对原生 Map 和 Set 集合进行操作,请启用此功能enableMapSet()
JSON 补丁 支持Immer 可以跟踪您对 draft 对象所做的所有更改。这对于使用 JSON 补丁时传达更改很有用enablePatches()

例如,如果您想在 Map 上使用 produce ,则需要在应用程序启动期间启用此功能一次:

// 在你的应用程序入口文件
import {enableMapSet} from "immer"

enableMapSet()

// ...然后
import {produce} from "immer"

const usersById_v1 = new Map([
["michel", {name: "Michel Weststrate", country: "NL"}]
])

const usersById_v2 = produce(usersById_v1, draft => {
draft.get("michel").country = "UK"
})

expect(usersById_v1.get("michel").country).toBe("NL")
expect(usersById_v2.get("michel").country).toBe("UK")

Immer 以大约 3KB 的 gzip 压缩开始。每个启用的插件都会增加 < 1 KB。细分如下

Import size report for immer:
┌───────────────────────┬───────────┬────────────┬───────────┐
│ (index) │ just this │ cumulative │ increment │
├───────────────────────┼───────────┼────────────┼───────────┤
│ import * from 'immer' │ 5033 │ 0 │ 0 │
│ produce │ 3324 │ 3324 │ 0 │
│ enableMapSet │ 4030 │ 4039 │ 715 │
│ enablePatches │ 4112 │ 4826 │ 787 │
└───────────────────────┴───────────┴────────────┴───────────┘
(this report was generated by npmjs.com/package/import-size)

Immer 使用在旧的 JavaScript 环境?

默认情况下,produce 尝试使用代理以获得最佳性能。但是,在较旧的 JavaScript 引擎上,代理不可用。例如,在 Android 上运行 Microsoft Internet Explorer 或 React Native(如果 React Native < v0.59 或在 React Native < v0.64 上使用 Hermes 引擎)时。在这种情况下,Immer 将回退到与 ES5 兼容的实现,其工作方式相同,但速度稍慢

  • 从版本 6 开始,必须通过调用 enableES5() 显式启用对回退实现的支持
  • Version 10 drops the fallback implementation fully, and cannot be used in browsers / engines that don't support Proxy.
+ + + + \ No newline at end of file diff --git a/zh-CN/map-set/index.html b/zh-CN/map-set/index.html new file mode 100644 index 00000000..88f3cbcb --- /dev/null +++ b/zh-CN/map-set/index.html @@ -0,0 +1,26 @@ + + + + + +Map 和 Set | Immer + + + + + + + + + + + + + + +
+

Map 和 Set

⚠ 从版本6开始,对 MapSet 的支持必须在启动应用程序时通过显式调用 enableMapSet()来开启

普通对象、数组、MapSet 总是可以用 Immer 更新。一个使用 Map 和 Immer 的示例:

test("Producers can update Maps", () => {
const usersById_v1 = new Map()

const usersById_v2 = produce(usersById_v1, draft => {
// 修改 map 会生成一个新的 map
draft.set("michel", {name: "Michel Weststrate", country: "NL"})
})

const usersById_v3 = produce(usersById_v2, draft => {
// 在 map 深处进行修改,同样会生成一个新的 map!
draft.get("michel").country = "UK"
})

// 我们每次都会得到一个新的 map
expect(usersById_v2).not.toBe(usersById_v1)
expect(usersById_v3).not.toBe(usersById_v2)
// 显然它们的内容不同
expect(usersById_v1).toMatchInlineSnapshot(`Map {}`)
expect(usersById_v2).toMatchInlineSnapshot(`
Map {
"michel" => Object {
"country": "NL",
"name": "Michel Weststrate",
},
}
`)
expect(usersById_v3).toMatchInlineSnapshot(`
Map {
"michel" => Object {
"country": "UK",
"name": "Michel Weststrate",
},
}
`)
// 旧的从来不会被更改
expect(usersById_v1.size).toBe(0)
// 试图在 produce 之外修改 map 对象是不行的!
expect(() => usersById_v3.clear()).toThrowErrorMatchingInlineSnapshot(
`"This object has been frozen and should not be mutated"`
)
})

Immer 生成的 Map 和 Set 将被人为地设置为不可变。这意味着在 produce 之外尝试 setclear等可变方法时,它们将抛出异常。

注意:map 的永远不会被更改!这样做是为了避免混淆语义并保持键始终引用相等

+ + + + \ No newline at end of file diff --git a/zh-CN/original/index.html b/zh-CN/original/index.html new file mode 100644 index 00000000..cab45c19 --- /dev/null +++ b/zh-CN/original/index.html @@ -0,0 +1,27 @@ + + + + + +从 draft 中提取原始 state | Immer + + + + + + + + + + + + + + +
+

从 draft 中提取原始 state

Immer中暴露了一个命名对象 original,将从 produce 内部的代理实例获取原始对象(对于未代理值返回 undefined。 +一个好的例子是:当在一个树状 state 中使用严格相等搜索结点的时候它很有用。

import {original, produce} from "immer"

const baseState = {users: [{name: "Richie"}]}
const nextState = produce(baseState, draftState => {
original(draftState.users) // is === baseState.users
})

只是想知道一个值是否是代理实例?使用 isDraft 函数!请注意,不能在不是 draft 的对象上调用 original

import {isDraft, produce} from "immer"

const baseState = {users: [{name: "Bobby"}]}
const nextState = produce(baseState, draft => {
isDraft(draft) // => true
isDraft(draft.users) // => true
isDraft(draft.users[0]) // => true
})
isDraft(nextState) // => false
+ + + + \ No newline at end of file diff --git a/zh-CN/other-lang/index.html b/zh-CN/other-lang/index.html new file mode 100644 index 00000000..68254dde --- /dev/null +++ b/zh-CN/other-lang/index.html @@ -0,0 +1,26 @@ + + + + + +移植到其它语言 | Immer + + + + + + + + + + + + + + +
+

移植到其它语言

Immer 已经被移植到其它编程语言。

编程语言链接
JavaJimmer
+ + + + \ No newline at end of file diff --git a/zh-CN/patches/index.html b/zh-CN/patches/index.html new file mode 100644 index 00000000..1e2023c5 --- /dev/null +++ b/zh-CN/patches/index.html @@ -0,0 +1,26 @@ + + + + + +Patches | Immer + + + + + + + + + + + + + + +
+

Patches

egghead.io 第14课: 使用 produceWithPatches 捕获 Patches
egghead.io 第16课: 使用 applyPatches 应用 Patches

⚠ 在版本 6 之后,必须在启动应用程序调用一次 enablePatches() 来启用对 Patches 的支持。

在 producer 运行期间,Immer 可以记录所有的补丁来回溯 reducer 造成的更改 。这是一个非常强大的工具,如果您想暂时 fork 您的状态并回溯对原始状态的更改。

Patches 在下面场景很有用:

  • 与其他方交换增量更新,例如通过
  • 对于调试/跟踪,准确查看状态如何随时间变化
  • 作为撤消/重做的基础或作为在稍微不同的状态树上回溯更改的方法。

为了帮助回溯补丁,applyPatches 派上用场了。这是一个如何使用 Patches 来记录增量更新并(反向)应用它们的示例:

import {produce, applyPatches} from "immer"

// 版本 6
import {enablePatches} from "immer"
enablePatches()

let state = {
name: "Micheal",
age: 32
}

// 假设用户在向导中
// 他的更改 应该以最终是否为基本状态结束...

his changes should end up in the base state ultimately or not...
let fork = state
// 用户在向导中所作的所有更改
let changes = []
// 与向导中所做的所有更改相反
let inverseChanges = []

fork = produce(
fork,
draft => {
draft.age = 33
},
// 产生的第三个参数是一个回调,patches 将从这里产生
(patches, inversePatches) => {
changes.push(...patches)
inverseChanges.push(...inversePatches)
}
)

// 同时,我们的原始状态被替换,例如
// 从服务器收到了一些更改
state = produce(state, draft => {
draft.name = "Michel"
})

// 当向导完成(成功)后,我们可以将 fork 中的更改重播到新的状态!
state = applyPatches(state, changes)

// state 现在包含来自两个代码路径的更改!
expect(state).toEqual({
name: "Michel", // 服务器更改
age: 33 // 向导更改
})

// 最后,即使在完成向导之后,用户也可能会改变主意并撤消他的更改......
state = applyPatches(state, inverseChanges)
expect(state).toEqual({
name: "Michel", // 没有还原
age: 32 // 还原了
})

生成的 patches 与 RFC-6902 JSON patch standard 类似(但并不相同),除了 path 属性是一个数组,而不是一个字符串。这使得处理 patches 更加容易。如果你想规范化到官方格式,patch.path = patch.path.join("/")应该可以解决这个问题。无论如何,下面就是一堆 patches 和它们回溯的样子。

[
{
"op": "replace",
"path": ["profile"],
"value": {"name": "Veria", "age": 5}
},
{"op": "remove", "path": ["tags", 3]}
]
[
{"op": "replace", "path": ["profile"], "value": {"name": "Noa", "age": 6}},
{"op": "add", "path": ["tags", 3], "value": "kiddo"}
]

⚠ 注意: Immer 生成的补丁集应该是正确的,也就是说,将它们应用于相同的基础对象应该会导致相同的最终状态。然而,Immer 不保证生成的补丁集是最优的,即可能的最小补丁集。它通常取决于被认为是“最佳”的用例,并且生成最佳补丁集在计算上可能非常昂贵。因此,在某些情况下,您可能想要对生成的补丁进行后处理,或者按照下面的说明压缩它们。

produceWithPatches

egghead.io 第19课: 使用回溯 patches 构建撤销功能
egghead.io 第20课: 使用 patches 构建重做功能

除了设置 patch 监听器之外,获取 patches 的更简单方法是使用 produceWithPatches,它与 produce 具有相同的签名,不过它不止返回 next state,而是一个包含 [nextState, patches, inversePatches] 的元组,和 produce 一样,produceWithPatches 也支持柯里化。

import {produceWithPatches} from "immer"

const [nextState, patches, inversePatches] = produceWithPatches(
{
age: 33
},
draft => {
draft.age++
}
)

将返回:

;[
{
age: 34
},
[
{
op: "replace",
path: ["age"],
value: 34
}
],
[
{
op: "replace",
path: ["age"],
value: 33
}
]
]

有关更深入的研究,请参阅使用 Distributing patches and rebasing actions using Immer

提示:使用此技巧可以 compress patches

+ + + + \ No newline at end of file diff --git a/zh-CN/performance/index.html b/zh-CN/performance/index.html new file mode 100644 index 00000000..15d60e62 --- /dev/null +++ b/zh-CN/performance/index.html @@ -0,0 +1,26 @@ + + + + + +Immer 性能 | Immer + + + + + + + + + + + + + + +
+

Immer 性能

egghead.io 第5课: 在 React 中利用 Immer 的结构共享
egghead.io 第7课: 如果没有语义变化,Immer 会使用原先的数据

这是一个关于 Immer 性能的 简单 benchmark 。该测试需要 50,000 个待办事项并更新其中的 5,000 个。 Freeze 表示状态树在生成后已被冻结。这是一种开发最佳实践,因为它可以防止开发人员意外修改状态树。

上面的数字没有反映一些东西,但实际上,Immer 有时比手写的 reducer 得多。这样做的原因是,Immer 会检测“无操作”状态变化,如果实际上没有任何变化,则返回原始状态,这可以避免很多重新渲染。众所周知,只需应用 immer 即可解决关键性能问题。

这些测试在 Node 10.16.3 上执行。使用 yarn test:perf 在本地重现它们。

performance.png

最重要的结论:

  • Immer with proxies 大约比手写 reducer 慢 2 到 3 倍(上面的测试用例是最坏的情况,请参阅 yarn test:perf 了解更多测试情况)。这在实践中可以忽略不计。
  • Immer 的速度大致与 ImmutableJS 一样快。但是,immutableJS + toJS 明确了后期往往需要付出的代价;将 immutableJS 对象转换回普通对象,以便将它们传递给组件或者进行序列化操作在网络中传输......(还有将从服务器接收到的数据转换为不可变 JS 的前期成本)
  • 生成 patches 不会显著减慢 immer
  • ES5 后备实现的速度大约比代理实现慢两倍,在某些情况下更糟。

性能提示

预冻结数据

当向 Immer producer 中的状态树添加大型数据集时(例如从 JSON 端点接收的数据),可以在首先添加的数据的根上调用 freeze(json) ,来浅冻结它。这将允许 Immer 更快地将新数据添加到树中,因为它将避免递归扫描和冻结新数据的需要。

您可以随时选择退出

immer 在任何地方都是可选的,因此手动编写性能非常苛刻的 reducers ,并将 immer 用于所有普通的的 reducers 是非常好的。即使在 producer 内部,您也可以通过使用 originalcurrent 函数来选择退出 Immer 的某些部分逻辑,并对纯 JavaScript 对象执行一些操作。

对于昂贵的搜索操作,从原始 state 读取,而不是 draft

Immer 会将您在 draft 中读取的任何内容也递归地转换为 draft。如果您对涉及大量读取操作的 draft 进行昂贵的无副作用操作,例如在非常大的数组中使用 find(Index) 查找索引,您可以通过首先进行搜索,并且只在知道索引后调用 produce 来加快速度。这样可以阻止 Immer 将在 draft 中搜索到的所有内容都进行转换。或者,使用 original(someDraft) 对 draft 的原始值执行搜索,这归结为同样的事情。

将 produce 拉到尽可能远的地方

始终尝试将 produce “向上”拉动,例如 for (let x of y) produce(base, d => d.push(x))produce(base, d => { for (let x of y) ) d.push(x)}) 慢得多

+ + + + \ No newline at end of file diff --git a/zh-CN/pitfalls/index.html b/zh-CN/pitfalls/index.html new file mode 100644 index 00000000..e2d303b0 --- /dev/null +++ b/zh-CN/pitfalls/index.html @@ -0,0 +1,26 @@ + + + + + +陷阱 | Immer + + + + + + + + + + + + + + +
+

陷阱

性能提示

对于性能提示,阅读 性能提示.

不要重新分配 recipe 参数

永远不要重新分配 draft 参数(例如:draft = myCoolNewState)。相反,要么修改 draft,要么返回新状态。请参阅从 producers 返回数据

Immer 只支持单向树

Immer 假设您的状态是单向树。也就是说,任何对象都不应该在树中出现两次,也不应该有循环引用。从根到树的任何节点应该只有一条路径。

永远不要从 producer 那里显式返回 undefined

可以从 producers 返回值,但不能以这种方式返回 undefined,因为它与根本不更新 draft 没有区别!如果你想用 undefined 替换 draft,只需从 producer 那里返回 nothing

不要修改特殊对象

Immer 不支持特殊对象 比如 window.location.

类应该是可 draft 的或不可变的

您将需要使自己的类能与 Immer 一起正常工作。有关该主题的文档,请查看有关使用复杂对象的部分。

只有有效的索引和长度可以在数组上改变

对于数组,只能改变数值属性和 length 属性。自定义属性不会保留在数组上。

只有来自 state 的数据会被 draft

请注意,来自闭包而不是来自基本 state 的数据将永远不会被 draft,即使数据已成为新 darft 的一部分。

function onReceiveTodo(todo) {
const nextTodos = produce(todos, draft => {
draft.todos[todo.id] = todo
// 注意,因为 todo 来自外部,而不是 draft,所以他不会被 draft,
// 所以下面的修改会影响原来的 todo!
draft.todos[todo.id].done = true

// 上面的代码相当于
todo.done = true
draft.todos[todo.id] = todo
})
}

Immer patches 不一定是最优的

Immer 生成的 patches 应该是正确的,也就是说,将它们应用于相同的基础对象应该会导致相同的最终状态。然而,Immer 不保证生成的 patches 是最优的,即可能的最小 patches

始终使用嵌套 producers 的结果

支持嵌套调用 produce ,但请注意 produce始终产生新状态,因此即使将 draft 传递给嵌套 produce,内部 produce 所做的更改也不会在传递给它的 draft 中可见,只会反映在产生的输出中。换句话说,当使用嵌套 produce 时,您会得到 draft 的 draft,并且内部 produce 的结果应该合并回原始 draft(或返回)。例如,如果内部 produce 的输出没有被使用的话, produce(state, draft => {produce(draft.user, userDraft => { userDraft.name += "!" })}) 将不会生效。使用嵌套 producers 的正确方法是:

produce(state, draft => {
draft.user = produce(draft.user, userDraft => {
userDraft.name += "!"
})
})

Drafts 在引用上不相等

Immer 中的 draft 对象包装在 Proxy 中,因此您不能使用 ===== 来测试原始对象与其 draft 之间的相等性(例如,当匹配数组中的特定元素时)。相反,您可以使用 original 助手:

const remove = produce((list, element) => {
const index = list.indexOf(element) // 不会工作!
const index = original(list).indexOf(element) // 用这个!
if (index > -1) list.splice(index, 1)
})

const values = [a, b, c]
remove(values, a)

如果可以的话,建议在 produce 函数之外执行比较,或者使用 .id 之类的唯一标识符属性,以避免需要使用 original

+ + + + \ No newline at end of file diff --git a/zh-CN/produce/index.html b/zh-CN/produce/index.html new file mode 100644 index 00000000..0978d40b --- /dev/null +++ b/zh-CN/produce/index.html @@ -0,0 +1,26 @@ + + + + + +使用 produce | Immer + + + + + + + + + + + + + + +
+

使用 produce

egghead.io 第 3 课:使用 produce 简化深度更新

Immer 包暴露了一个完成所有工作的默认函数。

produce(currentState, recipe: (draftState) => void): nextState

produce 需要一个 baseState,以及一个可用于对传入的 draft 进行所有所需更改的 recipe。关于 Immer 的有趣之处在于 baseState 将保持不变,但 nextState 将反映对 DraftState 所做的所有更改.

recipe 中,所有标准的 JavaScript API 都可以在 draft 对象上使用,包括属性字段分配、删除操作和修改数组、Map 和 Set 操作,如 push、pop、splice、set、sort、remove 等。

这些 mutations 中的任何一个都不必发生在初始对象上,但它可以修改 draft 深处的任何内容:draft.todos[0].tags["urgent"].author.age = 56

请注意,recipe 函数通常不会返回任何内容。但是,如果您想用另一个对象完全替换 draft,则可以返回,有关更多详细信息,请参阅返回新数据

例子

import {produce} from "immer"

const baseState = [
{
title: "Learn TypeScript",
done: true
},
{
title: "Try Immer",
done: false
}
]

const nextState = produce(baseState, draftState => {
draftState.push({title: "Tweet about it"})
draftState[1].done = true
})
// 新的 item 仅仅被添加到了 next state
// base state 没有被修改
expect(baseState.length).toBe(2)
expect(nextState.length).toBe(3)

// 同上
expect(baseState[1].done).toBe(false)
expect(nextState[1].done).toBe(true)

// 未修改的数据结构共享
expect(nextState[0]).toBe(baseState[0])
// 改变的数据不是
expect(nextState[1]).not.toBe(baseState[1])

术语

  • (base)state, 传递给 produce 的不可变状态
  • recipe: produce 的第二个参数,它捕获了 base state 应该如何 mutated
  • draft: 任何 recipe 的第一个参数,它是可以安全 mutate 的原始状态的代理。
  • producer. 一个使用 produce 的函数,通常形式为 (baseState, ...arguments) => resultState

请注意,命名 recipe 的第一个参数 draft 并不是绝对必要的。您可以将其命名为任何您想要的名称,例如 user。使用 draft 作为名称只是一个约定,以表明:“这里的 mutation 是可以的”。

+ + + + \ No newline at end of file diff --git a/zh-CN/resources/index.html b/zh-CN/resources/index.html new file mode 100644 index 00000000..89f58b3a --- /dev/null +++ b/zh-CN/resources/index.html @@ -0,0 +1,26 @@ + + + + + +外部资源 | Immer + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh-CN/return/index.html b/zh-CN/return/index.html new file mode 100644 index 00000000..9f04aebf --- /dev/null +++ b/zh-CN/return/index.html @@ -0,0 +1,26 @@ + + + + + +从 producers 返回新数据 | Immer + + + + + + + + + + + + + + +
+

从 producers 返回新数据

egghead.io 第9课: 返回全新 state

不需要从 producer 那里返回任何东西,因为 Immer 无论如何都会返回 draft 的(最终)版本。但是,也允许仅仅 return draft

也允许从 producer 函数中任意返回其他数据。但前提是你没有修改 draft。这对于产生一个全新的 state 很有用。一些例子:

const userReducer = produce((draft, action) => {
switch (action.type) {
case "renameUser":
//可以: 我们修改了当前的 state
draft.users[action.payload.id].name = action.payload.name
return draft // 与仅仅 'return' 相同
case "loadUsers":
// 可以: 我们返回了一个全新的 state
return action.payload
case "adduser-1":
// 不行: 这不会改变 draft ,也不会返回新的状态
// 它不会修改 draft(它只是重新声明它)
// 事实上,这根本没有做任何事情
draft = {users: [...draft.users, action.payload]}
return
case "adduser-2":
// 不行: 修改 draft 的同时返回了一个新的状态
draft.userCount += 1
return {users: [...draft.users, action.payload]}
case "adduser-3":
// 可以: 返回一个新的状态。但是,不必要的复杂和昂贵
return {
userCount: draft.userCount + 1,
users: [...draft.users, action.payload]
}
case "adduser-4":
// 可以: immer 的方式
draft.userCount += 1
draft.users.push(action.payload)
return
}
})

注意:无法以这种方式返回 undefined ,因为它与不更新 draft 没有区别!继续阅读......

使用 nothing 产生 undefined

因此,一般来说,可以通过从 producer 返回一个新值来替换当前 state,而不是修改 draft。然而,有一个微妙的边缘情况:如果您尝试编写一个想要用 undefined 替换当前状态的 producer:

produce({}, draft => {
// 什么也不干
})

或者:

produce({}, draft => {
// 尝试从 producer 中返回 undefined
return undefined
})

问题在于,在 JavaScript 中,一个不返回任何内容的函数也会返回 undefined!所以 immer 无法区分这些不同的情况。因此,默认情况下,Immer 会假设任何返回 undefined 的 producer 只是试图修改 draft。

但是,为了让 Immer 清楚您有意生成 undefined 值,您可以返回内置标记 nothing

import {produce, nothing} from "immer"

const state = {
hello: "world"
}

produce(state, draft => {})
produce(state, draft => undefined)
// 都会返回最初的状态: { hello: "world"}

produce(state, draft => nothing)
// 产生一个新的状态, 'undefined'

注:请注意,此问题特定于 undefined 值,任何其他值(包括 null)都不会受到此问题的影响

提示:为了能够在使用 TypeScript 时从 recipe 中返回 nothingstate 的类型必须接受 undefined 值。

使用 void 的内联快捷方式

egghead.io 第10课: 使用 _void_ 避免意外的返回

Immer 中的 draft 修改通常需要一段代码块,因为返回表示覆盖。有时候你可能觉得这么多的样板代码很糟心。

在这种情况下,您可以使用 javascripts void 运算符,它计算表达式并返回 undefined

// 单次修改
produce(draft => void (draft.user.age += 1))

// 多次修改
produce(draft => void ((draft.user.age += 1), (draft.user.height = 186)))

代码风格是高度个人化的,但对于要被许多人理解的代码库,我们建议坚持经典的 draft => { draft.user.age += 1} 以避免认知开销。

+ + + + \ No newline at end of file diff --git a/zh-CN/support/index.html b/zh-CN/support/index.html new file mode 100644 index 00000000..0512b310 --- /dev/null +++ b/zh-CN/support/index.html @@ -0,0 +1,26 @@ + + + + + +赞助 immer | Immer + + + + + + + + + + + + + + +
+

赞助 immer

Immer 目前在 GitHub 上有 350000 个项目依赖于它,每月的下载量接近 10000000 次。然而,只有一开始两天的开发得到了赞助(由 Mendix),之后的所有开发和维护都是用爱发电。

如果您喜欢 Immer,并且对这个包心存感激,或者想确保它的使用寿命,请考虑在 https://opencollective.com/immer 上赞助或使用 PayPal 进行一次性捐赠。

+ + + + \ No newline at end of file diff --git a/zh-CN/typescript/index.html b/zh-CN/typescript/index.html new file mode 100644 index 00000000..d8f6a894 --- /dev/null +++ b/zh-CN/typescript/index.html @@ -0,0 +1,26 @@ + + + + + +Using TypeScript or Flow | Immer + + + + + + + + + + + + + + +
+

Using TypeScript or Flow

egghead.io 第12课: Immer + TypeScript

Immer 包附带了类型定义,TypeScript 和 Flow 开箱即可获取这些定义,无需进一步配置

TypeScript 类型会自动从 draft 类型中删除 readonly 修饰符,并返回与原始类型匹配的值。看这个实际的例子:

import {produce} from "immer"

interface State {
readonly x: number
}

// `x` 不能被修改
const state: State = {
x: 0
}

const newState = produce(state, draft => {
// `x` 可以被修改
draft.x++
})

// `newState.x` 不能在这里被修改

这确保了您可以修改状态的唯一位置是在您的 produce 回调中。它甚至可以递归地和 ReadonlyArray 一起工作。

最佳实践

  1. 始终尽可能将您的 state 定义为只读。这最好地反映了心智模型和现实,因为 Immer 将冻结其所有返回值。
  2. 您可以使用实用类型 Immutable 递归地使整个类型树成为只读的,例如:type ReadonlyState = Immutable<State>
  3. 如果输入状态的原始类型不是不可变的,则 Immer 不会自动将所有返回的类型包装在 Immutable 中。这是为了确保它不会破坏不使用不可变类型的代码库。

柯里化 producers 的提示

我们尝试尽可能多地推断。因此,如果创建了一个柯里化 producer 并直接传递给另一个函数,我们可以从那里推断出类型。这适用于例如 React:

import {Immutable, produce} from "immer"

type Todo = Immutable<{
title: string
done: boolean
}>

// 然后...

const [todo, setTodo] = useState<Todo>({
title: "test",
done: true
})

// 然后...

setTodo(
produce(draft => {
// draft 将是强类型和可变的!
draft.done = !draft.done
})
)

当柯里化 producers 没有直接传递到其他地方时,Immer 可以从 draft 参数推断状态类型。例如在执行以下操作时:

// 请参阅下文以获得更好的解决方案

const toggler = produce((draft: Draft<Todo>) => {
draft.done = !draft.done
})

// typeof toggler = (state: Immutable<Todo>) => Writable<Todo>

请注意,我们确实用 Draft 包装了 draft 参数的 Todo 类型,因为 Todo 是只读类型。对于非只读类型,这不是必需的

对于返回的柯里化函数 toggler,我们将输入类型缩小为 Immutable<Todo>,这样即使 Todo 是可变类型,我们仍将接受不可变的 todo 作为切换器的输入参数。

与之相反,Immer 会将柯里化函数的输出类型扩展Writable<Todo>,以确保它的输出状态也可分配给未明确键入为不可变的变量。

这种类型的缩小/扩大行为可能不受欢迎,甚至可能因为它会导致类型非常多的噪音。因此,我们建议为柯里化 produces 指定 state 泛型 ,以防它无法直接推断,例如上面的 toggler。通过这样做,将跳过自动输出扩大/输入缩小。然而,draft 参数本身仍将被推断为可写 Draft<Todo>

const toggler = produce<Todo>(draft => {
draft.done = !draft.done
})

// typeof toggler = (state: Todo) => Todo

但是,如果柯里化 producer 定义了初始状态,Immer 可以从初始状态推断状态类型,因此在这种情况下也不需要指定泛型:

const state0: Todo = {
title: "test",
done: false
}

// 不需要类型注释,因为我们可以从 state0 推断。
const toggler = produce(draft => {
draft.done = !draft.done
}, state0)

// typeof toggler = (state: Todo) => Todo

如果 toggler 没有初始状态,并且它有柯里化参数,并且您显式设置 state 泛型,则任何附加参数的类型也应显式定义为元组类型:

const toggler = produce<Todo, [boolean]>((draft, newState) => {
draft.done = newState
})

// typeof toggler = (state: Todo, newState: boolean) => Todo

类型转换

produce 内部和外部的类型在概念上可以相同,但从实际角度来看是不同的。例如,上面示例中的 State 应被视为在 produce 外部不可变,但在 produce 内部是可变的。

有时这会导致实际冲突。举个例子:

type Todo = {readonly done: boolean}

type State = {
readonly finishedTodos: readonly Todo[]
readonly unfinishedTodos: readonly Todo[]
}

function markAllFinished(state: State) {
produce(state, draft => {
draft.finishedTodos = state.unfinishedTodos
})
}

这将产生错误:

The type 'readonly Todo[]' is 'readonly' and cannot be assigned to the mutable type '{ done: boolean; }[]'

这个错误的原因是我们将只读的、不可变的数组分配给我们的 draft,draft 需要一个可变的类型,并带有 .push 等方法。就 TS 而言,这些并没有从我们的原始 State 中暴露出来。为了提示 TypeScript 我们希望将此处的集合向上转换为可变数组以用于 draft,我们可以使用函数 castDraft

draft.finishedTodos = castDraft(state.unfinishedTodos) 将使错误消失。

还有函数 castImmutable,以防您需要实现相反的效果。请注意,这些函数出于所有实际目的都是无操作的,它们只会返回其原始值。

提示:您可以将 castImmutableproduce 结合起来,将 produce 的返回类型定义为不可变的内容,即使原始 state 是可变的

// 一个可变数据结构
const baseState = {
todos: [{
done: false
}]
}

const nextState = castImmutable(produce(baseState, _draft => {}))

// nextState 的推断类型现在是:
{
readonly todos: ReadonlyArray<{
readonly done: boolean
}>
})

兼容性

注意: Immer v5.3+ 仅支持 TypeScript v3.7+

注意: Immer v3.0+ 仅支持 TypeScript v3.4+

注意: Immer v1.9+ 仅支持 TypeScript v3.1+

注意: 在未来的版本中可能会删除 flow 支持,我们建议使用 TypeScript

+ + + + \ No newline at end of file diff --git a/zh-CN/update-patterns/index.html b/zh-CN/update-patterns/index.html new file mode 100644 index 00000000..43c24072 --- /dev/null +++ b/zh-CN/update-patterns/index.html @@ -0,0 +1,26 @@ + + + + + +更新模式 | Immer + + + + + + + + + + + + + + +
+

更新模式

在 Immer 之前,使用不可变数据意味着学习所有不可变的更新模式。

为了帮助“忘记”这些模式,这里概述了如何利用内置 JavaScript API 来更新对象和集合

更新对象

import {produce} from "immer"

const todosObj = {
id1: {done: false, body: "Take out the trash"},
id2: {done: false, body: "Check Email"}
}

// 添加
const addedTodosObj = produce(todosObj, draft => {
draft["id3"] = {done: false, body: "Buy bananas"}
})

// 删除
const deletedTodosObj = produce(todosObj, draft => {
delete draft["id1"]
})

// 更新
const updatedTodosObj = produce(todosObj, draft => {
draft["id1"].done = true
})

更新数组

import {produce} from "immer"

const todosArray = [
{id: "id1", done: false, body: "Take out the trash"},
{id: "id2", done: false, body: "Check Email"}
]

// 添加
const addedTodosArray = produce(todosArray, draft => {
draft.push({id: "id3", done: false, body: "Buy bananas"})
})

// 索引删除
const deletedTodosArray = produce(todosArray, draft => {
draft.splice(3 /*索引 */, 1)
})

// 索引更新
const updatedTodosArray = produce(todosArray, draft => {
draft[3].done = true
})

// 索引插入
const updatedTodosArray = produce(todosArray, draft => {
draft.splice(3, 0, {id: "id3", done: false, body: "Buy bananas"})
})

// 删除最后一个元素
const updatedTodosArray = produce(todosArray, draft => {
draft.pop()
})

// 删除第一个元素
const updatedTodosArray = produce(todosArray, draft => {
draft.shift()
})

// 数组开头添加元素
const addedTodosArray = produce(todosArray, draft => {
draft.unshift({id: "id3", done: false, body: "Buy bananas"})
})

// 根据 id 删除
const deletedTodosArray = produce(todosArray, draft => {
const index = draft.findIndex(todo => todo.id === "id1")
if (index !== -1) draft.splice(index, 1)
})

// 根据 id 更新
const updatedTodosArray = produce(todosArray, draft => {
const index = draft.findIndex(todo => todo.id === "id1")
if (index !== -1) draft[index].done = true
})

// 过滤
const updatedTodosArray = produce(todosArray, draft => {
// 过滤器实际上会返回一个不可变的状态,但是如果过滤器不是处于对象的顶层,这个依然很有用
return draft.filter(todo => todo.done)
})

嵌套数据结构

import {produce} from "immer"

// 复杂数据结构例子
const store = {
users: new Map([
[
"17",
{
name: "Michel",
todos: [
{
title: "Get coffee",
done: false
}
]
}
]
])
}

// 深度更新
const nextStore = produce(store, draft => {
draft.users.get("17").todos[0].done = true
})

// 过滤
const nextStore = produce(store, draft => {
const user = draft.users.get("17")

user.todos = user.todos.filter(todo => todo.done)
})

请注意,许多数组操作可用于通过传递多个参数或使用展开操作来一次插入多个元素:todos.unshift(...items)

请注意,当处理包含通常由某个 id 标识的对象的数组时,我们建议使用基于 Map 或索引的对象(如上所示)而不是执行频繁的查找操作,查找表通常执行效率更高。

+ + + + \ No newline at end of file

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 MR@XnDuV#7kKPNk#5C8xG literal 0 HcmV?d00001 diff --git a/zh-CN/index.html b/zh-CN/index.html new file mode 100644 index 00000000..39260565 --- /dev/null +++ b/zh-CN/index.html @@ -0,0 +1,26 @@ + + + + + +Immer 入门 | Immer + + + + + + + + + + + + + + +

+

createDraft / finishDraft

egghead.io 第11课: 创建异步 producers(以及为什么不应该这样做)

createDraft and finishDraft

createDraftfinishDraft 是两个底层函数,它们对于在 immer 之上构建抽象的库非常有用。它避免了为了使用 draft 始终创建函数。相反,人们可以创建一个 draft,对其进行修改,并在未来的某个时间完成该 draft,在这种情况下,将产生下一个不可变状态。例如,我们可以将上面的示例重写为:

Beyond that, createDraft / finishDraft could be used to express async updates to drafts:

import {createDraft, finishDraft} from "immer"

const user = {
name: "michel",
todos: []
}

const draft = createDraft(user)
draft.todos = await (await window.fetch("http://host/" + draft.name)).json()
const loadedUser = finishDraft(draft)

注意:finishDraft 以一个 patchListener 作为第二个参数,可以用来记录 patches,类似于 produce

警告:一般情况下,我们建议使用 producer 而不是 createDraft / finishDraft 组合,produce 在使用中不易出错,并且在代码中更清楚地区分了可变性和不变性的概念。

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 MR@XnDuV#7kKPNk#5C8xG literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..a1e4b339 --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + + +Introduction to Immer | Immer + + + + + + + + + + + + + + +

+

createDraft / finishDraft

egghead.io lesson 11: Creating async producers (and why you shouldn’t)

createDraft and finishDraft

createDraft and finishDraft are two low-level functions that are mostly useful for libraries that build abstractions on top of immer. It avoids the need to always create a function in order to work with drafts. Instead, one can create a draft, modify it, and at some time in the future finish the draft, in which case the next immutable state will be produced.

Beyond that, createDraft / finishDraft could be used to express async updates to drafts:

import {createDraft, finishDraft} from "immer"

const user = {
name: "michel",
todos: []
}

const draft = createDraft(user)
draft.todos = await (await window.fetch("http://host/" + draft.name)).json()
const loadedUser = finishDraft(draft)

Note: The above is an anti-pattern! First fetch data instead, then draft the user. Otherwise updates to user that happen during the async process, would be "missed" by the draft.

Note: finishDraft takes a patchListener as second argument, which can be used to record the patches, similarly to produce.

Warning: in general, we recommend to use produce instead of the createDraft / finishDraft combo, produce is less error prone in usage, and more clearly separates the concepts of mutability and immutability in your code base.