From d673eba95be54abb12b8efcdbe14c9e1ac972191 Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Mon, 11 Mar 2019 22:21:33 +0300
Subject: [PATCH 1/9] fix: navigation links

---
 .vuepress/config.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.vuepress/config.js b/.vuepress/config.js
index 09f474c..b5c2a1e 100644
--- a/.vuepress/config.js
+++ b/.vuepress/config.js
@@ -7,6 +7,7 @@ module.exports = {
     '@vuepress/medium-zoom',
     [
       '@vuepress/clean-urls', {
+        normalSuffix: '/',
         indexSuffix: '/'
       }
     ],

From 07b9ea3706c593613f78d024fab961b47cb32918 Mon Sep 17 00:00:00 2001
From: Sebastian <vuchl@users.noreply.github.com>
Date: Tue, 12 Mar 2019 13:31:08 +0100
Subject: [PATCH 2/9] Fixed string parameter in Introduction sample (#3)

---
 http/views.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/http/views.md b/http/views.md
index 9f74135..d47d4a5 100644
--- a/http/views.md
+++ b/http/views.md
@@ -44,7 +44,7 @@ struct HelloWorld
 
   def call
     # Use the `#view` method...
-    view(Hello.new("Onyx))
+    view(Hello.new("Onyx"))
 
     # Or just return a view
     Hello.new("Onyx")
@@ -318,4 +318,4 @@ struct Hello
     context.response << "Hello, #{@who}!"
   end
 end
-```
\ No newline at end of file
+```

From 085b443c44c9b810cdc10d7c47f511d3a22ca90a Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Sun, 17 Mar 2019 18:53:31 +0300
Subject: [PATCH 3/9] content (SQL/schema): add information about JSONB type

---
 sql/schema.md | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sql/schema.md b/sql/schema.md
index e3f5297..b441d2a 100644
--- a/sql/schema.md
+++ b/sql/schema.md
@@ -172,7 +172,7 @@ UUID | TEXT | [SQLite3::UUIDText](https://api.onyxframework.org/sql/Onyx/SQL/Con
 
 \* `0` for `false`, `1` for `true`<br>
 \*\* Stored in [`SQLite3::DATE_FORMAT`](https://github.com/crystal-lang/crystal-sqlite3/blob/master/src/sqlite3.cr#L5)<br>
-\*\*\* Any type with `#to_json` and `.from_json` method, e.g. [JSON::Serializable](https://crystal-lang.org/api/0.27.2/JSON/Serializable.html)
+\*\*\* Any type with `#to_json` and `.from_json` method, e.g. [JSON::Serializable](https://crystal-lang.org/api/0.27.2/JSON/Serializable.html). Note that `Enumerable` (e.g. `Array(String)` or `Hash(String, String)`) won't work in this case, use custom serializable struct instead
 
 #### `crystal-pg` types
 
@@ -192,11 +192,12 @@ Time | TIME, TIMESTAMP etc.
 Nil | NULL
 Enumerable* | *varies* | [PG::Any](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/Any.html)
 Enum, Enumerable(Enum) | ENUM | [PG::Enum](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/Enum.html)
-JSON** | JSON, JSONB | [PG::JSON](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/JSON.html)
+JSON** | JSON | [PG::JSON](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/JSON.html)
+JSON** | JSONB | [PG::JSONB](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/JSONB.html)
 UUID | BLOB | [PG::UUID](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/UUID.html)
 
 \* Actual type depends on enumerable type (e.g. `int[]` for `Array(Int32)`)<br>
-\*\* Any type with `#to_json` and `.from_json` method, e.g. [JSON::Serializable](https://crystal-lang.org/api/0.27.2/JSON/Serializable.html)
+\*\* Any type with `#to_json` and `.from_json` method, e.g. [JSON::Serializable](https://crystal-lang.org/api/0.27.2/JSON/Serializable.html). Note that `Enumerable` (e.g. `Array(String)` or `Hash(String, String)`) won't work in this case, use custom serializable struct instead
 
 #### `crystal-mysql` types
 
@@ -294,7 +295,7 @@ CREATE TABLE posts (
 ```crystal
 class User
   include Onyx::SQL::Model
-  
+
   schema users do
     pkey id : Int32
     type posts : Array(Post), foreign_key: "author_id"

From 1e48406ca318dbed1a63c4925a00926ef3db77e5 Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Sun, 17 Mar 2019 19:01:28 +0300
Subject: [PATCH 4/9] content (HTTP/views): add XML macro

---
 http/views.md | 54 +++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 48 insertions(+), 6 deletions(-)

diff --git a/http/views.md b/http/views.md
index d47d4a5..435225c 100644
--- a/http/views.md
+++ b/http/views.md
@@ -30,7 +30,7 @@ Onyx.get "/" do |env|
   # You can either set the response view explicitly
   env.response.view = Hello.new("Onyx")
 
-  # Or make it the return value of the proc 
+  # Or make it the return value of the proc
   # (ignored if already set before)
   Hello.new("Onyx")
 end
@@ -67,7 +67,7 @@ struct Hello
 end
 ```
 
-Or you can make use of built-in `.json`, `.text` and `.template` macros:
+Or you can make use of built-in `.json`, `.xml`, `.text` and `.template` macros:
 
 ```crystal
 struct Hello
@@ -79,6 +79,13 @@ struct Hello
   # Will be rendered if `Accept` header is `application/json`
   json message: "Hello, #{@who}!"
 
+  # Will be rendered if `Accept` header is `application/xml`
+  xml do
+    element "hello" do
+      attribute "who", @who
+    end
+  end
+
   # Will be rendered if `Accept` header is `text/html`
   template "./hello.ecr.html"
 
@@ -106,9 +113,17 @@ struct Hello
   json({
     message: "Hello, #{@who}!"
   })
+end
+```
 
-  # Expands to:
-  #
+Which expands to:
+
+```crystal
+struct Hello
+  include Onyx::HTTP::View
+
+  def initialize(@who : String)
+  end
 
   # Defined unless `to_json` is already defined
   def to_json(io : IO)
@@ -177,9 +192,17 @@ struct Hello
       field "message", "Hello, #{@who}!"
     end
   end
+end
+```
 
-  # Expands to:
-  #
+Which expands to:
+
+```crystal
+struct Hello
+  include Onyx::HTTP::View
+
+  def initialize(@who : String)
+  end
 
   def to_json(io : IO)
     builder = JSON::Builder.new(io)
@@ -233,6 +256,25 @@ struct ManyUsers
 end
 ```
 
+## XML
+
+`xml` macro accepts a block just like the builder variant of [`json`](#json), but instead of `JSON::Builder` it uses [`XML::Builder`](https://crystal-lang.org/api/latest/XML/Builder.html):
+
+```crystal
+struct Hello
+  include Onyx::HTTP::View
+
+  def initialize(@who : String)
+  end
+
+  xml do
+    element "hello" do
+      attribute "who", @who
+    end
+  end
+end
+```
+
 ## Template
 
 Templates are rendered with [Kilt](https://github.com/jeromegn/kilt) shard. Templates have access to the view context, for example:

From f4ef91d0d3057ddabbb2e7f3bacd61ef06ba1650 Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Sat, 20 Apr 2019 20:00:31 +0300
Subject: [PATCH 5/9] deps: updates

---
 package.json |   10 +-
 yarn.lock    | 1497 ++++++++++++++++++++++++++++++++++----------------
 2 files changed, 1022 insertions(+), 485 deletions(-)

diff --git a/package.json b/package.json
index eeaf33b..9e73ec0 100644
--- a/package.json
+++ b/package.json
@@ -19,11 +19,11 @@
   },
   "homepage": "https://github.com/onyxframework/docs#readme",
   "devDependencies": {
-    "@vuepress/plugin-back-to-top": "^1.0.0-alpha.44",
-    "@vuepress/plugin-clean-urls": "^1.0.0-alpha.44",
-    "@vuepress/plugin-google-analytics": "^1.0.0-alpha.44",
-    "@vuepress/plugin-medium-zoom": "^1.0.0-alpha.44",
-    "vuepress": "^1.0.0-alpha.44",
+    "@vuepress/plugin-back-to-top": "^1.0.0-alpha.47",
+    "@vuepress/plugin-google-analytics": "^1.0.0-alpha.47",
+    "@vuepress/plugin-medium-zoom": "^1.0.0-alpha.47",
+    "vuepress": "^1.0.0-alpha.47",
+    "vuepress-plugin-clean-urls": "^1.0.3",
     "vuepress-plugin-sitemap": "^2.1.1"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index 3a90884..cb1393a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,16 +9,16 @@
     "@babel/highlight" "^7.0.0"
 
 "@babel/core@^7.0.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.3.tgz#198d6d3af4567be3989550d97e068de94503074f"
   dependencies:
     "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.3.4"
-    "@babel/helpers" "^7.2.0"
-    "@babel/parser" "^7.3.4"
-    "@babel/template" "^7.2.2"
-    "@babel/traverse" "^7.3.4"
-    "@babel/types" "^7.3.4"
+    "@babel/generator" "^7.4.0"
+    "@babel/helpers" "^7.4.3"
+    "@babel/parser" "^7.4.3"
+    "@babel/template" "^7.4.0"
+    "@babel/traverse" "^7.4.3"
+    "@babel/types" "^7.4.0"
     convert-source-map "^1.1.0"
     debug "^4.1.0"
     json5 "^2.1.0"
@@ -27,11 +27,11 @@
     semver "^5.4.1"
     source-map "^0.5.0"
 
-"@babel/generator@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e"
+"@babel/generator@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196"
   dependencies:
-    "@babel/types" "^7.3.4"
+    "@babel/types" "^7.4.0"
     jsesc "^2.5.1"
     lodash "^4.17.11"
     source-map "^0.5.0"
@@ -50,32 +50,32 @@
     "@babel/helper-explode-assignable-expression" "^7.1.0"
     "@babel/types" "^7.0.0"
 
-"@babel/helper-call-delegate@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a"
+"@babel/helper-call-delegate@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz#f308eabe0d44f451217853aedf4dea5f6fe3294f"
   dependencies:
-    "@babel/helper-hoist-variables" "^7.0.0"
-    "@babel/traverse" "^7.1.0"
-    "@babel/types" "^7.0.0"
+    "@babel/helper-hoist-variables" "^7.4.0"
+    "@babel/traverse" "^7.4.0"
+    "@babel/types" "^7.4.0"
 
-"@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz#092711a7a3ad8ea34de3e541644c2ce6af1f6f0c"
+"@babel/helper-create-class-features-plugin@^7.4.0":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.3.tgz#5bbd279c6c3ac6a60266b89bbfe7f8021080a1ef"
   dependencies:
     "@babel/helper-function-name" "^7.1.0"
     "@babel/helper-member-expression-to-functions" "^7.0.0"
     "@babel/helper-optimise-call-expression" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.3.4"
-    "@babel/helper-split-export-declaration" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.4.0"
+    "@babel/helper-split-export-declaration" "^7.4.0"
 
-"@babel/helper-define-map@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c"
+"@babel/helper-define-map@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz#cbfd8c1b2f12708e262c26f600cd16ed6a3bc6c9"
   dependencies:
     "@babel/helper-function-name" "^7.1.0"
-    "@babel/types" "^7.0.0"
-    lodash "^4.17.10"
+    "@babel/types" "^7.4.0"
+    lodash "^4.17.11"
 
 "@babel/helper-explode-assignable-expression@^7.1.0":
   version "7.1.0"
@@ -98,11 +98,11 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-hoist-variables@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88"
+"@babel/helper-hoist-variables@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz#25b621399ae229869329730a62015bbeb0a6fbd6"
   dependencies:
-    "@babel/types" "^7.0.0"
+    "@babel/types" "^7.4.0"
 
 "@babel/helper-member-expression-to-functions@^7.0.0":
   version "7.0.0"
@@ -116,16 +116,16 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-module-transforms@^7.1.0":
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963"
+"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.3":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.3.tgz#b1e357a1c49e58a47211a6853abb8e2aaefeb064"
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/helper-simple-access" "^7.1.0"
     "@babel/helper-split-export-declaration" "^7.0.0"
     "@babel/template" "^7.2.2"
     "@babel/types" "^7.2.2"
-    lodash "^4.17.10"
+    lodash "^4.17.11"
 
 "@babel/helper-optimise-call-expression@^7.0.0":
   version "7.0.0"
@@ -137,11 +137,11 @@
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
 
-"@babel/helper-regex@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27"
+"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.3":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.3.tgz#9d6e5428bfd638ab53b37ae4ec8caf0477495147"
   dependencies:
-    lodash "^4.17.10"
+    lodash "^4.17.11"
 
 "@babel/helper-remap-async-to-generator@^7.1.0":
   version "7.1.0"
@@ -153,14 +153,14 @@
     "@babel/traverse" "^7.1.0"
     "@babel/types" "^7.0.0"
 
-"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz#a795208e9b911a6eeb08e5891faacf06e7013e13"
+"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c"
   dependencies:
     "@babel/helper-member-expression-to-functions" "^7.0.0"
     "@babel/helper-optimise-call-expression" "^7.0.0"
-    "@babel/traverse" "^7.3.4"
-    "@babel/types" "^7.3.4"
+    "@babel/traverse" "^7.4.0"
+    "@babel/types" "^7.4.0"
 
 "@babel/helper-simple-access@^7.1.0":
   version "7.1.0"
@@ -169,11 +169,11 @@
     "@babel/template" "^7.1.0"
     "@babel/types" "^7.0.0"
 
-"@babel/helper-split-export-declaration@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
+"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55"
   dependencies:
-    "@babel/types" "^7.0.0"
+    "@babel/types" "^7.4.0"
 
 "@babel/helper-wrap-function@^7.1.0":
   version "7.2.0"
@@ -184,13 +184,13 @@
     "@babel/traverse" "^7.1.0"
     "@babel/types" "^7.2.0"
 
-"@babel/helpers@^7.2.0":
-  version "7.3.1"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.3.1.tgz#949eec9ea4b45d3210feb7dc1c22db664c9e44b9"
+"@babel/helpers@^7.4.3":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.3.tgz#7b1d354363494b31cb9a2417ae86af32b7853a3b"
   dependencies:
-    "@babel/template" "^7.1.2"
-    "@babel/traverse" "^7.1.5"
-    "@babel/types" "^7.3.0"
+    "@babel/template" "^7.4.0"
+    "@babel/traverse" "^7.4.3"
+    "@babel/types" "^7.4.0"
 
 "@babel/highlight@^7.0.0":
   version "7.0.0"
@@ -200,9 +200,9 @@
     esutils "^2.0.2"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.2.2", "@babel/parser@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c"
+"@babel/parser@^7.4.0", "@babel/parser@^7.4.3":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b"
 
 "@babel/plugin-proposal-async-generator-functions@^7.2.0":
   version "7.2.0"
@@ -213,17 +213,17 @@
     "@babel/plugin-syntax-async-generators" "^7.2.0"
 
 "@babel/plugin-proposal-class-properties@^7.0.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz#410f5173b3dc45939f9ab30ca26684d72901405e"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz#d70db61a2f1fd79de927eea91f6411c964e084b8"
   dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.3.4"
+    "@babel/helper-create-class-features-plugin" "^7.4.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-proposal-decorators@^7.1.0":
-  version "7.3.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz#637ba075fa780b1f75d08186e8fb4357d03a72a7"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.0.tgz#8e1bfd83efa54a5f662033afcc2b8e701f4bb3a9"
   dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.3.0"
+    "@babel/helper-create-class-features-plugin" "^7.4.0"
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/plugin-syntax-decorators" "^7.2.0"
 
@@ -235,8 +235,8 @@
     "@babel/plugin-syntax-json-strings" "^7.2.0"
 
 "@babel/plugin-proposal-object-rest-spread@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz#47f73cf7f2a721aad5c0261205405c642e424654"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz#be27cd416eceeba84141305b93c282f5de23bbb4"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
@@ -249,12 +249,12 @@
     "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
 
 "@babel/plugin-proposal-unicode-property-regex@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz#202d91ee977d760ef83f4f416b280d568be84623"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/helper-regex" "^7.0.0"
-    regexpu-core "^4.2.0"
+    regexpu-core "^4.5.4"
 
 "@babel/plugin-syntax-async-generators@^7.2.0":
   version "7.2.0"
@@ -305,8 +305,8 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-async-to-generator@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz#4e45408d3c3da231c0e7b823f407a53a7eb3048c"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz#234fe3e458dce95865c0d152d256119b237834b0"
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
@@ -319,23 +319,23 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-block-scoping@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz#5c22c339de234076eee96c8783b2fed61202c5c4"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz#164df3bb41e3deb954c4ca32ffa9fcaa56d30bcb"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     lodash "^4.17.11"
 
 "@babel/plugin-transform-classes@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz#dc173cb999c6c5297e0b5f2277fdaaec3739d0cc"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz#adc7a1137ab4287a555d429cc56ecde8f40c062c"
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.0.0"
-    "@babel/helper-define-map" "^7.1.0"
+    "@babel/helper-define-map" "^7.4.0"
     "@babel/helper-function-name" "^7.1.0"
     "@babel/helper-optimise-call-expression" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.3.4"
-    "@babel/helper-split-export-declaration" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.4.0"
+    "@babel/helper-split-export-declaration" "^7.4.0"
     globals "^11.1.0"
 
 "@babel/plugin-transform-computed-properties@^7.2.0":
@@ -345,18 +345,18 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-destructuring@^7.2.0":
-  version "7.3.2"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz#f2f5520be055ba1c38c41c0e094d8a461dd78f2d"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz#1a95f5ca2bf2f91ef0648d5de38a8d472da4350f"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-dotall-regex@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.3.tgz#fceff1c16d00c53d32d980448606f812cd6d02bf"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-regex" "^7.0.0"
-    regexpu-core "^4.1.3"
+    "@babel/helper-regex" "^7.4.3"
+    regexpu-core "^4.5.4"
 
 "@babel/plugin-transform-duplicate-keys@^7.2.0":
   version "7.2.0"
@@ -372,14 +372,14 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-for-of@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.3.tgz#c36ff40d893f2b8352202a2558824f70cd75e9fe"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-function-name@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.3.tgz#130c27ec7fb4f0cba30e958989449e5ec8d22bbd"
   dependencies:
     "@babel/helper-function-name" "^7.1.0"
     "@babel/helper-plugin-utils" "^7.0.0"
@@ -398,18 +398,18 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-modules-commonjs@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.3.tgz#3917f260463ac08f8896aa5bd54403f6e1fed165"
   dependencies:
-    "@babel/helper-module-transforms" "^7.1.0"
+    "@babel/helper-module-transforms" "^7.4.3"
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/helper-simple-access" "^7.1.0"
 
 "@babel/plugin-transform-modules-systemjs@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz#813b34cd9acb6ba70a84939f3680be0eb2e58861"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz#c2495e55528135797bc816f5d50f851698c586a1"
   dependencies:
-    "@babel/helper-hoist-variables" "^7.0.0"
+    "@babel/helper-hoist-variables" "^7.4.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-modules-umd@^7.2.0":
@@ -420,14 +420,14 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-named-capturing-groups-regex@^7.3.0":
-  version "7.3.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz#140b52985b2d6ef0cb092ef3b29502b990f9cd50"
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz#800391136d6cbcc80728dbdba3c1c6e46f86c12e"
   dependencies:
     regexp-tree "^0.1.0"
 
 "@babel/plugin-transform-new-target@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a"
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz#67658a1d944edb53c8d4fa3004473a0dd7838150"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
@@ -439,22 +439,22 @@
     "@babel/helper-replace-supers" "^7.1.0"
 
 "@babel/plugin-transform-parameters@^7.2.0":
-  version "7.3.3"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz#3a873e07114e1a5bee17d04815662c8317f10e30"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.3.tgz#e5ff62929fdf4cf93e58badb5e2430303003800d"
   dependencies:
-    "@babel/helper-call-delegate" "^7.1.0"
+    "@babel/helper-call-delegate" "^7.4.0"
     "@babel/helper-get-function-arity" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-regenerator@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz#1601655c362f5b38eead6a52631f5106b29fa46a"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.3.tgz#2a697af96887e2bbf5d303ab0221d139de5e739c"
   dependencies:
     regenerator-transform "^0.13.4"
 
-"@babel/plugin-transform-runtime@^7.0.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.3.4.tgz#57805ac8c1798d102ecd75c03b024a5b3ea9b431"
+"@babel/plugin-transform-runtime@^7.4.0":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.3.tgz#4d6691690ecdc9f5cb8c3ab170a1576c1f556371"
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
@@ -494,14 +494,14 @@
     "@babel/helper-plugin-utils" "^7.0.0"
 
 "@babel/plugin-transform-unicode-regex@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.3.tgz#3868703fc0e8f443dda65654b298df576f7b863b"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-regex" "^7.0.0"
-    regexpu-core "^4.1.3"
+    "@babel/helper-regex" "^7.4.3"
+    regexpu-core "^4.5.4"
 
-"@babel/preset-env@^7.0.0":
+"@babel/preset-env@^7.0.0 < 7.4.0":
   version "7.3.4"
   resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1"
   dependencies:
@@ -550,43 +550,43 @@
     semver "^5.3.0"
 
 "@babel/runtime-corejs2@^7.2.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.3.4.tgz#63f8bbc77622da202e9ea6f8f6e3bf28991832d9"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.3.tgz#40271fc260e570fb356da984e42e5990bd275860"
   dependencies:
-    core-js "^2.5.7"
-    regenerator-runtime "^0.12.0"
+    core-js "^2.6.5"
+    regenerator-runtime "^0.13.2"
 
 "@babel/runtime@^7.0.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83"
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc"
   dependencies:
-    regenerator-runtime "^0.12.0"
+    regenerator-runtime "^0.13.2"
 
-"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2":
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
+"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b"
   dependencies:
     "@babel/code-frame" "^7.0.0"
-    "@babel/parser" "^7.2.2"
-    "@babel/types" "^7.2.2"
+    "@babel/parser" "^7.4.0"
+    "@babel/types" "^7.4.0"
 
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06"
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.3":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84"
   dependencies:
     "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.3.4"
+    "@babel/generator" "^7.4.0"
     "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-split-export-declaration" "^7.0.0"
-    "@babel/parser" "^7.3.4"
-    "@babel/types" "^7.3.4"
+    "@babel/helper-split-export-declaration" "^7.4.0"
+    "@babel/parser" "^7.4.3"
+    "@babel/types" "^7.4.0"
     debug "^4.1.0"
     globals "^11.1.0"
     lodash "^4.17.11"
 
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed"
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c"
   dependencies:
     esutils "^2.0.2"
     lodash "^4.17.11"
@@ -603,77 +603,82 @@
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
 
-"@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.2.tgz#f3e20d77b89ddb7a4b9b7a75372f05cd3ac22d92"
+"@types/q@^1.5.1":
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+
+"@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.3.tgz#e4c2e7125b3e0d2a9d493e457850b2abb0fd3cad"
 
-"@vue/babel-plugin-transform-vue-jsx@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.2.tgz#6f7903fe66a34a02163f418c426cf419e862d97e"
+"@vue/babel-plugin-transform-vue-jsx@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.3.tgz#a1a44e801d8ed615e49f145ef1b3eaca2c16e2e6"
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/plugin-syntax-jsx" "^7.2.0"
-    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.3"
     html-tags "^2.0.0"
     lodash.kebabcase "^4.1.1"
     svg-tags "^1.0.0"
 
 "@vue/babel-preset-app@^3.1.1":
-  version "3.5.0"
-  resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.5.0.tgz#7d1584baba0d633b72cb950308bb35a6b07389d4"
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.6.0.tgz#39e12d4f81aed10696692fc7ef7d71d9328cd236"
   dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
     "@babel/plugin-proposal-class-properties" "^7.0.0"
     "@babel/plugin-proposal-decorators" "^7.1.0"
     "@babel/plugin-syntax-dynamic-import" "^7.0.0"
     "@babel/plugin-syntax-jsx" "^7.0.0"
-    "@babel/plugin-transform-runtime" "^7.0.0"
-    "@babel/preset-env" "^7.0.0"
+    "@babel/plugin-transform-runtime" "^7.4.0"
+    "@babel/preset-env" "^7.0.0 < 7.4.0"
     "@babel/runtime" "^7.0.0"
     "@babel/runtime-corejs2" "^7.2.0"
-    "@vue/babel-preset-jsx" "^1.0.0-beta.2"
+    "@vue/babel-preset-jsx" "^1.0.0-beta.3"
     babel-plugin-dynamic-import-node "^2.2.0"
     core-js "^2.6.5"
 
-"@vue/babel-preset-jsx@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.2.tgz#3e5dc2b73da58391c1c7327c2bd2ef154fe4e46e"
+"@vue/babel-preset-jsx@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.3.tgz#15c584bd62c0286a80f0196749ae38cde5cd703b"
   dependencies:
-    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2"
-    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2"
-    "@vue/babel-sugar-functional-vue" "^1.0.0-beta.2"
-    "@vue/babel-sugar-inject-h" "^1.0.0-beta.2"
-    "@vue/babel-sugar-v-model" "^1.0.0-beta.2"
-    "@vue/babel-sugar-v-on" "^1.0.0-beta.2"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.3"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.3"
+    "@vue/babel-sugar-functional-vue" "^1.0.0-beta.3"
+    "@vue/babel-sugar-inject-h" "^1.0.0-beta.3"
+    "@vue/babel-sugar-v-model" "^1.0.0-beta.3"
+    "@vue/babel-sugar-v-on" "^1.0.0-beta.3"
 
-"@vue/babel-sugar-functional-vue@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.2.tgz#8831f686e7614f282d5170b902483ef538deef38"
+"@vue/babel-sugar-functional-vue@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.3.tgz#41a855786971dacbbe8044858eefe98de089bf12"
   dependencies:
     "@babel/plugin-syntax-jsx" "^7.2.0"
 
-"@vue/babel-sugar-inject-h@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.2.tgz#5f92f994bf4b4126fad8633f554e8a426b51b413"
+"@vue/babel-sugar-inject-h@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.3.tgz#be1d00b74a1a89fed35a9b1415a738c36f125966"
   dependencies:
     "@babel/plugin-syntax-jsx" "^7.2.0"
 
-"@vue/babel-sugar-v-model@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.2.tgz#051d3ae3ef5e70d514e09058ec5790f6a42e8c28"
+"@vue/babel-sugar-v-model@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.3.tgz#ea935b0e08bf58c125a1349b819156059590993c"
   dependencies:
     "@babel/plugin-syntax-jsx" "^7.2.0"
-    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2"
-    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.3"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.3"
     camelcase "^5.0.0"
     html-tags "^2.0.0"
     svg-tags "^1.0.0"
 
-"@vue/babel-sugar-v-on@^1.0.0-beta.2":
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.2.tgz#3e2d122e229b10017f091d178346b601d9245260"
+"@vue/babel-sugar-v-on@^1.0.0-beta.3":
+  version "1.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.3.tgz#2f5fedb43883f603fe76010f253b85c7465855fe"
   dependencies:
     "@babel/plugin-syntax-jsx" "^7.2.0"
-    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.3"
     camelcase "^5.0.0"
 
 "@vue/component-compiler-utils@^2.5.1":
@@ -690,18 +695,17 @@
     source-map "~0.6.1"
     vue-template-es2015-compiler "^1.9.0"
 
-"@vuepress/core@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.0.0-alpha.44.tgz#820cbffc0bf7e620274bfb3fd988be5021ba4d92"
+"@vuepress/core@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.0.0-alpha.47.tgz#b1965c0f0c0961aaf110d04525f08ac9a91545af"
   dependencies:
     "@babel/core" "^7.0.0"
     "@vue/babel-preset-app" "^3.1.1"
-    "@vuepress/markdown" "^1.0.0-alpha.44"
-    "@vuepress/markdown-loader" "^1.0.0-alpha.44"
-    "@vuepress/plugin-container" "^1.0.0-alpha.44"
-    "@vuepress/plugin-last-updated" "^1.0.0-alpha.44"
-    "@vuepress/plugin-register-components" "^1.0.0-alpha.44"
-    "@vuepress/shared-utils" "^1.0.0-alpha.44"
+    "@vuepress/markdown" "^1.0.0-alpha.47"
+    "@vuepress/markdown-loader" "^1.0.0-alpha.47"
+    "@vuepress/plugin-last-updated" "^1.0.0-alpha.47"
+    "@vuepress/plugin-register-components" "^1.0.0-alpha.47"
+    "@vuepress/shared-utils" "^1.0.0-alpha.47"
     autoprefixer "^7.1.2"
     babel-loader "^8.0.4"
     cache-loader "^1.2.2"
@@ -714,9 +718,10 @@
     js-yaml "^3.11.0"
     lru-cache "^5.1.1"
     mini-css-extract-plugin "0.4.4"
-    optimize-css-assets-webpack-plugin "^4.0.0"
+    optimize-css-assets-webpack-plugin "^5.0.1"
     portfinder "^1.0.13"
     postcss-loader "^2.1.5"
+    postcss-safe-parser "^4.0.1"
     toml "^2.3.3"
     url-loader "^1.0.1"
     vue "^2.5.16"
@@ -725,25 +730,26 @@
     vue-server-renderer "^2.5.16"
     vue-template-compiler "^2.5.16"
     vuepress-html-webpack-plugin "^3.2.0"
+    vuepress-plugin-container "^2.0.0"
     webpack "^4.8.1"
     webpack-chain "^4.6.0"
     webpack-dev-server "^3.1.14"
     webpack-merge "^4.1.2"
     webpackbar "^2.6.1"
 
-"@vuepress/markdown-loader@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.0.0-alpha.44.tgz#cea097d4f6eab0dc796965dcd9dab178ec968cbb"
+"@vuepress/markdown-loader@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.0.0-alpha.47.tgz#243d8d400293085b32b6a050524eab679b49143f"
   dependencies:
-    "@vuepress/markdown" "^1.0.0-alpha.44"
+    "@vuepress/markdown" "^1.0.0-alpha.47"
     loader-utils "^1.1.0"
     lru-cache "^5.1.1"
 
-"@vuepress/markdown@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.0.0-alpha.44.tgz#4fe7ba1de27959188d6146fbef935f90108587b5"
+"@vuepress/markdown@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.0.0-alpha.47.tgz#4dd3f8903f712f18c769f2873086f6ab5b6480a5"
   dependencies:
-    "@vuepress/shared-utils" "^1.0.0-alpha.44"
+    "@vuepress/shared-utils" "^1.0.0-alpha.47"
     lru-cache "^5.1.1"
     markdown-it "^8.4.1"
     markdown-it-anchor "^5.0.2"
@@ -751,63 +757,53 @@
     markdown-it-emoji "^1.4.0"
     prismjs "^1.13.0"
 
-"@vuepress/plugin-active-header-links@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.0.0-alpha.44.tgz#8d9dc12879054fbcfbba04e5076146b7d245a976"
+"@vuepress/plugin-active-header-links@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.0.0-alpha.47.tgz#7e4e0e03c47d632e98e2d71a3e132722f40f34be"
   dependencies:
     lodash.throttle "^4.1.1"
 
-"@vuepress/plugin-back-to-top@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-1.0.0-alpha.44.tgz#e480c23283118a8c90c3291ad1acbae593cf333c"
+"@vuepress/plugin-back-to-top@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-1.0.0-alpha.47.tgz#138262700c22c80878a36e6837bfe03a4e514580"
   dependencies:
     lodash.debounce "^4.0.8"
 
-"@vuepress/plugin-clean-urls@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-clean-urls/-/plugin-clean-urls-1.0.0-alpha.44.tgz#a90b208b38fb5641e5f51ee113148dc35e99d8ff"
+"@vuepress/plugin-google-analytics@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-google-analytics/-/plugin-google-analytics-1.0.0-alpha.47.tgz#48af1cda1bd9f1a9f5c3506c398a1c364db6647f"
 
-"@vuepress/plugin-container@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-container/-/plugin-container-1.0.0-alpha.44.tgz#57d067633804079d6d624d58a5def75859676c4a"
-  dependencies:
-    markdown-it-container "^2.0.0"
-
-"@vuepress/plugin-google-analytics@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-google-analytics/-/plugin-google-analytics-1.0.0-alpha.44.tgz#5fa4edc341cffc634804c6f72db076fd0bffc3c0"
-
-"@vuepress/plugin-last-updated@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.0.0-alpha.44.tgz#89349ad745439abbfb2ed411f5b0789234f9717d"
+"@vuepress/plugin-last-updated@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.0.0-alpha.47.tgz#ff764b8397e8184e03a8f6b13b1482ea4f3b11eb"
   dependencies:
     cross-spawn "^6.0.5"
 
-"@vuepress/plugin-medium-zoom@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-1.0.0-alpha.44.tgz#4c0f218c2576a4c4484ed5a01955a6b6a5144d5a"
+"@vuepress/plugin-medium-zoom@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-1.0.0-alpha.47.tgz#3616241a405df99960f8b329598c9bf399d8a0c2"
   dependencies:
     medium-zoom "^0.4.0"
 
-"@vuepress/plugin-nprogress@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.0.0-alpha.44.tgz#5f59cac82d3f0104199701e6090cf9c33af29859"
+"@vuepress/plugin-nprogress@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.0.0-alpha.47.tgz#e0ad9cfac1d86b168a720045e3e96a01fe9f5190"
   dependencies:
     nprogress "^0.2.0"
 
-"@vuepress/plugin-register-components@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.0.0-alpha.44.tgz#7ef30c9e0516d19ba6b8e577cba6eda6e808753d"
+"@vuepress/plugin-register-components@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.0.0-alpha.47.tgz#c2f6f03f20071e3f0e9047051689395eb47b8a1e"
   dependencies:
-    "@vuepress/shared-utils" "^1.0.0-alpha.44"
+    "@vuepress/shared-utils" "^1.0.0-alpha.47"
 
-"@vuepress/plugin-search@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.0.0-alpha.44.tgz#c5ab7abe591ca025d57886a9ee817e4217504fd8"
+"@vuepress/plugin-search@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.0.0-alpha.47.tgz#4463927edd915ee38fbe08510f4398ff9da43ab0"
 
-"@vuepress/shared-utils@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.0.0-alpha.44.tgz#916f2c3c7f121d490936464997d7e31200e558b8"
+"@vuepress/shared-utils@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.0.0-alpha.47.tgz#a971d026fbb1c9d05255eec7986ef9a243ce4f74"
   dependencies:
     chalk "^2.3.2"
     diacritics "^1.3.0"
@@ -819,17 +815,17 @@
     semver "^5.5.0"
     upath "^1.1.0"
 
-"@vuepress/theme-default@^1.0.0-alpha.44":
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.0.0-alpha.44.tgz#48f973dc52a83a9c64292ec15c2c341111bb28c4"
+"@vuepress/theme-default@^1.0.0-alpha.47":
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.0.0-alpha.47.tgz#9eb8708c7319eb5b9a982fa17f0244c6da574a20"
   dependencies:
-    "@vuepress/plugin-active-header-links" "^1.0.0-alpha.44"
-    "@vuepress/plugin-container" "^1.0.0-alpha.44"
-    "@vuepress/plugin-nprogress" "^1.0.0-alpha.44"
-    "@vuepress/plugin-search" "^1.0.0-alpha.44"
+    "@vuepress/plugin-active-header-links" "^1.0.0-alpha.47"
+    "@vuepress/plugin-nprogress" "^1.0.0-alpha.47"
+    "@vuepress/plugin-search" "^1.0.0-alpha.47"
     docsearch.js "^2.5.2"
     stylus "^0.54.5"
     stylus-loader "^3.0.2"
+    vuepress-plugin-container "^2.0.0"
 
 "@webassemblyjs/ast@1.8.5":
   version "1.8.5"
@@ -1008,11 +1004,11 @@ ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.5:
     uri-js "^4.2.2"
 
 algoliasearch@^3.24.5:
-  version "3.32.0"
-  resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.32.0.tgz#5818168c26ff921bd0346a919071bac928b747ce"
+  version "3.32.1"
+  resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.32.1.tgz#605f8a2c17ab8da2af4456110f4d0a02b384e3d0"
   dependencies:
     agentkeepalive "^2.2.0"
-    debug "^2.6.8"
+    debug "^2.6.9"
     envify "^4.0.0"
     es6-promise "^4.1.0"
     events "^1.1.0"
@@ -1027,7 +1023,7 @@ algoliasearch@^3.24.5:
     semver "^5.1.0"
     tunnel-agent "^0.6.0"
 
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
 
@@ -1156,8 +1152,8 @@ assign-symbols@^1.0.0:
   resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
 
 async-each@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
 
 async@^1.5.2:
   version "1.5.2"
@@ -1273,12 +1269,12 @@ big.js@^5.2.2:
   resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
 
 binary-extensions@^1.0.0:
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1"
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
 
 bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3:
-  version "3.5.3"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
+  version "3.5.4"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
 
 bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
   version "4.11.8"
@@ -1310,7 +1306,7 @@ bonjour@^3.5.0:
     multicast-dns "^6.0.1"
     multicast-dns-service-types "^1.1.0"
 
-boolbase@~1.0.0:
+boolbase@^1.0.0, boolbase@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
 
@@ -1407,13 +1403,13 @@ browserslist@^2.11.3:
     caniuse-lite "^1.0.30000792"
     electron-to-chromium "^1.3.30"
 
-browserslist@^4.3.4:
-  version "4.4.2"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.2.tgz#6ea8a74d6464bb0bd549105f659b41197d8f0ba2"
+browserslist@^4.0.0, browserslist@^4.3.4:
+  version "4.5.5"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.5.tgz#fe1a352330d2490d5735574c149a85bc18ef9b82"
   dependencies:
-    caniuse-lite "^1.0.30000939"
-    electron-to-chromium "^1.3.113"
-    node-releases "^1.1.8"
+    caniuse-lite "^1.0.30000960"
+    electron-to-chromium "^1.3.124"
+    node-releases "^1.1.14"
 
 buffer-from@^1.0.0:
   version "1.1.1"
@@ -1444,8 +1440,8 @@ bytes@3.0.0:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
 
 cac@^6.3.9:
-  version "6.4.2"
-  resolved "https://registry.yarnpkg.com/cac/-/cac-6.4.2.tgz#6b2a2ab12619b778b3acc19f97e5298761d9c3de"
+  version "6.5.1"
+  resolved "https://registry.yarnpkg.com/cac/-/cac-6.5.1.tgz#c5685ebc20a8448558191d70a2a76636640308a0"
 
 cacache@^10.0.4:
   version "10.0.4"
@@ -1511,6 +1507,22 @@ call-me-maybe@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
 
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+
 camel-case@3.0.x:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
@@ -1518,13 +1530,9 @@ camel-case@3.0.x:
     no-case "^2.2.0"
     upper-case "^1.1.1"
 
-camelcase@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-
 camelcase@^5.0.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45"
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
 
 caniuse-api@^1.5.2:
   version "1.6.1"
@@ -1535,13 +1543,22 @@ caniuse-api@^1.5.2:
     lodash.memoize "^4.1.2"
     lodash.uniq "^4.5.0"
 
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
 caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
-  version "1.0.30000943"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000943.tgz#63f42807eb2934dfa63d7ae58a213c8017b55fdd"
+  version "1.0.30000962"
+  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000962.tgz#a8643c55d4e566a0636e20472e3125f2cb114191"
 
-caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000939:
-  version "1.0.30000943"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000943.tgz#00b25bd5808edc2ed1cfb53533a6a6ff6ca014ee"
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000960:
+  version "1.0.30000962"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000962.tgz#6c10c3ab304b89bea905e66adf98c0905088ee44"
 
 caseless@~0.12.0:
   version "0.12.0"
@@ -1565,9 +1582,9 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2:
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
-chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058"
+chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.5:
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d"
   dependencies:
     anymatch "^2.0.0"
     async-each "^1.0.1"
@@ -1579,7 +1596,7 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3:
     normalize-path "^3.0.0"
     path-is-absolute "^1.0.0"
     readdirp "^2.2.1"
-    upath "^1.1.0"
+    upath "^1.1.1"
   optionalDependencies:
     fsevents "^1.2.7"
 
@@ -1651,6 +1668,14 @@ clone@^1.0.2:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
 
+coa@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+  dependencies:
+    "@types/q" "^1.5.1"
+    chalk "^2.4.1"
+    q "^1.1.2"
+
 coa@~1.0.1:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
@@ -1668,7 +1693,7 @@ collection-visit@^1.0.0:
     map-visit "^1.0.0"
     object-visit "^1.0.0"
 
-color-convert@^1.3.0, color-convert@^1.9.0:
+color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
   dependencies:
@@ -1688,6 +1713,13 @@ color-string@^0.3.0:
   dependencies:
     color-name "^1.0.0"
 
+color-string@^1.5.2:
+  version "1.5.3"
+  resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+  dependencies:
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
+
 color@^0.11.0:
   version "0.11.4"
   resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
@@ -1696,6 +1728,13 @@ color@^0.11.0:
     color-convert "^1.3.0"
     color-string "^0.3.0"
 
+color@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc"
+  dependencies:
+    color-convert "^1.9.1"
+    color-string "^1.5.2"
+
 colormin@^1.0.5:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
@@ -1714,11 +1753,15 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
   dependencies:
     delayed-stream "~1.0.0"
 
-commander@2.17.x, commander@~2.17.1:
+commander@2.17.x:
   version "2.17.1"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
 
 commander@^2.19.0:
+  version "2.20.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+
+commander@~2.19.0:
   version "2.19.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
 
@@ -1727,24 +1770,24 @@ commondir@^1.0.1:
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
 
 component-emitter@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
 
-compressible@~2.0.14:
+compressible@~2.0.16:
   version "2.0.16"
   resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f"
   dependencies:
     mime-db ">= 1.38.0 < 2"
 
-compression@^1.5.2:
-  version "1.7.3"
-  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db"
+compression@^1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
   dependencies:
     accepts "~1.3.5"
     bytes "3.0.0"
-    compressible "~2.0.14"
+    compressible "~2.0.16"
     debug "2.6.9"
-    on-headers "~1.0.1"
+    on-headers "~1.0.2"
     safe-buffer "5.1.2"
     vary "~1.1.2"
 
@@ -1761,7 +1804,7 @@ concat-stream@^1.5.0:
     readable-stream "^2.2.2"
     typedarray "^0.0.6"
 
-connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.5.0:
+connect-history-api-fallback@^1.5.0, connect-history-api-fallback@^1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
 
@@ -1844,7 +1887,7 @@ copy-webpack-plugin@^4.5.1:
     p-limit "^1.0.0"
     serialize-javascript "^1.4.0"
 
-core-js@^2.5.7, core-js@^2.6.5:
+core-js@^2.6.5:
   version "2.6.5"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
 
@@ -1861,6 +1904,15 @@ cosmiconfig@^4.0.0:
     parse-json "^4.0.0"
     require-from-string "^2.0.1"
 
+cosmiconfig@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8"
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.13.0"
+    parse-json "^4.0.0"
+
 create-ecdh@^4.0.0:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -1915,10 +1967,17 @@ crypto-browserify@^3.11.0:
     randombytes "^2.0.0"
     randomfill "^1.0.3"
 
-css-color-names@0.0.4:
+css-color-names@0.0.4, css-color-names@^0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
 
+css-declaration-sorter@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+  dependencies:
+    postcss "^7.0.1"
+    timsort "^0.3.0"
+
 css-loader@^0.28.11:
   version "0.28.11"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
@@ -1942,6 +2001,10 @@ css-parse@1.7.x:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
 
+css-select-base-adapter@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+
 css-select@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
@@ -1951,6 +2014,15 @@ css-select@^1.1.0:
     domutils "1.5.1"
     nth-check "~1.0.1"
 
+css-select@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede"
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^2.1.2"
+    domutils "^1.7.0"
+    nth-check "^1.0.2"
+
 css-selector-tokenizer@^0.7.0:
   version "0.7.1"
   resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
@@ -1959,7 +2031,29 @@ css-selector-tokenizer@^0.7.0:
     fastparse "^1.1.1"
     regexpu-core "^1.0.0"
 
-css-what@2.1:
+css-tree@1.0.0-alpha.28:
+  version "1.0.0-alpha.28"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f"
+  dependencies:
+    mdn-data "~1.1.0"
+    source-map "^0.5.3"
+
+css-tree@1.0.0-alpha.29:
+  version "1.0.0-alpha.29"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
+  dependencies:
+    mdn-data "~1.1.0"
+    source-map "^0.5.3"
+
+css-unit-converter@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
+
+css-url-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec"
+
+css-what@2.1, css-what@^2.1.2:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
 
@@ -1971,6 +2065,59 @@ cssesc@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
 
+cssnano-preset-default@^4.0.7:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+  dependencies:
+    css-declaration-sorter "^4.0.1"
+    cssnano-util-raw-cache "^4.0.1"
+    postcss "^7.0.0"
+    postcss-calc "^7.0.1"
+    postcss-colormin "^4.0.3"
+    postcss-convert-values "^4.0.1"
+    postcss-discard-comments "^4.0.2"
+    postcss-discard-duplicates "^4.0.2"
+    postcss-discard-empty "^4.0.1"
+    postcss-discard-overridden "^4.0.1"
+    postcss-merge-longhand "^4.0.11"
+    postcss-merge-rules "^4.0.3"
+    postcss-minify-font-values "^4.0.2"
+    postcss-minify-gradients "^4.0.2"
+    postcss-minify-params "^4.0.2"
+    postcss-minify-selectors "^4.0.2"
+    postcss-normalize-charset "^4.0.1"
+    postcss-normalize-display-values "^4.0.2"
+    postcss-normalize-positions "^4.0.2"
+    postcss-normalize-repeat-style "^4.0.2"
+    postcss-normalize-string "^4.0.2"
+    postcss-normalize-timing-functions "^4.0.2"
+    postcss-normalize-unicode "^4.0.1"
+    postcss-normalize-url "^4.0.1"
+    postcss-normalize-whitespace "^4.0.2"
+    postcss-ordered-values "^4.1.2"
+    postcss-reduce-initial "^4.0.3"
+    postcss-reduce-transforms "^4.0.2"
+    postcss-svgo "^4.0.2"
+    postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+
+cssnano-util-get-match@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+
+cssnano-util-raw-cache@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+  dependencies:
+    postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+
 cssnano@^3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
@@ -2008,6 +2155,21 @@ cssnano@^3.10.0:
     postcss-value-parser "^3.2.3"
     postcss-zindex "^2.0.1"
 
+cssnano@^4.1.0:
+  version "4.1.10"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+  dependencies:
+    cosmiconfig "^5.0.0"
+    cssnano-preset-default "^4.0.7"
+    is-resolvable "^1.0.0"
+    postcss "^7.0.0"
+
+csso@^3.5.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
+  dependencies:
+    css-tree "1.0.0-alpha.29"
+
 csso@~2.3.1:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
@@ -2039,7 +2201,7 @@ debug@*, debug@^4.1.0, debug@^4.1.1:
   dependencies:
     ms "^2.1.1"
 
-debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   dependencies:
@@ -2051,16 +2213,10 @@ debug@^3.2.5, debug@^3.2.6:
   dependencies:
     ms "^2.1.1"
 
-decamelize@^1.1.2:
+decamelize@^1.1.2, decamelize@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
 
-decamelize@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
-  dependencies:
-    xregexp "4.0.0"
-
 decode-uri-component@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@@ -2077,14 +2233,14 @@ deepmerge@^1.5.2:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
 
-default-gateway@^4.0.1:
+default-gateway@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
   dependencies:
     execa "^1.0.0"
     ip-regex "^2.1.0"
 
-define-properties@^1.1.2:
+define-properties@^1.1.2, define-properties@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
   dependencies:
@@ -2113,16 +2269,16 @@ defined@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
 
-del@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+del@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/del/-/del-4.1.0.tgz#049543b8290e1a9293e2bd150ab3a06f637322b8"
   dependencies:
     globby "^6.1.0"
-    is-path-cwd "^1.0.0"
-    is-path-in-cwd "^1.0.0"
-    p-map "^1.1.1"
-    pify "^3.0.0"
-    rimraf "^2.2.8"
+    is-path-cwd "^2.0.0"
+    is-path-in-cwd "^2.0.0"
+    p-map "^2.0.0"
+    pify "^4.0.1"
+    rimraf "^2.6.3"
 
 delayed-stream@~1.0.0:
   version "1.0.0"
@@ -2251,13 +2407,19 @@ domutils@1.5.1:
     dom-serializer "0"
     domelementtype "1"
 
-domutils@^1.5.1:
+domutils@^1.5.1, domutils@^1.7.0:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
   dependencies:
     dom-serializer "0"
     domelementtype "1"
 
+dot-prop@^4.1.1:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+  dependencies:
+    is-obj "^1.0.0"
+
 duplexify@^3.4.2, duplexify@^3.6.0:
   version "3.7.1"
   resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
@@ -2278,9 +2440,9 @@ ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
 
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.113, electron-to-chromium@^1.3.30:
-  version "1.3.114"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.114.tgz#1862887589db93f832057c81878c56c404960aa6"
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.124, electron-to-chromium@^1.3.30:
+  version "1.3.125"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz#dbde0e95e64ebe322db0eca764d951f885a5aff2"
 
 elliptic@^6.0.0:
   version "6.4.1"
@@ -2339,7 +2501,7 @@ error-ex@^1.3.1:
   dependencies:
     is-arrayish "^0.2.1"
 
-es-abstract@^1.5.1:
+es-abstract@^1.12.0, es-abstract@^1.5.1:
   version "1.13.0"
   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
   dependencies:
@@ -2371,8 +2533,8 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
 
 eslint-scope@^4.0.0:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.2.tgz#5f10cd6cabb1965bf479fa65745673439e21cb0e"
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
   dependencies:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
@@ -2452,7 +2614,7 @@ expand-brackets@^2.1.4:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-express@^4.16.2:
+express@^4.16.4:
   version "4.16.4"
   resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
   dependencies:
@@ -2607,11 +2769,11 @@ find-cache-dir@^1.0.0:
     pkg-dir "^2.0.0"
 
 find-cache-dir@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d"
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
   dependencies:
     commondir "^1.0.1"
-    make-dir "^1.0.0"
+    make-dir "^2.0.0"
     pkg-dir "^3.0.0"
 
 find-up@^2.1.0:
@@ -2712,11 +2874,11 @@ fs.realpath@^1.0.0:
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
 
 fsevents@^1.2.7:
-  version "1.2.7"
-  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4"
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.8.tgz#57ea5320f762cd4696e5e8e87120eccc8b11cacf"
   dependencies:
-    nan "^2.9.2"
-    node-pre-gyp "^0.10.0"
+    nan "^2.12.1"
+    node-pre-gyp "^0.12.0"
 
 function-bind@^1.1.1:
   version "1.1.1"
@@ -2915,7 +3077,7 @@ has-values@^1.0.0:
     is-number "^3.0.0"
     kind-of "^4.0.0"
 
-has@^1.0.1, has@^1.0.3:
+has@^1.0.0, has@^1.0.1, has@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
   dependencies:
@@ -2943,6 +3105,10 @@ he@1.2.x, he@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
 
+hex-color-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+
 hmac-drbg@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -2967,11 +3133,19 @@ hpack.js@^2.1.6:
     readable-stream "^2.0.1"
     wbuf "^1.1.0"
 
+hsl-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+
+hsla-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+
 html-comment-regex@^1.1.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
 
-html-entities@^1.2.0:
+html-entities@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
 
@@ -3071,8 +3245,8 @@ icss-utils@^2.1.0:
     postcss "^6.0.1"
 
 ieee754@^1.1.4:
-  version "1.1.12"
-  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
+  version "1.1.13"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
 
 iferr@^0.1.5:
   version "0.1.5"
@@ -3098,6 +3272,13 @@ import-cwd@^2.0.0:
   dependencies:
     import-from "^2.1.0"
 
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
 import-from@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
@@ -3143,10 +3324,10 @@ ini@~1.3.0:
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
 
 internal-ip@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.2.0.tgz#46e81b638d84c338e5c67e42b1a17db67d0814fa"
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
   dependencies:
-    default-gateway "^4.0.1"
+    default-gateway "^4.2.0"
     ipaddr.js "^1.9.0"
 
 invariant@^2.2.2:
@@ -3167,11 +3348,7 @@ ip@^1.1.0, ip@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
 
-ipaddr.js@1.8.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
-
-ipaddr.js@^1.9.0:
+ipaddr.js@1.9.0, ipaddr.js@^1.9.0:
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
 
@@ -3195,6 +3372,10 @@ is-arrayish@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
 
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+
 is-binary-path@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
@@ -3215,6 +3396,17 @@ is-ci@^1.1.0:
   dependencies:
     ci-info "^1.5.0"
 
+is-color-stop@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+  dependencies:
+    css-color-names "^0.0.4"
+    hex-color-regex "^1.1.0"
+    hsl-regex "^1.0.0"
+    hsla-regex "^1.0.0"
+    rgb-regex "^1.0.1"
+    rgba-regex "^1.0.0"
+
 is-data-descriptor@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -3282,8 +3474,8 @@ is-glob@^3.1.0:
     is-extglob "^2.1.0"
 
 is-glob@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
   dependencies:
     is-extglob "^2.1.1"
 
@@ -3293,21 +3485,25 @@ is-number@^3.0.0:
   dependencies:
     kind-of "^3.0.2"
 
-is-path-cwd@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
+is-obj@^1.0.0:
   version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-path-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c"
+
+is-path-in-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
   dependencies:
-    is-path-inside "^1.0.0"
+    is-path-inside "^2.1.0"
 
-is-path-inside@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+is-path-inside@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
   dependencies:
-    path-is-inside "^1.0.1"
+    path-is-inside "^1.0.2"
 
 is-plain-obj@^1.0.0:
   version "1.1.0"
@@ -3325,6 +3521,10 @@ is-regex@^1.0.4:
   dependencies:
     has "^1.0.1"
 
+is-resolvable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+
 is-stream@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -3335,6 +3535,12 @@ is-svg@^2.0.0:
   dependencies:
     html-comment-regex "^1.1.0"
 
+is-svg@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+  dependencies:
+    html-comment-regex "^1.1.0"
+
 is-symbol@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
@@ -3399,9 +3605,9 @@ js-tokens@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
 
-js-yaml@^3.11.0, js-yaml@^3.9.0:
-  version "3.12.2"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc"
+js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.0:
+  version "3.13.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
   dependencies:
     argparse "^1.0.7"
     esprima "^4.0.0"
@@ -3476,7 +3682,7 @@ jsprim@^1.2.2:
     json-schema "0.2.3"
     verror "1.10.0"
 
-killable@^1.0.0:
+killable@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
 
@@ -3615,7 +3821,7 @@ log-update@^2.3.0:
     cli-cursor "^2.0.0"
     wrap-ansi "^3.0.1"
 
-loglevel@^1.4.1:
+loglevel@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
 
@@ -3648,6 +3854,13 @@ make-dir@^1.0.0:
   dependencies:
     pify "^3.0.0"
 
+make-dir@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+  dependencies:
+    pify "^4.0.1"
+    semver "^5.6.0"
+
 mamacro@^0.0.3:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
@@ -3708,6 +3921,10 @@ md5.js@^1.3.4:
     inherits "^2.0.1"
     safe-buffer "^5.1.2"
 
+mdn-data@~1.1.0:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
+
 mdurl@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
@@ -3721,11 +3938,11 @@ medium-zoom@^0.4.0:
   resolved "https://registry.yarnpkg.com/medium-zoom/-/medium-zoom-0.4.0.tgz#8e13c9b754903c0c903220611af0d3cd373a4222"
 
 mem@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a"
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
   dependencies:
     map-age-cleaner "^0.1.1"
-    mimic-fn "^1.0.0"
+    mimic-fn "^2.0.0"
     p-is-promise "^2.0.0"
 
 memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
@@ -3778,28 +3995,32 @@ miller-rabin@^4.0.0:
     bn.js "^4.0.0"
     brorand "^1.0.1"
 
-"mime-db@>= 1.38.0 < 2", mime-db@~1.38.0:
-  version "1.38.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
+"mime-db@>= 1.38.0 < 2", mime-db@~1.39.0:
+  version "1.39.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.39.0.tgz#f95a20275742f7d2ad0429acfe40f4233543780e"
 
 mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19:
-  version "2.1.22"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
+  version "2.1.23"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.23.tgz#d4eacd87de99348a6858fe1e479aad877388d977"
   dependencies:
-    mime-db "~1.38.0"
+    mime-db "~1.39.0"
 
 mime@1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
 
 mime@^2.0.3, mime@^2.3.1:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6"
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78"
 
 mimic-fn@^1.0.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
 
+mimic-fn@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+
 min-document@^2.19.0:
   version "2.19.0"
   resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
@@ -3926,9 +4147,9 @@ multicast-dns@^6.0.1:
     dns-packet "^1.3.1"
     thunky "^1.0.2"
 
-nan@^2.9.2:
-  version "2.12.1"
-  resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
+nan@^2.12.1:
+  version "2.13.2"
+  resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
 
 nanomatch@^1.2.9:
   version "1.2.13"
@@ -3947,10 +4168,10 @@ nanomatch@^1.2.9:
     to-regex "^3.0.1"
 
 needle@^2.2.1:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.0.tgz#ce3fea21197267bacb310705a7bbe24f2a3a3492"
   dependencies:
-    debug "^2.1.2"
+    debug "^4.1.0"
     iconv-lite "^0.4.4"
     sax "^1.2.4"
 
@@ -4004,9 +4225,9 @@ node-libs-browser@^2.0.0:
     util "^0.11.0"
     vm-browserify "0.0.4"
 
-node-pre-gyp@^0.10.0:
-  version "0.10.3"
-  resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
+node-pre-gyp@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
   dependencies:
     detect-libc "^1.0.2"
     mkdirp "^0.5.1"
@@ -4019,9 +4240,9 @@ node-pre-gyp@^0.10.0:
     semver "^5.3.0"
     tar "^4"
 
-node-releases@^1.1.8:
-  version "1.1.10"
-  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.10.tgz#5dbeb6bc7f4e9c85b899e2e7adcc0635c9b2adf7"
+node-releases@^1.1.14:
+  version "1.1.15"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.15.tgz#9e76a73b0eca3bf7801addaa0e6ce90c795f2b9a"
   dependencies:
     semver "^5.3.0"
 
@@ -4061,6 +4282,10 @@ normalize-url@^1.4.0:
     query-string "^4.1.0"
     sort-keys "^1.0.0"
 
+normalize-url@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+
 npm-bundled@^1.0.1:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
@@ -4091,7 +4316,7 @@ nprogress@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
 
-nth-check@~1.0.1:
+nth-check@^1.0.2, nth-check@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
   dependencies:
@@ -4122,8 +4347,8 @@ object-copy@^0.1.0:
     kind-of "^3.0.3"
 
 object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032"
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
 
 object-visit@^1.0.0:
   version "1.0.1"
@@ -4153,6 +4378,15 @@ object.pick@^1.3.0:
   dependencies:
     isobject "^3.0.1"
 
+object.values@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.12.0"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
 obuf@^1.0.0, obuf@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
@@ -4163,7 +4397,7 @@ on-finished@~2.3.0:
   dependencies:
     ee-first "1.1.1"
 
-on-headers@~1.0.1:
+on-headers@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
 
@@ -4179,17 +4413,17 @@ onetime@^2.0.0:
   dependencies:
     mimic-fn "^1.0.0"
 
-opn@^5.1.0:
-  version "5.4.0"
-  resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
+opn@^5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
   dependencies:
     is-wsl "^1.1.0"
 
-optimize-css-assets-webpack-plugin@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.3.tgz#4f714e276b279700892c4a6202b7e22812d6f683"
+optimize-css-assets-webpack-plugin@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159"
   dependencies:
-    cssnano "^3.10.0"
+    cssnano "^4.1.0"
     last-call-webpack-plugin "^3.0.0"
 
 original@^1.0.0:
@@ -4234,8 +4468,8 @@ p-finally@^1.0.0:
   resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
 
 p-is-promise@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5"
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
 
 p-limit@^1.0.0, p-limit@^1.1.0:
   version "1.3.0"
@@ -4261,17 +4495,17 @@ p-locate@^3.0.0:
   dependencies:
     p-limit "^2.0.0"
 
-p-map@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+p-map@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
 
 p-try@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
 
 p-try@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
 
 pako@~1.0.5:
   version "1.0.10"
@@ -4310,8 +4544,8 @@ parse-json@^4.0.0:
     json-parse-better-errors "^1.0.1"
 
 parseurl@~1.3.2:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
 
 pascalcase@^0.1.1:
   version "0.1.1"
@@ -4333,7 +4567,7 @@ path-is-absolute@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
 
-path-is-inside@^1.0.1:
+path-is-inside@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
 
@@ -4377,6 +4611,10 @@ pify@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
 
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+
 pinkie-promise@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@@ -4399,7 +4637,7 @@ pkg-dir@^3.0.0:
   dependencies:
     find-up "^3.0.0"
 
-portfinder@^1.0.13, portfinder@^1.0.9:
+portfinder@^1.0.13, portfinder@^1.0.20:
   version "1.0.20"
   resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a"
   dependencies:
@@ -4419,6 +4657,15 @@ postcss-calc@^5.2.0:
     postcss-message-helpers "^2.0.0"
     reduce-css-calc "^1.2.6"
 
+postcss-calc@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436"
+  dependencies:
+    css-unit-converter "^1.1.1"
+    postcss "^7.0.5"
+    postcss-selector-parser "^5.0.0-rc.4"
+    postcss-value-parser "^3.3.1"
+
 postcss-colormin@^2.1.8:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
@@ -4427,6 +4674,16 @@ postcss-colormin@^2.1.8:
     postcss "^5.0.13"
     postcss-value-parser "^3.2.3"
 
+postcss-colormin@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+  dependencies:
+    browserslist "^4.0.0"
+    color "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-convert-values@^2.3.4:
   version "2.6.1"
   resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
@@ -4434,30 +4691,61 @@ postcss-convert-values@^2.3.4:
     postcss "^5.0.11"
     postcss-value-parser "^3.1.2"
 
+postcss-convert-values@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-discard-comments@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
   dependencies:
     postcss "^5.0.14"
 
+postcss-discard-comments@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+  dependencies:
+    postcss "^7.0.0"
+
 postcss-discard-duplicates@^2.0.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
   dependencies:
     postcss "^5.0.4"
 
+postcss-discard-duplicates@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+  dependencies:
+    postcss "^7.0.0"
+
 postcss-discard-empty@^2.0.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
   dependencies:
     postcss "^5.0.14"
 
+postcss-discard-empty@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+  dependencies:
+    postcss "^7.0.0"
+
 postcss-discard-overridden@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
   dependencies:
     postcss "^5.0.16"
 
+postcss-discard-overridden@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+  dependencies:
+    postcss "^7.0.0"
+
 postcss-discard-unused@^2.2.1:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
@@ -4501,6 +4789,15 @@ postcss-merge-longhand@^2.0.1:
   dependencies:
     postcss "^5.0.4"
 
+postcss-merge-longhand@^4.0.11:
+  version "4.0.11"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+  dependencies:
+    css-color-names "0.0.4"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    stylehacks "^4.0.0"
+
 postcss-merge-rules@^2.0.3:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
@@ -4511,6 +4808,17 @@ postcss-merge-rules@^2.0.3:
     postcss-selector-parser "^2.2.2"
     vendors "^1.0.0"
 
+postcss-merge-rules@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    cssnano-util-same-parent "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+    vendors "^1.0.0"
+
 postcss-message-helpers@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
@@ -4523,6 +4831,13 @@ postcss-minify-font-values@^1.0.2:
     postcss "^5.0.4"
     postcss-value-parser "^3.0.2"
 
+postcss-minify-font-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-minify-gradients@^1.0.1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
@@ -4530,6 +4845,15 @@ postcss-minify-gradients@^1.0.1:
     postcss "^5.0.12"
     postcss-value-parser "^3.3.0"
 
+postcss-minify-gradients@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    is-color-stop "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-minify-params@^1.0.4:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
@@ -4539,6 +4863,17 @@ postcss-minify-params@^1.0.4:
     postcss-value-parser "^3.0.2"
     uniqs "^2.0.0"
 
+postcss-minify-params@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+  dependencies:
+    alphanum-sort "^1.0.0"
+    browserslist "^4.0.0"
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    uniqs "^2.0.0"
+
 postcss-minify-selectors@^2.0.4:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
@@ -4548,6 +4883,15 @@ postcss-minify-selectors@^2.0.4:
     postcss "^5.0.14"
     postcss-selector-parser "^2.0.0"
 
+postcss-minify-selectors@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+  dependencies:
+    alphanum-sort "^1.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
 postcss-modules-extract-imports@^1.2.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
@@ -4581,6 +4925,62 @@ postcss-normalize-charset@^1.1.0:
   dependencies:
     postcss "^5.0.5"
 
+postcss-normalize-charset@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+  dependencies:
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-normalize-url@^3.0.7:
   version "3.0.8"
   resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
@@ -4590,6 +4990,22 @@ postcss-normalize-url@^3.0.7:
     postcss "^5.0.14"
     postcss-value-parser "^3.2.3"
 
+postcss-normalize-url@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+  dependencies:
+    is-absolute-url "^2.0.0"
+    normalize-url "^3.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-ordered-values@^2.1.0:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
@@ -4597,6 +5013,14 @@ postcss-ordered-values@^2.1.0:
     postcss "^5.0.4"
     postcss-value-parser "^3.0.1"
 
+postcss-ordered-values@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-reduce-idents@^2.2.2:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
@@ -4610,6 +5034,15 @@ postcss-reduce-initial@^1.0.0:
   dependencies:
     postcss "^5.0.4"
 
+postcss-reduce-initial@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+
 postcss-reduce-transforms@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
@@ -4618,6 +5051,21 @@ postcss-reduce-transforms@^1.0.3:
     postcss "^5.0.8"
     postcss-value-parser "^3.0.1"
 
+postcss-reduce-transforms@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-safe-parser@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea"
+  dependencies:
+    postcss "^7.0.0"
+
 postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
@@ -4626,7 +5074,15 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
     indexes-of "^1.0.1"
     uniq "^1.0.1"
 
-postcss-selector-parser@^5.0.0:
+postcss-selector-parser@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
+  dependencies:
+    dot-prop "^4.1.1"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.4:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
   dependencies:
@@ -4643,6 +5099,15 @@ postcss-svgo@^2.1.1:
     postcss-value-parser "^3.2.3"
     svgo "^0.7.0"
 
+postcss-svgo@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+  dependencies:
+    is-svg "^3.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    svgo "^1.0.0"
+
 postcss-unique-selectors@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
@@ -4651,7 +5116,15 @@ postcss-unique-selectors@^2.0.2:
     postcss "^5.0.4"
     uniqs "^2.0.0"
 
-postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+postcss-unique-selectors@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+  dependencies:
+    alphanum-sort "^1.0.0"
+    postcss "^7.0.0"
+    uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
 
@@ -4680,7 +5153,7 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.17:
     source-map "^0.6.1"
     supports-color "^5.4.0"
 
-postcss@^7.0.14:
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5:
   version "7.0.14"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5"
   dependencies:
@@ -4708,8 +5181,8 @@ pretty-time@^1.1.0:
   resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
 
 prismjs@^1.13.0:
-  version "1.15.0"
-  resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9"
+  version "1.16.0"
+  resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.16.0.tgz#406eb2c8aacb0f5f0f1167930cb83835d10a4308"
   optionalDependencies:
     clipboard "^2.0.0"
 
@@ -4734,11 +5207,11 @@ promise-inflight@^1.0.1:
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
 
 proxy-addr@~2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
   dependencies:
     forwarded "~0.1.2"
-    ipaddr.js "1.8.0"
+    ipaddr.js "1.9.0"
 
 prr@~1.0.1:
   version "1.0.1"
@@ -4821,8 +5294,8 @@ querystring@0.2.0:
   resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
 
 querystringify@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef"
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
 
 randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
   version "2.1.0"
@@ -4872,8 +5345,8 @@ rc@^1.2.7:
     util-deprecate "~1.0.1"
 
 readable-stream@^3.0.6, readable-stream@^3.1.1:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d"
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9"
   dependencies:
     inherits "^2.0.3"
     string_decoder "^1.1.1"
@@ -4907,9 +5380,9 @@ reduce@^1.0.1:
   dependencies:
     object-keys "^1.1.0"
 
-regenerate-unicode-properties@^8.0.1:
-  version "8.0.1"
-  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.1.tgz#58a4a74e736380a7ab3c5f7e03f303a941b31289"
+regenerate-unicode-properties@^8.0.2:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662"
   dependencies:
     regenerate "^1.4.0"
 
@@ -4917,9 +5390,9 @@ regenerate@^1.2.1, regenerate@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
 
-regenerator-runtime@^0.12.0:
-  version "0.12.1"
-  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
+regenerator-runtime@^0.13.2:
+  version "0.13.2"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
 
 regenerator-transform@^0.13.4:
   version "0.13.4"
@@ -4946,12 +5419,12 @@ regexpu-core@^1.0.0:
     regjsgen "^0.2.0"
     regjsparser "^0.1.4"
 
-regexpu-core@^4.1.3, regexpu-core@^4.2.0:
-  version "4.5.3"
-  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.3.tgz#72f572e03bb8b9f4f4d895a0ccc57e707f4af2e4"
+regexpu-core@^4.5.4:
+  version "4.5.4"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae"
   dependencies:
     regenerate "^1.4.0"
-    regenerate-unicode-properties "^8.0.1"
+    regenerate-unicode-properties "^8.0.2"
     regjsgen "^0.5.0"
     regjsparser "^0.6.0"
     unicode-match-property-ecmascript "^1.0.4"
@@ -5075,7 +5548,15 @@ ret@~0.1.10:
   version "0.1.15"
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
 
-rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
+rgb-regex@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+
+rgba-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
   dependencies:
@@ -5112,7 +5593,7 @@ sax@0.5.x:
   version "0.5.8"
   resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
 
-sax@^1.2.4, sax@~1.2.1:
+sax@^1.2.4, sax@~1.2.1, sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
 
@@ -5146,15 +5627,19 @@ select@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
 
-selfsigned@^1.9.1:
+selfsigned@^1.10.4:
   version "1.10.4"
   resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
   dependencies:
     node-forge "0.7.5"
 
 semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
-  version "5.6.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+  version "5.7.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
+
+semver@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65"
 
 send@0.16.2:
   version "0.16.2"
@@ -5175,10 +5660,10 @@ send@0.16.2:
     statuses "~1.4.0"
 
 serialize-javascript@^1.3.0, serialize-javascript@^1.4.0:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879"
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
 
-serve-index@^1.7.2:
+serve-index@^1.9.1:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
   dependencies:
@@ -5250,6 +5735,12 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
 
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+  dependencies:
+    is-arrayish "^0.3.1"
+
 sitemap@^2.0.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-2.1.0.tgz#1633cb88c196d755ad94becfb1c1bcacc6d3425a"
@@ -5334,8 +5825,8 @@ source-map-resolve@^0.5.0:
     urix "^0.1.0"
 
 source-map-support@~0.5.10:
-  version "0.5.10"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
+  version "0.5.12"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
   dependencies:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
@@ -5419,6 +5910,10 @@ ssri@^6.0.1:
   dependencies:
     figgy-pudding "^3.5.1"
 
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+
 stack-utils@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
@@ -5527,6 +6022,14 @@ strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
 
+stylehacks@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
 stylus-loader@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6"
@@ -5584,6 +6087,25 @@ svgo@^0.7.0:
     sax "~1.2.1"
     whet.extend "~0.9.9"
 
+svgo@^1.0.0:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316"
+  dependencies:
+    chalk "^2.4.1"
+    coa "^2.0.2"
+    css-select "^2.0.0"
+    css-select-base-adapter "^0.1.1"
+    css-tree "1.0.0-alpha.28"
+    css-url-regex "^1.1.0"
+    csso "^3.5.1"
+    js-yaml "^3.13.1"
+    mkdirp "~0.5.1"
+    object.values "^1.1.0"
+    sax "~1.2.4"
+    stable "^0.1.8"
+    unquote "~1.1.1"
+    util.promisify "~1.0.0"
+
 table@^4.0.3:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
@@ -5596,8 +6118,8 @@ table@^4.0.3:
     string-width "^2.1.1"
 
 tapable@^1.0.0, tapable@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e"
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
 
 tar@^4:
   version "4.4.8"
@@ -5653,6 +6175,10 @@ timers-browserify@^2.0.4:
   dependencies:
     setimmediate "^1.0.4"
 
+timsort@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+
 tiny-emitter@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
@@ -5744,10 +6270,10 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
   resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
 
 uglify-js@3.4.x:
-  version "3.4.9"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+  version "3.4.10"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
   dependencies:
-    commander "~2.17.1"
+    commander "~2.19.0"
     source-map "~0.6.1"
 
 unicode-canonical-property-names-ecmascript@^1.0.4:
@@ -5806,6 +6332,10 @@ unpipe@1.0.0, unpipe@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
 
+unquote@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+
 unset-value@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@@ -5813,7 +6343,7 @@ unset-value@^1.0.0:
     has-value "^0.3.1"
     isobject "^3.0.0"
 
-upath@^1.1.0:
+upath@^1.1.0, upath@^1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
 
@@ -5844,8 +6374,8 @@ url-loader@^1.0.1:
     schema-utils "^1.0.0"
 
 url-parse@^1.4.3:
-  version "1.4.4"
-  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8"
+  version "1.4.6"
+  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.6.tgz#baf91d6e6783c8a795eb476892ffef2737fc0456"
   dependencies:
     querystringify "^2.0.0"
     requires-port "^1.0.0"
@@ -5865,7 +6395,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
 
-util.promisify@1.0.0, util.promisify@^1.0.0:
+util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
   dependencies:
@@ -5933,12 +6463,12 @@ vue-loader@^15.2.4:
     vue-style-loader "^4.1.0"
 
 vue-router@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be"
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.6.tgz#2e4f0f9cbb0b96d0205ab2690cfe588935136ac3"
 
 vue-server-renderer@^2.5.16:
-  version "2.6.8"
-  resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.8.tgz#7f191eede16778d96916f2f9199efa781fd30879"
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.10.tgz#cb2558842ead360ae2ec1f3719b75564a805b375"
   dependencies:
     chalk "^1.1.3"
     hash-sum "^1.0.2"
@@ -5957,8 +6487,8 @@ vue-style-loader@^4.1.0:
     loader-utils "^1.0.2"
 
 vue-template-compiler@^2.5.16:
-  version "2.6.8"
-  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.8.tgz#750802604595134775b9c53141b9850b35255e1c"
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc"
   dependencies:
     de-indent "^1.0.2"
     he "^1.1.0"
@@ -5968,8 +6498,8 @@ vue-template-es2015-compiler@^1.9.0:
   resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
 
 vue@^2.5.16:
-  version "2.6.8"
-  resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.8.tgz#f21cbc536bfc14f7d1d792a137bb12f69e60ea91"
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637"
 
 vuepress-html-webpack-plugin@^3.2.0:
   version "3.2.0"
@@ -5983,18 +6513,28 @@ vuepress-html-webpack-plugin@^3.2.0:
     toposort "^1.0.0"
     util.promisify "1.0.0"
 
+vuepress-plugin-clean-urls@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/vuepress-plugin-clean-urls/-/vuepress-plugin-clean-urls-1.0.3.tgz#87ef2349d6d1f835dc2519abeb0cb99ccf1698a5"
+
+vuepress-plugin-container@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/vuepress-plugin-container/-/vuepress-plugin-container-2.0.1.tgz#b20ef97dd91f137c8be119460927c5ffd64e0f77"
+  dependencies:
+    markdown-it-container "^2.0.0"
+
 vuepress-plugin-sitemap@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/vuepress-plugin-sitemap/-/vuepress-plugin-sitemap-2.1.1.tgz#9cf7144ba5b2e92071e80bcf47e7f115d4600d62"
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/vuepress-plugin-sitemap/-/vuepress-plugin-sitemap-2.1.2.tgz#18c61b6349055be2051dedd0eddfb4c7dc69cd7f"
   dependencies:
     sitemap "^2.0.1"
 
-vuepress@^1.0.0-alpha.44:
-  version "1.0.0-alpha.44"
-  resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.0.0-alpha.44.tgz#044048047651f7e8890d48886e97f2ad5eb5ddea"
+vuepress@^1.0.0-alpha.47:
+  version "1.0.0-alpha.47"
+  resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.0.0-alpha.47.tgz#b6f06a5569aaf0b4016f9eb1da5fd4e01f295d45"
   dependencies:
-    "@vuepress/core" "^1.0.0-alpha.44"
-    "@vuepress/theme-default" "^1.0.0-alpha.44"
+    "@vuepress/core" "^1.0.0-alpha.47"
+    "@vuepress/theme-default" "^1.0.0-alpha.47"
     cac "^6.3.9"
 
 watchpack@^1.5.0:
@@ -6018,9 +6558,9 @@ webpack-chain@^4.6.0, webpack-chain@^4.9.0:
     deepmerge "^1.5.2"
     javascript-stringify "^1.6.0"
 
-webpack-dev-middleware@^3.5.1:
-  version "3.6.1"
-  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz#91f2531218a633a99189f7de36045a331a4b9cd4"
+webpack-dev-middleware@^3.6.2:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz#f37a27ad7c09cd7dc67cd97655413abaa1f55942"
   dependencies:
     memory-fs "^0.4.1"
     mime "^2.3.1"
@@ -6028,39 +6568,39 @@ webpack-dev-middleware@^3.5.1:
     webpack-log "^2.0.0"
 
 webpack-dev-server@^3.1.14:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz#1b45ce3ecfc55b6ebe5e36dab2777c02bc508c4e"
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz#7046e49ded5c1255a82c5d942bcdda552b72a62d"
   dependencies:
     ansi-html "0.0.7"
     bonjour "^3.5.0"
-    chokidar "^2.0.0"
-    compression "^1.5.2"
-    connect-history-api-fallback "^1.3.0"
+    chokidar "^2.1.5"
+    compression "^1.7.4"
+    connect-history-api-fallback "^1.6.0"
     debug "^4.1.1"
-    del "^3.0.0"
-    express "^4.16.2"
-    html-entities "^1.2.0"
+    del "^4.1.0"
+    express "^4.16.4"
+    html-entities "^1.2.1"
     http-proxy-middleware "^0.19.1"
     import-local "^2.0.0"
     internal-ip "^4.2.0"
     ip "^1.1.5"
-    killable "^1.0.0"
-    loglevel "^1.4.1"
-    opn "^5.1.0"
-    portfinder "^1.0.9"
+    killable "^1.0.1"
+    loglevel "^1.6.1"
+    opn "^5.5.0"
+    portfinder "^1.0.20"
     schema-utils "^1.0.0"
-    selfsigned "^1.9.1"
-    semver "^5.6.0"
-    serve-index "^1.7.2"
+    selfsigned "^1.10.4"
+    semver "^6.0.0"
+    serve-index "^1.9.1"
     sockjs "0.3.19"
     sockjs-client "1.3.0"
     spdy "^4.0.0"
-    strip-ansi "^3.0.0"
+    strip-ansi "^3.0.1"
     supports-color "^6.1.0"
     url "^0.11.0"
-    webpack-dev-middleware "^3.5.1"
+    webpack-dev-middleware "^3.6.2"
     webpack-log "^2.0.0"
-    yargs "12.0.2"
+    yargs "12.0.5"
 
 webpack-log@^2.0.0:
   version "2.0.0"
@@ -6083,8 +6623,8 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0:
     source-map "~0.6.1"
 
 webpack@^4.8.1:
-  version "4.29.6"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955"
+  version "4.30.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.30.0.tgz#aca76ef75630a22c49fcc235b39b4c57591d33a9"
   dependencies:
     "@webassemblyjs/ast" "1.8.5"
     "@webassemblyjs/helper-module-context" "1.8.5"
@@ -6189,10 +6729,6 @@ xmlbuilder@^10.0.0:
   version "10.1.1"
   resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0"
 
-xregexp@4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
-
 xtend@^4.0.0, xtend@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -6209,18 +6745,19 @@ yallist@^3.0.0, yallist@^3.0.2:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
 
-yargs-parser@^10.1.0:
-  version "10.1.0"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+yargs-parser@^11.1.1:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
   dependencies:
-    camelcase "^4.1.0"
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
 
-yargs@12.0.2:
-  version "12.0.2"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc"
+yargs@12.0.5:
+  version "12.0.5"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
   dependencies:
     cliui "^4.0.0"
-    decamelize "^2.0.0"
+    decamelize "^1.2.0"
     find-up "^3.0.0"
     get-caller-file "^1.0.1"
     os-locale "^3.0.0"
@@ -6230,7 +6767,7 @@ yargs@12.0.2:
     string-width "^2.0.0"
     which-module "^2.0.0"
     y18n "^3.2.1 || ^4.0.0"
-    yargs-parser "^10.1.0"
+    yargs-parser "^11.1.1"
 
 zepto@^1.2.0:
   version "1.2.0"

From 7a3b905f0baa1dcf372b388109193bbdbdfb3dbb Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Sat, 20 Apr 2019 20:01:36 +0300
Subject: [PATCH 6/9] content (HTTP): update with latest Onyx release

Closes #4, thanks @wontruefree
---
 http/README.md          |  4 ++--
 http/channels.md        |  6 +++---
 http/endpoints.md       |  8 ++++----
 http/errors.md          | 34 +++++++++++++++++-----------------
 http/getting-started.md | 21 ++++++++++++---------
 http/headers.md         |  2 +-
 http/routing.md         | 36 ++++++++++++++++++++++++++++--------
 http/views.md           | 16 ++++++++--------
 8 files changed, 75 insertions(+), 52 deletions(-)

diff --git a/http/README.md b/http/README.md
index 5a406bf..651bdb6 100644
--- a/http/README.md
+++ b/http/README.md
@@ -10,10 +10,10 @@ To install Onyx::HTTP, you'll need to add both `"onyx"` and `"onyx-http"` into y
 dependencies:
   onyx:
     github: onyxframework/onyx
-    version: ~> 0.3.0
+    version: ~> 0.4.0
   onyx-http:
     github: onyxframework/http
-    version: ~> 0.7.0
+    version: ~> 0.8.0
 ```
 
 Then, in your application code:
diff --git a/http/channels.md b/http/channels.md
index 55de33e..fd04718 100644
--- a/http/channels.md
+++ b/http/channels.md
@@ -24,11 +24,11 @@ class Echo
   end
 end
 
-Onyx.ws "/echo", Echo
+Onyx::HTTP.ws "/echo", Echo
 ```
 
 ```sh
-> wscat http://localhost:5000/echo
+> wscat --connect http://localhost:5000/echo
 < Hello
 > Foo
 < Foo
@@ -95,5 +95,5 @@ class ProtectedEcho
   end
 end
 
-Onyx.ws "/echo/:room", ProtectedEcho
+Onyx::HTTP.ws "/echo/:room", ProtectedEcho
 ```
diff --git a/http/endpoints.md b/http/endpoints.md
index 530c906..263f51d 100644
--- a/http/endpoints.md
+++ b/http/endpoints.md
@@ -25,7 +25,7 @@ struct RandomUser
   end
 end
 
-Onyx.get "/random_user", RandomUser
+Onyx::HTTP.get "/random_user", RandomUser
 ```
 
 ## Call
@@ -181,7 +181,7 @@ end
 In this example we've defined a *path parameter* named `id`. The endpoint would parse it from an incoming request's URI (in fact, it is parsed by the router internally, not the action itself). The route should look like this:
 
 ```crystal
-Onyx.get "/users/:id", GetUser
+Onyx::HTTP.get "/users/:id", GetUser
 ```
 
 Note the `:id` part. This is a *path parameter*. When doing a `GET /users/42/` request, the `id` equals to `42`. Therefore this line would print `42`:
@@ -312,7 +312,7 @@ struct CreateUser
   end
 end
 
-Onyx.post "/users", CreateUser
+Onyx::HTTP.post "/users", CreateUser
 ```
 
 ```sh
@@ -438,7 +438,7 @@ struct GetPost
   end
 end
 
-Onyx.get "/posts/:id", GetPost
+Onyx::HTTP.get "/posts/:id", GetPost
 ```
 
 In this case, `PostNotFound` is `< Onyx::HTTP::Error(404)`. Onyx renders the error properly:
diff --git a/http/errors.md b/http/errors.md
index 367b2c1..11bcb22 100644
--- a/http/errors.md
+++ b/http/errors.md
@@ -9,11 +9,11 @@ Whenever you experience an unhandled exception, it will be properly rescued by O
 ```crystal
 require "onyx/http"
 
-Onyx.get "/" do
+Onyx::HTTP.get "/" do
   1 / 0
 end
 
-Onyx.listen
+Onyx::HTTP.listen
 ```
 
 First of all, you'll see this error in your console log:
@@ -51,13 +51,13 @@ The error would also be pretty printed in JSON:
 
 ```sh
 > curl localhost:5000 -H "Accept: application/json"
-{  
-  "error":{  
+{
+  "error":{
     "name": "Division By Zero Error",
     "message": "Division by 0",
     "code": 500,
-    "payload": {  
-      "backtrace": [  
+    "payload": {
+      "backtrace": [
         "/usr/share/crystal/src/int.cr:155:5 in 'check_div_argument'",
         "..."
       ]
@@ -70,8 +70,8 @@ And in production mode:
 
 ```sh
 > curl localhost:5000 -H "Accept: application/json"
-{  
-  "error": {  
+{
+  "error": {
     "name": "Internal Server Error",
     "message": null,
     "code": 500,
@@ -85,8 +85,8 @@ And in production mode:
 Most of the time you'll have so called *expected* errors in your application. For example, when a user cannot be found by ID provided as path param, a 404 HTTP error should be returned. You can print such a error manually into the response like this:
 
 ```crystal
-Onyx.get "/users/:id" do |env|
-  user? = Onyx.query(User.where(id: env.request.path_params["id"].to_i)).first?
+Onyx::HTTP.get "/users/:id" do |env|
+  user? = Onyx::SQL.query(User.where(id: env.request.path_params["id"].to_i)).first?
 
   if user = user?
     return Views::User.new(user)
@@ -102,8 +102,8 @@ But what about rendering this error in JSON or HTML? For better control flow and
 class UserNotFound < Onyx::HTTP::Error(404)
 end
 
-Onyx.get "/users/:id" do |env|
-  user = Onyx.query(User.where(id: env.request.path_params["id"].to_i)).first?
+Onyx::HTTP.get "/users/:id" do |env|
+  user = Onyx::SQL.query(User.where(id: env.request.path_params["id"].to_i)).first?
   raise UserNotFound.new unless user
 
   return Views::User.new(user)
@@ -146,10 +146,10 @@ class UserNotFound < Onyx::HTTP::Error(404)
   end
 end
 
-Onyx.get "/users/:id" do |env|
+Onyx::HTTP.get "/users/:id" do |env|
   id = env.request.path_params["id"].to_i
 
-  user = Onyx.query(User.where(id: id)).first?
+  user = Onyx::SQL.query(User.where(id: id)).first?
   raise UserNotFound.new(id) unless user
 
   return Views::User.new(user)
@@ -163,12 +163,12 @@ end
 
 ```sh
 > curl localhost:5000/users/42 -H "Accept: application/json"
-{  
-  "error": {  
+{
+  "error": {
     "name": "User Not Found",
     "message": "User not found with ID 42",
     "code": 404,
-    "payload": {  
+    "payload": {
       "id": 42
     }
   }
diff --git a/http/getting-started.md b/http/getting-started.md
index 646fcb7..c3ed986 100644
--- a/http/getting-started.md
+++ b/http/getting-started.md
@@ -24,10 +24,10 @@ To use Onyx Framework, you'll need [Crystal](https://crystal-lang.org) installed
 dependencies:
   onyx:
     github: onyxframework/onyx
-    version: ~> 0.3.0
+    version: ~> 0.4.0
   onyx-http:
     github: onyxframework/http
-    version: ~> 0.7.0
+    version: ~> 0.8.0
 ```
 
 3. Run this command to install the dependencies:
@@ -41,11 +41,11 @@ dependencies:
 ```crystal
 require "onyx/http"
 
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   env.response << "Hello, Onyx!"
 end
 
-Onyx.listen
+Onyx::HTTP.listen
 ```
 
 5. Launch the server:
@@ -89,11 +89,11 @@ end
 require "onyx/http"
 require "./hello-view"
 
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   HelloView.new("Onyx")
 end
 
-Onyx.listen
+Onyx::HTTP.listen
 ```
 
 3. Test the endpoint again:
@@ -113,11 +113,11 @@ Let's add a simple echo websocket to our application.
 require "onyx/http"
 require "./hello-view"
 
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   HelloView.new("Onyx")
 end
 
-Onyx.ws "/" do |socket, env|
+Onyx::HTTP.ws "/" do |socket, env|
   socket.send("Hello!")
   socket.on_message do |message|
     socket.send(message)
@@ -130,7 +130,10 @@ Onyx.listen
 2. Test the websocket ([wscat](https://www.npmjs.com/package/wscat) is used here):
 
 ```sh
-TODO:
+> wscat --connect localhost:5000
+> Hello!
+> ping # Your input
+< ping
 ```
 
 To continue learning about Onyx::HTTP, please visit the [Routing](/http/routing) section.
diff --git a/http/headers.md b/http/headers.md
index 5be7747..efc8c82 100644
--- a/http/headers.md
+++ b/http/headers.md
@@ -21,7 +21,7 @@ max_age = 0
 You can change these settings on the server run:
 
 ```crystal
-Onyx.listen(
+Onyx::HTTP.listen(
   cors: {
     # Will be merged with the default settings
     allow_headers: ["accept", "content-type", "authorization"]
diff --git a/http/routing.md b/http/routing.md
index 148bb7e..898cd44 100644
--- a/http/routing.md
+++ b/http/routing.md
@@ -10,13 +10,13 @@ There are methods for most HTTP verbs like `Onyx.get` and `Onyx.post`. A method
 require "onyx/http"
 
 # Will be available at GET /
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   env.response << "Hello, Onyx!"
 end
 
 # Crystal allows to omit blocks' arguments,
 # this endpoint will just return 200
-Onyx.get "/healthcheck" do
+Onyx::HTTP.get "/healthcheck" do
 end
 ```
 
@@ -24,7 +24,7 @@ end
 The proc return value is ignored unless it is a [View](/http/views). For example, this endpoint does not print anything:
 
 ```crystal
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   "Hello, Onyx!"
 end
 ```
@@ -34,7 +34,7 @@ end
 Or an [Endpoint](/http/endpoints) class:
 
 ```crystal
-Onyx.get "/", MyEndpoint
+Onyx::HTTP.get "/", MyEndpoint
 ```
 
 ## Websockets
@@ -43,7 +43,7 @@ Websockets are handled a bit differently. There is a special `Onyx.ws` method, w
 
 ```crystal
 # A simple echo endpoint, will be avaialble at ws://host:port/
-Onyx.ws "/" do |socket, env|
+Onyx::HTTP.ws "/" do |socket, env|
   socket.on_message do |message|
     socket.send(message)
   end
@@ -53,7 +53,7 @@ end
 Or a [Channel](/http/channels) class:
 
 ```crystal
-Onyx.ws "/", MyChannel
+Onyx::HTTP.ws "/", MyChannel
 ```
 
 ## Path params
@@ -61,7 +61,7 @@ Onyx.ws "/", MyChannel
 You can define path params in routes. These params will then be accessible via [`context.request.path_params`](https://api.onyxframework.org/http/HTTP/Request.html#path_params%3AHash%28String%2CString%29-instance-method) getter:
 
 ```crystal
-Onyx.get "/users/:id" do |env|
+Onyx::HTTP.get "/users/:id" do |env|
   env.response << "id = #{env.request.path_params["id"]}"
 end
 ```
@@ -73,12 +73,32 @@ id = 42
 
 Params can be safely and conveniently parsed in [Endpoints](/http/endpoints) and [Channels](/http/channels), see their docs for details.
 
+## Nested routes
+
+You can nest routes and create a tree-like structure inspired by [Roda](http://roda.jeremyevans.net/):
+
+```crystal
+Onyx::HTTP.on "/users" do |r|
+  r.post "/", Endpoints::User::Create
+  r.get "/", Endpoints::User::Index
+  r.get "/:id", Endpoints::User::Get
+
+  # Sub-nested routes!
+  r.on "/posts" do
+    r.get "/", Endpoints::Posts::ByUser
+    r.get "/:id", Endpoints::Posts::ByUserAndID
+  end
+end
+```
+
+The resulting route paths would consist of all namespaces contatenated, for example, `"GET /users/posts/:id"`.
+
 ## Request ID
 
 The request would also have an unique identifier accessible via [`context.request.id`](https://api.onyxframework.org/http/HTTP/Request.html#id-instance-method) getter:
 
 ```crystal
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   pp env.request.id # e6fa3c3e-93ce-4ad4-b480-957cb13b56eb
 end
 ```
diff --git a/http/views.md b/http/views.md
index 435225c..354802a 100644
--- a/http/views.md
+++ b/http/views.md
@@ -5,7 +5,7 @@
 To actually modify the response body, you usually print right into it, as it's being an IO:
 
 ```crystal
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   env.response << "Hello, Onyx!"
 end
 ```
@@ -26,7 +26,7 @@ struct Hello
   end
 end
 
-Onyx.get "/" do |env|
+Onyx::HTTP.get "/" do |env|
   # You can either set the response view explicitly
   env.response.view = Hello.new("Onyx")
 
@@ -87,7 +87,7 @@ struct Hello
   end
 
   # Will be rendered if `Accept` header is `text/html`
-  template "./hello.ecr.html"
+  template "./hello.html.ecr"
 
   # Will be rendered if `Accept` header is `text/plain`,
   # `*/*` or missing (i.e. fallback)
@@ -280,7 +280,7 @@ end
 Templates are rendered with [Kilt](https://github.com/jeromegn/kilt) shard. Templates have access to the view context, for example:
 
 ```erb
-<!-- ./hello.ecr.html -->
+<!-- ./hello.html.ecr -->
 <p>Hello, <%= @who %>!</p>
 ```
 
@@ -291,14 +291,14 @@ struct Hello
   def initialize(@who : String)
   end
 
-  template("./hello.ecr.html")
+  template("./hello.html.ecr")
 
   # Expands to:
   #
 
   def render_to_text_html(context)
     context.response.content_type = "text/html"
-    Kilt.render("./hello.ecr.html", context.response)
+    Kilt.render("./hello.html.ecr", context.response)
   end
 end
 ```
@@ -313,7 +313,7 @@ struct Hello
   end
 
   # `Content-Type: text/html`, `Accept: text/html`
-  template("./hello.ecr.html")
+  template("./hello.html.ecr")
 
   # `Content-Type: application/xml`, `Accept: application/xml`
   template("./hello.ecr.xml", content_type: "application/xml", accept: {"application/xml"})
@@ -323,7 +323,7 @@ struct Hello
 
   def render_to_text_html(context)
     context.response.content_type = "text/html"
-    Kilt.render("./hello.ecr.html", context.response)
+    Kilt.render("./hello.html.ecr", context.response)
   end
 
   def render_to_application_xml(context)

From 1372961b9e358ee27c3d23e11a86e6e059d7a497 Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Sat, 20 Apr 2019 20:13:21 +0300
Subject: [PATCH 7/9] content (SQL): update with latest Onyx release

---
 sql/getting-started.md | 10 +++---
 sql/query.md           | 71 ++++++++++++++++++++++++++++--------------
 2 files changed, 52 insertions(+), 29 deletions(-)

diff --git a/sql/getting-started.md b/sql/getting-started.md
index 6f03d4a..dd62468 100644
--- a/sql/getting-started.md
+++ b/sql/getting-started.md
@@ -6,13 +6,13 @@ To add the Onyx::SQL functionality into your application, you must explicitly ad
 dependencies:
   onyx:
     github: onyxframework/onyx
-    version: ~> 0.3.0
+    version: ~> 0.4.0
   onyx-sql:
     github: onyxframework/sql
-    version: ~> 0.7.0
+    version: ~> 0.8.0
   pg:
     github: will/crystal-pg
-    version: ~> 0.15.0
+    version: ~> 0.16.0
 ```
 
 Then in your Crystal code you should require both `onyx-sql` and the database shard requiring the database shard **before** the ORM:
@@ -89,14 +89,14 @@ user = User.from_rs(db.query("SELECT * FROM users WHERE id = ?", 42)).first?
 Or make use of the powerful [Repository](/sql/repository) class wrapping the DB connection and [Query](/sql/query) struct providing a convenient and type-safe way to build SQL queries:
 
 ```crystal
-user = Onyx.query(User.where(id: 42)).first?
+user = Onyx::SQL.query(User.where(id: 42)).first?
 ```
 
 With powerful joins:
 
 ```crystal
 # Fetch all posts by author named "John"
-posts = Onyx.query(Post
+posts = Onyx::SQL.query(Post
   .join(author: true) do |x|
     x.where(name: "John")
   end
diff --git a/sql/query.md b/sql/query.md
index d537f48..8ebec6e 100644
--- a/sql/query.md
+++ b/sql/query.md
@@ -15,13 +15,13 @@ Onyx::SQL includes **type-safe** SQL query builder which implements most of comm
 The builder is a `Query(T)` *struct*, for example, `Query(User)`:
 
 ```crystal
-query = Query(User).new
+query = Onyx::SQL::Query(User).new
 ```
 
 To start building the query, call some methods on it:
 
 ```crystal
-query = Query(User).new.select(:name).where(id: 42)
+query = Onyx::SQL::Query(User).new.select(:name).where(id: 42)
 ```
 
 All its methods return `self`, so the calls are chainable.
@@ -31,7 +31,7 @@ All its methods return `self`, so the calls are chainable.
 Keep in mind that `Query(T)` is a **struct**, so you must not do this:
 
 ```crystal
-query = Query(User).new.select(:name)
+query = Onyx::SQL::Query(User).new.select(:name)
 query.where(id: 42) # You're calling it on a `query` copy, not itself
 query # Doesn't have "where(id: 42)"
 ```
@@ -39,7 +39,7 @@ query # Doesn't have "where(id: 42)"
 To avoid such behaviour, either always chain the queries or do like this:
 
 ```crystal
-query = Query(User).new.select(:name)
+query = Onyx::SQL::Query(User).new.select(:name)
 query = query.where(id: 42)
 query # Actually has "where(id: 42)"
 ```
@@ -50,10 +50,10 @@ A query instance has `#build` and `#to_s` methods. The first one returns a tuple
 
 ```crystal
 # A empty query builds into a "select all" query
-Query(User).new.build == {"SELECT users.* FROM users", []}
-Query(User).new.to_s == "SELECT users.* FROM users"
+Onyx::SQL::Query(User).new.build == {"SELECT users.* FROM users", []}
+Onyx::SQL::Query(User).new.to_s == "SELECT users.* FROM users"
 
-query = Query(User).new.select(:name).where(id: 42)
+query = Onyx::SQL::Query(User).new.select(:name).where(id: 42)
 query.build == {"SELECT users.name FROM users WHERE id = ?", [42]}
 query.to_s == "SELECT users.name FROM users WHERE id = ?"
 ```
@@ -61,7 +61,7 @@ query.to_s == "SELECT users.name FROM users WHERE id = ?"
 Note that all values in SQL string are replaced with `?`. It is made to prevent SQL injections. However, in PostgreSQL variables are denoted in `$1`, `$2`, `$n` style. To build a query with PostgreSQL-type params, pass `true` option to these methods:
 
 ```crystal
-query = Query(User).new.select(:name).where(id: 42)
+query = Onyx::SQL::Query(User).new.select(:name).where(id: 42)
 query.build(true) == {"SELECT users.name FROM users WHERE id = $1", [42]}
 query.to_s(true) == "SELECT users.name FROM users WHERE id = $1"
 ```
@@ -76,7 +76,7 @@ You can use a query with raw [`DB`](http://crystal-lang.github.io/crystal-db/api
 
 ```crystal
 db = DB.open(ENV["DATABASE_URL"])
-query = Query(User).new.select(:name).where(id: 42)
+query = Onyx::SQL::Query(User).new.select(:name).where(id: 42)
 
 # We use splat, as Query#build returns a tuple of two
 user = User.from_rs(db.query(*query.build)).first?
@@ -94,17 +94,17 @@ But it is more convenient to make use of [Repository](/sql/repository), which wr
 ```crystal
 require "onyx/sql"
 
-Onyx.repo # <= This guy
+Onyx::SQL.repo # <= This guy
 
 # You can either use the `Onyx.repo` instance
-Onyx.repo.query()
-Onyx.repo.exec()
-Onyx.repo.scalar()
+Onyx::SQL.repo.query()
+Onyx::SQL.repo.exec()
+Onyx::SQL.repo.scalar()
 
 # Or better use shorcuts:
-Onyx.query()
-Onyx.exec()
-Onyx.scalar()
+Onyx::SQL.query()
+Onyx::SQL.exec()
+Onyx::SQL.scalar()
 ```
 
 ::: warning REMINDER
@@ -114,19 +114,19 @@ Remember that once you've required `"onyx/sql"`, the `DATABASE_URL` environment
 We will use the shortcut version in the examples:
 
 ```crystal
-user = Onyx.query(Query(User).new.select(:name).where(id: 42)).first?
+user = Onyx::SQL.query(Onyx::SQL::Query(User).new.select(:name).where(id: 42)).first?
 ```
 
 Great, no need to worry neither about `DB` nor about `?` and `$n`. But it looks kinda long, doesn't it? Worry not, all models include query shortcuts:
 
 ```crystal
-user = Onyx.query(User.select(:name).where(id: 42)).first?
+user = Onyx::SQL.query(User.select(:name).where(id: 42)).first?
 ```
 
 That's what we're talking about! The quality of life must be much higher right now. Of course, you can use the shortcuts outside the repository, they expand to regular `Query(T)` instances:
 
 ```crystal
-User.where(id: 42) == Query(User).new.where(id: 42)
+User.where(id: 42) == Onyx::SQL::Query(User).new.where(id: 42)
 ```
 
 ## Changeset
@@ -165,7 +165,7 @@ Use it to generate an insertion query for this model instance:
 user = User.new(name: "John")
 user.insert == User.insert(id: nil, name: "John", created_at: nil)
 
-user = Onyx.query(user.insert.returning(User)).first
+user = Onyx::SQL.query(user.insert.returning(User)).first
 pp user # <User @id=1 @name="John" created_at=<Time ...>>
 ```
 
@@ -221,7 +221,7 @@ changeset = user.changeset
 changeset.update(name: "Jake")
 
 user.update(changeset) == User.update.set(name: "Jake").where(id: 1)
-Onyx.exec(user.update(changeset))
+Onyx::SQL.exec(user.update(changeset))
 ```
 
 ::: danger UNSAFE
@@ -268,6 +268,29 @@ user.delete # NilAssetionError
 
 :::
 
+## Enumerable shortcuts
+
+You can use `#insert` and `#delete` methods on `Enumerable`s. It is particularly useful to insert or delete in bulk:
+
+```crystal
+users = [User.new(name: "John"), User.new(name: "Jake")]
+users.insert.build == {"INSERT INTO users (name) VALUES (?), (?)", ["John", "Jake"]}
+users = Onyx::SQL.query(users.insert.returning(User)) # Neat
+
+users.delete.build == {"DELETE FROM users WHERE id IN (?, ?)", [1, 2]}
+Onyx::SQL.exec(users.delete)
+```
+
+::: danger UNSAFE
+`delete` shortcut **requires** the primary key value to be set in **all** model instance, otherwise raising the [`NilAssetionError`](https://crystal-lang.org/api/0.27.2/NilAssertionError.html) in **runtime**.
+
+```crystal
+users = [User.new]
+user.delete # NilAssetionError
+```
+
+:::
+
 ## Methods
 
 Here goes a comprehensive list of all `Query(T)` methods:
@@ -523,7 +546,7 @@ You can chain `WHERE` clauses with `where_not`, `and_where`, `and_where_not`, `o
 You can join references with block, which yields a sub-query, which in turn would be merged with the main one. In the following example we query all posts from author with ID 1:
 
 ```crystal
-posts = Onyx.query(Post
+posts = Onyx::SQL.query(Post
   .join(author: true) do |x|
     x.where(id: 1)
   end
@@ -554,7 +577,7 @@ pp posts.first # #<Post @id=42, @content="Blah", @author=#<User @id=1, @name=nil
 There is no magic here, because `author_id` column is included into `posts.*`, that why the ORM updates the reference instance. If you want to fetch other author's fields, then call `select` method on the sub-query (which is in fact a `Query(User)` instance):
 
 ```crystal
-posts = Onyx.query(Post
+posts = Onyx::SQL.query(Post
   .join(author: true) do |x|
     x.select(:name)
     x.where(id: 1)
@@ -582,7 +605,7 @@ Only `where`, `select`, `join` and `order_by` methods are merged in the parent q
 You can do nested joins as well:
 
 ```crystal
-posts = Onyx.query(Post
+posts = Onyx::SQL.query(Post
   .join(author: true) do |x|
     x.join(settings: true) do |y|
       y.select(:foo)

From 6b08baf27a613c5c598f0acb64a019fed9fc818a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 31 Oct 2019 13:54:35 +0200
Subject: [PATCH 8/9] build(deps): bump mixin-deep from 1.3.1 to 1.3.2 (#10)

Bumps [mixin-deep](https://github.com/jonschlinkert/mixin-deep) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/jonschlinkert/mixin-deep/releases)
- [Commits](https://github.com/jonschlinkert/mixin-deep/compare/1.3.1...1.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
---
 yarn.lock | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index cb1393a..2b4e27b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4101,8 +4101,8 @@ mississippi@^3.0.0:
     through2 "^2.0.0"
 
 mixin-deep@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
   dependencies:
     for-in "^1.0.2"
     is-extendable "^1.0.1"

From a82d88fc6c967d53de38ae89937fc0f990fd1c36 Mon Sep 17 00:00:00 2001
From: Vlad Faust <mail@vladfaust.com>
Date: Tue, 20 Apr 2021 20:29:32 +0300
Subject: [PATCH 9/9] Replace .org with .com

---
 .vuepress/config.js            |  2 +-
 components-overview.md         |  2 +-
 http/advanced/custom-server.md | 14 +++----
 http/channels.md               | 22 +++++------
 http/endpoints.md              | 44 ++++++++++-----------
 http/headers.md                |  2 +-
 http/routing.md                |  4 +-
 http/views.md                  | 10 ++---
 sql/advanced/annotations.md    |  2 +-
 sql/advanced/serializable.md   |  5 ++-
 sql/query.md                   | 14 +++----
 sql/schema.md                  | 70 +++++++++++++++++-----------------
 12 files changed, 96 insertions(+), 95 deletions(-)

diff --git a/.vuepress/config.js b/.vuepress/config.js
index b5c2a1e..04374e2 100644
--- a/.vuepress/config.js
+++ b/.vuepress/config.js
@@ -18,7 +18,7 @@ module.exports = {
     ]
     [
       'sitemap', {
-        hostname: 'https://docs.onyxframework.org'
+        hostname: 'https://docs.onyxframework.com'
       }
     ]
   ],
diff --git a/components-overview.md b/components-overview.md
index 02de1c1..e86be9a 100644
--- a/components-overview.md
+++ b/components-overview.md
@@ -149,7 +149,7 @@ pp user # <User @name="John" @age=18>
 
 ## EDA
 
-[Onyx::EDA](/eda/) allows to implement [Event-Driven Architecture](https://en.wikipedia.org/wiki/Event-driven_architecture) in your applications to make them reactive. See the [**Distributed websocket chat in 40 lines of code**](https://blog.onyxframework.org/posts/distributed-websocket-chat-in-40-loc/) blog post for a real-life example.
+[Onyx::EDA](/eda/) allows to implement [Event-Driven Architecture](https://en.wikipedia.org/wiki/Event-driven_architecture) in your applications to make them reactive. See the [**Distributed websocket chat in 40 lines of code**](https://blog.onyxframework.com/posts/distributed-websocket-chat-in-40-loc/) blog post for a real-life example.
 
 ```crystal
 require "onyx/eda"
diff --git a/http/advanced/custom-server.md b/http/advanced/custom-server.md
index 65e379c..ed46e38 100644
--- a/http/advanced/custom-server.md
+++ b/http/advanced/custom-server.md
@@ -8,7 +8,7 @@ You are not obligated to install `"onyx"` shard if you're planning to work with
 
 ## Simple server
 
-Start with a simple [`Onyx::HTTP::Server`](https://api.onyxframework.org/http/Onyx/HTTP/Server.html) example:
+Start with a simple [`Onyx::HTTP::Server`](https://api.onyxframework.com/http/Onyx/HTTP/Server.html) example:
 
 ```crystal
 require "onyx-http" # Note the hyphen, it's not "onyx/http"
@@ -30,7 +30,7 @@ Hello Onyx
 
 ## Logging
 
-We'd like to see the actual request in the STDOUT. Use [`Onyx::HTTP::Logger`](https://api.onyxframework.org/http/Onyx/HTTP/Logger.html) for that:
+We'd like to see the actual request in the STDOUT. Use [`Onyx::HTTP::Logger`](https://api.onyxframework.com/http/Onyx/HTTP/Logger.html) for that:
 
 ```crystal
 require "onyx-http"
@@ -54,7 +54,7 @@ Hello Onyx
 
 ## Request meta
 
-It's a good idea to add an ID to the request and also a time elapsed to process it for further analysis. There are [`Onyx::HTTP::RequestID`](https://api.onyxframework.org/http/Onyx/HTTP/RequestID.html) and [`Onyx::HTTP::ResponseTime`](https://api.onyxframework.org/http/Onyx/HTTP/ResponseTime.html) handlers:
+It's a good idea to add an ID to the request and also a time elapsed to process it for further analysis. There are [`Onyx::HTTP::RequestID`](https://api.onyxframework.com/http/Onyx/HTTP/RequestID.html) and [`Onyx::HTTP::ResponseTime`](https://api.onyxframework.com/http/Onyx/HTTP/ResponseTime.html) handlers:
 
 ```crystal
 require "onyx-http"
@@ -95,7 +95,7 @@ Hello Onyx
 
 ## CORS
 
-Modern APIs usually require proper [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) handling. It is achievable with [`Onyx::HTTP::CORS`](https://api.onyxframework.org/http/Onyx/HTTP/CORS.html):
+Modern APIs usually require proper [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) handling. It is achievable with [`Onyx::HTTP::CORS`](https://api.onyxframework.com/http/Onyx/HTTP/CORS.html):
 
 ```crystal
 require "onyx-http"
@@ -137,7 +137,7 @@ Hello Onyx
 
 ## Routing
 
-Almost every web application requires routing. It is quite simple with [`Onyx::HTTP::Router`](https://api.onyxframework.org/http/Onyx/HTTP/Router.html):
+Almost every web application requires routing. It is quite simple with [`Onyx::HTTP::Router`](https://api.onyxframework.com/http/Onyx/HTTP/Router.html):
 
 ```crystal
 require "onyx-http"
@@ -173,9 +173,9 @@ Knock-knock
 
 ## Rescuing
 
-By default, an unhandled exception would halt the request processing, put the error backtrace into `STDERR` and print `500 Internal Server Error` into the response body. We can change this behaviour with [`Onyx::HTTP::Rescuer`](https://api.onyxframework.org/http/Onyx/HTTP/Rescuer.html).
+By default, an unhandled exception would halt the request processing, put the error backtrace into `STDERR` and print `500 Internal Server Error` into the response body. We can change this behaviour with [`Onyx::HTTP::Rescuer`](https://api.onyxframework.com/http/Onyx/HTTP/Rescuer.html).
 
-This shard comes with [`Onyx::HTTP::Rescuers::Standard`](https://api.onyxframework.org/http/Onyx/HTTP/Rescuers/Standard.html), [`Onyx::HTTP::Rescuers::Silent`](https://api.onyxframework.org/http/Onyx/HTTP/Rescuers/Silent.html) and [`Onyx::HTTP::Rescuers::RouteNotFound`](https://api.onyxframework.org/http/Onyx/HTTP/Rescuers/RouteNotFound.html):
+This shard comes with [`Onyx::HTTP::Rescuers::Standard`](https://api.onyxframework.com/http/Onyx/HTTP/Rescuers/Standard.html), [`Onyx::HTTP::Rescuers::Silent`](https://api.onyxframework.com/http/Onyx/HTTP/Rescuers/Silent.html) and [`Onyx::HTTP::Rescuers::RouteNotFound`](https://api.onyxframework.com/http/Onyx/HTTP/Rescuers/RouteNotFound.html):
 
 ```crystal
 require "onyx-http"
diff --git a/http/channels.md b/http/channels.md
index fd04718..642fd1d 100644
--- a/http/channels.md
+++ b/http/channels.md
@@ -1,13 +1,13 @@
 # Channels
 
-[Onyx::HTTP::Channel](https://api.onyxframework.org/http/Onyx/HTTP/Channel.html) module allows to conveniently bind to and handle websocket events. It **includes** the [Onyx::HTTP::Endpoint](/http/endpoint) module. It also has the following methods:
+[Onyx::HTTP::Channel](https://api.onyxframework.com/http/Onyx/HTTP/Channel.html) module allows to conveniently bind to and handle websocket events. It **includes** the [Onyx::HTTP::Endpoint](/http/endpoint) module. It also has the following methods:
 
-* `on_open` is invoked once on socket bind
-* `on_message(String)` is called everytime a new string message frame arrives
-* `on_binary(Bytes)` is called when a new binary message framew arrives
-* `on_ping(String)` is called on the ping frame
-* `on_pong(String)` is called on the pong frame
-* `on_close` is invoked when the socket is closed (including when a [error](#errors) is raised)
+- `on_open` is invoked once on socket bind
+- `on_message(String)` is called everytime a new string message frame arrives
+- `on_binary(Bytes)` is called when a new binary message framew arrives
+- `on_ping(String)` is called on the ping frame
+- `on_pong(String)` is called on the pong frame
+- `on_close` is invoked when the socket is closed (including when a [error](#errors) is raised)
 
 These are expected to be overridden in your channels:
 
@@ -38,8 +38,8 @@ Onyx::HTTP.ws "/echo", Echo
 
 Onyx::HTTP::Channel module includes some getters:
 
-* `context` to access the current [`HTTP::Server::Context`](https://crystal-lang.org/api/latest/HTTP/Server/Context.html)
-* `socket` to access the bound [`HTTP::WebSocket`](https://crystal-lang.org/api/latest/HTTP/WebSocket.html)
+- `context` to access the current [`HTTP::Server::Context`](https://crystal-lang.org/api/latest/HTTP/Server/Context.html)
+- `socket` to access the bound [`HTTP::WebSocket`](https://crystal-lang.org/api/latest/HTTP/WebSocket.html)
 
 ## Params
 
@@ -49,8 +49,8 @@ Channels also have the `.params` macro, which is equivalent to the [Endpoint's](
 
 Channels have the `.errors` macro which is also similar to the [Endpoint's](/http/endpoints#errors) with some differences:
 
-* Those errors which are expected to be raised when the requst is already upgraded to a websocket must have code in range 4000-4999 according to the [specification](https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Properties)
-* Errors raised when the request already upgraded are rendered within the channel itself, but still logged
+- Those errors which are expected to be raised when the requst is already upgraded to a websocket must have code in range 4000-4999 according to the [specification](https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Properties)
+- Errors raised when the request already upgraded are rendered within the channel itself, but still logged
 
 ### Example:
 
diff --git a/http/endpoints.md b/http/endpoints.md
index 263f51d..c592371 100644
--- a/http/endpoints.md
+++ b/http/endpoints.md
@@ -30,9 +30,9 @@ Onyx::HTTP.get "/random_user", RandomUser
 
 ## Call
 
-The `call` method is abstract and is required to be implemented in all your endpoints. This is where the *action*, i.e. business-logic of your endpoint, takes place. Think about fetching a user or inserting a post into database.
+The `call` method is abstract and is required to be implemented in all your endpoints. This is where the _action_, i.e. business-logic of your endpoint, takes place. Think about fetching a user or inserting a post into database.
 
-The resulting view is determined either with the [`view`](https://api.onyxframework.org/http/Onyx/HTTP/Endpoint.html#view%28view%3AView%29-instance-method) call or by the return value. The former takes precedence:
+The resulting view is determined either with the [`view`](https://api.onyxframework.com/http/Onyx/HTTP/Endpoint.html#view%28view%3AView%29-instance-method) call or by the return value. The former takes precedence:
 
 ```crystal
 def call
@@ -113,11 +113,11 @@ After N2
 
 The `Onyx::HTTP::Endpoint` module also includes some helper methods:
 
-* `context` to access the current [`HTTP::Server::Context`](https://crystal-lang.org/api/latest/HTTP/Server/Context.html)
-* [`view`](https://api.onyxframework.org/http/Onyx/HTTP/Action.html#view%28view%3AView%29-instance-method) to set the resulting view
-* `status` to update the response status (e.g. `status(201)`)
-* `header` to set the response header (e.g. `header("X-Foo", "bar")`)
-* `redirect` to set the status to `302` and the `"Location"` header to the destination, e.g. `redirect("https://google.com")`. Note that it does **not** halt the execution of the action, it just modifies the response
+- `context` to access the current [`HTTP::Server::Context`](https://crystal-lang.org/api/latest/HTTP/Server/Context.html)
+- [`view`](https://api.onyxframework.com/http/Onyx/HTTP/Action.html#view%28view%3AView%29-instance-method) to set the resulting view
+- `status` to update the response status (e.g. `status(201)`)
+- `header` to set the response header (e.g. `header("X-Foo", "bar")`)
+- `redirect` to set the status to `302` and the `"Location"` header to the destination, e.g. `redirect("https://google.com")`. Note that it does **not** halt the execution of the action, it just modifies the response
 
 All [Callbacks](#callbacks) have access to these helpers:
 
@@ -137,12 +137,12 @@ end
 
 ## Params
 
-Endpoints and [Channels](/http/channels) include powerful `params` macro which allows to define endpoint parameters (or *params* for short) from many sources:
+Endpoints and [Channels](/http/channels) include powerful `params` macro which allows to define endpoint parameters (or _params_ for short) from many sources:
 
-* Path params with `path` macro
-* Query params with `query` macro
-* Form (`Content-Type: x-www-urlformencoded`) params with `form` macro
-* JSON (`Content-Type: application/json`) params with `json` macro
+- Path params with `path` macro
+- Query params with `query` macro
+- Form (`Content-Type: x-www-urlformencoded`) params with `form` macro
+- JSON (`Content-Type: application/json`) params with `json` macro
 
 A single endpoint can have params defined to parse from any of these sources (or even all four simultaneously).
 
@@ -150,13 +150,13 @@ A single endpoint can have params defined to parse from any of these sources (or
 
 `type` method cheatsheet (detailed information is in below sections):
 
-* The syntax is `type <param_name> : <param_type>( = <default_value>)`, for example, `type name : String = "John"`
-* Params are accessible with `params.<param_source>.<param_name>` getters, for example, `params.path.name`
-* The param type can be *nilable* (e.g. `type name : String?`), which means that if the parameter is absent in the request, the getter will return `nil` value
-* If the param type is *not nilable* **and** absent in the request, a 400 error is returned
-* If the param type has a `<default_value>` **and** absent in the request, the getter returns the default value
-* `query`, `form` and `json` params support nested, arrays and (*soon*) hash params
-* Parsing is powered by the [http-params-serializable](https://github.com/vladfaust/http-params-serializable) shard; all the options are passed to it as-is, for example `type from_time : Time, key: "from", converter: Time::EpochConverter`
+- The syntax is `type <param_name> : <param_type>( = <default_value>)`, for example, `type name : String = "John"`
+- Params are accessible with `params.<param_source>.<param_name>` getters, for example, `params.path.name`
+- The param type can be _nilable_ (e.g. `type name : String?`), which means that if the parameter is absent in the request, the getter will return `nil` value
+- If the param type is _not nilable_ **and** absent in the request, a 400 error is returned
+- If the param type has a `<default_value>` **and** absent in the request, the getter returns the default value
+- `query`, `form` and `json` params support nested, arrays and (_soon_) hash params
+- Parsing is powered by the [http-params-serializable](https://github.com/vladfaust/http-params-serializable) shard; all the options are passed to it as-is, for example `type from_time : Time, key: "from", converter: Time::EpochConverter`
 
 ### Path params
 
@@ -178,13 +178,13 @@ struct GetUser
 end
 ```
 
-In this example we've defined a *path parameter* named `id`. The endpoint would parse it from an incoming request's URI (in fact, it is parsed by the router internally, not the action itself). The route should look like this:
+In this example we've defined a _path parameter_ named `id`. The endpoint would parse it from an incoming request's URI (in fact, it is parsed by the router internally, not the action itself). The route should look like this:
 
 ```crystal
 Onyx::HTTP.get "/users/:id", GetUser
 ```
 
-Note the `:id` part. This is a *path parameter*. When doing a `GET /users/42/` request, the `id` equals to `42`. Therefore this line would print `42`:
+Note the `:id` part. This is a _path parameter_. When doing a `GET /users/42/` request, the `id` equals to `42`. Therefore this line would print `42`:
 
 ```crystal
   def call
@@ -232,7 +232,7 @@ In this example, the URL query is expected to contain `offset` and `limit` param
 "/?offset=10&limit=20"
 ```
 
-Note that `offset` type is `Int32?`. The `?` symbol expands to `Int32 | Nil`, which effectively means that the `offset` parameter is *nilable*. So queries `/?limit=20` and even `/?offset=&limit=20` are still valid and `params.query.offset` will be `nil`.
+Note that `offset` type is `Int32?`. The `?` symbol expands to `Int32 | Nil`, which effectively means that the `offset` parameter is _nilable_. So queries `/?limit=20` and even `/?offset=&limit=20` are still valid and `params.query.offset` will be `nil`.
 
 In contrary, `limit` type is `Int32` and it has a default value of `10`. That means that if the `limit` parameter is absent from a request query, `params.query.limit` will be equal to `10`.
 
diff --git a/http/headers.md b/http/headers.md
index efc8c82..491acb1 100644
--- a/http/headers.md
+++ b/http/headers.md
@@ -35,7 +35,7 @@ It is also possible to alter the middleware completely, read about it at the [Cu
 
 ## Request ID
 
-An unique request identifier ([`context.request.id`](https://api.onyxframework.org/http/HTTP/Request.html#id%3AString%3F-instance-method)) is also put into the `"X-Request-ID"` header:
+An unique request identifier ([`context.request.id`](https://api.onyxframework.com/http/HTTP/Request.html#id%3AString%3F-instance-method)) is also put into the `"X-Request-ID"` header:
 
 ```sh
 < X-Request-ID: e6fa3c3e-93ce-4ad4-b480-957cb13b56eb
diff --git a/http/routing.md b/http/routing.md
index 898cd44..4c204a0 100644
--- a/http/routing.md
+++ b/http/routing.md
@@ -58,7 +58,7 @@ Onyx::HTTP.ws "/", MyChannel
 
 ## Path params
 
-You can define path params in routes. These params will then be accessible via [`context.request.path_params`](https://api.onyxframework.org/http/HTTP/Request.html#path_params%3AHash%28String%2CString%29-instance-method) getter:
+You can define path params in routes. These params will then be accessible via [`context.request.path_params`](https://api.onyxframework.com/http/HTTP/Request.html#path_params%3AHash%28String%2CString%29-instance-method) getter:
 
 ```crystal
 Onyx::HTTP.get "/users/:id" do |env|
@@ -95,7 +95,7 @@ The resulting route paths would consist of all namespaces contatenated, for exam
 
 ## Request ID
 
-The request would also have an unique identifier accessible via [`context.request.id`](https://api.onyxframework.org/http/HTTP/Request.html#id-instance-method) getter:
+The request would also have an unique identifier accessible via [`context.request.id`](https://api.onyxframework.com/http/HTTP/Request.html#id-instance-method) getter:
 
 ```crystal
 Onyx::HTTP.get "/" do |env|
diff --git a/http/views.md b/http/views.md
index 354802a..4caab99 100644
--- a/http/views.md
+++ b/http/views.md
@@ -12,11 +12,11 @@ end
 
 However, sometimes you want to:
 
-* Render the same response differently depending on the user device (effectively `Accept` header)
-* Re-use the rendering logic (for example, rendering a single user and array of users is almost equal)
-* Move the rendering logic away from business layer
+- Render the same response differently depending on the user device (effectively `Accept` header)
+- Re-use the rendering logic (for example, rendering a single user and array of users is almost equal)
+- Move the rendering logic away from business layer
 
-For this, Onyx::HTTP has a [View](https://api.onyxframework.org/rest/Onyx/REST/View.html) module. Include the `Onyx::HTTP::View` module into an object (preferrably struct) to mark it as a view:
+For this, Onyx::HTTP has a [View](https://api.onyxframework.com/rest/Onyx/REST/View.html) module. Include the `Onyx::HTTP::View` module into an object (preferrably struct) to mark it as a view:
 
 ```crystal
 struct Hello
@@ -303,7 +303,7 @@ struct Hello
 end
 ```
 
-By default, `.template` macro has `content_type: "text/html"` and `accept: {"text/html"}` arguments, which means that it would be rendered only if `Accept` header value is included into `{"text/html"}` tuple and set the `Content-Type` header to  `text/html` afterwards. You can override these arguments and even define multiple templates to render depending on the `Accept` header:
+By default, `.template` macro has `content_type: "text/html"` and `accept: {"text/html"}` arguments, which means that it would be rendered only if `Accept` header value is included into `{"text/html"}` tuple and set the `Content-Type` header to `text/html` afterwards. You can override these arguments and even define multiple templates to render depending on the `Accept` header:
 
 ```crystal
 struct Hello
diff --git a/sql/advanced/annotations.md b/sql/advanced/annotations.md
index db0a30d..58e93a5 100644
--- a/sql/advanced/annotations.md
+++ b/sql/advanced/annotations.md
@@ -1,3 +1,3 @@
 # Annotations
 
-TODO: Onyx::SQL is built on annotations, but they are hidden under the [Schema](/sql/schema) macro. See [Field](https://api.onyxframework.org/sql/Onyx/SQL/Field.html), [Reference](https://api.onyxframework.org/sql/Onyx/SQL/Reference.html) and [Model::Options](https://api.onyxframework.org/sql/Onyx/SQL/Model/Options.html).
+TODO: Onyx::SQL is built on annotations, but they are hidden under the [Schema](/sql/schema) macro. See [Field](https://api.onyxframework.com/sql/Onyx/SQL/Field.html), [Reference](https://api.onyxframework.com/sql/Onyx/SQL/Reference.html) and [Model::Options](https://api.onyxframework.com/sql/Onyx/SQL/Model/Options.html).
diff --git a/sql/advanced/serializable.md b/sql/advanced/serializable.md
index 1cb652a..d0890e1 100644
--- a/sql/advanced/serializable.md
+++ b/sql/advanced/serializable.md
@@ -1,6 +1,6 @@
 # Serializable
 
-TODO: You can include [`Onyx::SQL::Serializable`](https://api.onyxframework.org/sql/Onyx/SQL/Serializable.html) into any object to make it de-serializable **from** database. It is good for re-usable business objects, for example:
+TODO: You can include [`Onyx::SQL::Serializable`](https://api.onyxframework.com/sql/Onyx/SQL/Serializable.html) into any object to make it de-serializable **from** database. It is good for re-usable business objects, for example:
 
 ```crystal
 struct PopularTag
@@ -31,6 +31,7 @@ struct PopularTag
   end
 end
 ```
+
 :::
 
-Interesting fact: the [`Onyx::SQL::Model`](https://api.onyxframework.org/sql/Onyx/SQL/Model.html) module actually includes `Onyx::SQL::Serializable`!
+Interesting fact: the [`Onyx::SQL::Model`](https://api.onyxframework.com/sql/Onyx/SQL/Model.html) module actually includes `Onyx::SQL::Serializable`!
diff --git a/sql/query.md b/sql/query.md
index 8ebec6e..789de6d 100644
--- a/sql/query.md
+++ b/sql/query.md
@@ -7,12 +7,12 @@ sidebarDepth: "2"
 Onyx::SQL includes **type-safe** SQL query builder which implements most of common SQL. In fact, its syntax resembles SQL, but allows to create queries with fields and references instead of raw SQL columns. Moreover, the builder will raise meaningful errors in compilation time if you, for example, tried to pass a wrong argument type to the query. However, there are some cases where the builder is not fully type safe, they will be highlighted like this:
 
 ::: danger UNSAFE
-*Description of why is it unsafe.*
+_Description of why is it unsafe._
 :::
 
 ## Getting started
 
-The builder is a `Query(T)` *struct*, for example, `Query(User)`:
+The builder is a `Query(T)` _struct_, for example, `Query(User)`:
 
 ```crystal
 query = Onyx::SQL::Query(User).new
@@ -86,7 +86,7 @@ user = User.from_rs(db.query(query.build[0], query.build[1])).first?
 ```
 
 ::: tip
-The [`.from_rs`](https://api.onyxframework.org/sql/Onyx/SQL/Serializable.html#from_rs%28rs%3ADB%3A%3AResultSet%29%3AArray%28self%29-class-method) method is present in all models and it allows to initialize **an array** of such models from a [`DB::ResultSet`](http://crystal-lang.github.io/crystal-db/api/0.5.1/DB/ResultSet.html).
+The [`.from_rs`](https://api.onyxframework.com/sql/Onyx/SQL/Serializable.html#from_rs%28rs%3ADB%3A%3AResultSet%29%3AArray%28self%29-class-method) method is present in all models and it allows to initialize **an array** of such models from a [`DB::ResultSet`](http://crystal-lang.github.io/crystal-db/api/0.5.1/DB/ResultSet.html).
 :::
 
 But it is more convenient to make use of [Repository](/sql/repository), which wraps the DB connection, automatically builds query (with knowledge of the underlying DB driver, therefore passing `true` to the `Query#build` if needed) and maps the result to model instances.
@@ -131,7 +131,7 @@ User.where(id: 42) == Onyx::SQL::Query(User).new.where(id: 42)
 
 ## Changeset
 
-To track changes made to a model instance, a concept of *changeset* exists. When you call the `instance.changeset` method, its snapshot is created:
+To track changes made to a model instance, a concept of _changeset_ exists. When you call the `instance.changeset` method, its snapshot is created:
 
 ```crystal
 user = User.new(id: 1, name: "John", age: 18)
@@ -239,7 +239,7 @@ user.update(changeset) # NilAssetionError
 :::
 
 ::: danger UNSAFE
-This method would also raise [`NoChangesError`](https://api.onyxframework.org/sql/Onyx/SQL/Model/Changeset/NoChanges.html) if the changeset is empty:
+This method would also raise [`NoChangesError`](https://api.onyxframework.com/sql/Onyx/SQL/Model/Changeset/NoChanges.html) if the changeset is empty:
 
 ```crystal
 user = User.new(id: 1, name: "John", age: 18)
@@ -359,7 +359,7 @@ Also see the [`Model#insert` shortcut](#insert-shortcut).
 
 ### update
 
-Marks the query as `UPDATE` one. It *requires* at least one [`set`](#set) afterwards.<br>Also see the [`Model#update` shortcut](#update-shortcut).
+Marks the query as `UPDATE` one. It _requires_ at least one [`set`](#set) afterwards.<br>Also see the [`Model#update` shortcut](#update-shortcut).
 
 ### set
 
@@ -564,7 +564,7 @@ WHERE author.id = ?
 
 ::: tip
 
-If *parent* query hasn't had any `#select` calls **before** the join with *sub-query*, then it is called with `#select(self)` (i.e. `#select(Post)` in this example). This is made to avoid redundant columns fetching.
+If _parent_ query hasn't had any `#select` calls **before** the join with _sub-query_, then it is called with `#select(self)` (i.e. `#select(Post)` in this example). This is made to avoid redundant columns fetching.
 
 :::
 
diff --git a/sql/schema.md b/sql/schema.md
index b441d2a..6b78704 100644
--- a/sql/schema.md
+++ b/sql/schema.md
@@ -152,23 +152,23 @@ Most of the times you'll get an understandable compilation-time error if a field
 
 Shard homepage: [crystal-lang/crystal-sqlite3](https://github.com/crystal-lang/crystal-sqlite3)
 
-Crystal type | SQLite3 type | Required converter
---- | --- | --- | ---
-Bool* | INTEGER
-Float | REAL
-Int | INTEGER
-Bytes | BLOB
-String | TEXT
-Time** | TEXT
-Nil | NULL
-Enumerable | TEXT | [SQLite3::Any](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/Any.html)
-Enum | INTEGER | [SQLite3::EnumInt](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/EnumInt.html)
-Enumerable(Enum) | TEXT | [SQLite3::EnumInt](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/EnumInt.html)
-Enum | TEXT | [SQLite3::EnumText](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/EnumText.html)
-Enumerable(Enum) | TEXT | [SQLite3::EnumText](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/EnumText.html)
-JSON* | TEXT | [SQLite3::JSON](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/JSON.html)
-UUID | BLOB | [SQLite3::UUIDBlob](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/UUIDBlob.html)
-UUID | TEXT | [SQLite3::UUIDText](https://api.onyxframework.org/sql/Onyx/SQL/Converters/SQLite3/UUIDBlob.html)
+| Crystal type     | SQLite3 type | Required converter                                                                               |
+| ---------------- | ------------ | ------------------------------------------------------------------------------------------------ |
+| Bool\*           | INTEGER      |
+| Float            | REAL         |
+| Int              | INTEGER      |
+| Bytes            | BLOB         |
+| String           | TEXT         |
+| Time\*\*         | TEXT         |
+| Nil              | NULL         |
+| Enumerable       | TEXT         | [SQLite3::Any](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/Any.html)           |
+| Enum             | INTEGER      | [SQLite3::EnumInt](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/EnumInt.html)   |
+| Enumerable(Enum) | TEXT         | [SQLite3::EnumInt](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/EnumInt.html)   |
+| Enum             | TEXT         | [SQLite3::EnumText](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/EnumText.html) |
+| Enumerable(Enum) | TEXT         | [SQLite3::EnumText](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/EnumText.html) |
+| JSON\*           | TEXT         | [SQLite3::JSON](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/JSON.html)         |
+| UUID             | BLOB         | [SQLite3::UUIDBlob](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/UUIDBlob.html) |
+| UUID             | TEXT         | [SQLite3::UUIDText](https://api.onyxframework.com/sql/Onyx/SQL/Converters/SQLite3/UUIDBlob.html) |
 
 \* `0` for `false`, `1` for `true`<br>
 \*\* Stored in [`SQLite3::DATE_FORMAT`](https://github.com/crystal-lang/crystal-sqlite3/blob/master/src/sqlite3.cr#L5)<br>
@@ -178,23 +178,23 @@ UUID | TEXT | [SQLite3::UUIDText](https://api.onyxframework.org/sql/Onyx/SQL/Con
 
 Shard homepage: [will/crystal-pg](https://github.com/will/crystal-pg)
 
-Crystal type | SQLite3 type | Required converter
---- | --- | --- | ---
-Bool | BOOLEAN
-Float32 | REAL
-Float64 | FLOAT8
-Int16 | SMALLINT | [PG::Any](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/Any.html)
-Int32 | INTEGER
-Int64 | BIGINT
-Bytes | BYTEA
-String | TEXT, CHAR etc.
-Time | TIME, TIMESTAMP etc.
-Nil | NULL
-Enumerable* | *varies* | [PG::Any](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/Any.html)
-Enum, Enumerable(Enum) | ENUM | [PG::Enum](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/Enum.html)
-JSON** | JSON | [PG::JSON](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/JSON.html)
-JSON** | JSONB | [PG::JSONB](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/JSONB.html)
-UUID | BLOB | [PG::UUID](https://api.onyxframework.org/sql/Onyx/SQL/Converters/PG/UUID.html)
+| Crystal type           | SQLite3 type         | Required converter                                                               |
+| ---------------------- | -------------------- | -------------------------------------------------------------------------------- |
+| Bool                   | BOOLEAN              |
+| Float32                | REAL                 |
+| Float64                | FLOAT8               |
+| Int16                  | SMALLINT             | [PG::Any](https://api.onyxframework.com/sql/Onyx/SQL/Converters/PG/Any.html)     |
+| Int32                  | INTEGER              |
+| Int64                  | BIGINT               |
+| Bytes                  | BYTEA                |
+| String                 | TEXT, CHAR etc.      |
+| Time                   | TIME, TIMESTAMP etc. |
+| Nil                    | NULL                 |
+| Enumerable\*           | _varies_             | [PG::Any](https://api.onyxframework.com/sql/Onyx/SQL/Converters/PG/Any.html)     |
+| Enum, Enumerable(Enum) | ENUM                 | [PG::Enum](https://api.onyxframework.com/sql/Onyx/SQL/Converters/PG/Enum.html)   |
+| JSON\*\*               | JSON                 | [PG::JSON](https://api.onyxframework.com/sql/Onyx/SQL/Converters/PG/JSON.html)   |
+| JSON\*\*               | JSONB                | [PG::JSONB](https://api.onyxframework.com/sql/Onyx/SQL/Converters/PG/JSONB.html) |
+| UUID                   | BLOB                 | [PG::UUID](https://api.onyxframework.com/sql/Onyx/SQL/Converters/PG/UUID.html)   |
 
 \* Actual type depends on enumerable type (e.g. `int[]` for `Array(Int32)`)<br>
 \*\* Any type with `#to_json` and `.from_json` method, e.g. [JSON::Serializable](https://crystal-lang.org/api/0.27.2/JSON/Serializable.html). Note that `Enumerable` (e.g. `Array(String)` or `Hash(String, String)`) won't work in this case, use custom serializable struct instead
@@ -274,7 +274,7 @@ INSERT INTO users (name) VALUES (?)
 
 ## Reference
 
-You may have noticed in the example above that mapping references is pretty intuitive as well.  A reference is determined by the type, i.e. the compiler knows that `Post` is an `Onyx::SQL::Model` too, so `type posts : Array(Post)` is treated as a reference instead of a field. For the sake of tutorial, here is reduced code from above:
+You may have noticed in the example above that mapping references is pretty intuitive as well. A reference is determined by the type, i.e. the compiler knows that `Post` is an `Onyx::SQL::Model` too, so `type posts : Array(Post)` is treated as a reference instead of a field. For the sake of tutorial, here is reduced code from above:
 
 ```sql
 CREATE TABLE users (
