diff --git a/.babelrc b/.babelrc
index 1320b9a32..9d8eb6f14 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,3 +1,9 @@
{
- "presets": ["@babel/preset-env"]
+ "presets": [
+ ["@babel/preset-env", {
+ "exclude": [
+ "transform-regenerator"
+ ]
+ }]
+ ]
}
diff --git a/.circleci/config.yml b/.circleci/config.yml
index cb7d199ff..c12856e77 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -27,23 +27,23 @@ jobs:
paths:
- vuex
- lint-types:
- <<: *defaults
- steps:
- - attach_workspace:
- at: ~/
- - run:
- name: Linting
- command: |
- yarn lint --format junit --output-file test-results/eslint/results.xml
- - run:
- name: Testing Types
- command: |
- yarn test:types
- - store_test_results:
- path: test-results
- - store_artifacts:
- path: test-results
+ # lint-types:
+ # <<: *defaults
+ # steps:
+ # - attach_workspace:
+ # at: ~/
+ # - run:
+ # name: Linting
+ # command: |
+ # yarn lint --format junit --output-file test-results/eslint/results.xml
+ # - run:
+ # name: Testing Types
+ # command: |
+ # yarn test:types
+ # - store_test_results:
+ # path: test-results
+ # - store_artifacts:
+ # path: test-results
test-unit:
<<: *defaults
@@ -80,9 +80,9 @@ workflows:
install-and-parallel-test:
jobs:
- install
- - lint-types:
- requires:
- - install
+ # - lint-types:
+ # requires:
+ # - install
- test-unit:
requires:
- install
diff --git a/.eslintrc.json b/.eslintrc.json
index af0ad7581..fd2d71204 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -4,6 +4,7 @@
"plugin:vue-libs/recommended"
],
"globals": {
- "__DEV__": true
+ "__DEV__": true,
+ "__VUE_PROD_DEVTOOLS__": true
}
}
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..7b215c0fc
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+github: [yyx990803, kiaking, ktsn]
+open_collective: vuejs
+patreon: evanyou
diff --git a/.gitignore b/.gitignore
index c5f382239..6a5927e1e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,8 @@
+/dist
/coverage
-/docs/.vuepress/dist
-/examples/**/build.js
+/docs/.vitepress/dist
/test/e2e/reports
/test/e2e/screenshots
-/types/typings
-/types/test/*.js
*.log
.DS_Store
node_modules
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ec01b52aa..3d910f509 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,168 @@
-## [3.5.1](https://github.com/vuejs/vuex/compare/v3.5.0...v3.5.1) (2020-06-29)
+# [4.1.0](https://github.com/vuejs/vuex/compare/v4.0.2...v4.1.0) (2022-10-14)
+
+### Vue Core Version Requirement Change
+
+**This release contains an important fix (#1883) that relies on the `effectScope` API from Vue core, which is only available in Vue 3.2+.**
+
+### Bug Fixes
+
+* **build:** node deprecated warning in export module ([#2048](https://github.com/vuejs/vuex/issues/2048)) ([397e9fb](https://github.com/vuejs/vuex/commit/397e9fba45c8b4ec0c4a33d2578e34829bd348d7))
+* getters being destroyed on component destroy ([#1878](https://github.com/vuejs/vuex/issues/1878)) ([#1883](https://github.com/vuejs/vuex/issues/1883)) ([b2f851f](https://github.com/vuejs/vuex/commit/b2f851f427aa872d1e4f5a4774e07c4c69562789))
+
+
+
+## [4.0.2](https://github.com/vuejs/vuex/compare/v4.0.1...v4.0.2) (2021-06-17)
+
+### Bug Fixes
+
+* **devtools:** fix no getters displayed on root module + better getters inspector ([#1986](https://github.com/vuejs/vuex/issues/1986)) ([bc20295](https://github.com/vuejs/vuex/commit/bc20295331eb2bee40d6ae779d1ada31c542604c))
+* **build:** cjs build failing due to `__VUE_PROD_DEVTOOLS__` defined ([#1991](https://github.com/vuejs/vuex/issues/1991)) ([#1992](https://github.com/vuejs/vuex/issues/1992)) ([7151622](https://github.com/vuejs/vuex/commit/7151622d646968686546f1c4c80f7575c9b99176))
+
+## [4.0.1](https://github.com/vuejs/vuex/compare/v4.0.0...v4.0.1) (2021-05-24)
+
+### Features
+
+* dx: add devtools integration ([#1949](https://github.com/vuejs/vuex/pull/1949))
+
+# [4.0.0](https://github.com/vuejs/vuex/compare/v4.0.0-rc.2...v4.0.0) (2021-02-02)
+
+This is the official Vuex 4 release.
+
+The focus for Vuex 4 is compatibility. Vuex 4 supports Vue 3, and it provides the exact same API as Vuex 3, so users can reuse their existing Vuex code with Vue 3.
+
+There are a few breaking changes described in a later section, so please check them out.
+
+You can find basic usage with both Option and Composition API in the `example` directory.
+
+It's still released under `next` tag in NPM package as same as Vue 3. We're planning to remove `next` tag once Vue 3 is ready to remove it.
+
+There have been a lot of contribution to make Vuex 4 stable. Thank you all for your very much appreciated help. It wouldn't have been possible without this wonderful Vue community!
+
+## Documentation
+
+To check out docs, visit [next.vuex.vuejs.org](https://next.vuex.vuejs.org/).
+
+## Breaking changes
+
+### Installation process has changed
+
+To align with the new Vue 3 initialization process, the installation process of Vuex has changed.
+
+To create a new store instance, users are now encouraged to use the newly introduced `createStore` function.
+
+```js
+import { createStore } from 'vuex'
+
+export const store = createStore({
+ state() {
+ return {
+ count: 1
+ }
+ }
+})
+```
+
+> Whilst this is not technically a breaking change, you may still use the `new Store(...)` syntax, we recommend this approach to align with Vue 3 and Vue Router Next.
+
+To install Vuex to a Vue instance, pass the store instance instead of Vuex.
+
+```js
+import { createApp } from 'vue'
+import { store } from './store'
+import App from './App.vue'
+
+const app = createApp(App)
+
+app.use(store)
+
+app.mount('#app')
+```
+
+### Bundles are now aligned with Vue 3
+
+The following bundles are generated to align with Vue 3 bundles:
+
+- `vuex.global(.prod).js`
+ - For direct use with `
-
-```
-
-### npm
-
-``` bash
-npm install vuex --save
-```
-
-### Yarn
-
-``` bash
-yarn add vuex
-```
-
-Lorsqu'il est utilisé avec un système de module, vous devez explicitement installer Vuex via `Vue.use()`:
-
-``` js
-import Vue from 'vue'
-import Vuex from 'vuex'
-
-Vue.use(Vuex)
-```
-
-Vous n'avez pas besoin de faire cela lors de l'utilisation des balises de script globales (`
-
-```
-
-### NPM
-
-``` bash
-npm install vuex --save
-```
-
-### Yarn
-
-``` bash
-yarn add vuex
-```
-
-モジュールシステムで利用される場合、 `Vue.use()` によって Vuex を明示的に導入する必要があります:
-
-``` js
-import Vue from 'vue'
-import Vuex from 'vuex'
-
-Vue.use(Vuex)
-```
-
-グローバルなスクリプトタグを利用する場合にはこのようにする必要はありません。
-
-### 開発版ビルド
-
-最新の開発版ビルドを利用したい場合には、 Github から直接クローンし `vuex` を自身でビルドする必要があります。
-
-``` bash
-git clone https://github.com/vuejs/vuex.git node_modules/vuex
-cd node_modules/vuex
-npm install
-npm run build
-```
diff --git a/docs-gitbook/ja/intro.md b/docs-gitbook/ja/intro.md
deleted file mode 100644
index 8a7df9003..000000000
--- a/docs-gitbook/ja/intro.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# Vuex とは何か?
-
-Vuex は Vue.js アプリケーションのための **状態管理パターン + ライブラリ**です。
-これは予測可能な方法によってのみ状態の変異を行うというルールを保証し、アプリケーション内の全てのコンポーネントのための集中型のストアとして機能します。
-また Vue 公式の[開発ツール拡張](https://github.com/vuejs/vue-devtools)と連携し、設定なしでタイムトラベルデバッグやステートのスナップショットのエクスポートやインポートのような高度な機能を提供します。
-
-### "状態管理パターン"とはなんですか?
-
-単純な Vue で作られたカウンターアプリをみてみましょう:
-
-``` js
-new Vue({
- // state
- data () {
- return {
- count: 0
- }
- },
- // view
- template: `
-
{{ count }}
- `,
- // actions
- methods: {
- increment () {
- this.count++
- }
- }
-})
-```
-
-これはいくつかの要素をアプリ自身に含んでいます:
-
-- **状態**、これは私達のアプリを動かす信頼できる情報源(the source of truth)です。
-- **ビュー**、これは**状態**のただの宣言的なマッピングです。
-- **アクション**、これは**ビュー**からのユーザー入力に反応して、状態の変更を可能にする方法です。
-
-これらは"単方向データフロー"のコンセプトの極めてシンプルな責務です:
-
-
-
-
-
-しかし、単純さは、**共通の状態を共有する複数のコンポーネントを持ったときに**、すぐに破綻します:
-
-- 複数のビューが同じ状態に依存することがあります。
-- 異なるビューからのアクションで、同じ状態を変更する必要があります。
-
-一つ目は、プロパティ (props) として深く入れ子になったコンポーネントに渡すのは面倒で、兄弟コンポーネントでは単純に機能しません。二つ目は、親子のインスタンスを直接参照したり、イベントを介して複数の状態のコピーを変更、同期することを試みるソリューションに頼っていることがよくあります。これらのパターンは、いずれも脆く、すぐにメンテナンスが困難なコードに繋がります。
-
-では、コンポーネントから共有している状態を抽出し、それをグローバルシングルトンで管理するのはどうでしょうか? これにより、コンポーネントツリーは大きな "ビュー" となり、どのコンポーネントもツリー内のどこにあっても状態にアクセスしたり、アクションをトリガーできます!
-
-さらに、状態管理に関わる概念を定義、分離し、特定のルールを敷くことで、コードの構造と保守性を向上させることができます。
-
-これが Vuex の背景にある基本的なアイディアであり、[Flux](https://facebook.github.io/flux/docs/overview)、 [Redux](http://redux.js.org/) そして [The Elm Architecture](https://guide.elm-lang.org/architecture/)から影響を受けています。
-他のパターンと異なるのは、Vuex は効率的な更新のために、Vue.js の粒度の細かいリアクティビティシステムを利用するよう特別に調整して実装されたライブラリだということです。
-
-
-
-### いつ、Vuexを使うべきでしょうか?
-
-Vuex は、共有状態の管理に役立ちますが、さらに概念やボイラープレートのコストがかかります。これは、短期的生産性と長期的生産性のトレードオフです。
-
-もし、あなたが大規模な SPA を構築することなく、Vuex を導入した場合、冗長で恐ろしいと感じるかもしれません。そう感じることは全く普通です。あなたのアプリがシンプルであれば、Vuex なしで問題ないでしょう。単純な [グローバルイベントバス](http://jp.vuejs.org/v2/guide/components.html#%E8%A6%AA%E5%AD%90%E9%96%93%E4%BB%A5%E5%A4%96%E3%81%AE%E9%80%9A%E4%BF%A1) が必要なだけかもしれません。しかし、中規模から大規模の SPA を構築する場合は、Vue コンポーネントの外の状態をどうやってうまく扱うか考える絶好の機会です。Vuex は自然な次のステップとなるでしょう。これは Redux の作者、Dan Abramov からの良い引用です:
-
-> Flux ライブラリは眼鏡のようなものです: それらが必要になったときに知るのです。
diff --git a/docs-gitbook/ja/modules.md b/docs-gitbook/ja/modules.md
deleted file mode 100644
index 4e9b8d9c4..000000000
--- a/docs-gitbook/ja/modules.md
+++ /dev/null
@@ -1,294 +0,0 @@
-# モジュール
-
-単一ステートツリーを使うため、アプリケーションの全ての状態は、一つの大きなストアオブジェクトに内包されます。しかしながら、アプリケーションが大きくなるにつれて、ストアオブジェクトは膨れ上がってきます。
-
-そのような場合に役立てるため Vuex ではストアを**モジュール**に分割できるようになっています。それぞれのモジュールは、モジュール自身の状態(state)、ミューテーション、アクション、ゲッター、モジュールさえも内包できます(モジュールをネストできます)- トップからボトムまでフラクタル構造です:
-
-``` js
-const moduleA = {
- state: { ... },
- mutations: { ... },
- actions: { ... },
- getters: { ... }
-}
-
-const moduleB = {
- state: { ... },
- mutations: { ... },
- actions: { ... }
-}
-
-const store = new Vuex.Store({
- modules: {
- a: moduleA,
- b: moduleB
- }
-})
-
-store.state.a // -> `moduleA` のステート
-store.state.b // -> `moduleB` のステート
-```
-
-### モジュールのローカルステート
-
-モジュールのミューテーションやゲッターの中では、渡される第1引数は**モジュールのローカルステート**です。
-
-``` js
-const moduleA = {
- state: { count: 0 },
- mutations: {
- increment (state) {
- // `state` はモジュールのローカルステート
- state.count++
- }
- },
-
- getters: {
- doubleCount (state) {
- return state.count * 2
- }
- }
-}
-```
-
-同様に、モジュールのアクションの中では `context.state` はローカルステートにアクセスでき、ルートのステートは `context.rootState` でアクセスできます:
-
-``` js
-const moduleA = {
- // ...
- actions: {
- incrementIfOddOnRootSum ({ state, commit, rootState }) {
- if ((state.count + rootState.count) % 2 === 1) {
- commit('increment')
- }
- }
- }
-}
-```
-
-また、モジュールのゲッターの中では、ルートのステートは第3引数でアクセスできます:
-
-``` js
-const moduleA = {
- // ...
- getters: {
- sumWithRootCount (state, getters, rootState) {
- return state.count + rootState.count
- }
- }
-}
-```
-
-### 名前空間
-
-デフォルトでは、アクション、ミューテーション、そしてゲッター内部のモジュールは**グローバル名前空間**の元で登録されます - これにより、複数のモジュールが同じミューテーション/アクションタイプに反応することができます。
-
-モジュールをより自己完結型にまた再利用可能なものにしたい場合は、それを `namespaced: true` によって名前空間に分けることができます。モジュールが登録されると、そのゲッター、アクション、およびミューテーションのすべてが、モジュールが登録されているパスに基づいて自動的に名前空間に入れられます。例えば:
-
-``` js
-const store = new Vuex.Store({
- modules: {
- account: {
- namespaced: true,
-
- // モジュールのアセット
- state: { ... }, // モジュールステートはすでにネストされており、名前空間のオプションによって影響を受けません
- getters: {
- isAdmin () { ... } // -> getters['account/isAdmin']
- },
- actions: {
- login () { ... } // -> dispatch('account/login')
- },
- mutations: {
- login () { ... } // -> commit('account/login')
- },
-
- // ネストされたモジュール
- modules: {
- // 親モジュールから名前空間を継承する
- myPage: {
- state: { ... },
- getters: {
- profile () { ... } // -> getters['account/profile']
- }
- },
-
- // さらに名前空間をネストする
- posts: {
- namespaced: true,
-
- state: { ... },
- getters: {
- popular () { ... } // -> getters['account/posts/popular']
- }
- }
- }
- }
- }
-})
-```
-
-名前空間のゲッターとアクションは、ローカライズされた `getters`、`dispatch`、`commit` を受け取ります。言い換えれば、同じモジュールに接頭辞 (prefix) を書き込まずに、モジュールアセットを使用することができます。名前空間オプションの切り替えは、モジュール内のコードには影響しません。
-
-#### 名前空間付きモジュールでのグローバルアセットへのアクセス
-
-グローバルステートとゲッターを使いたい場合、`rootState` と `rootGetters` はゲッター関数の第3引数と第4引数として渡され、アクション関数に渡される `context` オブジェクトのプロパティとしても公開されます。
-
-アクションをディスパッチするか、グローバル名前空間にミューテーションをコミットするには、`dispatch` と `commit` の3番目の引数として `{root: true}` を渡します。
-
-``` js
-modules: {
- foo: {
- namespaced: true,
-
- getters: {
- // `getters` はこのモジュールのゲッターにローカライズされています
- // ゲッターの第4引数経由で rootGetters を使うことができます
- someGetter (state, getters, rootState, rootGetters) {
- getters.someOtherGetter // -> 'foo/someOtherGetter'
- rootGetters.someOtherGetter // -> 'someOtherGetter'
- },
- someOtherGetter: state => { ... }
- },
-
- actions: {
- // ディスパッチとコミットもこのモジュール用にローカライズされています
- // ルートディスパッチ/コミットの `root` オプションを受け入れます
- someAction ({ dispatch, commit, getters, rootGetters }) {
- getters.someGetter // -> 'foo/someGetter'
- rootGetters.someGetter // -> 'someGetter'
-
- dispatch('someOtherAction') // -> 'foo/someOtherAction'
- dispatch('someOtherAction', null, { root: true }) // -> 'someOtherAction'
-
- commit('someMutation') // -> 'foo/someMutation'
- commit('someMutation', null, { root: true }) // -> 'someMutation'
- },
- someOtherAction (ctx, payload) { ... }
- }
- }
-}
-```
-
-#### 名前空間によるバインディングヘルパー
-
-`mapState`、`mapGetters`、`mapActions`、そして `mapMutations` ヘルパーを使って名前空間付きモジュールをコンポーネントにバインディングするとき、少し冗長になります:
-
-``` js
-computed: {
- ...mapState({
- a: state => state.some.nested.module.a,
- b: state => state.some.nested.module.b
- })
-},
-methods: {
- ...mapActions([
- 'some/nested/module/foo',
- 'some/nested/module/bar'
- ])
-}
-```
-
-このような場合は、第1引数としてモジュールの名前空間文字列をヘルパーに渡すことで、そのモジュールをコンテキストとして使用してすべてのバインディングを行うことができます。上記は次のように単純化できます。
-
-``` js
-computed: {
- ...mapState('some/nested/module', {
- a: state => state.a,
- b: state => state.b
- })
-},
-methods: {
- ...mapActions('some/nested/module', [
- 'foo',
- 'bar'
- ])
-}
-```
-
-さらに、`createNamespacedHelpers` を使用することによって名前空間付けされたヘルパーを作成できます。指定された名前空間の値にバインドされた新しいコンポーネントバインディングヘルパーを持つオブジェクトを返します:
-
-``` js
-import { createNamespacedHelpers } from 'vuex'
-
-const { mapState, mapActions } = createNamespacedHelpers('some/nested/module')
-
-export default {
- computed: {
- // `some/nested/module` を調べます
- ...mapState({
- a: state => state.a,
- b: state => state.b
- })
- },
- methods: {
- // `some/nested/module` を調べます
- ...mapActions([
- 'foo',
- 'bar'
- ])
- }
-}
-```
-
-#### プラグイン開発者向けの注意事項
-
-モジュールを提供する[プラグイン](plugins.md)を作成し、ユーザーがそれらを Vuex ストアに追加できるようにすると、モジュールの予測できない名前空間が気になるかもしれません。あなたのモジュールは、プラグインユーザーが名前空間付きモジュールの元にモジュールを追加すると、その名前空間に属するようになります。この状況に適応するには、プラグインオプションを使用して名前空間の値を受け取る必要があります。
-
-``` js
-// プラグインオプションで名前空間値を取得し、
-// そして、Vuex プラグイン関数を返す
-export function createPlugin (options = {}) {
- return function (store) {
- /// 名前空間をプラグインモジュールの型に追加する
- const namespace = options.namespace || ''
- store.dispatch(namespace + 'pluginAction')
- }
-}
-```
-
-### 動的にモジュールを登録する
-
-ストアが作られた**後**に `store.registerModule` メソッドを使って、モジュールを登録できます:
-
-``` js
-// `myModule` モジュールを登録します
-store.registerModule('myModule', {
- // ...
-})
-
-// ネストされた `nested/myModule` モジュールを登録します
-store.registerModule(['nested', 'myModule'], {
- // ...
-})
-```
-
-モジュールのステートには `store.state.myModule` と `store.state.nested.myModule` でアクセスします。
-
-動的なモジュール登録があることで、他の Vue プラグインが、モジュールをアプリケーションのストアに付属させることで、状態の管理に Vuex を活用できます。例えば [`vuex-router-sync`](https://github.com/vuejs/vuex-router-sync) ライブラリは、動的に付属させたモジュール内部でアプリケーションのルーティングのステートを管理することで vue-router と vuex を統合しています。
-
-`store.unregisterModule(moduleName)` を呼び出せば、動的に登録したモジュールを削除できます。ただしストア作成(store creation)の際に宣言された、静的なモジュールはこのメソッドで削除できないことに注意してください。
-
-サーバサイドレンダリングされたアプリケーションから状態を保持するなど、新しいモジュールを登録するときに、以前の状態を保持したい場合があります。`preserveState` オプション(`store.registerModule('a', module, { preserveState: true })`)でこれを実現できます。
-
-### モジュールの再利用
-
-時どき、モジュールの複数インスタンスを作成する必要があるかもしれません。例えば:
-
-- 同じモジュールを使用する複数のストアを作成する;
-- 同じストアに同じモジュールを複数回登録する
-
-モジュールの状態を宣言するために単純なオブジェクトを使用すると、その状態オブジェクトは参照によって共有され、変更時にクロスストア/モジュールの状態汚染を引き起こします。(例: `runInNewContext` オプションが `false` または `'once'` のとき、[SSR ではステートフルなシングルトンは避けます](https://ssr.vuejs.org/ja/structure.html#ステートフルなシングルトンの回避)。)
-
-これは、実際には Vue コンポーネント内部の `data` と全く同じ問題です。従って解決策も同じです。モジュールの状態を宣言するために関数を使用してください (2.3.0 以降でサポートされます):
-
-``` js
-const MyReusableModule = {
- state () {
- return {
- foo: 'bar'
- }
- },
- // ミューテーション、アクション、ゲッター...
-}
-```
diff --git a/docs-gitbook/ja/mutations.md b/docs-gitbook/ja/mutations.md
deleted file mode 100644
index 77d6c864d..000000000
--- a/docs-gitbook/ja/mutations.md
+++ /dev/null
@@ -1,172 +0,0 @@
-# ミューテーション
-
-実際に Vuex のストアの状態を変更できる唯一の方法は、ミューテーションをコミットすることです。Vuex のミューテーションはイベントにとても近い概念です: 各ミューテーションは**タイプ**と**ハンドラ**を持ちます。ハンドラ関数は Vuex の状態(state)を第1引数として取得し、実際に状態の変更を行います:
-
-``` js
-const store = new Vuex.Store({
- state: {
- count: 1
- },
- mutations: {
- increment (state) {
- // 状態を変更する
- state.count++
- }
- }
-})
-```
-
-直接ミューテーションハンドラを呼び出すことはできません。この mutations オプションは、どちらかいうと "タイプが `increment` のミューテーションがトリガーされたときに、このハンドラが呼ばれる" といったイベント登録のようなものです。ミューテーションハンドラを起動するためにはミューテーションのタイプを指定して `store.commit` を呼び出す必要があります:
-
-``` js
-store.commit('increment')
-```
-
-### 追加の引数を渡してコミットする
-
-`store.commit` に追加の引数を渡すこともできます。この追加の引数は、特定のミューテーションに対する**ペイロード**と呼びます:
-
-``` js
-// ...
-mutations: {
- increment (state, n) {
- state.count += n
- }
-}
-```
-
-``` js
-store.commit('increment', 10)
-```
-
-ほとんどの場合、ペイロードはオブジェクトにすべきです。そうすることで複数のフィールドを含められるようになり、またミューテーションがより記述的に記録されるようになります:
-
-``` js
-// ...
-mutations: {
- increment (state, payload) {
- state.count += payload.amount
- }
-}
-```
-
-``` js
-store.commit('increment', {
- amount: 10
-})
-```
-
-### オブジェクトスタイルのコミット
-
-また `type` プロパティを持つオブジェクトを使って、ミューテーションをコミットすることもできます:
-
-``` js
-store.commit({
- type: 'increment',
- amount: 10
-})
-```
-
-オブジェクトスタイルでコミットするとき、オブジェクト全体がペイロードとしてミューテーションハンドラに渡されます。したがってハンドラの例は上記と同じです:
-
-``` js
-mutations: {
- increment (state, payload) {
- state.count += payload.amount
- }
-}
-```
-
-
-### Vue のリアクティブなルールに則ったミューテーション
-
-Vuex ストアの状態は Vue によってリアクティブになっているので、状態を変更すると、状態を監視している Vue コンポーネントは自動的に更新されます。これは Vuex のミューテーションは、通常の Vue と動作させているときと同じく、リアクティブな値に関する注意が必要であることを意味します:
-
-1. あらかじめ全ての必要なフィールドによって、ストアの初期状態を初期化することが望ましいです
-
-2. 新しいプロパティをオブジェクトに追加するとき、以下のいずれかが必要です:
-
- - `Vue.set(obj, 'newProp', 123)` を使用する。あるいは
-
- - 全く新しいオブジェクトで既存のオブジェクトを置き換える。例えば、stage-3 の[スプレッドシンタックス(object spread syntax)](https://github.com/sebmarkbage/ecmascript-rest-spread) を使用して、次のように書くことができます:
-
- ``` js
- state.obj = { ...state.obj, newProp: 123 }
- ```
-
-### ミューテーション・タイプに定数を使用する
-
-いろいろな Flux 実装において、ミューテーション・タイプに定数を使用することが共通して見られるパターンです。これはコードに対してリントツールのようなツールを利用できるという利点があり、また単一ファイルに全ての定数を設定することによって、共同で作業する人に、アプリケーション全体で何のミューテーションが可能であるかを一目見ただけで理解できるようにします:
-
-``` js
-// mutation-types.js
-export const SOME_MUTATION = 'SOME_MUTATION'
-```
-
-``` js
-// store.js
-import Vuex from 'vuex'
-import { SOME_MUTATION } from './mutation-types'
-
-const store = new Vuex.Store({
- state: { ... },
- mutations: {
- // 定数を関数名として使用できる ES2015 の算出プロパティ名(computed property name)機能を使用できます
- [SOME_MUTATION] (state) {
- // 状態を変更する
- }
- }
-})
-```
-
-定数を使用するかどうかは好みの問題です。多くの開発者による大規模なプロジェクトで役に立ちますが、完全にオプションなので、もしお気に召さなければ使用しなくても構いません。
-
-### ミューテーションは同期的でなければならない
-
-ひとつの重要なルールを覚えておきましょう。それは**ミューテーションハンドラ関数は同期的でなければならない**ということです。なぜか?次の例で考えてみましょう:
-
-``` js
-mutations: {
- someMutation (state) {
- api.callAsyncMethod(() => {
- state.count++
- })
- }
-}
-```
-
-いま、開発ツールのミューテーションのログを見ながら、アプリケーションのデバッグを行っていることを想像してください。全てのミューテーションをログに記録するためには、ミューテーションの前後の状態のスナップショットを捕捉することが必要です。しかし、上の例にあるミューテーション内の非同期コールバックは、それを不可能にします: そのコールバックは、ミューテーションがコミットされた時点ではまだ呼び出されていません。そして、コールバックが実際にいつ呼び出されるかを、開発ツールは知る術がありません。いかなる状態変更でも、コールバック内で起きる場合は本質的に追跡不可能です。
-
-### コンポーネント内におけるミューテーションのコミット
-
-`this.$store.commit('xxx')` と書くか、もしくはコンポーネントのメソッドを `store.commit` にマッピングする `mapMutations` ヘルパーを呼び出すこと(ルートの `store` の注入が必要)で、コンポーネント内でミューテーションをコミットできます:
-
-``` js
-import { mapMutations } from 'vuex'
-
-export default {
- // ...
- methods: {
- ...mapMutations([
- 'increment', // `this.increment()` を `this.$store.commit('increment')` にマッピングする
-
- // mapMutations はペイロードサポートする:
- 'incrementBy' // `this.incrementBy(amount)` を `this.$store.commit('incrementBy', amount)` にマッピングする
- ]),
- ...mapMutations({
- add: 'increment' // `this.add()` を `this.$store.commit('increment')` にマッピングする
- })
- }
-}
-```
-
-### アクションへ向けて
-
-状態変更を非同期に組み合わせることは、プログラムの動きを予測することを非常に困難にします。例えば、状態を変更する非同期コールバックを持った 2つのメソッドを両方呼び出すとき、それらがいつ呼び出されたか、どちらが先に呼び出されたかを、どうやって知ればよいのでしょう?これがまさに、状態変更と非同期の 2つの概念を分離したいという理由です。Vuex では**全てのミューテーションは同期的に行う**という作法になっています:
-
-``` js
-store.commit('increment')
-// "increment" ミューテーションによる状態変更は、この時点で行われるべきです
-```
-
-非同期的な命令を扱うために[アクション](actions.md)を見てみましょう。
diff --git a/docs-gitbook/ja/plugins.md b/docs-gitbook/ja/plugins.md
deleted file mode 100644
index db4cf6f30..000000000
--- a/docs-gitbook/ja/plugins.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# プラグイン
-
-Vuex ストア は、各ミューテーションへのフックを公開する `plugins` オプションを受け付けます。 Vuex プラグインは、単一の引数としてストアを受けつけるただの関数です:
-
-``` js
-const myPlugin = store => {
- // ストアが初期化されたときに呼ばれます
- store.subscribe((mutation, state) => {
- // それぞれのミューテーションの後に呼ばれます
- // ミューテーションは `{ type, payload }` の形式で提供されます
- })
-}
-```
-
-そして、このように利用することができます:
-
-``` js
-const store = new Vuex.Store({
- // ...
- plugins: [myPlugin]
-})
-```
-
-### プラグイン内でのミューテーションのコミット
-
-プラグインは直接、状態を変更できません。これはコンポーネントに似ています。プラグインはコンポーネント同様に、ミューテーションのコミットによる変更のトリガーだけで状態を変更できます。
-
-ミューテーションのコミットによるストアとデータソースの同期をプラグインで実現できます。 websocket データソースとストアを例にします (これは不自然な例です。実際には、さらに複雑なタスクのために `createPlugin` 関数は、追加でいくつかのオプションを受け取れます):
-
-``` js
-export default function createWebSocketPlugin (socket) {
- return store => {
- socket.on('data', data => {
- store.commit('RECEIVE_DATA', data)
- })
- store.subscribe((mutation) => {
- if (mutation.type === 'UPDATE_DATA') {
- socket.emit('update', mutation.payload)
- }
- })
- }
-}
-```
-
-``` js
-const plugin = createWebSocketPlugin(socket)
-
-const store = new Vuex.Store({
- state,
- mutations,
- plugins: [plugin]
-})
-```
-
-### 状態のスナップショットを撮る
-
-時々、状態の"スナップショット"を撮って、ミューテーション前後の状態を比較したくなることがあるでしょう。それを実現するために、状態オブジェクトのディープコピーを行う必要があります:
-
-``` js
-const myPluginWithSnapshot = store => {
- let prevState = _.cloneDeep(store.state)
- store.subscribe((mutation, state) => {
- let nextState = _.cloneDeep(state)
-
- // `prevState` と `nextState` を比較...
-
- // 次のミューテーションのために状態を保存
- prevState = nextState
- })
-}
-```
-
-**状態のスナップショットを撮るプラグインはアプリケーションの開発の間だけ使われるべきです。** webpack や Browserify を使っていれば、ビルドツールにそれを処理させることができます:
-
-``` js
-const store = new Vuex.Store({
- // ...
- plugins: process.env.NODE_ENV !== 'production'
- ? [myPluginWithSnapshot]
- : []
-})
-```
-
-上のように記述すれば、プラグインはデフォルトで利用されることになります。本番環境( production ) では、 `process.env.NODE_ENV !== 'production'` を `false` に置き換えるために、 webpack では[DefinePlugin](https://webpack.js.org/plugins/define-plugin/) 、 Browserify では[envify](https://github.com/hughsk/envify) が必要になります。
-
-### ビルトインロガープラグイン
-
-> もし、あなたが [vue-devtools](https://github.com/vuejs/vue-devtools) を使っている場合は、これは不要でしょう。
-
-Vuex には、一般的なデバッグに利用する用途の備え付けのロガープラグインがあります。
-
-```js
-import createLogger from 'vuex/dist/logger'
-
-const store = new Vuex.Store({
- plugins: [createLogger()]
-})
-```
-
-`createLogger` 関数はいくつかのオプションを受け取ります:
-
-``` js
-const logger = createLogger({
- collapsed: false, // ログ出力されたミューテーションを自動で展開します
- filter (mutation, stateBefore, stateAfter) {
- // ミューテーションを記録する必要がある場合は、`true` を返します
- // `mutation` は `{ type, payload }` です
- return mutation.type !== "aBlacklistedMutation"
- },
- transformer (state) {
- // ロギングの前に、状態を変換します
- // 例えば、特定のサブツリーのみを返します
- return state.subTree
- },
- mutationTransformer (mutation) {
- // ミューテーションは、`{ type, payload }` の形式でログ出力されます
- // 任意の方法でそれをフォーマットできます
- return mutation.type
- },
- logger: console, // `console` API の実装, デフォルトは `console`
-})
-```
-
-ロガーファイルは、他にも `
-
-```
-
-### NPM
-
-``` bash
-npm install vuex --save
-```
-
-### Yarn
-
-``` bash
-yarn add vuex
-```
-
-모듈 시스템과 함께 사용하면 `Vue.use()`를 통해 Vuex를 명시적으로 추가해야 합니다.
-
-``` js
-import Vue from 'vue'
-import Vuex from 'vuex'
-
-Vue.use(Vuex)
-```
-
-전역 스크립트 태그를 사용할 때는 이 작업을 할 필요가 없습니다.
-
-### 개발용 빌드
-
-최신 dev 빌드를 사용하고 싶은 경우 직접 GitHub에서 클론하고 `vuex`를 직접 빌드 해야합니다.
-
-
-``` bash
-git clone https://github.com/vuejs/vuex.git node_modules/vuex
-cd node_modules/vuex
-npm install
-npm run build
-```
diff --git a/docs-gitbook/kr/intro.md b/docs-gitbook/kr/intro.md
deleted file mode 100644
index 41f53d77b..000000000
--- a/docs-gitbook/kr/intro.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Vuex가 무엇인가요?
-
-Vuex는 Vue.js 애플리케이션에 대한 **상태 관리 패턴 + 라이브러리** 입니다. 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할을 하며 예측 가능한 방식으로 상태를 변경할 수 있습니다. 또한 Vue의 공식 [devtools 확장 프로그램](https://github.com/vuejs/vue-devtools)과 통합되어 설정 시간이 필요 없는 디버깅 및 상태 스냅 샷 내보내기/가져오기와 같은 고급 기능을 제공합니다.
-
-### "상태 관리 패턴"이란 무엇인가요?
-
-간단한 Vue 카운터 앱부터 시작 해보겠습니다.
-
-``` js
-new Vue({
- // 상태
- data () {
- return {
- count: 0
- }
- },
- // 뷰
- template: `
- {{ count }}
- `,
- // 액션
- methods: {
- increment () {
- this.count++
- }
- }
-})
-```
-
-다음과 같은 기능을 가진 앱입니다.
-
-- **상태** 는 앱을 작동하는 원본 소스 입니다.
-- **뷰** 는 **상태의** 선언적 매핑입니다.
-- **액션** 은 **뷰** 에서 사용자 입력에 대해 반응적으로 상태를 바꾸는 방법입니다.
-
-이것은 "단방향 데이터 흐름" 개념의 매우 단순한 도표입니다.
-
-
-
-
-
-그러나 **공통의 상태를 공유하는 여러 컴포넌트** 가 있는 경우 단순함이 빠르게 저하됩니다.
-
-- 여러 뷰는 같은 상태에 의존합니다.
-- 서로 다른 뷰의 작업은 동일한 상태를 반영해야 할 수 있습니다.
-
-첫번째 문제의 경우, 지나치게 중첩된 컴포넌트를 통과하는 prop는 장황할 수 있으며 형제 컴포넌트에서는 작동하지 않습니다. 두번째 문제의 경우 직접 부모/자식 인스턴스를 참조하거나 이벤트를 통해 상태의 여러 복사본을 변경 및 동기화 하려는 등의 해결 방법을 사용해야 합니다. 이러한 패턴은 모두 부서지기 쉽고 유지보수가 불가능한 코드로 빠르게 변경됩니다.
-
-그렇다면 컴포넌트에서 공유된 상태를 추출하고 이를 전역 싱글톤으로 관리해야 합니다. 이를 통해 우리의 컴포넌트 트리는 커다란 "뷰"가 되며 모든 컴포넌트는 트리에 상관없이 상태에 액세스하거나 동작을 트리거 할 수 있습니다!
-
-또한 상태 관리 및 특정 규칙 적용과 관련된 개념을 정의하고 분리함으로써 코드의 구조와 유지 관리 기능을 향상시킵니다.
-
-이는 [Flux](https://facebook.github.io/flux/docs/overview), [Redux](http://redux.js.org/), [The Elm Architecture](https://guide.elm-lang.org/architecture/)에서 영감을 받은 Vuex의 기본 아이디어 입니다. 다른 패턴과 달리 Vuex는 Vue.js가 효율적인 업데이트를 위해 세분화된 반응 시스템을 활용하도록 특별히 고안된 라이브러리입니다.
-
-
-
-### 언제 사용해야 하나요?
-
-Vuex는 공유된 상태 관리를 처리하는 데 유용하지만, 개념에 대한 이해와 시작하는 비용도 함께 듭니다. 그것은 단기간과 장기간 생산성 간의 기회비용이 있습니다.
-
-대규모 SPA를 구축하지 않고 Vuex로 바로 뛰어 들었다면, 시간이 오래 걸리고 힘든일일 것입니다. 이것은 일반 적인 일입니다. 앱이 단순하다면 Vuex없이는 괜찮을 것입니다. 간단한 [글로벌 이벤트 버스](https://kr.vuejs.org/v2/guide/components.html#비-부모-자식간-통신)만 있으면됩니다. 그러나 중대형 규모의 SPA를 구축하는 경우 Vue컴포넌트 외부의 상태를 보다 잘 처리할 수 있는 방법을 생각하게 될 가능성이 있으며 Vuex는 자연스럽게 선택할 수 있는 단계가 될 것입니다. Redux의 저자인 Dan Abramov의 좋은 인용이 있습니다.
-
-> Flux 라이브러리는 안경과 같습니다. 필요할 때 알아볼 수 있습니다.
diff --git a/docs-gitbook/kr/modules.md b/docs-gitbook/kr/modules.md
deleted file mode 100644
index c6dc32c1c..000000000
--- a/docs-gitbook/kr/modules.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# 모듈
-
-단일 상태 트리를 사용하기 때문에 애플리케이션의 모든 상태가 하나의 큰 객체 안에 포함됩니다. 그러나 규모가 커짐에 따라 저장소는 매우 비대해질 수 있습니다.
-
-이를 위해 Vuex는 저장소를 **모듈** 로 나눌 수 있습니다. 각 모듈은 자체 상태, 변이, 액션, 게터 및 심지어 중첩된 모듈을 포함 할 수 있습니다.
-
-``` js
-const moduleA = {
- state: { ... },
- mutations: { ... },
- actions: { ... },
- getters: { ... }
-}
-
-const moduleB = {
- state: { ... },
- mutations: { ... },
- actions: { ... }
-}
-
-const store = new Vuex.Store({
- modules: {
- a: moduleA,
- b: moduleB
- }
-})
-
-store.state.a // -> moduleA'의 상태
-store.state.b // -> moduleB'의 상태
-```
-
-### 지역 상태 모듈
-
-모듈의 변이와 getter 내부에서 첫 번째 전달인자는 **모듈의 지역 상태** 가됩니다.
-
-``` js
-const moduleA = {
- state: { count: 0 },
- mutations: {
- increment (state) {
- // state는 지역 모듈 상태 입니다
- state.count++
- }
- },
-
- getters: {
- doubleCount (state) {
- return state.count * 2
- }
- }
-}
-```
-
-유사하게 모듈 내부에서 `context.state`는 지역 상태를 노출시킬 것이고 루트 상태는 `context.rootState`로 노출 될 것입니다.
-
-``` js
-const moduleA = {
- // ...
- actions: {
- incrementIfOddOnRootSum ({ state, commit, rootState }) {
- if ((state.count + rootState.count) % 2 === 1) {
- commit('increment')
- }
- }
- }
-}
-```
-
-또한, 모듈 getters 내부, 루트 상태는 그들의 세 번째 전달인자로 노출됩니다.
-
-``` js
-const moduleA = {
- // ...
- getters: {
- sumWithRootCount (state, getters, rootState) {
- return state.count + rootState.count
- }
- }
-}
-```
-
-### 네임스페이스
-
-모듈 내의 액션, 변이 및 getter는 여전히 **전역 네임 스페이스** 아래에 등록됩니다. 여러 모듈이 동일한 변이/액션 유형에 반응 할 수 있습니다. 이름 앞에 접두사 또는 접미사를 붙이면 이름 충돌을 피하기 위해 모듈 자신의 네임스페이스를 직접 지정할 수 있습니다. 그리고 알 수 없는 환경에서 사용될 재사용 가능한 Vuex 모듈을 작성하는 경우라면 반드시 사용해야 합니다. 예를 들어,`todos` 모듈을 만들고 싶은 경우
-
-``` js
-// types.js
-
-// getter, 액션, 변이의 이름을 상수로 정의하고
-// 모듈 이름 `todos` 접두어를 붙입니다
-export const DONE_COUNT = 'todos/DONE_COUNT'
-export const FETCH_ALL = 'todos/FETCH_ALL'
-export const TOGGLE_DONE = 'todos/TOGGLE_DONE'
-```
-
-``` js
-// modules/todos.js
-import * as types from '../types'
-
-// 접두어로 된 이름을 사용하여 getter, 액션 및 변이 정의
-const todosModule = {
- state: { todos: [] },
-
- getters: {
- [types.DONE_COUNT] (state) {
- // ...
- }
- },
-
- actions: {
- [types.FETCH_ALL] (context, payload) {
- // ...
- }
- },
-
- mutations: {
- [types.TOGGLE_DONE] (state, payload) {
- // ...
- }
- }
-}
-```
-
-### 동적 모듈 등록
-
-`store.registerModule` 메소드로 저장소가 생성 된 **후에** 모듈을 등록 할 수 있습니다.
-
-``` js
-store.registerModule('myModule', {
- // ...
-})
-```
-
-모듈의 상태는`store.state.myModule`으로 노출 됩니다.
-
-동적 모듈 등록을 사용하면 다른 Vue 플러그인도 애플리케이션의 저장소에 모듈을 연결하여 상태 관리에 Vuex를 활용할 수 있습니다. 예를 들어 [`vuex-router-sync`](https://github.com/vuejs/vuex-router-sync) 라이브러리는 동적으로 연결된 모듈에서 애플리케이션의 라우트 상태를 관리하여 vue-router와 vuex를 통합합니다.
-
-`store.unregisterModule(moduleName)`을 사용하여 동적으로 등록 된 모듈을 제거할 수도 있습니다. 이 방법으로는 정적 모듈(저장소 생성시 선언 됨)을 제거 할 수 없습니다.
diff --git a/docs-gitbook/kr/mutations.md b/docs-gitbook/kr/mutations.md
deleted file mode 100644
index 6217890e4..000000000
--- a/docs-gitbook/kr/mutations.md
+++ /dev/null
@@ -1,167 +0,0 @@
-# 변이
-
-Vuex 저장소에서 실제로 상태를 변경하는 유일한 방법은 변이하는 것입니다. Vuex 변이는 이벤트와 매우 유사합니다. 각 변이에는 **타입** 문자열 **핸들러** 가 있습니다. 핸들러 함수는 실제 상태 수정을 하는 곳이며, 첫 번째 전달인자로 상태를받습니다.
-
-``` js
-const store = new Vuex.Store({
- state: {
- count: 1
- },
- mutations: {
- increment (state) {
- // 상태 변이
- state.count++
- }
- }
-})
-```
-
-변이 핸들러를 직접 호출 할 수는 없습니다. 이 옵션은 이벤트 등록과 비슷합니다. "타입이 `increment`인 변이가 발생하면이 핸들러를 호출합니다." 변이 핸들러를 호출하려면 해당 타입과 함께 **store.commit** 을 호출해야합니다.
-
-``` js
-store.commit('increment')
-```
-
-### 페이로드를 가진 커밋
-
-변이에 대해 **payload** 라고하는 `store.commit`에 추가 전달인자를 사용 할 수 있습니다.
-
-``` js
-// ...
-mutations: {
- increment (state, n) {
- state.count += n
- }
-}
-```
-``` js
-store.commit('increment', 10)
-```
-
-대부분의 경우 페이로드는 여러 필드를 포함할 수 있는 객체여야하며 기록 된 변이는 더 이해하기 쉽습니다.
-
-``` js
-// ...
-mutations: {
- increment (state, payload) {
- state.count += payload.amount
- }
-}
-```
-``` js
-store.commit('increment', {
- amount: 10
-})
-```
-
-### 객체 스타일 커밋
-
-변이를 커밋하는 또 다른 방법은 `type` 속성을 가진 객체를 직접 사용하는 것입니다.
-
-``` js
-store.commit({
- type: 'increment',
- amount: 10
-})
-```
-
-객체 스타일 커밋을 사용할 때 전체 객체는 변이 핸들러에 페이로드로 전달되므로 핸들러는 동일하게 유지됩니다.
-
-``` js
-mutations: {
- increment (state, payload) {
- state.count += payload.amount
- }
-}
-```
-
-### Vue의 반응성 규칙을 따르는 변이
-
-Vuex 저장소의 상태는 Vue에 의해 반응하므로, 상태를 변경하면 상태를 관찰하는 Vue 컴포넌트가 자동으로 업데이트됩니다. 이것은 또한 Vuex 변이가 일반 Vue로 작업 할 때 동일한 반응성에 대한 경고를 받을 수 있음을 의미합니다.
-
-1. 원하는 모든 필드에 앞서 저장소를 초기화하는 것이 좋습니다.
-
-2. 객체에 새 속성을 추가할 때 다음 중 하나를 수행해야합니다.
-
- - `Vue.set(obj, 'newProp', 123)`을 사용하거나,
-
- - 객체를 새로운 것으로 교체하십시오. 예를 들어, 3 단계 [객체 확산 문법](https://github.com/sebmarkbage/ecmascript-rest-spread)을 사용하면 다음과 같이 작성할 수 있습니다.
-
- ``` js
- state.obj = { ...state.obj, newProp: 123 }
- ```
-
-### 변이 타입에 상수 사용
-
-다양한 Flux 구현에서 변이 유형에 상수를 사용하는 것은 일반인 패턴입니다. 이를 통해 코드는 linter와 같은 툴링을 활용할 수 있으며 모든 상수를 단일 파일에 저장하면 공동 작업자가 전체 애플리케이션에서 어떤 변이가 가능한지 한눈에 파악할 수 있습니다.
-
-``` js
-// mutation-types.js
-export const SOME_MUTATION = 'SOME_MUTATION'
-```
-
-``` js
-// store.js
-import Vuex from 'vuex'
-import { SOME_MUTATION } from './mutation-types'
-
-const store = new Vuex.Store({
- state: { ... },
- mutations: {
- // ES2015에서 계산 된 프로퍼티 이름 기능을 사용하여
- // 상수를 함수 이름으로 사용할 수 있습니다
- [SOME_MUTATION] (state) {
- // 변이 상태
- }
- }
-})
-```
-
-상수를 사용할지 여부는 대부분 환경 설정입니다. 개발자가 많은 대규모 프로젝트에서 유용할 수 있지만, 이는 완전히 선택 사항입니다.
-
-### 변이는 무조건 동기적이어야 합니다.
-
-기억 해야할 한 가지 중요한 규칙은 **변이 핸들러 함수는 동기적** 이어야 한다는 것입니다. 왜 그럴까요? 다음 예제를 확인해보십시오.
-
-``` js
-mutations: {
- someMutation (state) {
- api.callAsyncMethod(() => {
- state.count++
- })
- }
-}
-```
-
-이제 우리가 앱을 디버깅하고 devtool의 돌연변이 로그를 보고 있다고 상상해보십시오. 기록 된 모든 변이에 대해 devtool은 상태의 "이전" 및 "이후" 스냅 샷을 캡처 해야 합니다. 그러나 위의 예제 변이 내의 비동기 콜백은 불가능합니다. 변이가 커밋 되었을 때 콜백은 아직 호출되지 않으며, 콜백이 실제로 호출 될 시기를 devtool이 알 수 있는 방법이 없습니다. 콜백에서 수행 된 모든 상태 변이는 본질적으로 추적 할 수 없습니다!
-
-### 컴포넌트 안에서 변이 커밋하기
-
-`this.$store.commit('xxx')`를 사용하여 컴포넌트에서 변이를 수행하거나 컴포넌트 메소드를 `store.commit` 호출에 매핑하는 `mapMutations` 헬퍼를 사용할 수 있습니다 (루트 `store` 주입 필요)
-
-``` js
-import { mapMutations } from 'vuex'
-
-export default {
- // ...
- methods: {
- ...mapMutations([
- 'increment' // this.increment()를 this.$store.commit('increment')에 매핑합니다.
- ]),
- ...mapMutations({
- add: 'increment' // this.add()를 this.$store.commit('increment')에 매핑합니다.
- })
- }
-}
-```
-
-### 액션에서 사용
-
-비동기성이 상태의 변이와 결합하면 프로그램을 파악하기가 매우 어려워 질 수 있습니다. 예를 들어 상태를 변경하는 두 가지 비동기 콜백 메소드를 호출할 때 호출되는 시점과 먼저 호출 된 콜백을 어떻게 알 수 있습니까? 이것이 우리가 두 개념을 분리하려는 이유입니다. Vuex에서 **변이는 동기적으로 트랜잭션합니다.**
-
-``` js
-store.commit('increment')
-// "increment" 변이가 일으킬 수 있는 모든 상태 변화는 이 순간에 이루어져야합니다.
-```
-
-비동기 작업을 처리하기 위한 [액션](actions.md)를 소개합시다.
diff --git a/docs-gitbook/kr/plugins.md b/docs-gitbook/kr/plugins.md
deleted file mode 100644
index 03f1e2bcb..000000000
--- a/docs-gitbook/kr/plugins.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# 플러그인
-
-Vuex 저장소는 각 변이에 대한 훅을 노출하는 `plugins` 옵션을 허용합니다. Vuex 플러그인은 저장소를 유일한 전달인자로 받는 함수입니다.
-
-``` js
-const myPlugin = store => {
- // 저장소가 초기화 될 때 불립니다.
- store.subscribe((mutation, state) => {
- // 매 변이시마다 불립니다.
- // 변이는 { type, payload } 포맷으로 제공됩니다.
- })
-}
-```
-
-그리고 다음과 같이 사용할 수 있습니다.
-
-``` js
-const store = new Vuex.Store({
- // ...
- plugins: [myPlugin]
-})
-```
-
-### 플러그인 내부에서 변이 커밋하기
-
-플러그인은 상태를 직접 변이할 수 없습니다. 컴포넌트와 마찬가지로 변이를 커밋하여 변경을 트리거 할 수 있습니다.
-
-변이을 커밋함으로써 플러그인을 사용하여 데이터 소스를 저장소에 동기화 할 수 있습니다. 예를 들어, websocket 데이터 소스를 저장소에 동기화하려면 (이는 사실 인위적인 예제입니다. 실제로 `createPlugin` 함수는 더 복잡한 작업을 위해 몇 가지 추가 옵션을 필요로 할 수 있습니다)
-
-``` js
-export default function createWebSocketPlugin (socket) {
- return store => {
- socket.on('data', data => {
- store.commit('receiveData', data)
- })
- store.subscribe(mutation => {
- if (mutation.type === 'UPDATE_DATA') {
- socket.emit('update', mutation.payload)
- }
- })
- }
-}
-```
-
-``` js
-const plugin = createWebSocketPlugin(socket)
-
-const store = new Vuex.Store({
- state,
- mutations,
- plugins: [plugin]
-})
-```
-
-### 상태 스냅샷 가져오기
-
-때로는 플러그인이 상태의 "스냅샷"을 얻고자 할 수 있으며, 또한 변이 이후 상태와 변이 이전 상태를 비교할 수 있습니다. 이를 달성하기 위해서는 상태 객체에 대한 깊은 복사를 수행해야합니다 :
-
-``` js
-const myPluginWithSnapshot = store => {
- let prevState = _.cloneDeep(store.state)
- store.subscribe((mutation, state) => {
- let nextState = _.cloneDeep(state)
-
- // prevState와 nextState를 비교하십시오.
-
- // 다음 변이를 위한 상태 저장
- prevState = nextState
- })
-}
-```
-
-**상태 스냅 샷을 사용하는 플러그인은 개발 중에 만 사용해야합니다.** webpack 또는 Browserify를 사용하는 경우 빌드 도구가 이를 처리 할 수 있습니다.
-
-``` js
-const store = new Vuex.Store({
- // ...
- plugins: process.env.NODE_ENV !== 'production'
- ? [myPluginWithSnapshot]
- : []
-})
-```
-
-플러그인은 기본적으로 사용됩니다. 배포를 위해서는 webpack의 [DefinePlugin](https://webpack.js.org/plugins/define-plugin/) 또는 [envify](https://github.com/hughsk/envify)가 필요합니다. Browserify가 `process.env.NODE_ENV !== 'production'`의 값을 최종 빌드를 위해 `false`로 변환합니다.
-
-
-### 내장 로거 플러그인
-
-> [vue-devtools](https://github.com/vuejs/vue-devtools)를 사용하고 있으면 필요 없을 수 있습니다.
-
-Vuex에는 일반적인 디버깅을 위한 로거 플러그인이 함께 제공됩니다.
-
-``` js
-import createLogger from 'vuex/dist/logger'
-
-const store = new Vuex.Store({
- plugins: [createLogger()]
-})
-```
-
-`createLogger` 함수는 몇 가지 옵션을 가질 수 있습니다.
-
-``` js
-const logger = createLogger({
- collapsed: false, // 로그를 가지는 변이 자동 확장
- filter (mutation, stateBefore, stateAfter) {
- // returns true if a mutation should be logged
- // `mutation` is a { type, payload }
- return mutation.type !== "aBlacklistedMutation"
- },
- transformer (state) {
- // 로깅하기전 상태를 변이 하십시오.
- // 예를 들어 특정 하위 트리만 반환합니다.
- return state.subTree
- },
- mutationTransformer (mutation) {
- // 변이는 { type, payload }의 포맷으로 기록됩니다.
- // 원하는 포맷으로 변경할 수 있습니다.
- return mutation.type
- }
-})
-```
-
-로거 파일은`
-
-```
-
-### NPM
-
-``` bash
-npm install vuex --save
-```
-
-### Yarn
-
-``` bash
-yarn add vuex
-```
-
-Quando usado com sistema de módulos, você deve instalar explicitamente o Vuex via `Vue.use()`:
-
-``` js
-import Vue from 'vue'
-import Vuex from 'vuex'
-
-Vue.use(Vuex)
-```
-
-Você não precisa fazer isso ao usar tags globais de script.
-
-### Promise
-
-Vuex requer [Promise](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Usando_promises). Se os seus navegadores não implementarem o Promise (e.g. IE), você pode usar uma polyfill library, como a [es6-promise](https://github.com/stefanpenner/es6-promise).
-
-Você pode incluí-la via CDN:
-
-``` html
-
-```
-
-Então `window.Promise` estará disponível automaticamente.
-
-Se você preferir usar um gerenciador de pacotes como NPM ou Yarn, instale-o com os seguintes comandos:
-
-``` bash
-npm install es6-promise --save # NPM
-yarn add es6-promise # Yarn
-```
-
-Além disso, adicione a linha abaixo em qualquer lugar no seu código antes de usar o Vuex:
-
-``` js
-import 'es6-promise/auto'
-```
-
-### Dev Build
-
-Você terá que clonar diretamente do GitHub e fazer o build do `vuex` se
-quiser usar a compilação mais recente do dev.
-
-``` bash
-git clone https://github.com/vuejs/vuex.git node_modules/vuex
-cd node_modules/vuex
-npm install
-npm run build
-```
diff --git a/docs-gitbook/pt-br/intro.md b/docs-gitbook/pt-br/intro.md
deleted file mode 100644
index 8358047b4..000000000
--- a/docs-gitbook/pt-br/intro.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# O que é Vuex?
-
-O Vuex é um **padrão de gerenciamento de estado + biblioteca** para aplicativos Vue.js. Ele serve como um _store_ centralizado para todos os componentes em uma aplicação, com regras garantindo que o estado só possa ser mutado de forma previsível. Ele também se integra com a extensão oficial [Vue devtools](https://github.com/vuejs/vue-devtools) para fornecer recursos avançados sem configurações adicionais, como depuração viajando pelo histórico de estado (_time travel_) e exportação/importação de registros de estado em determinado momento.
-
-### O que é um "Padrão de Gerenciamento do Estado"?
-
-Vamos começar com um simples aplicativo de contador Vue:
-
-``` js
-new Vue({
- // state
- data () {
- return {
- count: 0
- }
- },
- // view
- template: `
- {{ count }}
- `,
- // actions
- methods: {
- increment () {
- this.count++
- }
- }
-})
-```
-
-É um aplicativo autônomo com as seguintes partes:
-
-- O **estado** (_state_), que é a fonte da verdade que impulsiona nosso aplicativo;
-- A **_view_**, que é apenas um mapeamento declarativo do **estado**;
-- As **ações** (_actions_), que são as possíveis maneiras pelas quais o estado pode mudar em reação às entradas de usuários da **_view_**.
-
-Esta é uma representação extremamente simples do conceito de "fluxo de dados unidirecional":
-
-
-
-
-No entanto, a simplicidade rapidamente se quebra quando temos **múltiplos componentes que compartilham o estado comum**:
-
-- Várias visualizações podem depender da mesma parte do estado.
-
-- As ações de diferentes _views_ podem precisar mutar a mesma parte de estado
-Para o problema um, passar propriedades pode ser tediosos para componentes profundamente aninhados e simplesmente não funcionam para componentes irmãos. Para o problema dois, muitas vezes nos encontramos recorrendo a soluções como a busca de referências diretas de instâncias pai / filho ou tentando mutar e sincronizar múltiplas cópias do estado através de eventos. Ambos esses padrões são frágeis e rapidamente levam a um código não sustentável.
-
-Então, por que não extraímos o estado compartilhado dos componentes e gerenciamos isso em um singleton global? Com isso, nossa árvore de componentes se torna uma grande _view_, e qualquer componente pode acessar o estado ou ações de trigger, não importa onde eles estão na árvore!
-
-Além disso, definindo e separando os conceitos envolvidos na gestão do estado e aplicando certas regras, também damos ao nosso código mais estrutura e capacidade de manutenção.
-
-Esta é a idéia básica por trás do Vuex, inspirada por
- [Flux](https://facebook.github.io/flux/docs/overview), [Redux](http://redux.js.org/) e [The Elm Architecture](https://guide.elm-lang.org/architecture/). Ao contrário dos outros padrões, o Vuex também é uma implementação de biblioteca adaptada especificamente para Vue.js para aproveitar seu sistema de reatividade granular para atualizações eficientes.
-
-
-
-### Quando devo usá-lo?
-
-Embora o Vuex nos ajude a lidar com gerenciamento de estado compartilhado, ele também vem com o custo de mais conceitos e relatórios. É um trade-off entre produtividade a curto prazo e longo prazo.
-
-Se você nunca construiu um SPA de grande escala e pulando direito para o Vuex, pode parecer detalhista e assustador. Isso é perfeitamente normal - se o seu aplicativo for simples, você provavelmente estará bem sem o Vuex. Um simples [global event bus](https://br.vuejs.org/v2/guide/components.html#Comunicacao-Nao-Pai-Filho) pode ser tudo o que você precisa. Mas se você estiver construindo um SPA de médio a grande escala, é provável que você tenha encontrado situações que o façam pensar sobre como lidar melhor com o estado fora dos componentes do Vue e o Vuex será o próximo passo natural para você. Há uma boa citação de Dan Abramov, o autor do Redux:
-
-> As bibliotecas Flux são como óculos: você saberá quando você precisar deles.
diff --git a/docs-gitbook/pt-br/modules.md b/docs-gitbook/pt-br/modules.md
deleted file mode 100644
index 346ebc665..000000000
--- a/docs-gitbook/pt-br/modules.md
+++ /dev/null
@@ -1,287 +0,0 @@
-# Módulos
-
-Devido ao uso de uma árvore de um único estado, todo o estado do nosso aplicativo está contido dentro de um objeto grande. No entanto, à medida que nossa aplicação cresce em escala, o _store_ pode ficar realmente inchado.
-Para ajudar com isso, o Vuex nos permite dividir nosso _store_ em **módulos**. Cada módulo pode conter seu próprio estado, mutações, ações, _getters_ e até mesmo módulos aninhados – tudo é "quebrado" daqui pra frente:
-
-``` js
-const moduleA = {
- state: { ... },
- mutations: { ... },
- actions: { ... },
- getters: { ... }
-}
-
-const moduleB = {
- state: { ... },
- mutations: { ... },
- actions: { ... }
-}
-
-const store = new Vuex.Store({
- modules: {
- a: moduleA,
- b: moduleB
- }
-})
-
-store.state.a // -> `moduleA`'s state
-store.state.b // -> `moduleB`'s state
-```
-
-### Estado Local do Módulo
-
-Dentro das mutações e _getters_ de um módulo, o 1º argumento recebido será **o estado local do módulo**.
-
- ``` js
-const moduleA = {
- state: { count: 0 },
- mutations: {
- increment (state) {
- // `state` é o estado local do modulo
- state.count++
- }
- },
-
- getters: {
- doubleCount (state) {
- return state.count * 2
- }
- }
-}
-```
-
-Da mesma forma, dentro das ações do módulo ( _actions_ ), `context.state` irá expor o estado local e o estado raiz será exposto como `context.rootState`:
-
-``` js
-const moduleA = {
- // ...
- actions: {
- incrementIfOddOnRootSum ({ state, commit, rootState }) {
- if ((state.count + rootState.count) % 2 === 1) {
- commit('increment')
- }
- }
- }
-}
-```
-
-Além disso, dentro do módulo _getters_, o estado raiz será exibido como seu 3º argumento:
-
-``` js
-const moduleA = {
- // ...
- getters: {
- sumWithRootCount (state, getters, rootState) {
- return state.count + rootState.count
- }
- }
-}
-```
-
-### Namespacing
-
-Por padrão, ações, mutações e _getters_ dentro de módulos ainda estão registradas no **namespace global** - isso permite que vários módulos reajam com o mesmo tipo de mutação / ação.
-Se você deseja que seus módulos sejam mais autônomos ou reutilizáveis, você pode marcá-lo como namespaced com `namespaced: true`. Quando o módulo é registrado, todos os seus _getters_, ações e mutações serão automaticamente escritos com nomes com base no caminho no qual o módulo está registrado. Por exemplo:
-
-``` js
-const store = new Vuex.Store({
- modules: {
- account: {
- namespaced: true,
-
- // module assets
- state: { ... }, // O estado do módulo já está aninhado e não é afetado pela opção de namespaced
- getters: {
- isAdmin () { ... } // -> getters['account/isAdmin']
- },
- actions: {
- login () { ... } // -> dispatch('account/login')
- },
- mutations: {
- login () { ... } // -> commit('account/login')
- },
-
- // módulos aninhados
- modules: {
- // herda o namespace do modulo pai
- myPage: {
- state: { ... },
- getters: {
- profile () { ... } // -> getters['account/profile']
- }
- },
-
- // aninhar ainda mais o namespace
- posts: {
- namespaced: true,
-
- state: { ... },
- getters: {
- popular () { ... } // -> getters['account/posts/popular']
- }
- }
- }
- }
- }
-})
-```
-
-Os _getters_ e as ações _Namespaced_ receberão _getters_, _dispatch_ e _commit_ localizados. Em outras palavras, você pode usar os recursos do módulo sem prefixo de escrita no mesmo módulo. Alternar entre _namespaced_ ou não, não afeta o código dentro do módulo.
-
-#### Acessando Assets Globais em Módulos Namespaced
-
-Se você quiser usar estado global e _getters_, _rootState_ e _rootGetters_ são passados como o 3º e 4º argumentos para funções _getter_, e também expostos como propriedades no objeto _context_ passado para funções de ação.
-
-Para enviar ações ou fazer um _commit_ de mutações no _namespace_ global, passe `{root: true}` como o 3º argumento para _dispatch_ e _commit_.
-
- ``` js
-modules: {
- foo: {
- namespaced: true,
-
- getters: {
- // `getters` está localizado nos getters deste módulo
- // você pode usar rootGetters como 4º argumento de getters
- someGetter (state, getters, rootState, rootGetters) {
- getters.someOtherGetter // -> 'foo/someOtherGetter'
- rootGetters.someOtherGetter // -> 'someOtherGetter'
- },
- someOtherGetter: state => { ... }
- },
-
- actions: {
- // despachar e confirmar também estão localizados para este módulo
- // eles aceitarão a opção `root` para o envio / commit da raiz
-
- someAction ({ dispatch, commit, getters, rootGetters }) {
- getters.someGetter // -> 'foo/someGetter'
- rootGetters.someGetter // -> 'someGetter'
-
- dispatch('someOtherAction') // -> 'foo/someOtherAction'
- dispatch('someOtherAction', null, { root: true }) // -> 'someOtherAction'
-
- commit('someMutation') // -> 'foo/someMutation'
- commit('someMutation', null, { root: true }) // -> 'someMutation'
- },
- someOtherAction (ctx, payload) { ... }
- }
- }
-}
-```
-
-#### Usando Métodos Auxiliares com Namespace
-
-Ao vincular um módulo com namespace aos componentes com os auxiliares `mapState`, `mapGetters`, `mapActions` e `mapMutations`, ele pode ficar um pouco verboso:
-``` js
-computed: {
- ...mapState({
- a: state => state.some.nested.module.a,
- b: state => state.some.nested.module.b
- })
-},
-methods: {
- ...mapActions([
- 'some/nested/module/foo',
- 'some/nested/module/bar'
- ])
-}
-```
-
-Nesses casos, você pode passar a String de _namespace_ do módulo como o 1º argumento para os auxiliares para que todas as ligações sejam feitas usando esse módulo como contexto. O anterior pode ser simplificado para:
-
-
-``` js
-computed: {
- ...mapState('some/nested/module', {
- a: state => state.a,
- b: state => state.b
- })
-},
-methods: {
- ...mapActions('some/nested/module', [
- 'foo',
- 'bar'
- ])
-}
-```
-
-Além disso, você pode criar _helpers_ com nomes usando o `createNamespacedHelpers`. Ele retorna um objeto com novos auxiliares de ligação de componentes que estão vinculados com o valor de namespace fornecido:
-
-``` js
-import { createNamespacedHelpers } from 'vuex'
-
-const { mapState, mapActions } = createNamespacedHelpers('some/nested/module')
-
-export default {
- computed: {
- // look up in `some/nested/module`
- ...mapState({
- a: state => state.a,
- b: state => state.b
- })
- },
- methods: {
- // look up in `some/nested/module`
- ...mapActions([
- 'foo',
- 'bar'
- ])
- }
-}
-```
-
-#### Advertência para desenvolvedores de plugin
-Você pode se preocupar com o namespacing imprevisível para seus módulos quando você cria um [plugin](plugins.md) que fornece os módulos e permite que os usuários os adicionem a um _store_ Vuex. Seus módulos serão também escritos por namespacing se os usuários do plugin adicionarem seus módulos em um módulo namespace. Para adaptar esta situação, talvez seja necessário receber um valor de namespace através da opção do plugin:
-
-``` js
-// pega o valor do namespace via opção de plugin
-// e retorna a função de plugin Vuex
-export function createPlugin (options = {}) {
- return function (store) {
- // add namespace to plugin module's types
- const namespace = options.namespace || ''
- store.dispatch(namespace + 'pluginAction')
- }
-}
-```
-
-### Registro de Módulo Dinâmico
-Você pode registrar um módulo **após** o _store_ ser criado com o método `store.registerModule`:
-
-``` js
-// registrando um módulo `myModule`
-store.registerModule('myModule', {
- // ...
-})
-
-// registrando um módulo aninhado `nested/myModule`
-store.registerModule(['nested', 'myModule'], {
- // ...
-})
-```
-
-O estado do módulo será exposto como `store.state.myModule` e `store.state.nested.myModule`.
-O registro de módulo dinâmico torna possível que outros plugins do Vue também usem o Vuex para gerenciamento de estado anexando um módulo ao _store_ do aplicativo. Por exemplo, a biblioteca [`vuex-router-sync`](https://github.com/vuejs/vuex-router-sync) integra vue-router com vuex, gerenciando o estado da rota do aplicativo em um módulo anexado dinamicamente.
-
-Você também pode remover um módulo registrado dinamicamente com `store.unregisterModule(moduleName)`. Observe que você não pode remover módulos estáticos (declarados na criação da _store_ ) com este método.
-Pode ser provável que você queira preservar o estado anterior ao registrar um novo módulo, como preservar o estado de um aplicativo _Server Side Rendered_. Você pode conseguir isso com a opção `preserveState`: `store.registerModule ('a', module, {preserveState: true}) `
-
-### Reutilização do Módulo
-Às vezes, talvez precisemos criar várias instâncias de um módulo, por exemplo:
-
-- Criando várias _stores_ que usam o mesmo módulo (por exemplo, para [evitar Singletons com informações de estado no SSR](https://ssr.vuejs.org/en/structure.html#avoid-statelet-singletons) quando a opção `runInNewContext` é `false` ou `'once'`);
-- Registre o mesmo módulo várias vezes na mesma _store_.
-
-Se usarmos um objeto simples para declarar o estado do módulo, esse objeto de estado será compartilhado por referência e causará poluição do estado do armazenamento / módulo quando estiver mutado.
-Este é exatamente o mesmo problema com `data` dentro dos componentes do Vue. Portanto, a solução também é a mesma - use uma função para declarar o estado do módulo (suportado em 2.3.0+):
-
-``` js
-const MyReusableModule = {
- state () {
- return {
- foo: 'bar'
- }
- },
- // mutações, ações, getters...
-}
-```
diff --git a/docs-gitbook/pt-br/mutations.md b/docs-gitbook/pt-br/mutations.md
deleted file mode 100644
index aaa19035c..000000000
--- a/docs-gitbook/pt-br/mutations.md
+++ /dev/null
@@ -1,171 +0,0 @@
-# Mutações
-
-A única maneira de mudar o estado em um _store_ Vuex é fazendo _commit_ de uma mutação. As mutações Vuex são muito semelhantes aos eventos: cada mutação possui uma String **tipo** e um **manipulador**. A função do manipulador é onde nós executamos modificações de estado reais e receberá o estado como o 1º argumento:
-
-``` js
-const store = new Vuex.Store({
- state: {
- count: 1
- },
- mutations: {
- increment (state) {
- // muda o estado
- state.count++
- }
- }
-})
-```
-
-Você não pode chamar diretamente um manipulador de mutação. Pense nisso mais como registro de eventos: "Quando uma mutação com tipo `incremento` é ativada, chame esse manipulador." Para invocar um manipulador de mutação, você precisa chamar `store.commit` com seu tipo:
-
-``` js
-store.commit('increment')
-```
-
-### _Commit_ com payload
-
-Você pode passar um argumento adicional para `store.commit`, que é chamado de **payload** para a mutação:
-
-``` js
-// ...
-mutations: {
- increment (state, n) {
- state.count += n
- }
-}
-```
-``` js
-store.commit('increment', 10)
-```
-
-Na maioria dos casos, o payload deve ser um objeto para que ele possa conter vários campos e a mutação gravada também será mais descritiva:
-
-``` js
-// ...
-mutations: {
- increment (state, payload) {
- state.count += payload.amount
- }
-}
-```
-
-``` js
-store.commit('increment', {
- amount: 10
-})
-```
-
-### _Commit_ com _Object-Style_
-
-Uma maneira alternativa de confirmar uma mutação é usando diretamente um objeto que possui uma propriedade `type`:
-``` js
-store.commit({
- type: 'increment',
- amount: 10
-})
-```
-
-Ao fazer um _commit_ com object-style, todo o objeto será passado como payload para os manipuladores de mutação, de modo que o manipulador permaneça o mesmo:
-
-``` js
-mutations: {
- increment (state, payload) {
- state.count += payload.amount
- }
-}
-```
-
-### Mutações seguem as regras de reatividade do Vue
-
-Uma vez que o estado de um _store_ Vuex é reativo para o Vue, quando mutar o estado, os componentes Vue que observam o estado serão atualizados automaticamente. Isso também significa que as mutações Vuex estão sujeitas às mesmas ressalvas de reatividade quando se trabalha com apenas Vue:
-
-1. Prefira inicializar o estado inicial do seu _store_ com todos os campos desejados antecipadamente.
-
-2. Ao adicionar novas propriedades a um objeto, você deve:
-
- - Use `Vue.set(obj, 'newProp', 123)`, ou
-
-
- - Substitua esse Objeto por um novo. Por exemplo, usando o estágio 3 [object spread syntax](https://github.com/sebmarkbage/ecmascript-rest-restpread), podemos gravá-lo assim:
-
-
- ``` js
- state.obj = { ...state.obj, newProp: 123 }
- ```
-
-### Usando Constantes para Tipos de Mutação
-
-É um padrão normalmente visto para usar constantes para tipos de mutação em várias implementações de Flux. Isso permite que o código aproveite ferramentas como linters e colocar todas as constantes em um único arquivo permite que seus colaboradores tenham uma visão rápida de quais mutações são possíveis em todo o aplicativo:
-
-``` js
-// mutation-types.js
-export const SOME_MUTATION = 'SOME_MUTATION'
-```
-
-``` js
-// store.js
-import Vuex from 'vuex'
-import { SOME_MUTATION } from './mutation-types'
-
-const store = new Vuex.Store({
- state: { ... },
- mutations: {
- // podemos usar o recurso de dado computado do ES2015
- // usar uma constante como o nome da função
- [SOME_MUTATION] (state) {
- // mutate state
- }
- }
-})
-```
-
-Querer usar constantes é ,em grande parte, uma preferência - pode ser útil em grandes projetos com muitos desenvolvedores, mas é totalmente opcional se você não gosta deles.
-
-### Mutações devem ser síncronas
-
-Uma regra importante a lembrar é que **as funções do manipulador de mutação devem ser síncronas**. Por quê? Considere o seguinte exemplo:
-
-``` js
-mutations: {
- someMutation (state) {
- api.callAsyncMethod(() => {
- state.count++
- })
- }
-}
-```
-
-Agora imagine que estamos depurando o aplicativo e observamos os registros de mutação do devtool. Para cada mutação registrada, o devtool precisará capturar "antes" e "depois" _snapshots_ do estado. No entanto, o retorno de chamada assíncrono dentro da mutação de exemplo acima torna isso impossível: o _callback_ ainda não foi chamado quando a mutação foi comitada, e não existe nenhuma maneira para o devtool saber quando o _callback_ será chamado - qualquer mutação de estado realizada no retorno desse _callback_ é essencialmente não rastreável!
-
-### Fazendo _commit_ de Mutações em Componente
-Você pode fazer um _commit_ de mutações em componentes com `this.$store.commit('xxx')`, ou use o auxiliar `mapMutations` que mapeia métodos de componente para chamadas `store.commit` (requer injeção do _store_ na instância raiz):
-``` js
-import { mapMutations } from 'vuex'
-
-export default {
- // ...
- methods: {
- ...mapMutations([
- 'increment', // mapeia `this.increment()` para `this.$store.commit('increment')`
-
- // `mapMutations` também suporta payloads:
- 'incrementBy' // mapeia `this.incrementBy(amount)` para `this.$store.commit('incrementBy', amount)`
- ]),
- ...mapMutations({
- add: 'increment' // mapeia `this.add()` para `this.$store.commit('increment')`
- })
- }
-}
-```
-
-### Ações
-
-Assincronicidade combinada com a mutação do estado pode tornar o seu programa muito difícil de acontecer. Por exemplo, quando você chama dois métodos com retrocessos assíncronos que mutam o estado, como você sabe quando eles são chamados e qual callback foi chamado primeiro? É exatamente por isso que queremos separar os dois conceitos. No Vuex, as mutações **são transações síncronas**:
-
-``` js
-store.commit('increment')
-// qualquer alteração de estado que a mutação "increment" possa causar
-// deve ser feita neste momento
-```
-
-Para lidar com operações assíncronas, vamos apresentar as [Ações](actions.md).
diff --git a/docs-gitbook/pt-br/plugins.md b/docs-gitbook/pt-br/plugins.md
deleted file mode 100644
index dc68b0202..000000000
--- a/docs-gitbook/pt-br/plugins.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# _Plugins_
-
-Os _stores_ do Vuex aceitam a opção _plugins_ que expõe _hooks_ para cada mutação. Um _plugin_ Vuex é simplesmente uma função que recebe um _store_ como seu único argumento:
-
-
-``` js
-const myPlugin = store => {
- // chamado quando o store é inicializado
- store.subscribe((mutation, state) => {
- // chamada após cada mutação
- // a mutação vem no formato `{ type, payload }`.
- })
-}
-```
-
-E pode ser usada assim:
-
-``` js
-const store = new Vuex.Store({
- // ...
- plugins: [myPlugin]
-})
-```
-
-### Fazendo _Commit_ de Mutações dentro de _Plugins_
-
-_Plugins_ não tem permissão para mudar diretamente o estado - similar aos componentes, eles podem apenas disparar mudanças fazendo _commit_ de mutações.
-
-Ao fazer um _commit_ de uma mutação, um _plugin_ pode ser usado para sincronizar uma fonte de dados ao _store_. Por exemplo, para sincronizar uma fonte de dados _websocket_ ao _store_ (isso é só um exemplo inventado, na realidade a função _createPlugin_ pode receber parâmetros adicionais para tarefas mais complexas):
-
-
-``` js
-export default function createWebSocketPlugin (socket) {
- return store => {
- socket.on('data', data => {
- store.commit('receiveData', data)
- })
- store.subscribe(mutation => {
- if (mutation.type === 'UPDATE_DATA') {
- socket.emit('update', mutation.payload)
- }
- })
- }
-}
-```
-
-``` js
-const plugin = createWebSocketPlugin(socket)
-
-const store = new Vuex.Store({
- state,
- mutations,
- plugins: [plugin]
-})
-```
-
-### Gravando _Snapshots_ do Estado
-
-Às vezes, um _plugin_ pode querer receber _snapshots_ do estado, e comparar o estado pós-mutação com o pré-mutação. Para conseguir isso, você precisa fzer uma cópia profunda do objeto de estado:
-
-
-``` js
-const myPluginWithSnapshot = store => {
- let prevState = _.cloneDeep(store.state)
- store.subscribe((mutation, state) => {
- let nextState = _.cloneDeep(state)
-
- // compara `prevState` e `nextState`...
-
- // salva o estado para a próxima mutação
- prevState = nextState
- })
-}
-```
-
-**_Plugins_ que tiram _snapshots_ do estado devem ser usados apenas durante o desenvolvimento.** Quando usamos _webpack_ ou _Browserify_, podemos construir nossas próprias ferramentas que lidam com isso para nós:
-
-``` js
-const store = new Vuex.Store({
- // ...
- plugins: process.env.NODE_ENV !== 'production'
- ? [myPluginWithSnapshot]
- : []
-})
-```
-
-O _plugin_ vai ser usado por padrão. Para produção, você vai precisar do [DefinePlugin](https://webpack.js.org/plugins/define-plugin/) para webpack ou [envify](https://github.com/hughsk/envify) para Browserify para converter o valor de `process.env.NODE_ENV !== 'production'` para `false` na build final.
-
-### _Plugin_ de _Log_ Embutido
-
-> Se você está usando [vue-devtools](https://github.com/vuejs/vue-devtools) provavelmente não precisará disso.
-
-Vuex vem com um _plugin_ de _log_ para casos comuns de depuração:
-
-
-``` js
-import createLogger from 'vuex/dist/logger'
-
-const store = new Vuex.Store({
- plugins: [createLogger()]
-})
-```
-
-A função _createLogger_ recebe alguns argumentos:
-
-``` js
-const logger = createLogger({
- collapsed: false, // expande automaticamente funções logadas
- filter (mutation, stateBefore, stateAfter) {
- // retorna `true` se a mutação deve ser logada
- // `mutation` é uma `{ type, payload }`
- return mutation.type !== "aBlacklistedMutation"
- },
- transformer (state) {
- // transforma o estado antes de logá-lo
- // por exemplo, retorna apenas uma sub-árvore específica
- return state.subTree
- },
- mutationTransformer (mutation) {
- // mutações são logadas no formato `{ type, payload }`
- // mas podemos formatá-las como quiser.
- return mutation.type
- },
- logger: console, // implementação da API `console`, default `console`
-})
-```
-
-O arquivo de _log_ também pode ser incluído diretamente via _tag_ `
-
-```
-
-### NPM
-
-``` bash
-npm install vuex --save
-```
-
-### Yarn
-
-``` bash
-yarn add vuex
-```
-
-Если вы используете модули, установите Vuex явным образом командой `Vue.use()`:
-
-``` js
-import Vue from 'vue'
-import Vuex from 'vuex'
-
-Vue.use(Vuex)
-```
-
-При использовании глобальных тегов `
diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
deleted file mode 100644
index d1b8c92ff..000000000
--- a/docs/.vuepress/config.js
+++ /dev/null
@@ -1,365 +0,0 @@
-module.exports = {
- locales: {
- '/': {
- lang: 'en-US',
- title: 'Vuex',
- description: 'Centralized State Management for Vue.js'
- },
- '/zh/': {
- lang: 'zh-CN',
- title: 'Vuex',
- description: 'Vue.js 的中心化状态管理方案'
- },
- '/ja/': {
- lang: 'ja',
- title: 'Vuex',
- description: 'Vue.js のための集中状態管理'
- },
- '/ru/': {
- lang: 'ru',
- title: 'Vuex',
- description: 'Централизованное управление состоянием для Vue.js'
- },
- '/kr/': {
- lang: 'kr',
- title: 'Vuex',
- description: 'Vue.js의 중앙 상태 관리'
- },
- '/ptbr/': {
- lang: 'pt-BR',
- title: 'Vuex',
- description: 'Gerenciamento de Estado Centralizado para Vue.js'
- },
- '/fr/': {
- lang: 'fr-FR',
- title: 'Vuex',
- description: 'Gestion d\'état centralisé pour Vue.js'
- }
- },
- head: [
- ['link', { rel: 'icon', href: `/logo.png` }],
- ['link', { rel: 'apple-touch-icon', href: `/icons/apple-touch-icon-152x152.png` }],
- ['link', { rel: 'mask-icon', href: '/icons/safari-pinned-tab.svg', color: '#3eaf7c' }],
- ['meta', { name: 'msapplication-TileImage', content: '/icons/msapplication-icon-144x144.png' }],
- ],
- serviceWorker: true,
- theme: '@vuepress/vue',
- themeConfig: {
- algolia: {
- apiKey: '97f135e4b5f5487fb53f0f2dae8db59d',
- indexName: 'vuex',
- },
- repo: 'vuejs/vuex',
- docsDir: 'docs',
- locales: {
- '/': {
- label: 'English',
- selectText: 'Languages',
- editLinkText: 'Edit this page on GitHub',
- nav: [
- { text: 'Guide', link: '/guide/' },
- { text: 'API Reference', link: '/api/' },
- { text: 'Release Notes', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: 'Introduction',
- collapsable: false,
- children: [
- { title: 'What is Vuex?', path: '/' },
- { title: 'Installation', path: '/installation' },
- { title: 'Getting Started', path: '/guide/' }
- ]
- },
- {
- title: 'Core Concepts',
- collapsable: false,
- children: [
- { title: 'State', path: '/guide/state' },
- { title: 'Getters', path: '/guide/getters' },
- { title: 'Mutations', path: '/guide/mutations' },
- { title: 'Actions', path: '/guide/actions' },
- { title: 'Modules', path: '/guide/modules' }
- ]
- },
- {
- title: 'Advanced',
- collapsable: false,
- children: [
- { title: 'Application Structure', path: '/guide/structure' },
- { title: 'Plugins', path: '/guide/plugins' },
- { title: 'Strict Mode', path: '/guide/strict' },
- { title: 'Form Handling', path: '/guide/forms' },
- { title: 'Testing', path: '/guide/testing' },
- { title: 'Hot Reloading', path: '/guide/hot-reload' }
- ]
- }
- ]
- },
- '/zh/': {
- label: '简体中文',
- selectText: '选择语言',
- editLinkText: '在 GitHub 上编辑此页',
- nav: [
- { text: '指南', link: '/zh/guide/' },
- { text: 'API 参考', link: '/zh/api/' },
- { text: '更新记录', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: '介绍',
- collapsable: false,
- children: [
- { title: 'Vuex 是什么?', path: '/zh/' },
- { title: '安装', path: '/zh/installation' },
- { title: '开始', path: '/zh/guide/' }
- ]
- },
- {
- title: '核心概念',
- collapsable: false,
- children: [
- { title: 'State', path: '/zh/guide/state' },
- { title: 'Getters', path: '/zh/guide/getters' },
- { title: 'Mutations', path: '/zh/guide/mutations' },
- { title: 'Actions', path: '/zh/guide/actions' },
- { title: 'Modules', path: '/zh/guide/modules' }
- ]
- },
- {
- title: '进阶',
- collapsable: false,
- children: [
- { title: '项目结构', path: '/zh/guide/structure' },
- { title: '插件', path: '/zh/guide/plugins' },
- { title: '严格模式', path: '/zh/guide/strict' },
- { title: '表单处理', path: '/zh/guide/forms' },
- { title: '测试', path: '/zh/guide/testing' },
- { title: '热重载', path: '/zh/guide/hot-reload' }
- ]
- }
- ]
- },
- '/ja/': {
- label: '日本語',
- selectText: '言語',
- editLinkText: 'GitHub 上でこのページを編集する',
- nav: [
- { text: 'ガイド', link: '/ja/guide/' },
- { text: 'API リファレンス', link: '/ja/api/' },
- { text: 'リリースノート', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: 'はじめに',
- collapsable: false,
- children: [
- { title: 'Vuex とは何か?', path: '/ja/' },
- { title: 'インストール', path: '/ja/installation' },
- { title: 'Vuex 入門', path: '/ja/guide/' }
- ]
- },
- {
- title: 'コアコンセプト',
- collapsable: false,
- children: [
- { title: 'ステート', path: '/ja/guide/state' },
- { title: 'ゲッター', path: '/ja/guide/getters' },
- { title: 'ミューテーション', path: '/ja/guide/mutations' },
- { title: 'アクション', path: '/ja/guide/actions' },
- { title: 'モジュール', path: '/ja/guide/modules' }
- ]
- },
- {
- title: '高度な活用',
- collapsable: false,
- children: [
- { title: 'アプリケーションの構造', path: '/ja/guide/structure' },
- { title: 'プラグイン', path: '/ja/guide/plugins' },
- { title: '厳格モード', path: '/ja/guide/strict' },
- { title: 'フォームの扱い', path: '/ja/guide/forms' },
- { title: 'テスト', path: '/ja/guide/testing' },
- { title: 'ホットリローディング', path: '/ja/guide/hot-reload' }
- ]
- }
- ]
- },
- '/ru/': {
- label: 'Русский',
- selectText: 'Переводы',
- editLinkText: 'Изменить эту страницу на GitHub',
- nav: [
- { text: 'Руководство', link: '/ru/guide/' },
- { text: 'Справочник API', link: '/ru/api/' },
- { text: 'История изменений', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: 'Введение',
- collapsable: false,
- children: [
- { title: 'Что такое Vuex?', path: '/ru/' },
- { title: 'Установка', path: '/ru/installation' },
- { title: 'Введение', path: '/ru/guide/' }
- ]
- },
- {
- title: 'Основные понятия',
- collapsable: false,
- children: [
- { title: 'Состояние', path: '/ru/guide/state' },
- { title: 'Геттеры', path: '/ru/guide/getters' },
- { title: 'Мутации', path: '/ru/guide/mutations' },
- { title: 'Действия', path: '/ru/guide/actions' },
- { title: 'Модули', path: '/ru/guide/modules' }
- ]
- },
- {
- title: 'Продвинутые темы',
- collapsable: false,
- children: [
- { title: 'Структура приложения', path: '/ru/guide/structure' },
- { title: 'Плагины', path: '/ru/guide/plugins' },
- { title: 'Строгий режим (strict mode)', path: '/ru/guide/strict' },
- { title: 'Работа с формами', path: '/ru/guide/forms' },
- { title: 'Тестирование', path: '/ru/guide/testing' },
- { title: 'Горячая перезагрузка', path: '/ru/guide/hot-reload' }
- ]
- }
- ]
- },
- '/kr/': {
- label: '한국어',
- selectText: '언어 변경',
- editLinkText: 'GitHub에서 이 페이지 수정',
- nav: [
- { text: '가이드', link: '/kr/guide/' },
- { text: 'API 레퍼런스', link: '/kr/api/' },
- { text: '릴리즈 노트', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: 'Introduction',
- collapsable: false,
- children: [
- { title: 'Vuex가 무엇인가요?', path: '/kr/' },
- { title: '설치', path: '/kr/installation' },
- { title: '시작하기', path: '/kr/guide/' }
- ]
- },
- {
- title: '핵심 컨셉',
- collapsable: false,
- children: [
- { title: '상태', path: '/kr/guide/state' },
- { title: 'Getters', path: '/kr/guide/getters' },
- { title: '변이', path: '/kr/guide/mutations' },
- { title: '액션', path: '/kr/guide/actions' },
- { title: '모듈', path: '/kr/guide/modules' }
- ]
- },
- {
- title: 'Advanced',
- collapsable: false,
- children: [
- { title: '애플리케이션 구조', path: '/kr/guide/structure' },
- { title: '플러그인', path: '/kr/guide/plugins' },
- { title: 'Strict 모드', path: '/kr/guide/strict' },
- { title: '폼 핸들링', path: '/kr/guide/forms' },
- { title: '테스팅', path: '/kr/guide/testing' },
- { title: '핫 리로딩', path: '/kr/guide/hot-reload' }
- ]
- }
- ]
- },
- '/ptbr/': {
- label: 'Português',
- selectText: 'Idiomas',
- editLinkText: 'Edite esta página no GitHub',
- nav: [
- { text: 'Guia', link: '/ptbr/guide/' },
- { text: 'Referência da API', link: '/ptbr/api/' },
- { text: 'Notas da Versão', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: 'Introdução',
- collapsable: false,
- children: [
- { title: 'O que é Vuex?', path: '/ptbr/' },
- { title: 'Instalação', path: '/ptbr/installation' },
- { title: 'Começando', path: '/ptbr/guide/' }
- ]
- },
- {
- title: 'Conceitos Básicos',
- collapsable: false,
- children: [
- { title: 'Estado', path: '/ptbr/guide/state' },
- { title: 'Getters', path: '/ptbr/guide/getters' },
- { title: 'Mutações', path: '/ptbr/guide/mutations' },
- { title: 'Ações', path: '/ptbr/guide/actions' },
- { title: 'Módulos', path: '/ptbr/guide/modules' }
- ]
- },
- {
- title: 'Avançado',
- collapsable: false,
- children: [
- { title: 'Estrutura da Aplicação', path: '/ptbr/guide/structure' },
- { title: 'Plugins', path: '/ptbr/guide/plugins' },
- { title: 'Modo Estrito', path: '/ptbr/guide/strict' },
- { title: 'Manipulação de Formulários', path: '/ptbr/guide/forms' },
- { title: 'Testando', path: '/ptbr/guide/testing' },
- { title: 'Hot Reloading (Recarregamento Rápido)', path: '/ptbr/guide/hot-reload' }
- ]
- }
- ]
- },
- '/fr/': {
- label: 'Français',
- selectText: 'Langues',
- editLinkText: 'Éditer la page sur GitHub',
- nav: [
- { text: 'Guide', link: '/fr/guide/' },
- { text: 'API', link: '/fr/api/' },
- { text: 'Notes de version', link: 'https://github.com/vuejs/vuex/releases' }
- ],
- sidebar: [
- {
- title: 'Introduction',
- collapsable: false,
- children: [
- { title: "Vuex, qu'est-ce que c'est ?", path: '/fr/' },
- { title: 'Installation', path: '/fr/installation' },
- { title: 'Pour commencer', path: '/fr/guide/' }
- ]
- },
- {
- title: 'Concepts centraux',
- collapsable: false,
- children: [
- { title: 'State', path: '/fr/guide/state' },
- { title: 'Accesseurs', path: '/fr/guide/getters' },
- { title: 'Mutations', path: '/fr/guide/mutations' },
- { title: 'Actions', path: '/fr/guide/actions' },
- { title: 'Modules', path: '/fr/guide/modules' }
- ]
- },
- {
- title: 'Avancés',
- collapsable: false,
- children: [
- { title: "Structure d'une application", path: '/fr/guide/structure' },
- { title: 'Plugins', path: '/fr/guide/plugins' },
- { title: 'Mode strict', path: '/fr/guide/strict' },
- { title: 'Gestion des formulaires', path: '/fr/guide/forms' },
- { title: 'Tests', path: '/fr/guide/testing' },
- { title: 'Rechargement à chaud', path: '/fr/guide/hot-reload' }
- ]
- }
- ]
- }
- }
- }
-}
diff --git a/docs/.vuepress/public/flow.png b/docs/.vuepress/public/flow.png
deleted file mode 100644
index 8a18b59cf..000000000
Binary files a/docs/.vuepress/public/flow.png and /dev/null differ
diff --git a/docs/.vuepress/public/ru/flow.ai b/docs/.vuepress/public/ru/flow.ai
deleted file mode 100644
index 9f9fbb59c..000000000
--- a/docs/.vuepress/public/ru/flow.ai
+++ /dev/null
@@ -1,6998 +0,0 @@
-%PDF-1.5
%����
-1 0 obj
<>/OCGs[7 0 R 8 0 R 60 0 R 61 0 R 62 0 R 112 0 R 113 0 R 165 0 R 166 0 R 218 0 R 219 0 R 271 0 R 272 0 R 323 0 R 324 0 R 368 0 R 369 0 R 413 0 R 414 0 R 415 0 R 461 0 R 462 0 R 463 0 R 509 0 R 510 0 R 511 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
-
-
-
-
- application/pdf
-
-
- vuex
-
-
- 2018-06-11T11:51:57+03:00
- 2018-06-11T11:51:57+03:00
- 2018-06-10T13:12:24+04:00
- Adobe Illustrator CC 22.0 (Windows)
-
-
-
- 256
- 176
- JPEG
- /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAsAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYqoXN/Y2tPrNzFBXp6rqn/EiMiZAcy2QxTn9IJ9wQ0fmLy/K3GLU7R28Fnj
J/BsHix7w2y0eYc4S/0pR6srqGUhlPQjcHJuORTeKHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F
XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUv1vXdN0WyN3fycE6Ig3d2/lUdzkMmQRFlydLpZ55cMB+x
5P5h/MrXtTdo7Rzp9p0VIjSQj/Kk6/8AA0zXZNTKXLYPX6PsTDiFy9cvPl8mJySSSOXkYu7bszGp
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
-
-
-
- uuid:34b40ab5-80c6-4797-af7b-2e662d8710c9
- xmp.did:4696cfe5-096b-c445-b861-f3b5704eea85
- uuid:5D20892493BFDB11914A8590D31508C8
- proof:pdf
-
- uuid:587bf813-35c7-614a-9846-4e9eddded51d
- xmp.did:e7f7e66e-1404-47ff-9935-b6ad5ccaae56
- uuid:5D20892493BFDB11914A8590D31508C8
- proof:pdf
-
-
-
-
- saved
- xmp.iid:e7f7e66e-1404-47ff-9935-b6ad5ccaae56
- 2015-12-03T17:30:22-05:00
- Adobe Illustrator CC 2014 (Macintosh)
- /
-
-
- saved
- xmp.iid:4696cfe5-096b-c445-b861-f3b5704eea85
- 2018-06-10T13:12:21+03:00
- Adobe Illustrator CC 22.0 (Windows)
- /
-
-
-
- Document
- Print
- False
- False
- 1
-
- 802.135868
- 542.083818
- Points
-
-
-
-
- Montserrat-ExtraBold
- Montserrat
- ExtraBold
- Open Type
- Version 7.200
- False
- Montserrat-ExtraBold.ttf
-
-
-
-
-
- Cyan
- Magenta
- Yellow
-
-
-
-
-
- Группа образцов по умолчанию
- 0
-
-
-
- White
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 0.000000
-
-
- Black
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 100.000000
-
-
- CMYK Red
- CMYK
- PROCESS
- 0.000000
- 100.000000
- 100.000000
- 0.000000
-
-
- CMYK Yellow
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- CMYK Green
- CMYK
- PROCESS
- 100.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- CMYK Cyan
- CMYK
- PROCESS
- 100.000000
- 0.000000
- 0.000000
- 0.000000
-
-
- CMYK Blue
- CMYK
- PROCESS
- 100.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- CMYK Magenta
- CMYK
- PROCESS
- 0.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- C=15 M=100 Y=90 K=10
- CMYK
- PROCESS
- 15.000000
- 100.000000
- 90.000000
- 10.000000
-
-
- C=0 M=90 Y=85 K=0
- CMYK
- PROCESS
- 0.000000
- 90.000000
- 85.000000
- 0.000000
-
-
- C=0 M=80 Y=95 K=0
- CMYK
- PROCESS
- 0.000000
- 80.000000
- 95.000000
- 0.000000
-
-
- C=0 M=50 Y=100 K=0
- CMYK
- PROCESS
- 0.000000
- 50.000000
- 100.000000
- 0.000000
-
-
- C=0 M=35 Y=85 K=0
- CMYK
- PROCESS
- 0.000000
- 35.000000
- 85.000000
- 0.000000
-
-
- C=5 M=0 Y=90 K=0
- CMYK
- PROCESS
- 5.000000
- 0.000000
- 90.000000
- 0.000000
-
-
- C=20 M=0 Y=100 K=0
- CMYK
- PROCESS
- 20.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- C=50 M=0 Y=100 K=0
- CMYK
- PROCESS
- 50.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- C=75 M=0 Y=100 K=0
- CMYK
- PROCESS
- 75.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- C=85 M=10 Y=100 K=10
- CMYK
- PROCESS
- 85.000000
- 10.000000
- 100.000000
- 10.000000
-
-
- C=90 M=30 Y=95 K=30
- CMYK
- PROCESS
- 90.000000
- 30.000000
- 95.000000
- 30.000000
-
-
- C=75 M=0 Y=75 K=0
- CMYK
- PROCESS
- 75.000000
- 0.000000
- 75.000000
- 0.000000
-
-
- C=80 M=10 Y=45 K=0
- CMYK
- PROCESS
- 80.000000
- 10.000000
- 45.000000
- 0.000000
-
-
- C=70 M=15 Y=0 K=0
- CMYK
- PROCESS
- 70.000000
- 15.000000
- 0.000000
- 0.000000
-
-
- C=85 M=50 Y=0 K=0
- CMYK
- PROCESS
- 85.000000
- 50.000000
- 0.000000
- 0.000000
-
-
- C=100 M=95 Y=5 K=0
- CMYK
- PROCESS
- 100.000000
- 95.000000
- 5.000000
- 0.000000
-
-
- C=100 M=100 Y=25 K=25
- CMYK
- PROCESS
- 100.000000
- 100.000000
- 25.000000
- 25.000000
-
-
- C=75 M=100 Y=0 K=0
- CMYK
- PROCESS
- 75.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- C=50 M=100 Y=0 K=0
- CMYK
- PROCESS
- 50.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- C=35 M=100 Y=35 K=10
- CMYK
- PROCESS
- 35.000000
- 100.000000
- 35.000000
- 10.000000
-
-
- C=10 M=100 Y=50 K=0
- CMYK
- PROCESS
- 10.000000
- 100.000000
- 50.000000
- 0.000000
-
-
- C=0 M=95 Y=20 K=0
- CMYK
- PROCESS
- 0.000000
- 95.000000
- 20.000000
- 0.000000
-
-
- C=25 M=25 Y=40 K=0
- CMYK
- PROCESS
- 25.000000
- 25.000000
- 40.000000
- 0.000000
-
-
- C=40 M=45 Y=50 K=5
- CMYK
- PROCESS
- 40.000000
- 45.000000
- 50.000000
- 5.000000
-
-
- C=50 M=50 Y=60 K=25
- CMYK
- PROCESS
- 50.000000
- 50.000000
- 60.000000
- 25.000000
-
-
- C=55 M=60 Y=65 K=40
- CMYK
- PROCESS
- 55.000000
- 60.000000
- 65.000000
- 40.000000
-
-
- C=25 M=40 Y=65 K=0
- CMYK
- PROCESS
- 25.000000
- 40.000000
- 65.000000
- 0.000000
-
-
- C=30 M=50 Y=75 K=10
- CMYK
- PROCESS
- 30.000000
- 50.000000
- 75.000000
- 10.000000
-
-
- C=35 M=60 Y=80 K=25
- CMYK
- PROCESS
- 35.000000
- 60.000000
- 80.000000
- 25.000000
-
-
- C=40 M=65 Y=90 K=35
- CMYK
- PROCESS
- 40.000000
- 65.000000
- 90.000000
- 35.000000
-
-
- C=40 M=70 Y=100 K=50
- CMYK
- PROCESS
- 40.000000
- 70.000000
- 100.000000
- 50.000000
-
-
- C=50 M=70 Y=80 K=70
- CMYK
- PROCESS
- 50.000000
- 70.000000
- 80.000000
- 70.000000
-
-
- C=46 M=16 Y=3 K=0
- PROCESS
- 100.000000
- CMYK
- 45.526817
- 15.884641
- 3.241016
- 0.000000
-
-
-
-
-
- Grays
- 1
-
-
-
- C=0 M=0 Y=0 K=100
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 100.000000
-
-
- C=0 M=0 Y=0 K=90
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 89.999400
-
-
- C=0 M=0 Y=0 K=80
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 79.998800
-
-
- C=0 M=0 Y=0 K=70
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 69.999700
-
-
- C=0 M=0 Y=0 K=60
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 59.999100
-
-
- C=0 M=0 Y=0 K=50
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 50.000000
-
-
- C=0 M=0 Y=0 K=40
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 39.999400
-
-
- C=0 M=0 Y=0 K=30
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 29.998800
-
-
- C=0 M=0 Y=0 K=20
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 19.999700
-
-
- C=0 M=0 Y=0 K=10
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 9.999100
-
-
- C=0 M=0 Y=0 K=5
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 4.998800
-
-
-
-
-
- Brights
- 1
-
-
-
- C=0 M=100 Y=100 K=0
- CMYK
- PROCESS
- 0.000000
- 100.000000
- 100.000000
- 0.000000
-
-
- C=0 M=75 Y=100 K=0
- CMYK
- PROCESS
- 0.000000
- 75.000000
- 100.000000
- 0.000000
-
-
- C=0 M=10 Y=95 K=0
- CMYK
- PROCESS
- 0.000000
- 10.000000
- 95.000000
- 0.000000
-
-
- C=85 M=10 Y=100 K=0
- CMYK
- PROCESS
- 85.000000
- 10.000000
- 100.000000
- 0.000000
-
-
- C=100 M=90 Y=0 K=0
- CMYK
- PROCESS
- 100.000000
- 90.000000
- 0.000000
- 0.000000
-
-
- C=60 M=90 Y=0 K=0
- CMYK
- PROCESS
- 60.000000
- 90.000000
- 0.003100
- 0.003100
-
-
-
-
-
-
- Adobe PDF library 15.00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-endstream
endobj
3 0 obj
<>
endobj
10 0 obj
<>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 517 0 R/TrimBox[0.0 0.0 802.136 542.084]/Type/Page>>
endobj
513 0 obj
<>stream
-H��U�7�>���h-Y�l8��P(�m���B)������?�~�<3���(�ͬ=���$o~܇��}���0l��1�C�����˰�������_��)<�1l���oσ�Q����B����0<o�:҄��WXO6:�I%����8Y6<������=9f�")�0YK)?�� ,�&j9�����>#g�T�lP� bو�|^�>��/�˲ā)�y�s��=�H���ذK��m�ƕr-9 �3���ڜ)_�j����T���l�R�)�Nǯ8�J��rͫ\�gX��/(�\ќ��<���N�H�!����kn����/���(��lqf�:�s����n��g�����0��oX%���@ ���2#�q��|����I�g����� ����!�������XZ��j;K/Q624N#��MJ�RB����&�]Ax-T�Ю���'j&�&G�Q�=��0�2B�V�L��X��(u9�ߓ���P�)�2��H�eqb�g����������b5|��d~\ֿw����������w8�Օ"����&"�[V���b��`ѿ��G���Ջ�J&���B �8TT��!L�( �8h�H�yT,���T)2|JS��f�V��Q2
-������C���=HE�L�+@Й%B��i�ˊ~�NC��7��Q�Y�/UE��d��\gf8���U�]�M ��F�T|�\)T5] ��!9��ԧGF�� q�x�ό���f�