diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index 2671e54c..00000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,145 +0,0 @@
-unit_tests: &unit_tests
-  steps:
-    - checkout
-    - restore_cache:
-        key: dependency-cache-{{ checksum "package-lock.json" }}
-    - run:
-        name: Install Latest NPM.
-        # npm@3 is buggy
-        command: if [[ $(npm -v | cut -c -1) > 3 ]] ; then npm i -g npm@latest; else echo "Skip npm updating"; fi
-    - run:
-        name: NPM Install.
-        command: npm ci || npm i
-    - run:
-        name: Run Test.
-        command: npm run ci:test
-canary_tests: &canary_tests
-  steps:
-    - checkout
-    - restore_cache:
-        key: dependency-cache-{{ checksum "package-lock.json" }}
-    - run:
-        name: Install Latest NPM.
-        command: npm i -g npm@latest
-    - run:
-        name: NPM Install.
-        command: npm ci
-    - run:
-        name: Install Webpack Canary.
-        command: npm i --no-save webpack@next
-    - run:
-        name: Run Test.
-        command: if [[ $(compver --name webpack --gte next --lt latest) < 1 ]] ; then printf "Next is older than Latest - Skipping Canary Suite"; else npm run ci:test || true; fi
-
-version: 2
-jobs:
-  dependency_cache:
-    docker:
-      - image: webpackcontrib/circleci-node-base:latest
-    steps:
-      - checkout
-      - restore_cache:
-          key: dependency-cache-{{ checksum "package-lock.json" }}
-      - run:
-          name: Install Latest NPM.
-          command: npm i -g npm@latest
-      - run:
-          name: NPM Install.
-          command: npm ci
-      - save_cache:
-          key: dependency-cache-{{ checksum "package-lock.json" }}
-          paths:
-            - ./node_modules
-  analysis:
-    docker:
-      - image: webpackcontrib/circleci-node-base:latest
-    steps:
-      - checkout
-      - restore_cache:
-          key: dependency-cache-{{ checksum "package-lock.json" }}
-      - run:
-          name: Install Latest NPM.
-          command: npm i -g npm@latest
-      - run:
-          name: NPM Install.
-          command: npm ci
-      - run:
-          name: Run linting.
-          command: npm run lint
-      - run:
-          name: Run NPM Audit.
-          command: npm run security
-      - run:
-          name: Validate Commit Messages.
-          command: npm run ci:lint:commits
-  node6-latest:
-    docker:
-      - image: webpackcontrib/circleci-node6:latest
-    <<: *unit_tests
-  node8-latest:
-    docker:
-      - image: webpackcontrib/circleci-node8:latest
-    <<: *unit_tests
-  node10-latest:
-    docker:
-      - image: webpackcontrib/circleci-node10:latest
-    steps:
-      - checkout
-      - restore_cache:
-          key: dependency-cache-{{ checksum "package-lock.json" }}
-      - run:
-          name: Install Latest NPM.
-          command: npm i -g npm@latest
-      - run:
-          name: NPM Install.
-          command: npm ci
-      - run:
-          name: Run Test.
-          command: npm run ci:coverage
-      - run:
-          name: Submit coverage data to codecov.
-          command: bash <(curl -s https://codecov.io/bash)
-          when: on_success
-  node8-canary:
-    docker:
-      - image: webpackcontrib/circleci-node8:latest
-    <<: *canary_tests
-
-workflows:
-  version: 2
-  test:
-    jobs:
-      - dependency_cache
-      - analysis:
-          requires:
-            - dependency_cache
-          filters:
-            tags:
-              only: /.*/
-      - node6-latest:
-          requires:
-            - dependency_cache
-          filters:
-            tags:
-              only: /.*/
-      - node8-latest:
-          requires:
-            - analysis
-            - node6-latest
-          filters:
-            tags:
-              only: /.*/
-      - node10-latest:
-          requires:
-            - analysis
-            - node6-latest
-          filters:
-            tags:
-              only: /.*/
-      - node8-canary:
-          requires:
-            - analysis
-            - node6-latest
-          filters:
-            tags:
-              only: /.*/
diff --git a/.eslintignore b/.eslintignore
index 4a838089..c52afd16 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,3 +1,4 @@
-/node_modules
-/src/runtime
+/coverage
 /dist
+/node_modules
+/test/fixtures
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
index f75a77df..095ce2a5 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,8 +1,4 @@
 module.exports = {
   root: true,
-  plugins: ['prettier'],
-  extends: ['@webpack-contrib/eslint-config-webpack'],
-  rules: {
-    'prettier/prettier': ['error'],
-  },
-};
\ No newline at end of file
+  extends: ['@webpack-contrib/eslint-config-webpack', 'prettier'],
+};
diff --git a/.gitattributes b/.gitattributes
index 70df4c97..6fcfa732 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,4 @@
-package-lock.json -diff
 * text=auto
 bin/* eol=lf
+yarn.lock -diff
+package-lock.json -diff
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 5e6a74bf..0b17c716 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,21 +1,21 @@
-## Contributing in @webpack-contrib
+# Contributing in @webpack-contrib
 
-We'd always love contributions to further improve the webpack / webpack-contrib ecosystem! 
+We'd always love contributions to further improve the webpack / webpack-contrib ecosystem!
 Here are the guidelines we'd like you to follow:
 
-* [Questions and Problems](#question)
-* [Issues and Bugs](#issue)
-* [Feature Requests](#feature)
-* [Pull Request Submission Guidelines](#submit-pr)
-* [Commit Message Conventions](#commit)
+- [Questions and Problems](#question)
+- [Issues and Bugs](#issue)
+- [Feature Requests](#feature)
+- [Pull Request Submission Guidelines](#submit-pr)
+- [Commit Message Conventions](#commit)
 
-### <a name="question"></a> Got a Question or Problem?
+## <a name="question"></a> Got a Question or Problem?
 
-Please submit support requests and questions to StackOverflow using the tag [[webpack]](http://stackoverflow.com/tags/webpack). 
-StackOverflow is better suited for this kind of support though you may also inquire in [Webpack Gitter](https://gitter.im/webpack/webpack). 
+Please submit support requests and questions to StackOverflow using the tag [[webpack]](http://stackoverflow.com/tags/webpack).
+StackOverflow is better suited for this kind of support though you may also inquire in [Webpack Gitter](https://gitter.im/webpack/webpack).
 The issue tracker is for bug reports and feature discussions.
 
-### <a name="issue"></a> Found an Issue or Bug?
+## <a name="issue"></a> Found an Issue or Bug?
 
 Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
 
@@ -31,13 +31,13 @@ We will be insisting on a minimal reproduce scenario in order to save maintainer
 
 Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
 
-### <a name="feature"></a> Feature Requests?
+## <a name="feature"></a> Feature Requests?
 
-You can *request* a new feature by creating an issue on Github. 
+You can _request_ a new feature by creating an issue on Github.
 
-If you would like to *implement* a new feature, please submit an issue with a proposal for your work `first`, to be sure that particular makes sense for the project.
+If you would like to _implement_ a new feature, please submit an issue with a proposal for your work `first`, to be sure that particular makes sense for the project.
 
-### <a name="submit-pr"></a> Pull Request Submission Guidelines
+## <a name="submit-pr"></a> Pull Request Submission Guidelines
 
 Before you submit your Pull Request (PR) consider the following guidelines:
 
@@ -46,9 +46,9 @@ Before you submit your Pull Request (PR) consider the following guidelines:
 - Fill out our `Pull Request Template`. Your pull request will not be considered if it is ignored.
 - Please sign the `Contributor License Agreement (CLA)` when a pull request is opened. We cannot accept your pull request without this. Make sure you sign with the primary email address associated with your local / github account.
 
-### <a name="commit"></a> Webpack Contrib Commit Conventions
+## <a name="commit"></a> Webpack Contrib Commit Conventions
 
-Each commit message consists of a **header**, a **body** and a **footer**.  The header has a special
+Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
 format that includes a **type**, a **scope** and a **subject**:
 
 ```
@@ -66,48 +66,56 @@ to read on GitHub as well as in various git tools.
 
 The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-via-commit-messages/) if any.
 
-Examples: 
+Examples:
+
 ```
 docs(readme): update install instructions
 ```
+
 ```
 fix: refer to the `entrypoint` instead of the first `module`
 ```
 
-#### Revert
-If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. 
+### Revert
+
+If the commit reverts a previous commit, it should begin with `revert:`, followed by the header of the reverted commit.
 In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
 
-#### Type
+### Type
+
 Must be one of the following:
 
-* **build**: Changes that affect the build system or external dependencies (example scopes: babel, npm)
-* **chore**: Changes that fall outside of build / docs that do not effect source code (example scopes: package, defaults)
-* **ci**: Changes to our CI configuration files and scripts (example scopes: circleci, travis)
-* **docs**: Documentation only changes (example scopes: readme, changelog)
-* **feat**: A new feature
-* **fix**: A bug fix
-* **perf**: A code change that improves performance
-* **refactor**: A code change that neither fixes a bug nor adds a feature
-* **revert**: Used when reverting a committed change
-* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons)
-* **test**: Addition of or updates to Jest tests
-
-#### Scope
+- **build**: Changes that affect the build system or external dependencies (example scopes: babel, npm)
+- **chore**: Changes that fall outside of build / docs that do not effect source code (example scopes: package, defaults)
+- **ci**: Changes to our CI configuration files and scripts (example scopes: circleci, travis)
+- **docs**: Documentation only changes (example scopes: readme, changelog)
+- **feat**: A new feature
+- **fix**: A bug fix
+- **perf**: A code change that improves performance
+- **refactor**: A code change that neither fixes a bug nor adds a feature
+- **revert**: Used when reverting a committed change
+- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons)
+- **test**: Addition of or updates to Jest tests
+
+### Scope
+
 The scope is subjective & depends on the `type` see above. A good example would be a change to a particular class / module.
 
-#### Subject
+### Subject
+
 The subject contains a succinct description of the change:
 
-* use the imperative, present tense: "change" not "changed" nor "changes"
-* don't capitalize the first letter
-* no dot (.) at the end
+- use the imperative, present tense: "change" not "changed" nor "changes"
+- don't capitalize the first letter
+- no dot (.) at the end
+
+### Body
 
-#### Body
 Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
 The body should include the motivation for the change and contrast this with previous behavior.
 
-#### Footer
+### Footer
+
 The footer should contain any information about **Breaking Changes** and is also the place to
 reference GitHub issues that this commit **Closes**.
 
@@ -116,9 +124,29 @@ reference GitHub issues that this commit **Closes**.
 Example
 
 ```
-BREAKING CHANGE: Updates to `Chunk.mapModules`. 
+BREAKING CHANGE: Updates to `Chunk.mapModules`.
 
 This release is not backwards compatible with `Webpack 2.x` due to breaking changes in webpack/webpack#4764
 Migration: see webpack/webpack#5225
 
 ```
+
+## Testing Your Pull Request
+
+You may have the need to test your changes in a real-world project or dependent
+module. Thankfully, Github provides a means to do this. Add a dependency to the
+`package.json` for such a project as follows:
+
+```json
+{
+  "devDependencies": {
+    "css-loader": "webpack-contrib/css-loader#{id}/head"
+  }
+}
+```
+
+Where `{id}` is the # ID of your Pull Request.
+
+## Thanks
+
+For your interest, time, understanding, and for following this simple guide.
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..5e7c7b6d
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+open_collective: webpack
diff --git a/.github/ISSUE_TEMPLATE/BUG.md b/.github/ISSUE_TEMPLATE/BUG.md
index 03e2b302..ebc47be4 100644
--- a/.github/ISSUE_TEMPLATE/BUG.md
+++ b/.github/ISSUE_TEMPLATE/BUG.md
@@ -1,7 +1,6 @@
 ---
 name: 🐛 Bug Report
 about: Something went awry and you'd like to tell us about it.
-
 ---
 
 <!--
@@ -15,11 +14,11 @@ about: Something went awry and you'd like to tell us about it.
   Head to StackOverflow or https://gitter.im/webpack/webpack.
 -->
 
-* Operating System:
-* Node Version:
-* NPM Version:
-* webpack Version:
-* css-loader Version:
+- Operating System:
+- Node Version:
+- NPM Version:
+- webpack Version:
+- css-loader Version:
 
 ### Expected Behavior
 
@@ -32,13 +31,13 @@ about: Something went awry and you'd like to tell us about it.
 ### Code
 
 ```js
-  // webpack.config.js
-  // If your bitchin' code blocks are over 20 lines, please paste a link to a gist
-  // (https://gist.github.com).
+// webpack.config.js
+// If your code blocks are over 20 lines, please paste a link to a gist
+// (https://gist.github.com).
 ```
 
 ```js
-  // additional code, HEY YO remove this block if you don't need it
+// additional code, HEY YO remove this block if you don't need it
 ```
 
 ### How Do We Reproduce?
diff --git a/.github/ISSUE_TEMPLATE/DOCS.md b/.github/ISSUE_TEMPLATE/DOCS.md
index 3453c82a..88d05ddd 100644
--- a/.github/ISSUE_TEMPLATE/DOCS.md
+++ b/.github/ISSUE_TEMPLATE/DOCS.md
@@ -1,7 +1,6 @@
 ---
 name: 📚 Documentation
 about: Are the docs lacking or missing something? Do they need some new 🔥 hotness? Tell us here.
-
 ---
 
 <!--
@@ -26,5 +25,4 @@ Documentation Is:
 
 ### Please Explain in Detail...
 
-
 ### Your Proposal for Changes
diff --git a/.github/ISSUE_TEMPLATE/FEATURE.md b/.github/ISSUE_TEMPLATE/FEATURE.md
index 51683f32..84d4adeb 100644
--- a/.github/ISSUE_TEMPLATE/FEATURE.md
+++ b/.github/ISSUE_TEMPLATE/FEATURE.md
@@ -1,7 +1,6 @@
 ---
 name: ✨ Feature Request
 about: Suggest an idea for this project
-
 ---
 
 <!--
@@ -15,14 +14,12 @@ about: Suggest an idea for this project
   Head to StackOverflow or https://gitter.im/webpack/webpack.
 -->
 
-* Operating System:
-* Node Version:
-* NPM Version:
-* webpack Version:
-* css-loader Version:
+- Operating System:
+- Node Version:
+- NPM Version:
+- webpack Version:
+- css-loader Version:
 
 ### Feature Proposal
 
-
-
 ### Feature Use Case
diff --git a/.github/ISSUE_TEMPLATE/MODIFICATION.md b/.github/ISSUE_TEMPLATE/MODIFICATION.md
index 9c636482..bd64d529 100644
--- a/.github/ISSUE_TEMPLATE/MODIFICATION.md
+++ b/.github/ISSUE_TEMPLATE/MODIFICATION.md
@@ -1,7 +1,6 @@
 ---
 name: 🔧 Modification Request
 about: Would you like something work differently? Have an alternative approach? This is the template for you.
-
 ---
 
 <!--
@@ -15,19 +14,14 @@ about: Would you like something work differently? Have an alternative approach?
   Head to StackOverflow or https://gitter.im/webpack/webpack.
 -->
 
-* Operating System:
-* Node Version:
-* NPM Version:
-* webpack Version:
-* css-loader Version:
-
+- Operating System:
+- Node Version:
+- NPM Version:
+- webpack Version:
+- css-loader Version:
 
 ### Expected Behavior / Situation
 
-
-
 ### Actual Behavior / Situation
 
-
-
 ### Modification Proposal
diff --git a/.github/ISSUE_TEMPLATE/SUPPORT.md b/.github/ISSUE_TEMPLATE/SUPPORT.md
index c15bea46..558934ac 100644
--- a/.github/ISSUE_TEMPLATE/SUPPORT.md
+++ b/.github/ISSUE_TEMPLATE/SUPPORT.md
@@ -1,7 +1,6 @@
 ---
 name: 🆘 Support, Help, and Advice
 about: 👉🏽 Need support, help, or advice? Don't open an issue! Head to StackOverflow or https://gitter.im/webpack/webpack.
-
 ---
 
 Hey there! If you need support, help, or advice then this is not the place to ask.
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..f8f1e312
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,5 @@
+/coverage
+/dist
+/node_modules
+/test/fixtures
+CHANGELOG.md
\ No newline at end of file
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 00000000..1934550a
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+  singleQuote: true,
+  trailingComma: 'es5',
+  arrowParens: 'always',
+};
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9632513d..e923fce2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,40 @@
-# Change Log
+# Changelog
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+## [3.0.0](https://github.com/webpack-contrib/css-loader/compare/v2.1.1...v3.0.0) (2019-06-11)
+
+
+### Bug Fixes
+
+* avoid the "from" argument must be of type string error ([#908](https://github.com/webpack-contrib/css-loader/issues/908)) ([e5dfd23](https://github.com/webpack-contrib/css-loader/commit/e5dfd23))
+* invert `Function` behavior for `url` and `import` options ([#939](https://github.com/webpack-contrib/css-loader/issues/939)) ([e9eb5ad](https://github.com/webpack-contrib/css-loader/commit/e9eb5ad))
+* properly export locals with escaped characters ([#917](https://github.com/webpack-contrib/css-loader/issues/917)) ([a0efcda](https://github.com/webpack-contrib/css-loader/commit/a0efcda))
+* property handle non css characters in localIdentName ([#920](https://github.com/webpack-contrib/css-loader/issues/920)) ([d3a0a3c](https://github.com/webpack-contrib/css-loader/commit/d3a0a3c))
+
+
+### Features
+
+* modules options now accepts object config ([#937](https://github.com/webpack-contrib/css-loader/issues/937)) ([1d7a464](https://github.com/webpack-contrib/css-loader/commit/1d7a464))
+* support `@value` at-rule in selectors ([#941](https://github.com/webpack-contrib/css-loader/issues/941)) ([05a42e2](https://github.com/webpack-contrib/css-loader/commit/05a42e2))
+
+
+### BREAKING CHANGES
+
+* minimum required nodejs version is 8.9.0
+* `@value` at rules now support in `selector`, recommends checking all `@values` at-rule usage (hint: you can add prefix to all `@value` at-rules, for example `@value v-foo: black;` or `@value m-foo: screen and (max-width: 12450px)`, and then do upgrade)
+* invert `{Function}` behavior for `url` and `import` options  (need return `true` when you want handle `url`/`@import` and return `false` if not)
+* `exportLocalsStyle` option was remove in favor `localsConvention` option, also it is accept only `{String}` value (use `camelCase` value if you previously value was `true` and `asIs` if you previously value was `false`) 
+* `exportOnlyLocals` option was remove in favor `onlyLocals` option
+* `modules` option now can be `{Object}` and allow to setup `CSS Modules` options:
+  * `localIdentName` option was removed in favor `modules.localIdentName` option
+  * `context` option was remove in favor `modules.context` option
+  * `hashPrefix` option was removed in favor `modules.hashPrefix` option
+  * `getLocalIdent` option was removed in favor `modules.getLocalIdent` option
+  * `localIdentRegExp` option was removed in favor `modules.localIdentRegExp` option
+
+
+
 <a name="2.1.1"></a>
 ## [2.1.1](https://github.com/webpack-contrib/css-loader/compare/v2.1.0...v2.1.1) (2019-03-07)
 
diff --git a/README.md b/README.md
index cefaac7b..3a76398b 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         use: ['style-loader', 'css-loader'],
       },
     ],
@@ -65,7 +65,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         use: ['to-string-loader', 'css-loader'],
       },
     ],
@@ -95,7 +95,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         use: [
           'handlebars-loader', // handlebars loader expects raw resource string
           'extract-loader',
@@ -109,19 +109,15 @@ module.exports = {
 
 ## Options
 
-|                    Name                     |         Type          |     Default     | Description                                                              |
-| :-----------------------------------------: | :-------------------: | :-------------: | :----------------------------------------------------------------------- |
-|              **[`url`](#url)**              | `{Boolean\|Function}` |     `true`      | Enable/Disable `url()` handling                                          |
-|           **[`import`](#import)**           | `{Boolean\/Function}` |     `true`      | Enable/Disable @import handling                                          |
-|          **[`modules`](#modules)**          |  `{Boolean\|String}`  |     `false`     | Enable/Disable CSS Modules and setup mode                                |
-|   **[`localIdentName`](#localidentname)**   |      `{String}`       | `[hash:base64]` | Configure the generated ident                                            |
-|          **[`context`](#context)**          |      `{String}`       |   `undefined`   | Allow to redefine basic loader context for local ident name              |
-|       **[`hashPrefix`](#hashprefix)**       |      `{String}`       |   `undefined`   | Allow to add custom hash to generate more unique classes                 |
-|    **[`getLocalIdent`](#getlocalident)**    |     `{Function}`      |   `undefined`   | Configure the function to generate classname based on a different schema |
-|        **[`sourceMap`](#sourcemap)**        |      `{Boolean}`      |     `false`     | Enable/Disable Sourcemaps                                                |
-|        **[`camelCase`](#camelcase)**        |  `{Boolean\|String}`  |     `false`     | Export Classnames in CamelCase                                           |
-|    **[`importLoaders`](#importloaders)**    |      `{Number}`       |       `0`       | Number of loaders applied before CSS loader                              |
-| **[`exportOnlyLocals`](#exportonlylocals)** |      `{Boolean}`      |     `false`     | Export only locals                                                       |
+|                    Name                     |            Type             | Default | Description                                        |
+| :-----------------------------------------: | :-------------------------: | :-----: | :------------------------------------------------- |
+|              **[`url`](#url)**              |    `{Boolean\|Function}`    | `true`  | Enable/Disable `url()` handling                    |
+|           **[`import`](#import)**           |    `{Boolean\|Function}`    | `true`  | Enable/Disable @import handling                    |
+|          **[`modules`](#modules)**          | `{Boolean\|String\|Object}` | `false` | Enable/Disable CSS Modules and setup their options |
+|        **[`sourceMap`](#sourcemap)**        |         `{Boolean}`         | `false` | Enable/Disable Sourcemaps                          |
+|    **[`importLoaders`](#importloaders)**    |         `{Number}`          |   `0`   | Number of loaders applied before CSS loader        |
+| **[`localsConvention`](#localsconvention)** |         `{String}`          | `asIs`  | Setup style of exported classnames                 |
+|       **[`onlyLocals`](#onlylocals)**       |         `{Boolean}`         | `false` | Export only locals                                 |
 
 ### `url`
 
@@ -160,7 +156,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
           url: true,
@@ -182,14 +178,18 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
           url: (url, resourcePath) => {
             // resourcePath - path to css file
 
-            // `url()` with `img.png` stay untouched
-            return url.includes('img.png');
+            // Don't handle `img.png` urls
+            if (url.includes('img.png')) {
+              return false;
+            }
+
+            return true;
           },
         },
       },
@@ -236,7 +236,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
           import: true,
@@ -258,7 +258,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
           import: (parsedImport, resourcePath) => {
@@ -266,8 +266,12 @@ module.exports = {
             // parsedImport.media - media query of `@import`
             // resourcePath - path to css file
 
-            // `@import` with `style.css` stay untouched
-            return parsedImport.url.includes('style.css');
+            // Don't handle `style.css` import
+            if (parsedImport.url.includes('style.css')) {
+              return false;
+            }
+
+            return true;
           },
         },
       },
@@ -276,24 +280,15 @@ module.exports = {
 };
 ```
 
-### [`modules`](https://github.com/css-modules/css-modules)
+### `modules`
 
-Type: `Boolean|String`
+Type: `Boolean|String|Object`
 Default: `false`
 
-The `modules` option enables/disables the **CSS Modules** spec and setup basic behaviour.
-
-|      Name      |    Type     | Description                                                                                                                      |
-| :------------: | :---------: | :------------------------------------------------------------------------------------------------------------------------------- |
-|   **`true`**   | `{Boolean}` | Enables local scoped CSS by default (use **local** mode by default)                                                              |
-|  **`false`**   | `{Boolean}` | Disable the **CSS Modules** spec, all **CSS Modules** features (like `@value`, `:local`, `:global` and `composes`) will not work |
-| **`'local'`**  | `{String}`  | Enables local scoped CSS by default (same as `true` value)                                                                       |
-| **`'global'`** | `{String}`  | Enables global scoped CSS by default                                                                                             |
+The `modules` option enables/disables the **[CSS Modules](https://github.com/css-modules/css-modules)** specification and setup basic behaviour.
 
 Using `false` value increase performance because we avoid parsing **CSS Modules** features, it will be useful for developers who use vanilla css or use other technologies.
 
-You can read about **modes** below.
-
 **webpack.config.js**
 
 ```js
@@ -301,7 +296,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
           modules: true,
@@ -312,6 +307,8 @@ module.exports = {
 };
 ```
 
+#### `Features`
+
 ##### `Scope`
 
 Using `local` value requires you to specify `:global` classes.
@@ -324,7 +321,7 @@ Styles can be locally scoped to avoid globally scoping styles.
 The syntax `:local(.className)` can be used to declare `className` in the local scope. The local identifiers are exported by the module.
 
 With `:local` (without brackets) local mode can be switched on for this selector.
-The `:global(.className)` nocation can be used to declare an explicit global selector.
+The `:global(.className)` notation can be used to declare an explicit global selector.
 With `:global` (without brackets) global mode can be switched on for this selector.
 
 The loader replaces local selectors with unique identifiers. The chosen unique identifiers are exported by the module.
@@ -437,7 +434,133 @@ To import from multiple modules use multiple `composes:` rules.
 }
 ```
 
-### `localIdentName`
+##### `Values`
+
+You can use `@value` to specific values to be reused throughout a document.
+
+We recommend use prefix `v-` for values, `s-` for selectors and `m-` for media at-rules.
+
+```css
+@value v-primary: #BF4040;
+@value s-black: black-selector;
+@value m-large: (min-width: 960px);
+
+.header {
+  color: v-primary;
+  padding: 0 10px;
+}
+
+.s-black {
+  color: black;
+}
+
+@media m-large {
+  .header {
+    padding: 0 20px;
+  }
+}
+```
+
+#### `Boolean`
+
+Enable **CSS Modules** features.
+
+**webpack.config.js**
+
+```js
+module.exports = {
+  module: {
+    rules: [
+      {
+        test: /\.css$/i,
+        loader: 'css-loader',
+        options: {
+          modules: true,
+        },
+      },
+    ],
+  },
+};
+```
+
+#### `String`
+
+Enable **CSS Modules** features and setup `mode`.
+
+**webpack.config.js**
+
+```js
+module.exports = {
+  module: {
+    rules: [
+      {
+        test: /\.css$/i,
+        loader: 'css-loader',
+        options: {
+          // Using `local` value has same effect like using `modules: true`
+          modules: 'global',
+        },
+      },
+    ],
+  },
+};
+```
+
+#### `Object`
+
+Enable **CSS Modules** features and setup options for them.
+
+**webpack.config.js**
+
+```js
+module.exports = {
+  module: {
+    rules: [
+      {
+        test: /\.css$/i,
+        loader: 'css-loader',
+        options: {
+          modules: {
+            mode: 'local',
+            localIdentName: '[path][name]__[local]--[hash:base64:5]',
+            context: path.resolve(__dirname, 'src'),
+            hashPrefix: 'my-custom-hash',
+          },
+        },
+      },
+    ],
+  },
+};
+```
+
+##### `mode`
+
+Type: `String`
+Default: `local`
+
+Setup `mode` option. You can omit the value when you want `local` mode.
+
+**webpack.config.js**
+
+```js
+module.exports = {
+  module: {
+    rules: [
+      {
+        test: /\.css$/i,
+        loader: 'css-loader',
+        options: {
+          modules: {
+            mode: 'global',
+          },
+        },
+      },
+    ],
+  },
+};
+```
+
+##### `localIdentName`
 
 Type: `String`
 Default: `[hash:base64]`
@@ -452,11 +575,12 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          modules: true,
-          localIdentName: '[path][name]__[local]--[hash:base64:5]',
+          modules: {
+            localIdentName: '[path][name]__[local]--[hash:base64:5]',
+          },
         },
       },
     ],
@@ -464,7 +588,7 @@ module.exports = {
 };
 ```
 
-### `context`
+##### `context`
 
 Type: `String`
 Default: `undefined`
@@ -479,11 +603,12 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          modules: true,
-          context: path.resolve(__dirname, 'context'),
+          modules: {
+            context: path.resolve(__dirname, 'context'),
+          },
         },
       },
     ],
@@ -491,7 +616,7 @@ module.exports = {
 };
 ```
 
-### `hashPrefix`
+##### `hashPrefix`
 
 Type: `String`
 Default: `undefined`
@@ -505,11 +630,12 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          modules: true,
-          hashPrefix: 'hash',
+          modules: {
+            hashPrefix: 'hash',
+          },
         },
       },
     ],
@@ -517,7 +643,7 @@ module.exports = {
 };
 ```
 
-### `getLocalIdent`
+##### `getLocalIdent`
 
 Type: `Function`
 Default: `undefined`
@@ -532,12 +658,13 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          modules: true,
-          getLocalIdent: (context, localIdentName, localName, options) => {
-            return 'whatever_random_class_name';
+          modules: {
+            getLocalIdent: (context, localIdentName, localName, options) => {
+              return 'whatever_random_class_name';
+            },
           },
         },
       },
@@ -546,16 +673,10 @@ module.exports = {
 };
 ```
 
-### `sourceMap`
+##### `localIdentRegExp`
 
-Type: `Boolean`
-Default: `false`
-
-To include source maps set the `sourceMap` option.
-
-I.e. the `mini-css-extract-plugin` can handle them.
-
-They are not enabled by default because they expose a runtime overhead and increase in bundle size (JS source maps do not). In addition to that relative paths are buggy and you need to use an absolute public path which includes the server URL.
+Type: `String|RegExp`
+Default: `undefined`
 
 **webpack.config.js**
 
@@ -564,10 +685,12 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          sourceMap: true,
+          modules: {
+            localIdentRegExp: /page-(.*)\.css/i,
+          },
         },
       },
     ],
@@ -575,33 +698,18 @@ module.exports = {
 };
 ```
 
-### `camelCase`
+### `sourceMap`
 
-Type: `Boolean|String`
+Type: `Boolean`
 Default: `false`
 
-By default, the exported JSON keys mirror the class names. If you want to camelize class names (useful in JS), pass the query parameter `camelCase` to css-loader.
-
-|        Name        |    Type     | Description                                                                                                              |
-| :----------------: | :---------: | :----------------------------------------------------------------------------------------------------------------------- |
-|    **`false`**     | `{Boolean}` | Class names will be camelized, the original class name will not to be removed from the locals                            |
-|     **`true`**     | `{Boolean}` | Class names will be camelized                                                                                            |
-|   **`'dashes'`**   | `{String}`  | Only dashes in class names will be camelized                                                                             |
-|    **`'only'`**    | `{String}`  | Introduced in `0.27.1`. Class names will be camelized, the original class name will be removed from the locals           |
-| **`'dashesOnly'`** | `{String}`  | Introduced in `0.27.1`. Dashes in class names will be camelized, the original class name will be removed from the locals |
-
-**file.css**
+To include source maps set the `sourceMap` option.
 
-```css
-.class-name {
-}
-```
+I.e. the `mini-css-extract-plugin` can handle them.
 
-**file.js**
+They are not enabled by default because they expose a runtime overhead and increase in bundle size (JS source maps do not).
 
-```js
-import { className } from 'file.css';
-```
+In addition to that relative paths are buggy and you need to use an absolute public path which includes the server URL.
 
 **webpack.config.js**
 
@@ -610,10 +718,10 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          camelCase: true,
+          sourceMap: true,
         },
       },
     ],
@@ -635,7 +743,7 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         use: [
           'style-loader',
           {
@@ -655,7 +763,53 @@ module.exports = {
 
 This may change in the future when the module system (i. e. webpack) supports loader matching by origin.
 
-### `exportOnlyLocals`
+### `localsConvention`
+
+Type: `String`
+Default: `undefined`
+
+By default, the exported JSON keys mirror the class names (i.e `asIs` value).
+
+|         Name          |    Type    | Description                                                                                      |
+| :-------------------: | :--------: | :----------------------------------------------------------------------------------------------- |
+|     **`'asIs'`**      | `{String}` | Class names will be exported as is.                                                              |
+|   **`'camelCase'`**   | `{String}` | Class names will be camelized, the original class name will not to be removed from the locals    |
+| **`'camelCaseOnly'`** | `{String}` | Class names will be camelized, the original class name will be removed from the locals           |
+|    **`'dashes'`**     | `{String}` | Only dashes in class names will be camelized                                                     |
+|  **`'dashesOnly'`**   | `{String}` | Dashes in class names will be camelized, the original class name will be removed from the locals |
+
+**file.css**
+
+```css
+.class-name {
+}
+```
+
+**file.js**
+
+```js
+import { className } from 'file.css';
+```
+
+**webpack.config.js**
+
+```js
+module.exports = {
+  module: {
+    rules: [
+      {
+        test: /\.css$/i,
+        loader: 'css-loader',
+        options: {
+          localsConvention: 'camelCase',
+        },
+      },
+    ],
+  },
+};
+```
+
+### `onlyLocals`
 
 Type: `Boolean`
 Default: `false`
@@ -671,10 +825,10 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         loader: 'css-loader',
         options: {
-          exportOnlyLocals: true,
+          onlyLocals: true,
         },
       },
     ],
@@ -695,14 +849,14 @@ module.exports = {
   module: {
     rules: [
       {
-        test: /\.css$/,
+        test: /\.css$/i,
         use: ['style-loader', 'css-loader'],
       },
       {
-        test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
+        test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)$/,
         loader: 'url-loader',
         options: {
-          limit: 10000,
+          limit: 8192,
         },
       },
     ],
@@ -734,8 +888,8 @@ Please take a moment to read our contributing guidelines if you haven't yet done
 [node-url]: https://nodejs.org
 [deps]: https://david-dm.org/webpack-contrib/css-loader.svg
 [deps-url]: https://david-dm.org/webpack-contrib/css-loader
-[tests]: https://img.shields.io/circleci/project/github/webpack-contrib/css-loader.svg
-[tests-url]: https://circleci.com/gh/webpack-contrib/css-loader
+[tests]: https://dev.azure.com/webpack-contrib/css-loader/_apis/build/status/webpack-contrib.css-loader?branchName=master
+[tests-url]: https://dev.azure.com/webpack-contrib/css-loader/_build/latest?definitionId=2&branchName=master
 [cover]: https://codecov.io/gh/webpack-contrib/css-loader/branch/master/graph/badge.svg
 [cover-url]: https://codecov.io/gh/webpack-contrib/css-loader
 [chat]: https://badges.gitter.im/webpack/webpack.svg
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 18caa038..00000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-branches:
-  only:
-    - master
-    - next
-init:
-  - git config --global core.autocrlf input
-cache:
-  - node_modules
-  - '%APPDATA%\npm-cache'
-environment:
-  matrix:
-    - nodejs_version: '6'
-      webpack_version: latest
-      job_part: test
-    - nodejs_version: '8'
-      webpack_version: latest
-      job_part: test
-    - nodejs_version: '10'
-      webpack_version: latest
-      job_part: test
-    - nodejs_version: '11'
-      webpack_version: latest
-      job_part: test
-    - nodejs_version: '8'
-      webpack_version: next
-      job_part: test
-build: 'off'
-matrix:
-  fast_finish: true
-  allow_failures:
-    - nodejs_version: '8'
-      webpack_version: next
-      job_part: test
-install:
-  - ps: Install-Product node $env:nodejs_version x64
-  - npm i -g npm@latest
-  - npm ci
-  - npm i -g @webpack-contrib/tag-versions
-before_test:
-  - cmd: npm install webpack@%webpack_version%
-test_script:
-  - node --version
-  - npm --version
-  - cmd: FOR /F %%I in ('compver --name webpack --gte %webpack_version% --lt latest') do SET COMPARED_VERSION_RESULT=%%I
-  - cmd: IF %COMPARED_VERSION_RESULT% NEQ -1 (npm run ci:%job_part%) ELSE (ECHO "Next is older than Latest - Skipping Canary Suite")
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 00000000..6aa59122
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,192 @@
+trigger:
+  - master
+  - next
+
+jobs:
+  - job: Lint
+    pool:
+      vmImage: ubuntu-16.04
+    steps:
+      - task: NodeTool@0
+        inputs:
+          versionSpec: ^10.13.0
+        displayName: 'Install Node.js'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: i -g npm@latest
+        displayName: 'Install latest NPM'
+      - script: |
+          node -v
+          npm -v
+        displayName: 'Print versions'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: ci
+        displayName: 'Install dependencies'
+      - script: npm run lint
+        displayName: 'Run lint'
+      - script: npm run security
+        displayName: 'Run NPM audit'
+      - script: ./node_modules/.bin/commitlint-azure-pipelines
+        displayName: 'Run lint commit message'
+
+  - job: Linux
+    pool:
+      vmImage: ubuntu-16.04
+    strategy:
+      maxParallel: 4
+      matrix:
+        node-12:
+          node_version: ^12.0.0
+          webpack_version: latest
+        node-10:
+          node_version: ^10.13.0
+          webpack_version: latest
+        node-8:
+          node_version: ^8.9.0
+          webpack_version: latest
+        node-8-canary:
+          node_version: ^8.9.0
+          webpack_version: next
+          continue_on_error: true
+    steps:
+      - task: NodeTool@0
+        inputs:
+          versionSpec: $(node_version)
+        displayName: 'Install Node.js $(node_version)'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: i -g npm@latest
+        displayName: 'Install latest NPM'
+      - script: |
+          node -v
+          npm -v
+        displayName: 'Print versions'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: ci
+        displayName: 'Install dependencies'
+      - script: npm i webpack@$(webpack_version)
+        displayName: 'Install "webpack@$(webpack_version)"'
+      - script: npm run test:coverage -- --ci --reporters="default" --reporters="jest-junit" || $(continue_on_error)
+        displayName: 'Run tests with coverage'
+      - task: PublishTestResults@2
+        inputs:
+          testRunTitle: 'Linux with Node.js $(node_version)'
+          testResultsFiles: '**/junit.xml'
+        condition: succeededOrFailed()
+        displayName: 'Publish test results'
+      - script: curl -s https://codecov.io/bash | bash -s -- -t $(CODECOV_TOKEN)
+        condition: succeededOrFailed()
+        displayName: 'Submit coverage data to codecov'
+
+  - job: macOS
+    pool:
+      vmImage: macOS-10.14
+    strategy:
+      maxParallel: 4
+      matrix:
+        node-12:
+          node_version: ^12.0.0
+          webpack_version: latest
+        node-10:
+          node_version: ^10.13.0
+          webpack_version: latest
+        node-8:
+          node_version: ^8.9.0
+          webpack_version: latest
+        node-8-canary:
+          node_version: ^8.9.0
+          webpack_version: next
+          continue_on_error: true
+    steps:
+      - task: NodeTool@0
+        inputs:
+          versionSpec: $(node_version)
+        displayName: 'Install Node.js $(node_version)'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: i -g npm@latest
+        displayName: 'Install latest NPM'
+      - script: |
+          node -v
+          npm -v
+        displayName: 'Print versions'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: ci
+        displayName: 'Install dependencies'
+      - script: npm i webpack@$(webpack_version)
+        displayName: 'Install "webpack@$(webpack_version)"'
+      - script: npm run test:coverage -- --ci --reporters="default" --reporters="jest-junit" || $(continue_on_error)
+        displayName: 'Run tests with coverage'
+      - task: PublishTestResults@2
+        inputs:
+          testRunTitle: 'Linux with Node.js $(node_version)'
+          testResultsFiles: '**/junit.xml'
+        condition: succeededOrFailed()
+        displayName: 'Publish test results'
+      - script: curl -s https://codecov.io/bash | bash -s -- -t $(CODECOV_TOKEN)
+        condition: succeededOrFailed()
+        displayName: 'Submit coverage data to codecov'
+
+  - job: Windows
+    pool:
+      vmImage: windows-2019
+    strategy:
+      maxParallel: 4
+      matrix:
+        node-12:
+          node_version: ^12.0.0
+          webpack_version: latest
+        node-10:
+          node_version: ^10.13.0
+          webpack_version: latest
+        node-8:
+          node_version: ^8.9.0
+          webpack_version: latest
+        node-8-canary:
+          node_version: ^8.9.0
+          webpack_version: next
+          continue_on_error: true
+    steps:
+      - script: 'git config --global core.autocrlf input'
+        displayName: 'Config git core.autocrlf'
+      - checkout: self
+      - task: NodeTool@0
+        inputs:
+          versionSpec: $(node_version)
+        displayName: 'Install Node.js $(node_version)'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: i -g npm@latest
+        displayName: 'Install latest NPM'
+      - script: |
+          node -v
+          npm -v
+        displayName: 'Print versions'
+      - task: Npm@1
+        inputs:
+          command: custom
+          customCommand: ci
+        displayName: 'Install dependencies'
+      - script: npm i webpack@$(webpack_version)
+        displayName: 'Install "webpack@$(webpack_version)"'
+      - script: npm run test:coverage -- --ci --reporters="default" --reporters="jest-junit" || $(continue_on_error)
+        displayName: 'Run tests with coverage'
+      - task: PublishTestResults@2
+        inputs:
+          testRunTitle: 'Linux with Node.js $(node_version)'
+          testResultsFiles: '**/junit.xml'
+        condition: succeededOrFailed()
+        displayName: 'Publish test results'
+      - script: curl -s https://codecov.io/bash | bash -s -- -t $(CODECOV_TOKEN)
+        condition: succeededOrFailed()
+        displayName: 'Submit coverage data to codecov'
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 00000000..c428f395
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,34 @@
+const MIN_BABEL_VERSION = 7;
+
+module.exports = (api) => {
+  api.assertVersion(MIN_BABEL_VERSION);
+  api.cache(true);
+
+  return {
+    presets: [
+      [
+        '@babel/preset-env',
+        {
+          targets: {
+            node: '8.9.0',
+          },
+        },
+      ],
+    ],
+    overrides: [
+      {
+        test: './src/runtime',
+        presets: [
+          [
+            '@babel/preset-env',
+            {
+              targets: {
+                node: '0.12',
+              },
+            },
+          ],
+        ],
+      },
+    ],
+  };
+};
diff --git a/commitlint.config.js b/commitlint.config.js
new file mode 100644
index 00000000..84dcb122
--- /dev/null
+++ b/commitlint.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+  extends: ['@commitlint/config-conventional'],
+};
diff --git a/husky.config.js b/husky.config.js
new file mode 100644
index 00000000..4c2ec3ae
--- /dev/null
+++ b/husky.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+  hooks: {
+    'pre-commit': 'lint-staged',
+    'commit-msg': 'commitlint -E HUSKY_GIT_PARAMS',
+  },
+};
diff --git a/lint-staged.config.js b/lint-staged.config.js
new file mode 100644
index 00000000..51ee7271
--- /dev/null
+++ b/lint-staged.config.js
@@ -0,0 +1,7 @@
+module.exports = {
+  ignore: ['package-lock.json', 'CHANGELOG.md'],
+  linters: {
+    '*.js': ['prettier --write', 'eslint --fix', 'git add'],
+    '*.{json,md,yml,css}': ['prettier --write', 'git add'],
+  },
+};
diff --git a/package-lock.json b/package-lock.json
index 1e62a359..24e0fe04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,21 +1,21 @@
 {
   "name": "css-loader",
-  "version": "2.1.1",
+  "version": "3.0.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
     "@babel/cli": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.3.tgz",
-      "integrity": "sha512-bfna97nmJV6nDJhXNPeEfxyMjWnt6+IjUAaDPiYRTBlm8L41n8nvw6UAqUCbvpFfU246gHPxW7sfWwqtF4FcYA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.4.4.tgz",
+      "integrity": "sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ==",
       "dev": true,
       "requires": {
-        "chokidar": "^2.0.3",
+        "chokidar": "^2.0.4",
         "commander": "^2.8.1",
         "convert-source-map": "^1.1.0",
         "fs-readdir-recursive": "^1.1.0",
         "glob": "^7.0.0",
-        "lodash": "^4.17.10",
+        "lodash": "^4.17.11",
         "mkdirp": "^0.5.1",
         "output-file-sync": "^2.0.0",
         "slash": "^2.0.0",
@@ -40,18 +40,18 @@
       }
     },
     "@babel/core": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz",
-      "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz",
+      "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==",
       "dev": true,
       "requires": {
         "@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.4",
+        "@babel/helpers": "^7.4.4",
+        "@babel/parser": "^7.4.5",
+        "@babel/template": "^7.4.4",
+        "@babel/traverse": "^7.4.5",
+        "@babel/types": "^7.4.4",
         "convert-source-map": "^1.1.0",
         "debug": "^4.1.0",
         "json5": "^2.1.0",
@@ -80,9 +80,9 @@
           }
         },
         "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         },
         "source-map": {
@@ -94,12 +94,12 @@
       }
     },
     "@babel/generator": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz",
-      "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+      "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.3.4",
+        "@babel/types": "^7.4.4",
         "jsesc": "^2.5.1",
         "lodash": "^4.17.11",
         "source-map": "^0.5.0",
@@ -134,25 +134,25 @@
       }
     },
     "@babel/helper-call-delegate": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
-      "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
+      "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.0.0",
-        "@babel/traverse": "^7.1.0",
-        "@babel/types": "^7.0.0"
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/traverse": "^7.4.4",
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-define-map": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
-      "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz",
+      "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==",
       "dev": true,
       "requires": {
         "@babel/helper-function-name": "^7.1.0",
-        "@babel/types": "^7.0.0",
-        "lodash": "^4.17.10"
+        "@babel/types": "^7.4.4",
+        "lodash": "^4.17.11"
       }
     },
     "@babel/helper-explode-assignable-expression": {
@@ -186,12 +186,12 @@
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
-      "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+      "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-member-expression-to-functions": {
@@ -213,17 +213,17 @@
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
-      "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz",
+      "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==",
       "dev": true,
       "requires": {
         "@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"
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/template": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "lodash": "^4.17.11"
       }
     },
     "@babel/helper-optimise-call-expression": {
@@ -242,12 +242,12 @@
       "dev": true
     },
     "@babel/helper-regex": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
-      "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz",
+      "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.10"
+        "lodash": "^4.17.11"
       }
     },
     "@babel/helper-remap-async-to-generator": {
@@ -264,15 +264,15 @@
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz",
-      "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
+      "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
       "dev": true,
       "requires": {
         "@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.4",
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-simple-access": {
@@ -286,12 +286,12 @@
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
-      "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+      "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-wrap-function": {
@@ -307,14 +307,14 @@
       }
     },
     "@babel/helpers": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz",
-      "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz",
+      "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.1.2",
-        "@babel/traverse": "^7.1.5",
-        "@babel/types": "^7.3.0"
+        "@babel/template": "^7.4.4",
+        "@babel/traverse": "^7.4.4",
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/highlight": {
@@ -329,9 +329,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz",
-      "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
+      "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==",
       "dev": true
     },
     "@babel/plugin-proposal-async-generator-functions": {
@@ -356,9 +356,9 @@
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz",
-      "integrity": "sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz",
+      "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -376,14 +376,14 @@
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
-      "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
+      "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.0.0",
-        "regexpu-core": "^4.2.0"
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
       }
     },
     "@babel/plugin-syntax-async-generators": {
@@ -432,9 +432,9 @@
       }
     },
     "@babel/plugin-transform-async-to-generator": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz",
-      "integrity": "sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz",
+      "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -452,9 +452,9 @@
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz",
-      "integrity": "sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz",
+      "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -462,18 +462,18 @@
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz",
-      "integrity": "sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz",
+      "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.0.0",
-        "@babel/helper-define-map": "^7.1.0",
+        "@babel/helper-define-map": "^7.4.4",
         "@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.4",
+        "@babel/helper-split-export-declaration": "^7.4.4",
         "globals": "^11.1.0"
       }
     },
@@ -487,23 +487,23 @@
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.3.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz",
-      "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz",
+      "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
-      "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
+      "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.0.0",
-        "regexpu-core": "^4.1.3"
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
@@ -526,18 +526,18 @@
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
-      "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+      "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
-      "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
+      "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
       "dev": true,
       "requires": {
         "@babel/helper-function-name": "^7.1.0",
@@ -553,6 +553,15 @@
         "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
+      "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
     "@babel/plugin-transform-modules-amd": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
@@ -564,23 +573,23 @@
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
-      "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz",
+      "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-module-transforms": "^7.4.4",
         "@babel/helper-plugin-utils": "^7.0.0",
         "@babel/helper-simple-access": "^7.1.0"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz",
-      "integrity": "sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz",
+      "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.0.0",
+        "@babel/helper-hoist-variables": "^7.4.4",
         "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
@@ -595,18 +604,18 @@
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.3.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz",
-      "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
+      "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
       "dev": true,
       "requires": {
-        "regexp-tree": "^0.1.0"
+        "regexp-tree": "^0.1.6"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
-      "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+      "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -623,23 +632,41 @@
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.3.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz",
-      "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+      "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
       "dev": true,
       "requires": {
-        "@babel/helper-call-delegate": "^7.1.0",
+        "@babel/helper-call-delegate": "^7.4.4",
         "@babel/helper-get-function-arity": "^7.0.0",
         "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
+      "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz",
-      "integrity": "sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
+      "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "^0.14.0"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
+      "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
       "dev": true,
       "requires": {
-        "regenerator-transform": "^0.13.4"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
@@ -671,9 +698,9 @@
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
-      "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+      "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.0.0",
@@ -690,109 +717,112 @@
       }
     },
     "@babel/plugin-transform-unicode-regex": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
-      "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
+      "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.0.0",
-        "regexpu-core": "^4.1.3"
-      }
-    },
-    "@babel/polyfill": {
-      "version": "7.2.5",
-      "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz",
-      "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==",
-      "dev": true,
-      "requires": {
-        "core-js": "^2.5.7",
-        "regenerator-runtime": "^0.12.0"
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
       }
     },
     "@babel/preset-env": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz",
-      "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz",
+      "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
         "@babel/helper-plugin-utils": "^7.0.0",
         "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
         "@babel/plugin-proposal-json-strings": "^7.2.0",
-        "@babel/plugin-proposal-object-rest-spread": "^7.3.4",
+        "@babel/plugin-proposal-object-rest-spread": "^7.4.4",
         "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
         "@babel/plugin-syntax-async-generators": "^7.2.0",
         "@babel/plugin-syntax-json-strings": "^7.2.0",
         "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
         "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
         "@babel/plugin-transform-arrow-functions": "^7.2.0",
-        "@babel/plugin-transform-async-to-generator": "^7.3.4",
+        "@babel/plugin-transform-async-to-generator": "^7.4.4",
         "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
-        "@babel/plugin-transform-block-scoping": "^7.3.4",
-        "@babel/plugin-transform-classes": "^7.3.4",
+        "@babel/plugin-transform-block-scoping": "^7.4.4",
+        "@babel/plugin-transform-classes": "^7.4.4",
         "@babel/plugin-transform-computed-properties": "^7.2.0",
-        "@babel/plugin-transform-destructuring": "^7.2.0",
-        "@babel/plugin-transform-dotall-regex": "^7.2.0",
+        "@babel/plugin-transform-destructuring": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
         "@babel/plugin-transform-duplicate-keys": "^7.2.0",
         "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
-        "@babel/plugin-transform-for-of": "^7.2.0",
-        "@babel/plugin-transform-function-name": "^7.2.0",
+        "@babel/plugin-transform-for-of": "^7.4.4",
+        "@babel/plugin-transform-function-name": "^7.4.4",
         "@babel/plugin-transform-literals": "^7.2.0",
+        "@babel/plugin-transform-member-expression-literals": "^7.2.0",
         "@babel/plugin-transform-modules-amd": "^7.2.0",
-        "@babel/plugin-transform-modules-commonjs": "^7.2.0",
-        "@babel/plugin-transform-modules-systemjs": "^7.3.4",
+        "@babel/plugin-transform-modules-commonjs": "^7.4.4",
+        "@babel/plugin-transform-modules-systemjs": "^7.4.4",
         "@babel/plugin-transform-modules-umd": "^7.2.0",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
-        "@babel/plugin-transform-new-target": "^7.0.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
+        "@babel/plugin-transform-new-target": "^7.4.4",
         "@babel/plugin-transform-object-super": "^7.2.0",
-        "@babel/plugin-transform-parameters": "^7.2.0",
-        "@babel/plugin-transform-regenerator": "^7.3.4",
+        "@babel/plugin-transform-parameters": "^7.4.4",
+        "@babel/plugin-transform-property-literals": "^7.2.0",
+        "@babel/plugin-transform-regenerator": "^7.4.5",
+        "@babel/plugin-transform-reserved-words": "^7.2.0",
         "@babel/plugin-transform-shorthand-properties": "^7.2.0",
         "@babel/plugin-transform-spread": "^7.2.0",
         "@babel/plugin-transform-sticky-regex": "^7.2.0",
-        "@babel/plugin-transform-template-literals": "^7.2.0",
+        "@babel/plugin-transform-template-literals": "^7.4.4",
         "@babel/plugin-transform-typeof-symbol": "^7.2.0",
-        "@babel/plugin-transform-unicode-regex": "^7.2.0",
-        "browserslist": "^4.3.4",
+        "@babel/plugin-transform-unicode-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "browserslist": "^4.6.0",
+        "core-js-compat": "^3.1.1",
         "invariant": "^2.2.2",
         "js-levenshtein": "^1.1.3",
-        "semver": "^5.3.0"
+        "semver": "^5.5.0"
       }
     },
     "@babel/runtime": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
-      "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
+      "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
       "dev": true,
       "requires": {
-        "regenerator-runtime": "^0.12.0"
+        "regenerator-runtime": "^0.13.2"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.2",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
+          "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==",
+          "dev": true
+        }
       }
     },
     "@babel/template": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
-      "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+      "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.2.2",
-        "@babel/types": "^7.2.2"
+        "@babel/parser": "^7.4.4",
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/traverse": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz",
-      "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==",
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz",
+      "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.3.4",
+        "@babel/generator": "^7.4.4",
         "@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.4",
+        "@babel/parser": "^7.4.5",
+        "@babel/types": "^7.4.4",
         "debug": "^4.1.0",
         "globals": "^11.1.0",
         "lodash": "^4.17.11"
@@ -808,17 +838,17 @@
           }
         },
         "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         }
       }
     },
     "@babel/types": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
-      "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+      "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
       "dev": true,
       "requires": {
         "esutils": "^2.0.2",
@@ -826,23 +856,33 @@
         "to-fast-properties": "^2.0.0"
       }
     },
+    "@cnakazawa/watch": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
+      "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
+      "dev": true,
+      "requires": {
+        "exec-sh": "^0.3.2",
+        "minimist": "^1.2.0"
+      }
+    },
     "@commitlint/cli": {
-      "version": "7.5.2",
-      "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-7.5.2.tgz",
-      "integrity": "sha512-UQdW/wNb+XeANoYYLyuKEDIfWKSzdhJkPQZ8ie/IjfMNnsP+B23bkX4Ati+6U8zgz0yyngoxWl+3lfExiIL4hQ==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-8.0.0.tgz",
+      "integrity": "sha512-wFu+g9v73I2rMRTv27ItIbcrhWqge0ZpUNUIJ9fw8TF7XpmhaUFvGqa2kU6st1F0TyEOrq5ZMzwI8kQZNVLuXg==",
       "dev": true,
       "requires": {
-        "@commitlint/format": "^7.5.0",
-        "@commitlint/lint": "^7.5.2",
-        "@commitlint/load": "^7.5.0",
-        "@commitlint/read": "^7.5.0",
+        "@commitlint/format": "^8.0.0",
+        "@commitlint/lint": "^8.0.0",
+        "@commitlint/load": "^8.0.0",
+        "@commitlint/read": "^8.0.0",
         "babel-polyfill": "6.26.0",
         "chalk": "2.3.1",
-        "get-stdin": "5.0.1",
+        "get-stdin": "7.0.0",
         "lodash": "4.17.11",
         "meow": "5.0.0",
-        "resolve-from": "4.0.0",
-        "resolve-global": "0.1.0"
+        "resolve-from": "5.0.0",
+        "resolve-global": "1.0.0"
       },
       "dependencies": {
         "chalk": {
@@ -868,85 +908,92 @@
       }
     },
     "@commitlint/config-conventional": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-7.5.0.tgz",
-      "integrity": "sha512-odLgBfQ5xntFAmMfAmDY2C4EWhW+cSTbvbsRS7seb55DCa3IaxxSHHC9eXrR+hN/BdUT5vqAxdX1PkR996sq9Q==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.0.0.tgz",
+      "integrity": "sha512-umg1irroowOV+x8oZPBw8woCogZO5MFKUYQq+fRZvhowoSwDHXYILP3ETcdHUgvytw/K/a8Xvu7iCypK6oZQ+g==",
       "dev": true
     },
     "@commitlint/ensure": {
-      "version": "7.5.2",
-      "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-7.5.2.tgz",
-      "integrity": "sha512-ZMJKHhSJC789chKy0kWp8EWbCpLPy6vKa+fopUVx+tWL7H8AeBbibXlqAnybg+HWNcb/RD7ORROx0IsgrK4IYA==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-8.0.0.tgz",
+      "integrity": "sha512-rhBO79L9vXeb26JU+14cxZQq46KyyVqlo31C33VIe7oJndUtWrDhZTvMjJeB1pdXh4EU4XWdMo+yzBmuypFgig==",
       "dev": true,
       "requires": {
         "lodash": "4.17.11"
       }
     },
     "@commitlint/execute-rule": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-7.5.0.tgz",
-      "integrity": "sha512-K66aoly8mxSHmBA/Y8bKSPPcCAR4GpJEsvHaLDYOG7GsyChu8NgCD53L8GUqPW8lBCWwnmCiSL+RlOkNHJ0Gag==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-8.0.0.tgz",
+      "integrity": "sha512-E/A2xHqx3syclXAFl8vJY2o/+xtL9axrqbFFF42Bzke+Eflf0mOJviPxDodu2xP0wXMRQ9UokAi/reK9dMtA/A==",
       "dev": true,
       "requires": {
         "babel-runtime": "6.26.0"
       }
     },
     "@commitlint/format": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-7.5.0.tgz",
-      "integrity": "sha512-DEeQXfTLUm9kARliCBfw3SlQRAYjK2aXeRAUMs1HPhLA2tjNFFGv6LOpFFNdiu/WV+o1ojcgIvBBjpHaVT+Tvw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-8.0.0.tgz",
+      "integrity": "sha512-dFxKGLp1T4obi7+YZ2NcSAebJA/dBQwnerRJGz0hWtsO6pheJRe+qC50+GCb2fYGWUc5lIWawaRts0m7RkFGUw==",
       "dev": true,
       "requires": {
-        "babel-runtime": "^6.23.0",
         "chalk": "^2.0.1"
       }
     },
     "@commitlint/is-ignored": {
-      "version": "7.5.1",
-      "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-7.5.1.tgz",
-      "integrity": "sha512-8JZCgy6bWSnjOT5cTTiyEAGp+Y4+5CUknhVbyiPxTRbjy6yF0aMKs1gMTfHrNHTKsasgmkCyPQd4C2eOPceuKA==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-8.0.0.tgz",
+      "integrity": "sha512-geWr/NXGMrZ3qc3exDM+S1qV+nMDxp1LwN3rLpEN2gXTwW3rIXq49RQQUkn0n3BHcpqJJ9EBhjqFoMU1TYx7Ng==",
       "dev": true,
       "requires": {
-        "semver": "5.6.0"
+        "semver": "6.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+          "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+          "dev": true
+        }
       }
     },
     "@commitlint/lint": {
-      "version": "7.5.2",
-      "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-7.5.2.tgz",
-      "integrity": "sha512-DY/UfGFDquMno+5c6+tE50rMxpjdQK3CRG+nktgYlVz1UAqeUD+bRc3pvX5HwAsuGvyDrWAjtszHtEDeYJKcjw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-8.0.0.tgz",
+      "integrity": "sha512-5nKiJpBDR2iei+fre4+6M7FUrSX1cIMoxXKdrnb1GMOXkw9CsZSF5OvdrX08zHAFmOAeDaohoCV+XN/UN/vWYg==",
       "dev": true,
       "requires": {
-        "@commitlint/is-ignored": "^7.5.1",
-        "@commitlint/parse": "^7.5.0",
-        "@commitlint/rules": "^7.5.2",
+        "@commitlint/is-ignored": "^8.0.0",
+        "@commitlint/parse": "^8.0.0",
+        "@commitlint/rules": "^8.0.0",
         "babel-runtime": "^6.23.0",
         "lodash": "4.17.11"
       }
     },
     "@commitlint/load": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-7.5.0.tgz",
-      "integrity": "sha512-fhBER/rzPsteM6zq5qqMiOi+A2bHKCE/0PKmOzYgaqTKcG9c1SsOle9phPemW85to8Gxd2YgUOVLsZkCMltLtA==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-8.0.0.tgz",
+      "integrity": "sha512-JXC3YjO7hN7Rv2Z/SaYz+oIvShsQWLL7gnOCe8+YgI1EusBqjV4mPI0HnBXVe9volfdxbl+Af/GoQZs2dvyOFA==",
       "dev": true,
       "requires": {
-        "@commitlint/execute-rule": "^7.5.0",
-        "@commitlint/resolve-extends": "^7.5.0",
+        "@commitlint/execute-rule": "^8.0.0",
+        "@commitlint/resolve-extends": "^8.0.0",
         "babel-runtime": "^6.23.0",
-        "cosmiconfig": "^4.0.0",
+        "cosmiconfig": "^5.2.0",
         "lodash": "4.17.11",
-        "resolve-from": "^4.0.0"
+        "resolve-from": "^5.0.0"
       }
     },
     "@commitlint/message": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-7.5.0.tgz",
-      "integrity": "sha512-5YOhsqy/MgHH7vyDsmmzO6Jr3ygr1pXbCm9NR3XB51wjg55Kd6/6dVlkhS/FmDp99pfwTdHb0TyeDFEjP98waw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-8.0.0.tgz",
+      "integrity": "sha512-2oGUV8630nzsj17t6akq3mFguzWePADO069IwKJi+CN5L0YRBQj9zGRCB0P+zvh4EngjqMnuMwhEhaBEM8TTzA==",
       "dev": true
     },
     "@commitlint/parse": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-7.5.0.tgz",
-      "integrity": "sha512-hWASM8SBFTBtlFkKrEtD1qW6yTe2BsfoRiMKuYyRCTd+739TUF17og5vgQVuWttbGP0gXaciW44NygS2YjZmfA==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-8.0.0.tgz",
+      "integrity": "sha512-6CyweJrBkI+Jqx7qkpYgVx2muBMoUZAZHWhUTgqHIDDmI+3d4UPZ2plGS2G0969KkHCgjtlwnwTjWqA9HLMwPA==",
       "dev": true,
       "requires": {
         "conventional-changelog-angular": "^1.3.3",
@@ -955,52 +1002,52 @@
       }
     },
     "@commitlint/read": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-7.5.0.tgz",
-      "integrity": "sha512-uqGFCKZGnBUCTkxoCCJp4MfWUkegXkyT0T0RVM9diyG6uNWPWlMH1509sjLFlyeJKG+cSyYGG/d6T103ScMb4Q==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-8.0.0.tgz",
+      "integrity": "sha512-IhNMiKPqkB5yxphe/FiOKgX2uCysbR8fGK6KOXON3uJaVND0dctxnfdv+vY9gDv2CtjIXgNFO+v6FLnqMfIvwA==",
       "dev": true,
       "requires": {
-        "@commitlint/top-level": "^7.5.0",
+        "@commitlint/top-level": "^8.0.0",
         "@marionebl/sander": "^0.6.0",
         "babel-runtime": "^6.23.0",
         "git-raw-commits": "^1.3.0"
       }
     },
     "@commitlint/resolve-extends": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-7.5.0.tgz",
-      "integrity": "sha512-FRIyPuqGvGa03OT4VgOHakizcw8YR5rdm77JsZff1rSnpxk6i+025I6qMeHqCIr5FaVIA0kR3FlC+MJFUs165A==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-8.0.0.tgz",
+      "integrity": "sha512-SPkH+dXMCpYboVwpIhtOhpg1xYdE7L77fuHmEJWveXSmgfi0GosFm4aJ7Cer9DjNjW+KbD0TUfzZU0TrYUESjQ==",
       "dev": true,
       "requires": {
         "babel-runtime": "6.26.0",
         "import-fresh": "^3.0.0",
         "lodash": "4.17.11",
-        "resolve-from": "^4.0.0",
-        "resolve-global": "^0.1.0"
+        "resolve-from": "^5.0.0",
+        "resolve-global": "^1.0.0"
       }
     },
     "@commitlint/rules": {
-      "version": "7.5.2",
-      "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-7.5.2.tgz",
-      "integrity": "sha512-eDN1UFPcBOjdnlI3syuo7y99SjGH/dUV6S9NvBocAye8ln5dfKiI2shhWochJhl36r/kYWU8Wrvl2NZJL3c52g==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-8.0.0.tgz",
+      "integrity": "sha512-s9BehZQP5uAc/V4lMaUxwxFabVZTw5fZ18Ase1e5tbMKVIwq/7E00Ny1czN7xSFXfgffukWznsexpfFXYpbVsg==",
       "dev": true,
       "requires": {
-        "@commitlint/ensure": "^7.5.2",
-        "@commitlint/message": "^7.5.0",
-        "@commitlint/to-lines": "^7.5.0",
+        "@commitlint/ensure": "^8.0.0",
+        "@commitlint/message": "^8.0.0",
+        "@commitlint/to-lines": "^8.0.0",
         "babel-runtime": "^6.23.0"
       }
     },
     "@commitlint/to-lines": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-7.5.0.tgz",
-      "integrity": "sha512-ZQ3LxPNuQ/J7q42hkiPWN5fUIjWae85H2HHoBB+/Rw1fo+oehvr4Xyt+Oa9Mx5WbBnev/wXnUFjXgoadv1RZ5A==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-8.0.0.tgz",
+      "integrity": "sha512-qqgNeyj+NJ1Xffwv6hGsipKlVFj30NmfPup751MS/me0GV8IBd//njTjiqHvf/3sKm/OcGn4Re4D7YXwTcC2RA==",
       "dev": true
     },
     "@commitlint/top-level": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-7.5.0.tgz",
-      "integrity": "sha512-oTu185GufTYHjTXPHu6k6HL7iuASOvDOtQizZWRSxj0VXuoki6e0HzvGZsRsycDTOn04Q9hVu+PhF83IUwRpeg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-8.0.0.tgz",
+      "integrity": "sha512-If9hwfISHV8HXGKeXUKsUvOo4DuISWiU/VC2qHsKpeHSREAxkWESmQzzwYvOtyBjMiOTfAXfzgth18g36Fz2ow==",
       "dev": true,
       "requires": {
         "find-up": "^2.1.0"
@@ -1012,6 +1059,180 @@
       "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==",
       "dev": true
     },
+    "@jest/console": {
+      "version": "24.7.1",
+      "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
+      "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==",
+      "dev": true,
+      "requires": {
+        "@jest/source-map": "^24.3.0",
+        "chalk": "^2.0.1",
+        "slash": "^2.0.0"
+      }
+    },
+    "@jest/core": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz",
+      "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==",
+      "dev": true,
+      "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/reporters": "^24.8.0",
+        "@jest/test-result": "^24.8.0",
+        "@jest/transform": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.1",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.1.15",
+        "jest-changed-files": "^24.8.0",
+        "jest-config": "^24.8.0",
+        "jest-haste-map": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-resolve-dependencies": "^24.8.0",
+        "jest-runner": "^24.8.0",
+        "jest-runtime": "^24.8.0",
+        "jest-snapshot": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "jest-validate": "^24.8.0",
+        "jest-watcher": "^24.8.0",
+        "micromatch": "^3.1.10",
+        "p-each-series": "^1.0.0",
+        "pirates": "^4.0.1",
+        "realpath-native": "^1.1.0",
+        "rimraf": "^2.5.4",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "ansi-escapes": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+          "dev": true
+        }
+      }
+    },
+    "@jest/environment": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz",
+      "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==",
+      "dev": true,
+      "requires": {
+        "@jest/fake-timers": "^24.8.0",
+        "@jest/transform": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "jest-mock": "^24.8.0"
+      }
+    },
+    "@jest/fake-timers": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz",
+      "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-mock": "^24.8.0"
+      }
+    },
+    "@jest/reporters": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz",
+      "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==",
+      "dev": true,
+      "requires": {
+        "@jest/environment": "^24.8.0",
+        "@jest/test-result": "^24.8.0",
+        "@jest/transform": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "chalk": "^2.0.1",
+        "exit": "^0.1.2",
+        "glob": "^7.1.2",
+        "istanbul-lib-coverage": "^2.0.2",
+        "istanbul-lib-instrument": "^3.0.1",
+        "istanbul-lib-report": "^2.0.4",
+        "istanbul-lib-source-maps": "^3.0.1",
+        "istanbul-reports": "^2.1.1",
+        "jest-haste-map": "^24.8.0",
+        "jest-resolve": "^24.8.0",
+        "jest-runtime": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "jest-worker": "^24.6.0",
+        "node-notifier": "^5.2.1",
+        "slash": "^2.0.0",
+        "source-map": "^0.6.0",
+        "string-length": "^2.0.0"
+      }
+    },
+    "@jest/source-map": {
+      "version": "24.3.0",
+      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz",
+      "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==",
+      "dev": true,
+      "requires": {
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.1.15",
+        "source-map": "^0.6.0"
+      }
+    },
+    "@jest/test-result": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz",
+      "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==",
+      "dev": true,
+      "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/types": "^24.8.0",
+        "@types/istanbul-lib-coverage": "^2.0.0"
+      }
+    },
+    "@jest/test-sequencer": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz",
+      "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==",
+      "dev": true,
+      "requires": {
+        "@jest/test-result": "^24.8.0",
+        "jest-haste-map": "^24.8.0",
+        "jest-runner": "^24.8.0",
+        "jest-runtime": "^24.8.0"
+      }
+    },
+    "@jest/transform": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz",
+      "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.1.0",
+        "@jest/types": "^24.8.0",
+        "babel-plugin-istanbul": "^5.1.0",
+        "chalk": "^2.0.1",
+        "convert-source-map": "^1.4.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.1.15",
+        "jest-haste-map": "^24.8.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-util": "^24.8.0",
+        "micromatch": "^3.1.10",
+        "realpath-native": "^1.1.0",
+        "slash": "^2.0.0",
+        "source-map": "^0.6.1",
+        "write-file-atomic": "2.4.1"
+      }
+    },
+    "@jest/types": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz",
+      "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^1.1.1",
+        "@types/yargs": "^12.0.9"
+      }
+    },
     "@marionebl/sander": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz",
@@ -1032,16 +1253,117 @@
         "any-observable": "^0.3.0"
       }
     },
+    "@types/babel__core": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz",
+      "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "@types/babel__generator": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz",
+      "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__template": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
+      "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__traverse": {
+      "version": "7.0.7",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz",
+      "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.3.0"
+      }
+    },
+    "@types/events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+      "dev": true
+    },
+    "@types/glob": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+      "dev": true,
+      "requires": {
+        "@types/events": "*",
+        "@types/minimatch": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/istanbul-lib-coverage": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
+      "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
+      "dev": true
+    },
+    "@types/istanbul-lib-report": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
+      "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "*"
+      }
+    },
+    "@types/istanbul-reports": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
+      "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
+      "dev": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "*",
+        "@types/istanbul-lib-report": "*"
+      }
+    },
+    "@types/minimatch": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+      "dev": true
+    },
     "@types/node": {
-      "version": "10.12.29",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.29.tgz",
-      "integrity": "sha512-J/tnbnj8HcsBgCe2apZbdUpQ7hs4d7oZNTYA5bekWdP0sr2NGsOpI/HRdDroEi209tEvTcTtxhD0FfED3DhEcw==",
+      "version": "12.0.7",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.7.tgz",
+      "integrity": "sha512-1YKeT4JitGgE4SOzyB9eMwO0nGVNkNEsm9qlIt1Lqm/tG2QEiSMTD4kS3aO6L+w5SClLVxALmIBESK6Mk5wX0A==",
+      "dev": true
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
+      "dev": true
+    },
+    "@types/stack-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
+      "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
       "dev": true
     },
-    "@types/semver": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
-      "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
+    "@types/yargs": {
+      "version": "12.0.12",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz",
+      "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==",
       "dev": true
     },
     "@webassemblyjs/ast": {
@@ -1221,16 +1543,26 @@
       }
     },
     "@webpack-contrib/defaults": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@webpack-contrib/defaults/-/defaults-3.0.5.tgz",
-      "integrity": "sha512-UPrwEqHEfFEwMg0gbIFEBZQJdMRAqCDv0abpXE7VZOPGhwfftlmPFn3TS9f8Fvc3XkJcHQQ/x3wUDQxXW02qHw==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@webpack-contrib/defaults/-/defaults-5.0.0.tgz",
+      "integrity": "sha512-33gQqfMoSSrqElk1179OizwsWlG/EyqiQQNuRGby1JH034jF4yX82Z+A/8RFuDeVFtwfPS8S44zwvfbWCzLGQA==",
       "dev": true,
       "requires": {
         "chalk": "^2.3.0",
         "git-username": "^1.0.0",
+        "loader-utils": "^1.2.3",
         "mrm-core": "^3.1.1",
-        "path-exists": "^3.0.0",
+        "path-exists": "^4.0.0",
+        "schema-utils": "^1.0.0",
         "user-meta": "^1.0.0"
+      },
+      "dependencies": {
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+          "dev": true
+        }
       }
     },
     "@webpack-contrib/eslint-config-webpack": {
@@ -1268,9 +1600,9 @@
       "dev": true
     },
     "acorn": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
-      "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
+      "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
       "dev": true
     },
     "acorn-dynamic-import": {
@@ -1280,9 +1612,9 @@
       "dev": true
     },
     "acorn-globals": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
-      "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
+      "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
       "dev": true,
       "requires": {
         "acorn": "^6.0.1",
@@ -1322,19 +1654,16 @@
       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
       "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw=="
     },
-    "ansi-align": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
-      "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
-      "dev": true,
-      "requires": {
-        "string-width": "^2.0.0"
-      }
+    "ansi": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+      "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=",
+      "dev": true
     },
     "ansi-escapes": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
-      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+      "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
       "dev": true
     },
     "ansi-regex": {
@@ -1378,21 +1707,22 @@
         }
       }
     },
-    "append-transform": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
-      "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==",
-      "dev": true,
-      "requires": {
-        "default-require-extensions": "^2.0.0"
-      }
-    },
     "aproba": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
       "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
       "dev": true
     },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "dev": true,
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
     "argparse": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -1426,6 +1756,12 @@
       "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
       "dev": true
     },
+    "array-filter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+      "dev": true
+    },
     "array-find-index": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
@@ -1438,6 +1774,28 @@
       "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
       "dev": true
     },
+    "array-includes": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
+      }
+    },
+    "array-map": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+      "dev": true
+    },
+    "array-reduce": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+      "dev": true
+    },
     "array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -1486,11 +1844,12 @@
       }
     },
     "assert": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
-      "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
       "dev": true,
       "requires": {
+        "object-assign": "^4.1.1",
         "util": "0.10.3"
       },
       "dependencies": {
@@ -1530,18 +1889,15 @@
       "dev": true
     },
     "async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
-      "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.11"
-      }
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+      "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+      "dev": true
     },
     "async-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
-      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
       "dev": true
     },
     "async-limiter": {
@@ -1563,17 +1919,26 @@
       "dev": true
     },
     "autoprefixer": {
-      "version": "9.4.10",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.10.tgz",
-      "integrity": "sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==",
+      "version": "9.6.0",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz",
+      "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.4.2",
-        "caniuse-lite": "^1.0.30000940",
+        "browserslist": "^4.6.1",
+        "caniuse-lite": "^1.0.30000971",
+        "chalk": "^2.4.2",
         "normalize-range": "^0.1.2",
         "num2fraction": "^1.2.2",
-        "postcss": "^7.0.14",
+        "postcss": "^7.0.16",
         "postcss-value-parser": "^3.3.1"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+          "dev": true
+        }
       }
     },
     "aws-sign2": {
@@ -1642,26 +2007,29 @@
       }
     },
     "babel-jest": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.1.0.tgz",
-      "integrity": "sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz",
+      "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==",
       "dev": true,
       "requires": {
+        "@jest/transform": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "@types/babel__core": "^7.1.0",
         "babel-plugin-istanbul": "^5.1.0",
-        "babel-preset-jest": "^24.1.0",
+        "babel-preset-jest": "^24.6.0",
         "chalk": "^2.4.2",
         "slash": "^2.0.0"
       }
     },
     "babel-plugin-istanbul": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz",
-      "integrity": "sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ==",
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz",
+      "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==",
       "dev": true,
       "requires": {
         "find-up": "^3.0.0",
-        "istanbul-lib-instrument": "^3.0.0",
-        "test-exclude": "^5.0.0"
+        "istanbul-lib-instrument": "^3.3.0",
+        "test-exclude": "^5.2.3"
       },
       "dependencies": {
         "find-up": {
@@ -1702,18 +2070,21 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         }
       }
     },
     "babel-plugin-jest-hoist": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz",
-      "integrity": "sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw==",
-      "dev": true
+      "version": "24.6.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz",
+      "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==",
+      "dev": true,
+      "requires": {
+        "@types/babel__traverse": "^7.0.6"
+      }
     },
     "babel-polyfill": {
       "version": "6.26.0",
@@ -1735,13 +2106,13 @@
       }
     },
     "babel-preset-jest": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz",
-      "integrity": "sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw==",
+      "version": "24.6.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz",
+      "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
-        "babel-plugin-jest-hoist": "^24.1.0"
+        "babel-plugin-jest-hoist": "^24.6.0"
       }
     },
     "babel-runtime": {
@@ -1752,14 +2123,6 @@
       "requires": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
-      },
-      "dependencies": {
-        "regenerator-runtime": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-          "dev": true
-        }
       }
     },
     "balanced-match": {
@@ -1844,15 +2207,15 @@
       "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
     },
     "binary-extensions": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz",
-      "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
       "dev": true
     },
     "bluebird": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
-      "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+      "version": "3.5.5",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+      "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
       "dev": true
     },
     "bn.js": {
@@ -1861,29 +2224,6 @@
       "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
       "dev": true
     },
-    "boxen": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
-      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
-      "dev": true,
-      "requires": {
-        "ansi-align": "^2.0.0",
-        "camelcase": "^4.0.0",
-        "chalk": "^2.0.1",
-        "cli-boxes": "^1.0.0",
-        "string-width": "^2.0.0",
-        "term-size": "^1.2.0",
-        "widest-line": "^2.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
-          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-          "dev": true
-        }
-      }
-    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2024,14 +2364,14 @@
       }
     },
     "browserslist": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz",
-      "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==",
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.2.tgz",
+      "integrity": "sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30000939",
-        "electron-to-chromium": "^1.3.113",
-        "node-releases": "^1.1.8"
+        "caniuse-lite": "^1.0.30000974",
+        "electron-to-chromium": "^1.3.150",
+        "node-releases": "^1.1.23"
       }
     },
     "bser": {
@@ -2155,15 +2495,15 @@
       }
     },
     "callsites": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz",
-      "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
       "dev": true
     },
     "camelcase": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz",
-      "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ=="
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
     },
     "camelcase-keys": {
       "version": "4.2.0",
@@ -2185,25 +2525,38 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30000941",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000941.tgz",
-      "integrity": "sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==",
+      "version": "1.0.30000974",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz",
+      "integrity": "sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww==",
       "dev": true
     },
-    "capture-exit": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
-      "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
+    "caporal": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/caporal/-/caporal-1.1.0.tgz",
+      "integrity": "sha512-R5qo2QGoqBM6RvzHonGhUuEJSeqEa4lD1r+cPUEY2+YsXhpQVTS2TvScfIbi6ydFdhzFCNeNUB1v0YrRBvsbdg==",
       "dev": true,
       "requires": {
-        "rsvp": "^3.3.3"
+        "bluebird": "^3.4.7",
+        "cli-table3": "^0.5.0",
+        "colorette": "1.0.1",
+        "fast-levenshtein": "^2.0.6",
+        "lodash.camelcase": "^4.3.0",
+        "lodash.kebabcase": "^4.1.1",
+        "lodash.merge": "^4.6.0",
+        "micromist": "1.1.0",
+        "prettyjson": "^1.2.1",
+        "tabtab": "^2.2.2",
+        "winston": "^2.3.1"
       }
     },
-    "capture-stack-trace": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
-      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
-      "dev": true
+    "capture-exit": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+      "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+      "dev": true,
+      "requires": {
+        "rsvp": "^4.8.4"
+      }
     },
     "caseless": {
       "version": "0.12.0",
@@ -2238,9 +2591,9 @@
       "dev": true
     },
     "chokidar": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz",
-      "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==",
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
+      "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
       "dev": true,
       "requires": {
         "anymatch": "^2.0.0",
@@ -2254,7 +2607,7 @@
         "normalize-path": "^3.0.0",
         "path-is-absolute": "^1.0.0",
         "readdirp": "^2.2.1",
-        "upath": "^1.1.0"
+        "upath": "^1.1.1"
       }
     },
     "chownr": {
@@ -2264,18 +2617,18 @@
       "dev": true
     },
     "chrome-trace-event": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
-      "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
       "dev": true,
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "ci-info": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
-      "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
       "dev": true
     },
     "cipher-base": {
@@ -2311,19 +2664,24 @@
         }
       }
     },
-    "cli-boxes": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
-      "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
-      "dev": true
-    },
     "cli-cursor": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
-      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+      "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^1.0.1"
+      }
+    },
+    "cli-table3": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz",
+      "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==",
       "dev": true,
       "requires": {
-        "restore-cursor": "^2.0.0"
+        "colors": "^1.1.2",
+        "object-assign": "^4.1.0",
+        "string-width": "^2.1.1"
       }
     },
     "cli-truncate": {
@@ -2454,19 +2812,31 @@
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
+    "colorette": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.0.1.tgz",
+      "integrity": "sha512-40MnlppkzHhFjRhtXunbpqKUT+eJn0gyVGi8aQlNSG8T2CCy31NdD7yktcS0aizH1VP2OhhQCyGMeTp0a/fvaw==",
+      "dev": true
+    },
+    "colors": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
+      "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
+      "dev": true
+    },
     "combined-stream": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
-      "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
       "dev": true,
       "requires": {
         "delayed-stream": "~1.0.0"
       }
     },
     "commander": {
-      "version": "2.19.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
-      "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
       "dev": true
     },
     "comment-json": {
@@ -2478,6 +2848,15 @@
         "json-parser": "^1.0.0"
       }
     },
+    "commitlint-azure-pipelines-cli": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/commitlint-azure-pipelines-cli/-/commitlint-azure-pipelines-cli-1.0.2.tgz",
+      "integrity": "sha512-Uj5QatjR1HAifoJI7ZjNx3O8iuH0lUnTmja9jGIA4KjEPLfbyctob4i1JgOZ7tGQK918n1uoolyZBjbQ7h/WSw==",
+      "dev": true,
+      "requires": {
+        "execa": "^1.0.0"
+      }
+    },
     "commondir": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -2494,16 +2873,10 @@
         "dot-prop": "^3.0.0"
       }
     },
-    "compare-versions": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz",
-      "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==",
-      "dev": true
-    },
     "component-emitter": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
       "dev": true
     },
     "concat-map": {
@@ -2524,31 +2897,6 @@
         "typedarray": "^0.0.6"
       }
     },
-    "configstore": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
-      "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
-      "dev": true,
-      "requires": {
-        "dot-prop": "^4.1.0",
-        "graceful-fs": "^4.1.2",
-        "make-dir": "^1.0.0",
-        "unique-string": "^1.0.0",
-        "write-file-atomic": "^2.0.0",
-        "xdg-basedir": "^3.0.0"
-      },
-      "dependencies": {
-        "dot-prop": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
-          "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
-          "dev": true,
-          "requires": {
-            "is-obj": "^1.0.0"
-          }
-        }
-      }
-    },
     "console-browserify": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@@ -2571,21 +2919,22 @@
       "dev": true
     },
     "conventional-changelog": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.0.6.tgz",
-      "integrity": "sha512-1b96x3G67lDKakRvMm+VvYGwgRk+C8aapHKL5iZ/TJzzD/RuyGA2diHNEsR+uPHmQ7/A4Ts7j6N+VNqUoOfksg==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.8.tgz",
+      "integrity": "sha512-fb3/DOLLrQdNqN0yYn/lT6HcNsAa9A+VTDBqlZBMQcEPPIeJIMI+DBs3yu+eiYOLi22w9oShq3nn/zN6qm1Hmw==",
       "dev": true,
       "requires": {
         "conventional-changelog-angular": "^5.0.3",
         "conventional-changelog-atom": "^2.0.1",
         "conventional-changelog-codemirror": "^2.0.1",
-        "conventional-changelog-core": "^3.1.6",
+        "conventional-changelog-conventionalcommits": "^3.0.2",
+        "conventional-changelog-core": "^3.2.2",
         "conventional-changelog-ember": "^2.0.2",
-        "conventional-changelog-eslint": "^3.0.1",
+        "conventional-changelog-eslint": "^3.0.2",
         "conventional-changelog-express": "^2.0.1",
         "conventional-changelog-jquery": "^3.0.4",
         "conventional-changelog-jshint": "^2.0.1",
-        "conventional-changelog-preset-loader": "^2.0.2"
+        "conventional-changelog-preset-loader": "^2.1.1"
       },
       "dependencies": {
         "conventional-changelog-angular": {
@@ -2628,14 +2977,30 @@
         "q": "^1.5.1"
       }
     },
+    "conventional-changelog-config-spec": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-1.0.0.tgz",
+      "integrity": "sha512-RR3479x5Qw7XWkmNDYx/kOnsQJW+FZBIakURG/Dg7FkTaCrGjAkgfH96pQs9SyOEZI07USEXy7FjUDWYP8bt3Q==",
+      "dev": true
+    },
+    "conventional-changelog-conventionalcommits": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-3.0.2.tgz",
+      "integrity": "sha512-w1+fQSDnm/7+sPKIYC5nfRVYDszt+6HdWizrigSqWFVIiiBVzkHGeqDLMSHc+Qq9qssHVAxAak5206epZyK87A==",
+      "dev": true,
+      "requires": {
+        "compare-func": "^1.3.1",
+        "q": "^1.5.1"
+      }
+    },
     "conventional-changelog-core": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz",
-      "integrity": "sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz",
+      "integrity": "sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g==",
       "dev": true,
       "requires": {
-        "conventional-changelog-writer": "^4.0.3",
-        "conventional-commits-parser": "^3.0.1",
+        "conventional-changelog-writer": "^4.0.5",
+        "conventional-commits-parser": "^3.0.2",
         "dateformat": "^3.0.0",
         "get-pkg-repo": "^1.0.0",
         "git-raw-commits": "2.0.0",
@@ -2646,21 +3011,21 @@
         "q": "^1.5.1",
         "read-pkg": "^3.0.0",
         "read-pkg-up": "^3.0.0",
-        "through2": "^2.0.0"
+        "through2": "^3.0.0"
       },
       "dependencies": {
         "conventional-commits-parser": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz",
-          "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==",
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz",
+          "integrity": "sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg==",
           "dev": true,
           "requires": {
             "JSONStream": "^1.0.4",
-            "is-text-path": "^1.0.0",
+            "is-text-path": "^2.0.0",
             "lodash": "^4.2.1",
             "meow": "^4.0.0",
             "split2": "^2.0.0",
-            "through2": "^2.0.0",
+            "through2": "^3.0.0",
             "trim-off-newlines": "^1.0.0"
           }
         },
@@ -2675,6 +3040,27 @@
             "meow": "^4.0.0",
             "split2": "^2.0.0",
             "through2": "^2.0.0"
+          },
+          "dependencies": {
+            "through2": {
+              "version": "2.0.5",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+              "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~2.3.6",
+                "xtend": "~4.0.1"
+              }
+            }
+          }
+        },
+        "is-text-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
+          "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
+          "dev": true,
+          "requires": {
+            "text-extensions": "^2.0.0"
           }
         },
         "meow": {
@@ -2693,6 +3079,21 @@
             "redent": "^2.0.0",
             "trim-newlines": "^2.0.0"
           }
+        },
+        "text-extensions": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.0.0.tgz",
+          "integrity": "sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ==",
+          "dev": true
+        },
+        "through2": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+          "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+          "dev": true,
+          "requires": {
+            "readable-stream": "2 || 3"
+          }
         }
       }
     },
@@ -2706,9 +3107,9 @@
       }
     },
     "conventional-changelog-eslint": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.1.tgz",
-      "integrity": "sha512-yH3+bYrtvgKxSFChUBQnKNh9/U9kN2JElYBm253VpYs5wXhPHVc9ENcuVGWijh24nnOkei7wEJmnmUzgZ4ok+A==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz",
+      "integrity": "sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ==",
       "dev": true,
       "requires": {
         "q": "^1.5.1"
@@ -2743,27 +3144,27 @@
       }
     },
     "conventional-changelog-preset-loader": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz",
-      "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz",
+      "integrity": "sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA==",
       "dev": true
     },
     "conventional-changelog-writer": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz",
-      "integrity": "sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA==",
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz",
+      "integrity": "sha512-ou/sbrplJMM6KQpR5rKFYNVQYesFjN7WpNGdudQSWNi6X+RgyFUcSv871YBYkrUYV9EX8ijMohYVzn9RUb+4ag==",
       "dev": true,
       "requires": {
         "compare-func": "^1.3.1",
-        "conventional-commits-filter": "^2.0.1",
+        "conventional-commits-filter": "^2.0.2",
         "dateformat": "^3.0.0",
         "handlebars": "^4.1.0",
         "json-stringify-safe": "^5.0.1",
         "lodash": "^4.2.1",
         "meow": "^4.0.0",
-        "semver": "^5.5.0",
+        "semver": "^6.0.0",
         "split": "^1.0.0",
-        "through2": "^2.0.0"
+        "through2": "^3.0.0"
       },
       "dependencies": {
         "meow": {
@@ -2782,16 +3183,31 @@
             "redent": "^2.0.0",
             "trim-newlines": "^2.0.0"
           }
+        },
+        "semver": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
+          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "dev": true
+        },
+        "through2": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+          "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+          "dev": true,
+          "requires": {
+            "readable-stream": "2 || 3"
+          }
         }
       }
     },
     "conventional-commits-filter": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz",
-      "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz",
+      "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==",
       "dev": true,
       "requires": {
-        "is-subset": "^0.1.1",
+        "lodash.ismatch": "^4.4.0",
         "modify-values": "^1.0.0"
       }
     },
@@ -2830,33 +3246,45 @@
       }
     },
     "conventional-recommended-bump": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.0.4.tgz",
-      "integrity": "sha512-9mY5Yoblq+ZMqJpBzgS+RpSq+SUfP2miOR3H/NR9drGf08WCrY9B6HAGJZEm6+ThsVP917VHAahSOjM6k1vhPg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.0.tgz",
+      "integrity": "sha512-CsfdICpbUe0pmM4MTG90GPUqnFgB1SWIR2HAh+vS+JhhJdPWvc0brs8oadWoYGhFOQpQwe57JnvzWEWU0m2OSg==",
       "dev": true,
       "requires": {
-        "concat-stream": "^1.6.0",
-        "conventional-changelog-preset-loader": "^2.0.2",
-        "conventional-commits-filter": "^2.0.1",
-        "conventional-commits-parser": "^3.0.1",
+        "concat-stream": "^2.0.0",
+        "conventional-changelog-preset-loader": "^2.1.1",
+        "conventional-commits-filter": "^2.0.2",
+        "conventional-commits-parser": "^3.0.2",
         "git-raw-commits": "2.0.0",
         "git-semver-tags": "^2.0.2",
         "meow": "^4.0.0",
         "q": "^1.5.1"
       },
       "dependencies": {
+        "concat-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+          "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+          "dev": true,
+          "requires": {
+            "buffer-from": "^1.0.0",
+            "inherits": "^2.0.3",
+            "readable-stream": "^3.0.2",
+            "typedarray": "^0.0.6"
+          }
+        },
         "conventional-commits-parser": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz",
-          "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==",
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz",
+          "integrity": "sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg==",
           "dev": true,
           "requires": {
             "JSONStream": "^1.0.4",
-            "is-text-path": "^1.0.0",
+            "is-text-path": "^2.0.0",
             "lodash": "^4.2.1",
             "meow": "^4.0.0",
             "split2": "^2.0.0",
-            "through2": "^2.0.0",
+            "through2": "^3.0.0",
             "trim-off-newlines": "^1.0.0"
           }
         },
@@ -2871,6 +3299,42 @@
             "meow": "^4.0.0",
             "split2": "^2.0.0",
             "through2": "^2.0.0"
+          },
+          "dependencies": {
+            "readable-stream": {
+              "version": "2.3.6",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+              "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+              "dev": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+              }
+            },
+            "through2": {
+              "version": "2.0.5",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+              "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~2.3.6",
+                "xtend": "~4.0.1"
+              }
+            }
+          }
+        },
+        "is-text-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
+          "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
+          "dev": true,
+          "requires": {
+            "text-extensions": "^2.0.0"
           }
         },
         "meow": {
@@ -2889,6 +3353,32 @@
             "redent": "^2.0.0",
             "trim-newlines": "^2.0.0"
           }
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "text-extensions": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.0.0.tgz",
+          "integrity": "sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ==",
+          "dev": true
+        },
+        "through2": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+          "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+          "dev": true,
+          "requires": {
+            "readable-stream": "2 || 3"
+          }
         }
       }
     },
@@ -2922,9 +3412,34 @@
       "dev": true
     },
     "core-js": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
-      "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==",
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+      "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+      "dev": true
+    },
+    "core-js-compat": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.3.tgz",
+      "integrity": "sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.6.0",
+        "core-js-pure": "3.1.3",
+        "semver": "^6.1.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
+          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "dev": true
+        }
+      }
+    },
+    "core-js-pure": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.3.tgz",
+      "integrity": "sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==",
       "dev": true
     },
     "core-util-is": {
@@ -2934,15 +3449,33 @@
       "dev": true
     },
     "cosmiconfig": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
-      "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+      "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
       "dev": true,
       "requires": {
+        "import-fresh": "^2.0.0",
         "is-directory": "^0.3.1",
-        "js-yaml": "^3.9.0",
-        "parse-json": "^4.0.0",
-        "require-from-string": "^2.0.1"
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      },
+      "dependencies": {
+        "import-fresh": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+          "dev": true,
+          "requires": {
+            "caller-path": "^2.0.0",
+            "resolve-from": "^3.0.0"
+          }
+        },
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "dev": true
+        }
       }
     },
     "create-ecdh": {
@@ -2955,15 +3488,6 @@
         "elliptic": "^6.0.0"
       }
     },
-    "create-error-class": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
-      "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
-      "dev": true,
-      "requires": {
-        "capture-stack-trace": "^1.0.0"
-      }
-    },
     "create-hash": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
@@ -3033,12 +3557,6 @@
         "randomfill": "^1.0.3"
       }
     },
-    "crypto-random-string": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
-      "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
-      "dev": true
-    },
     "css-blank-pseudo": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
@@ -3087,9 +3605,9 @@
       }
     },
     "cssdb": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.3.0.tgz",
-      "integrity": "sha512-VHPES/+c9s+I0ryNj+PXvp84nz+ms843z/efpaEINwP/QfGsINL3gpLp5qjapzDNzNzbXxur8uxKxSXImrg4ag==",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz",
+      "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==",
       "dev": true
     },
     "cssesc": {
@@ -3104,9 +3622,9 @@
       "dev": true
     },
     "cssstyle": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz",
-      "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
+      "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
       "dev": true,
       "requires": {
         "cssom": "0.3.x"
@@ -3121,6 +3639,12 @@
         "array-find-index": "^1.0.1"
       }
     },
+    "cycle": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+      "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+      "dev": true
+    },
     "cyclist": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
@@ -3244,15 +3768,6 @@
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
       "dev": true
     },
-    "default-require-extensions": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
-      "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=",
-      "dev": true,
-      "requires": {
-        "strip-bom": "^3.0.0"
-      }
-    },
     "define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -3304,17 +3819,18 @@
       }
     },
     "del": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/del/-/del-4.0.0.tgz",
-      "integrity": "sha512-/BnSJ+SuZyLu7xMn48kZY0nMXDi+5KNmR4g8n21Wivsl8+B9njV6/5kcTNE9juSprp0zRWBU28JuHUq0FqK1Nw==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+      "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
       "dev": true,
       "requires": {
+        "@types/glob": "^7.1.1",
         "globby": "^6.1.0",
         "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.2"
+        "rimraf": "^2.6.3"
       },
       "dependencies": {
         "pify": {
@@ -3326,229 +3842,13 @@
       }
     },
     "del-cli": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-1.1.0.tgz",
-      "integrity": "sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-2.0.0.tgz",
+      "integrity": "sha512-IREsO6mjSTxxvWLKMMUi1G0izhqEBx7qeDkOJ6H3+TJl8gQl6x5C5hK4Sm1GJ51KodUMR6O7HuIhnF24Edua3g==",
       "dev": true,
       "requires": {
-        "del": "^3.0.0",
-        "meow": "^3.6.0",
-        "update-notifier": "^2.1.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-          "dev": true
-        },
-        "camelcase-keys": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-          "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^2.0.0",
-            "map-obj": "^1.0.0"
-          }
-        },
-        "del": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
-          "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
-          "dev": true,
-          "requires": {
-            "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"
-          }
-        },
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "get-stdin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-          "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-          "dev": true
-        },
-        "indent-string": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-          "dev": true,
-          "requires": {
-            "repeating": "^2.0.0"
-          }
-        },
-        "is-path-cwd": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
-          "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-          "dev": true
-        },
-        "is-path-in-cwd": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
-          "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
-          "dev": true,
-          "requires": {
-            "is-path-inside": "^1.0.0"
-          }
-        },
-        "load-json-file": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-          "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "parse-json": "^2.2.0",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0",
-            "strip-bom": "^2.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-              "dev": true
-            }
-          }
-        },
-        "map-obj": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-          "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-          "dev": true
-        },
-        "meow": {
-          "version": "3.7.0",
-          "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-          "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-          "dev": true,
-          "requires": {
-            "camelcase-keys": "^2.0.0",
-            "decamelize": "^1.1.2",
-            "loud-rejection": "^1.0.0",
-            "map-obj": "^1.0.1",
-            "minimist": "^1.1.3",
-            "normalize-package-data": "^2.3.4",
-            "object-assign": "^4.0.1",
-            "read-pkg-up": "^1.0.1",
-            "redent": "^1.0.0",
-            "trim-newlines": "^1.0.0"
-          }
-        },
-        "p-map": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
-          "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
-          "dev": true
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-              "dev": true
-            }
-          }
-        },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        },
-        "read-pkg-up": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-          "dev": true,
-          "requires": {
-            "find-up": "^1.0.0",
-            "read-pkg": "^1.0.0"
-          }
-        },
-        "redent": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-          "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-          "dev": true,
-          "requires": {
-            "indent-string": "^2.1.0",
-            "strip-indent": "^1.0.1"
-          }
-        },
-        "strip-bom": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
-          "requires": {
-            "is-utf8": "^0.2.0"
-          }
-        },
-        "strip-indent": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-          "dev": true,
-          "requires": {
-            "get-stdin": "^4.0.1"
-          }
-        },
-        "trim-newlines": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-          "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-          "dev": true
-        }
+        "del": "^4.1.1",
+        "meow": "^5.0.0"
       }
     },
     "delayed-stream": {
@@ -3557,6 +3857,12 @@
       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
       "dev": true
     },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+      "dev": true
+    },
     "des.js": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
@@ -3580,9 +3886,9 @@
       "dev": true
     },
     "diff-sequences": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.0.0.tgz",
-      "integrity": "sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw==",
+      "version": "24.3.0",
+      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz",
+      "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==",
       "dev": true
     },
     "diffie-hellman": {
@@ -3630,21 +3936,60 @@
       }
     },
     "dotgitignore": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-1.0.3.tgz",
-      "integrity": "sha512-eu5XjSstm0WXQsARgo6kPjkINYZlOUW+z/KtAAIBjHa5mUpMPrxJytbPIndWz6GubBuuuH5ljtVcXKnVnH5q8w==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz",
+      "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==",
       "dev": true,
       "requires": {
-        "find-up": "^2.1.0",
+        "find-up": "^3.0.0",
         "minimatch": "^3.0.4"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+          "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        }
       }
     },
-    "duplexer3": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
-      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
-      "dev": true
-    },
     "duplexify": {
       "version": "3.7.1",
       "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
@@ -3668,23 +4013,21 @@
       }
     },
     "editorconfig": {
-      "version": "0.15.2",
-      "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz",
-      "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==",
+      "version": "0.15.3",
+      "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
+      "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
       "dev": true,
       "requires": {
-        "@types/node": "^10.11.7",
-        "@types/semver": "^5.5.0",
         "commander": "^2.19.0",
-        "lru-cache": "^4.1.3",
+        "lru-cache": "^4.1.5",
         "semver": "^5.6.0",
         "sigmund": "^1.0.1"
       }
     },
     "electron-to-chromium": {
-      "version": "1.3.113",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz",
-      "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==",
+      "version": "1.3.155",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.155.tgz",
+      "integrity": "sha512-/ci/XgZG8jkLYOgOe3mpJY1onxPPTDY17y7scldhnSjjZqV6VvREG/LvwhRuV7BJbnENFfuDWZkSqlTh4x9ZjQ==",
       "dev": true
     },
     "elegant-spinner": {
@@ -3771,6 +4114,17 @@
         "object-keys": "^1.0.12"
       }
     },
+    "es-check": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/es-check/-/es-check-5.0.0.tgz",
+      "integrity": "sha512-30n+EZt5KjazXEvyYr2DXJCOJJWfdT1unRp5+Szlcja6uGAB3Sh3QPjRsxd2xgN9SFj4S5P8pdBISwGcDdS45Q==",
+      "dev": true,
+      "requires": {
+        "acorn": "6.0.4",
+        "caporal": "1.1.0",
+        "glob": "^7.1.2"
+      }
+    },
     "es-to-primitive": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
@@ -3809,9 +4163,9 @@
       }
     },
     "eslint": {
-      "version": "5.15.1",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz",
-      "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==",
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+      "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
@@ -3820,7 +4174,7 @@
         "cross-spawn": "^6.0.5",
         "debug": "^4.0.1",
         "doctrine": "^3.0.0",
-        "eslint-scope": "^4.0.2",
+        "eslint-scope": "^4.0.3",
         "eslint-utils": "^1.3.1",
         "eslint-visitor-keys": "^1.0.0",
         "espree": "^5.0.1",
@@ -3834,7 +4188,7 @@
         "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
         "inquirer": "^6.2.2",
-        "js-yaml": "^3.12.0",
+        "js-yaml": "^3.13.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
         "levn": "^0.3.0",
         "lodash": "^4.17.11",
@@ -3852,12 +4206,27 @@
         "text-table": "^0.2.0"
       },
       "dependencies": {
+        "ansi-escapes": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+          "dev": true
+        },
         "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
         "debug": {
           "version": "4.1.1",
           "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -3867,12 +4236,89 @@
             "ms": "^2.1.1"
           }
         },
+        "external-editor": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+          "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+          "dev": true,
+          "requires": {
+            "chardet": "^0.7.0",
+            "iconv-lite": "^0.4.24",
+            "tmp": "^0.0.33"
+          }
+        },
+        "figures": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+          "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "inquirer": {
+          "version": "6.3.1",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz",
+          "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==",
+          "dev": true,
+          "requires": {
+            "ansi-escapes": "^3.2.0",
+            "chalk": "^2.4.2",
+            "cli-cursor": "^2.1.0",
+            "cli-width": "^2.0.0",
+            "external-editor": "^3.0.3",
+            "figures": "^2.0.0",
+            "lodash": "^4.17.11",
+            "mute-stream": "0.0.7",
+            "run-async": "^2.2.0",
+            "rxjs": "^6.4.0",
+            "string-width": "^2.1.0",
+            "strip-ansi": "^5.1.0",
+            "through": "^2.3.6"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
         "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
+        "mute-stream": {
+          "version": "0.0.7",
+          "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+          "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
           "dev": true
         },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        },
         "strip-ansi": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -3880,10 +4326,44 @@
           "dev": true,
           "requires": {
             "ansi-regex": "^3.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+              "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+              "dev": true
+            }
+          }
+        },
+        "tmp": {
+          "version": "0.0.33",
+          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+          "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+          "dev": true,
+          "requires": {
+            "os-tmpdir": "~1.0.2"
           }
         }
       }
     },
+    "eslint-config-prettier": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz",
+      "integrity": "sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA==",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^6.0.0"
+      },
+      "dependencies": {
+        "get-stdin": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+          "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+          "dev": true
+        }
+      }
+    },
     "eslint-import-resolver-node": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
@@ -3895,9 +4375,9 @@
       }
     },
     "eslint-module-utils": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz",
-      "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz",
+      "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==",
       "dev": true,
       "requires": {
         "debug": "^2.6.8",
@@ -3905,21 +4385,22 @@
       }
     },
     "eslint-plugin-import": {
-      "version": "2.16.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz",
-      "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==",
+      "version": "2.17.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz",
+      "integrity": "sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q==",
       "dev": true,
       "requires": {
+        "array-includes": "^3.0.3",
         "contains-path": "^0.1.0",
         "debug": "^2.6.9",
         "doctrine": "1.5.0",
         "eslint-import-resolver-node": "^0.3.2",
-        "eslint-module-utils": "^2.3.0",
+        "eslint-module-utils": "^2.4.0",
         "has": "^1.0.3",
         "lodash": "^4.17.11",
         "minimatch": "^3.0.4",
         "read-pkg-up": "^2.0.0",
-        "resolve": "^1.9.0"
+        "resolve": "^1.11.0"
       },
       "dependencies": {
         "doctrine": {
@@ -3991,19 +4472,10 @@
         }
       }
     },
-    "eslint-plugin-prettier": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz",
-      "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==",
-      "dev": true,
-      "requires": {
-        "prettier-linter-helpers": "^1.0.0"
-      }
-    },
     "eslint-scope": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz",
-      "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+      "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
       "dev": true,
       "requires": {
         "esrecurse": "^4.1.0",
@@ -4031,6 +4503,14 @@
         "acorn": "^6.0.7",
         "acorn-jsx": "^5.0.0",
         "eslint-visitor-keys": "^1.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+          "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
+          "dev": true
+        }
       }
     },
     "esprima": {
@@ -4086,40 +4566,24 @@
       }
     },
     "exec-sh": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
-      "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
-      "dev": true,
-      "requires": {
-        "merge": "^1.2.0"
-      }
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
+      "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==",
+      "dev": true
     },
     "execa": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
       "dev": true,
       "requires": {
-        "cross-spawn": "^5.0.1",
-        "get-stream": "^3.0.0",
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
         "is-stream": "^1.1.0",
         "npm-run-path": "^2.0.0",
         "p-finally": "^1.0.0",
         "signal-exit": "^3.0.0",
         "strip-eof": "^1.0.0"
-      },
-      "dependencies": {
-        "cross-spawn": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        }
       }
     },
     "exit": {
@@ -4128,6 +4592,12 @@
       "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
       "dev": true
     },
+    "exit-hook": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+      "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+      "dev": true
+    },
     "expand-brackets": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -4164,16 +4634,17 @@
       }
     },
     "expect": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-24.1.0.tgz",
-      "integrity": "sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz",
+      "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
         "ansi-styles": "^3.2.0",
-        "jest-get-type": "^24.0.0",
-        "jest-matcher-utils": "^24.0.0",
-        "jest-message-util": "^24.0.0",
-        "jest-regex-util": "^24.0.0"
+        "jest-get-type": "^24.8.0",
+        "jest-matcher-utils": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-regex-util": "^24.3.0"
       }
     },
     "extend": {
@@ -4204,14 +4675,14 @@
       }
     },
     "external-editor": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
-      "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz",
+      "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=",
       "dev": true,
       "requires": {
-        "chardet": "^0.7.0",
-        "iconv-lite": "^0.4.24",
-        "tmp": "^0.0.33"
+        "extend": "^3.0.0",
+        "spawn-sync": "^1.0.15",
+        "tmp": "^0.0.29"
       }
     },
     "extglob": {
@@ -4285,17 +4756,17 @@
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
       "dev": true
     },
+    "eyes": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+      "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+      "dev": true
+    },
     "fast-deep-equal": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
       "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
     },
-    "fast-diff": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
-      "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
-      "dev": true
-    },
     "fast-json-stable-stringify": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
@@ -4323,12 +4794,13 @@
       "dev": true
     },
     "figures": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
-      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+      "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
       "dev": true,
       "requires": {
-        "escape-string-regexp": "^1.0.5"
+        "escape-string-regexp": "^1.0.5",
+        "object-assign": "^4.1.0"
       }
     },
     "file-entry-cache": {
@@ -4341,25 +4813,15 @@
       }
     },
     "file-loader": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
-      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.0.0.tgz",
+      "integrity": "sha512-roAbL6IdSGczwfXxhMi6Zq+jD4IfUpL0jWHD7fvmjdOVb7xBfdRUHe4LpBgO23VtVK5AW1OlWZo0p34Jvx3iWg==",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.0.2",
+        "loader-utils": "^1.2.2",
         "schema-utils": "^1.0.0"
       }
     },
-    "fileset": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
-      "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
-      "dev": true,
-      "requires": {
-        "glob": "^7.0.3",
-        "minimatch": "^3.0.3"
-      }
-    },
     "fill-range": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -4384,13 +4846,13 @@
       }
     },
     "find-cache-dir": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
-      "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
       "dev": true,
       "requires": {
         "commondir": "^1.0.1",
-        "make-dir": "^1.0.0",
+        "make-dir": "^2.0.0",
         "pkg-dir": "^3.0.0"
       },
       "dependencies": {
@@ -4432,9 +4894,9 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         },
         "pkg-dir": {
@@ -4448,12 +4910,6 @@
         }
       }
     },
-    "find-parent-dir": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
-      "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
-      "dev": true
-    },
     "find-up": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
@@ -4604,14 +5060,14 @@
       "dev": true
     },
     "fsevents": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
-      "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+      "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
       "dev": true,
       "optional": true,
       "requires": {
-        "nan": "^2.9.2",
-        "node-pre-gyp": "^0.10.0"
+        "nan": "^2.12.1",
+        "node-pre-gyp": "^0.12.0"
       },
       "dependencies": {
         "abbrev": {
@@ -4689,12 +5145,12 @@
           "optional": true
         },
         "debug": {
-          "version": "2.6.9",
+          "version": "4.1.1",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "ms": "2.0.0"
+            "ms": "^2.1.1"
           }
         },
         "deep-extend": {
@@ -4865,24 +5321,24 @@
           }
         },
         "ms": {
-          "version": "2.0.0",
+          "version": "2.1.1",
           "bundled": true,
           "dev": true,
           "optional": true
         },
         "needle": {
-          "version": "2.2.4",
+          "version": "2.3.0",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "debug": "^2.1.2",
+            "debug": "^4.1.0",
             "iconv-lite": "^0.4.4",
             "sax": "^1.2.4"
           }
         },
         "node-pre-gyp": {
-          "version": "0.10.3",
+          "version": "0.12.0",
           "bundled": true,
           "dev": true,
           "optional": true,
@@ -4910,13 +5366,13 @@
           }
         },
         "npm-bundled": {
-          "version": "1.0.5",
+          "version": "1.0.6",
           "bundled": true,
           "dev": true,
           "optional": true
         },
         "npm-packlist": {
-          "version": "1.2.0",
+          "version": "1.4.1",
           "bundled": true,
           "dev": true,
           "optional": true,
@@ -5055,7 +5511,7 @@
           "optional": true
         },
         "semver": {
-          "version": "5.6.0",
+          "version": "5.7.0",
           "bundled": true,
           "dev": true,
           "optional": true
@@ -5174,6 +5630,19 @@
         "simple-git": "^1.85.0"
       }
     },
+    "gauge": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz",
+      "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=",
+      "dev": true,
+      "requires": {
+        "ansi": "^0.3.0",
+        "has-unicode": "^2.0.0",
+        "lodash.pad": "^4.1.0",
+        "lodash.padend": "^4.1.0",
+        "lodash.padstart": "^4.1.0"
+      }
+    },
     "get-caller-file": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
@@ -5370,16 +5839,19 @@
       }
     },
     "get-stdin": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
-      "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
+      "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
       "dev": true
     },
     "get-stream": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-      "dev": true
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+      "dev": true,
+      "requires": {
+        "pump": "^3.0.0"
+      }
     },
     "get-value": {
       "version": "2.0.6",
@@ -5517,9 +5989,9 @@
       }
     },
     "glob": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
-      "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+      "version": "7.1.4",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+      "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
       "dev": true,
       "requires": {
         "fs.realpath": "^1.0.0",
@@ -5561,9 +6033,9 @@
       }
     },
     "globals": {
-      "version": "11.11.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
-      "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
       "dev": true
     },
     "globby": {
@@ -5587,25 +6059,6 @@
         }
       }
     },
-    "got": {
-      "version": "6.7.1",
-      "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
-      "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
-      "dev": true,
-      "requires": {
-        "create-error-class": "^3.0.0",
-        "duplexer3": "^0.1.4",
-        "get-stream": "^3.0.0",
-        "is-redirect": "^1.0.0",
-        "is-retry-allowed": "^1.0.0",
-        "is-stream": "^1.0.0",
-        "lowercase-keys": "^1.0.0",
-        "safe-buffer": "^5.0.1",
-        "timed-out": "^4.0.0",
-        "unzip-response": "^2.0.1",
-        "url-parse-lax": "^1.0.0"
-      }
-    },
     "graceful-fs": {
       "version": "4.1.15",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
@@ -5619,12 +6072,12 @@
       "dev": true
     },
     "handlebars": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz",
-      "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
+      "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
       "dev": true,
       "requires": {
-        "async": "^2.5.0",
+        "neo-async": "^2.6.0",
         "optimist": "^0.6.1",
         "source-map": "^0.6.1",
         "uglify-js": "^3.1.4"
@@ -5675,6 +6128,12 @@
       "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
       "dev": true
     },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+      "dev": true
+    },
     "has-value": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -5780,57 +6239,23 @@
       "dev": true
     },
     "husky": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz",
-      "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-2.4.0.tgz",
+      "integrity": "sha512-3k1wuZU20gFkphNWMjh2ISCFaqfbaLY7R9FST2Mj9HeRhUK9ydj9qQR8qfXlog3EctVGsyeilcZkIT7uBZDDVA==",
       "dev": true,
       "requires": {
-        "cosmiconfig": "^5.0.7",
+        "cosmiconfig": "^5.2.0",
         "execa": "^1.0.0",
         "find-up": "^3.0.0",
-        "get-stdin": "^6.0.0",
+        "get-stdin": "^7.0.0",
         "is-ci": "^2.0.0",
-        "pkg-dir": "^3.0.0",
+        "pkg-dir": "^4.1.0",
         "please-upgrade-node": "^3.1.1",
-        "read-pkg": "^4.0.1",
+        "read-pkg": "^5.1.1",
         "run-node": "^1.0.0",
-        "slash": "^2.0.0"
+        "slash": "^3.0.0"
       },
       "dependencies": {
-        "ci-info": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-          "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-          "dev": true
-        },
-        "cosmiconfig": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz",
-          "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==",
-          "dev": true,
-          "requires": {
-            "import-fresh": "^2.0.0",
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.9.0",
-            "lodash.get": "^4.4.2",
-            "parse-json": "^4.0.0"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -5840,40 +6265,6 @@
             "locate-path": "^3.0.0"
           }
         },
-        "get-stdin": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
-          "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
-          "dev": true
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "import-fresh": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
-          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-          "dev": true,
-          "requires": {
-            "caller-path": "^2.0.0",
-            "resolve-from": "^3.0.0"
-          }
-        },
-        "is-ci": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-          "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-          "dev": true,
-          "requires": {
-            "ci-info": "^2.0.0"
-          }
-        },
         "locate-path": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -5903,35 +6294,65 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+        "pkg-dir": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+          "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
           "dev": true,
           "requires": {
-            "find-up": "^3.0.0"
+            "find-up": "^4.0.0"
+          },
+          "dependencies": {
+            "find-up": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz",
+              "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==",
+              "dev": true,
+              "requires": {
+                "locate-path": "^5.0.0"
+              }
+            },
+            "locate-path": {
+              "version": "5.0.0",
+              "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+              "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+              "dev": true,
+              "requires": {
+                "p-locate": "^4.1.0"
+              }
+            },
+            "p-locate": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+              "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+              "dev": true,
+              "requires": {
+                "p-limit": "^2.2.0"
+              }
+            }
           }
         },
         "read-pkg": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
-          "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz",
+          "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==",
           "dev": true,
           "requires": {
-            "normalize-package-data": "^2.3.2",
+            "@types/normalize-package-data": "^2.4.0",
+            "normalize-package-data": "^2.5.0",
             "parse-json": "^4.0.0",
-            "pify": "^3.0.0"
+            "type-fest": "^0.4.1"
           }
         },
-        "resolve-from": {
+        "slash": {
           "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
           "dev": true
         }
       }
@@ -5945,23 +6366,18 @@
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
-    "icss-replace-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
-      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
-    },
     "icss-utils": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.0.tgz",
-      "integrity": "sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+      "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
       "requires": {
         "postcss": "^7.0.14"
       }
     },
     "ieee754": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
-      "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
       "dev": true
     },
     "iferr": {
@@ -5993,6 +6409,14 @@
       "requires": {
         "parent-module": "^1.0.0",
         "resolve-from": "^4.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+          "dev": true
+        }
       }
     },
     "import-from": {
@@ -6012,12 +6436,6 @@
         }
       }
     },
-    "import-lazy": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
-      "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
-      "dev": true
-    },
     "import-local": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
@@ -6066,9 +6484,9 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         },
         "pkg-dir": {
@@ -6128,24 +6546,81 @@
       "dev": true
     },
     "inquirer": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
-      "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz",
+      "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=",
       "dev": true,
       "requires": {
-        "ansi-escapes": "^3.2.0",
-        "chalk": "^2.4.2",
-        "cli-cursor": "^2.1.0",
+        "ansi-escapes": "^1.1.0",
+        "chalk": "^1.0.0",
+        "cli-cursor": "^1.0.1",
         "cli-width": "^2.0.0",
-        "external-editor": "^3.0.3",
-        "figures": "^2.0.0",
-        "lodash": "^4.17.11",
-        "mute-stream": "0.0.7",
+        "external-editor": "^1.1.0",
+        "figures": "^1.3.5",
+        "lodash": "^4.3.0",
+        "mute-stream": "0.0.6",
+        "pinkie-promise": "^2.0.0",
         "run-async": "^2.2.0",
-        "rxjs": "^6.4.0",
-        "string-width": "^2.1.0",
-        "strip-ansi": "^5.0.0",
+        "rx": "^4.1.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.0",
         "through": "^2.3.6"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
       }
     },
     "invariant": {
@@ -6211,12 +6686,12 @@
       "dev": true
     },
     "is-ci": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
-      "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
       "dev": true,
       "requires": {
-        "ci-info": "^1.5.0"
+        "ci-info": "^2.0.0"
       }
     },
     "is-data-descriptor": {
@@ -6298,36 +6773,20 @@
       "dev": true
     },
     "is-generator-fn": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz",
-      "integrity": "sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
       "dev": true
     },
     "is-glob": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
       "dev": true,
       "requires": {
         "is-extglob": "^2.1.1"
       }
     },
-    "is-installed-globally": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
-      "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
-      "dev": true,
-      "requires": {
-        "global-dirs": "^0.1.0",
-        "is-path-inside": "^1.0.0"
-      }
-    },
-    "is-npm": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
-      "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
-      "dev": true
-    },
     "is-number": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -6364,27 +6823,27 @@
       }
     },
     "is-path-cwd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.0.0.tgz",
-      "integrity": "sha512-m5dHHzpOXEiv18JEORttBO64UgTEypx99vCxQLjbBvGhOJxnTNglYoFXxwo6AbsQb79sqqycQEHv2hWkHZAijA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz",
+      "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==",
       "dev": true
     },
     "is-path-in-cwd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.0.0.tgz",
-      "integrity": "sha512-6Vz5Gc9s/sDA3JBVu0FzWufm8xaBsqy1zn8Q6gmvGP6nSDMw78aS4poBNeatWjaRpTpxxLn1WOndAiOlk+qY8A==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+      "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
       "dev": true,
       "requires": {
-        "is-path-inside": "^1.0.0"
+        "is-path-inside": "^2.1.0"
       }
     },
     "is-path-inside": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
-      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+      "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
       "dev": true,
       "requires": {
-        "path-is-inside": "^1.0.1"
+        "path-is-inside": "^1.0.2"
       }
     },
     "is-plain-obj": {
@@ -6408,12 +6867,6 @@
       "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
       "dev": true
     },
-    "is-redirect": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
-      "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
-      "dev": true
-    },
     "is-regex": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
@@ -6429,24 +6882,12 @@
       "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
       "dev": true
     },
-    "is-retry-allowed": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
-      "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
-      "dev": true
-    },
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
       "dev": true
     },
-    "is-subset": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
-      "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
-      "dev": true
-    },
     "is-symbol": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
@@ -6513,78 +6954,56 @@
       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
       "dev": true
     },
-    "istanbul-api": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.1.tgz",
-      "integrity": "sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw==",
-      "dev": true,
-      "requires": {
-        "async": "^2.6.1",
-        "compare-versions": "^3.2.1",
-        "fileset": "^2.0.3",
-        "istanbul-lib-coverage": "^2.0.3",
-        "istanbul-lib-hook": "^2.0.3",
-        "istanbul-lib-instrument": "^3.1.0",
-        "istanbul-lib-report": "^2.0.4",
-        "istanbul-lib-source-maps": "^3.0.2",
-        "istanbul-reports": "^2.1.1",
-        "js-yaml": "^3.12.0",
-        "make-dir": "^1.3.0",
-        "minimatch": "^3.0.4",
-        "once": "^1.4.0"
-      }
-    },
     "istanbul-lib-coverage": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
-      "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+      "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
       "dev": true
     },
-    "istanbul-lib-hook": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz",
-      "integrity": "sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA==",
-      "dev": true,
-      "requires": {
-        "append-transform": "^1.0.0"
-      }
-    },
     "istanbul-lib-instrument": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz",
-      "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
+      "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
       "dev": true,
       "requires": {
-        "@babel/generator": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/template": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "istanbul-lib-coverage": "^2.0.3",
-        "semver": "^5.5.0"
+        "@babel/generator": "^7.4.0",
+        "@babel/parser": "^7.4.3",
+        "@babel/template": "^7.4.0",
+        "@babel/traverse": "^7.4.3",
+        "@babel/types": "^7.4.0",
+        "istanbul-lib-coverage": "^2.0.5",
+        "semver": "^6.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
+          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "dev": true
+        }
       }
     },
     "istanbul-lib-report": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz",
-      "integrity": "sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA==",
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
+      "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
       "dev": true,
       "requires": {
-        "istanbul-lib-coverage": "^2.0.3",
-        "make-dir": "^1.3.0",
-        "supports-color": "^6.0.0"
+        "istanbul-lib-coverage": "^2.0.5",
+        "make-dir": "^2.1.0",
+        "supports-color": "^6.1.0"
       }
     },
     "istanbul-lib-source-maps": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz",
-      "integrity": "sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
+      "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
       "dev": true,
       "requires": {
         "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^2.0.3",
-        "make-dir": "^1.3.0",
-        "rimraf": "^2.6.2",
+        "istanbul-lib-coverage": "^2.0.5",
+        "make-dir": "^2.1.0",
+        "rimraf": "^2.6.3",
         "source-map": "^0.6.1"
       },
       "dependencies": {
@@ -6598,278 +7017,262 @@
           }
         },
         "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         }
       }
     },
     "istanbul-reports": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.1.1.tgz",
-      "integrity": "sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw==",
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz",
+      "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==",
       "dev": true,
       "requires": {
-        "handlebars": "^4.1.0"
+        "handlebars": "^4.1.2"
       }
     },
     "jest": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-24.1.0.tgz",
-      "integrity": "sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz",
+      "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==",
       "dev": true,
       "requires": {
         "import-local": "^2.0.0",
-        "jest-cli": "^24.1.0"
+        "jest-cli": "^24.8.0"
       },
       "dependencies": {
-        "ci-info": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-          "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-          "dev": true
-        },
-        "is-ci": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-          "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-          "dev": true,
-          "requires": {
-            "ci-info": "^2.0.0"
-          }
-        },
         "jest-cli": {
-          "version": "24.1.0",
-          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.1.0.tgz",
-          "integrity": "sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw==",
+          "version": "24.8.0",
+          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz",
+          "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==",
           "dev": true,
           "requires": {
-            "ansi-escapes": "^3.0.0",
+            "@jest/core": "^24.8.0",
+            "@jest/test-result": "^24.8.0",
+            "@jest/types": "^24.8.0",
             "chalk": "^2.0.1",
             "exit": "^0.1.2",
-            "glob": "^7.1.2",
-            "graceful-fs": "^4.1.15",
             "import-local": "^2.0.0",
             "is-ci": "^2.0.0",
-            "istanbul-api": "^2.0.8",
-            "istanbul-lib-coverage": "^2.0.2",
-            "istanbul-lib-instrument": "^3.0.1",
-            "istanbul-lib-source-maps": "^3.0.1",
-            "jest-changed-files": "^24.0.0",
-            "jest-config": "^24.1.0",
-            "jest-environment-jsdom": "^24.0.0",
-            "jest-get-type": "^24.0.0",
-            "jest-haste-map": "^24.0.0",
-            "jest-message-util": "^24.0.0",
-            "jest-regex-util": "^24.0.0",
-            "jest-resolve-dependencies": "^24.1.0",
-            "jest-runner": "^24.1.0",
-            "jest-runtime": "^24.1.0",
-            "jest-snapshot": "^24.1.0",
-            "jest-util": "^24.0.0",
-            "jest-validate": "^24.0.0",
-            "jest-watcher": "^24.0.0",
-            "jest-worker": "^24.0.0",
-            "micromatch": "^3.1.10",
-            "node-notifier": "^5.2.1",
-            "p-each-series": "^1.0.0",
-            "pirates": "^4.0.0",
+            "jest-config": "^24.8.0",
+            "jest-util": "^24.8.0",
+            "jest-validate": "^24.8.0",
             "prompts": "^2.0.1",
-            "realpath-native": "^1.0.0",
-            "rimraf": "^2.5.4",
-            "slash": "^2.0.0",
-            "string-length": "^2.0.0",
-            "strip-ansi": "^5.0.0",
-            "which": "^1.2.12",
+            "realpath-native": "^1.1.0",
             "yargs": "^12.0.2"
           }
         }
       }
     },
     "jest-changed-files": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.0.0.tgz",
-      "integrity": "sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz",
+      "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
         "execa": "^1.0.0",
         "throat": "^4.0.0"
-      },
-      "dependencies": {
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        }
       }
     },
     "jest-config": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.1.0.tgz",
-      "integrity": "sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz",
+      "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.1.0",
-        "babel-jest": "^24.1.0",
+        "@jest/test-sequencer": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "babel-jest": "^24.8.0",
         "chalk": "^2.0.1",
         "glob": "^7.1.1",
-        "jest-environment-jsdom": "^24.0.0",
-        "jest-environment-node": "^24.0.0",
-        "jest-get-type": "^24.0.0",
-        "jest-jasmine2": "^24.1.0",
-        "jest-regex-util": "^24.0.0",
-        "jest-resolve": "^24.1.0",
-        "jest-util": "^24.0.0",
-        "jest-validate": "^24.0.0",
+        "jest-environment-jsdom": "^24.8.0",
+        "jest-environment-node": "^24.8.0",
+        "jest-get-type": "^24.8.0",
+        "jest-jasmine2": "^24.8.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-resolve": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "jest-validate": "^24.8.0",
         "micromatch": "^3.1.10",
-        "pretty-format": "^24.0.0",
-        "realpath-native": "^1.0.2"
+        "pretty-format": "^24.8.0",
+        "realpath-native": "^1.1.0"
       }
     },
     "jest-diff": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.0.0.tgz",
-      "integrity": "sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz",
+      "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==",
       "dev": true,
       "requires": {
         "chalk": "^2.0.1",
-        "diff-sequences": "^24.0.0",
-        "jest-get-type": "^24.0.0",
-        "pretty-format": "^24.0.0"
+        "diff-sequences": "^24.3.0",
+        "jest-get-type": "^24.8.0",
+        "pretty-format": "^24.8.0"
       }
     },
     "jest-docblock": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.0.0.tgz",
-      "integrity": "sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA==",
+      "version": "24.3.0",
+      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz",
+      "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==",
       "dev": true,
       "requires": {
         "detect-newline": "^2.1.0"
       }
     },
     "jest-each": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.0.0.tgz",
-      "integrity": "sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz",
+      "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
         "chalk": "^2.0.1",
-        "jest-get-type": "^24.0.0",
-        "jest-util": "^24.0.0",
-        "pretty-format": "^24.0.0"
+        "jest-get-type": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "pretty-format": "^24.8.0"
       }
     },
     "jest-environment-jsdom": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz",
-      "integrity": "sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz",
+      "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==",
       "dev": true,
       "requires": {
-        "jest-mock": "^24.0.0",
-        "jest-util": "^24.0.0",
+        "@jest/environment": "^24.8.0",
+        "@jest/fake-timers": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "jest-mock": "^24.8.0",
+        "jest-util": "^24.8.0",
         "jsdom": "^11.5.1"
       }
     },
     "jest-environment-node": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.0.0.tgz",
-      "integrity": "sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz",
+      "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==",
       "dev": true,
       "requires": {
-        "jest-mock": "^24.0.0",
-        "jest-util": "^24.0.0"
+        "@jest/environment": "^24.8.0",
+        "@jest/fake-timers": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "jest-mock": "^24.8.0",
+        "jest-util": "^24.8.0"
       }
     },
     "jest-get-type": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.0.0.tgz",
-      "integrity": "sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz",
+      "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==",
       "dev": true
     },
     "jest-haste-map": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.0.0.tgz",
-      "integrity": "sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz",
+      "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
+        "anymatch": "^2.0.0",
         "fb-watchman": "^2.0.0",
+        "fsevents": "^1.2.7",
         "graceful-fs": "^4.1.15",
         "invariant": "^2.2.4",
-        "jest-serializer": "^24.0.0",
-        "jest-util": "^24.0.0",
-        "jest-worker": "^24.0.0",
+        "jest-serializer": "^24.4.0",
+        "jest-util": "^24.8.0",
+        "jest-worker": "^24.6.0",
         "micromatch": "^3.1.10",
-        "sane": "^3.0.0"
+        "sane": "^4.0.3",
+        "walker": "^1.0.7"
       }
     },
     "jest-jasmine2": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz",
-      "integrity": "sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz",
+      "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==",
       "dev": true,
       "requires": {
         "@babel/traverse": "^7.1.0",
+        "@jest/environment": "^24.8.0",
+        "@jest/test-result": "^24.8.0",
+        "@jest/types": "^24.8.0",
         "chalk": "^2.0.1",
         "co": "^4.6.0",
-        "expect": "^24.1.0",
+        "expect": "^24.8.0",
         "is-generator-fn": "^2.0.0",
-        "jest-each": "^24.0.0",
-        "jest-matcher-utils": "^24.0.0",
-        "jest-message-util": "^24.0.0",
-        "jest-snapshot": "^24.1.0",
-        "jest-util": "^24.0.0",
-        "pretty-format": "^24.0.0",
+        "jest-each": "^24.8.0",
+        "jest-matcher-utils": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-runtime": "^24.8.0",
+        "jest-snapshot": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "pretty-format": "^24.8.0",
         "throat": "^4.0.0"
       }
     },
+    "jest-junit": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-6.4.0.tgz",
+      "integrity": "sha512-GXEZA5WBeUich94BARoEUccJumhCgCerg7mXDFLxWwI2P7wL3Z7sGWk+53x343YdBLjiMR9aD/gYMVKO+0pE4Q==",
+      "dev": true,
+      "requires": {
+        "jest-validate": "^24.0.0",
+        "mkdirp": "^0.5.1",
+        "strip-ansi": "^4.0.0",
+        "xml": "^1.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
     "jest-leak-detector": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz",
-      "integrity": "sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz",
+      "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==",
       "dev": true,
       "requires": {
-        "pretty-format": "^24.0.0"
+        "pretty-format": "^24.8.0"
       }
     },
     "jest-matcher-utils": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz",
-      "integrity": "sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz",
+      "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==",
       "dev": true,
       "requires": {
         "chalk": "^2.0.1",
-        "jest-diff": "^24.0.0",
-        "jest-get-type": "^24.0.0",
-        "pretty-format": "^24.0.0"
+        "jest-diff": "^24.8.0",
+        "jest-get-type": "^24.8.0",
+        "pretty-format": "^24.8.0"
       }
     },
     "jest-message-util": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.0.0.tgz",
-      "integrity": "sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz",
+      "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
+        "@jest/test-result": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "@types/stack-utils": "^1.0.1",
         "chalk": "^2.0.1",
         "micromatch": "^3.1.10",
         "slash": "^2.0.0",
@@ -6877,189 +7280,195 @@
       }
     },
     "jest-mock": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.0.0.tgz",
-      "integrity": "sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz",
+      "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^24.8.0"
+      }
+    },
+    "jest-pnp-resolver": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
+      "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
       "dev": true
     },
     "jest-regex-util": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.0.0.tgz",
-      "integrity": "sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q==",
+      "version": "24.3.0",
+      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz",
+      "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==",
       "dev": true
     },
     "jest-resolve": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.1.0.tgz",
-      "integrity": "sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz",
+      "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
         "browser-resolve": "^1.11.3",
         "chalk": "^2.0.1",
-        "realpath-native": "^1.0.0"
+        "jest-pnp-resolver": "^1.2.1",
+        "realpath-native": "^1.1.0"
       }
     },
     "jest-resolve-dependencies": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz",
-      "integrity": "sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz",
+      "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==",
       "dev": true,
       "requires": {
-        "jest-regex-util": "^24.0.0",
-        "jest-snapshot": "^24.1.0"
+        "@jest/types": "^24.8.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-snapshot": "^24.8.0"
       }
     },
     "jest-runner": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.1.0.tgz",
-      "integrity": "sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz",
+      "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==",
       "dev": true,
       "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/environment": "^24.8.0",
+        "@jest/test-result": "^24.8.0",
+        "@jest/types": "^24.8.0",
         "chalk": "^2.4.2",
         "exit": "^0.1.2",
         "graceful-fs": "^4.1.15",
-        "jest-config": "^24.1.0",
-        "jest-docblock": "^24.0.0",
-        "jest-haste-map": "^24.0.0",
-        "jest-jasmine2": "^24.1.0",
-        "jest-leak-detector": "^24.0.0",
-        "jest-message-util": "^24.0.0",
-        "jest-runtime": "^24.1.0",
-        "jest-util": "^24.0.0",
-        "jest-worker": "^24.0.0",
+        "jest-config": "^24.8.0",
+        "jest-docblock": "^24.3.0",
+        "jest-haste-map": "^24.8.0",
+        "jest-jasmine2": "^24.8.0",
+        "jest-leak-detector": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-resolve": "^24.8.0",
+        "jest-runtime": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "jest-worker": "^24.6.0",
         "source-map-support": "^0.5.6",
         "throat": "^4.0.0"
       }
     },
     "jest-runtime": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.1.0.tgz",
-      "integrity": "sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz",
+      "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==",
       "dev": true,
       "requires": {
-        "@babel/core": "^7.1.0",
-        "babel-plugin-istanbul": "^5.1.0",
+        "@jest/console": "^24.7.1",
+        "@jest/environment": "^24.8.0",
+        "@jest/source-map": "^24.3.0",
+        "@jest/transform": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "@types/yargs": "^12.0.2",
         "chalk": "^2.0.1",
-        "convert-source-map": "^1.4.0",
         "exit": "^0.1.2",
-        "fast-json-stable-stringify": "^2.0.0",
         "glob": "^7.1.3",
         "graceful-fs": "^4.1.15",
-        "jest-config": "^24.1.0",
-        "jest-haste-map": "^24.0.0",
-        "jest-message-util": "^24.0.0",
-        "jest-regex-util": "^24.0.0",
-        "jest-resolve": "^24.1.0",
-        "jest-snapshot": "^24.1.0",
-        "jest-util": "^24.0.0",
-        "jest-validate": "^24.0.0",
-        "micromatch": "^3.1.10",
-        "realpath-native": "^1.0.0",
+        "jest-config": "^24.8.0",
+        "jest-haste-map": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-mock": "^24.8.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-resolve": "^24.8.0",
+        "jest-snapshot": "^24.8.0",
+        "jest-util": "^24.8.0",
+        "jest-validate": "^24.8.0",
+        "realpath-native": "^1.1.0",
         "slash": "^2.0.0",
         "strip-bom": "^3.0.0",
-        "write-file-atomic": "2.4.1",
         "yargs": "^12.0.2"
-      },
-      "dependencies": {
-        "write-file-atomic": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
-          "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.11",
-            "imurmurhash": "^0.1.4",
-            "signal-exit": "^3.0.2"
-          }
-        }
       }
     },
     "jest-serializer": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.0.0.tgz",
-      "integrity": "sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw==",
+      "version": "24.4.0",
+      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
+      "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
       "dev": true
     },
     "jest-snapshot": {
-      "version": "24.1.0",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.1.0.tgz",
-      "integrity": "sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz",
+      "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==",
       "dev": true,
       "requires": {
         "@babel/types": "^7.0.0",
+        "@jest/types": "^24.8.0",
         "chalk": "^2.0.1",
-        "jest-diff": "^24.0.0",
-        "jest-matcher-utils": "^24.0.0",
-        "jest-message-util": "^24.0.0",
-        "jest-resolve": "^24.1.0",
+        "expect": "^24.8.0",
+        "jest-diff": "^24.8.0",
+        "jest-matcher-utils": "^24.8.0",
+        "jest-message-util": "^24.8.0",
+        "jest-resolve": "^24.8.0",
         "mkdirp": "^0.5.1",
         "natural-compare": "^1.4.0",
-        "pretty-format": "^24.0.0",
+        "pretty-format": "^24.8.0",
         "semver": "^5.5.0"
       }
     },
     "jest-util": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.0.0.tgz",
-      "integrity": "sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz",
+      "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==",
       "dev": true,
       "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/fake-timers": "^24.8.0",
+        "@jest/source-map": "^24.3.0",
+        "@jest/test-result": "^24.8.0",
+        "@jest/types": "^24.8.0",
         "callsites": "^3.0.0",
         "chalk": "^2.0.1",
         "graceful-fs": "^4.1.15",
         "is-ci": "^2.0.0",
-        "jest-message-util": "^24.0.0",
         "mkdirp": "^0.5.1",
         "slash": "^2.0.0",
         "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "ci-info": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-          "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-          "dev": true
-        },
-        "is-ci": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-          "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-          "dev": true,
-          "requires": {
-            "ci-info": "^2.0.0"
-          }
-        }
       }
     },
     "jest-validate": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.0.0.tgz",
-      "integrity": "sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz",
+      "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
         "camelcase": "^5.0.0",
         "chalk": "^2.0.1",
-        "jest-get-type": "^24.0.0",
+        "jest-get-type": "^24.8.0",
         "leven": "^2.1.0",
-        "pretty-format": "^24.0.0"
+        "pretty-format": "^24.8.0"
       }
     },
     "jest-watcher": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.0.0.tgz",
-      "integrity": "sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz",
+      "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==",
       "dev": true,
       "requires": {
+        "@jest/test-result": "^24.8.0",
+        "@jest/types": "^24.8.0",
+        "@types/yargs": "^12.0.9",
         "ansi-escapes": "^3.0.0",
         "chalk": "^2.0.1",
-        "jest-util": "^24.0.0",
+        "jest-util": "^24.8.0",
         "string-length": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-escapes": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+          "dev": true
+        }
       }
     },
     "jest-worker": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0.tgz",
-      "integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==",
+      "version": "24.6.0",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
+      "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==",
       "dev": true,
       "requires": {
         "merge-stream": "^1.0.1",
@@ -7079,9 +7488,9 @@
       "dev": true
     },
     "js-yaml": {
-      "version": "3.12.2",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
-      "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
       "dev": true,
       "requires": {
         "argparse": "^1.0.7",
@@ -7205,6 +7614,12 @@
         "graceful-fs": "^4.1.6"
       }
     },
+    "jsonify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+      "dev": true
+    },
     "jsonparse": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
@@ -7235,15 +7650,6 @@
       "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==",
       "dev": true
     },
-    "latest-version": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
-      "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
-      "dev": true,
-      "requires": {
-        "package-json": "^4.0.0"
-      }
-    },
     "lcid": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
@@ -7276,19 +7682,18 @@
       }
     },
     "lint-staged": {
-      "version": "8.1.5",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz",
-      "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.0.tgz",
+      "integrity": "sha512-DxguyxGOIfb67wZ6EOrqzjAbw6ZH9XK3YS74HO+erJf6+SAQeJJPN//GBOG5xhdt2THeuXjVPaHcCYOWGZwRbA==",
       "dev": true,
       "requires": {
         "chalk": "^2.3.1",
         "commander": "^2.14.1",
-        "cosmiconfig": "^5.0.2",
+        "cosmiconfig": "^5.2.0",
         "debug": "^3.1.0",
         "dedent": "^0.7.0",
         "del": "^3.0.0",
         "execa": "^1.0.0",
-        "find-parent-dir": "^0.3.0",
         "g-status": "^2.0.2",
         "is-glob": "^4.0.0",
         "is-windows": "^1.0.2",
@@ -7305,22 +7710,9 @@
         "staged-git-files": "1.1.2",
         "string-argv": "^0.0.2",
         "stringify-object": "^3.2.2",
-        "yup": "^0.26.10"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz",
-          "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==",
-          "dev": true,
-          "requires": {
-            "import-fresh": "^2.0.0",
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.9.0",
-            "lodash.get": "^4.4.2",
-            "parse-json": "^4.0.0"
-          }
-        },
+        "yup": "^0.27.0"
+      },
+      "dependencies": {
         "debug": {
           "version": "3.2.6",
           "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
@@ -7344,40 +7736,6 @@
             "rimraf": "^2.2.8"
           }
         },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "import-fresh": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
-          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-          "dev": true,
-          "requires": {
-            "caller-path": "^2.0.0",
-            "resolve-from": "^3.0.0"
-          }
-        },
         "is-path-cwd": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
@@ -7393,10 +7751,19 @@
             "is-path-inside": "^1.0.0"
           }
         },
+        "is-path-inside": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+          "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+          "dev": true,
+          "requires": {
+            "path-is-inside": "^1.0.1"
+          }
+        },
         "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         },
         "p-map": {
@@ -7404,12 +7771,6 @@
           "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
           "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
           "dev": true
-        },
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-          "dev": true
         }
       }
     },
@@ -7477,16 +7838,6 @@
             "supports-color": "^2.0.0"
           }
         },
-        "figures": {
-          "version": "1.7.0",
-          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
-          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
-          "dev": true,
-          "requires": {
-            "escape-string-regexp": "^1.0.5",
-            "object-assign": "^4.1.0"
-          }
-        },
         "log-symbols": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
@@ -7523,6 +7874,45 @@
         "cli-cursor": "^2.1.0",
         "date-fns": "^1.27.2",
         "figures": "^2.0.0"
+      },
+      "dependencies": {
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "figures": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+          "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        }
       }
     },
     "load-json-file": {
@@ -7575,10 +7965,52 @@
       "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
       "dev": true
     },
-    "lodash.get": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
-      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+    "lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+      "dev": true
+    },
+    "lodash.difference": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+      "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=",
+      "dev": true
+    },
+    "lodash.ismatch": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
+      "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
+      "dev": true
+    },
+    "lodash.kebabcase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+      "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+      "dev": true
+    },
+    "lodash.merge": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+      "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
+      "dev": true
+    },
+    "lodash.pad": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz",
+      "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=",
+      "dev": true
+    },
+    "lodash.padend": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+      "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+      "dev": true
+    },
+    "lodash.padstart": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz",
+      "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=",
       "dev": true
     },
     "lodash.sortby": {
@@ -7612,6 +8044,12 @@
         "lodash._reinterpolate": "~3.0.0"
       }
     },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "dev": true
+    },
     "log-symbols": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
@@ -7632,12 +8070,46 @@
         "wrap-ansi": "^3.0.1"
       },
       "dependencies": {
+        "ansi-escapes": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+          "dev": true
+        },
         "ansi-regex": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
           "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
           "dev": true
         },
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        },
         "strip-ansi": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -7678,12 +8150,6 @@
         "signal-exit": "^3.0.0"
       }
     },
-    "lowercase-keys": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
-      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
-      "dev": true
-    },
     "lru-cache": {
       "version": "4.1.5",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
@@ -7695,12 +8161,21 @@
       }
     },
     "make-dir": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
       "dev": true,
       "requires": {
-        "pify": "^3.0.0"
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+          "dev": true
+        }
       }
     },
     "makeerror": {
@@ -7769,14 +8244,22 @@
       }
     },
     "mem": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
-      "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
       "dev": true,
       "requires": {
         "map-age-cleaner": "^0.1.1",
-        "mimic-fn": "^1.0.0",
+        "mimic-fn": "^2.0.0",
         "p-is-promise": "^2.0.0"
+      },
+      "dependencies": {
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        }
       }
     },
     "memory-fs": {
@@ -7789,6 +8272,12 @@
         "readable-stream": "^2.0.1"
       }
     },
+    "memorystream": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+      "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+      "dev": true
+    },
     "meow": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
@@ -7806,12 +8295,6 @@
         "yargs-parser": "^10.0.0"
       }
     },
-    "merge": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
-      "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
-      "dev": true
-    },
     "merge-stream": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
@@ -7842,6 +8325,15 @@
         "to-regex": "^3.0.2"
       }
     },
+    "micromist": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/micromist/-/micromist-1.1.0.tgz",
+      "integrity": "sha512-+CQ76pabE9egniSEdmDuH+j2cYyIBKP97kujG8ZLZyLCRq5ExwtIy4DPHPFrq4jVbhMRBnyjuH50KU9Ohs8QCg==",
+      "dev": true,
+      "requires": {
+        "lodash.camelcase": "^4.3.0"
+      }
+    },
     "miller-rabin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
@@ -7853,18 +8345,18 @@
       }
     },
     "mime-db": {
-      "version": "1.38.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
-      "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==",
+      "version": "1.40.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+      "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
       "dev": true
     },
     "mime-types": {
-      "version": "2.1.22",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
-      "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
+      "version": "2.1.24",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+      "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
       "dev": true,
       "requires": {
-        "mime-db": "~1.38.0"
+        "mime-db": "1.40.0"
       }
     },
     "mimic-fn": {
@@ -8067,9 +8559,9 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         }
       }
@@ -8081,15 +8573,15 @@
       "dev": true
     },
     "mute-stream": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
-      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz",
+      "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=",
       "dev": true
     },
     "nan": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
-      "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
       "dev": true,
       "optional": true
     },
@@ -8119,9 +8611,9 @@
       "dev": true
     },
     "neo-async": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
-      "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
       "dev": true
     },
     "nice-try": {
@@ -8195,9 +8687,9 @@
       }
     },
     "node-releases": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.9.tgz",
-      "integrity": "sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA==",
+      "version": "1.1.23",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz",
+      "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==",
       "dev": true,
       "requires": {
         "semver": "^5.3.0"
@@ -8235,6 +8727,23 @@
         "which": "^1.2.10"
       }
     },
+    "npm-run-all": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
+      "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "chalk": "^2.4.1",
+        "cross-spawn": "^6.0.5",
+        "memorystream": "^0.3.1",
+        "minimatch": "^3.0.4",
+        "pidtree": "^0.3.0",
+        "read-pkg": "^3.0.0",
+        "shell-quote": "^1.6.1",
+        "string.prototype.padend": "^3.0.0"
+      }
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -8255,6 +8764,17 @@
         "which": "^1.2.10"
       }
     },
+    "npmlog": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz",
+      "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=",
+      "dev": true,
+      "requires": {
+        "ansi": "~0.3.1",
+        "are-we-there-yet": "~1.1.2",
+        "gauge": "~1.2.5"
+      }
+    },
     "null-check": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
@@ -8274,9 +8794,9 @@
       "dev": true
     },
     "nwsapi": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.1.tgz",
-      "integrity": "sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
+      "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==",
       "dev": true
     },
     "oauth-sign": {
@@ -8323,9 +8843,9 @@
       }
     },
     "object-keys": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
-      "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
       "dev": true
     },
     "object-visit": {
@@ -8366,13 +8886,10 @@
       }
     },
     "onetime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
-      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
-      "dev": true,
-      "requires": {
-        "mimic-fn": "^1.0.0"
-      }
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+      "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+      "dev": true
     },
     "optimist": {
       "version": "0.6.1",
@@ -8427,34 +8944,14 @@
         "execa": "^1.0.0",
         "lcid": "^2.0.0",
         "mem": "^4.0.0"
-      },
-      "dependencies": {
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        }
       }
     },
+    "os-shim": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
+      "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+      "dev": true
+    },
     "os-tmpdir": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -8494,9 +8991,9 @@
       "dev": true
     },
     "p-is-promise": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
-      "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
       "dev": true
     },
     "p-limit": {
@@ -8518,9 +9015,9 @@
       }
     },
     "p-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz",
-      "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+      "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
       "dev": true
     },
     "p-reduce": {
@@ -8535,18 +9032,6 @@
       "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
       "dev": true
     },
-    "package-json": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
-      "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
-      "dev": true,
-      "requires": {
-        "got": "^6.7.1",
-        "registry-auth-token": "^3.0.1",
-        "registry-url": "^3.0.3",
-        "semver": "^5.1.0"
-      }
-    },
     "pako": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
@@ -8565,9 +9050,9 @@
       }
     },
     "parent-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz",
-      "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
       "requires": {
         "callsites": "^3.0.0"
@@ -8720,6 +9205,12 @@
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
       "dev": true
     },
+    "pidtree": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
+      "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
+      "dev": true
+    },
     "pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -8781,9 +9272,9 @@
       "dev": true
     },
     "postcss": {
-      "version": "7.0.14",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
-      "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+      "version": "7.0.17",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz",
+      "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==",
       "requires": {
         "chalk": "^2.4.2",
         "source-map": "^0.6.1",
@@ -8841,13 +9332,13 @@
       }
     },
     "postcss-color-hex-alpha": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.2.tgz",
-      "integrity": "sha512-8bIOzQMGdZVifoBQUJdw+yIY00omBd2EwkJXepQo9cjp1UOHHHoeRDeSzTP6vakEpaRc6GAIOfvcQR7jBYaG5Q==",
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
+      "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
       "dev": true,
       "requires": {
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
+        "postcss": "^7.0.14",
+        "postcss-values-parser": "^2.0.1"
       }
     },
     "postcss-color-mod-function": {
@@ -8872,22 +9363,22 @@
       }
     },
     "postcss-custom-media": {
-      "version": "7.0.7",
-      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.7.tgz",
-      "integrity": "sha512-bWPCdZKdH60wKOTG4HKEgxWnZVjAIVNOJDvi3lkuTa90xo/K0YHa2ZnlKLC5e2qF8qCcMQXt0yzQITBp8d0OFA==",
+      "version": "7.0.8",
+      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
+      "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
       "dev": true,
       "requires": {
-        "postcss": "^7.0.5"
+        "postcss": "^7.0.14"
       }
     },
     "postcss-custom-properties": {
-      "version": "8.0.9",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.9.tgz",
-      "integrity": "sha512-/Lbn5GP2JkKhgUO2elMs4NnbUJcvHX4AaF5nuJDaNkd2chYW1KA5qtOGGgdkBEWcXtKSQfHXzT7C6grEVyb13w==",
+      "version": "8.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.10.tgz",
+      "integrity": "sha512-GDL0dyd7++goDR4SSasYdRNNvp4Gqy1XMzcCnTijiph7VB27XXpJ8bW/AI0i2VSBZ55TpdGhMr37kMSpRfYD0Q==",
       "dev": true,
       "requires": {
-        "postcss": "^7.0.5",
-        "postcss-values-parser": "^2.0.0"
+        "postcss": "^7.0.14",
+        "postcss-values-parser": "^2.0.1"
       }
     },
     "postcss-custom-selectors": {
@@ -9036,12 +9527,12 @@
       }
     },
     "postcss-load-config": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
-      "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+      "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
       "dev": true,
       "requires": {
-        "cosmiconfig": "^4.0.0",
+        "cosmiconfig": "^5.0.0",
         "import-cwd": "^2.0.0"
       }
     },
@@ -9084,13 +9575,14 @@
       }
     },
     "postcss-modules-local-by-default": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz",
-      "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+      "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
       "requires": {
-        "postcss": "^7.0.6",
-        "postcss-selector-parser": "^6.0.0",
-        "postcss-value-parser": "^3.3.1"
+        "icss-utils": "^4.1.1",
+        "postcss": "^7.0.16",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.0"
       }
     },
     "postcss-modules-scope": {
@@ -9103,11 +9595,11 @@
       }
     },
     "postcss-modules-values": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz",
-      "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+      "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
       "requires": {
-        "icss-replace-symbols": "^1.1.0",
+        "icss-utils": "^4.0.0",
         "postcss": "^7.0.6"
       }
     },
@@ -9262,9 +9754,9 @@
       }
     },
     "postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz",
+      "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ=="
     },
     "postcss-values-parser": {
       "version": "2.0.1",
@@ -9283,45 +9775,42 @@
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
       "dev": true
     },
-    "prepend-http": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
-      "dev": true
-    },
     "prettier": {
-      "version": "1.16.4",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz",
-      "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==",
+      "version": "1.18.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
+      "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
       "dev": true
     },
-    "prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
-      "dev": true,
-      "requires": {
-        "fast-diff": "^1.1.2"
-      }
-    },
     "pretty-format": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0.tgz",
-      "integrity": "sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g==",
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz",
+      "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==",
       "dev": true,
       "requires": {
+        "@jest/types": "^24.8.0",
         "ansi-regex": "^4.0.0",
-        "ansi-styles": "^3.2.0"
+        "ansi-styles": "^3.2.0",
+        "react-is": "^16.8.4"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
-          "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         }
       }
     },
+    "prettyjson": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz",
+      "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=",
+      "dev": true,
+      "requires": {
+        "colors": "^1.1.2",
+        "minimist": "^1.2.0"
+      }
+    },
     "private": {
       "version": "0.1.8",
       "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
@@ -9353,9 +9842,9 @@
       "dev": true
     },
     "prompts": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.3.tgz",
-      "integrity": "sha512-H8oWEoRZpybm6NV4to9/1limhttEo13xK62pNvn2JzY0MA03p7s0OjtmhXyon3uJmxiJJVSuUwEJFFssI3eBiQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz",
+      "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==",
       "dev": true,
       "requires": {
         "kleur": "^3.0.2",
@@ -9363,9 +9852,9 @@
       },
       "dependencies": {
         "kleur": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.2.tgz",
-          "integrity": "sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q==",
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+          "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
           "dev": true
         }
       }
@@ -9398,9 +9887,9 @@
       "dev": true
     },
     "psl": {
-      "version": "1.1.31",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
-      "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
+      "version": "1.1.32",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz",
+      "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==",
       "dev": true
     },
     "public-encrypt": {
@@ -9516,6 +10005,12 @@
         "strip-json-comments": "~2.0.1"
       }
     },
+    "react-is": {
+      "version": "16.8.6",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+      "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
+      "dev": true
+    },
     "read-pkg": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -9598,24 +10093,24 @@
       "dev": true
     },
     "regenerate-unicode-properties": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.1.tgz",
-      "integrity": "sha512-HTjMafphaH5d5QDHuwW8Me6Hbc/GhXg8luNqTkPVwZ/oCZhnoifjWhGYsu2BzepMELTlbnoVcXvV0f+2uDDvoQ==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+      "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.0"
       }
     },
     "regenerator-runtime": {
-      "version": "0.12.1",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-      "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
       "dev": true
     },
     "regenerator-transform": {
-      "version": "0.13.4",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz",
-      "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==",
+      "version": "0.14.0",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz",
+      "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==",
       "dev": true,
       "requires": {
         "private": "^0.1.6"
@@ -9632,48 +10127,29 @@
       }
     },
     "regexp-tree": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz",
-      "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==",
+      "version": "0.1.10",
+      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz",
+      "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==",
       "dev": true
     },
     "regexpp": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
-      "dev": true
-    },
-    "regexpu-core": {
-      "version": "4.5.3",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.3.tgz",
-      "integrity": "sha512-LON8666bTAlViVEPXMv65ZqiaR3rMNLz36PIaQ7D+er5snu93k0peR7FSvO0QteYbZ3GOkvfHKbGr/B1xDu9FA==",
-      "dev": true,
-      "requires": {
-        "regenerate": "^1.4.0",
-        "regenerate-unicode-properties": "^8.0.1",
-        "regjsgen": "^0.5.0",
-        "regjsparser": "^0.6.0",
-        "unicode-match-property-ecmascript": "^1.0.4",
-        "unicode-match-property-value-ecmascript": "^1.1.0"
-      }
-    },
-    "registry-auth-token": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
-      "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
-      "dev": true,
-      "requires": {
-        "rc": "^1.1.6",
-        "safe-buffer": "^5.0.1"
-      }
+      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+      "dev": true
     },
-    "registry-url": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
-      "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+    "regexpu-core": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
+      "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
       "dev": true,
       "requires": {
-        "rc": "^1.0.1"
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.0.2",
+        "regjsgen": "^0.5.0",
+        "regjsparser": "^0.6.0",
+        "unicode-match-property-ecmascript": "^1.0.4",
+        "unicode-match-property-value-ecmascript": "^1.1.0"
       }
     },
     "regjsgen": {
@@ -9807,22 +10283,16 @@
       "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
       "dev": true
     },
-    "require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true
-    },
     "require-main-filename": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
       "dev": true
     },
     "resolve": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
-      "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+      "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
       "dev": true,
       "requires": {
         "path-parse": "^1.0.6"
@@ -9846,18 +10316,18 @@
       }
     },
     "resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
       "dev": true
     },
     "resolve-global": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-0.1.0.tgz",
-      "integrity": "sha1-j7As/Vt9sgEY6IYxHxWvlb0V+9k=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz",
+      "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==",
       "dev": true,
       "requires": {
-        "global-dirs": "^0.1.0"
+        "global-dirs": "^0.1.1"
       }
     },
     "resolve-url": {
@@ -9867,13 +10337,13 @@
       "dev": true
     },
     "restore-cursor": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
-      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+      "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
       "dev": true,
       "requires": {
-        "onetime": "^2.0.0",
-        "signal-exit": "^3.0.2"
+        "exit-hook": "^1.0.0",
+        "onetime": "^1.0.0"
       }
     },
     "ret": {
@@ -9902,9 +10372,9 @@
       }
     },
     "rsvp": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
-      "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+      "version": "4.8.5",
+      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
+      "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
       "dev": true
     },
     "run-async": {
@@ -9931,10 +10401,16 @@
         "aproba": "^1.1.1"
       }
     },
+    "rx": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+      "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
+      "dev": true
+    },
     "rxjs": {
-      "version": "6.4.0",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
-      "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
+      "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
       "dev": true,
       "requires": {
         "tslib": "^1.9.0"
@@ -9962,53 +10438,26 @@
       "dev": true
     },
     "sane": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/sane/-/sane-3.1.0.tgz",
-      "integrity": "sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+      "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
       "dev": true,
       "requires": {
+        "@cnakazawa/watch": "^1.0.3",
         "anymatch": "^2.0.0",
-        "capture-exit": "^1.2.0",
-        "exec-sh": "^0.2.0",
+        "capture-exit": "^2.0.0",
+        "exec-sh": "^0.3.2",
         "execa": "^1.0.0",
         "fb-watchman": "^2.0.0",
-        "fsevents": "^1.2.3",
         "micromatch": "^3.1.4",
         "minimist": "^1.1.1",
-        "walker": "~1.0.5",
-        "watch": "~0.18.0"
-      },
-      "dependencies": {
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        }
+        "walker": "~1.0.5"
       }
     },
     "sass": {
-      "version": "1.17.2",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.17.2.tgz",
-      "integrity": "sha512-TBNcwSIEXpXAIaFxQnWbHzhciwPKpHRprQ+1ww+g9eHCiY3PINJs6vQTu+LcBt1vIhrtQGRFIoxJO39TfLrptA==",
+      "version": "1.21.0",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.21.0.tgz",
+      "integrity": "sha512-67hIIOZZtarbhI2aSgKBPDUgn+VqetduKoD+ZSYeIWg+ksNioTzeX+R2gUdebDoolvKNsQ/GY9NDxctbXluTNA==",
       "dev": true,
       "requires": {
         "chokidar": "^2.0.0"
@@ -10045,9 +10494,9 @@
       }
     },
     "semver": {
-      "version": "5.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
-      "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+      "version": "5.7.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+      "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
       "dev": true
     },
     "semver-compare": {
@@ -10056,19 +10505,10 @@
       "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
       "dev": true
     },
-    "semver-diff": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
-      "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
-      "dev": true,
-      "requires": {
-        "semver": "^5.0.3"
-      }
-    },
     "serialize-javascript": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
-      "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
+      "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==",
       "dev": true
     },
     "set-blocking": {
@@ -10150,6 +10590,18 @@
       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
       "dev": true
     },
+    "shell-quote": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+      "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+      "dev": true,
+      "requires": {
+        "array-filter": "~0.0.0",
+        "array-map": "~0.0.0",
+        "array-reduce": "~0.0.0",
+        "jsonify": "~0.0.0"
+      }
+    },
     "shellwords": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
@@ -10169,9 +10621,9 @@
       "dev": true
     },
     "simple-git": {
-      "version": "1.107.0",
-      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz",
-      "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==",
+      "version": "1.113.0",
+      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.113.0.tgz",
+      "integrity": "sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g==",
       "dev": true,
       "requires": {
         "debug": "^4.0.1"
@@ -10187,9 +10639,9 @@
           }
         },
         "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         }
       }
@@ -10364,9 +10816,9 @@
       }
     },
     "source-map-support": {
-      "version": "0.5.10",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
-      "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+      "version": "0.5.12",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
+      "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
       "dev": true,
       "requires": {
         "buffer-from": "^1.0.0",
@@ -10379,6 +10831,16 @@
       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
       "dev": true
     },
+    "spawn-sync": {
+      "version": "1.0.15",
+      "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
+      "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.4.7",
+        "os-shim": "^0.1.2"
+      }
+    },
     "spdx-correct": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
@@ -10406,9 +10868,9 @@
       }
     },
     "spdx-license-ids": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
-      "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
+      "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
       "dev": true
     },
     "split": {
@@ -10476,6 +10938,12 @@
         "figgy-pudding": "^3.5.1"
       }
     },
+    "stack-trace": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+      "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+      "dev": true
+    },
     "stack-utils": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
@@ -10489,23 +10957,143 @@
       "dev": true
     },
     "standard-version": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-5.0.1.tgz",
-      "integrity": "sha512-nlab5/C0P1Zd5k/2Zer/Y8xDnyf9kHES8Hy82aO8owJG9TJb3KbdNNOBNAgfa/ZsiDlJE9WQTGm1yN2VM1qxTg==",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.4.1",
-        "conventional-changelog": "^3.0.6",
-        "conventional-recommended-bump": "^4.0.4",
-        "detect-indent": "^5.0.0",
-        "detect-newline": "^2.1.0",
-        "dotgitignore": "^1.0.3",
-        "figures": "^2.0.0",
-        "fs-access": "^1.0.0",
-        "git-semver-tags": "^2.0.2",
-        "semver": "^5.2.0",
-        "stringify-package": "^1.0.0",
-        "yargs": "^12.0.2"
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-6.0.1.tgz",
+      "integrity": "sha512-+09AwTbyLKyUwefiZSccgarp24okvH9A229NOVSpYTKWcxBxqZqdYmtQaJ8UET9mjPXRxP84vonJU4YMqCyBTQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "conventional-changelog": "3.1.8",
+        "conventional-changelog-config-spec": "1.0.0",
+        "conventional-recommended-bump": "5.0.0",
+        "detect-indent": "6.0.0",
+        "detect-newline": "3.0.0",
+        "dotgitignore": "2.1.0",
+        "figures": "3.0.0",
+        "find-up": "3.0.0",
+        "fs-access": "1.0.1",
+        "git-semver-tags": "2.0.2",
+        "semver": "6.0.0",
+        "stringify-package": "1.0.0",
+        "yargs": "13.2.2"
+      },
+      "dependencies": {
+        "detect-indent": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz",
+          "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
+          "dev": true
+        },
+        "detect-newline": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.0.0.tgz",
+          "integrity": "sha512-JAP22dVPAqvhdRFFxK1G5GViIokyUn0UWXRNW0ztK96fsqi9cuM8w8ESbSk+T2w5OVorcMcL6m7yUg1RrX+2CA==",
+          "dev": true
+        },
+        "figures": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
+          "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+          "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "semver": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+          "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "yargs": {
+          "version": "13.2.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
+          "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
+          "dev": true,
+          "requires": {
+            "cliui": "^4.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "os-locale": "^3.1.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "13.1.1",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+          "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
       }
     },
     "static-extend": {
@@ -10634,6 +11222,17 @@
         }
       }
     },
+    "string.prototype.padend": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
+      "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.4.3",
+        "function-bind": "^1.0.2"
+      }
+    },
     "string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -10661,18 +11260,18 @@
       "dev": true
     },
     "strip-ansi": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
-      "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
       "dev": true,
       "requires": {
-        "ansi-regex": "^4.0.0"
+        "ansi-regex": "^4.1.0"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
-          "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         }
       }
@@ -10722,15 +11321,15 @@
       "dev": true
     },
     "synchronous-promise": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz",
-      "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==",
+      "version": "2.0.9",
+      "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.9.tgz",
+      "integrity": "sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==",
       "dev": true
     },
     "table": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz",
-      "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz",
+      "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==",
       "dev": true,
       "requires": {
         "ajv": "^6.9.1",
@@ -10740,78 +11339,79 @@
       },
       "dependencies": {
         "string-width": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz",
-          "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==",
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
             "emoji-regex": "^7.0.1",
             "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.0.0"
+            "strip-ansi": "^5.1.0"
           }
         }
       }
     },
-    "tapable": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
-      "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
-      "dev": true
-    },
-    "term-size": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
-      "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+    "tabtab": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz",
+      "integrity": "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=",
       "dev": true,
       "requires": {
-        "execa": "^0.7.0"
+        "debug": "^2.2.0",
+        "inquirer": "^1.0.2",
+        "lodash.difference": "^4.5.0",
+        "lodash.uniq": "^4.5.0",
+        "minimist": "^1.2.0",
+        "mkdirp": "^0.5.1",
+        "npmlog": "^2.0.3",
+        "object-assign": "^4.1.0"
       }
     },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+      "dev": true
+    },
     "terser": {
-      "version": "3.16.1",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz",
-      "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz",
+      "integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==",
       "dev": true,
       "requires": {
-        "commander": "~2.17.1",
+        "commander": "^2.19.0",
         "source-map": "~0.6.1",
-        "source-map-support": "~0.5.9"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
-          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
-          "dev": true
-        }
+        "source-map-support": "~0.5.10"
       }
     },
     "terser-webpack-plugin": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz",
-      "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz",
+      "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==",
       "dev": true,
       "requires": {
-        "cacache": "^11.0.2",
+        "cacache": "^11.3.2",
         "find-cache-dir": "^2.0.0",
+        "is-wsl": "^1.1.0",
+        "loader-utils": "^1.2.3",
         "schema-utils": "^1.0.0",
-        "serialize-javascript": "^1.4.0",
+        "serialize-javascript": "^1.7.0",
         "source-map": "^0.6.1",
-        "terser": "^3.16.1",
-        "webpack-sources": "^1.1.0",
-        "worker-farm": "^1.5.2"
+        "terser": "^4.0.0",
+        "webpack-sources": "^1.3.0",
+        "worker-farm": "^1.7.0"
       }
     },
     "test-exclude": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.1.0.tgz",
-      "integrity": "sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA==",
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
+      "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
       "dev": true,
       "requires": {
-        "arrify": "^1.0.1",
+        "glob": "^7.1.3",
         "minimatch": "^3.0.4",
         "read-pkg-up": "^4.0.0",
-        "require-main-filename": "^1.0.1"
+        "require-main-filename": "^2.0.0"
       },
       "dependencies": {
         "find-up": {
@@ -10852,9 +11452,9 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         },
         "read-pkg-up": {
@@ -10903,12 +11503,6 @@
         "xtend": "~4.0.1"
       }
     },
-    "timed-out": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
-      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
-      "dev": true
-    },
     "timers-browserify": {
       "version": "2.0.10",
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
@@ -10919,12 +11513,12 @@
       }
     },
     "tmp": {
-      "version": "0.0.33",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "version": "0.0.29",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
+      "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
       "dev": true,
       "requires": {
-        "os-tmpdir": "~1.0.2"
+        "os-tmpdir": "~1.0.1"
       }
     },
     "tmpl": {
@@ -11031,9 +11625,9 @@
       "dev": true
     },
     "tslib": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
       "dev": true
     },
     "tty-browserify": {
@@ -11066,6 +11660,12 @@
         "prelude-ls": "~1.1.2"
       }
     },
+    "type-fest": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz",
+      "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==",
+      "dev": true
+    },
     "typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -11073,23 +11673,14 @@
       "dev": true
     },
     "uglify-js": {
-      "version": "3.4.9",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
-      "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
+      "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
       "dev": true,
       "optional": true,
       "requires": {
-        "commander": "~2.17.1",
+        "commander": "~2.20.0",
         "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
-          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
-          "dev": true,
-          "optional": true
-        }
       }
     },
     "unicode-canonical-property-names-ecmascript": {
@@ -11178,15 +11769,6 @@
         "imurmurhash": "^0.1.4"
       }
     },
-    "unique-string": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
-      "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
-      "dev": true,
-      "requires": {
-        "crypto-random-string": "^1.0.0"
-      }
-    },
     "universalify": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -11233,36 +11815,12 @@
         }
       }
     },
-    "unzip-response": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
-      "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
-      "dev": true
-    },
     "upath": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
-      "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
+      "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
       "dev": true
     },
-    "update-notifier": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
-      "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
-      "dev": true,
-      "requires": {
-        "boxen": "^1.2.1",
-        "chalk": "^2.0.1",
-        "configstore": "^3.0.0",
-        "import-lazy": "^2.1.0",
-        "is-ci": "^1.0.10",
-        "is-installed-globally": "^0.1.0",
-        "is-npm": "^1.0.0",
-        "latest-version": "^3.0.0",
-        "semver-diff": "^2.0.0",
-        "xdg-basedir": "^3.0.0"
-      }
-    },
     "uri-js": {
       "version": "4.2.2",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
@@ -11295,15 +11853,6 @@
         }
       }
     },
-    "url-parse-lax": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
-      "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
-      "dev": true,
-      "requires": {
-        "prepend-http": "^1.0.1"
-      }
-    },
     "use": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -11398,16 +11947,6 @@
         "makeerror": "1.0.x"
       }
     },
-    "watch": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
-      "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
-      "dev": true,
-      "requires": {
-        "exec-sh": "^0.2.0",
-        "minimist": "^1.2.0"
-      }
-    },
     "watchpack": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
@@ -11426,9 +11965,9 @@
       "dev": true
     },
     "webpack": {
-      "version": "4.29.6",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz",
-      "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==",
+      "version": "4.33.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.33.0.tgz",
+      "integrity": "sha512-ggWMb0B2QUuYso6FPZKUohOgfm+Z0sVFs8WwWuSH1IAvkWs428VDNmOlAxvHGTB9Dm/qOB/qtE5cRx5y01clxw==",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.8.5",
@@ -11455,6 +11994,14 @@
         "terser-webpack-plugin": "^1.1.0",
         "watchpack": "^1.5.0",
         "webpack-sources": "^1.3.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+          "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
+          "dev": true
+        }
       }
     },
     "webpack-merge": {
@@ -11517,13 +12064,26 @@
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
       "dev": true
     },
-    "widest-line": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
-      "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
+    "winston": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz",
+      "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==",
       "dev": true,
       "requires": {
-        "string-width": "^2.1.1"
+        "async": "~1.0.0",
+        "colors": "1.0.x",
+        "cycle": "1.0.x",
+        "eyes": "0.1.x",
+        "isstream": "0.1.x",
+        "stack-trace": "0.0.x"
+      },
+      "dependencies": {
+        "colors": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+          "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+          "dev": true
+        }
       }
     },
     "wordwrap": {
@@ -11533,9 +12093,9 @@
       "dev": true
     },
     "worker-farm": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
-      "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
       "dev": true,
       "requires": {
         "errno": "~0.1.7"
@@ -11598,9 +12158,9 @@
       }
     },
     "write-file-atomic": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz",
-      "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
+      "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.1.11",
@@ -11617,10 +12177,10 @@
         "async-limiter": "~1.0.0"
       }
     },
-    "xdg-basedir": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
-      "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+    "xml": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
+      "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=",
       "dev": true
     },
     "xml-name-validator": {
@@ -11705,9 +12265,15 @@
           }
         },
         "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "require-main-filename": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
           "dev": true
         },
         "yargs-parser": {
@@ -11740,16 +12306,16 @@
       }
     },
     "yup": {
-      "version": "0.26.10",
-      "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz",
-      "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz",
+      "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==",
       "dev": true,
       "requires": {
-        "@babel/runtime": "7.0.0",
+        "@babel/runtime": "^7.0.0",
         "fn-name": "~2.0.1",
-        "lodash": "^4.17.10",
+        "lodash": "^4.17.11",
         "property-expr": "^1.5.0",
-        "synchronous-promise": "^2.0.5",
+        "synchronous-promise": "^2.0.6",
         "toposort": "^2.0.2"
       }
     }
diff --git a/package.json b/package.json
index 24be0c1e..69d06a27 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "css-loader",
-  "version": "2.1.1",
+  "version": "3.0.0",
   "description": "css loader module for webpack",
   "license": "MIT",
   "repository": "webpack-contrib/css-loader",
@@ -9,28 +9,27 @@
   "bugs": "https://github.com/webpack-contrib/css-loader/issues",
   "main": "dist/cjs.js",
   "engines": {
-    "node": ">= 6.9.0"
+    "node": ">= 8.9.0"
   },
   "scripts": {
     "start": "npm run build -- -w",
     "prebuild": "npm run clean",
-    "build": "cross-env NODE_ENV=production babel src -d dist --ignore 'src/**/*.test.js' --copy-files",
+    "build": "cross-env NODE_ENV=production babel src -d dist --ignore \"src/**/*.test.js\" --copy-files",
+    "validate:runtime": "es-check es5 \"dist/runtime/**/*.js\"",
+    "postbuild": "npm run validate:runtime",
     "clean": "del-cli dist",
-    "commitlint": "commitlint",
-    "commitmsg": "commitlint -e $GIT_PARAMS",
-    "lint": "eslint --cache src test",
-    "prepublish": "npm run build",
+    "commitlint": "commitlint --from=master",
+    "lint:prettier": "prettier \"{**/*,*}.{js,json,md,yml,css}\" --list-different",
+    "lint:js": "eslint --cache src test",
+    "lint": "npm-run-all -l -p \"lint:**\"",
+    "prepare": "npm run build",
     "release": "standard-version",
     "security": "npm audit",
-    "test:only": "jest",
-    "test:watch": "jest --watch",
-    "test:coverage": "jest --collectCoverageFrom='src/**/*.js' --coverage",
+    "test:only": "cross-env NODE_ENV=test jest",
+    "test:watch": "cross-env NODE_ENV=test jest --watch",
+    "test:coverage": "cross-env NODE_ENV=test jest --collectCoverageFrom=\"src/**/*.js\" --coverage",
     "pretest": "npm run lint",
-    "test": "npm run test:only",
-    "ci:lint": "npm run lint && npm run security",
-    "ci:test": "npm run test:only -- --runInBand",
-    "ci:coverage": "npm run test:coverage -- --runInBand",
-    "ci:lint:commits": "commitlint --from=origin/master --to=${CIRCLE_SHA1}",
+    "test": "cross-env NODE_ENV=test npm run test:coverage",
     "defaults": "webpack-defaults"
   },
   "files": [
@@ -42,47 +41,51 @@
     "webpack": "^4.0.0"
   },
   "dependencies": {
-    "icss-utils": "^4.1.0",
+    "camelcase": "^5.3.1",
+    "cssesc": "^3.0.0",
+    "icss-utils": "^4.1.1",
     "loader-utils": "^1.2.3",
-    "camelcase": "^5.2.0",
     "normalize-path": "^3.0.0",
-    "postcss": "^7.0.14",
+    "postcss": "^7.0.17",
     "postcss-modules-extract-imports": "^2.0.0",
-    "postcss-modules-local-by-default": "^2.0.6",
+    "postcss-modules-local-by-default": "^3.0.2",
     "postcss-modules-scope": "^2.1.0",
-    "postcss-modules-values": "^2.0.0",
-    "postcss-value-parser": "^3.3.0",
+    "postcss-modules-values": "^3.0.0",
+    "postcss-value-parser": "^4.0.0",
     "schema-utils": "^1.0.0"
   },
   "devDependencies": {
-    "@babel/cli": "^7.1.5",
-    "@babel/core": "^7.1.6",
-    "@babel/polyfill": "^7.0.0",
-    "@babel/preset-env": "^7.1.6",
-    "@commitlint/cli": "^7.2.1",
-    "@commitlint/config-conventional": "^7.1.2",
-    "@webpack-contrib/defaults": "^3.0.0",
+    "@babel/cli": "^7.4.4",
+    "@babel/core": "^7.4.5",
+    "@babel/preset-env": "^7.4.5",
+    "@commitlint/cli": "^8.0.0",
+    "@commitlint/config-conventional": "^8.0.0",
+    "@webpack-contrib/defaults": "^5.0.0",
     "@webpack-contrib/eslint-config-webpack": "^3.0.0",
-    "babel-jest": "^24.1.0",
+    "babel-jest": "^24.8.0",
+    "commitlint-azure-pipelines-cli": "^1.0.2",
     "cross-env": "^5.2.0",
-    "del": "^4.0.0",
-    "del-cli": "^1.1.0",
-    "eslint": "^5.9.0",
-    "eslint-plugin-import": "^2.14.0",
-    "eslint-plugin-prettier": "^3.0.0",
-    "file-loader": "^3.0.1",
-    "husky": "^1.2.0",
-    "jest": "^24.1.0",
-    "lint-staged": "^8.1.0",
+    "del": "^4.1.1",
+    "del-cli": "^2.0.0",
+    "es-check": "^5.0.0",
+    "eslint": "^5.16.0",
+    "eslint-config-prettier": "^4.3.0",
+    "eslint-plugin-import": "^2.17.3",
+    "file-loader": "^4.0.0",
+    "husky": "^2.4.0",
+    "jest": "^24.8.0",
+    "jest-junit": "^6.4.0",
+    "lint-staged": "^8.2.0",
     "memory-fs": "^0.4.1",
+    "npm-run-all": "^4.1.5",
     "postcss-loader": "^3.0.0",
-    "postcss-preset-env": "^6.4.0",
-    "prettier": "^1.15.2",
-    "sass": "^1.15.1",
+    "postcss-preset-env": "^6.6.0",
+    "prettier": "^1.18.2",
+    "sass": "^1.21.0",
     "sass-loader": "^7.1.0",
-    "standard-version": "^5.0.0",
-    "strip-ansi": "^5.0.0",
-    "webpack": "^4.26.1"
+    "standard-version": "^6.0.1",
+    "strip-ansi": "^5.2.0",
+    "webpack": "^4.33.0"
   },
   "keywords": [
     "webpack",
@@ -90,39 +93,5 @@
     "loader",
     "url",
     "import"
-  ],
-  "babel": {
-    "presets": [
-      [
-        "@babel/preset-env",
-        {
-          "targets": {
-            "node": "6.9.0"
-          },
-          "useBuiltIns": "usage"
-        }
-      ]
-    ]
-  },
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },
-  "lint-staged": {
-    "*.js": [
-      "eslint --fix",
-      "git add"
-    ]
-  },
-  "commitlint": {
-    "extends": [
-      "@commitlint/config-conventional"
-    ]
-  },
-  "prettier": {
-    "singleQuote": true,
-    "trailingComma": "es5",
-    "arrowParens": "always"
-  }
+  ]
 }
diff --git a/src/index.js b/src/index.js
index 5b5a71ea..05edffa5 100644
--- a/src/index.js
+++ b/src/index.js
@@ -5,29 +5,26 @@
 import validateOptions from 'schema-utils';
 import postcss from 'postcss';
 import postcssPkg from 'postcss/package.json';
-import localByDefault from 'postcss-modules-local-by-default';
-import extractImports from 'postcss-modules-extract-imports';
-import modulesScope from 'postcss-modules-scope';
-import modulesValues from 'postcss-modules-values';
+
 import {
   getOptions,
   isUrlRequest,
-  urlToRequest,
   getRemainingRequest,
   getCurrentRequest,
-  stringifyRequest,
 } from 'loader-utils';
-import normalizePath from 'normalize-path';
 
 import schema from './options.json';
 import { importParser, icssParser, urlParser } from './plugins';
 import {
-  getLocalIdent,
+  normalizeSourceMap,
+  getModulesPlugins,
   getImportPrefix,
-  placholderRegExps,
-  camelCase,
-  dashesCamelCase,
   getFilter,
+  getApiCode,
+  getImportCode,
+  getModuleCode,
+  getExportCode,
+  prepareCode,
 } from './utils';
 import Warning from './Warning';
 import CssSyntaxError from './CssSyntaxError';
@@ -40,35 +37,9 @@ export default function loader(content, map, meta) {
   const callback = this.async();
   const sourceMap = options.sourceMap || false;
 
-  /* eslint-disable no-param-reassign */
-  if (sourceMap) {
-    if (map) {
-      // Some loader emit source map as string
-      // Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification), and then parse the string as JSON.
-      if (typeof map === 'string') {
-        map = JSON.parse(map.replace(/^\)]}'[^\n]*\n/, ''));
-      }
-
-      // Source maps should use forward slash because it is URLs (https://github.com/mozilla/source-map/issues/91)
-      // We should normalize path because previous loaders like `sass-loader` using backslash when generate source map
-
-      if (map.file) {
-        map.file = normalizePath(map.file);
-      }
-
-      if (map.sourceRoot) {
-        map.sourceRoot = normalizePath(map.sourceRoot);
-      }
-
-      if (map.sources) {
-        map.sources = map.sources.map((source) => normalizePath(source));
-      }
-    }
-  } else {
-    // Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
-    map = null;
-  }
-  /* eslint-enable no-param-reassign */
+  // Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
+  // eslint-disable-next-line no-param-reassign
+  map = sourceMap && map ? normalizeSourceMap(map) : null;
 
   // Reuse CSS AST (PostCSS AST e.g 'postcss-loader') to avoid reparsing
   if (meta) {
@@ -83,37 +54,25 @@ export default function loader(content, map, meta) {
   const plugins = [];
 
   if (options.modules) {
-    const loaderContext = this;
-    const mode =
-      typeof options.modules === 'boolean' ? 'local' : options.modules;
+    plugins.push(...getModulesPlugins(options, this));
+  }
 
-    plugins.push(
-      modulesValues,
-      localByDefault({ mode }),
-      extractImports(),
-      modulesScope({
-        generateScopedName: function generateScopedName(exportName) {
-          const localIdentName = options.localIdentName || '[hash:base64]';
-          const customGetLocalIdent = options.getLocalIdent || getLocalIdent;
+  // Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
+  const importPrefix = getImportPrefix(this, options.importLoaders);
 
-          return customGetLocalIdent(
-            loaderContext,
-            localIdentName,
-            exportName,
-            {
-              regExp: options.localIdentRegExp,
-              hashPrefix: options.hashPrefix || '',
-              context: options.context,
-            }
-          );
-        },
-      })
-    );
-  }
+  plugins.push(
+    icssParser({
+      loaderContext: this,
+      importPrefix,
+      localsConvention: options.localsConvention,
+    })
+  );
 
   if (options.import !== false) {
     plugins.push(
       importParser({
+        loaderContext: this,
+        importPrefix,
         filter: getFilter(options.import, this.resourcePath),
       })
     );
@@ -122,6 +81,7 @@ export default function loader(content, map, meta) {
   if (options.url !== false) {
     plugins.push(
       urlParser({
+        loaderContext: this,
         filter: getFilter(options.url, this.resourcePath, (value) =>
           isUrlRequest(value)
         ),
@@ -129,8 +89,6 @@ export default function loader(content, map, meta) {
     );
   }
 
-  plugins.push(icssParser());
-
   postcss(plugins)
     .process(content, {
       from: getRemainingRequest(this)
@@ -152,184 +110,42 @@ export default function loader(content, map, meta) {
         .warnings()
         .forEach((warning) => this.emitWarning(new Warning(warning)));
 
-      const messages = result.messages || [];
-
-      // Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
-      const importUrlPrefix = getImportPrefix(this, options.importLoaders);
-
-      // Prepare replacer to change from `___CSS_LOADER_IMPORT___INDEX___` to `require('./file.css').locals`
-      const importItemReplacer = (placeholder) => {
-        const match = placholderRegExps.importItem.exec(placeholder);
-        const idx = Number(match[1]);
-
-        const message = messages.find(
-          // eslint-disable-next-line no-shadow
-          (message) =>
-            message.type === 'icss-import' &&
-            message.item &&
-            message.item.index === idx
-        );
-
-        if (!message) {
-          return placeholder;
-        }
-
-        const { item } = message;
-        const importUrl = importUrlPrefix + urlToRequest(item.url);
-
-        if (options.exportOnlyLocals) {
-          return `" + require(${stringifyRequest(
-            this,
-            importUrl
-          )})[${JSON.stringify(item.export)}] + "`;
-        }
-
-        return `" + require(${stringifyRequest(
-          this,
-          importUrl
-        )}).locals[${JSON.stringify(item.export)}] + "`;
-      };
-
-      const exports = messages
-        .filter((message) => message.type === 'export')
-        .reduce((accumulator, message) => {
-          const { key, value } = message.item;
-
-          let valueAsString = JSON.stringify(value);
-
-          valueAsString = valueAsString.replace(
-            placholderRegExps.importItemG,
-            importItemReplacer
-          );
-
-          function addEntry(k) {
-            accumulator.push(`\t${JSON.stringify(k)}: ${valueAsString}`);
-          }
-
-          let targetKey;
+      if (!result.messages) {
+        // eslint-disable-next-line no-param-reassign
+        result.messages = [];
+      }
 
-          switch (options.camelCase) {
-            case true:
-              addEntry(key);
-              targetKey = camelCase(key);
+      const { onlyLocals } = options;
 
-              if (targetKey !== key) {
-                addEntry(targetKey);
-              }
-              break;
-            case 'dashes':
-              addEntry(key);
-              targetKey = dashesCamelCase(key);
-
-              if (targetKey !== key) {
-                addEntry(targetKey);
-              }
-              break;
-            case 'only':
-              addEntry(camelCase(key));
-              break;
-            case 'dashesOnly':
-              addEntry(dashesCamelCase(key));
-              break;
-            default:
-              addEntry(key);
-              break;
-          }
+      const importItems = result.messages
+        .filter((message) => (message.type === 'import' ? message : false))
+        .reduce((accumulator, currentValue) => {
+          accumulator.push(currentValue.import);
 
           return accumulator;
         }, []);
+      const exportItems = result.messages
+        .filter((message) => (message.type === 'export' ? message : false))
+        .reduce((accumulator, currentValue) => {
+          accumulator.push(currentValue.export);
 
-      if (options.exportOnlyLocals) {
-        return callback(
-          null,
-          exports.length > 0
-            ? `module.exports = {\n${exports.join(',\n')}\n};`
-            : ''
-        );
-      }
-
-      const imports = messages
-        .filter((message) => message.type === 'import')
-        .map((message) => {
-          const { url } = message.item;
-          const media = message.item.media || '';
-
-          if (!isUrlRequest(url)) {
-            return `exports.push([module.id, ${JSON.stringify(
-              `@import url(${url});`
-            )}, ${JSON.stringify(media)}]);`;
-          }
-
-          const importUrl = importUrlPrefix + urlToRequest(url);
-
-          return `exports.i(require(${stringifyRequest(
-            this,
-            importUrl
-          )}), ${JSON.stringify(media)});`;
-        }, this);
-
-      let cssAsString = JSON.stringify(result.css).replace(
-        placholderRegExps.importItemG,
-        importItemReplacer
-      );
-
-      // Helper for ensuring valid CSS strings from requires
-      let hasUrlEscapeHelper = false;
-
-      messages
-        .filter((message) => message.type === 'url')
-        .forEach((message) => {
-          if (!hasUrlEscapeHelper) {
-            imports.push(
-              `var urlEscape = require(${stringifyRequest(
-                this,
-                require.resolve('./runtime/url-escape.js')
-              )});`
-            );
-
-            hasUrlEscapeHelper = true;
-          }
-
-          const { item } = message;
-          const { url, placeholder, needQuotes } = item;
-          // Remove `#hash` and `?#hash` from `require`
-          const [normalizedUrl, singleQuery, hashValue] = url.split(/(\?)?#/);
-          const hash =
-            singleQuery || hashValue
-              ? `"${singleQuery ? '?' : ''}${hashValue ? `#${hashValue}` : ''}"`
-              : '';
-
-          imports.push(
-            `var ${placeholder} = urlEscape(require(${stringifyRequest(
-              this,
-              urlToRequest(normalizedUrl)
-            )})${hash ? ` + ${hash}` : ''}${needQuotes ? ', true' : ''});`
-          );
-
-          cssAsString = cssAsString.replace(
-            new RegExp(placeholder, 'g'),
-            () => `" + ${placeholder} + "`
-          );
-        });
+          return accumulator;
+        }, []);
 
-      const runtimeCode = `exports = module.exports = require(${stringifyRequest(
-        this,
-        require.resolve('./runtime/api')
-      )})(${!!sourceMap});\n`;
-      const importCode =
-        imports.length > 0 ? `// Imports\n${imports.join('\n')}\n\n` : '';
-      const moduleCode = `// Module\nexports.push([module.id, ${cssAsString}, ""${
-        result.map ? `,${result.map}` : ''
-      }]);\n\n`;
-      const exportsCode =
-        exports.length > 0
-          ? `// Exports\nexports.locals = {\n${exports.join(',\n')}\n};`
-          : '';
+      const importCode = getImportCode(importItems, onlyLocals);
+      const moduleCode = getModuleCode(result, sourceMap, onlyLocals);
+      const exportCode = getExportCode(exportItems, onlyLocals);
+      const apiCode = getApiCode(this, sourceMap, onlyLocals);
 
-      // Embed runtime
       return callback(
         null,
-        runtimeCode + importCode + moduleCode + exportsCode
+        prepareCode(
+          { apiCode, importCode, moduleCode, exportCode },
+          result.messages,
+          this,
+          importPrefix,
+          onlyLocals
+        )
       );
     })
     .catch((error) => {
diff --git a/src/options.json b/src/options.json
index 45494ec7..02983dea 100644
--- a/src/options.json
+++ b/src/options.json
@@ -29,63 +29,70 @@
         {
           "type": "string",
           "enum": ["local", "global"]
-        }
-      ]
-    },
-    "localIdentName": {
-      "type": "string"
-    },
-    "localIdentRegExp": {
-      "anyOf": [
-        {
-          "type": "string"
-        },
-        {
-          "instanceof": "RegExp"
-        }
-      ]
-    },
-    "context": {
-      "type": "string"
-    },
-    "hashPrefix": {
-      "type": "string"
-    },
-    "getLocalIdent": {
-      "anyOf": [
-        {
-          "type": "boolean"
         },
         {
-          "instanceof": "Function"
+          "type": "object",
+          "additionalProperties": false,
+          "properties": {
+            "mode": {
+              "type": "string",
+              "enum": ["local", "global"]
+            },
+            "localIdentName": {
+              "type": "string"
+            },
+            "localIdentRegExp": {
+              "anyOf": [
+                {
+                  "type": "string"
+                },
+                {
+                  "instanceof": "RegExp"
+                }
+              ]
+            },
+            "context": {
+              "type": "string"
+            },
+            "hashPrefix": {
+              "type": "string"
+            },
+            "getLocalIdent": {
+              "anyOf": [
+                {
+                  "type": "boolean"
+                },
+                {
+                  "instanceof": "Function"
+                }
+              ]
+            }
+          }
         }
       ]
     },
     "sourceMap": {
       "type": "boolean"
     },
-    "camelCase": {
+    "importLoaders": {
       "anyOf": [
         {
           "type": "boolean"
         },
         {
-          "type": "string",
-          "enum": ["dashes", "only", "dashesOnly"]
+          "type": "number"
         }
       ]
     },
-    "importLoaders": {
+    "localsConvention": {
       "anyOf": [
         {
-          "type": "boolean"
-        },
-        {
-          "type": "number"
+          "type": "string",
+          "enum": ["asIs", "camelCase", "camelCaseOnly", "dashes", "dashesOnly"]
         }
       ]
     },
-    "exportOnlyLocals": {
+    "onlyLocals": {
       "type": "boolean"
     }
   },
diff --git a/src/plugins/postcss-icss-parser.js b/src/plugins/postcss-icss-parser.js
index 6730f50b..003e3326 100644
--- a/src/plugins/postcss-icss-parser.js
+++ b/src/plugins/postcss-icss-parser.js
@@ -1,98 +1,76 @@
 import postcss from 'postcss';
-import valueParser from 'postcss-value-parser';
-import { extractICSS } from 'icss-utils';
+import { extractICSS, replaceValueSymbols, replaceSymbols } from 'icss-utils';
 import loaderUtils from 'loader-utils';
 
+import { getExportItemCode, getImportItemCode } from '../utils';
+
 const pluginName = 'postcss-icss-parser';
 
+function hasImportMessage(messages, url) {
+  return messages.find(
+    (message) =>
+      message.pluginName === pluginName &&
+      message.type === 'import' &&
+      message.item.url === url &&
+      message.item.media === ''
+  );
+}
+
 export default postcss.plugin(
   pluginName,
-  () =>
+  (options = {}) =>
     function process(css, result) {
-      const imports = {};
-      const icss = extractICSS(css);
-      const exports = icss.icssExports;
+      const importReplacements = Object.create(null);
+      const { icssImports, icssExports } = extractICSS(css);
 
-      Object.keys(icss.icssImports).forEach((key) => {
-        const url = loaderUtils.parseString(key);
+      let index = 0;
 
-        Object.keys(icss.icssImports[key]).forEach((prop) => {
-          const index = Object.keys(imports).length;
+      for (const importUrl of Object.keys(icssImports)) {
+        const url = loaderUtils.parseString(importUrl);
 
-          imports[`$${prop}`] = index;
+        for (const token of Object.keys(icssImports[importUrl])) {
+          index += 1;
+          importReplacements[token] = `___CSS_LOADER_IMPORT___${index}___`;
 
           result.messages.push({
             pluginName,
             type: 'icss-import',
-            item: { url, export: icss.icssImports[key][prop], index },
+            item: { url, export: icssImports[importUrl][token], index },
           });
 
-          const alreadyIncluded = result.messages.find(
-            (message) =>
-              message.pluginName === pluginName &&
-              message.type === 'import' &&
-              message.item.url === url &&
-              message.item.media === ''
-          );
-
-          if (alreadyIncluded) {
-            return;
+          if (!hasImportMessage(result.messages, url)) {
+            const media = '';
+            const { loaderContext, importPrefix } = options;
+
+            result.messages.push({
+              pluginName,
+              type: 'import',
+              import: getImportItemCode(
+                { url, media },
+                loaderContext,
+                importPrefix
+              ),
+              item: { url, media },
+            });
           }
-
-          result.messages.push({
-            pluginName,
-            type: 'import',
-            item: { url, media: '' },
-          });
-        });
-      });
-
-      function replaceImportsInString(str) {
-        const tokens = valueParser(str);
-
-        tokens.walk((node) => {
-          if (node.type !== 'word') {
-            return;
-          }
-
-          const token = node.value;
-          const importIndex = imports[`$${token}`];
-
-          if (typeof importIndex === 'number') {
-            // eslint-disable-next-line no-param-reassign
-            node.value = `___CSS_LOADER_IMPORT___${importIndex}___`;
-          }
-        });
-
-        return tokens.toString();
+        }
       }
 
-      // Replace tokens in declarations
-      css.walkDecls((decl) => {
-        // eslint-disable-next-line no-param-reassign
-        decl.value = replaceImportsInString(decl.value.toString());
-      });
+      replaceSymbols(css, importReplacements);
 
-      // Replace tokens in at-rules
-      css.walkAtRules((atrule) => {
-        // Due reusing `ast` from `postcss-loader` some plugins may lack
-        // `params` property, we need to account for this possibility
-        if (atrule.params) {
-          // eslint-disable-next-line no-param-reassign
-          atrule.params = replaceImportsInString(atrule.params.toString());
-        }
-      });
+      for (const exportName of Object.keys(icssExports)) {
+        const name = exportName;
+        const value = replaceValueSymbols(
+          icssExports[name],
+          importReplacements
+        );
 
-      // Replace tokens in export
-      Object.keys(exports).forEach((exportName) => {
         result.messages.push({
           pluginName,
+          export: getExportItemCode(name, value, options.localsConvention),
           type: 'export',
-          item: {
-            key: exportName,
-            value: replaceImportsInString(exports[exportName]),
-          },
+          item: { name, value },
         });
-      });
+      }
     }
 );
diff --git a/src/plugins/postcss-import-parser.js b/src/plugins/postcss-import-parser.js
index cba59318..36bb3796 100644
--- a/src/plugins/postcss-import-parser.js
+++ b/src/plugins/postcss-import-parser.js
@@ -1,6 +1,8 @@
 import postcss from 'postcss';
 import valueParser from 'postcss-value-parser';
 
+import { uniqWith, getImportItemCode } from '../utils';
+
 const pluginName = 'postcss-import-parser';
 
 function getArg(nodes) {
@@ -84,25 +86,26 @@ function walkAtRules(css, result, filter) {
   return items;
 }
 
-function uniq(array) {
-  return array.reduce(
-    (acc, d) =>
-      !acc.find((el) => el.url === d.url && el.media === d.media)
-        ? [...acc, d]
-        : acc,
-    []
-  );
-}
-
 export default postcss.plugin(
   pluginName,
   (options = {}) =>
     function process(css, result) {
       const traversed = walkAtRules(css, result, options.filter);
-      const paths = uniq(traversed);
+      const paths = uniqWith(
+        traversed,
+        (value, other) => value.url === other.url && value.media === other.media
+      );
 
       paths.forEach((item) => {
-        result.messages.push({ pluginName, type: 'import', item });
+        result.messages.push({
+          pluginName,
+          type: 'import',
+          import: getImportItemCode(
+            item,
+            options.loaderContext,
+            options.importPrefix
+          ),
+        });
       });
     }
 );
diff --git a/src/plugins/postcss-url-parser.js b/src/plugins/postcss-url-parser.js
index 96fd7187..c499cdc9 100644
--- a/src/plugins/postcss-url-parser.js
+++ b/src/plugins/postcss-url-parser.js
@@ -1,6 +1,8 @@
 import postcss from 'postcss';
 import valueParser from 'postcss-value-parser';
 
+import { uniqWith, flatten, getUrlHelperCode, getUrlItemCode } from '../utils';
+
 const pluginName = 'postcss-url-parser';
 
 const isUrlFunc = /url/i;
@@ -49,58 +51,59 @@ function walkUrls(parsed, callback) {
   });
 }
 
-function walkDeclsWithUrl(css, result, filter) {
-  const items = [];
+function getUrlsFromValue(value, result, filter, decl = null) {
+  if (!needParseDecl.test(value)) {
+    return;
+  }
+
+  const parsed = valueParser(value);
+  const urls = [];
+
+  walkUrls(parsed, (node, url, needQuotes) => {
+    if (url.trim().replace(/\\[\r\n]/g, '').length === 0) {
+      result.warn(
+        `Unable to find uri in '${decl ? decl.toString() : value}'`,
+        decl
+          ? {
+              node: decl,
+            }
+          : {}
+      );
 
-  css.walkDecls((decl) => {
-    if (!needParseDecl.test(decl.value)) {
       return;
     }
 
-    const parsed = valueParser(decl.value);
-    const urls = [];
+    if (filter && !filter(url)) {
+      return;
+    }
 
-    walkUrls(parsed, (node, url, needQuotes) => {
-      if (url.trim().replace(/\\[\r\n]/g, '').length === 0) {
-        result.warn(`Unable to find uri in '${decl.toString()}'`, {
-          node: decl,
-        });
+    urls.push({ url, needQuotes });
+  });
 
-        return;
-      }
+  // eslint-disable-next-line consistent-return
+  return { parsed, urls };
+}
 
-      if (filter && !filter(url)) {
-        return;
-      }
+function walkDeclsWithUrl(css, result, filter) {
+  const items = [];
 
-      urls.push({ url, needQuotes });
-    });
+  css.walkDecls((decl) => {
+    const item = getUrlsFromValue(decl.value, result, filter, decl);
+
+    if (!item) {
+      return;
+    }
 
-    if (urls.length === 0) {
+    if (item.urls.length === 0) {
       return;
     }
 
-    items.push({ decl, parsed, urls });
+    items.push({ decl, parsed: item.parsed, urls: item.urls });
   });
 
   return items;
 }
 
-function uniqWith(array, comparator) {
-  return array.reduce(
-    (acc, d) => (!acc.some((item) => comparator(d, item)) ? [...acc, d] : acc),
-    []
-  );
-}
-
-function flatten(array) {
-  return array.reduce((a, b) => a.concat(b), []);
-}
-
-function isEqual(value, other) {
-  return value.url === other.url && value.needQuotes === other.needQuotes;
-}
-
 export default postcss.plugin(
   pluginName,
   (options = {}) =>
@@ -108,7 +111,8 @@ export default postcss.plugin(
       const traversed = walkDeclsWithUrl(css, result, options.filter);
       const paths = uniqWith(
         flatten(traversed.map((item) => item.urls)),
-        isEqual
+        (value, other) =>
+          value.url === other.url && value.needQuotes === other.needQuotes
       );
 
       if (paths.length === 0) {
@@ -117,16 +121,35 @@ export default postcss.plugin(
 
       const placeholders = [];
 
+      let hasUrlHelper = false;
+
       paths.forEach((path, index) => {
+        const { loaderContext } = options;
         const placeholder = `___CSS_LOADER_URL___${index}___`;
         const { url, needQuotes } = path;
 
         placeholders.push({ placeholder, path });
 
+        if (!hasUrlHelper) {
+          result.messages.push({
+            pluginName,
+            type: 'import',
+            import: getUrlHelperCode(loaderContext),
+          });
+
+          // eslint-disable-next-line no-param-reassign
+          hasUrlHelper = true;
+        }
+
         result.messages.push({
           pluginName,
-          type: 'url',
-          item: { url, placeholder, needQuotes },
+          type: 'import',
+          import: getUrlItemCode(
+            { url, placeholder, needQuotes },
+            loaderContext
+          ),
+          importType: 'url',
+          placeholder,
         });
       });
 
diff --git a/src/runtime/api.js b/src/runtime/api.js
index e70cba20..117f5263 100644
--- a/src/runtime/api.js
+++ b/src/runtime/api.js
@@ -3,35 +3,45 @@
   Author Tobias Koppers @sokra
 */
 // css base code, injected by the css-loader
+// eslint-disable-next-line func-names
 module.exports = function(useSourceMap) {
-  var list = [];
+  const list = [];
 
   // return the list of modules as css string
   list.toString = function toString() {
-    return this.map(function(item) {
-      var content = cssWithMappingToString(item, useSourceMap);
+    return this.map((item) => {
+      const content = cssWithMappingToString(item, useSourceMap);
+
       if (item[2]) {
-        return '@media ' + item[2] + '{' + content + '}';
-      } else {
-        return content;
+        return `@media ${item[2]}{${content}}`;
       }
+
+      return content;
     }).join('');
   };
 
   // import a list of modules into the list
+  // eslint-disable-next-line func-names
   list.i = function(modules, mediaQuery) {
     if (typeof modules === 'string') {
+      // eslint-disable-next-line no-param-reassign
       modules = [[null, modules, '']];
     }
-    var alreadyImportedModules = {};
-    for (var i = 0; i < this.length; i++) {
-      var id = this[i][0];
+
+    const alreadyImportedModules = {};
+
+    for (let i = 0; i < this.length; i++) {
+      // eslint-disable-next-line prefer-destructuring
+      const id = this[i][0];
+
       if (id != null) {
         alreadyImportedModules[id] = true;
       }
     }
-    for (i = 0; i < modules.length; i++) {
-      var item = modules[i];
+
+    for (let i = 0; i < modules.length; i++) {
+      const item = modules[i];
+
       // skip already imported module
       // this implementation is not 100% perfect for weird media query combinations
       // when a module is imported multiple times with different media queries.
@@ -40,27 +50,31 @@ module.exports = function(useSourceMap) {
         if (mediaQuery && !item[2]) {
           item[2] = mediaQuery;
         } else if (mediaQuery) {
-          item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';
+          item[2] = `(${item[2]}) and (${mediaQuery})`;
         }
+
         list.push(item);
       }
     }
   };
+
   return list;
 };
 
 function cssWithMappingToString(item, useSourceMap) {
-  var content = item[1] || '';
-  var cssMapping = item[3];
+  const content = item[1] || '';
+  // eslint-disable-next-line prefer-destructuring
+  const cssMapping = item[3];
+
   if (!cssMapping) {
     return content;
   }
 
   if (useSourceMap && typeof btoa === 'function') {
-    var sourceMapping = toComment(cssMapping);
-    var sourceURLs = cssMapping.sources.map(function(source) {
-      return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';
-    });
+    const sourceMapping = toComment(cssMapping);
+    const sourceURLs = cssMapping.sources.map(
+      (source) => `/*# sourceURL=${cssMapping.sourceRoot}${source} */`
+    );
 
     return [content]
       .concat(sourceURLs)
@@ -74,9 +88,8 @@ function cssWithMappingToString(item, useSourceMap) {
 // Adapted from convert-source-map (MIT)
 function toComment(sourceMap) {
   // eslint-disable-next-line no-undef
-  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
-  var data =
-    'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
+  const base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
+  const data = `sourceMappingURL=data:application/json;charset=utf-8;base64,${base64}`;
 
-  return '/*# ' + data + ' */';
+  return `/*# ${data} */`;
 }
diff --git a/src/runtime/url-escape.js b/src/runtime/getUrl.js
similarity index 67%
rename from src/runtime/url-escape.js
rename to src/runtime/getUrl.js
index a792c658..1053c9d7 100644
--- a/src/runtime/url-escape.js
+++ b/src/runtime/getUrl.js
@@ -1,17 +1,18 @@
-module.exports = function escape(url, needQuotes) {
+module.exports = (url, needQuotes) => {
   if (typeof url !== 'string') {
     return url;
   }
 
   // If url is already wrapped in quotes, remove them
   if (/^['"].*['"]$/.test(url)) {
+    // eslint-disable-next-line no-param-reassign
     url = url.slice(1, -1);
   }
 
   // Should url be wrapped?
   // See https://drafts.csswg.org/css-values-3/#urls
   if (/["'() \t\n]/.test(url) || needQuotes) {
-    return '"' + url.replace(/"/g, '\\"').replace(/\n/g, '\\n') + '"';
+    return `"${url.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`;
   }
 
   return url;
diff --git a/src/utils.js b/src/utils.js
index 6df7ef0f..10a3cada 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -4,15 +4,35 @@
 */
 import path from 'path';
 
-import cc from 'camelcase';
-import loaderUtils from 'loader-utils';
+import loaderUtils, {
+  isUrlRequest,
+  stringifyRequest,
+  urlToRequest,
+} from 'loader-utils';
+import normalizePath from 'normalize-path';
+import cssesc from 'cssesc';
+import modulesValues from 'postcss-modules-values';
+import localByDefault from 'postcss-modules-local-by-default';
+import extractImports from 'postcss-modules-extract-imports';
+import modulesScope from 'postcss-modules-scope';
+import camelCase from 'camelcase';
 
-/* eslint-disable line-comment-position */
+function uniqWith(array, comparator) {
+  return array.reduce(
+    (acc, d) => (!acc.some((item) => comparator(d, item)) ? [...acc, d] : acc),
+    []
+  );
+}
 
-const placholderRegExps = {
-  importItemG: /___CSS_LOADER_IMPORT___([0-9]+)___/g,
-  importItem: /___CSS_LOADER_IMPORT___([0-9]+)___/,
-};
+function flatten(array) {
+  return array.reduce((a, b) => a.concat(b), []);
+}
+
+function dashesCamelCase(str) {
+  return str.replace(/-+(\w)/g, (match, firstLetter) =>
+    firstLetter.toUpperCase()
+  );
+}
 
 function getImportPrefix(loaderContext, importLoaders) {
   if (importLoaders === false) {
@@ -31,16 +51,6 @@ function getImportPrefix(loaderContext, importLoaders) {
   return `-!${loadersRequest}!`;
 }
 
-function camelCase(str) {
-  return cc(str);
-}
-
-function dashesCamelCase(str) {
-  return str.replace(/-+(\w)/g, (match, firstLetter) =>
-    firstLetter.toUpperCase()
-  );
-}
-
 const whitespace = '[\\x20\\t\\r\\n\\f]';
 const unescapeRegExp = new RegExp(
   `\\\\([\\da-f]{1,6}${whitespace}?|(${whitespace})|.)`,
@@ -51,6 +61,7 @@ function unescape(str) {
   return str.replace(unescapeRegExp, (_, escaped, escapedWhitespace) => {
     const high = `0x${escaped}` - 0x10000;
 
+    /* eslint-disable line-comment-position */
     // NaN means non-codepoint
     // Workaround erroneous numeric interpretation of +"0x"
     // eslint-disable-next-line no-self-compare
@@ -62,6 +73,7 @@ function unescape(str) {
       : // Supplemental Plane codepoint (surrogate pair)
         // eslint-disable-next-line no-bitwise
         String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);
+    /* eslint-enable line-comment-position */
   });
 }
 
@@ -71,46 +83,312 @@ function getLocalIdent(loaderContext, localIdentName, localName, options) {
     options.context = loaderContext.rootContext;
   }
 
-  const request = path
-    .relative(options.context, loaderContext.resourcePath)
-    .replace(/\\/g, '/');
+  const request = normalizePath(
+    path.relative(options.context || '', loaderContext.resourcePath)
+  );
 
   // eslint-disable-next-line no-param-reassign
   options.content = `${options.hashPrefix + request}+${unescape(localName)}`;
 
-  // eslint-disable-next-line no-param-reassign
-  localIdentName = localIdentName.replace(/\[local\]/gi, localName);
-
-  const hash = loaderUtils.interpolateName(
-    loaderContext,
-    localIdentName,
-    options
-  );
-
-  return hash
-    .replace(new RegExp('[^a-zA-Z0-9\\-_\u00A0-\uFFFF]', 'g'), '-')
-    .replace(/^((-?[0-9])|--)/, '_$1');
+  // Using `[path]` placeholder outputs `/` we need escape their
+  // Also directories can contains invalid characters for css we need escape their too
+  return cssesc(
+    loaderUtils
+      .interpolateName(loaderContext, localIdentName, options)
+      // For `[hash]` placeholder
+      .replace(/^((-?[0-9])|--)/, '_$1'),
+    { isIdentifier: true }
+  ).replace(/\\\[local\\\]/gi, localName);
 }
 
 function getFilter(filter, resourcePath, defaultFilter = null) {
-  return (content) => {
-    if (defaultFilter && !defaultFilter(content)) {
+  return (item) => {
+    if (defaultFilter && !defaultFilter(item)) {
       return false;
     }
 
     if (typeof filter === 'function') {
-      return !filter(content, resourcePath);
+      return filter(item, resourcePath);
     }
 
     return true;
   };
 }
 
+function getModulesPlugins(options, loaderContext) {
+  let modulesOptions = {
+    mode: 'local',
+    localIdentName: '[hash:base64]',
+    getLocalIdent,
+    context: null,
+    hashPrefix: '',
+    localIdentRegExp: null,
+  };
+
+  if (
+    typeof options.modules === 'boolean' ||
+    typeof options.modules === 'string'
+  ) {
+    modulesOptions.mode =
+      typeof options.modules === 'string' ? options.modules : 'local';
+  } else {
+    modulesOptions = Object.assign({}, modulesOptions, options.modules);
+  }
+
+  return [
+    modulesValues,
+    localByDefault({ mode: modulesOptions.mode }),
+    extractImports(),
+    modulesScope({
+      generateScopedName: function generateScopedName(exportName) {
+        return modulesOptions.getLocalIdent(
+          loaderContext,
+          modulesOptions.localIdentName,
+          exportName,
+          {
+            context: modulesOptions.context,
+            hashPrefix: modulesOptions.hashPrefix,
+            regExp: modulesOptions.localIdentRegExp,
+          }
+        );
+      },
+    }),
+  ];
+}
+
+function normalizeSourceMap(map) {
+  let newMap = map;
+
+  // Some loader emit source map as string
+  // Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification), and then parse the string as JSON.
+  if (typeof newMap === 'string') {
+    newMap = JSON.parse(newMap.replace(/^\)]}'[^\n]*\n/, ''));
+  }
+
+  // Source maps should use forward slash because it is URLs (https://github.com/mozilla/source-map/issues/91)
+  // We should normalize path because previous loaders like `sass-loader` using backslash when generate source map
+
+  if (newMap.file) {
+    newMap.file = normalizePath(newMap.file);
+  }
+
+  if (newMap.sourceRoot) {
+    newMap.sourceRoot = normalizePath(newMap.sourceRoot);
+  }
+
+  if (newMap.sources) {
+    newMap.sources = newMap.sources.map((source) => normalizePath(source));
+  }
+
+  return newMap;
+}
+
+function getImportItemCode(item, loaderContext, importPrefix) {
+  const { url } = item;
+  const media = item.media || '';
+
+  if (!isUrlRequest(url)) {
+    return `exports.push([module.id, ${JSON.stringify(
+      `@import url(${url});`
+    )}, ${JSON.stringify(media)}]);`;
+  }
+
+  const importUrl = importPrefix + urlToRequest(url);
+
+  return `exports.i(require(${stringifyRequest(
+    loaderContext,
+    importUrl
+  )}), ${JSON.stringify(media)});`;
+}
+
+function getUrlHelperCode(loaderContext) {
+  return `var getUrl = require(${stringifyRequest(
+    loaderContext,
+    require.resolve('./runtime/getUrl.js')
+  )});`;
+}
+
+function getUrlItemCode(item, loaderContext) {
+  const { url, placeholder, needQuotes } = item;
+
+  // Remove `#hash` and `?#hash` from `require`
+  const [normalizedUrl, singleQuery, hashValue] = url.split(/(\?)?#/);
+  const hash =
+    singleQuery || hashValue
+      ? `"${singleQuery ? '?' : ''}${hashValue ? `#${hashValue}` : ''}"`
+      : '';
+
+  return `var ${placeholder} = getUrl(require(${stringifyRequest(
+    loaderContext,
+    urlToRequest(normalizedUrl)
+  )})${hash ? ` + ${hash}` : ''}${needQuotes ? ', true' : ''});`;
+}
+
+function getApiCode(loaderContext, sourceMap, onlyLocals) {
+  if (onlyLocals) {
+    return '';
+  }
+
+  return `exports = module.exports = require(${stringifyRequest(
+    loaderContext,
+    require.resolve('./runtime/api')
+  )})(${sourceMap});\n`;
+}
+
+function getImportCode(importItems, onlyLocals) {
+  if (importItems.length === 0 || onlyLocals) {
+    return '';
+  }
+
+  return `// Imports\n${importItems.join('\n')}\n`;
+}
+
+function getModuleCode(result, sourceMap, onlyLocals) {
+  if (onlyLocals) {
+    return '';
+  }
+
+  return `// Module\nexports.push([module.id, ${JSON.stringify(
+    result.css
+  )}, ""${sourceMap && result.map ? `,${result.map}` : ''}]);\n`;
+}
+
+function getExportItemCode(key, value, localsConvention) {
+  let targetKey;
+  const items = [];
+
+  function addEntry(k) {
+    items.push(`\t${JSON.stringify(k)}: ${JSON.stringify(value)}`);
+  }
+
+  switch (localsConvention) {
+    case 'camelCase':
+      addEntry(key);
+      targetKey = camelCase(key);
+
+      if (targetKey !== key) {
+        addEntry(targetKey);
+      }
+      break;
+    case 'camelCaseOnly':
+      addEntry(camelCase(key));
+      break;
+    case 'dashes':
+      addEntry(key);
+      targetKey = dashesCamelCase(key);
+
+      if (targetKey !== key) {
+        addEntry(targetKey);
+      }
+      break;
+    case 'dashesOnly':
+      addEntry(dashesCamelCase(key));
+      break;
+    case 'asIs':
+    default:
+      addEntry(key);
+      break;
+  }
+
+  return items.join(',\n');
+}
+
+function getExportCode(exportItems, onlyLocals) {
+  if (exportItems.length === 0) {
+    return '';
+  }
+
+  return `// Exports\n${
+    onlyLocals ? 'module.exports' : 'exports.locals'
+  } = {\n${exportItems.join(',\n')}\n};`;
+}
+
+function getIcssReplacer(item, loaderContext, importPrefix, onlyLocals) {
+  const importUrl = importPrefix + urlToRequest(item.url);
+
+  return () =>
+    onlyLocals
+      ? `" + require(${stringifyRequest(
+          loaderContext,
+          importUrl
+        )})[${JSON.stringify(item.export)}] + "`
+      : `" + require(${stringifyRequest(
+          loaderContext,
+          importUrl
+        )}).locals[${JSON.stringify(item.export)}] + "`;
+}
+
+function prepareCode(file, messages, loaderContext, importPrefix, onlyLocals) {
+  const { apiCode, importCode } = file;
+  let { moduleCode, exportCode } = file;
+
+  messages
+    .filter(
+      (message) =>
+        message.type === 'icss-import' ||
+        (message.type === 'import' && message.importType === 'url')
+    )
+    .forEach((message) => {
+      // Replace all urls on `require`
+      if (message.type === 'import') {
+        const { placeholder } = message;
+
+        if (moduleCode) {
+          // eslint-disable-next-line no-param-reassign
+          moduleCode = moduleCode.replace(
+            new RegExp(placeholder, 'g'),
+            () => `" + ${placeholder} + "`
+          );
+        }
+      }
+
+      // Replace external ICSS import on `require`
+      if (message.type === 'icss-import') {
+        const { item } = message;
+        const replacer = getIcssReplacer(
+          item,
+          loaderContext,
+          importPrefix,
+          onlyLocals
+        );
+
+        if (moduleCode) {
+          // eslint-disable-next-line no-param-reassign
+          moduleCode = moduleCode.replace(
+            new RegExp(`___CSS_LOADER_IMPORT___(${item.index})___`, 'g'),
+            replacer
+          );
+        }
+
+        if (exportCode) {
+          // eslint-disable-next-line no-param-reassign
+          exportCode = exportCode.replace(
+            new RegExp(`___CSS_LOADER_IMPORT___(${item.index})___`, 'g'),
+            replacer
+          );
+        }
+      }
+    });
+
+  return [apiCode, importCode, moduleCode, exportCode].filter(Boolean).join('');
+}
+
 export {
+  uniqWith,
+  flatten,
+  dashesCamelCase,
   getImportPrefix,
   getLocalIdent,
-  placholderRegExps,
-  camelCase,
-  dashesCamelCase,
   getFilter,
+  getModulesPlugins,
+  normalizeSourceMap,
+  getImportItemCode,
+  getUrlHelperCode,
+  getUrlItemCode,
+  getApiCode,
+  getImportCode,
+  getModuleCode,
+  getExportItemCode,
+  getExportCode,
+  prepareCode,
 };
diff --git a/test/__snapshots__/camelCase-option.test.js.snap b/test/__snapshots__/camelCase-option.test.js.snap
deleted file mode 100644
index 537f463e..00000000
--- a/test/__snapshots__/camelCase-option.test.js.snap
+++ /dev/null
@@ -1,202 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`camelCase option dashes: errors 1`] = `Array []`;
-
-exports[`camelCase option dashes: locals 1`] = `
-Object {
-  "btn--info_is-disabled_1": "jDvNwV-WRSMB9n2z9QrzR",
-  "btn-info_is-disabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "btnInfo_isDisabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "btnInfo_isDisabled_1": "jDvNwV-WRSMB9n2z9QrzR",
-  "foo": "bar",
-  "my-btn-info_is-disabled": "value",
-  "myBtnInfo_isDisabled": "value",
-  "simple": "_1penVf9PMtov2qLxmtsMjq",
-}
-`;
-
-exports[`camelCase option dashes: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    "._1XTfjK5gKYeSzbdZhEXRpF {
-  color: blue;
-}
-
-.jDvNwV-WRSMB9n2z9QrzR {
-  color: blue;
-}
-
-._1penVf9PMtov2qLxmtsMjq {
-  color: red;
-}
-
-a {
-  color: yellow;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`camelCase option dashes: warnings 1`] = `Array []`;
-
-exports[`camelCase option dashesOnly: errors 1`] = `Array []`;
-
-exports[`camelCase option dashesOnly: locals 1`] = `
-Object {
-  "btnInfo_isDisabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "btnInfo_isDisabled_1": "jDvNwV-WRSMB9n2z9QrzR",
-  "foo": "bar",
-  "myBtnInfo_isDisabled": "value",
-  "simple": "_1penVf9PMtov2qLxmtsMjq",
-}
-`;
-
-exports[`camelCase option dashesOnly: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    "._1XTfjK5gKYeSzbdZhEXRpF {
-  color: blue;
-}
-
-.jDvNwV-WRSMB9n2z9QrzR {
-  color: blue;
-}
-
-._1penVf9PMtov2qLxmtsMjq {
-  color: red;
-}
-
-a {
-  color: yellow;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`camelCase option dashesOnly: warnings 1`] = `Array []`;
-
-exports[`camelCase option not specified: errors 1`] = `Array []`;
-
-exports[`camelCase option not specified: locals 1`] = `
-Object {
-  "btn--info_is-disabled_1": "jDvNwV-WRSMB9n2z9QrzR",
-  "btn-info_is-disabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "foo": "bar",
-  "my-btn-info_is-disabled": "value",
-  "simple": "_1penVf9PMtov2qLxmtsMjq",
-}
-`;
-
-exports[`camelCase option not specified: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    "._1XTfjK5gKYeSzbdZhEXRpF {
-  color: blue;
-}
-
-.jDvNwV-WRSMB9n2z9QrzR {
-  color: blue;
-}
-
-._1penVf9PMtov2qLxmtsMjq {
-  color: red;
-}
-
-a {
-  color: yellow;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`camelCase option not specified: warnings 1`] = `Array []`;
-
-exports[`camelCase option only: errors 1`] = `Array []`;
-
-exports[`camelCase option only: locals 1`] = `
-Object {
-  "btnInfoIsDisabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "btnInfoIsDisabled1": "jDvNwV-WRSMB9n2z9QrzR",
-  "foo": "bar",
-  "myBtnInfoIsDisabled": "value",
-  "simple": "_1penVf9PMtov2qLxmtsMjq",
-}
-`;
-
-exports[`camelCase option only: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    "._1XTfjK5gKYeSzbdZhEXRpF {
-  color: blue;
-}
-
-.jDvNwV-WRSMB9n2z9QrzR {
-  color: blue;
-}
-
-._1penVf9PMtov2qLxmtsMjq {
-  color: red;
-}
-
-a {
-  color: yellow;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`camelCase option only: warnings 1`] = `Array []`;
-
-exports[`camelCase option true: errors 1`] = `Array []`;
-
-exports[`camelCase option true: locals 1`] = `
-Object {
-  "btn--info_is-disabled_1": "jDvNwV-WRSMB9n2z9QrzR",
-  "btn-info_is-disabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "btnInfoIsDisabled": "_1XTfjK5gKYeSzbdZhEXRpF",
-  "btnInfoIsDisabled1": "jDvNwV-WRSMB9n2z9QrzR",
-  "foo": "bar",
-  "my-btn-info_is-disabled": "value",
-  "myBtnInfoIsDisabled": "value",
-  "simple": "_1penVf9PMtov2qLxmtsMjq",
-}
-`;
-
-exports[`camelCase option true: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    "._1XTfjK5gKYeSzbdZhEXRpF {
-  color: blue;
-}
-
-.jDvNwV-WRSMB9n2z9QrzR {
-  color: blue;
-}
-
-._1penVf9PMtov2qLxmtsMjq {
-  color: red;
-}
-
-a {
-  color: yellow;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`camelCase option true: warnings 1`] = `Array []`;
diff --git a/test/__snapshots__/errors.test.js.snap b/test/__snapshots__/errors.test.js.snap
deleted file mode 100644
index e04c3b08..00000000
--- a/test/__snapshots__/errors.test.js.snap
+++ /dev/null
@@ -1,117 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`validation 1`] = `
-"CSS Loader Invalid Options
-
-options.url should be boolean
-options.url should pass \\"instanceof\\" keyword validation
-options.url should match some schema in anyOf
-"
-`;
-
-exports[`validation 2`] = `
-"CSS Loader Invalid Options
-
-options.import should be boolean
-options.import should pass \\"instanceof\\" keyword validation
-options.import should match some schema in anyOf
-"
-`;
-
-exports[`validation 3`] = `
-"CSS Loader Invalid Options
-
-options.modules should be boolean
-options.modules should be equal to one of the allowed values
-options.modules should match some schema in anyOf
-"
-`;
-
-exports[`validation 4`] = `
-"CSS Loader Invalid Options
-
-options.modules should be boolean
-options.modules should be equal to one of the allowed values
-options.modules should match some schema in anyOf
-"
-`;
-
-exports[`validation 5`] = `
-"CSS Loader Invalid Options
-
-options.modules should be boolean
-options.modules should be equal to one of the allowed values
-options.modules should match some schema in anyOf
-"
-`;
-
-exports[`validation 6`] = `
-"CSS Loader Invalid Options
-
-options.localIdentName should be string
-"
-`;
-
-exports[`validation 7`] = `
-"CSS Loader Invalid Options
-
-options.localIdentRegExp should be string
-options.localIdentRegExp should pass \\"instanceof\\" keyword validation
-options.localIdentRegExp should match some schema in anyOf
-"
-`;
-
-exports[`validation 8`] = `
-"CSS Loader Invalid Options
-
-options.context should be string
-"
-`;
-
-exports[`validation 9`] = `
-"CSS Loader Invalid Options
-
-options.hashPrefix should be string
-"
-`;
-
-exports[`validation 10`] = `
-"CSS Loader Invalid Options
-
-options.getLocalIdent should be boolean
-options.getLocalIdent should pass \\"instanceof\\" keyword validation
-options.getLocalIdent should match some schema in anyOf
-"
-`;
-
-exports[`validation 11`] = `
-"CSS Loader Invalid Options
-
-options.sourceMap should be boolean
-"
-`;
-
-exports[`validation 12`] = `
-"CSS Loader Invalid Options
-
-options.camelCase should be boolean
-options.camelCase should be equal to one of the allowed values
-options.camelCase should match some schema in anyOf
-"
-`;
-
-exports[`validation 13`] = `
-"CSS Loader Invalid Options
-
-options.importLoaders should be boolean
-options.importLoaders should be number
-options.importLoaders should match some schema in anyOf
-"
-`;
-
-exports[`validation 14`] = `
-"CSS Loader Invalid Options
-
-options.exportOnlyLocals should be boolean
-"
-`;
diff --git a/test/__snapshots__/getLocalIdent-option.test.js.snap b/test/__snapshots__/getLocalIdent-option.test.js.snap
deleted file mode 100644
index 16ce6a7b..00000000
--- a/test/__snapshots__/getLocalIdent-option.test.js.snap
+++ /dev/null
@@ -1,150 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`getLocalIdent option should accepts arguments: errors 1`] = `Array []`;
-
-exports[`getLocalIdent option should accepts arguments: locals 1`] = `
-Object {
-  "abc": "foo",
-  "def": "foo",
-  "ghi": "foo",
-  "jkl": "foo",
-}
-`;
-
-exports[`getLocalIdent option should accepts arguments: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ".foo .foo {
-  color: red;
-}
-
-.foo .foo {
-  color: blue;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`getLocalIdent option should accepts arguments: warnings 1`] = `Array []`;
-
-exports[`getLocalIdent option should allow to use \`false\` value: errors 1`] = `Array []`;
-
-exports[`getLocalIdent option should allow to use \`false\` value: locals 1`] = `
-Object {
-  "abc": "before_abc__1hk_after",
-  "def": "before_def__3oo_after",
-  "ghi": "before_ghi__2ZR_after",
-  "jkl": "before_jkl__aQ1_after",
-}
-`;
-
-exports[`getLocalIdent option should allow to use \`false\` value: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ".before_abc__1hk_after .before_def__3oo_after {
-  color: red;
-}
-
-.before_ghi__2ZR_after .before_jkl__aQ1_after {
-  color: blue;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`getLocalIdent option should allow to use \`false\` value: warnings 1`] = `Array []`;
-
-exports[`getLocalIdent option should respect \`context\` option: errors 1`] = `Array []`;
-
-exports[`getLocalIdent option should respect \`context\` option: locals 1`] = `
-Object {
-  "abc": "_1hksQTRR0UD9eKPUBlgn0X",
-  "def": "_3oo37UGTAgyDe0MeQom-28",
-  "ghi": "_2ZRWT_7WiIKpOei7U0eJzJ",
-  "jkl": "aQ1rQfhbWSRMXFXxIfQcx",
-}
-`;
-
-exports[`getLocalIdent option should respect \`context\` option: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    "._1hksQTRR0UD9eKPUBlgn0X ._3oo37UGTAgyDe0MeQom-28 {
-  color: red;
-}
-
-._2ZRWT_7WiIKpOei7U0eJzJ .aQ1rQfhbWSRMXFXxIfQcx {
-  color: blue;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`getLocalIdent option should respect \`context\` option: warnings 1`] = `Array []`;
-
-exports[`getLocalIdent option should work (\`modules: false\`): errors 1`] = `Array []`;
-
-exports[`getLocalIdent option should work (\`modules: false\`): locals 1`] = `
-Object {
-  "def": "foo",
-  "ghi": "foo",
-  "jkl": "foo",
-}
-`;
-
-exports[`getLocalIdent option should work (\`modules: false\`): module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ".abc .foo {
-  color: red;
-}
-
-.foo .foo {
-  color: blue;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`getLocalIdent option should work (\`modules: false\`): warnings 1`] = `Array []`;
-
-exports[`getLocalIdent option should work (\`modules: true\`): errors 1`] = `Array []`;
-
-exports[`getLocalIdent option should work (\`modules: true\`): locals 1`] = `
-Object {
-  "abc": "foo",
-  "def": "foo",
-  "ghi": "foo",
-  "jkl": "foo",
-}
-`;
-
-exports[`getLocalIdent option should work (\`modules: true\`): module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ".foo .foo {
-  color: red;
-}
-
-.foo .foo {
-  color: blue;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`getLocalIdent option should work (\`modules: true\`): warnings 1`] = `Array []`;
diff --git a/test/__snapshots__/import-option.test.js.snap b/test/__snapshots__/import-option.test.js.snap
index 704c33ff..bd57046c 100644
--- a/test/__snapshots__/import-option.test.js.snap
+++ b/test/__snapshots__/import-option.test.js.snap
@@ -204,12 +204,10 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!../import/top-relative.cs
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/tilde.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesImport/alias.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./url.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url(test.css);\\\\n@import url('test.css');\\\\n@import url(\\\\\\"test.css\\\\\\");\\\\n@IMPORT url(test.css);\\\\n@import URL(test.css);\\\\n@import url(test.css );\\\\n@import url( test.css);\\\\n@import url( test.css );\\\\n@import url(\\\\n  test.css\\\\n);\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import \\\\\\"test.css\\\\\\";\\\\n@import 'test.css';\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import url(test.css) screen and print;\\\\n@import url(test.css) SCREEN AND PRINT;\\\\n@import url(test.css)screen and print;\\\\n@import url(test.css)  screen and print;\\\\n@import url(~package/test.css);\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n\\\\n.class {\\\\n  a: b c d;\\\\n}\\\\n\\\\n.foo {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n.background {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -353,12 +351,10 @@ Array [
 exports[`import option false: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url(test.css);\\\\n@import url('test.css');\\\\n@import url(\\\\\\"test.css\\\\\\");\\\\n@IMPORT url(test.css);\\\\n@import URL(test.css);\\\\n@import url(test.css );\\\\n@import url( test.css);\\\\n@import url( test.css );\\\\n@import url(\\\\n  test.css\\\\n);\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import \\\\\\"test.css\\\\\\";\\\\n@import 'test.css';\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import url(test.css) screen and print;\\\\n@import url(test.css) SCREEN AND PRINT;\\\\n@import url(test.css)screen and print;\\\\n@import url(test.css)  screen and print;\\\\n@import url(test-media.css) screen and print;\\\\n@import url(test-other.css) (min-width: 100px);\\\\n@import url(http://example.com/style.css);\\\\n@import url(http://example.com/style.css);\\\\n@import url(http://example.com/style.css#hash);\\\\n@import url(http://example.com/style.css?#hash);\\\\n@import url(http://example.com/style.css?foo=bar#hash);\\\\n@import url(http://example.com/other-style.css) screen and print;\\\\n@import url(http://example.com/other-style.css) screen and print;\\\\n@import url(\\\\\\"//example.com/style.css\\\\\\");\\\\n@import url(~package/test.css);\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n@import url('query.css?foo=1&bar=1');\\\\n@import url('other-query.css?foo=1&bar=1#hash');\\\\n@import url('other-query.css?foo=1&bar=1#hash') screen and print;\\\\n@import url('https://fonts.googleapis.com/css?family=Roboto');\\\\n@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC');\\\\n@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto');\\\\n\\\\n.class {\\\\n  a: b c d;\\\\n}\\\\n\\\\n.foo {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n@import url('./relative.css');\\\\n@import url('../import/top-relative.css');\\\\n@import url(~package/tilde.css);\\\\n@import url(~aliasesImport/alias.css);\\\\n@import url('./url.css');\\\\n\\\\n.background {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -577,12 +573,10 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!../import/top-relative.cs
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/tilde.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesImport/alias.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./url.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n\\\\n.class {\\\\n  a: b c d;\\\\n}\\\\n\\\\n.foo {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n.background {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -857,12 +851,10 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!../import/top-relative.cs
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/tilde.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesImport/alias.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./url.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n\\\\n.class {\\\\n  a: b c d;\\\\n}\\\\n\\\\n.foo {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n.background {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -1137,12 +1129,10 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!../import/top-relative.cs
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/tilde.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesImport/alias.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./url.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n\\\\n.hnxX78DgkaA2kCp_BPbLd {\\\\n  a: b c d;\\\\n}\\\\n\\\\n._1Lug_45kZL-M7XuNeM4SCw {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n._1E9CLkKp-0idM8IkvZwXn9 {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 // Exports
 exports.locals = {
 	\\"class\\": \\"hnxX78DgkaA2kCp_BPbLd\\",
@@ -1422,12 +1412,10 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!../import/top-relative.cs
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/tilde.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesImport/alias.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./url.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n\\\\n.hnxX78DgkaA2kCp_BPbLd {\\\\n  a: b c d;\\\\n}\\\\n\\\\n._1Lug_45kZL-M7XuNeM4SCw {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n._1E9CLkKp-0idM8IkvZwXn9 {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 // Exports
 exports.locals = {
 	\\"class\\": \\"hnxX78DgkaA2kCp_BPbLd\\",
@@ -1707,12 +1695,10 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!../import/top-relative.cs
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/tilde.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesImport/alias.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./url.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
 // Module
 exports.push([module.id, \\"@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import '';\\\\n@import \\\\\\"\\\\\\";\\\\n@import \\\\\\"   \\\\\\";\\\\n@import \\\\\\"\\\\n\\\\\\";\\\\n@import url();\\\\n@import url('');\\\\n@import url(\\\\\\"\\\\\\");\\\\n@import ;\\\\n@import foo-bar;\\\\n@import-normalize;\\\\n@import url('http://') :root {}\\\\n\\\\n.class {\\\\n  a: b c d;\\\\n}\\\\n\\\\n.foo {\\\\n  @import 'path.css';\\\\n}\\\\n\\\\n.background {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
diff --git a/test/__snapshots__/importLoaders-option.test.js.snap b/test/__snapshots__/importLoaders-option.test.js.snap
index 2aa70abb..c810b8ce 100644
--- a/test/__snapshots__/importLoaders-option.test.js.snap
+++ b/test/__snapshots__/importLoaders-option.test.js.snap
@@ -29,10 +29,8 @@ exports[`importLoaders option 0 (\`postcss-loader\` before): module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".foo {\\\\n  color: red;\\\\n  color: rgba(0, 0, 255, 0.9);\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -67,10 +65,8 @@ exports[`importLoaders option 1 (\`postcss-loader\` before): module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!../../../node_modules/postcss-loader/src/index.js??ref--4-1!./imported.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".foo {\\\\n  color: red;\\\\n  color: rgba(0, 0, 255, 0.9);\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -105,10 +101,8 @@ exports[`importLoaders option 1 (no loaders before): module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".foo {\\\\n  color: red;\\\\n  color: rgb(0 0 100% / 90%);\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -143,10 +137,8 @@ exports[`importLoaders option 2 (\`postcss-loader\` before): module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!../../../node_modules/postcss-loader/src/index.js??ref--4-1!./imported.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".foo {\\\\n  color: red;\\\\n  color: rgba(0, 0, 255, 0.9);\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -181,10 +173,8 @@ exports[`importLoaders option not specify (no loader before): module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".foo {\\\\n  color: red;\\\\n  color: rgba(0, 0, 255, 0.9);\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
diff --git a/test/__snapshots__/loader.test.js.snap b/test/__snapshots__/loader.test.js.snap
index 158f1624..97e979fb 100644
--- a/test/__snapshots__/loader.test.js.snap
+++ b/test/__snapshots__/loader.test.js.snap
@@ -6,35 +6,45 @@ exports[`loader should compile with \`css\` entry point (with \`modules\` and sc
   Author Tobias Koppers @sokra
 */
 // css base code, injected by the css-loader
+// eslint-disable-next-line func-names
 module.exports = function(useSourceMap) {
-  var list = [];
+  const list = [];
 
   // return the list of modules as css string
   list.toString = function toString() {
-    return this.map(function(item) {
-      var content = cssWithMappingToString(item, useSourceMap);
+    return this.map((item) => {
+      const content = cssWithMappingToString(item, useSourceMap);
+
       if (item[2]) {
-        return '@media ' + item[2] + '{' + content + '}';
-      } else {
-        return content;
+        return \`@media \${item[2]}{\${content}}\`;
       }
+
+      return content;
     }).join('');
   };
 
   // import a list of modules into the list
+  // eslint-disable-next-line func-names
   list.i = function(modules, mediaQuery) {
     if (typeof modules === 'string') {
+      // eslint-disable-next-line no-param-reassign
       modules = [[null, modules, '']];
     }
-    var alreadyImportedModules = {};
-    for (var i = 0; i < this.length; i++) {
-      var id = this[i][0];
+
+    const alreadyImportedModules = {};
+
+    for (let i = 0; i < this.length; i++) {
+      // eslint-disable-next-line prefer-destructuring
+      const id = this[i][0];
+
       if (id != null) {
         alreadyImportedModules[id] = true;
       }
     }
-    for (i = 0; i < modules.length; i++) {
-      var item = modules[i];
+
+    for (let i = 0; i < modules.length; i++) {
+      const item = modules[i];
+
       // skip already imported module
       // this implementation is not 100% perfect for weird media query combinations
       // when a module is imported multiple times with different media queries.
@@ -43,27 +53,31 @@ module.exports = function(useSourceMap) {
         if (mediaQuery && !item[2]) {
           item[2] = mediaQuery;
         } else if (mediaQuery) {
-          item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';
+          item[2] = \`(\${item[2]}) and (\${mediaQuery})\`;
         }
+
         list.push(item);
       }
     }
   };
+
   return list;
 };
 
 function cssWithMappingToString(item, useSourceMap) {
-  var content = item[1] || '';
-  var cssMapping = item[3];
+  const content = item[1] || '';
+  // eslint-disable-next-line prefer-destructuring
+  const cssMapping = item[3];
+
   if (!cssMapping) {
     return content;
   }
 
   if (useSourceMap && typeof btoa === 'function') {
-    var sourceMapping = toComment(cssMapping);
-    var sourceURLs = cssMapping.sources.map(function(source) {
-      return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';
-    });
+    const sourceMapping = toComment(cssMapping);
+    const sourceURLs = cssMapping.sources.map(
+      (source) => \`/*# sourceURL=\${cssMapping.sourceRoot}\${source} */\`
+    );
 
     return [content]
       .concat(sourceURLs)
@@ -77,11 +91,10 @@ function cssWithMappingToString(item, useSourceMap) {
 // Adapted from convert-source-map (MIT)
 function toComment(sourceMap) {
   // eslint-disable-next-line no-undef
-  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
-  var data =
-    'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
+  const base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
+  const data = \`sourceMappingURL=data:application/json;charset=utf-8;base64,\${base64}\`;
 
-  return '/*# ' + data + ' */';
+  return \`/*# \${data} */\`;
 }
 "
 `;
@@ -89,20 +102,21 @@ function toComment(sourceMap) {
 exports[`loader should compile with \`css\` entry point (with \`modules\` and scope \`global\`): errors 1`] = `Array []`;
 
 exports[`loader should compile with \`css\` entry point (with \`modules\` and scope \`global\`): escape 1`] = `
-"module.exports = function escape(url, needQuotes) {
+"module.exports = (url, needQuotes) => {
   if (typeof url !== 'string') {
     return url;
   }
 
   // If url is already wrapped in quotes, remove them
   if (/^['\\"].*['\\"]$/.test(url)) {
+    // eslint-disable-next-line no-param-reassign
     url = url.slice(1, -1);
   }
 
   // Should url be wrapped?
   // See https://drafts.csswg.org/css-values-3/#urls
   if (/[\\"'() \\\\t\\\\n]/.test(url) || needQuotes) {
-    return '\\"' + url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n') + '\\"';
+    return \`\\"\${url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n')}\\"\`;
   }
 
   return url;
@@ -113,8 +127,11 @@ exports[`loader should compile with \`css\` entry point (with \`modules\` and sc
 exports[`loader should compile with \`css\` entry point (with \`modules\` and scope \`global\`): module (evaluated) 1`] = `
 Array [
   Array [
-    null,
-    "nothing",
+    2,
+    ".foo {
+  color: red;
+}
+",
     "",
   ],
   Array [
@@ -125,11 +142,11 @@ Array [
 
 .class {
   color: red;
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 .class-duplicate-url {
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 :root {
@@ -264,12 +281,10 @@ exports[`loader should compile with \`css\` entry point (with \`modules\` and sc
 "exports = module.exports = require(\\"../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./url/img.png\\"));
-
+var getUrl = require(\\"../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./url/img.png\\"));
 // Module
 exports.push([module.id, \\"@charset \\\\\\"UTF-8\\\\\\";\\\\n\\\\n/* Comment */\\\\n\\\\n.class {\\\\n  color: red;\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class-duplicate-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n:root {\\\\n  --foo: 1px;\\\\n  --bar: 2px;\\\\n}\\\\n\\\\n.class { a: b c d; }\\\\n\\\\n.two {}\\\\n\\\\n.u-m\\\\\\\\+ { a: b c d; }\\\\n\\\\n.class { content: \\\\\\"\\\\\\\\F10C\\\\\\" }\\\\n\\\\n@media only screen and (max-width: 600px) {\\\\n  body {\\\\n    background-color: lightblue;\\\\n  }\\\\n}\\\\n\\\\n.class {\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n}\\\\n\\\\n.-top {}\\\\n.\\\\\\\\-top {}\\\\n\\\\n#\\\\\\\\#test {}\\\\n\\\\n.grid {\\\\n  display: flex;\\\\n  flex-wrap: wrap;\\\\n}\\\\n.grid.\\\\\\\\-top {\\\\n  align-items: flex-start;\\\\n}\\\\n.grid.-top {\\\\n  align-items: flex-start;\\\\n}\\\\n.grid.\\\\\\\\-middle {\\\\n  align-items: center;\\\\n}\\\\n.grid.\\\\\\\\-bottom {\\\\n  align-items: flex-end;\\\\n}\\\\n\\\\n.u-m\\\\\\\\00002b {}\\\\n\\\\n.u-m00002b {}\\\\n\\\\n#u-m\\\\\\\\+ {}\\\\n\\\\nbody {\\\\n  font-family: '微软雅黑'; /* some chinese font name */\\\\n}\\\\n\\\\n.myStyle {\\\\n  content: '\\\\\\\\e901';\\\\n}\\\\n\\\\n.myStyle {\\\\n  content: '\\\\\\\\E901';\\\\n}\\\\n\\\\n.♫ {}\\\\n\\\\n.\\\\\\\\3A \\\\\\\\\`\\\\\\\\( {} /* matches elements with class=\\\\\\":\`(\\\\\\" */\\\\n.\\\\\\\\31 a2b3c {} /* matches elements with class=\\\\\\"1a2b3c\\\\\\" */\\\\n#\\\\\\\\#fake-id {} /* matches the element with id=\\\\\\"#fake-id\\\\\\" */\\\\n#-a-b-c- {} /* matches the element with id=\\\\\\"-a-b-c-\\\\\\" */\\\\n#© {} /* matches the element with id=\\\\\\"©\\\\\\" */\\\\n\\\\n:root {\\\\n  --title-align: center;\\\\n  --sr-only: {\\\\n    position: absolute;\\\\n    width: 1px;\\\\n    height: 1px;\\\\n    padding: 0;\\\\n    overflow: hidden;\\\\n    clip: rect(0,0,0,0);\\\\n    white-space: nowrap;\\\\n    clip-path: inset(50%);\\\\n    border: 0;\\\\n  };\\\\n}\\\\n\\\\n.test {\\\\n  content: \\\\\\"\\\\\\\\2014\\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2014 \\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0 \\\\\\\\2014\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0\\\\\\\\2014\\\\\\";\\\\n  margin-top: 1px\\\\\\\\9;\\\\n  background-color: #000\\\\\\\\9;\\\\n}\\\\n\\\\n.light.on .bulb:before{\\\\n  content: '💡';\\\\n}\\\\n\\\\n.base64 {\\\\n  background: url(data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhxJREFUSA3tk71rU1EYxnMTEoJUkowWwdJ2akEHBfGjCiIF6ZylVUKSm2TqZLGI+A/oIu2UXm8C4lAyF4SWji0tdFLo1Eo7VN0SaBEhH7e/Nz0nPTfGOjiaCyfPc5734zlfCQT6X/8E/vUErL81KBaL9y3LSnued5PcITjUOwR3gsFg2bbtjYt6/NGgXC4P1et1l2aPLmpAbD0SidjpdPqgV15PA9d17zQajU8UxHQRK/4G35Q5pveAK8LlI1ZjPMnlcltnyvnvbwaO41xvtVqy7YHztMACq5xnlb9EY3dRdvcGo1kj5wR+t1AofDG0gM+A875E8DNjRCexsrV8Pj9ZqVQitVrtqejxePxjMpmss5hVTB4buXvMb2DyU2tBTRS+BjvNlVYUpPl7iuVO3Gq1uoQx1FtSOW1gPgp5ZWrdBtNmUDgv5asgxQ8F1af5vhY0YjyjuWC3wTszKJz7GBOkcFlQfW2ONq4FjWi+Hj6DRCKxQOK2TlY4x92EuYd5dvMAbYIzfikau3pu5tJ8KxaLLfo0cyKci7tK4TZjUMcoXAmHwzle0Q/RaC5P1GFMyVx9R9Fo9HYqlTrSgqDvFelAqVQa5hmuMR/WGtjAaBdjwBoDQ0ZsnwVMZjKZ9n0Zem8DSeDPdrnZbL6F2l3NOvUYNZk4oVDoRTabPe4EDNJzB0ZcjAYxeoZ2i3FNxQ7BHYw/cB/fldaH//UETgHHO8S44KbfXgAAAABJRU5ErkJggg==);\\\\n}\\\\n\\\\na[href=''] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href='' i] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\"] {\\\\n  color: blue;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\" i] {\\\\n  color: blue;\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -281,35 +296,45 @@ exports[`loader should compile with \`css\` entry point (with \`modules\` and sc
   Author Tobias Koppers @sokra
 */
 // css base code, injected by the css-loader
+// eslint-disable-next-line func-names
 module.exports = function(useSourceMap) {
-  var list = [];
+  const list = [];
 
   // return the list of modules as css string
   list.toString = function toString() {
-    return this.map(function(item) {
-      var content = cssWithMappingToString(item, useSourceMap);
+    return this.map((item) => {
+      const content = cssWithMappingToString(item, useSourceMap);
+
       if (item[2]) {
-        return '@media ' + item[2] + '{' + content + '}';
-      } else {
-        return content;
+        return \`@media \${item[2]}{\${content}}\`;
       }
+
+      return content;
     }).join('');
   };
 
   // import a list of modules into the list
+  // eslint-disable-next-line func-names
   list.i = function(modules, mediaQuery) {
     if (typeof modules === 'string') {
+      // eslint-disable-next-line no-param-reassign
       modules = [[null, modules, '']];
     }
-    var alreadyImportedModules = {};
-    for (var i = 0; i < this.length; i++) {
-      var id = this[i][0];
+
+    const alreadyImportedModules = {};
+
+    for (let i = 0; i < this.length; i++) {
+      // eslint-disable-next-line prefer-destructuring
+      const id = this[i][0];
+
       if (id != null) {
         alreadyImportedModules[id] = true;
       }
     }
-    for (i = 0; i < modules.length; i++) {
-      var item = modules[i];
+
+    for (let i = 0; i < modules.length; i++) {
+      const item = modules[i];
+
       // skip already imported module
       // this implementation is not 100% perfect for weird media query combinations
       // when a module is imported multiple times with different media queries.
@@ -318,27 +343,31 @@ module.exports = function(useSourceMap) {
         if (mediaQuery && !item[2]) {
           item[2] = mediaQuery;
         } else if (mediaQuery) {
-          item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';
+          item[2] = \`(\${item[2]}) and (\${mediaQuery})\`;
         }
+
         list.push(item);
       }
     }
   };
+
   return list;
 };
 
 function cssWithMappingToString(item, useSourceMap) {
-  var content = item[1] || '';
-  var cssMapping = item[3];
+  const content = item[1] || '';
+  // eslint-disable-next-line prefer-destructuring
+  const cssMapping = item[3];
+
   if (!cssMapping) {
     return content;
   }
 
   if (useSourceMap && typeof btoa === 'function') {
-    var sourceMapping = toComment(cssMapping);
-    var sourceURLs = cssMapping.sources.map(function(source) {
-      return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';
-    });
+    const sourceMapping = toComment(cssMapping);
+    const sourceURLs = cssMapping.sources.map(
+      (source) => \`/*# sourceURL=\${cssMapping.sourceRoot}\${source} */\`
+    );
 
     return [content]
       .concat(sourceURLs)
@@ -352,11 +381,10 @@ function cssWithMappingToString(item, useSourceMap) {
 // Adapted from convert-source-map (MIT)
 function toComment(sourceMap) {
   // eslint-disable-next-line no-undef
-  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
-  var data =
-    'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
+  const base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
+  const data = \`sourceMappingURL=data:application/json;charset=utf-8;base64,\${base64}\`;
 
-  return '/*# ' + data + ' */';
+  return \`/*# \${data} */\`;
 }
 "
 `;
@@ -364,20 +392,21 @@ function toComment(sourceMap) {
 exports[`loader should compile with \`css\` entry point (with \`modules\` and scope \`local\`): errors 1`] = `Array []`;
 
 exports[`loader should compile with \`css\` entry point (with \`modules\` and scope \`local\`): escape 1`] = `
-"module.exports = function escape(url, needQuotes) {
+"module.exports = (url, needQuotes) => {
   if (typeof url !== 'string') {
     return url;
   }
 
   // If url is already wrapped in quotes, remove them
   if (/^['\\"].*['\\"]$/.test(url)) {
+    // eslint-disable-next-line no-param-reassign
     url = url.slice(1, -1);
   }
 
   // Should url be wrapped?
   // See https://drafts.csswg.org/css-values-3/#urls
   if (/[\\"'() \\\\t\\\\n]/.test(url) || needQuotes) {
-    return '\\"' + url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n') + '\\"';
+    return \`\\"\${url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n')}\\"\`;
   }
 
   return url;
@@ -388,8 +417,11 @@ exports[`loader should compile with \`css\` entry point (with \`modules\` and sc
 exports[`loader should compile with \`css\` entry point (with \`modules\` and scope \`local\`): module (evaluated) 1`] = `
 Array [
   Array [
-    null,
-    "nothing",
+    2,
+    ".KTxgbb6qrDrjy0obHlZaJ {
+  color: red;
+}
+",
     "",
   ],
   Array [
@@ -400,11 +432,11 @@ Array [
 
 ._1PSZ4tK4URrenXyNSoawrx {
   color: red;
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 ._3YYoEr128Gk7ZgfRycu4tr {
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 :root {
@@ -539,12 +571,10 @@ exports[`loader should compile with \`css\` entry point (with \`modules\` and sc
 "exports = module.exports = require(\\"../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./url/img.png\\"));
-
+var getUrl = require(\\"../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./url/img.png\\"));
 // Module
 exports.push([module.id, \\"@charset \\\\\\"UTF-8\\\\\\";\\\\n\\\\n/* Comment */\\\\n\\\\n._1PSZ4tK4URrenXyNSoawrx {\\\\n  color: red;\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._3YYoEr128Gk7ZgfRycu4tr {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n:root {\\\\n  --foo: 1px;\\\\n  --bar: 2px;\\\\n}\\\\n\\\\n._1PSZ4tK4URrenXyNSoawrx { a: b c d; }\\\\n\\\\n._1LWD9ZV4XMmN23IPiMONS3 {}\\\\n\\\\n._3i3CD1fyX8bvzRt1H0IV-f { a: b c d; }\\\\n\\\\n._1PSZ4tK4URrenXyNSoawrx { content: \\\\\\"\\\\\\\\F10C\\\\\\" }\\\\n\\\\n@media only screen and (max-width: 600px) {\\\\n  body {\\\\n    background-color: lightblue;\\\\n  }\\\\n}\\\\n\\\\n._1PSZ4tK4URrenXyNSoawrx {\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n}\\\\n\\\\n._1fWEySWrY44TvDnJ8JNxnE {}\\\\n._1fWEySWrY44TvDnJ8JNxnE {}\\\\n\\\\n#Zmuw5k7Gg4hpgd6CVBEkq {}\\\\n\\\\n.nz2GDQ2B9PRi6GmzRwbUM {\\\\n  display: flex;\\\\n  flex-wrap: wrap;\\\\n}\\\\n.nz2GDQ2B9PRi6GmzRwbUM._1fWEySWrY44TvDnJ8JNxnE {\\\\n  align-items: flex-start;\\\\n}\\\\n.nz2GDQ2B9PRi6GmzRwbUM._1fWEySWrY44TvDnJ8JNxnE {\\\\n  align-items: flex-start;\\\\n}\\\\n.nz2GDQ2B9PRi6GmzRwbUM._12Sbi_HmVVsUl9TM-zo3h- {\\\\n  align-items: center;\\\\n}\\\\n.nz2GDQ2B9PRi6GmzRwbUM.gpFhy6a0Dyg4XrktE4jA3 {\\\\n  align-items: flex-end;\\\\n}\\\\n\\\\n._3i3CD1fyX8bvzRt1H0IV-f {}\\\\n\\\\n.YDvxHwoU5TyTmW1oTkKgw {}\\\\n\\\\n#_3i3CD1fyX8bvzRt1H0IV-f {}\\\\n\\\\nbody {\\\\n  font-family: '微软雅黑'; /* some chinese font name */\\\\n}\\\\n\\\\n._3txeRUnk43pQ_ialOcI-1F {\\\\n  content: '\\\\\\\\e901';\\\\n}\\\\n\\\\n._3txeRUnk43pQ_ialOcI-1F {\\\\n  content: '\\\\\\\\E901';\\\\n}\\\\n\\\\n._3Zu4uw_Urs6mU3AHN6h0NV {}\\\\n\\\\n._4_pn9LmAb2XtAy0kg4FN_ {} /* matches elements with class=\\\\\\":\`(\\\\\\" */\\\\n._2LEttkwzH7jRE93Ku8MGqY {} /* matches elements with class=\\\\\\"1a2b3c\\\\\\" */\\\\n#_2E85FJStrx25rDG2lYWifC {} /* matches the element with id=\\\\\\"#fake-id\\\\\\" */\\\\n#_2pyPm3oWgKQ-rjECcnFYrX {} /* matches the element with id=\\\\\\"-a-b-c-\\\\\\" */\\\\n#_2pmolVDQD2g7wt3ejy2doK {} /* matches the element with id=\\\\\\"©\\\\\\" */\\\\n\\\\n:root {\\\\n  --title-align: center;\\\\n  --sr-only: {\\\\n    position: absolute;\\\\n    width: 1px;\\\\n    height: 1px;\\\\n    padding: 0;\\\\n    overflow: hidden;\\\\n    clip: rect(0,0,0,0);\\\\n    white-space: nowrap;\\\\n    clip-path: inset(50%);\\\\n    border: 0;\\\\n  };\\\\n}\\\\n\\\\n._2mQhIWfQwYBHR8C-27Rb-E {\\\\n  content: \\\\\\"\\\\\\\\2014\\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2014 \\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0 \\\\\\\\2014\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0\\\\\\\\2014\\\\\\";\\\\n  margin-top: 1px\\\\\\\\9;\\\\n  background-color: #000\\\\\\\\9;\\\\n}\\\\n\\\\n._2H1jUQC4I1yE2c9CEwXfAS._3HDHfIW-5V2j3qdUcRiaMD ._2eB5NM0D15e1HQWl3AHa8q:before{\\\\n  content: '💡';\\\\n}\\\\n\\\\n.JNjvwXXuHnb_zjhkwPzBD {\\\\n  background: url(data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhxJREFUSA3tk71rU1EYxnMTEoJUkowWwdJ2akEHBfGjCiIF6ZylVUKSm2TqZLGI+A/oIu2UXm8C4lAyF4SWji0tdFLo1Eo7VN0SaBEhH7e/Nz0nPTfGOjiaCyfPc5734zlfCQT6X/8E/vUErL81KBaL9y3LSnued5PcITjUOwR3gsFg2bbtjYt6/NGgXC4P1et1l2aPLmpAbD0SidjpdPqgV15PA9d17zQajU8UxHQRK/4G35Q5pveAK8LlI1ZjPMnlcltnyvnvbwaO41xvtVqy7YHztMACq5xnlb9EY3dRdvcGo1kj5wR+t1AofDG0gM+A875E8DNjRCexsrV8Pj9ZqVQitVrtqejxePxjMpmss5hVTB4buXvMb2DyU2tBTRS+BjvNlVYUpPl7iuVO3Gq1uoQx1FtSOW1gPgp5ZWrdBtNmUDgv5asgxQ8F1af5vhY0YjyjuWC3wTszKJz7GBOkcFlQfW2ONq4FjWi+Hj6DRCKxQOK2TlY4x92EuYd5dvMAbYIzfikau3pu5tJ8KxaLLfo0cyKci7tK4TZjUMcoXAmHwzle0Q/RaC5P1GFMyVx9R9Fo9HYqlTrSgqDvFelAqVQa5hmuMR/WGtjAaBdjwBoDQ0ZsnwVMZjKZ9n0Zem8DSeDPdrnZbL6F2l3NOvUYNZk4oVDoRTabPe4EDNJzB0ZcjAYxeoZ2i3FNxQ7BHYw/cB/fldaH//UETgHHO8S44KbfXgAAAABJRU5ErkJggg==);\\\\n}\\\\n\\\\na[href=''] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href='' i] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\"] {\\\\n  color: blue;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\" i] {\\\\n  color: blue;\\\\n}\\\\n\\", \\"\\"]);
-
 // Exports
 exports.locals = {
 	\\"class\\": \\"_1PSZ4tK4URrenXyNSoawrx\\",
@@ -580,35 +610,45 @@ exports[`loader should compile with \`css\` entry point: api 1`] = `
   Author Tobias Koppers @sokra
 */
 // css base code, injected by the css-loader
+// eslint-disable-next-line func-names
 module.exports = function(useSourceMap) {
-  var list = [];
+  const list = [];
 
   // return the list of modules as css string
   list.toString = function toString() {
-    return this.map(function(item) {
-      var content = cssWithMappingToString(item, useSourceMap);
+    return this.map((item) => {
+      const content = cssWithMappingToString(item, useSourceMap);
+
       if (item[2]) {
-        return '@media ' + item[2] + '{' + content + '}';
-      } else {
-        return content;
+        return \`@media \${item[2]}{\${content}}\`;
       }
+
+      return content;
     }).join('');
   };
 
   // import a list of modules into the list
+  // eslint-disable-next-line func-names
   list.i = function(modules, mediaQuery) {
     if (typeof modules === 'string') {
+      // eslint-disable-next-line no-param-reassign
       modules = [[null, modules, '']];
     }
-    var alreadyImportedModules = {};
-    for (var i = 0; i < this.length; i++) {
-      var id = this[i][0];
+
+    const alreadyImportedModules = {};
+
+    for (let i = 0; i < this.length; i++) {
+      // eslint-disable-next-line prefer-destructuring
+      const id = this[i][0];
+
       if (id != null) {
         alreadyImportedModules[id] = true;
       }
     }
-    for (i = 0; i < modules.length; i++) {
-      var item = modules[i];
+
+    for (let i = 0; i < modules.length; i++) {
+      const item = modules[i];
+
       // skip already imported module
       // this implementation is not 100% perfect for weird media query combinations
       // when a module is imported multiple times with different media queries.
@@ -617,27 +657,31 @@ module.exports = function(useSourceMap) {
         if (mediaQuery && !item[2]) {
           item[2] = mediaQuery;
         } else if (mediaQuery) {
-          item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';
+          item[2] = \`(\${item[2]}) and (\${mediaQuery})\`;
         }
+
         list.push(item);
       }
     }
   };
+
   return list;
 };
 
 function cssWithMappingToString(item, useSourceMap) {
-  var content = item[1] || '';
-  var cssMapping = item[3];
+  const content = item[1] || '';
+  // eslint-disable-next-line prefer-destructuring
+  const cssMapping = item[3];
+
   if (!cssMapping) {
     return content;
   }
 
   if (useSourceMap && typeof btoa === 'function') {
-    var sourceMapping = toComment(cssMapping);
-    var sourceURLs = cssMapping.sources.map(function(source) {
-      return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';
-    });
+    const sourceMapping = toComment(cssMapping);
+    const sourceURLs = cssMapping.sources.map(
+      (source) => \`/*# sourceURL=\${cssMapping.sourceRoot}\${source} */\`
+    );
 
     return [content]
       .concat(sourceURLs)
@@ -651,11 +695,10 @@ function cssWithMappingToString(item, useSourceMap) {
 // Adapted from convert-source-map (MIT)
 function toComment(sourceMap) {
   // eslint-disable-next-line no-undef
-  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
-  var data =
-    'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
+  const base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
+  const data = \`sourceMappingURL=data:application/json;charset=utf-8;base64,\${base64}\`;
 
-  return '/*# ' + data + ' */';
+  return \`/*# \${data} */\`;
 }
 "
 `;
@@ -663,20 +706,21 @@ function toComment(sourceMap) {
 exports[`loader should compile with \`css\` entry point: errors 1`] = `Array []`;
 
 exports[`loader should compile with \`css\` entry point: escape 1`] = `
-"module.exports = function escape(url, needQuotes) {
+"module.exports = (url, needQuotes) => {
   if (typeof url !== 'string') {
     return url;
   }
 
   // If url is already wrapped in quotes, remove them
   if (/^['\\"].*['\\"]$/.test(url)) {
+    // eslint-disable-next-line no-param-reassign
     url = url.slice(1, -1);
   }
 
   // Should url be wrapped?
   // See https://drafts.csswg.org/css-values-3/#urls
   if (/[\\"'() \\\\t\\\\n]/.test(url) || needQuotes) {
-    return '\\"' + url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n') + '\\"';
+    return \`\\"\${url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n')}\\"\`;
   }
 
   return url;
@@ -687,8 +731,11 @@ exports[`loader should compile with \`css\` entry point: escape 1`] = `
 exports[`loader should compile with \`css\` entry point: module (evaluated) 1`] = `
 Array [
   Array [
-    null,
-    "nothing",
+    2,
+    ".foo {
+  color: red;
+}
+",
     "",
   ],
   Array [
@@ -699,11 +746,11 @@ Array [
 
 .class {
   color: red;
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 .class-duplicate-url {
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 :root {
@@ -838,12 +885,10 @@ exports[`loader should compile with \`css\` entry point: module 1`] = `
 "exports = module.exports = require(\\"../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./url/img.png\\"));
-
+var getUrl = require(\\"../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./url/img.png\\"));
 // Module
 exports.push([module.id, \\"@charset \\\\\\"UTF-8\\\\\\";\\\\n\\\\n/* Comment */\\\\n\\\\n.class {\\\\n  color: red;\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class-duplicate-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n:root {\\\\n  --foo: 1px;\\\\n  --bar: 2px;\\\\n}\\\\n\\\\n.class { a: b c d; }\\\\n\\\\n.two {}\\\\n\\\\n.u-m\\\\\\\\+ { a: b c d; }\\\\n\\\\n.class { content: \\\\\\"\\\\\\\\F10C\\\\\\" }\\\\n\\\\n@media only screen and (max-width: 600px) {\\\\n  body {\\\\n    background-color: lightblue;\\\\n  }\\\\n}\\\\n\\\\n.class {\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n}\\\\n\\\\n.-top {}\\\\n.\\\\\\\\-top {}\\\\n\\\\n#\\\\\\\\#test {}\\\\n\\\\n.grid {\\\\n  display: flex;\\\\n  flex-wrap: wrap;\\\\n}\\\\n.grid.\\\\\\\\-top {\\\\n  align-items: flex-start;\\\\n}\\\\n.grid.-top {\\\\n  align-items: flex-start;\\\\n}\\\\n.grid.\\\\\\\\-middle {\\\\n  align-items: center;\\\\n}\\\\n.grid.\\\\\\\\-bottom {\\\\n  align-items: flex-end;\\\\n}\\\\n\\\\n.u-m\\\\\\\\00002b {}\\\\n\\\\n.u-m00002b {}\\\\n\\\\n#u-m\\\\\\\\+ {}\\\\n\\\\nbody {\\\\n  font-family: '微软雅黑'; /* some chinese font name */\\\\n}\\\\n\\\\n.myStyle {\\\\n  content: '\\\\\\\\e901';\\\\n}\\\\n\\\\n.myStyle {\\\\n  content: '\\\\\\\\E901';\\\\n}\\\\n\\\\n.♫ {}\\\\n\\\\n.\\\\\\\\3A \\\\\\\\\`\\\\\\\\( {} /* matches elements with class=\\\\\\":\`(\\\\\\" */\\\\n.\\\\\\\\31 a2b3c {} /* matches elements with class=\\\\\\"1a2b3c\\\\\\" */\\\\n#\\\\\\\\#fake-id {} /* matches the element with id=\\\\\\"#fake-id\\\\\\" */\\\\n#-a-b-c- {} /* matches the element with id=\\\\\\"-a-b-c-\\\\\\" */\\\\n#© {} /* matches the element with id=\\\\\\"©\\\\\\" */\\\\n\\\\n:root {\\\\n  --title-align: center;\\\\n  --sr-only: {\\\\n    position: absolute;\\\\n    width: 1px;\\\\n    height: 1px;\\\\n    padding: 0;\\\\n    overflow: hidden;\\\\n    clip: rect(0,0,0,0);\\\\n    white-space: nowrap;\\\\n    clip-path: inset(50%);\\\\n    border: 0;\\\\n  };\\\\n}\\\\n\\\\n.test {\\\\n  content: \\\\\\"\\\\\\\\2014\\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2014 \\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0 \\\\\\\\2014\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0\\\\\\\\2014\\\\\\";\\\\n  margin-top: 1px\\\\\\\\9;\\\\n  background-color: #000\\\\\\\\9;\\\\n}\\\\n\\\\n.light.on .bulb:before{\\\\n  content: '💡';\\\\n}\\\\n\\\\n.base64 {\\\\n  background: url(data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhxJREFUSA3tk71rU1EYxnMTEoJUkowWwdJ2akEHBfGjCiIF6ZylVUKSm2TqZLGI+A/oIu2UXm8C4lAyF4SWji0tdFLo1Eo7VN0SaBEhH7e/Nz0nPTfGOjiaCyfPc5734zlfCQT6X/8E/vUErL81KBaL9y3LSnued5PcITjUOwR3gsFg2bbtjYt6/NGgXC4P1et1l2aPLmpAbD0SidjpdPqgV15PA9d17zQajU8UxHQRK/4G35Q5pveAK8LlI1ZjPMnlcltnyvnvbwaO41xvtVqy7YHztMACq5xnlb9EY3dRdvcGo1kj5wR+t1AofDG0gM+A875E8DNjRCexsrV8Pj9ZqVQitVrtqejxePxjMpmss5hVTB4buXvMb2DyU2tBTRS+BjvNlVYUpPl7iuVO3Gq1uoQx1FtSOW1gPgp5ZWrdBtNmUDgv5asgxQ8F1af5vhY0YjyjuWC3wTszKJz7GBOkcFlQfW2ONq4FjWi+Hj6DRCKxQOK2TlY4x92EuYd5dvMAbYIzfikau3pu5tJ8KxaLLfo0cyKci7tK4TZjUMcoXAmHwzle0Q/RaC5P1GFMyVx9R9Fo9HYqlTrSgqDvFelAqVQa5hmuMR/WGtjAaBdjwBoDQ0ZsnwVMZjKZ9n0Zem8DSeDPdrnZbL6F2l3NOvUYNZk4oVDoRTabPe4EDNJzB0ZcjAYxeoZ2i3FNxQ7BHYw/cB/fldaH//UETgHHO8S44KbfXgAAAABJRU5ErkJggg==);\\\\n}\\\\n\\\\na[href=''] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href='' i] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\"] {\\\\n  color: blue;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\" i] {\\\\n  color: blue;\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -855,35 +900,45 @@ exports[`loader should compile with \`js\` entry point: api 1`] = `
   Author Tobias Koppers @sokra
 */
 // css base code, injected by the css-loader
+// eslint-disable-next-line func-names
 module.exports = function(useSourceMap) {
-  var list = [];
+  const list = [];
 
   // return the list of modules as css string
   list.toString = function toString() {
-    return this.map(function(item) {
-      var content = cssWithMappingToString(item, useSourceMap);
+    return this.map((item) => {
+      const content = cssWithMappingToString(item, useSourceMap);
+
       if (item[2]) {
-        return '@media ' + item[2] + '{' + content + '}';
-      } else {
-        return content;
+        return \`@media \${item[2]}{\${content}}\`;
       }
+
+      return content;
     }).join('');
   };
 
   // import a list of modules into the list
+  // eslint-disable-next-line func-names
   list.i = function(modules, mediaQuery) {
     if (typeof modules === 'string') {
+      // eslint-disable-next-line no-param-reassign
       modules = [[null, modules, '']];
     }
-    var alreadyImportedModules = {};
-    for (var i = 0; i < this.length; i++) {
-      var id = this[i][0];
+
+    const alreadyImportedModules = {};
+
+    for (let i = 0; i < this.length; i++) {
+      // eslint-disable-next-line prefer-destructuring
+      const id = this[i][0];
+
       if (id != null) {
         alreadyImportedModules[id] = true;
       }
     }
-    for (i = 0; i < modules.length; i++) {
-      var item = modules[i];
+
+    for (let i = 0; i < modules.length; i++) {
+      const item = modules[i];
+
       // skip already imported module
       // this implementation is not 100% perfect for weird media query combinations
       // when a module is imported multiple times with different media queries.
@@ -892,27 +947,31 @@ module.exports = function(useSourceMap) {
         if (mediaQuery && !item[2]) {
           item[2] = mediaQuery;
         } else if (mediaQuery) {
-          item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';
+          item[2] = \`(\${item[2]}) and (\${mediaQuery})\`;
         }
+
         list.push(item);
       }
     }
   };
+
   return list;
 };
 
 function cssWithMappingToString(item, useSourceMap) {
-  var content = item[1] || '';
-  var cssMapping = item[3];
+  const content = item[1] || '';
+  // eslint-disable-next-line prefer-destructuring
+  const cssMapping = item[3];
+
   if (!cssMapping) {
     return content;
   }
 
   if (useSourceMap && typeof btoa === 'function') {
-    var sourceMapping = toComment(cssMapping);
-    var sourceURLs = cssMapping.sources.map(function(source) {
-      return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';
-    });
+    const sourceMapping = toComment(cssMapping);
+    const sourceURLs = cssMapping.sources.map(
+      (source) => \`/*# sourceURL=\${cssMapping.sourceRoot}\${source} */\`
+    );
 
     return [content]
       .concat(sourceURLs)
@@ -926,11 +985,10 @@ function cssWithMappingToString(item, useSourceMap) {
 // Adapted from convert-source-map (MIT)
 function toComment(sourceMap) {
   // eslint-disable-next-line no-undef
-  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
-  var data =
-    'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
+  const base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
+  const data = \`sourceMappingURL=data:application/json;charset=utf-8;base64,\${base64}\`;
 
-  return '/*# ' + data + ' */';
+  return \`/*# \${data} */\`;
 }
 "
 `;
@@ -938,20 +996,21 @@ function toComment(sourceMap) {
 exports[`loader should compile with \`js\` entry point: errors 1`] = `Array []`;
 
 exports[`loader should compile with \`js\` entry point: escape 1`] = `
-"module.exports = function escape(url, needQuotes) {
+"module.exports = (url, needQuotes) => {
   if (typeof url !== 'string') {
     return url;
   }
 
   // If url is already wrapped in quotes, remove them
   if (/^['\\"].*['\\"]$/.test(url)) {
+    // eslint-disable-next-line no-param-reassign
     url = url.slice(1, -1);
   }
 
   // Should url be wrapped?
   // See https://drafts.csswg.org/css-values-3/#urls
   if (/[\\"'() \\\\t\\\\n]/.test(url) || needQuotes) {
-    return '\\"' + url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n') + '\\"';
+    return \`\\"\${url.replace(/\\"/g, '\\\\\\\\\\"').replace(/\\\\n/g, '\\\\\\\\n')}\\"\`;
   }
 
   return url;
@@ -962,8 +1021,11 @@ exports[`loader should compile with \`js\` entry point: escape 1`] = `
 exports[`loader should compile with \`js\` entry point: module (evaluated) 1`] = `
 Array [
   Array [
-    null,
-    "nothing",
+    2,
+    ".foo {
+  color: red;
+}
+",
     "",
   ],
   Array [
@@ -974,11 +1036,11 @@ Array [
 
 .class {
   color: red;
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 .class-duplicate-url {
-  background: url(nothing);
+  background: url(/webpack/public/path/img.png);
 }
 
 :root {
@@ -1113,12 +1175,10 @@ exports[`loader should compile with \`js\` entry point: module 1`] = `
 "exports = module.exports = require(\\"../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./url/img.png\\"));
-
+var getUrl = require(\\"../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./url/img.png\\"));
 // Module
 exports.push([module.id, \\"@charset \\\\\\"UTF-8\\\\\\";\\\\n\\\\n/* Comment */\\\\n\\\\n.class {\\\\n  color: red;\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class-duplicate-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n:root {\\\\n  --foo: 1px;\\\\n  --bar: 2px;\\\\n}\\\\n\\\\n.class { a: b c d; }\\\\n\\\\n.two {}\\\\n\\\\n.u-m\\\\\\\\+ { a: b c d; }\\\\n\\\\n.class { content: \\\\\\"\\\\\\\\F10C\\\\\\" }\\\\n\\\\n@media only screen and (max-width: 600px) {\\\\n  body {\\\\n    background-color: lightblue;\\\\n  }\\\\n}\\\\n\\\\n.class {\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193\\\\\\\\2193\\\\\\\\2193\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2193 \\\\\\\\2193 \\\\\\\\2193\\\\\\";\\\\n}\\\\n\\\\n.-top {}\\\\n.\\\\\\\\-top {}\\\\n\\\\n#\\\\\\\\#test {}\\\\n\\\\n.grid {\\\\n  display: flex;\\\\n  flex-wrap: wrap;\\\\n}\\\\n.grid.\\\\\\\\-top {\\\\n  align-items: flex-start;\\\\n}\\\\n.grid.-top {\\\\n  align-items: flex-start;\\\\n}\\\\n.grid.\\\\\\\\-middle {\\\\n  align-items: center;\\\\n}\\\\n.grid.\\\\\\\\-bottom {\\\\n  align-items: flex-end;\\\\n}\\\\n\\\\n.u-m\\\\\\\\00002b {}\\\\n\\\\n.u-m00002b {}\\\\n\\\\n#u-m\\\\\\\\+ {}\\\\n\\\\nbody {\\\\n  font-family: '微软雅黑'; /* some chinese font name */\\\\n}\\\\n\\\\n.myStyle {\\\\n  content: '\\\\\\\\e901';\\\\n}\\\\n\\\\n.myStyle {\\\\n  content: '\\\\\\\\E901';\\\\n}\\\\n\\\\n.♫ {}\\\\n\\\\n.\\\\\\\\3A \\\\\\\\\`\\\\\\\\( {} /* matches elements with class=\\\\\\":\`(\\\\\\" */\\\\n.\\\\\\\\31 a2b3c {} /* matches elements with class=\\\\\\"1a2b3c\\\\\\" */\\\\n#\\\\\\\\#fake-id {} /* matches the element with id=\\\\\\"#fake-id\\\\\\" */\\\\n#-a-b-c- {} /* matches the element with id=\\\\\\"-a-b-c-\\\\\\" */\\\\n#© {} /* matches the element with id=\\\\\\"©\\\\\\" */\\\\n\\\\n:root {\\\\n  --title-align: center;\\\\n  --sr-only: {\\\\n    position: absolute;\\\\n    width: 1px;\\\\n    height: 1px;\\\\n    padding: 0;\\\\n    overflow: hidden;\\\\n    clip: rect(0,0,0,0);\\\\n    white-space: nowrap;\\\\n    clip-path: inset(50%);\\\\n    border: 0;\\\\n  };\\\\n}\\\\n\\\\n.test {\\\\n  content: \\\\\\"\\\\\\\\2014\\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\2014 \\\\\\\\A0\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0 \\\\\\\\2014\\\\\\";\\\\n  content: \\\\\\"\\\\\\\\A0\\\\\\\\2014\\\\\\";\\\\n  margin-top: 1px\\\\\\\\9;\\\\n  background-color: #000\\\\\\\\9;\\\\n}\\\\n\\\\n.light.on .bulb:before{\\\\n  content: '💡';\\\\n}\\\\n\\\\n.base64 {\\\\n  background: url(data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhxJREFUSA3tk71rU1EYxnMTEoJUkowWwdJ2akEHBfGjCiIF6ZylVUKSm2TqZLGI+A/oIu2UXm8C4lAyF4SWji0tdFLo1Eo7VN0SaBEhH7e/Nz0nPTfGOjiaCyfPc5734zlfCQT6X/8E/vUErL81KBaL9y3LSnued5PcITjUOwR3gsFg2bbtjYt6/NGgXC4P1et1l2aPLmpAbD0SidjpdPqgV15PA9d17zQajU8UxHQRK/4G35Q5pveAK8LlI1ZjPMnlcltnyvnvbwaO41xvtVqy7YHztMACq5xnlb9EY3dRdvcGo1kj5wR+t1AofDG0gM+A875E8DNjRCexsrV8Pj9ZqVQitVrtqejxePxjMpmss5hVTB4buXvMb2DyU2tBTRS+BjvNlVYUpPl7iuVO3Gq1uoQx1FtSOW1gPgp5ZWrdBtNmUDgv5asgxQ8F1af5vhY0YjyjuWC3wTszKJz7GBOkcFlQfW2ONq4FjWi+Hj6DRCKxQOK2TlY4x92EuYd5dvMAbYIzfikau3pu5tJ8KxaLLfo0cyKci7tK4TZjUMcoXAmHwzle0Q/RaC5P1GFMyVx9R9Fo9HYqlTrSgqDvFelAqVQa5hmuMR/WGtjAaBdjwBoDQ0ZsnwVMZjKZ9n0Zem8DSeDPdrnZbL6F2l3NOvUYNZk4oVDoRTabPe4EDNJzB0ZcjAYxeoZ2i3FNxQ7BHYw/cB/fldaH//UETgHHO8S44KbfXgAAAABJRU5ErkJggg==);\\\\n}\\\\n\\\\na[href=''] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href='' i] {\\\\n  color: red;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\"] {\\\\n  color: blue;\\\\n}\\\\n\\\\na[href=\\\\\\"\\\\\\" i] {\\\\n  color: blue;\\\\n}\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -1140,7 +1200,6 @@ exports[`loader should compile with empty css entry point: module 1`] = `
 "exports = module.exports = require(\\"../../src/runtime/api.js\\")(false);
 // Module
 exports.push([module.id, \\"\\", \\"\\"]);
-
 "
 `;
 
@@ -1162,7 +1221,6 @@ exports[`loader should compile with empty options: module 1`] = `
 "exports = module.exports = require(\\"../../src/runtime/api.js\\")(false);
 // Module
 exports.push([module.id, \\"\\", \\"\\"]);
-
 "
 `;
 
@@ -1268,13 +1326,11 @@ a:hover {
 exports[`loader using together with "postcss-loader" and reuse \`ast\`: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./img2x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./img2x.png\\"));
 // Module
 exports.push([module.id, \\":root {\\\\n  --fontSize: 1rem;\\\\n  --mainColor: rgba(18,52,86,0.47059);\\\\n  --secondaryColor: rgba(102, 51, 153, 0.9);\\\\n}\\\\n\\\\nhtml {\\\\n  overflow-x: hidden;\\\\n  overflow-y: auto;\\\\n  overflow: hidden auto;\\\\n}\\\\n\\\\n@media (max-width: 50rem) {\\\\n  body {\\\\n    color: rgba(18,52,86,0.47059);\\\\n    color: var(--mainColor);\\\\n    font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif;\\\\n    font-size: 1rem;\\\\n    font-size: var(--fontSize);\\\\n    line-height: calc(1rem * 1.5);\\\\n    line-height: calc(var(--fontSize) * 1.5);\\\\n    word-wrap: break-word;\\\\n    padding-left: calc(1rem / 2 + 1px);\\\\n    padding-right: calc(1rem / 2 + 1px);\\\\n    padding-left: calc(var(--fontSize) / 2 + 1px);\\\\n    padding-right: calc(var(--fontSize) / 2 + 1px);\\\\n  }\\\\n}\\\\n\\\\nh1,h2,h3,h4,h5,h6 {\\\\n  margin-top: 0;\\\\n  margin-bottom: 0;\\\\n}\\\\n\\\\nmain.hero, .hero.main {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\\\\n\\\\nmain.hero, .hero.main {\\\\n  background-image:  url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n}\\\\n\\\\nmain.hero, .hero.main {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___0___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___1___ + \\") 2x);\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___0___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___1___ + \\") 2x);\\\\n}\\\\n\\\\na {\\\\n  color: rgba(0, 0, 255, 0.9)\\\\n}\\\\n\\\\na:hover {\\\\n    color: #639;\\\\n  }\\\\n\\", \\"\\"]);
-
 "
 `;
 
@@ -1299,7 +1355,6 @@ exports[`loader using together with "sass-loader": module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Module
 exports.push([module.id, \\"body {\\\\n  font: 100% Helvetica, sans-serif;\\\\n  color: #333;\\\\n}\\", \\"\\"]);
-
 "
 `;
 
diff --git a/test/__snapshots__/localIdentName-option.test.js.snap b/test/__snapshots__/localIdentName-option.test.js.snap
deleted file mode 100644
index 23e0126c..00000000
--- a/test/__snapshots__/localIdentName-option.test.js.snap
+++ /dev/null
@@ -1,302 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`localIdentName option basic: errors 1`] = `Array []`;
-
-exports[`localIdentName option basic: locals 1`] = `undefined`;
-
-exports[`localIdentName option basic: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option basic: warnings 1`] = `Array []`;
-
-exports[`localIdentName option should have hash: errors 1`] = `Array []`;
-
-exports[`localIdentName option should have hash: locals 1`] = `undefined`;
-
-exports[`localIdentName option should have hash: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option should have hash: warnings 1`] = `Array []`;
-
-exports[`localIdentName option should have path naming with context: errors 1`] = `Array []`;
-
-exports[`localIdentName option should have path naming with context: locals 1`] = `undefined`;
-
-exports[`localIdentName option should have path naming with context: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option should have path naming with context: warnings 1`] = `Array []`;
-
-exports[`localIdentName option should prefixes leading hyphen + digit with underscore: errors 1`] = `Array []`;
-
-exports[`localIdentName option should prefixes leading hyphen + digit with underscore: locals 1`] = `undefined`;
-
-exports[`localIdentName option should prefixes leading hyphen + digit with underscore: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option should prefixes leading hyphen + digit with underscore: warnings 1`] = `Array []`;
-
-exports[`localIdentName option should prefixes two leading hyphens with underscore: errors 1`] = `Array []`;
-
-exports[`localIdentName option should prefixes two leading hyphens with underscore: locals 1`] = `undefined`;
-
-exports[`localIdentName option should prefixes two leading hyphens with underscore: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option should prefixes two leading hyphens with underscore: warnings 1`] = `Array []`;
-
-exports[`localIdentName option should saves underscore prefix in exported class names: errors 1`] = `Array []`;
-
-exports[`localIdentName option should saves underscore prefix in exported class names: locals 1`] = `undefined`;
-
-exports[`localIdentName option should saves underscore prefix in exported class names: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option should saves underscore prefix in exported class names: warnings 1`] = `Array []`;
-
-exports[`localIdentName option should use hash prefix: errors 1`] = `Array []`;
-
-exports[`localIdentName option should use hash prefix: locals 1`] = `undefined`;
-
-exports[`localIdentName option should use hash prefix: module (evaluated) 1`] = `
-Array [
-  Array [
-    1,
-    ":local(.test) {
-  background: red;
-}
-
-:local(._test) {
-  background: blue;
-}
-
-:local(.className) {
-  background: red;
-}
-
-:local(#someId) {
-  background: green;
-}
-
-:local(.className .subClass) {
-  color: green;
-}
-
-:local(#someId .subClass) {
-  color: blue;
-}
-
-:local(.-a0-34a___f) {
-  color: red;
-}
-",
-    "",
-  ],
-]
-`;
-
-exports[`localIdentName option should use hash prefix: warnings 1`] = `Array []`;
diff --git a/test/__snapshots__/localsConvention-option.test.js.snap b/test/__snapshots__/localsConvention-option.test.js.snap
new file mode 100644
index 00000000..4925e0ac
--- /dev/null
+++ b/test/__snapshots__/localsConvention-option.test.js.snap
@@ -0,0 +1,241 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`localsConvention option asIs: errors 1`] = `Array []`;
+
+exports[`localsConvention option asIs: locals 1`] = `
+Object {
+  "btn--info_is-disabled_1": "aF9yrid0BHOaiL3bSWCyJ",
+  "btn-info_is-disabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "foo": "bar",
+  "my-btn-info_is-disabled": "value",
+  "simple": "_2UqJ0qi8H2Q5R46tr_dUvz",
+}
+`;
+
+exports[`localsConvention option asIs: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2HovG-ymIjf-Q-jdQr_LQ- {
+  color: blue;
+}
+
+.aF9yrid0BHOaiL3bSWCyJ {
+  color: blue;
+}
+
+._2UqJ0qi8H2Q5R46tr_dUvz {
+  color: red;
+}
+
+a {
+  color: yellow;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`localsConvention option asIs: warnings 1`] = `Array []`;
+
+exports[`localsConvention option camelCase: errors 1`] = `Array []`;
+
+exports[`localsConvention option camelCase: locals 1`] = `
+Object {
+  "btn--info_is-disabled_1": "aF9yrid0BHOaiL3bSWCyJ",
+  "btn-info_is-disabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "btnInfoIsDisabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "btnInfoIsDisabled1": "aF9yrid0BHOaiL3bSWCyJ",
+  "foo": "bar",
+  "my-btn-info_is-disabled": "value",
+  "myBtnInfoIsDisabled": "value",
+  "simple": "_2UqJ0qi8H2Q5R46tr_dUvz",
+}
+`;
+
+exports[`localsConvention option camelCase: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2HovG-ymIjf-Q-jdQr_LQ- {
+  color: blue;
+}
+
+.aF9yrid0BHOaiL3bSWCyJ {
+  color: blue;
+}
+
+._2UqJ0qi8H2Q5R46tr_dUvz {
+  color: red;
+}
+
+a {
+  color: yellow;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`localsConvention option camelCase: warnings 1`] = `Array []`;
+
+exports[`localsConvention option camelCaseOnly: errors 1`] = `Array []`;
+
+exports[`localsConvention option camelCaseOnly: locals 1`] = `
+Object {
+  "btnInfoIsDisabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "btnInfoIsDisabled1": "aF9yrid0BHOaiL3bSWCyJ",
+  "foo": "bar",
+  "myBtnInfoIsDisabled": "value",
+  "simple": "_2UqJ0qi8H2Q5R46tr_dUvz",
+}
+`;
+
+exports[`localsConvention option camelCaseOnly: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2HovG-ymIjf-Q-jdQr_LQ- {
+  color: blue;
+}
+
+.aF9yrid0BHOaiL3bSWCyJ {
+  color: blue;
+}
+
+._2UqJ0qi8H2Q5R46tr_dUvz {
+  color: red;
+}
+
+a {
+  color: yellow;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`localsConvention option camelCaseOnly: warnings 1`] = `Array []`;
+
+exports[`localsConvention option dashes: errors 1`] = `Array []`;
+
+exports[`localsConvention option dashes: locals 1`] = `
+Object {
+  "btn--info_is-disabled_1": "aF9yrid0BHOaiL3bSWCyJ",
+  "btn-info_is-disabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "btnInfo_isDisabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "btnInfo_isDisabled_1": "aF9yrid0BHOaiL3bSWCyJ",
+  "foo": "bar",
+  "my-btn-info_is-disabled": "value",
+  "myBtnInfo_isDisabled": "value",
+  "simple": "_2UqJ0qi8H2Q5R46tr_dUvz",
+}
+`;
+
+exports[`localsConvention option dashes: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2HovG-ymIjf-Q-jdQr_LQ- {
+  color: blue;
+}
+
+.aF9yrid0BHOaiL3bSWCyJ {
+  color: blue;
+}
+
+._2UqJ0qi8H2Q5R46tr_dUvz {
+  color: red;
+}
+
+a {
+  color: yellow;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`localsConvention option dashes: warnings 1`] = `Array []`;
+
+exports[`localsConvention option dashesOnly: errors 1`] = `Array []`;
+
+exports[`localsConvention option dashesOnly: locals 1`] = `
+Object {
+  "btnInfo_isDisabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "btnInfo_isDisabled_1": "aF9yrid0BHOaiL3bSWCyJ",
+  "foo": "bar",
+  "myBtnInfo_isDisabled": "value",
+  "simple": "_2UqJ0qi8H2Q5R46tr_dUvz",
+}
+`;
+
+exports[`localsConvention option dashesOnly: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2HovG-ymIjf-Q-jdQr_LQ- {
+  color: blue;
+}
+
+.aF9yrid0BHOaiL3bSWCyJ {
+  color: blue;
+}
+
+._2UqJ0qi8H2Q5R46tr_dUvz {
+  color: red;
+}
+
+a {
+  color: yellow;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`localsConvention option dashesOnly: warnings 1`] = `Array []`;
+
+exports[`localsConvention option not specified: errors 1`] = `Array []`;
+
+exports[`localsConvention option not specified: locals 1`] = `
+Object {
+  "btn--info_is-disabled_1": "aF9yrid0BHOaiL3bSWCyJ",
+  "btn-info_is-disabled": "_2HovG-ymIjf-Q-jdQr_LQ-",
+  "foo": "bar",
+  "my-btn-info_is-disabled": "value",
+  "simple": "_2UqJ0qi8H2Q5R46tr_dUvz",
+}
+`;
+
+exports[`localsConvention option not specified: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2HovG-ymIjf-Q-jdQr_LQ- {
+  color: blue;
+}
+
+.aF9yrid0BHOaiL3bSWCyJ {
+  color: blue;
+}
+
+._2UqJ0qi8H2Q5R46tr_dUvz {
+  color: red;
+}
+
+a {
+  color: yellow;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`localsConvention option not specified: warnings 1`] = `Array []`;
diff --git a/test/__snapshots__/modules-option.test.js.snap b/test/__snapshots__/modules-option.test.js.snap
index 45d35998..6fdf6f44 100644
--- a/test/__snapshots__/modules-option.test.js.snap
+++ b/test/__snapshots__/modules-option.test.js.snap
@@ -1,10 +1,10 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`animation\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`animation\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -18,13 +18,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`animation\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`animation\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -38,23 +38,43 @@ Array [
 ]
 `;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`animation\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "fade-in": "_fade-in",
-  "slide-right": "_slide-right",
+  "fade-in": "_3XZSV759G141XcbTZgtQkF",
+  "slide-right": "_2jinakhsfBWcUNZSsOxUHz",
 }
 `;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`animation\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
     "a {
-  animation: _slide-right 300ms forwards ease-out, _fade-in 300ms forwards ease-out;
+  animation: _2jinakhsfBWcUNZSsOxUHz 300ms forwards ease-out, _3XZSV759G141XcbTZgtQkF 300ms forwards ease-out;
+
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`animation\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
+
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "a {
+  animation: slide-right 300ms forwards ease-out, fade-in 300ms forwards ease-out;
 
 }
 ",
@@ -63,18 +83,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "fade-in": "_fade-in",
   "slide-right": "_slide-right",
 }
 `;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -88,59 +108,86 @@ Array [
 ]
 `;
 
-exports[`modules case \`animation\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`animation\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`true)\`: locals 1`] = `
+Object {
+  "fade-in": "_3XZSV759G141XcbTZgtQkF",
+  "slide-right": "_2jinakhsfBWcUNZSsOxUHz",
+}
+`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`animation\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "a {
+  animation: _2jinakhsfBWcUNZSsOxUHz 300ms forwards ease-out, _3XZSV759G141XcbTZgtQkF 300ms forwards ease-out;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`animation\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`class-names\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "fade-in": "_fade-in",
-  "slide-right": "_slide-right",
+exports[`modules case \`class-names\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".class-1, .class-10 .bar-1 {
+	color: green;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`class-names\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "fade-in": "_fade-in",
-  "slide-right": "_slide-right",
+exports[`modules case \`class-names\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".class-1, .class-10 .bar-1 {
+	color: green;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`class-names\` (\`modules\` value is \`local)\`: locals 1`] = `
+Object {
+  "bar-1": "_3GpM4NK17tELexNK1Szvws",
+  "class-1": "_1GNZOTxutjEX7cZ3Ec7knU",
+  "class-10": "_15N9BXxWirSgwhYficwysK",
+}
+`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`class-names\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    ".class-1, .class-10 .bar-1 {
+    "._1GNZOTxutjEX7cZ3Ec7knU, ._15N9BXxWirSgwhYficwysK ._3GpM4NK17tELexNK1Szvws {
 	color: green;
 }
 ",
@@ -149,13 +196,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -168,11 +215,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "bar-1": "_bar-1",
   "class-1": "_class-1",
@@ -180,7 +227,7 @@ Object {
 }
 `;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -193,23 +240,23 @@ Array [
 ]
 `;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`class-names\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "bar-1": "_bar-1",
-  "class-1": "_class-1",
-  "class-10": "_class-10",
+  "bar-1": "_3GpM4NK17tELexNK1Szvws",
+  "class-1": "_1GNZOTxutjEX7cZ3Ec7knU",
+  "class-10": "_15N9BXxWirSgwhYficwysK",
 }
 `;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`class-names\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._class-1, ._class-10 ._bar-1 {
+    "._1GNZOTxutjEX7cZ3Ec7knU, ._15N9BXxWirSgwhYficwysK ._3GpM4NK17tELexNK1Szvws {
 	color: green;
 }
 ",
@@ -218,79 +265,79 @@ Array [
 ]
 `;
 
-exports[`modules case \`class-names\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`class-names\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ":local(.c1/*.c2*/.c3) { background: red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "bar-1": "_bar-1",
-  "class-1": "_class-1",
-  "class-10": "_class-10",
+  "c1": "_1xn1UbV-5a_s7ig53fR7Lz",
+  "c3": "_36mr1nZ1pdjd1s5j3RV-z7",
 }
 `;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1xn1UbV-5a_s7ig53fR7Lz/*.c2*/._36mr1nZ1pdjd1s5j3RV-z7 { background: red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "bar-1": "_bar-1",
-  "class-1": "_class-1",
-  "class-10": "_class-10",
+  "c1": "_1xn1UbV-5a_s7ig53fR7Lz",
+  "c3": "_36mr1nZ1pdjd1s5j3RV-z7",
 }
 `;
 
-exports[`modules case \`class-names\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    ":local(.c1/*.c2*/.c3) { background: red; }
+    "._1xn1UbV-5a_s7ig53fR7Lz/*.c2*/._36mr1nZ1pdjd1s5j3RV-z7 { background: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c3": "_c3",
 }
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -301,18 +348,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c3": "_c3",
 }
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -323,82 +370,93 @@ Array [
 ]
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c3": "_c3",
+  "c1": "_1xn1UbV-5a_s7ig53fR7Lz",
+  "c3": "_36mr1nZ1pdjd1s5j3RV-z7",
 }
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._c1/*.c2*/._c3 { background: red; }
+    "._1xn1UbV-5a_s7ig53fR7Lz/*.c2*/._36mr1nZ1pdjd1s5j3RV-z7 { background: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`comment-in-local\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`comments\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`comments\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "/*
+ * a ' above
+ */
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1",
-  "c3": "_c3",
+.bg {
+  background-image: url(/webpack/public/path/img.png);
 }
+
+/*
+ * a ' below
+ */
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`comments\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1",
-  "c3": "_c3",
+exports[`modules case \`comments\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "/*
+ * a ' above
+ */
+
+.bg {
+  background-image: url(/webpack/public/path/img.png);
 }
-`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+/*
+ * a ' below
+ */
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`comments\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c3": "_c3",
+  "bg": "_28-VAWbJ8gQCgX50Jcqtzs",
 }
 `;
 
-exports[`modules case \`comment-in-local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -406,7 +464,7 @@ Array [
  * a ' above
  */
 
-.bg {
+._28-VAWbJ8gQCgX50Jcqtzs {
   background-image: url(/webpack/public/path/img.png);
 }
 
@@ -419,13 +477,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -446,17 +504,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "bg": "_bg",
 }
 `;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -477,17 +535,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`comments\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "bg": "_bg",
+  "bg": "_28-VAWbJ8gQCgX50Jcqtzs",
 }
 `;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`comments\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -495,7 +553,7 @@ Array [
  * a ' above
  */
 
-._bg {
+._28-VAWbJ8gQCgX50Jcqtzs {
   background-image: url(/webpack/public/path/img.png);
 }
 
@@ -508,76 +566,82 @@ Array [
 ]
 `;
 
-exports[`modules case \`comments\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`comments\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ":local(.c1) { a: 1; }
+:local(.c2) { composes: c1; b: 1; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "bg": "_bg",
+  "c1": "_2lVGKlfYXzywV6_acW1a3J",
+  "c2": "_2FPXZHdIWogtLWkFQcjYj7 _2lVGKlfYXzywV6_acW1a3J",
 }
 `;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2lVGKlfYXzywV6_acW1a3J { a: 1; }
+._2FPXZHdIWogtLWkFQcjYj7 { b: 1; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "bg": "_bg",
+  "c1": "_2lVGKlfYXzywV6_acW1a3J",
+  "c2": "_2FPXZHdIWogtLWkFQcjYj7 _2lVGKlfYXzywV6_acW1a3J",
 }
 `;
 
-exports[`modules case \`comments\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    ":local(.c1) { a: 1; }
-:local(.c2) { composes: c1; b: 1; }
+    "._2lVGKlfYXzywV6_acW1a3J { a: 1; }
+._2FPXZHdIWogtLWkFQcjYj7 { b: 1; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c2": "_c2 _c1",
 }
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -589,18 +653,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c2": "_c2 _c1",
 }
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -612,100 +676,135 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c2": "_c2 _c1",
+  "c1": "_2lVGKlfYXzywV6_acW1a3J",
+  "c2": "_2FPXZHdIWogtLWkFQcjYj7 _2lVGKlfYXzywV6_acW1a3J",
 }
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._c1 { a: 1; }
-._c2 { b: 1; }
+    "._2lVGKlfYXzywV6_acW1a3J { a: 1; }
+._2FPXZHdIWogtLWkFQcjYj7 { b: 1; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`composes\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ":local(.c1) { composes: c2 from \\"./file.css\\"; b: 1; }
+:local(.c3) { composes: c1; b: 3; }
+:local(.c5) { composes: c2 c4 from \\"./file.css\\"; b: 5; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c2": "_c2 _c1",
+  "c1": "_1DZQbqp1oX8etdFa5oSOnV _1xYJRliqpSHYzUvktbdaCo",
+  "c3": "_1PKuwglb3xQB3gwJBZx6_G _1DZQbqp1oX8etdFa5oSOnV _1xYJRliqpSHYzUvktbdaCo",
+  "c5": "_1MtdK0_soIbU20fcYBbRAe _1xYJRliqpSHYzUvktbdaCo _1jdJRc6HaM3lHykxBSOeII",
 }
 `;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._1xYJRliqpSHYzUvktbdaCo {
+  color: red;
+}
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+._1jdJRc6HaM3lHykxBSOeII {
+  color: blue;
+}
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1",
-  "c2": "_c2 _c1",
+.test{
+  c: d
 }
+",
+    "",
+  ],
+  Array [
+    1,
+    "._1DZQbqp1oX8etdFa5oSOnV { b: 1; }
+._1PKuwglb3xQB3gwJBZx6_G { b: 3; }
+._1MtdK0_soIbU20fcYBbRAe { b: 5; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c2": "_c2 _c1",
+  "c1": "_1DZQbqp1oX8etdFa5oSOnV _1xYJRliqpSHYzUvktbdaCo",
+  "c3": "_1PKuwglb3xQB3gwJBZx6_G _1DZQbqp1oX8etdFa5oSOnV _1xYJRliqpSHYzUvktbdaCo",
+  "c5": "_1MtdK0_soIbU20fcYBbRAe _1xYJRliqpSHYzUvktbdaCo _1jdJRc6HaM3lHykxBSOeII",
 }
 `;
 
-exports[`modules case \`composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._1xYJRliqpSHYzUvktbdaCo {
+  color: red;
+}
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+._1jdJRc6HaM3lHykxBSOeII {
+  color: blue;
+}
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
-Array [
+._3YdnDqqBfyyJ_9JKWIle3X{
+  c: d
+}
+",
+    "",
+  ],
   Array [
     1,
-    ":local(.c1) { composes: c2 from \\"./file.css\\"; b: 1; }
-:local(.c3) { composes: c1; b: 3; }
-:local(.c5) { composes: c2 c4 from \\"./file.css\\"; b: 5; }
+    "._1DZQbqp1oX8etdFa5oSOnV { b: 1; }
+._1PKuwglb3xQB3gwJBZx6_G { b: 3; }
+._1MtdK0_soIbU20fcYBbRAe { b: 5; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "c1": "_c1 _c2",
   "c3": "_c3 _c1 _c2",
@@ -713,7 +812,7 @@ Object {
 }
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -742,11 +841,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "c1": "_c1 _c2",
   "c3": "_c3 _c1 _c2",
@@ -754,7 +853,7 @@ Object {
 }
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -783,31 +882,31 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "c1": "_c1 _c2",
-  "c3": "_c3 _c1 _c2",
-  "c5": "_c5 _c2 _c4",
+  "c1": "_1DZQbqp1oX8etdFa5oSOnV _1xYJRliqpSHYzUvktbdaCo",
+  "c3": "_1PKuwglb3xQB3gwJBZx6_G _1DZQbqp1oX8etdFa5oSOnV _1xYJRliqpSHYzUvktbdaCo",
+  "c5": "_1MtdK0_soIbU20fcYBbRAe _1xYJRliqpSHYzUvktbdaCo _1jdJRc6HaM3lHykxBSOeII",
 }
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-1\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
-    "._c2 {
+    "._1xYJRliqpSHYzUvktbdaCo {
   color: red;
 }
 
-._c4 {
+._1jdJRc6HaM3lHykxBSOeII {
   color: blue;
 }
 
-._test{
+._3YdnDqqBfyyJ_9JKWIle3X{
   c: d
 }
 ",
@@ -815,109 +914,100 @@ Array [
   ],
   Array [
     1,
-    "._c1 { b: 1; }
-._c3 { b: 3; }
-._c5 { b: 5; }
+    "._1DZQbqp1oX8etdFa5oSOnV { b: 1; }
+._1PKuwglb3xQB3gwJBZx6_G { b: 3; }
+._1MtdK0_soIbU20fcYBbRAe { b: 5; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`composes-1\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-1\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1 _c2",
-  "c3": "_c3 _c1 _c2",
-  "c5": "_c5 _c2 _c4",
-}
+exports[`modules case \`composes-2\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ":local(.c1) { composes: c-2 from \\"./file.css\\"; b: 1; }
+:local(.c3) { composes: c1; b: 3; }
+:local(.c5) { composes: c-2 c4 from \\"./file.css\\"; b: 5; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "c1": "_c1 _c2",
-  "c3": "_c3 _c1 _c2",
-  "c5": "_c5 _c2 _c4",
+  "c1": "_2tj5Xzv7Ei8HGFvkrlGXyv _3CxjkH18CkEkRZ4FO4v-NQ",
+  "c3": "_1TPNBQGz_snQ6aGvXARYo0 _2tj5Xzv7Ei8HGFvkrlGXyv _3CxjkH18CkEkRZ4FO4v-NQ",
+  "c5": "rkDOmH5RkgZGaQ5Fey09Z _3CxjkH18CkEkRZ4FO4v-NQ G8VU3XI3HtOvZPlSEb9S3",
 }
 `;
 
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1 _c2",
-  "c3": "_c3 _c1 _c2",
-  "c5": "_c5 _c2 _c4",
+exports[`modules case \`composes-2\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._3CxjkH18CkEkRZ4FO4v-NQ {
+  color: red;
 }
-`;
-
-exports[`modules case \`composes-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+.G8VU3XI3HtOvZPlSEb9S3 {
+  color: blue;
+}
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
-Array [
+.test{
+  c: d
+}
+",
+    "",
+  ],
   Array [
     1,
-    ":local(.c1) { composes: c-2 from \\"./file.css\\"; b: 1; }
-:local(.c3) { composes: c1; b: 3; }
-:local(.c5) { composes: c-2 c4 from \\"./file.css\\"; b: 5; }
+    "._2tj5Xzv7Ei8HGFvkrlGXyv { b: 1; }
+._1TPNBQGz_snQ6aGvXARYo0 { b: 3; }
+.rkDOmH5RkgZGaQ5Fey09Z { b: 5; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "c1": "_c1 _c-2",
-  "c3": "_c3 _c1 _c-2",
-  "c5": "_c5 _c-2 _c4",
+  "c1": "_2tj5Xzv7Ei8HGFvkrlGXyv _3CxjkH18CkEkRZ4FO4v-NQ",
+  "c3": "_1TPNBQGz_snQ6aGvXARYo0 _2tj5Xzv7Ei8HGFvkrlGXyv _3CxjkH18CkEkRZ4FO4v-NQ",
+  "c5": "rkDOmH5RkgZGaQ5Fey09Z _3CxjkH18CkEkRZ4FO4v-NQ G8VU3XI3HtOvZPlSEb9S3",
 }
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
-    "._c-2 {
+    "._3CxjkH18CkEkRZ4FO4v-NQ {
   color: red;
 }
 
-._c4 {
+.G8VU3XI3HtOvZPlSEb9S3 {
   color: blue;
 }
 
-.test{
+._10rrqoQ7Mb3ZcY6LixlnpR{
   c: d
 }
 ",
@@ -925,20 +1015,20 @@ Array [
   ],
   Array [
     1,
-    "._c1 { b: 1; }
-._c3 { b: 3; }
-._c5 { b: 5; }
+    "._2tj5Xzv7Ei8HGFvkrlGXyv { b: 1; }
+._1TPNBQGz_snQ6aGvXARYo0 { b: 3; }
+.rkDOmH5RkgZGaQ5Fey09Z { b: 5; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "c1": "_c1 _c-2",
   "c3": "_c3 _c1 _c-2",
@@ -946,7 +1036,7 @@ Object {
 }
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -958,7 +1048,7 @@ Array [
   color: blue;
 }
 
-._test{
+.test{
   c: d
 }
 ",
@@ -975,11 +1065,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "c1": "_c1 _c-2",
   "c3": "_c3 _c1 _c-2",
@@ -987,7 +1077,7 @@ Object {
 }
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -1016,63 +1106,54 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-2\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-2\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "c1": "_c1 _c-2",
-  "c3": "_c3 _c1 _c-2",
-  "c5": "_c5 _c-2 _c4",
+  "c1": "_2tj5Xzv7Ei8HGFvkrlGXyv _3CxjkH18CkEkRZ4FO4v-NQ",
+  "c3": "_1TPNBQGz_snQ6aGvXARYo0 _2tj5Xzv7Ei8HGFvkrlGXyv _3CxjkH18CkEkRZ4FO4v-NQ",
+  "c5": "rkDOmH5RkgZGaQ5Fey09Z _3CxjkH18CkEkRZ4FO4v-NQ G8VU3XI3HtOvZPlSEb9S3",
 }
 `;
 
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1 _c-2",
-  "c3": "_c3 _c1 _c-2",
-  "c5": "_c5 _c-2 _c4",
+exports[`modules case \`composes-2\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._3CxjkH18CkEkRZ4FO4v-NQ {
+  color: red;
 }
-`;
 
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+.G8VU3XI3HtOvZPlSEb9S3 {
+  color: blue;
+}
 
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1 _c-2",
-  "c3": "_c3 _c1 _c-2",
-  "c5": "_c5 _c-2 _c4",
+._10rrqoQ7Mb3ZcY6LixlnpR{
+  c: d
 }
+",
+    "",
+  ],
+  Array [
+    1,
+    "._2tj5Xzv7Ei8HGFvkrlGXyv { b: 1; }
+._1TPNBQGz_snQ6aGvXARYo0 { b: 3; }
+.rkDOmH5RkgZGaQ5Fey09Z { b: 5; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`composes-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-2\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1086,21 +1167,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "abc": "_abc _def1 _def2",
+  "abc": "_1bAv4bLL8-hE3a7MyZXrT- _3hEvHUTrMHercKPgTBsK6W _1UYEX_kWsPgokwmdBHI8pU",
 }
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
-    "._def1 {
+    "._3hEvHUTrMHercKPgTBsK6W {
   color: red;
 }
 ",
@@ -1108,7 +1189,7 @@ Array [
   ],
   Array [
     3,
-    "._def2 {
+    "._1UYEX_kWsPgokwmdBHI8pU {
   color: blue;
 }
 ",
@@ -1116,7 +1197,7 @@ Array [
   ],
   Array [
     1,
-    "._abc {
+    "._1bAv4bLL8-hE3a7MyZXrT- {
 }
 ",
     "",
@@ -1124,21 +1205,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "abc": "_abc _def1 _def2",
+  "abc": "_1bAv4bLL8-hE3a7MyZXrT- _3hEvHUTrMHercKPgTBsK6W _1UYEX_kWsPgokwmdBHI8pU",
 }
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
-    "._def1 {
+    "._3hEvHUTrMHercKPgTBsK6W {
   color: red;
 }
 ",
@@ -1146,7 +1227,7 @@ Array [
   ],
   Array [
     3,
-    "._def2 {
+    "._1UYEX_kWsPgokwmdBHI8pU {
   color: blue;
 }
 ",
@@ -1154,7 +1235,7 @@ Array [
   ],
   Array [
     1,
-    "._abc {
+    "._1bAv4bLL8-hE3a7MyZXrT- {
 }
 ",
     "",
@@ -1162,17 +1243,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "abc": "_abc _def1 _def2",
 }
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -1200,57 +1281,89 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "abc": "_abc _def1 _def2",
 }
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._def1 {
+  color: red;
+}
+",
+    "",
+  ],
+  Array [
+    3,
+    "._def2 {
+  color: blue;
+}
+",
+    "",
+  ],
+  Array [
+    1,
+    "._abc {
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "abc": "_abc _def1 _def2",
+  "abc": "_1bAv4bLL8-hE3a7MyZXrT- _3hEvHUTrMHercKPgTBsK6W _1UYEX_kWsPgokwmdBHI8pU",
 }
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "abc": "_abc _def1 _def2",
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._3hEvHUTrMHercKPgTBsK6W {
+  color: red;
+}
+",
+    "",
+  ],
+  Array [
+    3,
+    "._1UYEX_kWsPgokwmdBHI8pU {
+  color: blue;
+}
+",
+    "",
+  ],
+  Array [
+    1,
+    "._1bAv4bLL8-hE3a7MyZXrT- {
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`composes-multiple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-multiple\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1263,21 +1376,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "abc": "_abc _def",
+  "abc": "_3sT-Lzs6aj6TM9J3mM7_Cj zu3DT3PNuTYdVravHX310",
 }
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
-    "._def {
+    ".zu3DT3PNuTYdVravHX310 {
   color: red;
 }
 ",
@@ -1285,7 +1398,7 @@ Array [
   ],
   Array [
     1,
-    "._abc {
+    "._3sT-Lzs6aj6TM9J3mM7_Cj {
 }
 ",
     "",
@@ -1293,21 +1406,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "abc": "_abc _def",
+  "abc": "_3sT-Lzs6aj6TM9J3mM7_Cj zu3DT3PNuTYdVravHX310",
 }
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
-    "._def {
+    ".zu3DT3PNuTYdVravHX310 {
   color: red;
 }
 ",
@@ -1315,7 +1428,7 @@ Array [
   ],
   Array [
     1,
-    "._abc {
+    "._3sT-Lzs6aj6TM9J3mM7_Cj {
 }
 ",
     "",
@@ -1323,17 +1436,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "abc": "_abc _def",
 }
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -1353,57 +1466,73 @@ Array [
 ]
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "abc": "_abc _def",
 }
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "._def {
+  color: red;
+}
+",
+    "",
+  ],
+  Array [
+    1,
+    "._abc {
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "abc": "_abc _def",
+  "abc": "_3sT-Lzs6aj6TM9J3mM7_Cj zu3DT3PNuTYdVravHX310",
 }
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "abc": "_abc _def",
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    ".zu3DT3PNuTYdVravHX310 {
+  color: red;
+}
+",
+    "",
+  ],
+  Array [
+    1,
+    "._3sT-Lzs6aj6TM9J3mM7_Cj {
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`composes-with-importing\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`composes-with-importing\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1418,17 +1547,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "blue": "red",
 }
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1441,22 +1570,22 @@ Array [
 ]
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "a": "_a",
+  "a": "rUmYXW8EUSiAHIrtvLLrL",
   "blue": "red",
 }
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    ".rUmYXW8EUSiAHIrtvLLrL {
   border: 1px solid red;
 }
 ",
@@ -1465,22 +1594,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "a": "_a",
   "blue": "red",
 }
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    ".a {
   border: 1px solid red;
 }
 ",
@@ -1489,59 +1617,81 @@ Array [
 ]
 `;
 
-exports[`modules case \`declaration-value\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
+  "a": "_a",
   "blue": "red",
 }
 `;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._a {
+  border: 1px solid red;
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`declaration-value\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "a": "_a",
+  "a": "rUmYXW8EUSiAHIrtvLLrL",
   "blue": "red",
 }
 `;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`declaration-value\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".rUmYXW8EUSiAHIrtvLLrL {
+  border: 1px solid red;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`declaration-value\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "blue": "red",
+exports[`modules case \`issue-589\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "body:before {
+  content: '';
+  background: url(/webpack/public/path/5b1f36bc41ab31f5b801d48ba1d65781.png);
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`declaration-value\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`issue-589\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1555,13 +1705,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`issue-589\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1575,13 +1725,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1595,13 +1745,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1615,45 +1765,33 @@ Array [
 ]
 `;
 
-exports[`modules case \`issue-589\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "body:before {
+  content: '';
+  background: url(/webpack/public/path/5b1f36bc41ab31f5b801d48ba1d65781.png);
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`issue-589\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`issue-589\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1711,13 +1849,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1775,30 +1913,30 @@ Array [
 ]
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "a": "_a",
-  "b": "_b",
-  "bounce": "_bounce",
-  "bounce2": "_bounce2",
-  "bounce3": "_bounce3",
-  "bounce4": "_bounce4",
+  "a": "_1AzRoWem1zBzZ9hLlF5IJC",
+  "b": "_1eH5GHM6EfKYOklEd2mhle",
+  "bounce": "_355y8MvF-ilfLoMa6xQMuq",
+  "bounce2": "_20oF72x8NQuWNrNLEjvczE",
+  "bounce3": "_3OQHSo2d42CWSR-npTXaic",
+  "bounce4": "_3bL1lmhMKE-Qlk83VSMCHN",
 }
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    "._1AzRoWem1zBzZ9hLlF5IJC {
 	color: green;
 }
 
-@keyframes _bounce {
+@keyframes _355y8MvF-ilfLoMa6xQMuq {
 	0% {
 		transform: translateY(-100%);
 		opacity: 0;
@@ -1809,7 +1947,7 @@ Array [
 	}
 }
 
-@-webkit-keyframes _bounce2 {
+@-webkit-keyframes _20oF72x8NQuWNrNLEjvczE {
 	0% {
 		transform: translateY(-100%);
 		opacity: 0;
@@ -1820,26 +1958,90 @@ Array [
 	}
 }
 
-._bounce {
-	animation-name: _bounce;
-	animation: _bounce2 1s ease;
+._355y8MvF-ilfLoMa6xQMuq {
+	animation-name: _355y8MvF-ilfLoMa6xQMuq;
+	animation: _20oF72x8NQuWNrNLEjvczE 1s ease;
 }
 
-._bounce2 {
+._20oF72x8NQuWNrNLEjvczE {
 	color: green;
-	animation: _bounce 1s ease;
-	animation-name: _bounce2;
+	animation: _355y8MvF-ilfLoMa6xQMuq 1s ease;
+	animation-name: _20oF72x8NQuWNrNLEjvczE;
 }
 
-._bounce3 {
-	animation: _bounce 1s ease, _bounce2
+._3OQHSo2d42CWSR-npTXaic {
+	animation: _355y8MvF-ilfLoMa6xQMuq 1s ease, _20oF72x8NQuWNrNLEjvczE
 }
 
-._bounce4 {
-	animation: _bounce 1s ease, _bounce2;
+._3bL1lmhMKE-Qlk83VSMCHN {
+	animation: _355y8MvF-ilfLoMa6xQMuq 1s ease, _20oF72x8NQuWNrNLEjvczE;
 }
 
-._b {
+._1eH5GHM6EfKYOklEd2mhle {
+	color: green;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
+
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".a {
+	color: green;
+}
+
+@keyframes bounce {
+	0% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+	5% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+}
+
+@-webkit-keyframes bounce2 {
+	0% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+	5% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+}
+
+.bounce {
+	animation-name: bounce;
+	animation: bounce2 1s ease;
+}
+
+.bounce2 {
+	color: green;
+	animation: bounce 1s ease;
+	animation-name: bounce2;
+}
+
+.bounce3 {
+	animation: bounce 1s ease, bounce2
+}
+
+.bounce4 {
+	animation: bounce 1s ease, bounce2;
+}
+
+.b {
 	color: green;
 }
 ",
@@ -1848,11 +2050,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "a": "_a",
   "b": "_b",
@@ -1863,7 +2065,7 @@ Object {
 }
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -1921,63 +2123,86 @@ Array [
 ]
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`true)\`: locals 1`] = `
+Object {
+  "a": "_1AzRoWem1zBzZ9hLlF5IJC",
+  "b": "_1eH5GHM6EfKYOklEd2mhle",
+  "bounce": "_355y8MvF-ilfLoMa6xQMuq",
+  "bounce2": "_20oF72x8NQuWNrNLEjvczE",
+  "bounce3": "_3OQHSo2d42CWSR-npTXaic",
+  "bounce4": "_3bL1lmhMKE-Qlk83VSMCHN",
+}
+`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1AzRoWem1zBzZ9hLlF5IJC {
+	color: green;
+}
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+@keyframes _355y8MvF-ilfLoMa6xQMuq {
+	0% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+	5% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+}
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+@-webkit-keyframes _20oF72x8NQuWNrNLEjvczE {
+	0% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+	5% {
+		transform: translateY(-100%);
+		opacity: 0;
+	}
+}
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "b": "_b",
-  "bounce": "_bounce",
-  "bounce2": "_bounce2",
-  "bounce3": "_bounce3",
-  "bounce4": "_bounce4",
+._355y8MvF-ilfLoMa6xQMuq {
+	animation-name: _355y8MvF-ilfLoMa6xQMuq;
+	animation: _20oF72x8NQuWNrNLEjvczE 1s ease;
 }
-`;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+._20oF72x8NQuWNrNLEjvczE {
+	color: green;
+	animation: _355y8MvF-ilfLoMa6xQMuq 1s ease;
+	animation-name: _20oF72x8NQuWNrNLEjvczE;
+}
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+._3OQHSo2d42CWSR-npTXaic {
+	animation: _355y8MvF-ilfLoMa6xQMuq 1s ease, _20oF72x8NQuWNrNLEjvczE
+}
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+._3bL1lmhMKE-Qlk83VSMCHN {
+	animation: _355y8MvF-ilfLoMa6xQMuq 1s ease, _20oF72x8NQuWNrNLEjvczE;
+}
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "b": "_b",
-  "bounce": "_bounce",
-  "bounce2": "_bounce2",
-  "bounce3": "_bounce3",
-  "bounce4": "_bounce4",
+._1eH5GHM6EfKYOklEd2mhle {
+	color: green;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`keyframes-and-animation\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`keyframes-and-animation\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`leak-scope\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2024,13 +2249,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`leak-scope\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2077,39 +2302,39 @@ Array [
 ]
 `;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`leak-scope\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "a": "_a",
-  "b": "_b",
-  "c": "_c",
-  "c1": "_c1",
-  "c2": "_c2",
-  "c3": "_c3",
-  "c4": "_c4",
-  "d2": "_d2",
+  "a": "_1OjK2G7L6Ypn9Qqa8lly-H",
+  "b": "_2cTRWn5QG4xtPeFL2wrKvv",
+  "c": "_3MHGI9_Tl4A_kJUxXx1q2j",
+  "c1": "_1PQ8UpcdVbFbAcYs6wdRXj",
+  "c2": "_3JhTjOsNov-pQXnd3o0JJ",
+  "c3": "_9skQ6KRXi6qCorV5zNSyV",
+  "c4": "_1Gh6Pqr28qXCExbnssOGX9",
+  "d2": "_35GAwk8Rb2LyIN0pSAXjyy",
 }
 `;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`leak-scope\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    "._1OjK2G7L6Ypn9Qqa8lly-H {
 	color: green;
-	animation: _a;
+	animation: _1OjK2G7L6Ypn9Qqa8lly-H;
 }
 
-@keyframes _b {
+@keyframes _2cTRWn5QG4xtPeFL2wrKvv {
 	0% { left: 10px; }
 	100% { left: 20px; }
 }
 
-._b {
-	animation: _b;
+._2cTRWn5QG4xtPeFL2wrKvv {
+	animation: _2cTRWn5QG4xtPeFL2wrKvv;
 }
 
 @keyframes c {
@@ -2117,9 +2342,9 @@ Array [
 	100% { left: 20px; }
 }
 
-._c {
-	animation: _c1;
-	animation: _c2, _c3, _c4;
+._3MHGI9_Tl4A_kJUxXx1q2j {
+	animation: _1PQ8UpcdVbFbAcYs6wdRXj;
+	animation: _3JhTjOsNov-pQXnd3o0JJ, _9skQ6KRXi6qCorV5zNSyV, _1Gh6Pqr28qXCExbnssOGX9;
 }
 
 @keyframes d {
@@ -2133,7 +2358,60 @@ Array [
 }
 
 .d2 {
-	animation: _d2;
+	animation: _35GAwk8Rb2LyIN0pSAXjyy;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`leak-scope\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
+
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".a {
+	color: green;
+	animation: a;
+}
+
+@keyframes b {
+	0% { left: 10px; }
+	100% { left: 20px; }
+}
+
+.b {
+	animation: b;
+}
+
+@keyframes c {
+	0% { left: 10px; }
+	100% { left: 20px; }
+}
+
+.c {
+	animation: c1;
+	animation: c2, c3, c4;
+}
+
+@keyframes d {
+	0% { left: 10px; }
+	100% { left: 20px; }
+}
+
+.d1 {
+	animation: d1;
+	animation: d2, d3, d4;
+}
+
+.d2 {
+	animation: d2;
 }
 ",
     "",
@@ -2141,11 +2419,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "a": "_a",
   "b": "_b",
@@ -2158,7 +2436,7 @@ Object {
 }
 `;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2205,75 +2483,114 @@ Array [
 ]
 `;
 
-exports[`modules case \`leak-scope\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`true)\`: locals 1`] = `
+Object {
+  "a": "_1OjK2G7L6Ypn9Qqa8lly-H",
+  "b": "_2cTRWn5QG4xtPeFL2wrKvv",
+  "c": "_3MHGI9_Tl4A_kJUxXx1q2j",
+  "c1": "_1PQ8UpcdVbFbAcYs6wdRXj",
+  "c2": "_3JhTjOsNov-pQXnd3o0JJ",
+  "c3": "_9skQ6KRXi6qCorV5zNSyV",
+  "c4": "_1Gh6Pqr28qXCExbnssOGX9",
+  "d2": "_35GAwk8Rb2LyIN0pSAXjyy",
+}
+`;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1OjK2G7L6Ypn9Qqa8lly-H {
+	color: green;
+	animation: _1OjK2G7L6Ypn9Qqa8lly-H;
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+@keyframes _2cTRWn5QG4xtPeFL2wrKvv {
+	0% { left: 10px; }
+	100% { left: 20px; }
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+._2cTRWn5QG4xtPeFL2wrKvv {
+	animation: _2cTRWn5QG4xtPeFL2wrKvv;
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
+@keyframes c {
+	0% { left: 10px; }
+	100% { left: 20px; }
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+._3MHGI9_Tl4A_kJUxXx1q2j {
+	animation: _1PQ8UpcdVbFbAcYs6wdRXj;
+	animation: _3JhTjOsNov-pQXnd3o0JJ, _9skQ6KRXi6qCorV5zNSyV, _1Gh6Pqr28qXCExbnssOGX9;
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+@keyframes d {
+	0% { left: 10px; }
+	100% { left: 20px; }
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+.d1 {
+	animation: d1;
+	animation: d2, d3, d4;
+}
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "b": "_b",
-  "c": "_c",
-  "c1": "_c1",
-  "c2": "_c2",
-  "c3": "_c3",
-  "c4": "_c4",
-  "d2": "_d2",
+.d2 {
+	animation: _35GAwk8Rb2LyIN0pSAXjyy;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`leak-scope\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`local\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "b": "_b",
-  "c": "_c",
-  "c1": "_c1",
-  "c2": "_c2",
-  "c3": "_c3",
-  "c4": "_c4",
-  "d2": "_d2",
+exports[`modules case \`local\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".abc :local(.def) {
+  color: red;
+}
+
+:local .ghi .jkl {
+  color: blue;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`leak-scope\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`local\` (\`modules\` value is \`global)\`: locals 1`] = `
+Object {
+  "def": "_1UnGDcMVVYIU_547CDqQJU",
+  "ghi": "_1k8c5svlAtK4vFkSsZdl4o",
+  "jkl": "pRQR9FSSkxNL6roex-uGp",
+}
+`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    ".abc :local(.def) {
+    ".abc ._1UnGDcMVVYIU_547CDqQJU {
   color: red;
 }
 
-:local .ghi .jkl {
+._1k8c5svlAtK4vFkSsZdl4o .pRQR9FSSkxNL6roex-uGp {
   color: blue;
 }
 ",
@@ -2282,27 +2599,28 @@ Array [
 ]
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "def": "_def",
-  "ghi": "_ghi",
-  "jkl": "_jkl",
+  "abc": "_2EPIUiYqPKxP0HS9Vgqa8e",
+  "def": "_1UnGDcMVVYIU_547CDqQJU",
+  "ghi": "_1k8c5svlAtK4vFkSsZdl4o",
+  "jkl": "pRQR9FSSkxNL6roex-uGp",
 }
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    ".abc ._def {
+    "._2EPIUiYqPKxP0HS9Vgqa8e ._1UnGDcMVVYIU_547CDqQJU {
   color: red;
 }
 
-._ghi ._jkl {
+._1k8c5svlAtK4vFkSsZdl4o .pRQR9FSSkxNL6roex-uGp {
   color: blue;
 }
 ",
@@ -2311,24 +2629,23 @@ Array [
 ]
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "abc": "_abc",
   "def": "_def",
   "ghi": "_ghi",
   "jkl": "_jkl",
 }
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._abc ._def {
+    ".abc ._def {
   color: red;
 }
 
@@ -2341,11 +2658,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "abc": "_abc",
   "def": "_def",
@@ -2354,7 +2671,7 @@ Object {
 }
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2371,65 +2688,43 @@ Array [
 ]
 `;
 
-exports[`modules case \`local\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "def": "_def",
-  "ghi": "_ghi",
-  "jkl": "_jkl",
+  "abc": "_2EPIUiYqPKxP0HS9Vgqa8e",
+  "def": "_1UnGDcMVVYIU_547CDqQJU",
+  "ghi": "_1k8c5svlAtK4vFkSsZdl4o",
+  "jkl": "pRQR9FSSkxNL6roex-uGp",
 }
 `;
 
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "abc": "_abc",
-  "def": "_def",
-  "ghi": "_ghi",
-  "jkl": "_jkl",
+exports[`modules case \`local\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2EPIUiYqPKxP0HS9Vgqa8e ._1UnGDcMVVYIU_547CDqQJU {
+  color: red;
 }
-`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "abc": "_abc",
-  "def": "_def",
-  "ghi": "_ghi",
-  "jkl": "_jkl",
+._1k8c5svlAtK4vFkSsZdl4o .pRQR9FSSkxNL6roex-uGp {
+  color: blue;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`local\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-2\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2443,63 +2738,63 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "className": "_className",
-  "someId": "_someId",
-  "subClass": "_subClass",
+  "className": "PTH0TZDPxpREaV5cxtahd",
+  "someId": "_1XQl0Np_jYcDGudXKxmL8A",
+  "subClass": "_2MrzTmc8jtF-E5FfuMPQie",
 }
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._className { background: red; }
-#_someId { background: green; }
-._className ._subClass { color: green; }
-#_someId ._subClass { color: blue; }
+    ".PTH0TZDPxpREaV5cxtahd { background: red; }
+#_1XQl0Np_jYcDGudXKxmL8A { background: green; }
+.PTH0TZDPxpREaV5cxtahd ._2MrzTmc8jtF-E5FfuMPQie { color: green; }
+#_1XQl0Np_jYcDGudXKxmL8A ._2MrzTmc8jtF-E5FfuMPQie { color: blue; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "className": "_className",
-  "someId": "_someId",
-  "subClass": "_subClass",
+  "className": "PTH0TZDPxpREaV5cxtahd",
+  "someId": "_1XQl0Np_jYcDGudXKxmL8A",
+  "subClass": "_2MrzTmc8jtF-E5FfuMPQie",
 }
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._className { background: red; }
-#_someId { background: green; }
-._className ._subClass { color: green; }
-#_someId ._subClass { color: blue; }
+    ".PTH0TZDPxpREaV5cxtahd { background: red; }
+#_1XQl0Np_jYcDGudXKxmL8A { background: green; }
+.PTH0TZDPxpREaV5cxtahd ._2MrzTmc8jtF-E5FfuMPQie { color: green; }
+#_1XQl0Np_jYcDGudXKxmL8A ._2MrzTmc8jtF-E5FfuMPQie { color: blue; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "className": "_className",
   "someId": "_someId",
@@ -2507,7 +2802,7 @@ Object {
 }
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2521,21 +2816,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-2\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "className": "_className",
   "someId": "_someId",
@@ -2543,41 +2828,53 @@ Object {
 }
 `;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._className { background: red; }
+#_someId { background: green; }
+._className ._subClass { color: green; }
+#_someId ._subClass { color: blue; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-2\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-2\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "className": "_className",
-  "someId": "_someId",
-  "subClass": "_subClass",
+  "className": "PTH0TZDPxpREaV5cxtahd",
+  "someId": "_1XQl0Np_jYcDGudXKxmL8A",
+  "subClass": "_2MrzTmc8jtF-E5FfuMPQie",
 }
 `;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "className": "_className",
-  "someId": "_someId",
-  "subClass": "_subClass",
-}
+exports[`modules case \`local-2\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".PTH0TZDPxpREaV5cxtahd { background: red; }
+#_1XQl0Np_jYcDGudXKxmL8A { background: green; }
+.PTH0TZDPxpREaV5cxtahd ._2MrzTmc8jtF-E5FfuMPQie { color: green; }
+#_1XQl0Np_jYcDGudXKxmL8A ._2MrzTmc8jtF-E5FfuMPQie { color: blue; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`local-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-2\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2594,25 +2891,25 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "abc": "_abc",
-  "def": "_def _abc",
+  "abc": "_1wzWGMZGmVz3uhGAmwbXwR",
+  "def": "_3zcEXyCxYPLdb_6bVqY6Df _1wzWGMZGmVz3uhGAmwbXwR",
 }
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._abc {
+    "._1wzWGMZGmVz3uhGAmwbXwR {
   color: red;
 }
-._def {
+._3zcEXyCxYPLdb_6bVqY6Df {
   background: green;
 }
 ",
@@ -2621,25 +2918,25 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "abc": "_abc",
-  "def": "_def _abc",
+  "abc": "_1wzWGMZGmVz3uhGAmwbXwR",
+  "def": "_3zcEXyCxYPLdb_6bVqY6Df _1wzWGMZGmVz3uhGAmwbXwR",
 }
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._abc {
+    "._1wzWGMZGmVz3uhGAmwbXwR {
   color: red;
 }
-._def {
+._3zcEXyCxYPLdb_6bVqY6Df {
   background: green;
 }
 ",
@@ -2648,18 +2945,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "abc": "_abc",
   "def": "_def _abc",
 }
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2675,60 +2972,67 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "abc": "_abc",
   "def": "_def _abc",
 }
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._abc {
+  color: red;
+}
+._def {
+  background: green;
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "abc": "_abc",
-  "def": "_def _abc",
+  "abc": "_1wzWGMZGmVz3uhGAmwbXwR",
+  "def": "_3zcEXyCxYPLdb_6bVqY6Df _1wzWGMZGmVz3uhGAmwbXwR",
 }
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "abc": "_abc",
-  "def": "_def _abc",
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1wzWGMZGmVz3uhGAmwbXwR {
+  color: red;
+}
+._3zcEXyCxYPLdb_6bVqY6Df {
+  background: green;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`local-and-composes\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-and-composes\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2741,23 +3045,23 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c3": "_c3",
-  "c4": "_c4",
+  "c1": "_1sz8PE1ejGPcGRSnIAWKZt",
+  "c3": "_2DFDxRic974g-wJ7S9rbP1",
+  "c4": "xo8O_am1gQUkHa-_J-WSe",
 }
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._c1[data-attr=\\".c2)]'\\"]:not(._c3):not(._c4) {
+    "._1sz8PE1ejGPcGRSnIAWKZt[data-attr=\\".c2)]'\\"]:not(._2DFDxRic974g-wJ7S9rbP1):not(.xo8O_am1gQUkHa-_J-WSe) {
   background: red;
 }
 ",
@@ -2766,23 +3070,23 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c3": "_c3",
-  "c4": "_c4",
+  "c1": "_1sz8PE1ejGPcGRSnIAWKZt",
+  "c3": "_2DFDxRic974g-wJ7S9rbP1",
+  "c4": "xo8O_am1gQUkHa-_J-WSe",
 }
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._c1[data-attr=\\".c2)]'\\"]:not(._c3):not(._c4) {
+    "._1sz8PE1ejGPcGRSnIAWKZt[data-attr=\\".c2)]'\\"]:not(._2DFDxRic974g-wJ7S9rbP1):not(.xo8O_am1gQUkHa-_J-WSe) {
   background: red;
 }
 ",
@@ -2791,11 +3095,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c3": "_c3",
@@ -2803,7 +3107,7 @@ Object {
 }
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2816,21 +3120,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`local-with-string\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c3": "_c3",
@@ -2838,41 +3132,51 @@ Object {
 }
 `;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._c1[data-attr=\\".c2)]'\\"]:not(._c3):not(._c4) {
+  background: red;
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`local-with-string\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c3": "_c3",
-  "c4": "_c4",
+  "c1": "_1sz8PE1ejGPcGRSnIAWKZt",
+  "c3": "_2DFDxRic974g-wJ7S9rbP1",
+  "c4": "xo8O_am1gQUkHa-_J-WSe",
 }
 `;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "c1": "_c1",
-  "c3": "_c3",
-  "c4": "_c4",
+exports[`modules case \`local-with-string\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1sz8PE1ejGPcGRSnIAWKZt[data-attr=\\".c2)]'\\"]:not(._2DFDxRic974g-wJ7S9rbP1):not(.xo8O_am1gQUkHa-_J-WSe) {
+  background: red;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`local-with-string\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`local-with-string\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`media\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2889,17 +3193,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -2914,23 +3218,23 @@ Array [
 ]
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "header": "_header",
+  "header": "_1wyVAJXtjGZLoQNO_yG8b3",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
     "@media (max-width: 599px) {
-  ._header {
+  ._1wyVAJXtjGZLoQNO_yG8b3 {
     box-shadow: 0 0 4px #1F4F7F;
   }
 }
@@ -2940,23 +3244,22 @@ Array [
 ]
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "header": "_header",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
     "@media (max-width: 599px) {
-  ._header {
+  .header {
     box-shadow: 0 0 4px #1F4F7F;
   }
 }
@@ -2966,59 +3269,65 @@ Array [
 ]
 `;
 
-exports[`modules case \`media\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`media\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
+  "header": "_header",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "@media (max-width: 599px) {
+  ._header {
+    box-shadow: 0 0 4px #1F4F7F;
+  }
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`media\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`media\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "header": "_header",
+  "header": "_1wyVAJXtjGZLoQNO_yG8b3",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "header": "_header",
-  "small": "(max-width: 599px)",
+exports[`modules case \`media\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "@media (max-width: 599px) {
+  ._1wyVAJXtjGZLoQNO_yG8b3 {
+    box-shadow: 0 0 4px #1F4F7F;
+  }
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`media\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`media-2\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3034,17 +3343,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -3065,18 +3374,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "header": "_header",
+  "header": "UbDEjEuweJXO7yHMpC8qp",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -3087,7 +3396,7 @@ Array [
   Array [
     1,
     "@media (max-width: 599px) {
-  ._header {
+  .UbDEjEuweJXO7yHMpC8qp {
     box-shadow: 0 0 4px #1F4F7F;
   }
 }
@@ -3097,18 +3406,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "header": "_header",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -3119,7 +3427,7 @@ Array [
   Array [
     1,
     "@media (max-width: 599px) {
-  ._header {
+  .header {
     box-shadow: 0 0 4px #1F4F7F;
   }
 }
@@ -3129,59 +3437,77 @@ Array [
 ]
 `;
 
-exports[`modules case \`media-2\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
+  "header": "_header",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "@media (max-width: 599px) {
+  ._header {
+    box-shadow: 0 0 4px #1F4F7F;
+  }
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`media-2\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`media-2\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "header": "_header",
+  "header": "UbDEjEuweJXO7yHMpC8qp",
   "small": "(max-width: 599px)",
 }
 `;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "header": "_header",
-  "small": "(max-width: 599px)",
+exports[`modules case \`media-2\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "@media (max-width: 599px) {
+  .UbDEjEuweJXO7yHMpC8qp {
+    box-shadow: 0 0 4px #1F4F7F;
+  }
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`media-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`media-2\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3193,24 +3519,24 @@ Array [
 ]
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
-  "c2": "_c2",
-  "c3": "_c3",
-  "c5": "_c5",
-  "c7": "_c7",
+  "c2": "LgC5kpXZK3IOCPWWctF7f",
+  "c3": "_2ZTY7KJ2nkQND4VqlaSz9a",
+  "c5": "tEu6_PTqhxImp1tyYQTWz",
+  "c7": "FBEuAfqI8VKhU-w-9RNH",
 }
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    ".c1 ._c2 ._c3 .c4 ._c5, .c6 ._c7 { background: red; }
+    ".c1 .LgC5kpXZK3IOCPWWctF7f ._2ZTY7KJ2nkQND4VqlaSz9a .c4 .tEu6_PTqhxImp1tyYQTWz, .c6 .FBEuAfqI8VKhU-w-9RNH { background: red; }
 .c8 { background: red; }
 ",
     "",
@@ -3218,92 +3544,64 @@ Array [
 ]
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c2": "_c2",
-  "c3": "_c3",
-  "c5": "_c5",
-  "c6": "_c6",
-  "c7": "_c7",
-  "c8": "_c8",
+  "c1": "_sSeqF3tTS8i-oJLOiW66",
+  "c2": "LgC5kpXZK3IOCPWWctF7f",
+  "c3": "_2ZTY7KJ2nkQND4VqlaSz9a",
+  "c5": "tEu6_PTqhxImp1tyYQTWz",
+  "c6": "sUDXsigYAAb8sNlOMs_Oc",
+  "c7": "FBEuAfqI8VKhU-w-9RNH",
+  "c8": "_1JUWq0LIxk9cx-H1cbqyAD",
 }
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._c1 ._c2 ._c3 .c4 ._c5, ._c6 ._c7 { background: red; }
-._c8 { background: red; }
+    "._sSeqF3tTS8i-oJLOiW66 .LgC5kpXZK3IOCPWWctF7f ._2ZTY7KJ2nkQND4VqlaSz9a .c4 .tEu6_PTqhxImp1tyYQTWz, .sUDXsigYAAb8sNlOMs_Oc .FBEuAfqI8VKhU-w-9RNH { background: red; }
+._1JUWq0LIxk9cx-H1cbqyAD { background: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
   "c2": "_c2",
   "c3": "_c3",
   "c5": "_c5",
-  "c6": "_c6",
   "c7": "_c7",
-  "c8": "_c8",
 }
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._c1 ._c2 ._c3 .c4 ._c5, ._c6 ._c7 { background: red; }
-._c8 { background: red; }
+    ".c1 ._c2 ._c3 .c4 ._c5, .c6 ._c7 { background: red; }
+.c8 { background: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`mode-switching\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
-Object {
-  "c2": "_c2",
-  "c3": "_c3",
-  "c5": "_c5",
-  "c7": "_c7",
-}
-`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "c1": "_c1",
   "c2": "_c2",
@@ -3315,31 +3613,53 @@ Object {
 }
 `;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._c1 ._c2 ._c3 .c4 ._c5, ._c6 ._c7 { background: red; }
+._c8 { background: red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`mode-switching\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "c1": "_c1",
-  "c2": "_c2",
-  "c3": "_c3",
-  "c5": "_c5",
-  "c6": "_c6",
-  "c7": "_c7",
-  "c8": "_c8",
+  "c1": "_sSeqF3tTS8i-oJLOiW66",
+  "c2": "LgC5kpXZK3IOCPWWctF7f",
+  "c3": "_2ZTY7KJ2nkQND4VqlaSz9a",
+  "c5": "tEu6_PTqhxImp1tyYQTWz",
+  "c6": "sUDXsigYAAb8sNlOMs_Oc",
+  "c7": "FBEuAfqI8VKhU-w-9RNH",
+  "c8": "_1JUWq0LIxk9cx-H1cbqyAD",
 }
 `;
 
-exports[`modules case \`mode-switching\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`mode-switching\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._sSeqF3tTS8i-oJLOiW66 .LgC5kpXZK3IOCPWWctF7f ._2ZTY7KJ2nkQND4VqlaSz9a .c4 .tEu6_PTqhxImp1tyYQTWz, .sUDXsigYAAb8sNlOMs_Oc .FBEuAfqI8VKhU-w-9RNH { background: red; }
+._1JUWq0LIxk9cx-H1cbqyAD { background: red; }
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`mode-switching\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`simple\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3360,13 +3680,13 @@ a[href=\\"#b.c\\"].x.y {
 ]
 `;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`simple\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3387,36 +3707,63 @@ a[href=\\"#b.c\\"].x.y {
 ]
 `;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "a": "_a",
-  "b": "_b",
-  "c": "_c",
-  "d": "_d",
-  "id": "_id",
-  "x": "_x",
-  "y": "_y",
-  "z": "_z",
+  "a": "_3Usq4DWpHHUfARGj76o2W1",
+  "b": "_2sE42PHfIbHjbGigpdA5M2",
+  "c": "_3JN7IxYrHx5fpD-QuNH8Vg",
+  "d": "_169FAY78xdP6MpwfqxWVlS",
+  "id": "_2w6DrNK6drHoI8na0s2YJu",
+  "x": "_3jqDKJEcQhMnSj5LXFzCMT",
+  "y": "_2CdavzdbxA-_uaXjgT2eG",
+  "z": "eawDxhAAUQ-HvrUhhwSML",
 }
 `;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a ._b, ._c ._d, #_id {
+    "._3Usq4DWpHHUfARGj76o2W1 ._2sE42PHfIbHjbGigpdA5M2, ._3JN7IxYrHx5fpD-QuNH8Vg ._169FAY78xdP6MpwfqxWVlS, #_2w6DrNK6drHoI8na0s2YJu {
 	color: green;
 	font-size: 1.5pt;
 }
-a[href=\\"#b.c\\"]._x._y {
+a[href=\\"#b.c\\"]._3jqDKJEcQhMnSj5LXFzCMT._2CdavzdbxA-_uaXjgT2eG {
 	color: green;
 	font-size: 1.5pt;
 }
-@keyframes _z {
+@keyframes eawDxhAAUQ-HvrUhhwSML {
+  2.5% {color: green;}
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`simple\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
+
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".a .b, .c .d, #id {
+	color: green;
+	font-size: 1.5pt;
+}
+a[href=\\"#b.c\\"].x.y {
+	color: green;
+	font-size: 1.5pt;
+}
+@keyframes z {
   2.5% {color: green;}
 }
 ",
@@ -3425,11 +3772,11 @@ a[href=\\"#b.c\\"]._x._y {
 ]
 `;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "a": "_a",
   "b": "_b",
@@ -3442,7 +3789,7 @@ Object {
 }
 `;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3463,67 +3810,51 @@ a[href=\\"#b.c\\"]._x._y {
 ]
 `;
 
-exports[`modules case \`simple\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`simple\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`simple\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "a": "_a",
-  "b": "_b",
-  "c": "_c",
-  "d": "_d",
-  "id": "_id",
-  "x": "_x",
-  "y": "_y",
-  "z": "_z",
+  "a": "_3Usq4DWpHHUfARGj76o2W1",
+  "b": "_2sE42PHfIbHjbGigpdA5M2",
+  "c": "_3JN7IxYrHx5fpD-QuNH8Vg",
+  "d": "_169FAY78xdP6MpwfqxWVlS",
+  "id": "_2w6DrNK6drHoI8na0s2YJu",
+  "x": "_3jqDKJEcQhMnSj5LXFzCMT",
+  "y": "_2CdavzdbxA-_uaXjgT2eG",
+  "z": "eawDxhAAUQ-HvrUhhwSML",
 }
 `;
 
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "b": "_b",
-  "c": "_c",
-  "d": "_d",
-  "id": "_id",
-  "x": "_x",
-  "y": "_y",
-  "z": "_z",
+exports[`modules case \`simple\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._3Usq4DWpHHUfARGj76o2W1 ._2sE42PHfIbHjbGigpdA5M2, ._3JN7IxYrHx5fpD-QuNH8Vg ._169FAY78xdP6MpwfqxWVlS, #_2w6DrNK6drHoI8na0s2YJu {
+	color: green;
+	font-size: 1.5pt;
+}
+a[href=\\"#b.c\\"]._3jqDKJEcQhMnSj5LXFzCMT._2CdavzdbxA-_uaXjgT2eG {
+	color: green;
+	font-size: 1.5pt;
+}
+@keyframes eawDxhAAUQ-HvrUhhwSML {
+  2.5% {color: green;}
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`simple\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`simple\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`urls\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3547,13 +3878,13 @@ Array [
 ]
 `;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`urls\` (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3577,21 +3908,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "a": "_a",
+  "a": "_1goi1QVFtUMjX82JoFfLLJ",
 }
 `;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    "._1goi1QVFtUMjX82JoFfLLJ {
 	background: url(/webpack/public/path/img.png);
 	background: url(/webpack/public/path/img.png);
 	background: url(\\"/webpack/public/path/img img.png\\");
@@ -3611,21 +3942,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
-Object {
-  "a": "_a",
-}
-`;
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    ".a {
 	background: url(/webpack/public/path/img.png);
 	background: url(/webpack/public/path/img.png);
 	background: url(\\"/webpack/public/path/img img.png\\");
@@ -3645,53 +3972,81 @@ Array [
 ]
 `;
 
-exports[`modules case \`urls\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "a": "_a",
 }
 `;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._a {
+	background: url(/webpack/public/path/img.png);
+	background: url(/webpack/public/path/img.png);
+	background: url(\\"/webpack/public/path/img img.png\\");
+	background: url(\\"/webpack/public/path/img img.png\\");
+	background: url(/webpack/public/path/img.png);
+	background: url(/webpack/public/path/img.png#?iefix);
+	background: url(\\"#hash\\");
+	background: url(\\"#\\");
+	background: url(data:image/png;base64,AAA);
+	background: url(http://example.com/image.jpg);
+	background: url(//example.com/image.png);
+	background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) url(/webpack/public/path/img.png) url(\\"/webpack/public/path/img img.png\\") xyz;
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`urls\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`urls\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "a": "_a",
+  "a": "_1goi1QVFtUMjX82JoFfLLJ",
+}
+`;
+
+exports[`modules case \`urls\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1goi1QVFtUMjX82JoFfLLJ {
+	background: url(/webpack/public/path/img.png);
+	background: url(/webpack/public/path/img.png);
+	background: url(\\"/webpack/public/path/img img.png\\");
+	background: url(\\"/webpack/public/path/img img.png\\");
+	background: url(/webpack/public/path/img.png);
+	background: url(/webpack/public/path/img.png#?iefix);
+	background: url(\\"#hash\\");
+	background: url(\\"#\\");
+	background: url(data:image/png;base64,AAA);
+	background: url(http://example.com/image.jpg);
+	background: url(//example.com/image.png);
+	background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) url(/webpack/public/path/img.png) url(\\"/webpack/public/path/img img.png\\") xyz;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`urls\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`urls\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3710,11 +4065,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "aaa": "red",
   "bbb": "green",
@@ -3722,7 +4077,7 @@ Object {
 }
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3737,24 +4092,24 @@ Array [
 ]
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "a": "_a",
+  "a": "_18yRHBx_s3xK1t_zOjEfo",
   "aaa": "red",
   "bbb": "green",
   "ccc": "red",
 }
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    "._18yRHBx_s3xK1t_zOjEfo {
 	background: red;
 	background: green;
 	background: red;
@@ -3765,24 +4120,23 @@ Array [
 ]
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "a": "_a",
   "aaa": "red",
   "bbb": "green",
   "ccc": "red",
 }
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._a {
+    ".a {
 	background: red;
 	background: green;
 	background: red;
@@ -3793,65 +4147,69 @@ Array [
 ]
 `;
 
-exports[`modules case \`values\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`values\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
+  "a": "_a",
   "aaa": "red",
   "bbb": "green",
   "ccc": "red",
 }
 `;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._a {
+	background: red;
+	background: green;
+	background: red;
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "a": "_a",
+  "a": "_18yRHBx_s3xK1t_zOjEfo",
   "aaa": "red",
   "bbb": "green",
   "ccc": "red",
 }
 `;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "a": "_a",
-  "aaa": "red",
-  "bbb": "green",
-  "ccc": "red",
+exports[`modules case \`values\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._18yRHBx_s3xK1t_zOjEfo {
+	background: red;
+	background: green;
+	background: red;
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-1\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3863,18 +4221,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "def": "red",
   "ghi": "1px solid black",
 }
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3885,18 +4243,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "def": "red",
   "ghi": "1px solid black",
 }
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3907,18 +4265,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "def": "red",
   "ghi": "1px solid black",
 }
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3929,60 +4287,57 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-1\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "def": "red",
   "ghi": "1px solid black",
 }
 `;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-1\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-1\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "def": "red",
   "ghi": "1px solid black",
 }
 `;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "def": "red",
-  "ghi": "1px solid black",
-}
+exports[`modules case \`values-1\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-1\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-1\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-2\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -3994,17 +4349,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "def": "red",
 }
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4015,103 +4370,100 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "def": "red",
-  "ghi": "_ghi",
+  "ghi": "_2aKAT4pAinaabqEIFgdhTC",
 }
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._ghi { color: red; }
+    "._2aKAT4pAinaabqEIFgdhTC { color: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "def": "red",
-  "ghi": "_ghi",
 }
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._ghi { color: red; }
+    ".ghi { color: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-2\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "def": "red",
+  "ghi": "_ghi",
 }
 `;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._ghi { color: red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-2\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-2\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "def": "red",
-  "ghi": "_ghi",
+  "ghi": "_2aKAT4pAinaabqEIFgdhTC",
 }
 `;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "def": "red",
-  "ghi": "_ghi",
-}
+exports[`modules case \`values-2\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._2aKAT4pAinaabqEIFgdhTC { color: red; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-2\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-2\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-3\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4123,17 +4475,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "def": "red",
 }
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4150,18 +4502,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "def": "red",
-  "ghi": "_ghi",
+  "ghi": "_29ART3-NNe4DU1X-5_7419",
 }
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4171,25 +4523,24 @@ Array [
   ],
   Array [
     1,
-    "._ghi { color: red; }
+    "._29ART3-NNe4DU1X-5_7419 { color: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "def": "red",
-  "ghi": "_ghi",
 }
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4199,66 +4550,76 @@ Array [
   ],
   Array [
     1,
-    "._ghi { color: red; }
+    ".ghi { color: red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-3\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "def": "red",
+  "ghi": "_ghi",
 }
 `;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._ghi { color: red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-3\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-3\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "def": "red",
-  "ghi": "_ghi",
+  "ghi": "_29ART3-NNe4DU1X-5_7419",
 }
 `;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "def": "red",
-  "ghi": "_ghi",
-}
+exports[`modules case \`values-3\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._29ART3-NNe4DU1X-5_7419 { color: red; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-3\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-3\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-4\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4271,18 +4632,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "aaa": "red",
   "bbb": "green",
 }
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4305,19 +4666,19 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "aaa": "red",
   "bbb": "green",
-  "ghi": "_ghi",
+  "ghi": "_1vGjNPdz_qWrUvzTY2pCsS",
 }
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4333,26 +4694,25 @@ Array [
   ],
   Array [
     1,
-    "._ghi { background: red, green, def; }
+    "._1vGjNPdz_qWrUvzTY2pCsS { background: red, green, def; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "aaa": "red",
   "bbb": "green",
-  "ghi": "_ghi",
 }
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4368,69 +4728,90 @@ Array [
   ],
   Array [
     1,
-    "._ghi { background: red, green, def; }
+    ".ghi { background: red, green, def; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-4\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "aaa": "red",
   "bbb": "green",
+  "ghi": "_ghi",
 }
 `;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    3,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._ghi { background: red, green, def; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-4\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-4\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "aaa": "red",
   "bbb": "green",
-  "ghi": "_ghi",
+  "ghi": "_1vGjNPdz_qWrUvzTY2pCsS",
 }
 `;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "aaa": "red",
-  "bbb": "green",
-  "ghi": "_ghi",
-}
+exports[`modules case \`values-4\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    3,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._1vGjNPdz_qWrUvzTY2pCsS { background: red, green, def; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-4\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-4\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-5\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4443,18 +4824,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "color": "red",
   "shadow": "0 0 red,0 0 red",
 }
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4471,19 +4852,19 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
+  "ghi": "_3Uw-A6Tr2LkIED6NTqwFvj",
   "shadow": "0 0 red,0 0 red",
 }
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4493,26 +4874,25 @@ Array [
   ],
   Array [
     1,
-    "._ghi { box-shadow: 0 0 red,0 0 red; }
+    "._3Uw-A6Tr2LkIED6NTqwFvj { box-shadow: 0 0 red,0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
   "shadow": "0 0 red,0 0 red",
 }
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4522,55 +4902,18 @@ Array [
   ],
   Array [
     1,
-    "._ghi { box-shadow: 0 0 red,0 0 red; }
+    ".ghi { box-shadow: 0 0 red,0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-5\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
-Object {
-  "color": "red",
-  "shadow": "0 0 red,0 0 red",
-}
-`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "color": "red",
-  "ghi": "_ghi",
-  "shadow": "0 0 red,0 0 red",
-}
-`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "color": "red",
   "ghi": "_ghi",
@@ -4578,37 +4921,36 @@ Object {
 }
 `;
 
-exports[`modules case \`values-5\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
   Array [
     1,
-    "@value color from './file1.css';
-@value shadow: 0 0 color ,0 0 color;
-.ghi { box-shadow: shadow; }
+    "._ghi { box-shadow: 0 0 red,0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-5\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "color": "red",
-  "shadow": "0 0 red ,0 0 red",
+  "ghi": "_3Uw-A6Tr2LkIED6NTqwFvj",
+  "shadow": "0 0 red,0 0 red",
 }
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-5\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4618,26 +4960,44 @@ Array [
   ],
   Array [
     1,
-    ".ghi { box-shadow: 0 0 red ,0 0 red; }
+    "._3Uw-A6Tr2LkIED6NTqwFvj { box-shadow: 0 0 red,0 0 red; }
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-5\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`values-6\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`values-6\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+
+exports[`modules case \`values-6\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "@value color from './file1.css';
+@value shadow: 0 0 color ,0 0 color;
+.ghi { box-shadow: shadow; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
   "shadow": "0 0 red ,0 0 red",
 }
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4647,26 +5007,26 @@ Array [
   ],
   Array [
     1,
-    "._ghi { box-shadow: 0 0 red ,0 0 red; }
+    ".ghi { box-shadow: 0 0 red ,0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
+  "ghi": "_2qKjolC-wu9Dp8-RCkWiLN",
   "shadow": "0 0 red ,0 0 red",
 }
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4676,41 +5036,46 @@ Array [
   ],
   Array [
     1,
-    "._ghi { box-shadow: 0 0 red ,0 0 red; }
+    "._2qKjolC-wu9Dp8-RCkWiLN { box-shadow: 0 0 red ,0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-6\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`values-6\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "color": "red",
   "shadow": "0 0 red ,0 0 red",
 }
 `;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    ".ghi { box-shadow: 0 0 red ,0 0 red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "color": "red",
   "ghi": "_ghi",
@@ -4718,27 +5083,59 @@ Object {
 }
 `;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._ghi { box-shadow: 0 0 red ,0 0 red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-6\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-6\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
+  "ghi": "_2qKjolC-wu9Dp8-RCkWiLN",
   "shadow": "0 0 red ,0 0 red",
 }
 `;
 
-exports[`modules case \`values-6\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-6\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._2qKjolC-wu9Dp8-RCkWiLN { box-shadow: 0 0 red ,0 0 red; }
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-6\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-7\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4751,18 +5148,18 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "color": "red",
   "shadow": "0 0 red, 0 0 red",
 }
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4779,19 +5176,19 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
+  "ghi": "_1SVUxnI1T0vYEcq2VXU5pr",
   "shadow": "0 0 red, 0 0 red",
 }
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4801,26 +5198,25 @@ Array [
   ],
   Array [
     1,
-    "._ghi { box-shadow: 0 0 red, 0 0 red; }
+    "._1SVUxnI1T0vYEcq2VXU5pr { box-shadow: 0 0 red, 0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
   "shadow": "0 0 red, 0 0 red",
 }
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     2,
@@ -4830,69 +5226,78 @@ Array [
   ],
   Array [
     1,
-    "._ghi { box-shadow: 0 0 red, 0 0 red; }
+    ".ghi { box-shadow: 0 0 red, 0 0 red; }
 ",
     "",
   ],
 ]
 `;
 
-exports[`modules case \`values-7\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "color": "red",
+  "ghi": "_ghi",
   "shadow": "0 0 red, 0 0 red",
 }
 `;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._ghi { box-shadow: 0 0 red, 0 0 red; }
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-7\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-7\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "color": "red",
-  "ghi": "_ghi",
+  "ghi": "_1SVUxnI1T0vYEcq2VXU5pr",
   "shadow": "0 0 red, 0 0 red",
 }
 `;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "color": "red",
-  "ghi": "_ghi",
-  "shadow": "0 0 red, 0 0 red",
-}
+exports[`modules case \`values-7\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
+    "
+",
+    "",
+  ],
+  Array [
+    1,
+    "._1SVUxnI1T0vYEcq2VXU5pr { box-shadow: 0 0 red, 0 0 red; }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-7\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-7\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-8\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4908,17 +5313,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "shadow-color": "rgba(0, 0, 0, 0.5)",
 }
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -4932,22 +5337,22 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
-  "shadow": "_shadow",
+  "shadow": "_3fhB2YwAmhjTmtcd6ofBQH",
   "shadow-color": "rgba(0, 0, 0, 0.5)",
 }
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._shadow {
+    "._3fhB2YwAmhjTmtcd6ofBQH {
   box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5),
     10px 0px 5px rgba(0, 0, 0, 0.5);
 }
@@ -4957,22 +5362,21 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
 Object {
-  "shadow": "_shadow",
   "shadow-color": "rgba(0, 0, 0, 0.5)",
 }
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._shadow {
+    ".shadow {
   box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5),
     10px 0px 5px rgba(0, 0, 0, 0.5);
 }
@@ -4982,59 +5386,63 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-8\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
+  "shadow": "_shadow",
   "shadow-color": "rgba(0, 0, 0, 0.5)",
 }
 `;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._shadow {
+  box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5),
+    10px 0px 5px rgba(0, 0, 0, 0.5);
+}
+",
+    "",
+  ],
+]
+`;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-8\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-8\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
-  "shadow": "_shadow",
+  "shadow": "_3fhB2YwAmhjTmtcd6ofBQH",
   "shadow-color": "rgba(0, 0, 0, 0.5)",
 }
 `;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "shadow": "_shadow",
-  "shadow-color": "rgba(0, 0, 0, 0.5)",
+exports[`modules case \`values-8\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._3fhB2YwAmhjTmtcd6ofBQH {
+  box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5),
+    10px 0px 5px rgba(0, 0, 0, 0.5);
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-8\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-8\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-9\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -5073,17 +5481,17 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`global)\`: locals 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`global)\`: locals 1`] = `
 Object {
   "def": "red",
 }
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -5120,52 +5528,99 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`local)\`: locals 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`local)\`: locals 1`] = `
 Object {
   "def": "red",
-  "foo1": "_foo1",
-  "foo2": "_foo2",
-  "foo3": "_foo3",
-  "foo4": "_foo4",
-  "foo5": "_foo5",
-  "foo6": "_foo6",
-  "foo7": "_foo7",
+  "foo1": "_1V2U7x4U8oxxooLcDA25iL",
+  "foo2": "_3E1mOwwzg7yDREAM1sTqrf",
+  "foo3": "_1jURUggvUGFLzQ1zAWjNep",
+  "foo4": "_2gTeanreYt1oKNw6pvYDuQ",
+  "foo5": "_1FHimE7YIOvZ66qJzb5oD7",
+  "foo6": "_2ZsNKxzBYz6NW_ITMiAbSo",
+  "foo7": "_18TpSE38_jlCbLotZMXh67",
 }
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
-    "._foo1 {
+    "._1V2U7x4U8oxxooLcDA25iL {
   prop: func(red);
 }
 
-._foo2 {
+._3E1mOwwzg7yDREAM1sTqrf {
   prop: func(10px red);
 }
 
-._foo3 {
+._1jURUggvUGFLzQ1zAWjNep {
   prop: func(red 10px);
 }
 
-._foo4 {
+._2gTeanreYt1oKNw6pvYDuQ {
   prop: func(10px red 10px);
 }
 
-._foo5 {
+._1FHimE7YIOvZ66qJzb5oD7 {
   prop: func(10px, red);
 }
 
-._foo6 {
+._2ZsNKxzBYz6NW_ITMiAbSo {
   prop: func(red, 10px);
 }
 
-._foo7 {
+._18TpSE38_jlCbLotZMXh67 {
+  prop: func(10px, red, 10px);
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-9\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
+Object {
+  "def": "red",
+}
+`;
+
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".foo1 {
+  prop: func(red);
+}
+
+.foo2 {
+  prop: func(10px red);
+}
+
+.foo3 {
+  prop: func(red 10px);
+}
+
+.foo4 {
+  prop: func(10px red 10px);
+}
+
+.foo5 {
+  prop: func(10px, red);
+}
+
+.foo6 {
+  prop: func(red, 10px);
+}
+
+.foo7 {
   prop: func(10px, red, 10px);
 }
 ",
@@ -5174,11 +5629,11 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`true)\`: locals 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
 Object {
   "def": "red",
   "foo1": "_foo1",
@@ -5191,7 +5646,7 @@ Object {
 }
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
 Array [
   Array [
     1,
@@ -5228,92 +5683,300 @@ Array [
 ]
 `;
 
-exports[`modules case \`values-9\`: (export \`all\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`false)\`: module (evaluated) 1`] = `Object {}`;
-
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
-
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
-
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`global)\`: locals 1`] = `undefined`;
-
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
+exports[`modules case \`values-9\` (\`modules\` value is \`true)\`: locals 1`] = `
 Object {
   "def": "red",
+  "foo1": "_1V2U7x4U8oxxooLcDA25iL",
+  "foo2": "_3E1mOwwzg7yDREAM1sTqrf",
+  "foo3": "_1jURUggvUGFLzQ1zAWjNep",
+  "foo4": "_2gTeanreYt1oKNw6pvYDuQ",
+  "foo5": "_1FHimE7YIOvZ66qJzb5oD7",
+  "foo6": "_2ZsNKxzBYz6NW_ITMiAbSo",
+  "foo7": "_18TpSE38_jlCbLotZMXh67",
 }
 `;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1V2U7x4U8oxxooLcDA25iL {
+  prop: func(red);
+}
+
+._3E1mOwwzg7yDREAM1sTqrf {
+  prop: func(10px red);
+}
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+._1jURUggvUGFLzQ1zAWjNep {
+  prop: func(red 10px);
+}
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`local)\`: locals 1`] = `undefined`;
+._2gTeanreYt1oKNw6pvYDuQ {
+  prop: func(10px red 10px);
+}
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
-Object {
-  "def": "red",
-  "foo1": "_foo1",
-  "foo2": "_foo2",
-  "foo3": "_foo3",
-  "foo4": "_foo4",
-  "foo5": "_foo5",
-  "foo6": "_foo6",
-  "foo7": "_foo7",
+._1FHimE7YIOvZ66qJzb5oD7 {
+  prop: func(10px, red);
+}
+
+._2ZsNKxzBYz6NW_ITMiAbSo {
+  prop: func(red, 10px);
+}
+
+._18TpSE38_jlCbLotZMXh67 {
+  prop: func(10px, red, 10px);
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-9\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+exports[`modules case \`values-10\` (\`modules\` value is \`false)\`: errors 1`] = `Array []`;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`true)\`: locals 1`] = `undefined`;
+exports[`modules case \`values-10\` (\`modules\` value is \`false)\`: locals 1`] = `undefined`;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
-Object {
-  "def": "red",
-  "foo1": "_foo1",
-  "foo2": "_foo2",
-  "foo3": "_foo3",
-  "foo4": "_foo4",
-  "foo5": "_foo5",
-  "foo6": "_foo6",
-  "foo7": "_foo7",
+exports[`modules case \`values-10\` (\`modules\` value is \`false)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "@value v-primary: #BF4040;
+@value s-black: black-selector;
+@value m-large: (min-width: 960px);
+
+.header {
+  color: v-primary;
+  padding: 0 10px;
+}
+
+.s-black {
+  color: black;
+}
+
+@media m-large {
+  .header {
+    padding: 0 20px;
+  }
 }
+",
+    "",
+  ],
+]
 `;
 
-exports[`modules case \`values-9\`: (export \`only locals\`) (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+exports[`modules case \`values-10\` (\`modules\` value is \`false)\`: warnings 1`] = `Array []`;
 
-exports[`modules composes should supports resolving: errors 1`] = `Array []`;
+exports[`modules case \`values-10\` (\`modules\` value is \`global)\`: errors 1`] = `Array []`;
 
-exports[`modules composes should supports resolving: module (evaluated) 1`] = `
+exports[`modules case \`values-10\` (\`modules\` value is \`global)\`: locals 1`] = `
+Object {
+  "m-large": "(min-width: 960px)",
+  "s-black": "black-selector",
+  "v-primary": "#BF4040",
+}
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`global)\`: module (evaluated) 1`] = `
 Array [
   Array [
-    2,
-    "._2Nehoi0wFTN-8p0fEfvUYd {
-  d: d;
+    1,
+    ".header {
+  color: #BF4040;
+  padding: 0 10px;
+}
+
+.black-selector {
+  color: black;
+}
+
+@media (min-width: 960px) {
+  .header {
+    padding: 0 20px;
+  }
 }
 ",
-    "(min-width: 100px)",
+    "",
   ],
+]
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`global)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`local)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`local)\`: locals 1`] = `
+Object {
+  "black-selector": "_3xId28FIeFVmNWx5IWeWqN",
+  "header": "ODvOrT6QaJbrNxuVwTgHn",
+  "m-large": "(min-width: 960px)",
+  "s-black": "black-selector",
+  "v-primary": "#BF4040",
+}
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`local)\`: module (evaluated) 1`] = `
+Array [
   Array [
-    3,
+    1,
+    ".ODvOrT6QaJbrNxuVwTgHn {
+  color: #BF4040;
+  padding: 0 10px;
+}
+
+._3xId28FIeFVmNWx5IWeWqN {
+  color: black;
+}
+
+@media (min-width: 960px) {
+  .ODvOrT6QaJbrNxuVwTgHn {
+    padding: 0 20px;
+  }
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode global)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode global)\`: locals 1`] = `
+Object {
+  "m-large": "(min-width: 960px)",
+  "s-black": "black-selector",
+  "v-primary": "#BF4040",
+}
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode global)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".header {
+  color: #BF4040;
+  padding: 0 10px;
+}
+
+.black-selector {
+  color: black;
+}
+
+@media (min-width: 960px) {
+  .header {
+    padding: 0 20px;
+  }
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode global)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode local)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode local)\`: locals 1`] = `
+Object {
+  "black-selector": "_black-selector",
+  "header": "_header",
+  "m-large": "(min-width: 960px)",
+  "s-black": "black-selector",
+  "v-primary": "#BF4040",
+}
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode local)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._header {
+  color: #BF4040;
+  padding: 0 10px;
+}
+
+._black-selector {
+  color: black;
+}
+
+@media (min-width: 960px) {
+  ._header {
+    padding: 0 20px;
+  }
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`object with mode local)\`: warnings 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`true)\`: errors 1`] = `Array []`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`true)\`: locals 1`] = `
+Object {
+  "black-selector": "_3xId28FIeFVmNWx5IWeWqN",
+  "header": "ODvOrT6QaJbrNxuVwTgHn",
+  "m-large": "(min-width: 960px)",
+  "s-black": "black-selector",
+  "v-primary": "#BF4040",
+}
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`true)\`: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".ODvOrT6QaJbrNxuVwTgHn {
+  color: #BF4040;
+  padding: 0 10px;
+}
+
+._3xId28FIeFVmNWx5IWeWqN {
+  color: black;
+}
+
+@media (min-width: 960px) {
+  .ODvOrT6QaJbrNxuVwTgHn {
+    padding: 0 20px;
+  }
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules case \`values-10\` (\`modules\` value is \`true)\`: warnings 1`] = `Array []`;
+
+exports[`modules composes should supports resolving: errors 1`] = `Array []`;
+
+exports[`modules composes should supports resolving: module (evaluated) 1`] = `
+Array [
+  Array [
+    2,
     "
 ",
     "",
   ],
   Array [
-    4,
+    3,
     "
 ",
     "",
   ],
   Array [
-    5,
+    4,
     "._22ETk3ZhhvjVe-4dAULcsF {
   display: block;
 }
@@ -5321,7 +5984,7 @@ Array [
     "",
   ],
   Array [
-    6,
+    5,
     ".dSGVakTZ8YY-XNW64tg9F {
   display: inline;
 }
@@ -5329,7 +5992,7 @@ Array [
     "",
   ],
   Array [
-    7,
+    6,
     "._1SUuyapRQ82dAPS8r7zmpY {
   display: flex;
 }
@@ -5337,7 +6000,7 @@ Array [
     "",
   ],
   Array [
-    8,
+    7,
     "._2n5szs-7uGKzfFTp9NTK64 {
   display: inline-block;
 }
@@ -5345,13 +6008,21 @@ Array [
     "",
   ],
   Array [
-    9,
+    8,
     "._37nzOIvIANGnEtP1lWjZDN {
   display: table;
 }
 ",
     "",
   ],
+  Array [
+    9,
+    "._2Nehoi0wFTN-8p0fEfvUYd {
+  d: d;
+}
+",
+    "(min-width: 100px)",
+  ],
   Array [
     1,
     "._14uFt0lIVKKAlKTTT29IIQ {
@@ -5398,6 +6069,69 @@ Array [
 ._26Jdfenl9Xn8HXwb2jipvt {
   color: gainsboro;
 }
+
+._1ya4VhsDkuPhQeVHQydw2Y {
+  color: #BF4040;
+}
+
+.sGE1Q_LliVEZU2Q4q9j4K {
+  color: black;
+}
+
+@media (min-width: 960px) {
+  ._2zSMJ4hQh0FesbZjiKW_ya {
+    padding: 0 20px;
+  }
+}
+
+.white {
+  color: white;
+}
+
+@media (min-width: 320px) {
+  ._2zSMJ4hQh0FesbZjiKW_ya {
+    padding: 20px 20px;
+  }
+}
+@value v-comment: /* comment */;
+
+._3qS0_85PLYhk_pNQ69KfSo {
+  v-ident: validIdent;
+  v-pre-defined-ident: left;
+  v-string: 'content';
+  v-string-1: '';
+  v-url: url(https://www.exammple.com/images/my-background.png);
+  v-url-1: url('https://www.exammple.com/images/my-background.png');
+  v-url-2: url(\\"https://www.exammple.com/images/my-background.png\\");
+  v-integer: 100;
+  v-integer-1: -100;
+  v-integer-2: +100;
+  v-number: .60;
+  v-number-1: -456.8;
+  v-number-2: -3.4e-2;
+  v-dimension: 12px;
+  v-percentage: 100%;
+  v-hex: #fff;
+  v-comment: v-comment 10px v-comment;
+  v-function: rgb(0,0,0);
+  v-unicode-range: U+0025-00FF;
+  mutliple: #fff .60 100%;
+}
+
+
+a {
+  content: 'content';
+}
+
+@supports (content: 'content') {
+  a {
+    content: 'content';
+  }
+}
+
+[class~='content'] {
+  color:green;
+}
 ",
     "",
   ],
@@ -5407,7 +6141,6 @@ Array [
 exports[`modules composes should supports resolving: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
-exports.i(require(\\"-!../../../src/index.js??ref--4-0!./test-other.css\\"), \\"(min-width: 100px)\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./values.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./something.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported-simple.css\\"), \\"\\");
@@ -5415,26 +6148,54 @@ exports.i(require(\\"-!../../../src/index.js??ref--4-0!./relative.css\\"), \\"\\
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!../modules/top-relative.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/style.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesComposes/alias.css\\"), \\"\\");
-
+exports.i(require(\\"-!../../../src/index.js??ref--4-0!./test-other.css\\"), \\"(min-width: 100px)\\");
 // Module
-exports.push([module.id, \\"._14uFt0lIVKKAlKTTT29IIQ {\\\\n  color: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"def\\"] + \\";\\\\n}\\\\n\\\\n._3XDgIzfUIQkaUInpEdo7fN {\\\\n  color: blue;\\\\n}\\\\n\\\\n._1wABXM_RabWHj--wsPrhvM {\\\\n  display: block;\\\\n}\\\\n\\\\n._1DFEYnAfn9LZyk4fErI86e {\\\\n  width: \\" + require(\\"-!../../../src/index.js??ref--4-0!./something.css\\").locals[\\"something\\"] + \\";\\\\n}\\\\n\\\\n.Ywv5coVC2RU-pIFhN9O4w {\\\\n  color: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"other\\"] + \\";\\\\n}\\\\n\\\\n._1tAbIwITRWAdZZE6wKNk9O {\\\\n  prop: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"def\\"] + \\";\\\\n  duplicate: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"other\\"] + \\";\\\\n}\\\\n\\\\n.Q3SQ3BwtBwUFLlg6adzOI {\\\\n  color: red;\\\\n}\\\\n\\\\n._1n5XhXj4SFnYrwziC3un0d {\\\\n  color: yellow;\\\\n}\\\\n\\\\n._3dnFnGkAVAiMA6etF-naHc {\\\\n  color: gray;\\\\n}\\\\n\\\\n._1xUePnlnafMQ1cExy3PUWT {\\\\n  color: gray;\\\\n}\\\\n\\\\n._26Jdfenl9Xn8HXwb2jipvt {\\\\n  color: gainsboro;\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\"._14uFt0lIVKKAlKTTT29IIQ {\\\\n  color: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-def\\"] + \\";\\\\n}\\\\n\\\\n._3XDgIzfUIQkaUInpEdo7fN {\\\\n  color: blue;\\\\n}\\\\n\\\\n._1wABXM_RabWHj--wsPrhvM {\\\\n  display: block;\\\\n}\\\\n\\\\n._1DFEYnAfn9LZyk4fErI86e {\\\\n  width: \\" + require(\\"-!../../../src/index.js??ref--4-0!./something.css\\").locals[\\"v-something\\"] + \\";\\\\n}\\\\n\\\\n.Ywv5coVC2RU-pIFhN9O4w {\\\\n  color: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-other\\"] + \\";\\\\n}\\\\n\\\\n._1tAbIwITRWAdZZE6wKNk9O {\\\\n  prop: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-def\\"] + \\";\\\\n  duplicate: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-other\\"] + \\";\\\\n}\\\\n\\\\n.Q3SQ3BwtBwUFLlg6adzOI {\\\\n  color: red;\\\\n}\\\\n\\\\n._1n5XhXj4SFnYrwziC3un0d {\\\\n  color: yellow;\\\\n}\\\\n\\\\n._3dnFnGkAVAiMA6etF-naHc {\\\\n  color: gray;\\\\n}\\\\n\\\\n._1xUePnlnafMQ1cExy3PUWT {\\\\n  color: gray;\\\\n}\\\\n\\\\n._26Jdfenl9Xn8HXwb2jipvt {\\\\n  color: gainsboro;\\\\n}\\\\n\\\\n._1ya4VhsDkuPhQeVHQydw2Y {\\\\n  color: #BF4040;\\\\n}\\\\n\\\\n.sGE1Q_LliVEZU2Q4q9j4K {\\\\n  color: black;\\\\n}\\\\n\\\\n@media (min-width: 960px) {\\\\n  ._2zSMJ4hQh0FesbZjiKW_ya {\\\\n    padding: 0 20px;\\\\n  }\\\\n}\\\\n\\\\n.\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"s-white\\"] + \\" {\\\\n  color: white;\\\\n}\\\\n\\\\n@media \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"m-small\\"] + \\" {\\\\n  ._2zSMJ4hQh0FesbZjiKW_ya {\\\\n    padding: 20px 20px;\\\\n  }\\\\n}\\\\n@value v-comment: /* comment */;\\\\n\\\\n._3qS0_85PLYhk_pNQ69KfSo {\\\\n  v-ident: validIdent;\\\\n  v-pre-defined-ident: left;\\\\n  v-string: 'content';\\\\n  v-string-1: '';\\\\n  v-url: url(https://www.exammple.com/images/my-background.png);\\\\n  v-url-1: url('https://www.exammple.com/images/my-background.png');\\\\n  v-url-2: url(\\\\\\"https://www.exammple.com/images/my-background.png\\\\\\");\\\\n  v-integer: 100;\\\\n  v-integer-1: -100;\\\\n  v-integer-2: +100;\\\\n  v-number: .60;\\\\n  v-number-1: -456.8;\\\\n  v-number-2: -3.4e-2;\\\\n  v-dimension: 12px;\\\\n  v-percentage: 100%;\\\\n  v-hex: #fff;\\\\n  v-comment: v-comment 10px v-comment;\\\\n  v-function: rgb(0,0,0);\\\\n  v-unicode-range: U+0025-00FF;\\\\n  mutliple: #fff .60 100%;\\\\n}\\\\n\\\\n\\\\na {\\\\n  content: 'content';\\\\n}\\\\n\\\\n@supports (content: 'content') {\\\\n  a {\\\\n    content: 'content';\\\\n  }\\\\n}\\\\n\\\\n[class~='content'] {\\\\n  color:green;\\\\n}\\\\n\\", \\"\\"]);
 // Exports
 exports.locals = {
-	\\"def\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"def\\"] + \\"\\",
-	\\"other\\": \\"_1wABXM_RabWHj--wsPrhvM\\",
-	\\"something\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./something.css\\").locals[\\"something\\"] + \\"\\",
-	\\"foo\\": \\"_1tAbIwITRWAdZZE6wKNk9O\\",
-	\\"bar\\": \\"block\\",
+	\\"v-def\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-def\\"] + \\"\\",
+	\\"v-other\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-other\\"] + \\"\\",
+	\\"s-white\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"s-white\\"] + \\"\\",
+	\\"m-small\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"m-small\\"] + \\"\\",
+	\\"v-something\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./something.css\\").locals[\\"v-something\\"] + \\"\\",
+	\\"v-foo\\": \\"blue\\",
+	\\"v-bar\\": \\"block\\",
+	\\"v-primary\\": \\"#BF4040\\",
+	\\"s-black\\": \\"black-selector\\",
+	\\"m-large\\": \\"(min-width: 960px)\\",
+	\\"v-ident\\": \\"validIdent\\",
+	\\"v-pre-defined-ident\\": \\"left\\",
+	\\"v-string\\": \\"'content'\\",
+	\\"v-string-1\\": \\"''\\",
+	\\"v-url\\": \\"url(https://www.exammple.com/images/my-background.png)\\",
+	\\"v-url-1\\": \\"url('https://www.exammple.com/images/my-background.png')\\",
+	\\"v-url-2\\": \\"url(\\\\\\"https://www.exammple.com/images/my-background.png\\\\\\")\\",
+	\\"v-integer\\": \\"100\\",
+	\\"v-integer-1\\": \\"-100\\",
+	\\"v-integer-2\\": \\"+100\\",
+	\\"v-number\\": \\".60\\",
+	\\"v-number-1\\": \\"-456.8\\",
+	\\"v-number-2\\": \\"-3.4e-2\\",
+	\\"v-dimension\\": \\"12px\\",
+	\\"v-percentage\\": \\"100%\\",
+	\\"v-hex\\": \\"#fff\\",
+	\\"v-function\\": \\"rgb(0,0,0)\\",
+	\\"v-unicode-range\\": \\"U+0025-00FF\\",
 	\\"ghi\\": \\"_14uFt0lIVKKAlKTTT29IIQ\\",
 	\\"class\\": \\"_3XDgIzfUIQkaUInpEdo7fN\\",
+	\\"other\\": \\"_1wABXM_RabWHj--wsPrhvM\\",
 	\\"other-other\\": \\"_1DFEYnAfn9LZyk4fErI86e\\",
 	\\"green\\": \\"Ywv5coVC2RU-pIFhN9O4w\\",
+	\\"foo\\": \\"_1tAbIwITRWAdZZE6wKNk9O\\",
 	\\"simple\\": \\"Q3SQ3BwtBwUFLlg6adzOI \\" + require(\\"-!../../../src/index.js??ref--4-0!./imported-simple.css\\").locals[\\"imported-simple\\"] + \\"\\",
 	\\"relative\\": \\"_1n5XhXj4SFnYrwziC3un0d \\" + require(\\"-!../../../src/index.js??ref--4-0!./relative.css\\").locals[\\"imported-relative\\"] + \\"\\",
 	\\"top-relative\\": \\"_3dnFnGkAVAiMA6etF-naHc \\" + require(\\"-!../../../src/index.js??ref--4-0!../modules/top-relative.css\\").locals[\\"imported-relative\\"] + \\"\\",
 	\\"module\\": \\"_1xUePnlnafMQ1cExy3PUWT \\" + require(\\"-!../../../src/index.js??ref--4-0!package/style.css\\").locals[\\"imported-module\\"] + \\"\\",
-	\\"alias\\": \\"_26Jdfenl9Xn8HXwb2jipvt \\" + require(\\"-!../../../src/index.js??ref--4-0!aliasesComposes/alias.css\\").locals[\\"imported-alias\\"] + \\"\\"
+	\\"alias\\": \\"_26Jdfenl9Xn8HXwb2jipvt \\" + require(\\"-!../../../src/index.js??ref--4-0!aliasesComposes/alias.css\\").locals[\\"imported-alias\\"] + \\"\\",
+	\\"primary-selector\\": \\"_1ya4VhsDkuPhQeVHQydw2Y\\",
+	\\"black-selector\\": \\"sGE1Q_LliVEZU2Q4q9j4K\\",
+	\\"header\\": \\"_2zSMJ4hQh0FesbZjiKW_ya\\",
+	\\"foobarbaz\\": \\"_3qS0_85PLYhk_pNQ69KfSo\\"
 };"
 `;
 
@@ -5463,10 +6224,8 @@ exports[`modules issue #286: module 1`] = `
 "exports = module.exports = require(\\"../../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"./dep.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".b--main { }\\\\n\\", \\"\\"]);
-
 // Exports
 exports.locals = {
 	\\"main\\": \\"b--main \\" + require(\\"./dep.css\\").locals[\\"red\\"] + \\"\\"
@@ -5499,10 +6258,8 @@ exports[`modules issue #636: module 1`] = `
 "exports = module.exports = require(\\"../../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../../src/index.js??ref--4-0!../../../../node_modules/sass-loader/lib/loader.js??ref--4-1!./foo.scss\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\".prefix-bar {\\\\n}\\", \\"\\"]);
-
 // Exports
 exports.locals = {
 	\\"bar\\": \\"prefix-bar \\" + require(\\"-!../../../../src/index.js??ref--4-0!../../../../node_modules/sass-loader/lib/loader.js??ref--4-1!./foo.scss\\").locals[\\"foo\\"] + \\"\\"
@@ -5557,10 +6314,8 @@ exports[`modules issue #861: module 1`] = `
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!@localpackage/color.css\\"), \\"\\");
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!@localpackage/style.css\\"), \\"\\");
-
 // Module
 exports.push([module.id, \\"._2gV2e6TcHcPgyDTzxbvkKa {\\\\n  color: \\" + require(\\"-!../../../src/index.js??ref--4-0!@localpackage/color.css\\").locals[\\"color-grey\\"] + \\";\\\\n  margin: 0;\\\\n  padding: 0;\\\\n}\\\\n\\", \\"\\"]);
-
 // Exports
 exports.locals = {
 	\\"color-grey\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!@localpackage/color.css\\").locals[\\"color-grey\\"] + \\"\\",
@@ -5569,3 +6324,1525 @@ exports.locals = {
 `;
 
 exports[`modules issue #861: warnings 1`] = `Array []`;
+
+exports[`modules should accepts all arguments for getLocalIdent option: errors 1`] = `Array []`;
+
+exports[`modules should accepts all arguments for getLocalIdent option: locals 1`] = `
+Object {
+  "abc": "foo",
+  "def": "foo",
+  "ghi": "foo",
+  "jkl": "foo",
+}
+`;
+
+exports[`modules should accepts all arguments for getLocalIdent option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".foo .foo {
+  color: red;
+}
+
+.foo .foo {
+  color: blue;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should accepts all arguments for getLocalIdent option: warnings 1`] = `Array []`;
+
+exports[`modules should correctly replace escaped symbols in selector with localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should correctly replace escaped symbols in selector with localIdentName option: locals 1`] = `
+Object {
+  "#": "#--1cQh",
+  "##": "##--1u97",
+  "#.#.#": "#.#.#--2QoP",
+  "#fake-id": "#fake-id--1d23",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--2vJ9",
+  "-a-b-c-": "-a-b-c---opia",
+  "-a0-34a___f": "-a0-34a___f--2nJ5",
+  ".": ".--2hyg",
+  "123": "123--jOxY",
+  "1a2b3c": "1a2b3c--1_Xs",
+  ":)": ":)--2tSN",
+  ":\`(": ":\`(--3G_T",
+  ":hover": ":hover--1EAJ",
+  ":hover:focus:active": ":hover:focus:active--1v8f",
+  "<><<<>><>": "<><<<>><>--2mic",
+  "<p>": "<p>--dDVm",
+  "?": "?--2DX4",
+  "@": "@--mE1z",
+  "B&W?": "B&W?--1s8i",
+  "[attr=value]": "[attr=value]--2y3U",
+  "_": "_--2vOX",
+  "_test": "_test--23te",
+  "className": "className--1E8H",
+  "f!o!o": "f!o!o--3x3B",
+  "f'o'o": "f'o'o--2fVl",
+  "f*o*o": "f*o*o--3sRc",
+  "f+o+o": "f+o+o--38BA",
+  "f/o/o": "f/o/o--OYOz",
+  "f\\\\o\\\\o": "f\\\\o\\\\o--1Knj",
+  "foo.bar": "foo.bar--3ZJa",
+  "foo/bar": "foo/bar--36uD",
+  "foo/bar/baz": "foo/bar/baz--oTEb",
+  "foo\\\\bar": "foo\\\\bar--2KL0",
+  "foo\\\\bar\\\\baz": "foo\\\\bar\\\\baz--2Id2",
+  "f~o~o": "f~o~o--lYb3",
+  "m_x_@": "m_x_@--2G3b",
+  "someId": "someId--3w7J",
+  "subClass": "subClass--3lo0",
+  "test": "test--NW9Y",
+  "{}": "{}--3lRh",
+  "©": "©--143H",
+  "“‘’”": "“‘’”--2yW9",
+  "⌘⌥": "⌘⌥--6z9v",
+  "☺☃": "☺☃--3sW7",
+  "♥": "♥--8xlN",
+  "𝄞♪♩♫♬": "𝄞♪♩♫♬--1JEq",
+  "💩": "💩--2i25",
+}
+`;
+
+exports[`modules should correctly replace escaped symbols in selector with localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".test--NW9Y {
+  background: red;
+}
+
+._test--23te {
+  background: blue;
+}
+
+.className--1E8H {
+  background: red;
+}
+
+#someId--3w7J {
+  background: green;
+}
+
+.className--1E8H .subClass--3lo0 {
+  color: green;
+}
+
+#someId--3w7J .subClass--3lo0 {
+  color: blue;
+}
+
+.-a0-34a___f--2nJ5 {
+  color: red;
+}
+
+.m_x_\\\\@--2G3b {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.B\\\\&W\\\\?--1s8i {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+.\\\\3A \\\\\`\\\\(--3G_T {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+.\\\\31 a2b3c--1_Xs {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#\\\\#fake-id--1d23 {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#-a-b-c---opia {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#©--143H {
+  color: black;
+}
+
+.♥--8xlN { background: lime; }
+.©--143H { background: lime; }
+.“‘’”--2yW9 { background: lime; }
+.☺☃--3sW7 { background: lime; }
+.⌘⌥--6z9v { background: lime; }
+.𝄞♪♩♫♬--1JEq { background: lime; }
+.💩--2i25 { background: lime; }
+.\\\\?--2DX4 { background: lime; }
+.\\\\@--mE1z { background: lime; }
+.\\\\.--2hyg { background: lime; }
+.\\\\3A \\\\)--2tSN { background: lime; }
+.\\\\3A \\\\\`\\\\(--3G_T { background: lime; }
+.\\\\31 23--jOxY { background: lime; }
+.\\\\31 a2b3c--1_Xs { background: lime; }
+.\\\\<p\\\\>--dDVm { background: lime; }
+.\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--2mic { background: lime; }
+.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--2vJ9 { background: lime; }
+.\\\\#--1cQh { background: lime; }
+.\\\\#\\\\#--1u97 { background: lime; }
+.\\\\#\\\\.\\\\#\\\\.\\\\#--2QoP { background: lime; }
+.\\\\_--2vOX { background: lime; }
+.\\\\{\\\\}--3lRh { background: lime; }
+.\\\\#fake\\\\-id--1d23 { background: lime; }
+.foo\\\\.bar--3ZJa { background: lime; }
+.\\\\3A hover--1EAJ { background: lime; }
+.\\\\3A hover\\\\3A focus\\\\3A active--1v8f { background: lime; }
+.\\\\[attr\\\\=value\\\\]--2y3U { background: lime; }
+.f\\\\/o\\\\/o--OYOz { background: lime; }
+.f\\\\\\\\o\\\\\\\\o--1Knj { background: lime; }
+.f\\\\*o\\\\*o--3sRc { background: lime; }
+.f\\\\!o\\\\!o--3x3B { background: lime; }
+.f\\\\'o\\\\'o--2fVl { background: lime; }
+.f\\\\~o\\\\~o--lYb3 { background: lime; }
+.f\\\\+o\\\\+o--38BA { background: lime; }
+
+.foo\\\\/bar--36uD {
+  background: hotpink;
+}
+
+.foo\\\\\\\\bar--2KL0 {
+  background: hotpink;
+}
+
+.foo\\\\/bar\\\\/baz--oTEb {
+  background: hotpink;
+}
+
+.foo\\\\\\\\bar\\\\\\\\baz--2Id2 {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should correctly replace escaped symbols in selector with localIdentName option: warnings 1`] = `Array []`;
+
+exports[`modules should prefixes leading hyphen + digit with underscore with localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should prefixes leading hyphen + digit with underscore with localIdentName option: locals 1`] = `
+Object {
+  "#": "_-1#",
+  "##": "_-1##",
+  "#.#.#": "_-1#.#.#",
+  "#fake-id": "_-1#fake-id",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_-1++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.",
+  "-a-b-c-": "_-1-a-b-c-",
+  "-a0-34a___f": "_-1-a0-34a___f",
+  ".": "_-1.",
+  "123": "_-1123",
+  "1a2b3c": "_-11a2b3c",
+  ":)": "_-1:)",
+  ":\`(": "_-1:\`(",
+  ":hover": "_-1:hover",
+  ":hover:focus:active": "_-1:hover:focus:active",
+  "<><<<>><>": "_-1<><<<>><>",
+  "<p>": "_-1<p>",
+  "?": "_-1?",
+  "@": "_-1@",
+  "B&W?": "_-1B&W?",
+  "[attr=value]": "_-1[attr=value]",
+  "_": "_-1_",
+  "_test": "_-1_test",
+  "className": "_-1className",
+  "f!o!o": "_-1f!o!o",
+  "f'o'o": "_-1f'o'o",
+  "f*o*o": "_-1f*o*o",
+  "f+o+o": "_-1f+o+o",
+  "f/o/o": "_-1f/o/o",
+  "f\\\\o\\\\o": "_-1f\\\\o\\\\o",
+  "foo.bar": "_-1foo.bar",
+  "foo/bar": "_-1foo/bar",
+  "foo/bar/baz": "_-1foo/bar/baz",
+  "foo\\\\bar": "_-1foo\\\\bar",
+  "foo\\\\bar\\\\baz": "_-1foo\\\\bar\\\\baz",
+  "f~o~o": "_-1f~o~o",
+  "m_x_@": "_-1m_x_@",
+  "someId": "_-1someId",
+  "subClass": "_-1subClass",
+  "test": "_-1test",
+  "{}": "_-1{}",
+  "©": "_-1©",
+  "“‘’”": "_-1“‘’”",
+  "⌘⌥": "_-1⌘⌥",
+  "☺☃": "_-1☺☃",
+  "♥": "_-1♥",
+  "𝄞♪♩♫♬": "_-1𝄞♪♩♫♬",
+  "💩": "_-1💩",
+}
+`;
+
+exports[`modules should prefixes leading hyphen + digit with underscore with localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._-1test {
+  background: red;
+}
+
+._-1_test {
+  background: blue;
+}
+
+._-1className {
+  background: red;
+}
+
+#_-1someId {
+  background: green;
+}
+
+._-1className ._-1subClass {
+  color: green;
+}
+
+#_-1someId ._-1subClass {
+  color: blue;
+}
+
+._-1-a0-34a___f {
+  color: red;
+}
+
+._-1m_x_\\\\@ {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+._-1B\\\\&W\\\\? {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+._-1\\\\3A \\\\\`\\\\( {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+._-1\\\\31 a2b3c {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#_-1\\\\#fake-id {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#_-1-a-b-c- {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#_-1© {
+  color: black;
+}
+
+._-1♥ { background: lime; }
+._-1© { background: lime; }
+._-1“‘’” { background: lime; }
+._-1☺☃ { background: lime; }
+._-1⌘⌥ { background: lime; }
+._-1𝄞♪♩♫♬ { background: lime; }
+._-1💩 { background: lime; }
+._-1\\\\? { background: lime; }
+._-1\\\\@ { background: lime; }
+._-1\\\\. { background: lime; }
+._-1\\\\3A \\\\) { background: lime; }
+._-1\\\\3A \\\\\`\\\\( { background: lime; }
+._-1\\\\31 23 { background: lime; }
+._-1\\\\31 a2b3c { background: lime; }
+._-1\\\\<p\\\\> { background: lime; }
+._-1\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; }
+._-1\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; }
+._-1\\\\# { background: lime; }
+._-1\\\\#\\\\# { background: lime; }
+._-1\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; }
+._-1\\\\_ { background: lime; }
+._-1\\\\{\\\\} { background: lime; }
+._-1\\\\#fake\\\\-id { background: lime; }
+._-1foo\\\\.bar { background: lime; }
+._-1\\\\3A hover { background: lime; }
+._-1\\\\3A hover\\\\3A focus\\\\3A active { background: lime; }
+._-1\\\\[attr\\\\=value\\\\] { background: lime; }
+._-1f\\\\/o\\\\/o { background: lime; }
+._-1f\\\\\\\\o\\\\\\\\o { background: lime; }
+._-1f\\\\*o\\\\*o { background: lime; }
+._-1f\\\\!o\\\\!o { background: lime; }
+._-1f\\\\'o\\\\'o { background: lime; }
+._-1f\\\\~o\\\\~o { background: lime; }
+._-1f\\\\+o\\\\+o { background: lime; }
+
+._-1foo\\\\/bar {
+  background: hotpink;
+}
+
+._-1foo\\\\\\\\bar {
+  background: hotpink;
+}
+
+._-1foo\\\\/bar\\\\/baz {
+  background: hotpink;
+}
+
+._-1foo\\\\\\\\bar\\\\\\\\baz {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should prefixes leading hyphen + digit with underscore with localIdentName option: warnings 1`] = `Array []`;
+
+exports[`modules should prefixes two leading hyphens with underscore with localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should prefixes two leading hyphens with underscore with localIdentName option: locals 1`] = `
+Object {
+  "#": "_--#",
+  "##": "_--##",
+  "#.#.#": "_--#.#.#",
+  "#fake-id": "_--#fake-id",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.",
+  "-a-b-c-": "_---a-b-c-",
+  "-a0-34a___f": "_---a0-34a___f",
+  ".": "_--.",
+  "123": "_--123",
+  "1a2b3c": "_--1a2b3c",
+  ":)": "_--:)",
+  ":\`(": "_--:\`(",
+  ":hover": "_--:hover",
+  ":hover:focus:active": "_--:hover:focus:active",
+  "<><<<>><>": "_--<><<<>><>",
+  "<p>": "_--<p>",
+  "?": "_--?",
+  "@": "_--@",
+  "B&W?": "_--B&W?",
+  "[attr=value]": "_--[attr=value]",
+  "_": "_--_",
+  "_test": "_--_test",
+  "className": "_--className",
+  "f!o!o": "_--f!o!o",
+  "f'o'o": "_--f'o'o",
+  "f*o*o": "_--f*o*o",
+  "f+o+o": "_--f+o+o",
+  "f/o/o": "_--f/o/o",
+  "f\\\\o\\\\o": "_--f\\\\o\\\\o",
+  "foo.bar": "_--foo.bar",
+  "foo/bar": "_--foo/bar",
+  "foo/bar/baz": "_--foo/bar/baz",
+  "foo\\\\bar": "_--foo\\\\bar",
+  "foo\\\\bar\\\\baz": "_--foo\\\\bar\\\\baz",
+  "f~o~o": "_--f~o~o",
+  "m_x_@": "_--m_x_@",
+  "someId": "_--someId",
+  "subClass": "_--subClass",
+  "test": "_--test",
+  "{}": "_--{}",
+  "©": "_--©",
+  "“‘’”": "_--“‘’”",
+  "⌘⌥": "_--⌘⌥",
+  "☺☃": "_--☺☃",
+  "♥": "_--♥",
+  "𝄞♪♩♫♬": "_--𝄞♪♩♫♬",
+  "💩": "_--💩",
+}
+`;
+
+exports[`modules should prefixes two leading hyphens with underscore with localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._--test {
+  background: red;
+}
+
+._--_test {
+  background: blue;
+}
+
+._--className {
+  background: red;
+}
+
+#_--someId {
+  background: green;
+}
+
+._--className ._--subClass {
+  color: green;
+}
+
+#_--someId ._--subClass {
+  color: blue;
+}
+
+._---a0-34a___f {
+  color: red;
+}
+
+._--m_x_\\\\@ {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+._--B\\\\&W\\\\? {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+._--\\\\3A \\\\\`\\\\( {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+._--\\\\31 a2b3c {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#_--\\\\#fake-id {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#_---a-b-c- {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#_--© {
+  color: black;
+}
+
+._--♥ { background: lime; }
+._--© { background: lime; }
+._--“‘’” { background: lime; }
+._--☺☃ { background: lime; }
+._--⌘⌥ { background: lime; }
+._--𝄞♪♩♫♬ { background: lime; }
+._--💩 { background: lime; }
+._--\\\\? { background: lime; }
+._--\\\\@ { background: lime; }
+._--\\\\. { background: lime; }
+._--\\\\3A \\\\) { background: lime; }
+._--\\\\3A \\\\\`\\\\( { background: lime; }
+._--\\\\31 23 { background: lime; }
+._--\\\\31 a2b3c { background: lime; }
+._--\\\\<p\\\\> { background: lime; }
+._--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; }
+._--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; }
+._--\\\\# { background: lime; }
+._--\\\\#\\\\# { background: lime; }
+._--\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; }
+._--\\\\_ { background: lime; }
+._--\\\\{\\\\} { background: lime; }
+._--\\\\#fake\\\\-id { background: lime; }
+._--foo\\\\.bar { background: lime; }
+._--\\\\3A hover { background: lime; }
+._--\\\\3A hover\\\\3A focus\\\\3A active { background: lime; }
+._--\\\\[attr\\\\=value\\\\] { background: lime; }
+._--f\\\\/o\\\\/o { background: lime; }
+._--f\\\\\\\\o\\\\\\\\o { background: lime; }
+._--f\\\\*o\\\\*o { background: lime; }
+._--f\\\\!o\\\\!o { background: lime; }
+._--f\\\\'o\\\\'o { background: lime; }
+._--f\\\\~o\\\\~o { background: lime; }
+._--f\\\\+o\\\\+o { background: lime; }
+
+._--foo\\\\/bar {
+  background: hotpink;
+}
+
+._--foo\\\\\\\\bar {
+  background: hotpink;
+}
+
+._--foo\\\\/bar\\\\/baz {
+  background: hotpink;
+}
+
+._--foo\\\\\\\\bar\\\\\\\\baz {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should prefixes two leading hyphens with underscore with localIdentName option: warnings 1`] = `Array []`;
+
+exports[`modules should respects context option: errors 1`] = `Array []`;
+
+exports[`modules should respects context option: locals 1`] = `
+Object {
+  "#": "O8Yw611P",
+  "##": "_3er0DBiz",
+  "#.#.#": "_22RlZfs4",
+  "#fake-id": "_3i_zUQNU",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_3hmdGGWi",
+  "-a-b-c-": "_1cY1s7c1",
+  "-a0-34a___f": "_3RHUZpqp",
+  ".": "nfd9MoI8",
+  "123": "_3JQcZq0t",
+  "1a2b3c": "_3IsxVsEE",
+  ":)": "_3EKgIWue",
+  ":\`(": "_3oWIzQc7",
+  ":hover": "B2whyhV4",
+  ":hover:focus:active": "_3R7r57b4",
+  "<><<<>><>": "Tr9vNLcW",
+  "<p>": "_3Lowms-R",
+  "?": "mRRxxKEQ",
+  "@": "_3ZlTEPhx",
+  "B&W?": "_3d3wghvo",
+  "[attr=value]": "_3GgRcos7",
+  "_": "_2V6oBdW4",
+  "_test": "_3Q--BATR",
+  "className": "_3wBIH6Tw",
+  "f!o!o": "_2pDEJqK-",
+  "f'o'o": "_3297Sjlr",
+  "f*o*o": "MI6DPcI5",
+  "f+o+o": "_3aNwyLoj",
+  "f/o/o": "jbPgrxdZ",
+  "f\\\\o\\\\o": "_3x1WTWOH",
+  "foo.bar": "_2FVtFG40",
+  "foo/bar": "_13Q-TIeR",
+  "foo/bar/baz": "_1I8mGSan",
+  "foo\\\\bar": "LKTPJkpW",
+  "foo\\\\bar\\\\baz": "xcAsBCbt",
+  "f~o~o": "_1TY6Bok1",
+  "m_x_@": "_3SfN7O2q",
+  "someId": "mxosG-Ww",
+  "subClass": "_3jIM-zUk",
+  "test": "_1Os7JVOf",
+  "{}": "_2ZR3d8gm",
+  "©": "_3QaoFt--",
+  "“‘’”": "_3xI9AT1p",
+  "⌘⌥": "_1V-to4Of",
+  "☺☃": "uy8uve6R",
+  "♥": "kO1_7SYu",
+  "𝄞♪♩♫♬": "_1tfs0VJo",
+  "💩": "_2Cl61yWh",
+}
+`;
+
+exports[`modules should respects context option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    "._1Os7JVOf {
+  background: red;
+}
+
+._3Q--BATR {
+  background: blue;
+}
+
+._3wBIH6Tw {
+  background: red;
+}
+
+#mxosG-Ww {
+  background: green;
+}
+
+._3wBIH6Tw ._3jIM-zUk {
+  color: green;
+}
+
+#mxosG-Ww ._3jIM-zUk {
+  color: blue;
+}
+
+._3RHUZpqp {
+  color: red;
+}
+
+._3SfN7O2q {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+._3d3wghvo {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+._3oWIzQc7 {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+._3IsxVsEE {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#_3i_zUQNU {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#_1cY1s7c1 {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#_3QaoFt-- {
+  color: black;
+}
+
+.kO1_7SYu { background: lime; }
+._3QaoFt-- { background: lime; }
+._3xI9AT1p { background: lime; }
+.uy8uve6R { background: lime; }
+._1V-to4Of { background: lime; }
+._1tfs0VJo { background: lime; }
+._2Cl61yWh { background: lime; }
+.mRRxxKEQ { background: lime; }
+._3ZlTEPhx { background: lime; }
+.nfd9MoI8 { background: lime; }
+._3EKgIWue { background: lime; }
+._3oWIzQc7 { background: lime; }
+._3JQcZq0t { background: lime; }
+._3IsxVsEE { background: lime; }
+._3Lowms-R { background: lime; }
+.Tr9vNLcW { background: lime; }
+._3hmdGGWi { background: lime; }
+.O8Yw611P { background: lime; }
+._3er0DBiz { background: lime; }
+._22RlZfs4 { background: lime; }
+._2V6oBdW4 { background: lime; }
+._2ZR3d8gm { background: lime; }
+._3i_zUQNU { background: lime; }
+._2FVtFG40 { background: lime; }
+.B2whyhV4 { background: lime; }
+._3R7r57b4 { background: lime; }
+._3GgRcos7 { background: lime; }
+.jbPgrxdZ { background: lime; }
+._3x1WTWOH { background: lime; }
+.MI6DPcI5 { background: lime; }
+._2pDEJqK- { background: lime; }
+._3297Sjlr { background: lime; }
+._1TY6Bok1 { background: lime; }
+._3aNwyLoj { background: lime; }
+
+._13Q-TIeR {
+  background: hotpink;
+}
+
+.LKTPJkpW {
+  background: hotpink;
+}
+
+._1I8mGSan {
+  background: hotpink;
+}
+
+.xcAsBCbt {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should respects context option: warnings 1`] = `Array []`;
+
+exports[`modules should respects getLocalIdent option (global mode): errors 1`] = `Array []`;
+
+exports[`modules should respects getLocalIdent option (global mode): locals 1`] = `
+Object {
+  "abc": "foo",
+  "def": "foo",
+  "ghi": "foo",
+  "jkl": "foo",
+}
+`;
+
+exports[`modules should respects getLocalIdent option (global mode): module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".foo .foo {
+  color: red;
+}
+
+.foo .foo {
+  color: blue;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should respects getLocalIdent option (global mode): warnings 1`] = `Array []`;
+
+exports[`modules should respects getLocalIdent option (local mode): errors 1`] = `Array []`;
+
+exports[`modules should respects getLocalIdent option (local mode): locals 1`] = `
+Object {
+  "abc": "foo",
+  "def": "foo",
+  "ghi": "foo",
+  "jkl": "foo",
+}
+`;
+
+exports[`modules should respects getLocalIdent option (local mode): module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".foo .foo {
+  color: red;
+}
+
+.foo .foo {
+  color: blue;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should respects getLocalIdent option (local mode): warnings 1`] = `Array []`;
+
+exports[`modules should respects hashPrefix option with localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should respects hashPrefix option with localIdentName option: locals 1`] = `
+Object {
+  "#": "#--8caa1febb853c79bc5740a51d69b0603",
+  "##": "##--e6e70cede894cf8ecef86891b00438fa",
+  "#.#.#": "#.#.#--f93b20473b91262c9634348506fe36fe",
+  "#fake-id": "#fake-id--a0d1d29b3c920aa3985fb11586f994e6",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--937528d96919903e5a5172d04ced259a",
+  "-a-b-c-": "-a-b-c---5b1d694462fbb9af324bb0ed2a08d755",
+  "-a0-34a___f": "-a0-34a___f--e99d667fe0ceff9363b011302ac3f508",
+  ".": ".--12cd2fe5f9c81510bf687df3b6461cb1",
+  "123": "123--e5bcdf25b52ca483d65894eae427ccff",
+  "1a2b3c": "1a2b3c--165cab18879cee9a48ae4cbb5fdd39a8",
+  ":)": ":)--2f61aa454a9e7fd205da87e665dff51b",
+  ":\`(": ":\`(--612466e663a46fe230e6db648089b4c4",
+  ":hover": ":hover--af8b669c2dc29371d450d428f0bfa5d2",
+  ":hover:focus:active": ":hover:focus:active--5c55d7a925c8ee5de2e8f175badce4d6",
+  "<><<<>><>": "<><<<>><>--ac5886bfd5b1a8264bdda01deaf52762",
+  "<p>": "<p>--c168cd4e00ec053d5bd509da80f5db38",
+  "?": "?--4f09eb0a56c6b8f25f7ef4def006df7e",
+  "@": "@--254139a6858615f890093da92bb4c90b",
+  "B&W?": "B&W?--8c20b8856e47b8157bf47451b1b6d9a6",
+  "[attr=value]": "[attr=value]--db83b30c2535d713bd9f8fd195909f24",
+  "_": "_--f18cdd3b2ff360c3f4c10cc7559ff003",
+  "_test": "_test--d745495d407559ef605c9072243801fd",
+  "className": "className--eab624d1bc6b9c6b6a4278d1030dd690",
+  "f!o!o": "f!o!o--ea3b21fd9d4327fbc9d8b949a2bd5823",
+  "f'o'o": "f'o'o--95fe160ec21a5b70221e47b09b21fcd2",
+  "f*o*o": "f*o*o--a5f60f217da867c314860c5b2e28bbfd",
+  "f+o+o": "f+o+o--1e99689a1b3985adff358f3bd4aea7ed",
+  "f/o/o": "f/o/o--5de918433a006304ca487065b8626dd4",
+  "f\\\\o\\\\o": "f\\\\o\\\\o--e9ae2e1857289425acfa40a3f741babd",
+  "foo.bar": "foo.bar--e1dfb05dd5c7c36228cc87fe2cd0c6b1",
+  "foo/bar": "foo/bar--5b852e67587217ab19651f30a9b4df53",
+  "foo/bar/baz": "foo/bar/baz--d917a2cf9531290fbf3aa43e0cc0520f",
+  "foo\\\\bar": "foo\\\\bar--6cf70ff94feb1257af10e9ddcc47d54f",
+  "foo\\\\bar\\\\baz": "foo\\\\bar\\\\baz--1900aa5b4b5b2443299cc5e8afa9b3b4",
+  "f~o~o": "f~o~o--b9707d2eae11417a88a3f638b64eca30",
+  "m_x_@": "m_x_@--de463fc45a1e6dd0ed23f26a568f1d61",
+  "someId": "someId--a0ce220cc9bbb1ee0e85cc0d1f0c6aa9",
+  "subClass": "subClass--2c82998be8a2b2e94ad7be56c9e685cd",
+  "test": "test--307c32aa793aaec9aecded85a9fdd448",
+  "{}": "{}--6db4a8e6a78415e8209253db0c3dd7c5",
+  "©": "©--074c8458dd077a052783bb5f4c5b5911",
+  "“‘’”": "“‘’”--00f526c32cd5eec8f5de2965f2ca9457",
+  "⌘⌥": "⌘⌥--c42685a7cfeb3b510a6d8169d58bf02d",
+  "☺☃": "☺☃--0ea31e7c348b5949a05bce4eebcb59eb",
+  "♥": "♥--37952b59a9aa684be1d91192f863babf",
+  "𝄞♪♩♫♬": "𝄞♪♩♫♬--ece85fb9868788feab6a8f1259b9ff9d",
+  "💩": "💩--1c19fe6dd9ca556af34bbda8a2cbbbdf",
+}
+`;
+
+exports[`modules should respects hashPrefix option with localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".test--307c32aa793aaec9aecded85a9fdd448 {
+  background: red;
+}
+
+._test--d745495d407559ef605c9072243801fd {
+  background: blue;
+}
+
+.className--eab624d1bc6b9c6b6a4278d1030dd690 {
+  background: red;
+}
+
+#someId--a0ce220cc9bbb1ee0e85cc0d1f0c6aa9 {
+  background: green;
+}
+
+.className--eab624d1bc6b9c6b6a4278d1030dd690 .subClass--2c82998be8a2b2e94ad7be56c9e685cd {
+  color: green;
+}
+
+#someId--a0ce220cc9bbb1ee0e85cc0d1f0c6aa9 .subClass--2c82998be8a2b2e94ad7be56c9e685cd {
+  color: blue;
+}
+
+.-a0-34a___f--e99d667fe0ceff9363b011302ac3f508 {
+  color: red;
+}
+
+.m_x_\\\\@--de463fc45a1e6dd0ed23f26a568f1d61 {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.B\\\\&W\\\\?--8c20b8856e47b8157bf47451b1b6d9a6 {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+.\\\\3A \\\\\`\\\\(--612466e663a46fe230e6db648089b4c4 {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+.\\\\31 a2b3c--165cab18879cee9a48ae4cbb5fdd39a8 {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#\\\\#fake-id--a0d1d29b3c920aa3985fb11586f994e6 {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#-a-b-c---5b1d694462fbb9af324bb0ed2a08d755 {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#©--074c8458dd077a052783bb5f4c5b5911 {
+  color: black;
+}
+
+.♥--37952b59a9aa684be1d91192f863babf { background: lime; }
+.©--074c8458dd077a052783bb5f4c5b5911 { background: lime; }
+.“‘’”--00f526c32cd5eec8f5de2965f2ca9457 { background: lime; }
+.☺☃--0ea31e7c348b5949a05bce4eebcb59eb { background: lime; }
+.⌘⌥--c42685a7cfeb3b510a6d8169d58bf02d { background: lime; }
+.𝄞♪♩♫♬--ece85fb9868788feab6a8f1259b9ff9d { background: lime; }
+.💩--1c19fe6dd9ca556af34bbda8a2cbbbdf { background: lime; }
+.\\\\?--4f09eb0a56c6b8f25f7ef4def006df7e { background: lime; }
+.\\\\@--254139a6858615f890093da92bb4c90b { background: lime; }
+.\\\\.--12cd2fe5f9c81510bf687df3b6461cb1 { background: lime; }
+.\\\\3A \\\\)--2f61aa454a9e7fd205da87e665dff51b { background: lime; }
+.\\\\3A \\\\\`\\\\(--612466e663a46fe230e6db648089b4c4 { background: lime; }
+.\\\\31 23--e5bcdf25b52ca483d65894eae427ccff { background: lime; }
+.\\\\31 a2b3c--165cab18879cee9a48ae4cbb5fdd39a8 { background: lime; }
+.\\\\<p\\\\>--c168cd4e00ec053d5bd509da80f5db38 { background: lime; }
+.\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--ac5886bfd5b1a8264bdda01deaf52762 { background: lime; }
+.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--937528d96919903e5a5172d04ced259a { background: lime; }
+.\\\\#--8caa1febb853c79bc5740a51d69b0603 { background: lime; }
+.\\\\#\\\\#--e6e70cede894cf8ecef86891b00438fa { background: lime; }
+.\\\\#\\\\.\\\\#\\\\.\\\\#--f93b20473b91262c9634348506fe36fe { background: lime; }
+.\\\\_--f18cdd3b2ff360c3f4c10cc7559ff003 { background: lime; }
+.\\\\{\\\\}--6db4a8e6a78415e8209253db0c3dd7c5 { background: lime; }
+.\\\\#fake\\\\-id--a0d1d29b3c920aa3985fb11586f994e6 { background: lime; }
+.foo\\\\.bar--e1dfb05dd5c7c36228cc87fe2cd0c6b1 { background: lime; }
+.\\\\3A hover--af8b669c2dc29371d450d428f0bfa5d2 { background: lime; }
+.\\\\3A hover\\\\3A focus\\\\3A active--5c55d7a925c8ee5de2e8f175badce4d6 { background: lime; }
+.\\\\[attr\\\\=value\\\\]--db83b30c2535d713bd9f8fd195909f24 { background: lime; }
+.f\\\\/o\\\\/o--5de918433a006304ca487065b8626dd4 { background: lime; }
+.f\\\\\\\\o\\\\\\\\o--e9ae2e1857289425acfa40a3f741babd { background: lime; }
+.f\\\\*o\\\\*o--a5f60f217da867c314860c5b2e28bbfd { background: lime; }
+.f\\\\!o\\\\!o--ea3b21fd9d4327fbc9d8b949a2bd5823 { background: lime; }
+.f\\\\'o\\\\'o--95fe160ec21a5b70221e47b09b21fcd2 { background: lime; }
+.f\\\\~o\\\\~o--b9707d2eae11417a88a3f638b64eca30 { background: lime; }
+.f\\\\+o\\\\+o--1e99689a1b3985adff358f3bd4aea7ed { background: lime; }
+
+.foo\\\\/bar--5b852e67587217ab19651f30a9b4df53 {
+  background: hotpink;
+}
+
+.foo\\\\\\\\bar--6cf70ff94feb1257af10e9ddcc47d54f {
+  background: hotpink;
+}
+
+.foo\\\\/bar\\\\/baz--d917a2cf9531290fbf3aa43e0cc0520f {
+  background: hotpink;
+}
+
+.foo\\\\\\\\bar\\\\\\\\baz--1900aa5b4b5b2443299cc5e8afa9b3b4 {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should respects hashPrefix option with localIdentName option: warnings 1`] = `Array []`;
+
+exports[`modules should respects localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should respects localIdentName option: locals 1`] = `
+Object {
+  "#": "localIdentName--#--O8Yw6",
+  "##": "localIdentName--##--3er0D",
+  "#.#.#": "localIdentName--#.#.#--22RlZ",
+  "#fake-id": "localIdentName--#fake-id--3i_zU",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "localIdentName--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--3hmdG",
+  "-a-b-c-": "localIdentName---a-b-c---1cY1s",
+  "-a0-34a___f": "localIdentName---a0-34a___f--3RHUZ",
+  ".": "localIdentName--.--nfd9M",
+  "123": "localIdentName--123--3JQcZ",
+  "1a2b3c": "localIdentName--1a2b3c--3IsxV",
+  ":)": "localIdentName--:)--3EKgI",
+  ":\`(": "localIdentName--:\`(--3oWIz",
+  ":hover": "localIdentName--:hover--B2why",
+  ":hover:focus:active": "localIdentName--:hover:focus:active--3R7r5",
+  "<><<<>><>": "localIdentName--<><<<>><>--Tr9vN",
+  "<p>": "localIdentName--<p>--3Lowm",
+  "?": "localIdentName--?--mRRxx",
+  "@": "localIdentName--@--3ZlTE",
+  "B&W?": "localIdentName--B&W?--3d3wg",
+  "[attr=value]": "localIdentName--[attr=value]--3GgRc",
+  "_": "localIdentName--_--2V6oB",
+  "_test": "localIdentName--_test--3Q--B",
+  "className": "localIdentName--className--3wBIH",
+  "f!o!o": "localIdentName--f!o!o--2pDEJ",
+  "f'o'o": "localIdentName--f'o'o--3297S",
+  "f*o*o": "localIdentName--f*o*o--MI6DP",
+  "f+o+o": "localIdentName--f+o+o--3aNwy",
+  "f/o/o": "localIdentName--f/o/o--jbPgr",
+  "f\\\\o\\\\o": "localIdentName--f\\\\o\\\\o--3x1WT",
+  "foo.bar": "localIdentName--foo.bar--2FVtF",
+  "foo/bar": "localIdentName--foo/bar--13Q-T",
+  "foo/bar/baz": "localIdentName--foo/bar/baz--1I8mG",
+  "foo\\\\bar": "localIdentName--foo\\\\bar--LKTPJ",
+  "foo\\\\bar\\\\baz": "localIdentName--foo\\\\bar\\\\baz--xcAsB",
+  "f~o~o": "localIdentName--f~o~o--1TY6B",
+  "m_x_@": "localIdentName--m_x_@--3SfN7",
+  "someId": "localIdentName--someId--mxosG",
+  "subClass": "localIdentName--subClass--3jIM-",
+  "test": "localIdentName--test--1Os7J",
+  "{}": "localIdentName--{}--2ZR3d",
+  "©": "localIdentName--©--3QaoF",
+  "“‘’”": "localIdentName--“‘’”--3xI9A",
+  "⌘⌥": "localIdentName--⌘⌥--1V-to",
+  "☺☃": "localIdentName--☺☃--uy8uv",
+  "♥": "localIdentName--♥--kO1_7",
+  "𝄞♪♩♫♬": "localIdentName--𝄞♪♩♫♬--1tfs0",
+  "💩": "localIdentName--💩--2Cl61",
+}
+`;
+
+exports[`modules should respects localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".localIdentName--test--1Os7J {
+  background: red;
+}
+
+.localIdentName--_test--3Q--B {
+  background: blue;
+}
+
+.localIdentName--className--3wBIH {
+  background: red;
+}
+
+#localIdentName--someId--mxosG {
+  background: green;
+}
+
+.localIdentName--className--3wBIH .localIdentName--subClass--3jIM- {
+  color: green;
+}
+
+#localIdentName--someId--mxosG .localIdentName--subClass--3jIM- {
+  color: blue;
+}
+
+.localIdentName---a0-34a___f--3RHUZ {
+  color: red;
+}
+
+.localIdentName--m_x_\\\\@--3SfN7 {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.localIdentName--B\\\\&W\\\\?--3d3wg {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+.localIdentName--\\\\3A \\\\\`\\\\(--3oWIz {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+.localIdentName--\\\\31 a2b3c--3IsxV {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#localIdentName--\\\\#fake-id--3i_zU {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#localIdentName---a-b-c---1cY1s {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#localIdentName--©--3QaoF {
+  color: black;
+}
+
+.localIdentName--♥--kO1_7 { background: lime; }
+.localIdentName--©--3QaoF { background: lime; }
+.localIdentName--“‘’”--3xI9A { background: lime; }
+.localIdentName--☺☃--uy8uv { background: lime; }
+.localIdentName--⌘⌥--1V-to { background: lime; }
+.localIdentName--𝄞♪♩♫♬--1tfs0 { background: lime; }
+.localIdentName--💩--2Cl61 { background: lime; }
+.localIdentName--\\\\?--mRRxx { background: lime; }
+.localIdentName--\\\\@--3ZlTE { background: lime; }
+.localIdentName--\\\\.--nfd9M { background: lime; }
+.localIdentName--\\\\3A \\\\)--3EKgI { background: lime; }
+.localIdentName--\\\\3A \\\\\`\\\\(--3oWIz { background: lime; }
+.localIdentName--\\\\31 23--3JQcZ { background: lime; }
+.localIdentName--\\\\31 a2b3c--3IsxV { background: lime; }
+.localIdentName--\\\\<p\\\\>--3Lowm { background: lime; }
+.localIdentName--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--Tr9vN { background: lime; }
+.localIdentName--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--3hmdG { background: lime; }
+.localIdentName--\\\\#--O8Yw6 { background: lime; }
+.localIdentName--\\\\#\\\\#--3er0D { background: lime; }
+.localIdentName--\\\\#\\\\.\\\\#\\\\.\\\\#--22RlZ { background: lime; }
+.localIdentName--\\\\_--2V6oB { background: lime; }
+.localIdentName--\\\\{\\\\}--2ZR3d { background: lime; }
+.localIdentName--\\\\#fake\\\\-id--3i_zU { background: lime; }
+.localIdentName--foo\\\\.bar--2FVtF { background: lime; }
+.localIdentName--\\\\3A hover--B2why { background: lime; }
+.localIdentName--\\\\3A hover\\\\3A focus\\\\3A active--3R7r5 { background: lime; }
+.localIdentName--\\\\[attr\\\\=value\\\\]--3GgRc { background: lime; }
+.localIdentName--f\\\\/o\\\\/o--jbPgr { background: lime; }
+.localIdentName--f\\\\\\\\o\\\\\\\\o--3x1WT { background: lime; }
+.localIdentName--f\\\\*o\\\\*o--MI6DP { background: lime; }
+.localIdentName--f\\\\!o\\\\!o--2pDEJ { background: lime; }
+.localIdentName--f\\\\'o\\\\'o--3297S { background: lime; }
+.localIdentName--f\\\\~o\\\\~o--1TY6B { background: lime; }
+.localIdentName--f\\\\+o\\\\+o--3aNwy { background: lime; }
+
+.localIdentName--foo\\\\/bar--13Q-T {
+  background: hotpink;
+}
+
+.localIdentName--foo\\\\\\\\bar--LKTPJ {
+  background: hotpink;
+}
+
+.localIdentName--foo\\\\/bar\\\\/baz--1I8mG {
+  background: hotpink;
+}
+
+.localIdentName--foo\\\\\\\\bar\\\\\\\\baz--xcAsB {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should respects localIdentName option: warnings 1`] = `Array []`;
+
+exports[`modules should respects path in localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should respects path in localIdentName option: locals 1`] = `
+Object {
+  "#": "fixtures/modules/--localIdentName--#",
+  "##": "fixtures/modules/--localIdentName--##",
+  "#.#.#": "fixtures/modules/--localIdentName--#.#.#",
+  "#fake-id": "fixtures/modules/--localIdentName--#fake-id",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "fixtures/modules/--localIdentName--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.",
+  "-a-b-c-": "fixtures/modules/--localIdentName---a-b-c-",
+  "-a0-34a___f": "fixtures/modules/--localIdentName---a0-34a___f",
+  ".": "fixtures/modules/--localIdentName--.",
+  "123": "fixtures/modules/--localIdentName--123",
+  "1a2b3c": "fixtures/modules/--localIdentName--1a2b3c",
+  ":)": "fixtures/modules/--localIdentName--:)",
+  ":\`(": "fixtures/modules/--localIdentName--:\`(",
+  ":hover": "fixtures/modules/--localIdentName--:hover",
+  ":hover:focus:active": "fixtures/modules/--localIdentName--:hover:focus:active",
+  "<><<<>><>": "fixtures/modules/--localIdentName--<><<<>><>",
+  "<p>": "fixtures/modules/--localIdentName--<p>",
+  "?": "fixtures/modules/--localIdentName--?",
+  "@": "fixtures/modules/--localIdentName--@",
+  "B&W?": "fixtures/modules/--localIdentName--B&W?",
+  "[attr=value]": "fixtures/modules/--localIdentName--[attr=value]",
+  "_": "fixtures/modules/--localIdentName--_",
+  "_test": "fixtures/modules/--localIdentName--_test",
+  "className": "fixtures/modules/--localIdentName--className",
+  "f!o!o": "fixtures/modules/--localIdentName--f!o!o",
+  "f'o'o": "fixtures/modules/--localIdentName--f'o'o",
+  "f*o*o": "fixtures/modules/--localIdentName--f*o*o",
+  "f+o+o": "fixtures/modules/--localIdentName--f+o+o",
+  "f/o/o": "fixtures/modules/--localIdentName--f/o/o",
+  "f\\\\o\\\\o": "fixtures/modules/--localIdentName--f\\\\o\\\\o",
+  "foo.bar": "fixtures/modules/--localIdentName--foo.bar",
+  "foo/bar": "fixtures/modules/--localIdentName--foo/bar",
+  "foo/bar/baz": "fixtures/modules/--localIdentName--foo/bar/baz",
+  "foo\\\\bar": "fixtures/modules/--localIdentName--foo\\\\bar",
+  "foo\\\\bar\\\\baz": "fixtures/modules/--localIdentName--foo\\\\bar\\\\baz",
+  "f~o~o": "fixtures/modules/--localIdentName--f~o~o",
+  "m_x_@": "fixtures/modules/--localIdentName--m_x_@",
+  "someId": "fixtures/modules/--localIdentName--someId",
+  "subClass": "fixtures/modules/--localIdentName--subClass",
+  "test": "fixtures/modules/--localIdentName--test",
+  "{}": "fixtures/modules/--localIdentName--{}",
+  "©": "fixtures/modules/--localIdentName--©",
+  "“‘’”": "fixtures/modules/--localIdentName--“‘’”",
+  "⌘⌥": "fixtures/modules/--localIdentName--⌘⌥",
+  "☺☃": "fixtures/modules/--localIdentName--☺☃",
+  "♥": "fixtures/modules/--localIdentName--♥",
+  "𝄞♪♩♫♬": "fixtures/modules/--localIdentName--𝄞♪♩♫♬",
+  "💩": "fixtures/modules/--localIdentName--💩",
+}
+`;
+
+exports[`modules should respects path in localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".fixtures\\\\/modules\\\\/--localIdentName--test {
+  background: red;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--_test {
+  background: blue;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--className {
+  background: red;
+}
+
+#fixtures\\\\/modules\\\\/--localIdentName--someId {
+  background: green;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--className .fixtures\\\\/modules\\\\/--localIdentName--subClass {
+  color: green;
+}
+
+#fixtures\\\\/modules\\\\/--localIdentName--someId .fixtures\\\\/modules\\\\/--localIdentName--subClass {
+  color: blue;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName---a0-34a___f {
+  color: red;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--m_x_\\\\@ {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--B\\\\&W\\\\? {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\3A \\\\\`\\\\( {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\31 a2b3c {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#fixtures\\\\/modules\\\\/--localIdentName--\\\\#fake-id {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#fixtures\\\\/modules\\\\/--localIdentName---a-b-c- {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#fixtures\\\\/modules\\\\/--localIdentName--© {
+  color: black;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--♥ { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--© { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--“‘’” { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--☺☃ { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--⌘⌥ { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--𝄞♪♩♫♬ { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--💩 { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\? { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\@ { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\. { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\3A \\\\) { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\3A \\\\\`\\\\( { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\31 23 { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\31 a2b3c { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\<p\\\\> { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\# { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\#\\\\# { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\_ { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\{\\\\} { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\#fake\\\\-id { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--foo\\\\.bar { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\3A hover { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\3A hover\\\\3A focus\\\\3A active { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--\\\\[attr\\\\=value\\\\] { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\/o\\\\/o { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\\\\\o\\\\\\\\o { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\*o\\\\*o { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\!o\\\\!o { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\'o\\\\'o { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\~o\\\\~o { background: lime; }
+.fixtures\\\\/modules\\\\/--localIdentName--f\\\\+o\\\\+o { background: lime; }
+
+.fixtures\\\\/modules\\\\/--localIdentName--foo\\\\/bar {
+  background: hotpink;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--foo\\\\\\\\bar {
+  background: hotpink;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--foo\\\\/bar\\\\/baz {
+  background: hotpink;
+}
+
+.fixtures\\\\/modules\\\\/--localIdentName--foo\\\\\\\\bar\\\\\\\\baz {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should respects path in localIdentName option: warnings 1`] = `Array []`;
+
+exports[`modules should saves underscore prefix in exported class names with localIdentName option: errors 1`] = `Array []`;
+
+exports[`modules should saves underscore prefix in exported class names with localIdentName option: locals 1`] = `
+Object {
+  "#": "#",
+  "##": "##",
+  "#.#.#": "#.#.#",
+  "#fake-id": "#fake-id",
+  "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.",
+  "-a-b-c-": "-a-b-c-",
+  "-a0-34a___f": "-a0-34a___f",
+  ".": ".",
+  "123": "123",
+  "1a2b3c": "1a2b3c",
+  ":)": ":)",
+  ":\`(": ":\`(",
+  ":hover": ":hover",
+  ":hover:focus:active": ":hover:focus:active",
+  "<><<<>><>": "<><<<>><>",
+  "<p>": "<p>",
+  "?": "?",
+  "@": "@",
+  "B&W?": "B&W?",
+  "[attr=value]": "[attr=value]",
+  "_": "_",
+  "_test": "_test",
+  "className": "className",
+  "f!o!o": "f!o!o",
+  "f'o'o": "f'o'o",
+  "f*o*o": "f*o*o",
+  "f+o+o": "f+o+o",
+  "f/o/o": "f/o/o",
+  "f\\\\o\\\\o": "f\\\\o\\\\o",
+  "foo.bar": "foo.bar",
+  "foo/bar": "foo/bar",
+  "foo/bar/baz": "foo/bar/baz",
+  "foo\\\\bar": "foo\\\\bar",
+  "foo\\\\bar\\\\baz": "foo\\\\bar\\\\baz",
+  "f~o~o": "f~o~o",
+  "m_x_@": "m_x_@",
+  "someId": "someId",
+  "subClass": "subClass",
+  "test": "test",
+  "{}": "{}",
+  "©": "©",
+  "“‘’”": "“‘’”",
+  "⌘⌥": "⌘⌥",
+  "☺☃": "☺☃",
+  "♥": "♥",
+  "𝄞♪♩♫♬": "𝄞♪♩♫♬",
+  "💩": "💩",
+}
+`;
+
+exports[`modules should saves underscore prefix in exported class names with localIdentName option: module (evaluated) 1`] = `
+Array [
+  Array [
+    1,
+    ".test {
+  background: red;
+}
+
+._test {
+  background: blue;
+}
+
+.className {
+  background: red;
+}
+
+#someId {
+  background: green;
+}
+
+.className .subClass {
+  color: green;
+}
+
+#someId .subClass {
+  color: blue;
+}
+
+.-a0-34a___f {
+  color: red;
+}
+
+.m_x_\\\\@ {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.B\\\\&W\\\\? {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=\\":\`(\\" */
+.\\\\3A \\\\\`\\\\( {
+  color: aqua;
+}
+
+/* matches elements with class=\\"1a2b3c\\" */
+.\\\\31 a2b3c {
+  color: aliceblue;
+}
+
+/* matches the element with id=\\"#fake-id\\" */
+#\\\\#fake-id {
+  color: antiquewhite;
+}
+
+/* matches the element with id=\\"-a-b-c-\\" */
+#-a-b-c- {
+  color: azure;
+}
+
+/* matches the element with id=\\"©\\" */
+#© {
+  color: black;
+}
+
+.♥ { background: lime; }
+.© { background: lime; }
+.“‘’” { background: lime; }
+.☺☃ { background: lime; }
+.⌘⌥ { background: lime; }
+.𝄞♪♩♫♬ { background: lime; }
+.💩 { background: lime; }
+.\\\\? { background: lime; }
+.\\\\@ { background: lime; }
+.\\\\. { background: lime; }
+.\\\\3A \\\\) { background: lime; }
+.\\\\3A \\\\\`\\\\( { background: lime; }
+.\\\\31 23 { background: lime; }
+.\\\\31 a2b3c { background: lime; }
+.\\\\<p\\\\> { background: lime; }
+.\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; }
+.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<\\\\-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\-\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; }
+.\\\\# { background: lime; }
+.\\\\#\\\\# { background: lime; }
+.\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; }
+.\\\\_ { background: lime; }
+.\\\\{\\\\} { background: lime; }
+.\\\\#fake\\\\-id { background: lime; }
+.foo\\\\.bar { background: lime; }
+.\\\\3A hover { background: lime; }
+.\\\\3A hover\\\\3A focus\\\\3A active { background: lime; }
+.\\\\[attr\\\\=value\\\\] { background: lime; }
+.f\\\\/o\\\\/o { background: lime; }
+.f\\\\\\\\o\\\\\\\\o { background: lime; }
+.f\\\\*o\\\\*o { background: lime; }
+.f\\\\!o\\\\!o { background: lime; }
+.f\\\\'o\\\\'o { background: lime; }
+.f\\\\~o\\\\~o { background: lime; }
+.f\\\\+o\\\\+o { background: lime; }
+
+.foo\\\\/bar {
+  background: hotpink;
+}
+
+.foo\\\\\\\\bar {
+  background: hotpink;
+}
+
+.foo\\\\/bar\\\\/baz {
+  background: hotpink;
+}
+
+.foo\\\\\\\\bar\\\\\\\\baz {
+  background: hotpink;
+}
+",
+    "",
+  ],
+]
+`;
+
+exports[`modules should saves underscore prefix in exported class names with localIdentName option: warnings 1`] = `Array []`;
diff --git a/test/__snapshots__/onlyLocals-option.test.js.snap b/test/__snapshots__/onlyLocals-option.test.js.snap
new file mode 100644
index 00000000..3e3eff6f
--- /dev/null
+++ b/test/__snapshots__/onlyLocals-option.test.js.snap
@@ -0,0 +1,64 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`modules true (mode: local): errors 1`] = `Array []`;
+
+exports[`modules true (mode: local): module 1`] = `
+"// Exports
+module.exports = {
+	\\"v-def\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\")[\\"v-def\\"] + \\"\\",
+	\\"v-other\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\")[\\"v-other\\"] + \\"\\",
+	\\"s-white\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\")[\\"s-white\\"] + \\"\\",
+	\\"m-small\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\")[\\"m-small\\"] + \\"\\",
+	\\"v-something\\": \\"\\" + require(\\"-!../../../src/index.js??ref--4-0!./something.css\\")[\\"v-something\\"] + \\"\\",
+	\\"v-foo\\": \\"blue\\",
+	\\"v-bar\\": \\"block\\",
+	\\"v-primary\\": \\"#BF4040\\",
+	\\"s-black\\": \\"black-selector\\",
+	\\"m-large\\": \\"(min-width: 960px)\\",
+	\\"v-ident\\": \\"validIdent\\",
+	\\"v-pre-defined-ident\\": \\"left\\",
+	\\"v-string\\": \\"'content'\\",
+	\\"v-string-1\\": \\"''\\",
+	\\"v-url\\": \\"url(https://www.exammple.com/images/my-background.png)\\",
+	\\"v-url-1\\": \\"url('https://www.exammple.com/images/my-background.png')\\",
+	\\"v-url-2\\": \\"url(\\\\\\"https://www.exammple.com/images/my-background.png\\\\\\")\\",
+	\\"v-integer\\": \\"100\\",
+	\\"v-integer-1\\": \\"-100\\",
+	\\"v-integer-2\\": \\"+100\\",
+	\\"v-number\\": \\".60\\",
+	\\"v-number-1\\": \\"-456.8\\",
+	\\"v-number-2\\": \\"-3.4e-2\\",
+	\\"v-dimension\\": \\"12px\\",
+	\\"v-percentage\\": \\"100%\\",
+	\\"v-hex\\": \\"#fff\\",
+	\\"v-function\\": \\"rgb(0,0,0)\\",
+	\\"v-unicode-range\\": \\"U+0025-00FF\\",
+	\\"ghi\\": \\"_ghi\\",
+	\\"class\\": \\"_class\\",
+	\\"other\\": \\"_other\\",
+	\\"other-other\\": \\"_other-other\\",
+	\\"green\\": \\"_green\\",
+	\\"foo\\": \\"_foo\\",
+	\\"simple\\": \\"_simple \\" + require(\\"-!../../../src/index.js??ref--4-0!./imported-simple.css\\")[\\"imported-simple\\"] + \\"\\",
+	\\"relative\\": \\"_relative \\" + require(\\"-!../../../src/index.js??ref--4-0!./relative.css\\")[\\"imported-relative\\"] + \\"\\",
+	\\"top-relative\\": \\"_top-relative \\" + require(\\"-!../../../src/index.js??ref--4-0!../modules/top-relative.css\\")[\\"imported-relative\\"] + \\"\\",
+	\\"module\\": \\"_module \\" + require(\\"-!../../../src/index.js??ref--4-0!package/style.css\\")[\\"imported-module\\"] + \\"\\",
+	\\"alias\\": \\"_alias \\" + require(\\"-!../../../src/index.js??ref--4-0!aliasesComposes/alias.css\\")[\\"imported-alias\\"] + \\"\\",
+	\\"primary-selector\\": \\"_primary-selector\\",
+	\\"black-selector\\": \\"_black-selector\\",
+	\\"header\\": \\"_header\\",
+	\\"foobarbaz\\": \\"_foobarbaz\\"
+};"
+`;
+
+exports[`modules true (mode: local): values module 1`] = `
+"// Exports
+module.exports = {
+	\\"v-def\\": \\"red\\",
+	\\"v-other\\": \\"green\\",
+	\\"s-white\\": \\"white\\",
+	\\"m-small\\": \\"(min-width: 320px)\\"
+};"
+`;
+
+exports[`modules true (mode: local): warnings 1`] = `Array []`;
diff --git a/test/__snapshots__/url-option.test.js.snap b/test/__snapshots__/url-option.test.js.snap
index 7dd0e1cd..590afdb9 100644
--- a/test/__snapshots__/url-option.test.js.snap
+++ b/test/__snapshots__/url-option.test.js.snap
@@ -148,7 +148,6 @@ b {
 
 .class {
   background: green url(
-  
   ) xyz;
 }
 
@@ -293,31 +292,29 @@ exports[`url option Function: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./font.woff\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./font.woff2\\"));
-var ___CSS_LOADER_URL___2___ = urlEscape(require(\\"./font.eot\\"));
-var ___CSS_LOADER_URL___3___ = urlEscape(require(\\"package/font.ttf\\"));
-var ___CSS_LOADER_URL___4___ = urlEscape(require(\\"./font with spaces.eot\\"));
-var ___CSS_LOADER_URL___5___ = urlEscape(require(\\"./font.svg\\") + \\"#svgFontName\\");
-var ___CSS_LOADER_URL___6___ = urlEscape(require(\\"./font.woff2?foo=bar\\"));
-var ___CSS_LOADER_URL___7___ = urlEscape(require(\\"./font.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___8___ = urlEscape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___9___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___10___ = urlEscape(require(\\"./img2x.png\\"));
-var ___CSS_LOADER_URL___11___ = urlEscape(require(\\"./img-simple.png\\"));
-var ___CSS_LOADER_URL___12___ = urlEscape(require(\\"../url/img-simple.png\\"));
-var ___CSS_LOADER_URL___13___ = urlEscape(require(\\"./img1x.png\\"), true);
-var ___CSS_LOADER_URL___14___ = urlEscape(require(\\"./img2x.png\\"), true);
-var ___CSS_LOADER_URL___15___ = urlEscape(require(\\"./img3x.png\\"), true);
-var ___CSS_LOADER_URL___16___ = urlEscape(require(\\"./img1x.png?foo=bar\\"), true);
-var ___CSS_LOADER_URL___17___ = urlEscape(require(\\"./img1x.png\\") + \\"#hash\\", true);
-var ___CSS_LOADER_URL___18___ = urlEscape(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
-var ___CSS_LOADER_URL___19___ = urlEscape(require(\\"./img3x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./font.woff\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./font.woff2\\"));
+var ___CSS_LOADER_URL___2___ = getUrl(require(\\"./font.eot\\"));
+var ___CSS_LOADER_URL___3___ = getUrl(require(\\"package/font.ttf\\"));
+var ___CSS_LOADER_URL___4___ = getUrl(require(\\"./font with spaces.eot\\"));
+var ___CSS_LOADER_URL___5___ = getUrl(require(\\"./font.svg\\") + \\"#svgFontName\\");
+var ___CSS_LOADER_URL___6___ = getUrl(require(\\"./font.woff2?foo=bar\\"));
+var ___CSS_LOADER_URL___7___ = getUrl(require(\\"./font.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___8___ = getUrl(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___9___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___10___ = getUrl(require(\\"./img2x.png\\"));
+var ___CSS_LOADER_URL___11___ = getUrl(require(\\"./img-simple.png\\"));
+var ___CSS_LOADER_URL___12___ = getUrl(require(\\"../url/img-simple.png\\"));
+var ___CSS_LOADER_URL___13___ = getUrl(require(\\"./img1x.png\\"), true);
+var ___CSS_LOADER_URL___14___ = getUrl(require(\\"./img2x.png\\"), true);
+var ___CSS_LOADER_URL___15___ = getUrl(require(\\"./img3x.png\\"), true);
+var ___CSS_LOADER_URL___16___ = getUrl(require(\\"./img1x.png?foo=bar\\"), true);
+var ___CSS_LOADER_URL___17___ = getUrl(require(\\"./img1x.png\\") + \\"#hash\\", true);
+var ___CSS_LOADER_URL___18___ = getUrl(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
+var ___CSS_LOADER_URL___19___ = getUrl(require(\\"./img3x.png\\"));
 // Module
-exports.push([module.id, \\".class {\\\\n  background: url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(./img.png);\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\\\\\"./img.png\\\\\\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( ./img.png ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(~package/img.png) url(./other-img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___0___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___1___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___2___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___3___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___4___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___5___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\\\\\"./img.png\\\\\\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url('./img.png') xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url('./img.png') url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___11___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___12___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url('~package/img.png');\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url('~aliasesImg/img.png') ;\\\\n}\\\\n\\\\na {\\\\n  background: url(./nested/img.png);\\\\n}\\\\n\\\\na {\\\\n  background: url(nested/img.png);\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n  background-image: image-set(\\\\\\"./img img.png\\\\\\" 1x, \\\\\\"./img img.png\\\\\\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___13___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___14___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___15___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___16___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___17___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___18___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___19___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\\\\\"./img img.png\\\\\\") 1x, url(\\\\\\"./img img.png\\\\\\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\".class {\\\\n  background: url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(./img.png);\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\\\\\"./img.png\\\\\\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( ./img.png ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(~package/img.png) url(./other-img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___0___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___1___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___2___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___3___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___4___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___5___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\\\\\"./img.png\\\\\\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url('./img.png') xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url('./img.png') url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___11___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___12___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url('~package/img.png');\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url('~aliasesImg/img.png') ;\\\\n}\\\\n\\\\na {\\\\n  background: url(./nested/img.png);\\\\n}\\\\n\\\\na {\\\\n  background: url(nested/img.png);\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n  background-image: image-set(\\\\\\"./img img.png\\\\\\" 1x, \\\\\\"./img img.png\\\\\\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___13___ + \\" 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___13___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___14___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___15___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___16___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___17___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___18___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___19___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\\\\\"./img img.png\\\\\\") 1x, url(\\\\\\"./img img.png\\\\\\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___9___ + \\") 1x, \\" + ___CSS_LOADER_URL___14___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 "
 `;
 
@@ -537,7 +534,6 @@ b {
 
 .class {
   background: green url(
-  
   ) xyz;
 }
 
@@ -682,10 +678,8 @@ exports[`url option false: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-
 // Module
-exports.push([module.id, \\".class {\\\\n  background: url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(./img.png);\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\\\\\"./img.png\\\\\\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( ./img.png ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(~package/img.png) url(./other-img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(./font.woff) format('woff'),\\\\n    url('./font.woff2') format('woff2'),\\\\n    url(\\\\\\"./font.eot\\\\\\") format('eot'),\\\\n    url(~package/font.ttf) format('truetype'),\\\\n    url(\\\\\\"./font with spaces.eot\\\\\\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url('./font.svg#svgFontName') format('svg'),\\\\n    url('./font.woff2?foo=bar') format('woff2'),\\\\n    url(\\\\\\"./font.eot?#iefix\\\\\\") format('embedded-opentype'),\\\\n    url(\\\\\\"./font with spaces.eot?#iefix\\\\\\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\\\\\"./img.png\\\\\\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url('./img.png') xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url('./img1x.png') 1x, url('./img2x.png') 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url('./img1x.png') 1x, url('./img2x.png') 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url('./img.png') url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url('img-simple.png');\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url('../url/img-simple.png');\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url('~package/img.png');\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url('~aliasesImg/img.png') ;\\\\n}\\\\n\\\\na {\\\\n  background: url(./nested/img.png);\\\\n}\\\\n\\\\na {\\\\n  background: url(nested/img.png);\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\\\"./img1x.png\\\\\\" 1x);\\\\n  background-image: image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\\\"./img img.png\\\\\\" 1x, \\\\\\"./img img.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x),\\\\n    image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\n    \\\\\\"./img1x.png\\\\\\" 1x,\\\\n    \\\\\\"./img2x.png\\\\\\" 2x,\\\\n    \\\\\\"./img3x.png\\\\\\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\\\\\"./img1x.png?foo=bar\\\\\\" 1x);\\\\n  background-image: image-set(\\\\\\"./img1x.png#hash\\\\\\" 1x);\\\\n  background-image: image-set(\\\\\\"./img1x.png?#iefix\\\\\\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\\\\\"./img1x.png\\\\\\") 1x, url(\\\\\\"./img2x.png\\\\\\") 2x);\\\\n  background-image: -webkit-image-set(url(\\\\\\"./img1x.png\\\\\\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\\\\\"./img1x.png\\\\\\") 1x\\\\n  );\\\\n  background-image: image-set(url(./img1x.png) 1x);\\\\n  background-image: image-set(\\\\n    url(./img1x.png) 1x\\\\n  );\\\\n  background-image: image-set(url(\\\\\\"./img1x.png\\\\\\") 1x, url(\\\\\\"./img2x.png\\\\\\") 2x);\\\\n  background-image: image-set(\\\\n    url(./img1x.png) 1x,\\\\n    url(./img2x.png) 2x,\\\\n    url(./img3x.png) 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\\\\\"./img img.png\\\\\\") 1x, url(\\\\\\"./img img.png\\\\\\") 2x);\\\\n\\\\n  background-image: image-set(url(\\\\\\"./img1x.png\\\\\\") 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\".class {\\\\n  background: url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(./img.png);\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\\\\\"./img.png\\\\\\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( ./img.png ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(~package/img.png) url(./other-img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\\\\\"./img img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( './img img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(./font.woff) format('woff'),\\\\n    url('./font.woff2') format('woff2'),\\\\n    url(\\\\\\"./font.eot\\\\\\") format('eot'),\\\\n    url(~package/font.ttf) format('truetype'),\\\\n    url(\\\\\\"./font with spaces.eot\\\\\\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url('./font.svg#svgFontName') format('svg'),\\\\n    url('./font.woff2?foo=bar') format('woff2'),\\\\n    url(\\\\\\"./font.eot?#iefix\\\\\\") format('embedded-opentype'),\\\\n    url(\\\\\\"./font with spaces.eot?#iefix\\\\\\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\\\\\"./img.png\\\\\\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url('./img.png') xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url('./img1x.png') 1x, url('./img2x.png') 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url('./img1x.png') 1x, url('./img2x.png') 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\\\"./img.png?\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url('./img.png') url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url('./img.png');\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url('img-simple.png');\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url('../url/img-simple.png');\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url('~package/img.png');\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url('~aliasesImg/img.png') ;\\\\n}\\\\n\\\\na {\\\\n  background: url(./nested/img.png);\\\\n}\\\\n\\\\na {\\\\n  background: url(nested/img.png);\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\\\"./img1x.png\\\\\\" 1x);\\\\n  background-image: image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\\\"./img img.png\\\\\\" 1x, \\\\\\"./img img.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x),\\\\n    image-set(\\\\\\"./img1x.png\\\\\\" 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n  background-image: image-set(\\\\n    \\\\\\"./img1x.png\\\\\\" 1x,\\\\n    \\\\\\"./img2x.png\\\\\\" 2x,\\\\n    \\\\\\"./img3x.png\\\\\\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\\\\\"./img1x.png?foo=bar\\\\\\" 1x);\\\\n  background-image: image-set(\\\\\\"./img1x.png#hash\\\\\\" 1x);\\\\n  background-image: image-set(\\\\\\"./img1x.png?#iefix\\\\\\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\\\\\"./img1x.png\\\\\\") 1x, url(\\\\\\"./img2x.png\\\\\\") 2x);\\\\n  background-image: -webkit-image-set(url(\\\\\\"./img1x.png\\\\\\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\\\\\"./img1x.png\\\\\\") 1x\\\\n  );\\\\n  background-image: image-set(url(./img1x.png) 1x);\\\\n  background-image: image-set(\\\\n    url(./img1x.png) 1x\\\\n  );\\\\n  background-image: image-set(url(\\\\\\"./img1x.png\\\\\\") 1x, url(\\\\\\"./img2x.png\\\\\\") 2x);\\\\n  background-image: image-set(\\\\n    url(./img1x.png) 1x,\\\\n    url(./img2x.png) 2x,\\\\n    url(./img3x.png) 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\\\\\"./img img.png\\\\\\") 1x, url(\\\\\\"./img img.png\\\\\\") 2x);\\\\n\\\\n  background-image: image-set(url(\\\\\\"./img1x.png\\\\\\") 1x, \\\\\\"./img2x.png\\\\\\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 "
 `;
 
@@ -839,7 +833,6 @@ b {
 
 .class {
   background: green url(
-  
   ) xyz;
 }
 
@@ -984,44 +977,42 @@ exports[`url option true and modules \`false\`: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./img.png\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___2___ = urlEscape(require(\\"package/img.png\\"));
-var ___CSS_LOADER_URL___3___ = urlEscape(require(\\"./other-img.png\\"));
-var ___CSS_LOADER_URL___4___ = urlEscape(require(\\"./img img.png\\"));
-var ___CSS_LOADER_URL___5___ = urlEscape(require(\\"./font.woff\\"));
-var ___CSS_LOADER_URL___6___ = urlEscape(require(\\"./font.woff2\\"));
-var ___CSS_LOADER_URL___7___ = urlEscape(require(\\"./font.eot\\"));
-var ___CSS_LOADER_URL___8___ = urlEscape(require(\\"package/font.ttf\\"));
-var ___CSS_LOADER_URL___9___ = urlEscape(require(\\"./font with spaces.eot\\"));
-var ___CSS_LOADER_URL___10___ = urlEscape(require(\\"./font.svg\\") + \\"#svgFontName\\");
-var ___CSS_LOADER_URL___11___ = urlEscape(require(\\"./font.woff2?foo=bar\\"));
-var ___CSS_LOADER_URL___12___ = urlEscape(require(\\"./font.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___13___ = urlEscape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___14___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___15___ = urlEscape(require(\\"./img2x.png\\"));
-var ___CSS_LOADER_URL___16___ = urlEscape(require(\\"./img.png?foo\\"));
-var ___CSS_LOADER_URL___17___ = urlEscape(require(\\"./img.png?foo=bar\\"));
-var ___CSS_LOADER_URL___18___ = urlEscape(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___19___ = urlEscape(require(\\"./img.png?\\"));
-var ___CSS_LOADER_URL___20___ = urlEscape(require(\\"./img-simple.png\\"));
-var ___CSS_LOADER_URL___21___ = urlEscape(require(\\"../url/img-simple.png\\"));
-var ___CSS_LOADER_URL___22___ = urlEscape(require(\\"aliasesImg/img.png\\"));
-var ___CSS_LOADER_URL___23___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___24___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___25___ = urlEscape(require(\\"./img1x.png\\"), true);
-var ___CSS_LOADER_URL___26___ = urlEscape(require(\\"./img2x.png\\"), true);
-var ___CSS_LOADER_URL___27___ = urlEscape(require(\\"./img img.png\\"), true);
-var ___CSS_LOADER_URL___28___ = urlEscape(require(\\"./img3x.png\\"), true);
-var ___CSS_LOADER_URL___29___ = urlEscape(require(\\"./img1x.png?foo=bar\\"), true);
-var ___CSS_LOADER_URL___30___ = urlEscape(require(\\"./img1x.png\\") + \\"#hash\\", true);
-var ___CSS_LOADER_URL___31___ = urlEscape(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
-var ___CSS_LOADER_URL___32___ = urlEscape(require(\\"./img3x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./img.png\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___2___ = getUrl(require(\\"package/img.png\\"));
+var ___CSS_LOADER_URL___3___ = getUrl(require(\\"./other-img.png\\"));
+var ___CSS_LOADER_URL___4___ = getUrl(require(\\"./img img.png\\"));
+var ___CSS_LOADER_URL___5___ = getUrl(require(\\"./font.woff\\"));
+var ___CSS_LOADER_URL___6___ = getUrl(require(\\"./font.woff2\\"));
+var ___CSS_LOADER_URL___7___ = getUrl(require(\\"./font.eot\\"));
+var ___CSS_LOADER_URL___8___ = getUrl(require(\\"package/font.ttf\\"));
+var ___CSS_LOADER_URL___9___ = getUrl(require(\\"./font with spaces.eot\\"));
+var ___CSS_LOADER_URL___10___ = getUrl(require(\\"./font.svg\\") + \\"#svgFontName\\");
+var ___CSS_LOADER_URL___11___ = getUrl(require(\\"./font.woff2?foo=bar\\"));
+var ___CSS_LOADER_URL___12___ = getUrl(require(\\"./font.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___13___ = getUrl(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___14___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___15___ = getUrl(require(\\"./img2x.png\\"));
+var ___CSS_LOADER_URL___16___ = getUrl(require(\\"./img.png?foo\\"));
+var ___CSS_LOADER_URL___17___ = getUrl(require(\\"./img.png?foo=bar\\"));
+var ___CSS_LOADER_URL___18___ = getUrl(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___19___ = getUrl(require(\\"./img.png?\\"));
+var ___CSS_LOADER_URL___20___ = getUrl(require(\\"./img-simple.png\\"));
+var ___CSS_LOADER_URL___21___ = getUrl(require(\\"../url/img-simple.png\\"));
+var ___CSS_LOADER_URL___22___ = getUrl(require(\\"aliasesImg/img.png\\"));
+var ___CSS_LOADER_URL___23___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___24___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___25___ = getUrl(require(\\"./img1x.png\\"), true);
+var ___CSS_LOADER_URL___26___ = getUrl(require(\\"./img2x.png\\"), true);
+var ___CSS_LOADER_URL___27___ = getUrl(require(\\"./img img.png\\"), true);
+var ___CSS_LOADER_URL___28___ = getUrl(require(\\"./img3x.png\\"), true);
+var ___CSS_LOADER_URL___29___ = getUrl(require(\\"./img1x.png?foo=bar\\"), true);
+var ___CSS_LOADER_URL___30___ = getUrl(require(\\"./img1x.png\\") + \\"#hash\\", true);
+var ___CSS_LOADER_URL___31___ = getUrl(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
+var ___CSS_LOADER_URL___32___ = getUrl(require(\\"./img3x.png\\"));
 // Module
-exports.push([module.id, \\".class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\".class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 "
 `;
 
@@ -1241,9 +1232,6 @@ b {
 
 .class {
   background: green url(
-  
-  
-  
   ) xyz;
 }
 
@@ -1388,44 +1376,42 @@ exports[`url option true and modules \`global\`: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./img.png\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___2___ = urlEscape(require(\\"package/img.png\\"));
-var ___CSS_LOADER_URL___3___ = urlEscape(require(\\"./other-img.png\\"));
-var ___CSS_LOADER_URL___4___ = urlEscape(require(\\"./img img.png\\"));
-var ___CSS_LOADER_URL___5___ = urlEscape(require(\\"./font.woff\\"));
-var ___CSS_LOADER_URL___6___ = urlEscape(require(\\"./font.woff2\\"));
-var ___CSS_LOADER_URL___7___ = urlEscape(require(\\"./font.eot\\"));
-var ___CSS_LOADER_URL___8___ = urlEscape(require(\\"package/font.ttf\\"));
-var ___CSS_LOADER_URL___9___ = urlEscape(require(\\"./font with spaces.eot\\"));
-var ___CSS_LOADER_URL___10___ = urlEscape(require(\\"./font.svg\\") + \\"#svgFontName\\");
-var ___CSS_LOADER_URL___11___ = urlEscape(require(\\"./font.woff2?foo=bar\\"));
-var ___CSS_LOADER_URL___12___ = urlEscape(require(\\"./font.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___13___ = urlEscape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___14___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___15___ = urlEscape(require(\\"./img2x.png\\"));
-var ___CSS_LOADER_URL___16___ = urlEscape(require(\\"./img.png?foo\\"));
-var ___CSS_LOADER_URL___17___ = urlEscape(require(\\"./img.png?foo=bar\\"));
-var ___CSS_LOADER_URL___18___ = urlEscape(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___19___ = urlEscape(require(\\"./img.png?\\"));
-var ___CSS_LOADER_URL___20___ = urlEscape(require(\\"./img-simple.png\\"));
-var ___CSS_LOADER_URL___21___ = urlEscape(require(\\"../url/img-simple.png\\"));
-var ___CSS_LOADER_URL___22___ = urlEscape(require(\\"aliasesImg/img.png\\"));
-var ___CSS_LOADER_URL___23___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___24___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___25___ = urlEscape(require(\\"./img1x.png\\"), true);
-var ___CSS_LOADER_URL___26___ = urlEscape(require(\\"./img2x.png\\"), true);
-var ___CSS_LOADER_URL___27___ = urlEscape(require(\\"./img img.png\\"), true);
-var ___CSS_LOADER_URL___28___ = urlEscape(require(\\"./img3x.png\\"), true);
-var ___CSS_LOADER_URL___29___ = urlEscape(require(\\"./img1x.png?foo=bar\\"), true);
-var ___CSS_LOADER_URL___30___ = urlEscape(require(\\"./img1x.png\\") + \\"#hash\\", true);
-var ___CSS_LOADER_URL___31___ = urlEscape(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
-var ___CSS_LOADER_URL___32___ = urlEscape(require(\\"./img3x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./img.png\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___2___ = getUrl(require(\\"package/img.png\\"));
+var ___CSS_LOADER_URL___3___ = getUrl(require(\\"./other-img.png\\"));
+var ___CSS_LOADER_URL___4___ = getUrl(require(\\"./img img.png\\"));
+var ___CSS_LOADER_URL___5___ = getUrl(require(\\"./font.woff\\"));
+var ___CSS_LOADER_URL___6___ = getUrl(require(\\"./font.woff2\\"));
+var ___CSS_LOADER_URL___7___ = getUrl(require(\\"./font.eot\\"));
+var ___CSS_LOADER_URL___8___ = getUrl(require(\\"package/font.ttf\\"));
+var ___CSS_LOADER_URL___9___ = getUrl(require(\\"./font with spaces.eot\\"));
+var ___CSS_LOADER_URL___10___ = getUrl(require(\\"./font.svg\\") + \\"#svgFontName\\");
+var ___CSS_LOADER_URL___11___ = getUrl(require(\\"./font.woff2?foo=bar\\"));
+var ___CSS_LOADER_URL___12___ = getUrl(require(\\"./font.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___13___ = getUrl(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___14___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___15___ = getUrl(require(\\"./img2x.png\\"));
+var ___CSS_LOADER_URL___16___ = getUrl(require(\\"./img.png?foo\\"));
+var ___CSS_LOADER_URL___17___ = getUrl(require(\\"./img.png?foo=bar\\"));
+var ___CSS_LOADER_URL___18___ = getUrl(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___19___ = getUrl(require(\\"./img.png?\\"));
+var ___CSS_LOADER_URL___20___ = getUrl(require(\\"./img-simple.png\\"));
+var ___CSS_LOADER_URL___21___ = getUrl(require(\\"../url/img-simple.png\\"));
+var ___CSS_LOADER_URL___22___ = getUrl(require(\\"aliasesImg/img.png\\"));
+var ___CSS_LOADER_URL___23___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___24___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___25___ = getUrl(require(\\"./img1x.png\\"), true);
+var ___CSS_LOADER_URL___26___ = getUrl(require(\\"./img2x.png\\"), true);
+var ___CSS_LOADER_URL___27___ = getUrl(require(\\"./img img.png\\"), true);
+var ___CSS_LOADER_URL___28___ = getUrl(require(\\"./img3x.png\\"), true);
+var ___CSS_LOADER_URL___29___ = getUrl(require(\\"./img1x.png?foo=bar\\"), true);
+var ___CSS_LOADER_URL___30___ = getUrl(require(\\"./img1x.png\\") + \\"#hash\\", true);
+var ___CSS_LOADER_URL___31___ = getUrl(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
+var ___CSS_LOADER_URL___32___ = getUrl(require(\\"./img3x.png\\"));
 // Module
-exports.push([module.id, \\".class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  \\\\n  \\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\".class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 "
 `;
 
@@ -1451,7 +1437,6 @@ Warning
 Warning
 
 (136:3) Unable to find uri in 'background: green url(
-  
   ) xyz'",
   "ModuleWarning: Module Warning (from \`replaced original path\`):
 Warning
@@ -1646,9 +1631,6 @@ b {
 
 ._7NvzxsKlD5xT5cUVu5Ad- {
   background: green url(
-  
-  
-  
   ) xyz;
 }
 
@@ -1793,44 +1775,42 @@ exports[`url option true and modules \`local\`: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./img.png\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___2___ = urlEscape(require(\\"package/img.png\\"));
-var ___CSS_LOADER_URL___3___ = urlEscape(require(\\"./other-img.png\\"));
-var ___CSS_LOADER_URL___4___ = urlEscape(require(\\"./img img.png\\"));
-var ___CSS_LOADER_URL___5___ = urlEscape(require(\\"./font.woff\\"));
-var ___CSS_LOADER_URL___6___ = urlEscape(require(\\"./font.woff2\\"));
-var ___CSS_LOADER_URL___7___ = urlEscape(require(\\"./font.eot\\"));
-var ___CSS_LOADER_URL___8___ = urlEscape(require(\\"package/font.ttf\\"));
-var ___CSS_LOADER_URL___9___ = urlEscape(require(\\"./font with spaces.eot\\"));
-var ___CSS_LOADER_URL___10___ = urlEscape(require(\\"./font.svg\\") + \\"#svgFontName\\");
-var ___CSS_LOADER_URL___11___ = urlEscape(require(\\"./font.woff2?foo=bar\\"));
-var ___CSS_LOADER_URL___12___ = urlEscape(require(\\"./font.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___13___ = urlEscape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___14___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___15___ = urlEscape(require(\\"./img2x.png\\"));
-var ___CSS_LOADER_URL___16___ = urlEscape(require(\\"./img.png?foo\\"));
-var ___CSS_LOADER_URL___17___ = urlEscape(require(\\"./img.png?foo=bar\\"));
-var ___CSS_LOADER_URL___18___ = urlEscape(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___19___ = urlEscape(require(\\"./img.png?\\"));
-var ___CSS_LOADER_URL___20___ = urlEscape(require(\\"./img-simple.png\\"));
-var ___CSS_LOADER_URL___21___ = urlEscape(require(\\"../url/img-simple.png\\"));
-var ___CSS_LOADER_URL___22___ = urlEscape(require(\\"aliasesImg/img.png\\"));
-var ___CSS_LOADER_URL___23___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___24___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___25___ = urlEscape(require(\\"./img1x.png\\"), true);
-var ___CSS_LOADER_URL___26___ = urlEscape(require(\\"./img2x.png\\"), true);
-var ___CSS_LOADER_URL___27___ = urlEscape(require(\\"./img img.png\\"), true);
-var ___CSS_LOADER_URL___28___ = urlEscape(require(\\"./img3x.png\\"), true);
-var ___CSS_LOADER_URL___29___ = urlEscape(require(\\"./img1x.png?foo=bar\\"), true);
-var ___CSS_LOADER_URL___30___ = urlEscape(require(\\"./img1x.png\\") + \\"#hash\\", true);
-var ___CSS_LOADER_URL___31___ = urlEscape(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
-var ___CSS_LOADER_URL___32___ = urlEscape(require(\\"./img3x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./img.png\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___2___ = getUrl(require(\\"package/img.png\\"));
+var ___CSS_LOADER_URL___3___ = getUrl(require(\\"./other-img.png\\"));
+var ___CSS_LOADER_URL___4___ = getUrl(require(\\"./img img.png\\"));
+var ___CSS_LOADER_URL___5___ = getUrl(require(\\"./font.woff\\"));
+var ___CSS_LOADER_URL___6___ = getUrl(require(\\"./font.woff2\\"));
+var ___CSS_LOADER_URL___7___ = getUrl(require(\\"./font.eot\\"));
+var ___CSS_LOADER_URL___8___ = getUrl(require(\\"package/font.ttf\\"));
+var ___CSS_LOADER_URL___9___ = getUrl(require(\\"./font with spaces.eot\\"));
+var ___CSS_LOADER_URL___10___ = getUrl(require(\\"./font.svg\\") + \\"#svgFontName\\");
+var ___CSS_LOADER_URL___11___ = getUrl(require(\\"./font.woff2?foo=bar\\"));
+var ___CSS_LOADER_URL___12___ = getUrl(require(\\"./font.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___13___ = getUrl(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___14___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___15___ = getUrl(require(\\"./img2x.png\\"));
+var ___CSS_LOADER_URL___16___ = getUrl(require(\\"./img.png?foo\\"));
+var ___CSS_LOADER_URL___17___ = getUrl(require(\\"./img.png?foo=bar\\"));
+var ___CSS_LOADER_URL___18___ = getUrl(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___19___ = getUrl(require(\\"./img.png?\\"));
+var ___CSS_LOADER_URL___20___ = getUrl(require(\\"./img-simple.png\\"));
+var ___CSS_LOADER_URL___21___ = getUrl(require(\\"../url/img-simple.png\\"));
+var ___CSS_LOADER_URL___22___ = getUrl(require(\\"aliasesImg/img.png\\"));
+var ___CSS_LOADER_URL___23___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___24___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___25___ = getUrl(require(\\"./img1x.png\\"), true);
+var ___CSS_LOADER_URL___26___ = getUrl(require(\\"./img2x.png\\"), true);
+var ___CSS_LOADER_URL___27___ = getUrl(require(\\"./img img.png\\"), true);
+var ___CSS_LOADER_URL___28___ = getUrl(require(\\"./img3x.png\\"), true);
+var ___CSS_LOADER_URL___29___ = getUrl(require(\\"./img1x.png?foo=bar\\"), true);
+var ___CSS_LOADER_URL___30___ = getUrl(require(\\"./img1x.png\\") + \\"#hash\\", true);
+var ___CSS_LOADER_URL___31___ = getUrl(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
+var ___CSS_LOADER_URL___32___ = getUrl(require(\\"./img3x.png\\"));
 // Module
-exports.push([module.id, \\"._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes O9YPhh3OZdzrkj25z-J92 {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\n  \\\\n  \\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n._2rb58RF5u2ij-3X8XSJaVP {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.mrf4tRz4T71pNku_3IMH3 {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.c5dNFA35opKWoGz7aRj0k {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n._2Q5a0g3xEHAboOADfIxHa5 {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n._2TX-7lb63hK5h5DzELIAbU {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\"._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes O9YPhh3OZdzrkj25z-J92 {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n._2rb58RF5u2ij-3X8XSJaVP {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.mrf4tRz4T71pNku_3IMH3 {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.c5dNFA35opKWoGz7aRj0k {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n._2Q5a0g3xEHAboOADfIxHa5 {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n._2TX-7lb63hK5h5DzELIAbU {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 // Exports
 exports.locals = {
 	\\"class\\": \\"_7NvzxsKlD5xT5cUVu5Ad-\\",
@@ -1867,7 +1847,6 @@ Warning
 Warning
 
 (136:3) Unable to find uri in 'background: green url(
-  
   ) xyz'",
   "ModuleWarning: Module Warning (from \`replaced original path\`):
 Warning
@@ -2062,9 +2041,6 @@ b {
 
 ._7NvzxsKlD5xT5cUVu5Ad- {
   background: green url(
-  
-  
-  
   ) xyz;
 }
 
@@ -2209,44 +2185,42 @@ exports[`url option true and modules \`true\`: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./img.png\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___2___ = urlEscape(require(\\"package/img.png\\"));
-var ___CSS_LOADER_URL___3___ = urlEscape(require(\\"./other-img.png\\"));
-var ___CSS_LOADER_URL___4___ = urlEscape(require(\\"./img img.png\\"));
-var ___CSS_LOADER_URL___5___ = urlEscape(require(\\"./font.woff\\"));
-var ___CSS_LOADER_URL___6___ = urlEscape(require(\\"./font.woff2\\"));
-var ___CSS_LOADER_URL___7___ = urlEscape(require(\\"./font.eot\\"));
-var ___CSS_LOADER_URL___8___ = urlEscape(require(\\"package/font.ttf\\"));
-var ___CSS_LOADER_URL___9___ = urlEscape(require(\\"./font with spaces.eot\\"));
-var ___CSS_LOADER_URL___10___ = urlEscape(require(\\"./font.svg\\") + \\"#svgFontName\\");
-var ___CSS_LOADER_URL___11___ = urlEscape(require(\\"./font.woff2?foo=bar\\"));
-var ___CSS_LOADER_URL___12___ = urlEscape(require(\\"./font.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___13___ = urlEscape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___14___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___15___ = urlEscape(require(\\"./img2x.png\\"));
-var ___CSS_LOADER_URL___16___ = urlEscape(require(\\"./img.png?foo\\"));
-var ___CSS_LOADER_URL___17___ = urlEscape(require(\\"./img.png?foo=bar\\"));
-var ___CSS_LOADER_URL___18___ = urlEscape(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___19___ = urlEscape(require(\\"./img.png?\\"));
-var ___CSS_LOADER_URL___20___ = urlEscape(require(\\"./img-simple.png\\"));
-var ___CSS_LOADER_URL___21___ = urlEscape(require(\\"../url/img-simple.png\\"));
-var ___CSS_LOADER_URL___22___ = urlEscape(require(\\"aliasesImg/img.png\\"));
-var ___CSS_LOADER_URL___23___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___24___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___25___ = urlEscape(require(\\"./img1x.png\\"), true);
-var ___CSS_LOADER_URL___26___ = urlEscape(require(\\"./img2x.png\\"), true);
-var ___CSS_LOADER_URL___27___ = urlEscape(require(\\"./img img.png\\"), true);
-var ___CSS_LOADER_URL___28___ = urlEscape(require(\\"./img3x.png\\"), true);
-var ___CSS_LOADER_URL___29___ = urlEscape(require(\\"./img1x.png?foo=bar\\"), true);
-var ___CSS_LOADER_URL___30___ = urlEscape(require(\\"./img1x.png\\") + \\"#hash\\", true);
-var ___CSS_LOADER_URL___31___ = urlEscape(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
-var ___CSS_LOADER_URL___32___ = urlEscape(require(\\"./img3x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./img.png\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___2___ = getUrl(require(\\"package/img.png\\"));
+var ___CSS_LOADER_URL___3___ = getUrl(require(\\"./other-img.png\\"));
+var ___CSS_LOADER_URL___4___ = getUrl(require(\\"./img img.png\\"));
+var ___CSS_LOADER_URL___5___ = getUrl(require(\\"./font.woff\\"));
+var ___CSS_LOADER_URL___6___ = getUrl(require(\\"./font.woff2\\"));
+var ___CSS_LOADER_URL___7___ = getUrl(require(\\"./font.eot\\"));
+var ___CSS_LOADER_URL___8___ = getUrl(require(\\"package/font.ttf\\"));
+var ___CSS_LOADER_URL___9___ = getUrl(require(\\"./font with spaces.eot\\"));
+var ___CSS_LOADER_URL___10___ = getUrl(require(\\"./font.svg\\") + \\"#svgFontName\\");
+var ___CSS_LOADER_URL___11___ = getUrl(require(\\"./font.woff2?foo=bar\\"));
+var ___CSS_LOADER_URL___12___ = getUrl(require(\\"./font.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___13___ = getUrl(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___14___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___15___ = getUrl(require(\\"./img2x.png\\"));
+var ___CSS_LOADER_URL___16___ = getUrl(require(\\"./img.png?foo\\"));
+var ___CSS_LOADER_URL___17___ = getUrl(require(\\"./img.png?foo=bar\\"));
+var ___CSS_LOADER_URL___18___ = getUrl(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___19___ = getUrl(require(\\"./img.png?\\"));
+var ___CSS_LOADER_URL___20___ = getUrl(require(\\"./img-simple.png\\"));
+var ___CSS_LOADER_URL___21___ = getUrl(require(\\"../url/img-simple.png\\"));
+var ___CSS_LOADER_URL___22___ = getUrl(require(\\"aliasesImg/img.png\\"));
+var ___CSS_LOADER_URL___23___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___24___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___25___ = getUrl(require(\\"./img1x.png\\"), true);
+var ___CSS_LOADER_URL___26___ = getUrl(require(\\"./img2x.png\\"), true);
+var ___CSS_LOADER_URL___27___ = getUrl(require(\\"./img img.png\\"), true);
+var ___CSS_LOADER_URL___28___ = getUrl(require(\\"./img3x.png\\"), true);
+var ___CSS_LOADER_URL___29___ = getUrl(require(\\"./img1x.png?foo=bar\\"), true);
+var ___CSS_LOADER_URL___30___ = getUrl(require(\\"./img1x.png\\") + \\"#hash\\", true);
+var ___CSS_LOADER_URL___31___ = getUrl(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
+var ___CSS_LOADER_URL___32___ = getUrl(require(\\"./img3x.png\\"));
 // Module
-exports.push([module.id, \\"._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes O9YPhh3OZdzrkj25z-J92 {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\n  \\\\n  \\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n._2rb58RF5u2ij-3X8XSJaVP {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.mrf4tRz4T71pNku_3IMH3 {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.c5dNFA35opKWoGz7aRj0k {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n._2Q5a0g3xEHAboOADfIxHa5 {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n._2TX-7lb63hK5h5DzELIAbU {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\"._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.lml_5t-nQdGlKc9OtKjUO {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes O9YPhh3OZdzrkj25z-J92 {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._1fj5hnOVZ8KZVIGyZbPW3p {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n._2rb58RF5u2ij-3X8XSJaVP {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.mrf4tRz4T71pNku_3IMH3 {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.c5dNFA35opKWoGz7aRj0k {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n._2Q5a0g3xEHAboOADfIxHa5 {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n._2TX-7lb63hK5h5DzELIAbU {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n._7NvzxsKlD5xT5cUVu5Ad- {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 // Exports
 exports.locals = {
 	\\"class\\": \\"_7NvzxsKlD5xT5cUVu5Ad-\\",
@@ -2283,7 +2257,6 @@ Warning
 Warning
 
 (136:3) Unable to find uri in 'background: green url(
-  
   ) xyz'",
   "ModuleWarning: Module Warning (from \`replaced original path\`):
 Warning
@@ -2478,7 +2451,6 @@ b {
 
 .class {
   background: green url(
-  
   ) xyz;
 }
 
@@ -2623,44 +2595,42 @@ exports[`url option true: module 1`] = `
 "exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
 // Imports
 exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported.css\\"), \\"\\");
-var urlEscape = require(\\"../../../src/runtime/url-escape.js\\");
-var ___CSS_LOADER_URL___0___ = urlEscape(require(\\"./img.png\\"));
-var ___CSS_LOADER_URL___1___ = urlEscape(require(\\"./img.png\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___2___ = urlEscape(require(\\"package/img.png\\"));
-var ___CSS_LOADER_URL___3___ = urlEscape(require(\\"./other-img.png\\"));
-var ___CSS_LOADER_URL___4___ = urlEscape(require(\\"./img img.png\\"));
-var ___CSS_LOADER_URL___5___ = urlEscape(require(\\"./font.woff\\"));
-var ___CSS_LOADER_URL___6___ = urlEscape(require(\\"./font.woff2\\"));
-var ___CSS_LOADER_URL___7___ = urlEscape(require(\\"./font.eot\\"));
-var ___CSS_LOADER_URL___8___ = urlEscape(require(\\"package/font.ttf\\"));
-var ___CSS_LOADER_URL___9___ = urlEscape(require(\\"./font with spaces.eot\\"));
-var ___CSS_LOADER_URL___10___ = urlEscape(require(\\"./font.svg\\") + \\"#svgFontName\\");
-var ___CSS_LOADER_URL___11___ = urlEscape(require(\\"./font.woff2?foo=bar\\"));
-var ___CSS_LOADER_URL___12___ = urlEscape(require(\\"./font.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___13___ = urlEscape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
-var ___CSS_LOADER_URL___14___ = urlEscape(require(\\"./img1x.png\\"));
-var ___CSS_LOADER_URL___15___ = urlEscape(require(\\"./img2x.png\\"));
-var ___CSS_LOADER_URL___16___ = urlEscape(require(\\"./img.png?foo\\"));
-var ___CSS_LOADER_URL___17___ = urlEscape(require(\\"./img.png?foo=bar\\"));
-var ___CSS_LOADER_URL___18___ = urlEscape(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
-var ___CSS_LOADER_URL___19___ = urlEscape(require(\\"./img.png?\\"));
-var ___CSS_LOADER_URL___20___ = urlEscape(require(\\"./img-simple.png\\"));
-var ___CSS_LOADER_URL___21___ = urlEscape(require(\\"../url/img-simple.png\\"));
-var ___CSS_LOADER_URL___22___ = urlEscape(require(\\"aliasesImg/img.png\\"));
-var ___CSS_LOADER_URL___23___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___24___ = urlEscape(require(\\"./nested/img.png\\"));
-var ___CSS_LOADER_URL___25___ = urlEscape(require(\\"./img1x.png\\"), true);
-var ___CSS_LOADER_URL___26___ = urlEscape(require(\\"./img2x.png\\"), true);
-var ___CSS_LOADER_URL___27___ = urlEscape(require(\\"./img img.png\\"), true);
-var ___CSS_LOADER_URL___28___ = urlEscape(require(\\"./img3x.png\\"), true);
-var ___CSS_LOADER_URL___29___ = urlEscape(require(\\"./img1x.png?foo=bar\\"), true);
-var ___CSS_LOADER_URL___30___ = urlEscape(require(\\"./img1x.png\\") + \\"#hash\\", true);
-var ___CSS_LOADER_URL___31___ = urlEscape(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
-var ___CSS_LOADER_URL___32___ = urlEscape(require(\\"./img3x.png\\"));
-
+var getUrl = require(\\"../../../src/runtime/getUrl.js\\");
+var ___CSS_LOADER_URL___0___ = getUrl(require(\\"./img.png\\"));
+var ___CSS_LOADER_URL___1___ = getUrl(require(\\"./img.png\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___2___ = getUrl(require(\\"package/img.png\\"));
+var ___CSS_LOADER_URL___3___ = getUrl(require(\\"./other-img.png\\"));
+var ___CSS_LOADER_URL___4___ = getUrl(require(\\"./img img.png\\"));
+var ___CSS_LOADER_URL___5___ = getUrl(require(\\"./font.woff\\"));
+var ___CSS_LOADER_URL___6___ = getUrl(require(\\"./font.woff2\\"));
+var ___CSS_LOADER_URL___7___ = getUrl(require(\\"./font.eot\\"));
+var ___CSS_LOADER_URL___8___ = getUrl(require(\\"package/font.ttf\\"));
+var ___CSS_LOADER_URL___9___ = getUrl(require(\\"./font with spaces.eot\\"));
+var ___CSS_LOADER_URL___10___ = getUrl(require(\\"./font.svg\\") + \\"#svgFontName\\");
+var ___CSS_LOADER_URL___11___ = getUrl(require(\\"./font.woff2?foo=bar\\"));
+var ___CSS_LOADER_URL___12___ = getUrl(require(\\"./font.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___13___ = getUrl(require(\\"./font with spaces.eot\\") + \\"?#iefix\\");
+var ___CSS_LOADER_URL___14___ = getUrl(require(\\"./img1x.png\\"));
+var ___CSS_LOADER_URL___15___ = getUrl(require(\\"./img2x.png\\"));
+var ___CSS_LOADER_URL___16___ = getUrl(require(\\"./img.png?foo\\"));
+var ___CSS_LOADER_URL___17___ = getUrl(require(\\"./img.png?foo=bar\\"));
+var ___CSS_LOADER_URL___18___ = getUrl(require(\\"./img.png?foo=bar\\") + \\"#hash\\");
+var ___CSS_LOADER_URL___19___ = getUrl(require(\\"./img.png?\\"));
+var ___CSS_LOADER_URL___20___ = getUrl(require(\\"./img-simple.png\\"));
+var ___CSS_LOADER_URL___21___ = getUrl(require(\\"../url/img-simple.png\\"));
+var ___CSS_LOADER_URL___22___ = getUrl(require(\\"aliasesImg/img.png\\"));
+var ___CSS_LOADER_URL___23___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___24___ = getUrl(require(\\"./nested/img.png\\"));
+var ___CSS_LOADER_URL___25___ = getUrl(require(\\"./img1x.png\\"), true);
+var ___CSS_LOADER_URL___26___ = getUrl(require(\\"./img2x.png\\"), true);
+var ___CSS_LOADER_URL___27___ = getUrl(require(\\"./img img.png\\"), true);
+var ___CSS_LOADER_URL___28___ = getUrl(require(\\"./img3x.png\\"), true);
+var ___CSS_LOADER_URL___29___ = getUrl(require(\\"./img1x.png?foo=bar\\"), true);
+var ___CSS_LOADER_URL___30___ = getUrl(require(\\"./img1x.png\\") + \\"#hash\\", true);
+var ___CSS_LOADER_URL___31___ = getUrl(require(\\"./img1x.png\\") + \\"?#iefix\\", true);
+var ___CSS_LOADER_URL___32___ = getUrl(require(\\"./img3x.png\\"));
 // Module
-exports.push([module.id, \\".class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  \\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
-
+exports.push([module.id, \\".class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___1___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\\\n    \\" + ___CSS_LOADER_URL___0___ + \\"\\\\n  );\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___0___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___2___ + \\") url(\\" + ___CSS_LOADER_URL___3___ + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url( \\" + ___CSS_LOADER_URL___4___ + \\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"><filter id=\\\\\\"filter\\\\\\"><feGaussianBlur in=\\\\\\"SourceAlpha\\\\\\" stdDeviation=\\\\\\"0\\\\\\" /><feOffset dx=\\\\\\"1\\\\\\" dy=\\\\\\"2\\\\\\" result=\\\\\\"offsetblur\\\\\\" /><feFlood flood-color=\\\\\\"rgba(255,255,255,1)\\\\\\" /><feComposite in2=\\\\\\"offsetblur\\\\\\" operator=\\\\\\"in\\\\\\" /><feMerge><feMergeNode /><feMergeNode in=\\\\\\"SourceGraphic\\\\\\" /></feMerge></filter></svg>#filter');\\\\n}\\\\n\\\\n.class {\\\\n  filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n  filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\" + ___CSS_LOADER_URL___5___ + \\") format('woff'),\\\\n    url(\\" + ___CSS_LOADER_URL___6___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___7___ + \\") format('eot'),\\\\n    url(\\" + ___CSS_LOADER_URL___8___ + \\") format('truetype'),\\\\n    url(\\" + ___CSS_LOADER_URL___9___ + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n    url(\\" + ___CSS_LOADER_URL___10___ + \\") format('svg'),\\\\n    url(\\" + ___CSS_LOADER_URL___11___ + \\") format('woff2'),\\\\n    url(\\" + ___CSS_LOADER_URL___12___ + \\") format('embedded-opentype'),\\\\n    url(\\" + ___CSS_LOADER_URL___13___ + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n  body {\\\\n    background: url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n  }\\\\n}\\\\n\\\\na {\\\\n  content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n  content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n  background: green url(\\" + ___CSS_LOADER_URL___0___ + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n  background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url('   ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(\\\\n  ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___16___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___17___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___18___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: url(\\" + ___CSS_LOADER_URL___19___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background-image: url(\\" + ___CSS_LOADER_URL___0___ + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\\\\\\") url(\\" + ___CSS_LOADER_URL___0___ + \\");\\\\n}\\\\n\\\\n.class {\\\\n  background: ___CSS_LOADER_URL___;\\\\n  background: ___CSS_LOADER_URL___INDEX___;\\\\n  background: ___CSS_LOADER_URL___99999___;\\\\n  background: ___CSS_LOADER_IMPORT___;\\\\n  background: ___CSS_LOADER_IMPORT___INDEX___;\\\\n  background: ___CSS_LOADER_IMPORT___99999___;\\\\n}\\\\n\\\\n.pure-url {\\\\n  background: url(\\" + ___CSS_LOADER_URL___20___ + \\");\\\\n}\\\\n\\\\n.not-resolved {\\\\n  background: url('/img-simple.png');\\\\n}\\\\n\\\\n.above-below {\\\\n  background: url(\\" + ___CSS_LOADER_URL___21___ + \\");\\\\n}\\\\n\\\\n.tilde {\\\\n  background: url(\\" + ___CSS_LOADER_URL___2___ + \\");\\\\n}\\\\n\\\\n.aliases {\\\\n  background: url(\\" + ___CSS_LOADER_URL___22___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___23___ + \\");\\\\n}\\\\n\\\\na {\\\\n  background: url(\\" + ___CSS_LOADER_URL___24___ + \\");\\\\n}\\\\n\\\\n@font-face {\\\\n  src: url(\\\\\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n  /* Broken */\\\\n  background-image: -webkit-image-set();\\\\n  background-image: -webkit-image-set('');\\\\n  background-image: image-set();\\\\n  background-image: image-set('');\\\\n  background-image: image-set(\\\\\\"\\\\\\");\\\\n  background-image: image-set(\\\\\\"\\\\\\" 1x);\\\\n  background-image: image-set(url());\\\\n  background-image: image-set(\\\\n    url()\\\\n  );\\\\n  background-image: image-set(URL());\\\\n  background-image: image-set(url(''));\\\\n  background-image: image-set(url(\\\\\\"\\\\\\"));\\\\n  background-image: image-set(url('') 1x);\\\\n  background-image: image-set(1x);\\\\n  background-image: image-set(\\\\n    1x\\\\n  );\\\\n  background: image-set(calc(1rem + 1px) 1x);\\\\n\\\\n  /* Strings */\\\\n  background-image: -webkit-image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___27___ + \\" 1x, \\" + ___CSS_LOADER_URL___27___ + \\" 2x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x),\\\\n    image-set(\\" + ___CSS_LOADER_URL___25___ + \\" 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n  background-image: image-set(\\\\n    \\" + ___CSS_LOADER_URL___25___ + \\" 1x,\\\\n    \\" + ___CSS_LOADER_URL___26___ + \\" 2x,\\\\n    \\" + ___CSS_LOADER_URL___28___ + \\" 600dpi\\\\n  );\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___29___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___30___ + \\" 1x);\\\\n  background-image: image-set(\\" + ___CSS_LOADER_URL___31___ + \\" 1x);\\\\n\\\\n  /* With \`url\` function */\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: -webkit-image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: -webkit-image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x);\\\\n  background-image: image-set(\\\\n    url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x,\\\\n    url(\\" + ___CSS_LOADER_URL___15___ + \\") 2x,\\\\n    url(\\" + ___CSS_LOADER_URL___32___ + \\") 600dpi\\\\n  );\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___4___ + \\") 1x, url(\\" + ___CSS_LOADER_URL___4___ + \\") 2x);\\\\n\\\\n  background-image: image-set(url(\\" + ___CSS_LOADER_URL___14___ + \\") 1x, \\" + ___CSS_LOADER_URL___26___ + \\" 2x);\\\\n}\\\\n\\", \\"\\"]);
 "
 `;
 
diff --git a/test/__snapshots__/validate-options.test.js.snap b/test/__snapshots__/validate-options.test.js.snap
new file mode 100644
index 00000000..c50930a9
--- /dev/null
+++ b/test/__snapshots__/validate-options.test.js.snap
@@ -0,0 +1,184 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`validate options 1`] = `
+"CSS Loader Invalid Options
+
+options.url should be boolean
+options.url should pass \\"instanceof\\" keyword validation
+options.url should match some schema in anyOf
+"
+`;
+
+exports[`validate options 2`] = `
+"CSS Loader Invalid Options
+
+options.import should be boolean
+options.import should pass \\"instanceof\\" keyword validation
+options.import should match some schema in anyOf
+"
+`;
+
+exports[`validate options 3`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be equal to one of the allowed values
+options.modules should be object
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 4`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be equal to one of the allowed values
+options.modules should be object
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 5`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be equal to one of the allowed values
+options.modules should be object
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 6`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.mode should be string
+options.modules.mode should be equal to one of the allowed values
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 7`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.mode should be equal to one of the allowed values
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 8`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.mode should be equal to one of the allowed values
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 9`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.mode should be equal to one of the allowed values
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 10`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.localIdentName should be string
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 11`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.context should be string
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 12`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.hashPrefix should be string
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 13`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.getLocalIdent should be boolean
+options.modules.getLocalIdent should pass \\"instanceof\\" keyword validation
+options.modules.getLocalIdent should match some schema in anyOf
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 14`] = `
+"CSS Loader Invalid Options
+
+options.modules should be boolean
+options.modules should be string
+options.modules should be equal to one of the allowed values
+options.modules.localIdentRegExp should be string
+options.modules.localIdentRegExp should pass \\"instanceof\\" keyword validation
+options.modules.localIdentRegExp should match some schema in anyOf
+options.modules should match some schema in anyOf
+"
+`;
+
+exports[`validate options 15`] = `
+"CSS Loader Invalid Options
+
+options.sourceMap should be boolean
+"
+`;
+
+exports[`validate options 16`] = `
+"CSS Loader Invalid Options
+
+options.localsConvention should be equal to one of the allowed values
+options.localsConvention should match some schema in anyOf
+"
+`;
+
+exports[`validate options 17`] = `
+"CSS Loader Invalid Options
+
+options.importLoaders should be boolean
+options.importLoaders should be number
+options.importLoaders should match some schema in anyOf
+"
+`;
+
+exports[`validate options 18`] = `
+"CSS Loader Invalid Options
+
+options.onlyLocals should be boolean
+"
+`;
diff --git a/test/fixtures/modules/composes.css b/test/fixtures/modules/composes.css
index abf1a32a..015963f2 100644
--- a/test/fixtures/modules/composes.css
+++ b/test/fixtures/modules/composes.css
@@ -1,35 +1,40 @@
 @import url(test-other.css) (min-width: 100px);
 
-@value def from './values.css';
-@value other from './values.css';
-@value other from './values.css';
-@value something from './something.css';
-@value foo: blue;
-@value bar: block;
+@value v-def from './values.css';
+@value v-other from './values.css';
+@value v-other from './values.css';
+@value s-white from './values.css';
+@value m-small from './values.css';
+@value v-something from './something.css';
+@value v-foo: blue;
+@value v-bar: block;
+@value v-primary: #BF4040;
+@value s-black: black-selector;
+@value m-large: (min-width: 960px);
 
 .ghi {
-  color: def;
+  color: v-def;
 }
 
 .class {
-  color: foo;
+  color: v-foo;
 }
 
 .other {
-  display: bar;
+  display: v-bar;
 }
 
 .other-other {
-  width: something;
+  width: v-something;
 }
 
 .green {
-  color: other;
+  color: v-other;
 }
 
 .foo {
-  prop: def;
-  duplicate: other;
+  prop: v-def;
+  duplicate: v-other;
 }
 
 .simple {
@@ -56,3 +61,85 @@
   color: gainsboro;
   composes: imported-alias from '~aliasesComposes/alias.css';
 }
+
+.primary-selector {
+  color: v-primary;
+}
+
+.s-black {
+  color: black;
+}
+
+@media m-large {
+  .header {
+    padding: 0 20px;
+  }
+}
+
+.s-white {
+  color: white;
+}
+
+@media m-small {
+  .header {
+    padding: 20px 20px;
+  }
+}
+
+@value v-ident: validIdent;
+@value v-pre-defined-ident: left;
+@value v-string: 'content';
+@value v-string-1: '';
+@value v-url: url(https://www.exammple.com/images/my-background.png);
+@value v-url-1: url('https://www.exammple.com/images/my-background.png');
+@value v-url-2: url("https://www.exammple.com/images/my-background.png");
+@value v-integer: 100;
+@value v-integer-1: -100;
+@value v-integer-2: +100;
+@value v-number: .60;
+@value v-number-1: -456.8;
+@value v-number-2: -3.4e-2;
+@value v-dimension: 12px;
+@value v-percentage: 100%;
+@value v-hex: #fff;
+@value v-comment: /* comment */;
+@value v-function: rgb(0,0,0);
+@value v-unicode-range: U+0025-00FF;
+
+.foobarbaz {
+  v-ident: v-ident;
+  v-pre-defined-ident: v-pre-defined-ident;
+  v-string: v-string;
+  v-string-1: v-string-1;
+  v-url: v-url;
+  v-url-1: v-url-1;
+  v-url-2: v-url-2;
+  v-integer: v-integer;
+  v-integer-1: v-integer-1;
+  v-integer-2: v-integer-2;
+  v-number: v-number;
+  v-number-1: v-number-1;
+  v-number-2: v-number-2;
+  v-dimension: v-dimension;
+  v-percentage: v-percentage;
+  v-hex: v-hex;
+  v-comment: v-comment 10px v-comment;
+  v-function: v-function;
+  v-unicode-range: v-unicode-range;
+  mutliple: v-hex v-number v-percentage;
+}
+
+
+a {
+  content: v-string;
+}
+
+@supports (content: v-string) {
+  a {
+    content: v-string;
+  }
+}
+
+[class~=v-string] {
+  color:green;
+}
diff --git a/test/fixtures/modules/localIdentName.css b/test/fixtures/modules/localIdentName.css
index e670d069..e7c3c2f9 100644
--- a/test/fixtures/modules/localIdentName.css
+++ b/test/fixtures/modules/localIdentName.css
@@ -1,27 +1,113 @@
-:local(.test) {
+.test {
   background: red;
 }
 
-:local(._test) {
+._test {
   background: blue;
 }
 
-:local(.className) {
+.className {
   background: red;
 }
 
-:local(#someId) {
+#someId {
   background: green;
 }
 
-:local(.className .subClass) {
+.className .subClass {
   color: green;
 }
 
-:local(#someId .subClass) {
+#someId .subClass {
   color: blue;
 }
 
-:local(.-a0-34a___f) {
+.-a0-34a___f {
   color: red;
 }
+
+.m_x_\@ {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.B\&W\? {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+/* matches elements with class=":`(" */
+.\3A \`\( {
+  color: aqua;
+}
+
+/* matches elements with class="1a2b3c" */
+.\31 a2b3c {
+  color: aliceblue;
+}
+
+/* matches the element with id="#fake-id" */
+#\#fake-id {
+  color: antiquewhite;
+}
+
+/* matches the element with id="-a-b-c-" */
+#-a-b-c- {
+  color: azure;
+}
+
+/* matches the element with id="©" */
+#© {
+  color: black;
+}
+
+.♥ { background: lime; }
+.© { background: lime; }
+.“‘’” { background: lime; }
+.☺☃ { background: lime; }
+.⌘⌥ { background: lime; }
+.𝄞♪♩♫♬ { background: lime; }
+.💩 { background: lime; }
+.\? { background: lime; }
+.\@ { background: lime; }
+.\. { background: lime; }
+.\3A \) { background: lime; }
+.\3A \`\( { background: lime; }
+.\31 23 { background: lime; }
+.\31 a2b3c { background: lime; }
+.\<p\> { background: lime; }
+.\<\>\<\<\<\>\>\<\> { background: lime; }
+.\+\+\+\+\+\+\+\+\+\+\[\>\+\+\+\+\+\+\+\>\+\+\+\+\+\+\+\+\+\+\>\+\+\+\>\+\<\<\<\<\-\]\>\+\+\.\>\+\.\+\+\+\+\+\+\+\.\.\+\+\+\.\>\+\+\.\<\<\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\.\>\.\+\+\+\.\-\-\-\-\-\-\.\-\-\-\-\-\-\-\-\.\>\+\.\>\. { background: lime; }
+.\# { background: lime; }
+.\#\# { background: lime; }
+.\#\.\#\.\# { background: lime; }
+.\_ { background: lime; }
+.\{\} { background: lime; }
+.\#fake\-id { background: lime; }
+.foo\.bar { background: lime; }
+.\3A hover { background: lime; }
+.\3A hover\3A focus\3A active { background: lime; }
+.\[attr\=value\] { background: lime; }
+.f\/o\/o { background: lime; }
+.f\\o\\o { background: lime; }
+.f\*o\*o { background: lime; }
+.f\!o\!o { background: lime; }
+.f\'o\'o { background: lime; }
+.f\~o\~o { background: lime; }
+.f\+o\+o { background: lime; }
+
+.foo\/bar {
+  background: hotpink;
+}
+
+.foo\\bar {
+  background: hotpink;
+}
+
+.foo\/bar\/baz {
+  background: hotpink;
+}
+
+.foo\\bar\\baz {
+  background: hotpink;
+}
diff --git a/test/fixtures/modules/camelCase.css b/test/fixtures/modules/localsConvention.css
similarity index 100%
rename from test/fixtures/modules/camelCase.css
rename to test/fixtures/modules/localsConvention.css
diff --git a/test/fixtures/modules/something.css b/test/fixtures/modules/something.css
index 8d4c11e7..14efd103 100644
--- a/test/fixtures/modules/something.css
+++ b/test/fixtures/modules/something.css
@@ -1 +1 @@
-@value something: 2112moon;
+@value v-something: 2112moon;
diff --git a/test/fixtures/modules/tests-cases/values-10/source.css b/test/fixtures/modules/tests-cases/values-10/source.css
new file mode 100644
index 00000000..69c88083
--- /dev/null
+++ b/test/fixtures/modules/tests-cases/values-10/source.css
@@ -0,0 +1,18 @@
+@value v-primary: #BF4040;
+@value s-black: black-selector;
+@value m-large: (min-width: 960px);
+
+.header {
+  color: v-primary;
+  padding: 0 10px;
+}
+
+.s-black {
+  color: black;
+}
+
+@media m-large {
+  .header {
+    padding: 0 20px;
+  }
+}
diff --git a/test/fixtures/modules/values.css b/test/fixtures/modules/values.css
index 34aefa7d..017265bd 100644
--- a/test/fixtures/modules/values.css
+++ b/test/fixtures/modules/values.css
@@ -1,2 +1,4 @@
-@value def: red;
-@value other: green;
+@value v-def: red;
+@value v-other: green;
+@value s-white: white;
+@value m-small: (min-width: 320px);
diff --git a/test/getLocalIdent-option.test.js b/test/getLocalIdent-option.test.js
deleted file mode 100644
index 9436da16..00000000
--- a/test/getLocalIdent-option.test.js
+++ /dev/null
@@ -1,130 +0,0 @@
-import path from 'path';
-
-const { webpack, evaluated } = require('./helpers');
-
-describe('getLocalIdent option', () => {
-  it('should work (`modules: true`)', async () => {
-    const config = {
-      loader: {
-        options: {
-          modules: true,
-          getLocalIdent() {
-            return 'foo';
-          },
-        },
-      },
-    };
-    const testId = './modules/getLocalIdent.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should work (`modules: false`)', async () => {
-    const config = {
-      loader: {
-        options: {
-          modules: 'global',
-          getLocalIdent() {
-            return 'foo';
-          },
-        },
-      },
-    };
-    const testId = './modules/getLocalIdent.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should accepts arguments', async () => {
-    const config = {
-      loader: {
-        options: {
-          modules: true,
-          localIdentRegExp: 'regExp',
-          context: 'context',
-          hashPrefix: 'hash',
-          getLocalIdent(loaderContext, localIdentName, localName, options) {
-            expect(loaderContext).toBeDefined();
-            expect(typeof localIdentName).toBe('string');
-            expect(typeof localName).toBe('string');
-            expect(options).toBeDefined();
-
-            expect(options.regExp).toBe('regExp');
-            expect(options.context).toBe('context');
-            expect(options.hashPrefix).toBe('hash');
-
-            return 'foo';
-          },
-        },
-      },
-    };
-    const testId = './modules/getLocalIdent.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should respect `context` option', async () => {
-    const config = {
-      loader: {
-        options: {
-          context: path.resolve(__dirname, 'fixtures/modules'),
-          modules: true,
-        },
-      },
-    };
-    const testId = './modules/getLocalIdent.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should allow to use `false` value', async () => {
-    const config = {
-      loader: {
-        options: {
-          context: path.resolve(__dirname, 'fixtures/modules'),
-          modules: true,
-          localIdentName: 'before_[local]__[hash:base64:3]_after',
-          getLocalIdent: false,
-        },
-      },
-    };
-    const testId = './modules/getLocalIdent.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-});
diff --git a/test/helpers.js b/test/helpers.js
index 67a9d442..8b355946 100644
--- a/test/helpers.js
+++ b/test/helpers.js
@@ -20,9 +20,9 @@ function evaluated(output, modules, moduleId = 1) {
         // eslint-disable-next-line global-require
         return require('../src/runtime/api');
       }
-      if (module.indexOf('runtime/url-escape') >= 0) {
+      if (module.indexOf('runtime/get-url') >= 0) {
         // eslint-disable-next-line global-require
-        return require('../src/runtime/url-escape');
+        return require('../src/runtime/getUrl');
       }
       if (/^-!.*?!.*$/.test(module)) {
         // eslint-disable-next-line no-param-reassign
@@ -58,6 +58,7 @@ function evaluated(output, modules, moduleId = 1) {
             'modules/tests-cases/composes-multiple',
             'modules/tests-cases/composes-with-importing',
             'modules/tests-cases/media-2',
+            '.',
           ].map((importedPath) =>
             path.resolve(
               __dirname,
diff --git a/test/import-option.test.js b/test/import-option.test.js
index fc6f92d1..0cc4590e 100644
--- a/test/import-option.test.js
+++ b/test/import-option.test.js
@@ -62,7 +62,12 @@ describe('import option', () => {
           import: (parsedImport, resourcePath) => {
             expect(typeof resourcePath === 'string').toBe(true);
 
-            return parsedImport.url.includes('test.css');
+            // Don't handle `test.css`
+            if (parsedImport.url.includes('test.css')) {
+              return false;
+            }
+
+            return true;
           },
         },
       },
diff --git a/test/localIdentName-option.test.js b/test/localIdentName-option.test.js
deleted file mode 100644
index 91aac177..00000000
--- a/test/localIdentName-option.test.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import path from 'path';
-
-import { webpack, evaluated } from './helpers';
-
-describe('localIdentName option', () => {
-  it('basic', async () => {
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should have hash', async () => {
-    const config = {
-      loader: {
-        options: {
-          localIdentName: '[name]--[local]--[hash:base64:5]',
-          context: path.resolve(__dirname),
-        },
-      },
-    };
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should have path naming with context', async () => {
-    const config = {
-      loader: {
-        options: {
-          localIdentName: '[path]-[name]--[local]',
-          context: path.resolve(__dirname),
-        },
-      },
-    };
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should use hash prefix', async () => {
-    const config = {
-      loader: {
-        options: { localIdentName: '[local]--[hash]', hashPrefix: 'x' },
-      },
-    };
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should prefixes leading hyphen + digit with underscore', async () => {
-    const config = { loader: { options: { localIdentName: '-1[local]' } } };
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should prefixes two leading hyphens with underscore', async () => {
-    const config = { loader: { options: { localIdentName: '--[local]' } } };
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-
-  it('should saves underscore prefix in exported class names', async () => {
-    const config = { loader: { options: { localIdentName: '[local]' } } };
-    const testId = './modules/localIdentName.css';
-    const stats = await webpack(testId, config);
-    const { modules } = stats.toJson();
-    const module = modules.find((m) => m.id === testId);
-    const evaluatedModule = evaluated(module.source, modules);
-
-    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-    expect(evaluatedModule.locals).toMatchSnapshot('locals');
-    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-    expect(stats.compilation.errors).toMatchSnapshot('errors');
-  });
-});
diff --git a/test/camelCase-option.test.js b/test/localsConvention-option.test.js
similarity index 70%
rename from test/camelCase-option.test.js
rename to test/localsConvention-option.test.js
index 909a45d3..5c8d7dda 100644
--- a/test/camelCase-option.test.js
+++ b/test/localsConvention-option.test.js
@@ -1,16 +1,30 @@
 import { webpack, evaluated } from './helpers';
 
-describe('camelCase option', () => {
-  it('true', async () => {
+describe('localsConvention option', () => {
+  it('not specified', async () => {
+    const config = { loader: { options: { modules: true } } };
+    const testId = './modules/localsConvention.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('asIs', async () => {
     const config = {
       loader: {
         options: {
           modules: true,
-          camelCase: true,
+          localsConvention: 'asIs',
         },
       },
     };
-    const testId = './modules/camelCase.css';
+    const testId = './modules/localsConvention.css';
     const stats = await webpack(testId, config);
     const { modules } = stats.toJson();
     const module = modules.find((m) => m.id === testId);
@@ -22,9 +36,16 @@ describe('camelCase option', () => {
     expect(stats.compilation.errors).toMatchSnapshot('errors');
   });
 
-  it('not specified', async () => {
-    const config = { loader: { options: { modules: true } } };
-    const testId = './modules/camelCase.css';
+  it('camelCase', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: true,
+          localsConvention: 'camelCase',
+        },
+      },
+    };
+    const testId = './modules/localsConvention.css';
     const stats = await webpack(testId, config);
     const { modules } = stats.toJson();
     const module = modules.find((m) => m.id === testId);
@@ -36,16 +57,16 @@ describe('camelCase option', () => {
     expect(stats.compilation.errors).toMatchSnapshot('errors');
   });
 
-  it('dashes', async () => {
+  it('camelCaseOnly', async () => {
     const config = {
       loader: {
         options: {
           modules: true,
-          camelCase: 'dashes',
+          localsConvention: 'camelCaseOnly',
         },
       },
     };
-    const testId = './modules/camelCase.css';
+    const testId = './modules/localsConvention.css';
     const stats = await webpack(testId, config);
     const { modules } = stats.toJson();
     const module = modules.find((m) => m.id === testId);
@@ -57,16 +78,16 @@ describe('camelCase option', () => {
     expect(stats.compilation.errors).toMatchSnapshot('errors');
   });
 
-  it('only', async () => {
+  it('dashes', async () => {
     const config = {
       loader: {
         options: {
           modules: true,
-          camelCase: 'only',
+          localsConvention: 'dashes',
         },
       },
     };
-    const testId = './modules/camelCase.css';
+    const testId = './modules/localsConvention.css';
     const stats = await webpack(testId, config);
     const { modules } = stats.toJson();
     const module = modules.find((m) => m.id === testId);
@@ -83,11 +104,11 @@ describe('camelCase option', () => {
       loader: {
         options: {
           modules: true,
-          camelCase: 'dashesOnly',
+          localsConvention: 'dashesOnly',
         },
       },
     };
-    const testId = './modules/camelCase.css';
+    const testId = './modules/localsConvention.css';
     const stats = await webpack(testId, config);
     const { modules } = stats.toJson();
     const module = modules.find((m) => m.id === testId);
diff --git a/test/modules-option.test.js b/test/modules-option.test.js
index 84dae6ec..75d89fe4 100644
--- a/test/modules-option.test.js
+++ b/test/modules-option.test.js
@@ -7,36 +7,311 @@ const testCasesPath = path.join(__dirname, 'fixtures/modules/tests-cases');
 const testCases = fs.readdirSync(testCasesPath);
 
 describe('modules', () => {
-  [false, true].forEach((exportOnlyLocalsValue) => {
-    [true, 'local', 'global', false].forEach((modulesValue) => {
-      testCases.forEach((name) => {
-        it(`case \`${name}\`: (export \`${
-          exportOnlyLocalsValue ? 'only locals' : 'all'
-        }\`) (\`modules\` value is \`${modulesValue})\``, async () => {
-          const config = {
-            loader: {
-              options: {
-                modules: modulesValue,
-                exportOnlyLocals: exportOnlyLocalsValue,
-                localIdentName: '_[local]',
-              },
+  [
+    true,
+    false,
+    'local',
+    'global',
+    { mode: 'local' },
+    { mode: 'global' },
+  ].forEach((modulesValue) => {
+    testCases.forEach((name) => {
+      it(`case \`${name}\` (\`modules\` value is \`${
+        modulesValue.mode
+          ? `object with mode ${modulesValue.mode}`
+          : modulesValue
+      })\``, async () => {
+        const config = {
+          loader: {
+            options: {
+              modules: modulesValue.mode
+                ? {
+                    mode: modulesValue.mode,
+                    localIdentName: '_[local]',
+                  }
+                : modulesValue,
             },
-          };
-          const testId = `./modules/tests-cases/${name}/source.css`;
-          const stats = await webpack(testId, config);
-          const { modules } = stats.toJson();
-          const module = modules.find((m) => m.id === testId);
-          const evaluatedModule = evaluated(module.source, modules);
-
-          expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
-          expect(evaluatedModule.locals).toMatchSnapshot('locals');
-          expect(stats.compilation.warnings).toMatchSnapshot('warnings');
-          expect(stats.compilation.errors).toMatchSnapshot('errors');
-        });
+          },
+        };
+        const testId = `./modules/tests-cases/${name}/source.css`;
+        const stats = await webpack(testId, config);
+        const { modules } = stats.toJson();
+        const module = modules.find((m) => m.id === testId);
+        const evaluatedModule = evaluated(module.source, modules);
+
+        expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+        expect(evaluatedModule.locals).toMatchSnapshot('locals');
+        expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+        expect(stats.compilation.errors).toMatchSnapshot('errors');
       });
     });
   });
 
+  it('should respects localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '[name]--[local]--[hash:base64:5]',
+            context: path.resolve(__dirname),
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should respects context option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '[hash:base64:8]',
+            context: path.resolve(__dirname),
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should respects path in localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '[path]--[name]--[local]',
+            context: path.resolve(__dirname),
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should respects hashPrefix option with localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '[local]--[hash]',
+            hashPrefix: 'x',
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should prefixes leading hyphen + digit with underscore with localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '-1[local]',
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should prefixes two leading hyphens with underscore with localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '--[local]',
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should saves underscore prefix in exported class names with localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '[local]',
+          },
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should correctly replace escaped symbols in selector with localIdentName option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentName: '[local]--[hash:base64:4]',
+          },
+          importLoaders: 2,
+        },
+      },
+    };
+    const testId = './modules/localIdentName.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source, modules);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should respects getLocalIdent option (local mode)', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            getLocalIdent() {
+              return 'foo';
+            },
+          },
+        },
+      },
+    };
+    const testId = './modules/getLocalIdent.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should accepts all arguments for getLocalIdent option', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            localIdentRegExp: 'regExp',
+            context: 'context',
+            hashPrefix: 'hash',
+            getLocalIdent(loaderContext, localIdentName, localName, options) {
+              expect(loaderContext).toBeDefined();
+              expect(typeof localIdentName).toBe('string');
+              expect(typeof localName).toBe('string');
+              expect(options).toBeDefined();
+
+              expect(options.regExp).toBe('regExp');
+              expect(options.context).toBe('context');
+              expect(options.hashPrefix).toBe('hash');
+
+              return 'foo';
+            },
+          },
+        },
+      },
+    };
+    const testId = './modules/getLocalIdent.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
+  it('should respects getLocalIdent option (global mode)', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            getLocalIdent() {
+              return 'foo';
+            },
+          },
+        },
+      },
+    };
+    const testId = './modules/getLocalIdent.css';
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const evaluatedModule = evaluated(module.source);
+
+    expect(evaluatedModule).toMatchSnapshot('module (evaluated)');
+    expect(evaluatedModule.locals).toMatchSnapshot('locals');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+
   it('composes should supports resolving', async () => {
     const config = {
       loader: { options: { import: true, modules: true } },
@@ -60,8 +335,9 @@ describe('modules', () => {
         test: /source\.css$/,
         options: {
           importLoaders: false,
-          modules: true,
-          localIdentName: 'b--[local]',
+          modules: {
+            localIdentName: 'b--[local]',
+          },
         },
       },
       additionalLoader: {
@@ -69,8 +345,9 @@ describe('modules', () => {
         loader: path.resolve(__dirname, '../src/index.js'),
         options: {
           importLoaders: false,
-          modules: true,
-          localIdentName: 'a--[local]',
+          modules: {
+            localIdentName: 'a--[local]',
+          },
         },
       },
     };
@@ -92,11 +369,12 @@ describe('modules', () => {
       loader: {
         test: /\.s[ca]ss$/i,
         options: {
-          modules: true,
+          modules: {
+            localIdentName: '[local]',
+            getLocalIdent: (context, localIdentName, localName) =>
+              `prefix-${localName}`,
+          },
           importLoaders: 1,
-          localIdentName: '[local]',
-          getLocalIdent: (context, localIdentName, localName) =>
-            `prefix-${localName}`,
         },
       },
       sassLoader: true,
diff --git a/test/onlyLocals-option.test.js b/test/onlyLocals-option.test.js
new file mode 100644
index 00000000..3b547342
--- /dev/null
+++ b/test/onlyLocals-option.test.js
@@ -0,0 +1,29 @@
+import { webpack } from './helpers';
+
+describe('modules', () => {
+  it('true (mode: local)', async () => {
+    const config = {
+      loader: {
+        options: {
+          modules: {
+            mode: 'local',
+            localIdentName: '_[local]',
+          },
+          onlyLocals: true,
+        },
+      },
+    };
+    const testId = `./modules/composes.css`;
+    const stats = await webpack(testId, config);
+    const { modules } = stats.toJson();
+    const module = modules.find((m) => m.id === testId);
+    const valueModule = modules.find((m) =>
+      m.id.endsWith('./modules/values.css')
+    );
+
+    expect(module.source).toMatchSnapshot('module');
+    expect(valueModule.source).toMatchSnapshot('values module');
+    expect(stats.compilation.warnings).toMatchSnapshot('warnings');
+    expect(stats.compilation.errors).toMatchSnapshot('errors');
+  });
+});
diff --git a/test/runtime/__snapshots__/url-escape.test.js.snap b/test/runtime/__snapshots__/getUrl.test.js.snap
similarity index 100%
rename from test/runtime/__snapshots__/url-escape.test.js.snap
rename to test/runtime/__snapshots__/getUrl.test.js.snap
diff --git a/test/runtime/getUrl.test.js b/test/runtime/getUrl.test.js
new file mode 100644
index 00000000..efd9f8c7
--- /dev/null
+++ b/test/runtime/getUrl.test.js
@@ -0,0 +1,19 @@
+const getUrl = require('../../src/runtime/getUrl');
+
+describe('escape', () => {
+  it('should escape url', () => {
+    expect(getUrl(true)).toMatchSnapshot();
+    expect(getUrl('image.png')).toMatchSnapshot();
+    expect(getUrl('"image.png"')).toMatchSnapshot();
+    expect(getUrl("'image.png'")).toMatchSnapshot();
+    expect(getUrl('image other.png')).toMatchSnapshot();
+    expect(getUrl('"image other.png"')).toMatchSnapshot();
+    expect(getUrl("'image other.png'")).toMatchSnapshot();
+    expect(getUrl('image"other.png')).toMatchSnapshot();
+    expect(getUrl('image\nother.png')).toMatchSnapshot();
+
+    expect(getUrl('image.png', true)).toMatchSnapshot();
+    expect(getUrl("'image other.png'", true)).toMatchSnapshot();
+    expect(getUrl('"image other.png"', true)).toMatchSnapshot();
+  });
+});
diff --git a/test/runtime/url-escape.test.js b/test/runtime/url-escape.test.js
deleted file mode 100644
index 83e33ace..00000000
--- a/test/runtime/url-escape.test.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const urlEscape = require('../../src/runtime/url-escape');
-
-describe('escape', () => {
-  it('should escape url', () => {
-    expect(urlEscape(true)).toMatchSnapshot();
-    expect(urlEscape('image.png')).toMatchSnapshot();
-    expect(urlEscape('"image.png"')).toMatchSnapshot();
-    expect(urlEscape("'image.png'")).toMatchSnapshot();
-    expect(urlEscape('image other.png')).toMatchSnapshot();
-    expect(urlEscape('"image other.png"')).toMatchSnapshot();
-    expect(urlEscape("'image other.png'")).toMatchSnapshot();
-    expect(urlEscape('image"other.png')).toMatchSnapshot();
-    expect(urlEscape('image\nother.png')).toMatchSnapshot();
-
-    expect(urlEscape('image.png', true)).toMatchSnapshot();
-    expect(urlEscape("'image other.png'", true)).toMatchSnapshot();
-    expect(urlEscape('"image other.png"', true)).toMatchSnapshot();
-  });
-});
diff --git a/test/url-option.test.js b/test/url-option.test.js
index 42c1a938..a04faa1f 100644
--- a/test/url-option.test.js
+++ b/test/url-option.test.js
@@ -62,7 +62,12 @@ describe('url option', () => {
           url: (url, resourcePath) => {
             expect(typeof resourcePath === 'string').toBe(true);
 
-            return url.includes('img.png');
+            // Don't handle `img.png`
+            if (url.includes('img.png')) {
+              return false;
+            }
+
+            return true;
           },
         },
       },
diff --git a/test/errors.test.js b/test/validate-options.test.js
similarity index 51%
rename from test/errors.test.js
rename to test/validate-options.test.js
index 10ff73e4..e9885dbf 100644
--- a/test/errors.test.js
+++ b/test/validate-options.test.js
@@ -1,6 +1,6 @@
 import loader from '../src/cjs';
 
-it('validation', () => {
+it('validate options', () => {
   const validate = (options) =>
     loader.call(
       Object.assign(
@@ -34,44 +34,71 @@ it('validation', () => {
   expect(() => validate({ modules: false })).not.toThrow();
   expect(() => validate({ modules: 'global' })).not.toThrow();
   expect(() => validate({ modules: 'local' })).not.toThrow();
+  expect(() => validate({ modules: { mode: 'local' } })).not.toThrow();
+  expect(() => validate({ modules: { mode: 'global' } })).not.toThrow();
   expect(() => validate({ modules: 'true' })).toThrowErrorMatchingSnapshot();
   expect(() => validate({ modules: 'globals' })).toThrowErrorMatchingSnapshot();
   expect(() => validate({ modules: 'locals' })).toThrowErrorMatchingSnapshot();
+  expect(() =>
+    validate({ modules: { mode: true } })
+  ).toThrowErrorMatchingSnapshot();
+  expect(() =>
+    validate({ modules: { mode: 'true' } })
+  ).toThrowErrorMatchingSnapshot();
+  expect(() =>
+    validate({ modules: { mode: 'locals' } })
+  ).toThrowErrorMatchingSnapshot();
+  expect(() =>
+    validate({ modules: { mode: 'globals' } })
+  ).toThrowErrorMatchingSnapshot();
 
   expect(() =>
-    validate({ localIdentName: '[path][name]__[local]--[hash:base64:5]' })
+    validate({
+      modules: { localIdentName: '[path][name]__[local]--[hash:base64:5]' },
+    })
   ).not.toThrow();
   expect(() =>
-    validate({ localIdentName: true })
+    validate({ modules: { localIdentName: true } })
   ).toThrowErrorMatchingSnapshot();
 
-  expect(() => validate({ localIdentRegExp: 'page-(.*)\\.js' })).not.toThrow();
-  expect(() => validate({ localIdentRegExp: /page-(.*)\.js/ })).not.toThrow();
+  expect(() => validate({ modules: { context: 'context' } })).not.toThrow();
   expect(() =>
-    validate({ localIdentRegExp: true })
+    validate({ modules: { context: true } })
   ).toThrowErrorMatchingSnapshot();
 
-  expect(() => validate({ context: 'context' })).not.toThrow();
-  expect(() => validate({ context: true })).toThrowErrorMatchingSnapshot();
+  expect(() => validate({ modules: { hashPrefix: 'hash' } })).not.toThrow();
+  expect(() =>
+    validate({ modules: { hashPrefix: true } })
+  ).toThrowErrorMatchingSnapshot();
 
-  expect(() => validate({ hashPrefix: 'hash' })).not.toThrow();
-  expect(() => validate({ hashPrefix: true })).toThrowErrorMatchingSnapshot();
+  expect(() =>
+    validate({ modules: { getLocalIdent: () => {} } })
+  ).not.toThrow();
+  expect(() => validate({ modules: { getLocalIdent: false } })).not.toThrow();
+  expect(() =>
+    validate({ modules: { getLocalIdent: [] } })
+  ).toThrowErrorMatchingSnapshot();
 
-  expect(() => validate({ getLocalIdent: () => {} })).not.toThrow();
-  expect(() => validate({ getLocalIdent: false })).not.toThrow();
-  expect(() => validate({ getLocalIdent: [] })).toThrowErrorMatchingSnapshot();
+  expect(() =>
+    validate({ modules: { localIdentRegExp: 'page-(.*)\\.js' } })
+  ).not.toThrow();
+  expect(() =>
+    validate({ modules: { localIdentRegExp: /page-(.*)\.js/ } })
+  ).not.toThrow();
+  expect(() =>
+    validate({ modules: { localIdentRegExp: true } })
+  ).toThrowErrorMatchingSnapshot();
 
   expect(() => validate({ sourceMap: true })).not.toThrow();
   expect(() => validate({ sourceMap: false })).not.toThrow();
   expect(() => validate({ sourceMap: 'true' })).toThrowErrorMatchingSnapshot();
 
-  expect(() => validate({ camelCase: true })).not.toThrow();
-  expect(() => validate({ camelCase: false })).not.toThrow();
-  expect(() => validate({ camelCase: 'dashes' })).not.toThrow();
-  expect(() => validate({ camelCase: 'only' })).not.toThrow();
-  expect(() => validate({ camelCase: 'dashesOnly' })).not.toThrow();
+  expect(() => validate({ localsConvention: 'camelCase' })).not.toThrow();
+  expect(() => validate({ localsConvention: 'camelCaseOnly' })).not.toThrow();
+  expect(() => validate({ localsConvention: 'dashes' })).not.toThrow();
+  expect(() => validate({ localsConvention: 'dashesOnly' })).not.toThrow();
   expect(() =>
-    validate({ camelCase: 'unknown' })
+    validate({ localsConvention: 'unknown' })
   ).toThrowErrorMatchingSnapshot();
 
   expect(() => validate({ importLoaders: false })).not.toThrow();
@@ -80,9 +107,7 @@ it('validation', () => {
   expect(() => validate({ importLoaders: 2 })).not.toThrow();
   expect(() => validate({ importLoaders: '1' })).toThrowErrorMatchingSnapshot();
 
-  expect(() => validate({ exportOnlyLocals: true })).not.toThrow();
-  expect(() => validate({ exportOnlyLocals: false })).not.toThrow();
-  expect(() =>
-    validate({ exportOnlyLocals: 'true' })
-  ).toThrowErrorMatchingSnapshot();
+  expect(() => validate({ onlyLocals: true })).not.toThrow();
+  expect(() => validate({ onlyLocals: false })).not.toThrow();
+  expect(() => validate({ onlyLocals: 'true' })).toThrowErrorMatchingSnapshot();
 });